Pixiv Downloader

Pixiv | Danbooru | Rule34 | Yande. Download artworks with one click. Batch download artworks or download by tags. Convert ugoira formats: Gif | Apng | Webp | Webm | MP4. Customize image file name, save path. Save / export download history.

As of 2024-10-14. See the latest version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name               Pixiv Downloader
// @namespace          https://greasyfork.org/zh-CN/scripts/432150
// @version            1.3.1
// @author             ruaruarua
// @description        Pixiv | Danbooru | Rule34 | Yande. 一键下载各页面原图。批量下载画师作品,按作品标签下载。转换动图格式:Gif | Apng | Webp | Webm | MP4。自定义图片文件名,保存路径。保留 / 导出下载历史。
// @description:zh-TW  Pixiv | Danbooru | Rule34 | Yande. 一鍵下載各頁面原圖。批次下載畫師作品,按作品標籤下載。轉換動圖格式:Gif | Apng | Webp | Webm | MP4。自定義圖片檔名,儲存路徑。保留 / 匯出下載歷史。
// @description:en     Pixiv | Danbooru | Rule34 | Yande. Download artworks with one click. Batch download artworks or download by tags. Convert ugoira formats: Gif | Apng | Webp | Webm | MP4. Customize image file name, save path. Save / export download history.
// @license            MIT
// @icon               https://www.pixiv.net/favicon.ico
// @supportURL         https://github.com/drunkg00se/Pixiv-Downloader/issues
// @match              https://www.pixiv.net/*
// @match              https://rule34.xxx/*
// @match              https://danbooru.donmai.us/*
// @match              https://yande.re/*
// @match              https://booru.allthefallen.moe/*
// @require            https://unpkg.com/[email protected]/dist/dexie.min.js
// @require            https://unpkg.com/[email protected]/dist/jszip.min.js
// @require            https://unpkg.com/[email protected]/dist/gif.js
// @require            https://unpkg.com/[email protected]/dayjs.min.js
// @resource           ../wasm/toWebpWorker?raw    https://update.greasyfork.org/scripts/500281/1409041/libwebp_wasm.js
// @resource           gif.js/dist/gif.worker?raw  https://unpkg.com/[email protected]/dist/gif.worker.js
// @resource           pako/dist/pako.js?raw       https://unpkg.com/[email protected]/dist/pako.min.js
// @resource           upng-js?raw                 https://unpkg.com/[email protected]/UPNG.js
// @connect            i.pximg.net
// @connect            source.pixiv.net
// @connect            rule34.xxx
// @connect            donmai.us
// @connect            yande.re
// @connect            allthefallen.moe
// @grant              GM_download
// @grant              GM_getResourceText
// @grant              GM_info
// @grant              GM_registerMenuCommand
// @grant              GM_xmlhttpRequest
// @grant              unsafeWindow
// @noframes
// ==/UserScript==

(t=>{const r=new CSSStyleSheet;r.replaceSync(t),window._pdlShadowStyle=r})(` .anim-indeterminate.svelte-12wvf64{transform-origin:0% 50%;animation:svelte-12wvf64-anim-indeterminate 2s infinite linear}@keyframes svelte-12wvf64-anim-indeterminate{0%{transform:translate(0) scaleX(0)}40%{transform:translate(0) scaleX(.4)}to{transform:translate(100%) scaleX(.5)}}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}:host [data-theme=skeleton],:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}:host [data-theme=skeleton]{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h3{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}dl,dd,h1,h3,hr,figure,p{margin:0}fieldset{margin:0;padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[type=text],input:where(:not([type])),[type=email],[type=url],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=week],[multiple],textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:8px 12px;font-size:16px;line-height:24px;--tw-shadow: 0 0 #0000}[type=text]:focus,input:where(:not([type])):focus,[type=email]:focus,[type=url]:focus,[type=password]:focus,[type=number]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=month]:focus,[type=search]:focus,[type=tel]:focus,[type=time]:focus,[type=week]:focus,[multiple]:focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right 8px center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:40px;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:12px;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:16px;width:16px;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}[type=checkbox]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media (forced-colors: active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:hover,[type=checkbox]:checked:focus,[type=radio]:checked:hover,[type=radio]:checked:focus{border-color:transparent;background-color:currentColor}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media (forced-colors: active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:hover,[type=checkbox]:indeterminate:focus{border-color:transparent;background-color:currentColor}[type=file]{background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:host [data-theme=skeleton]{background-color:rgb(var(--color-surface-50));font-size:16px;line-height:24px;font-family:var(--theme-font-family-base);color:rgba(var(--theme-font-color-base))}:host .dark [data-theme=skeleton]{background-color:rgb(var(--color-surface-900));color:rgba(var(--theme-font-color-dark))}::-moz-selection{background-color:rgb(var(--color-primary-500) / .3)}::selection{background-color:rgb(var(--color-primary-500) / .3)}:host [data-theme=skeleton]{-webkit-tap-highlight-color:rgba(128,128,128,.5);scrollbar-color:rgba(0,0,0,.2) rgba(255,255,255,.05)}:host [data-theme=skeleton]{scrollbar-color:rgba(128,128,128,.5) rgba(0,0,0,.1);scrollbar-width:thin}:host.dark{scrollbar-color:rgba(255,255,255,.1) rgba(0,0,0,.05)}hr:not(.divider){display:block;border-top-width:1px;border-style:solid;border-color:rgb(var(--color-surface-300))}.dark hr:not(.divider){border-color:rgb(var(--color-surface-600))}fieldset,label{display:block}::-moz-placeholder{color:rgb(var(--color-surface-500))}::placeholder{color:rgb(var(--color-surface-500))}.dark ::-moz-placeholder{color:rgb(var(--color-surface-400))}.dark ::placeholder{color:rgb(var(--color-surface-400))}:is(.dark input::-webkit-calendar-picker-indicator){--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath d='M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z'/%3E%3C/svg%3E") no-repeat 50% 50%;pointer-events:none;height:16px;width:16px;border-radius:9999px;background-size:contain;opacity:0}input[type=search]:focus::-webkit-search-cancel-button{pointer-events:auto;opacity:1}:is(.dark input[type=search]::-webkit-search-cancel-button){--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}progress{webkit-appearance:none;-moz-appearance:none;-webkit-appearance:none;appearance:none;height:8px;width:100%;overflow:hidden;border-radius:var(--theme-rounded-base);background-color:rgb(var(--color-surface-400))}.dark progress{background-color:rgb(var(--color-surface-500))}progress::-webkit-progress-bar{background-color:rgb(var(--color-surface-400))}.dark progress::-webkit-progress-bar{background-color:rgb(var(--color-surface-500))}progress::-webkit-progress-value{background-color:rgb(var(--color-surface-900))}.dark progress::-webkit-progress-value{background-color:rgb(var(--color-surface-50))}::-moz-progress-bar{background-color:rgb(var(--color-surface-900))}.dark ::-moz-progress-bar{background-color:rgb(var(--color-surface-50))}:indeterminate::-moz-progress-bar{width:0}input[type=file]:not(.file-dropzone-input)::file-selector-button:disabled{cursor:not-allowed;opacity:.5}input[type=file]:not(.file-dropzone-input)::file-selector-button:disabled:hover{--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}input[type=file]:not(.file-dropzone-input)::file-selector-button:disabled:active{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}input[type=file]:not(.file-dropzone-input)::file-selector-button{font-size:14px;line-height:20px;padding:6px 12px;white-space:nowrap;text-align:center;display:inline-flex;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-radius:var(--theme-rounded-base);background-color:rgb(var(--color-surface-900));color:rgb(var(--color-surface-50));margin-right:8px;border-width:0px}input[type=file]:not(.file-dropzone-input)::file-selector-button>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}input[type=file]:not(.file-dropzone-input)::file-selector-button:hover{--tw-brightness: brightness(1.15);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}input[type=file]:not(.file-dropzone-input)::file-selector-button:active{--tw-scale-x: 95%;--tw-scale-y: 95%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.dark input[type=file]:not(.file-dropzone-input)::file-selector-button{background-color:rgb(var(--color-surface-50));color:rgb(var(--color-surface-900))}[type=range]{width:100%;accent-color:rgb(var(--color-surface-900) / 1)}:is(.dark [type=range]){accent-color:rgb(var(--color-surface-50) / 1)}[data-sort]{cursor:pointer}[data-sort]:hover:hover,.dark [data-sort]:hover:hover{background-color:rgb(var(--color-primary-500) / .1)}[data-sort]:after{margin-left:8px!important;opacity:0;--tw-content: "\u2193" !important;content:var(--tw-content)!important}[data-popup]{position:absolute;top:0;left:0;display:none;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:host [data-theme=skeleton]{--theme-font-family-base: system-ui;--theme-font-family-heading: system-ui;--theme-font-color-base: 0 0 0;--theme-font-color-dark: 255 255 255;--theme-rounded-base: 9999px;--theme-rounded-container: 8px;--theme-border-base: 1px;--on-primary: 0 0 0;--on-secondary: 255 255 255;--on-tertiary: 0 0 0;--on-success: 0 0 0;--on-warning: 0 0 0;--on-error: 255 255 255;--on-surface: 255 255 255;--color-primary-50: 219 245 236;--color-primary-100: 207 241 230;--color-primary-200: 195 238 224;--color-primary-300: 159 227 205;--color-primary-400: 87 207 167;--color-primary-500: 15 186 129;--color-primary-600: 14 167 116;--color-primary-700: 11 140 97;--color-primary-800: 9 112 77;--color-primary-900: 7 91 63;--color-secondary-50: 229 227 251;--color-secondary-100: 220 218 250;--color-secondary-200: 211 209 249;--color-secondary-300: 185 181 245;--color-secondary-400: 132 126 237;--color-secondary-500: 79 70 229;--color-secondary-600: 71 63 206;--color-secondary-700: 59 53 172;--color-secondary-800: 47 42 137;--color-secondary-900: 39 34 112;--color-tertiary-50: 219 242 252;--color-tertiary-100: 207 237 251;--color-tertiary-200: 195 233 250;--color-tertiary-300: 159 219 246;--color-tertiary-400: 86 192 240;--color-tertiary-500: 14 165 233;--color-tertiary-600: 13 149 210;--color-tertiary-700: 11 124 175;--color-tertiary-800: 8 99 140;--color-tertiary-900: 7 81 114;--color-success-50: 237 247 220;--color-success-100: 230 245 208;--color-success-200: 224 242 197;--color-success-300: 206 235 162;--color-success-400: 169 219 92;--color-success-500: 132 204 22;--color-success-600: 119 184 20;--color-success-700: 99 153 17;--color-success-800: 79 122 13;--color-success-900: 65 100 11;--color-warning-50: 252 244 218;--color-warning-100: 251 240 206;--color-warning-200: 250 236 193;--color-warning-300: 247 225 156;--color-warning-400: 240 202 82;--color-warning-500: 234 179 8;--color-warning-600: 211 161 7;--color-warning-700: 176 134 6;--color-warning-800: 140 107 5;--color-warning-900: 115 88 4;--color-error-50: 249 221 234;--color-error-100: 246 209 228;--color-error-200: 244 198 221;--color-error-300: 238 163 200;--color-error-400: 225 94 159;--color-error-500: 212 25 118;--color-error-600: 191 23 106;--color-error-700: 159 19 89;--color-error-800: 127 15 71;--color-error-900: 104 12 58;--color-surface-50: 228 230 238;--color-surface-100: 219 222 233;--color-surface-200: 210 214 227;--color-surface-300: 182 189 210;--color-surface-400: 128 140 177;--color-surface-500: 73 90 143;--color-surface-600: 66 81 129;--color-surface-700: 55 68 107;--color-surface-800: 44 54 86;--color-surface-900: 36 44 70}[data-theme=skeleton] h1,[data-theme=skeleton] h3{font-weight:700}[data-theme=skeleton]{background-image:radial-gradient(at 0% 0%,rgba(var(--color-secondary-500) / .33) 0px,transparent 50%),radial-gradient(at 98% 1%,rgba(var(--color-error-500) / .33) 0px,transparent 50%);background-attachment:fixed;background-position:center;background-repeat:no-repeat;background-size:cover}*{scrollbar-color:initial;scrollbar-width:initial}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.hide-scrollbar::-webkit-scrollbar{display:none}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.h3{font-size:20px;line-height:28px;font-family:var(--theme-font-family-heading)}.anchor{--tw-text-opacity: 1;color:rgb(var(--color-primary-700) / var(--tw-text-opacity));text-decoration-line:underline}.anchor:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .anchor){--tw-text-opacity: 1;color:rgb(var(--color-primary-500) / var(--tw-text-opacity))}.time{font-size:14px;line-height:20px;--tw-text-opacity: 1;color:rgb(var(--color-surface-500) / var(--tw-text-opacity))}:is(.dark .time){--tw-text-opacity: 1;color:rgb(var(--color-surface-400) / var(--tw-text-opacity))}.code{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;line-height:16px;--tw-text-opacity: 1;color:rgb(var(--color-primary-700) / var(--tw-text-opacity));background-color:rgb(var(--color-primary-500) / .3);border-radius:4px;padding:2px 4px}:is(.dark .code){--tw-text-opacity: 1;color:rgb(var(--color-primary-400) / var(--tw-text-opacity));background-color:rgb(var(--color-primary-500) / .2)}.del{position:relative;display:block;padding:2px 2px 2px 20px;text-decoration:none}.del:before{position:absolute;left:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.del:before{content:"\u2212"}.del{--tw-bg-opacity: 1;background-color:rgb(var(--color-error-500) / var(--tw-bg-opacity));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;color:rgb(var(--on-error))}.alert{display:flex;flex-direction:column;align-items:flex-start;padding:16px;color:rgb(var(--color-surface-900));border-radius:var(--theme-rounded-container)}.alert>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(16px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(16px * var(--tw-space-y-reverse))}.dark .alert{color:rgb(var(--color-surface-50))}.\\!btn:disabled{cursor:not-allowed!important;opacity:.5!important}.btn:disabled,.btn-icon:disabled,.btn-group>*:disabled{cursor:not-allowed!important;opacity:.5!important}.\\!btn:disabled:hover{--tw-brightness: brightness(1) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.btn:disabled:hover,.btn-icon:disabled:hover,.btn-group>*:disabled:hover{--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!btn:disabled:active{--tw-scale-x: 1 !important;--tw-scale-y: 1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.btn:disabled:active,.btn-icon:disabled:active,.btn-group>*:disabled:active{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\\!btn{font-size:16px!important;line-height:24px!important;padding:9px 20px!important;white-space:nowrap!important;text-align:center!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important;border-radius:var(--theme-rounded-base)!important}.btn{font-size:16px;line-height:24px;padding:9px 20px;white-space:nowrap;text-align:center;display:inline-flex;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;border-radius:var(--theme-rounded-base)}.\\!btn>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(8px * var(--tw-space-x-reverse))!important;margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))!important}.btn>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.\\!btn:hover{--tw-brightness: brightness(1.15) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.btn:hover{--tw-brightness: brightness(1.15);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!btn:active{--tw-scale-x: 95% !important;--tw-scale-y: 95% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important;--tw-brightness: brightness(.9) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.btn:active{--tw-scale-x: 95%;--tw-scale-y: 95%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.btn-sm{padding:6px 12px;font-size:14px;line-height:20px}.btn-icon{font-size:16px;line-height:24px;white-space:nowrap;text-align:center;display:inline-flex;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;padding:0;aspect-ratio:1 / 1;width:43px;border-radius:9999px}.btn-icon>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.btn-icon:hover{--tw-brightness: brightness(1.15);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.btn-icon:active{--tw-scale-x: 95%;--tw-scale-y: 95%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.btn-icon-sm{aspect-ratio:1 / 1;width:33px;font-size:14px;line-height:20px}.btn-group{display:inline-flex;flex-direction:row;overflow:hidden;border-radius:var(--theme-rounded-base);isolation:isolate}.btn-group>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.btn-group button,.btn-group a{font-size:16px;line-height:24px;padding:9px 20px;white-space:nowrap;text-align:center;display:inline-flex;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:inherit!important;text-decoration-line:none!important}.btn-group button>:not([hidden])~:not([hidden]),.btn-group a>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.btn-group button:hover,.btn-group a:hover{--tw-brightness: brightness(1.15);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);background-color:rgb(var(--color-surface-50) / 3%)}.btn-group button:active,.btn-group a:active{background-color:rgb(var(--color-surface-900) / 3%)}.btn-group>*+*{border-top-width:0px;border-left-width:1px;border-color:rgb(var(--color-surface-500) / .2)}.card{background-color:rgb(var(--color-surface-100));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-inset: inset;--tw-ring-color: rgb(23 23 23 / .05);border-radius:var(--theme-rounded-container)}.dark .card{background-color:rgb(var(--color-surface-800));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-inset: inset;--tw-ring-color: rgb(250 250 250 / .05)}a.card{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}a.card:hover{--tw-brightness: brightness(1.05);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!chip{cursor:pointer!important;white-space:nowrap!important;padding:6px 12px!important;text-align:center!important;font-size:12px!important;line-height:16px!important;border-radius:4px!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.chip{cursor:pointer;white-space:nowrap;padding:6px 12px;text-align:center;font-size:12px;line-height:16px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\\!chip>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(8px * var(--tw-space-x-reverse))!important;margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))!important}.chip>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}a.chip:hover,button.chip:hover{--tw-brightness: brightness(1.15);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}a.\\!chip:hover,button.\\!chip:hover{--tw-brightness: brightness(1.15) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.\\!chip:disabled{cursor:not-allowed!important;opacity:.5!important}.chip:disabled{cursor:not-allowed!important;opacity:.5!important}.\\!chip:disabled:active{--tw-scale-x: 1 !important;--tw-scale-y: 1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.chip:disabled:active{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.label>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.\\!input{width:100%!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.2s!important;background-color:rgb(var(--color-surface-200))!important;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;border-width:var(--theme-border-base)!important;border-color:rgb(var(--color-surface-400))!important}.input,.textarea,.select,.input-group{width:100%;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;background-color:rgb(var(--color-surface-200));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;border-width:var(--theme-border-base);border-color:rgb(var(--color-surface-400))}.dark .input,.dark .textarea,.dark .select,.dark .input-group{background-color:rgb(var(--color-surface-700));border-color:rgb(var(--color-surface-500))}.dark .\\!input{background-color:rgb(var(--color-surface-700))!important;border-color:rgb(var(--color-surface-500))!important}.\\!input:hover{--tw-brightness: brightness(1.05) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.input:hover,.textarea:hover,.select:hover,.input-group:hover{--tw-brightness: brightness(1.05);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!input:focus{--tw-brightness: brightness(1.05) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.input:focus,.textarea:focus,.select:focus,.input-group:focus{--tw-brightness: brightness(1.05);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!input:focus-within{--tw-border-opacity: 1 !important;border-color:rgb(var(--color-primary-500) / var(--tw-border-opacity))!important}.input:focus-within,.textarea:focus-within,.select:focus-within,.input-group:focus-within{--tw-border-opacity: 1;border-color:rgb(var(--color-primary-500) / var(--tw-border-opacity))}.\\!input{border-radius:var(--theme-rounded-base)!important}.input,.input-group{border-radius:var(--theme-rounded-base)}.textarea,.select{border-radius:var(--theme-rounded-container)}.select>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.select{padding:8px 32px 8px 8px}.select[size]{background-image:none}.select optgroup>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.select optgroup{font-weight:700}.select optgroup option{margin-left:0;padding-left:0}.select optgroup option:first-of-type{margin-top:12px}.select optgroup option:last-child{margin-bottom:12px!important}.select option{cursor:pointer;padding:8px 16px;background-color:rgb(var(--color-surface-200));border-radius:var(--theme-rounded-base)}.dark .select option{background-color:rgb(var(--color-surface-700))}.select option:checked{background:rgb(var(--color-primary-500)) linear-gradient(0deg,rgb(var(--color-primary-500)),rgb(var(--color-primary-500)));color:rgb(var(--on-primary))}.checkbox,.radio{height:20px;width:20px;cursor:pointer;border-radius:4px;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;background-color:rgb(var(--color-surface-200));border-width:var(--theme-border-base);border-color:rgb(var(--color-surface-400))}.dark .checkbox,.dark .radio{background-color:rgb(var(--color-surface-700));border-color:rgb(var(--color-surface-500))}.checkbox:hover,.radio:hover{--tw-brightness: brightness(1.05);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox:focus,.radio:focus{--tw-brightness: brightness(1.05);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);--tw-border-opacity: 1;border-color:rgb(var(--color-primary-500) / var(--tw-border-opacity))}.checkbox:checked,.checkbox:indeterminate,.radio:checked{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))}.checkbox:checked:hover,.checkbox:indeterminate:hover,.radio:checked:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))}.checkbox:checked:focus,.checkbox:indeterminate:focus,.radio:checked:focus{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.radio{border-radius:var(--theme-rounded-base)}.\\!input[type=file]{padding:4px!important}.input[type=file]{padding:4px}.\\!input[type=color]{height:40px!important;width:40px!important;cursor:pointer!important;overflow:hidden!important;border-style:none!important;border-radius:var(--theme-rounded-base)!important;-webkit-appearance:none!important}.input[type=color]{height:40px;width:40px;cursor:pointer;overflow:hidden;border-style:none;border-radius:var(--theme-rounded-base);-webkit-appearance:none}.\\!input[type=color]::-webkit-color-swatch-wrapper{padding:0!important}.input[type=color]::-webkit-color-swatch-wrapper{padding:0}.\\!input[type=color]::-webkit-color-swatch{border-style:none!important}.input[type=color]::-webkit-color-swatch{border-style:none}.\\!input[type=color]::-webkit-color-swatch:hover{--tw-brightness: brightness(1.1) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.input[type=color]::-webkit-color-swatch:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.\\!input[type=color]::-moz-color-swatch{border-style:none!important}.input[type=color]::-moz-color-swatch{border-style:none}.\\!input:disabled{cursor:not-allowed!important;opacity:.5!important}.input:disabled,.textarea:disabled,.select:disabled,.input-group>input:disabled,.input-group>textarea:disabled,.input-group>select:disabled{cursor:not-allowed!important;opacity:.5!important}.\\!input:disabled:hover{--tw-brightness: brightness(1) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.input:disabled:hover,.textarea:disabled:hover,.select:disabled:hover,.input-group>input:disabled:hover,.input-group>textarea:disabled:hover,.input-group>select:disabled:hover{--tw-brightness: brightness(1) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.\\!input[readonly],.input[readonly],.textarea[readonly],.select[readonly]{cursor:not-allowed!important;border-color:transparent!important}.\\!input[readonly]:hover,.input[readonly]:hover,.textarea[readonly]:hover,.select[readonly]:hover{--tw-brightness: brightness(1) !important;filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}.input-group{display:grid;overflow:hidden}.input-group input,.input-group select{border-width:0px;background-color:transparent;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.input-group select option{background-color:rgb(var(--color-surface-200))}.dark .input-group select option{background-color:rgb(var(--color-surface-700))}.input-group div,.input-group a,.input-group button{display:flex;align-items:center;justify-content:space-between;padding-left:16px;padding-right:16px}.input-group-divider input,.input-group-divider select,.input-group-divider div,.input-group-divider a{border-left-width:1px;border-color:rgb(var(--color-surface-400));--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;min-width:-moz-fit-content!important;min-width:fit-content!important}.dark .input-group-divider input,.dark .input-group-divider select,.dark .input-group-divider div,.dark .input-group-divider a{border-color:rgb(var(--color-surface-500))}.input-group-divider input:focus,.input-group-divider select:focus,.input-group-divider div:focus,.input-group-divider a:focus{border-color:rgb(var(--color-surface-400))}.dark .input-group-divider input:focus,.dark .input-group-divider select:focus,.dark .input-group-divider div:focus,.dark .input-group-divider a:focus{border-color:rgb(var(--color-surface-500))}.input-group-divider *:first-child{border-left-width:0px!important}.input-group-shim{background-color:rgb(var(--color-surface-400) / .1);color:rgb(var(--color-surface-600))}.dark .input-group-shim{color:rgb(var(--color-surface-300))}.input-error{--tw-border-opacity: 1;border-color:rgb(var(--color-error-500) / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(var(--color-error-200) / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(var(--color-error-500) / var(--tw-text-opacity))}:is(.dark .input-error){--tw-border-opacity: 1;border-color:rgb(var(--color-error-500) / var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgb(var(--color-error-200) / var(--tw-bg-opacity));--tw-text-opacity: 1;color:rgb(var(--color-error-500) / var(--tw-text-opacity))}.input-error::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--color-error-500) / var(--tw-text-opacity))}.input-error::placeholder{--tw-text-opacity: 1;color:rgb(var(--color-error-500) / var(--tw-text-opacity))}.list{list-style-type:none}.list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.list li{display:flex;align-items:center;border-radius:var(--theme-rounded-base)}.list li>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(16px * var(--tw-space-x-reverse));margin-left:calc(16px * calc(1 - var(--tw-space-x-reverse)))}.placeholder{height:20px;background-color:rgb(var(--color-surface-300));border-radius:var(--theme-rounded-base)}.dark .placeholder{background-color:rgb(var(--color-surface-600))}.w-modal{width:100%;max-width:640px}.modal *:focus:not([tabindex="-1"]):not(.input):not(.textarea):not(.select):not(.input-group):not(.input-group input){outline-style:auto;outline-color:-webkit-focus-ring-color}.variant-filled{background-color:rgb(var(--color-surface-900));color:rgb(var(--color-surface-50))}.dark .variant-filled{background-color:rgb(var(--color-surface-50));color:rgb(var(--color-surface-900))}.\\!variant-filled-primary{--tw-bg-opacity: 1 !important;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))!important;color:rgb(var(--on-primary))!important}.variant-filled-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity));color:rgb(var(--on-primary))}:is(.dark .variant-filled-primary){--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity));color:rgb(var(--on-primary))}:is(.dark .\\!variant-filled-primary){--tw-bg-opacity: 1 !important;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))!important;color:rgb(var(--on-primary))!important}.variant-ghost-surface{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-inset: inset;--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-surface-500) / var(--tw-ring-opacity));background-color:rgb(var(--color-surface-500) / .2)}:is(.dark .variant-ghost-surface){--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-surface-500) / var(--tw-ring-opacity));background-color:rgb(var(--color-surface-500) / .2)}.variant-soft,.variant-soft-surface{background-color:rgb(var(--color-surface-400) / .2);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;color:rgb(var(--color-surface-700))}.dark .variant-soft,.dark .variant-soft-surface{color:rgb(var(--color-surface-200))}:is(.dark .variant-soft),:is(.dark .variant-soft-surface){background-color:rgb(var(--color-surface-500) / .2)}@media (min-width: 768px){.h3{font-size:24px;line-height:32px}}@media (min-width: 1024px){.alert{flex-direction:row;align-items:center}.alert>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse));--tw-space-x-reverse: 0;margin-right:calc(16px * var(--tw-space-x-reverse));margin-left:calc(16px * calc(1 - var(--tw-space-x-reverse)))}}.modal *:focus:not([tabindex="-1"]):not(.input):not(.textarea):not(.select):not(.input-group):not(.input-group input){outline-width:0px!important}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.\\!absolute{position:absolute!important}.absolute{position:absolute}.relative{position:relative}.bottom-0{bottom:0}.bottom-24{bottom:96px}.left-0{left:0}.left-1\\/2{left:50%}.right-0{right:0}.right-2{right:8px}.right-20{right:80px}.right-4{right:16px}.top-0{top:0}.top-1\\/2{top:50%}.top-2{top:8px}.top-36{top:144px}.-z-10{z-index:-10}.z-\\[999\\]{z-index:999}.row-span-2{grid-row:span 2 / span 2}.row-start-1{grid-row-start:1}.\\!m-0{margin:0!important}.m-auto{margin:auto}.mx-2{margin-left:8px;margin-right:8px}.my-4{margin-top:16px;margin-bottom:16px}.my-\\[1px\\]{margin-top:1px;margin-bottom:1px}.ml-1{margin-left:4px}.ml-3{margin-left:12px}.ml-4{margin-left:16px}.mr-2{margin-right:8px}.mr-6{margin-right:24px}.mt-2{margin-top:8px}.mt-4{margin-top:16px}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-14{width:56px;height:56px}.size-full{width:100%;height:100%}.h-0{height:0px}.h-10{height:40px}.h-2{height:8px}.h-4{height:16px}.h-48{height:192px}.h-6{height:24px}.h-8{height:32px}.h-\\[38px\\]{height:38px}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-screen{height:100vh}.max-h-\\[200px\\]{max-height:200px}.min-h-0{min-height:0px}.min-h-full{min-height:100%}.w-0{width:0px}.w-12{width:48px}.w-16{width:64px}.w-20{width:80px}.w-32{width:128px}.w-36{width:144px}.w-48{width:192px}.w-5{width:20px}.w-6{width:24px}.w-8{width:32px}.w-\\[140px\\]{width:140px}.w-\\[38px\\]{width:38px}.w-\\[50\\%\\]{width:50%}.w-\\[600px\\]{width:600px}.w-full{width:100%}.w-screen{width:100vw}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.basis-0{flex-basis:0px}.origin-\\[50\\%_50\\%\\]{transform-origin:50% 50%}.-translate-x-1\\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\\[calc\\(100\\%-44px\\)\\]{--tw-translate-x: calc(100% - 44px) ;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\\[0\\.8\\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\\!transform-none{transform:none!important}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.\\!cursor-default{cursor:default!important}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-\\[0px_1fr\\]{grid-template-columns:0px 1fr}.grid-cols-\\[140px_1fr\\]{grid-template-columns:140px 1fr}.grid-cols-\\[auto_1fr_auto\\]{grid-template-columns:auto 1fr auto}.grid-cols-\\[auto_1fr_auto_auto\\]{grid-template-columns:auto 1fr auto auto}.grid-rows-\\[0fr\\]{grid-template-rows:0fr}.grid-rows-\\[1fr\\]{grid-template-rows:1fr}.grid-rows-\\[auto_1fr\\]{grid-template-rows:auto 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.\\!items-stretch{align-items:stretch!important}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-evenly{justify-content:space-evenly}.gap-1{gap:4px}.gap-14{gap:56px}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(16px * var(--tw-space-x-reverse));margin-left:calc(16px * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(4px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(4px * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(8px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(8px * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(16px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(16px * var(--tw-space-y-reverse))}.divide-y-\\[1px\\]>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:4px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:8px}.rounded-md{border-radius:6px}.rounded-none{border-radius:0}.rounded-e-\\[4px\\]{border-start-end-radius:4px;border-end-end-radius:4px}.rounded-s-full{border-start-start-radius:9999px;border-end-start-radius:9999px}.border{border-width:1px}.border-0{border-width:0px}.\\!border-t-0{border-top-width:0px!important}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.\\!border-surface-700{--tw-border-opacity: 1 !important;border-color:rgb(var(--color-surface-700) / var(--tw-border-opacity))!important}.border-surface-400\\/20{border-color:rgb(var(--color-surface-400) / .2)}.bg-primary-500{--tw-bg-opacity: 1;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))}.bg-primary-500\\/30{background-color:rgb(var(--color-primary-500) / .3)}.bg-surface-400{--tw-bg-opacity: 1;background-color:rgb(var(--color-surface-400) / var(--tw-bg-opacity))}.bg-surface-400\\/20{background-color:rgb(var(--color-surface-400) / .2)}.bg-surface-900{--tw-bg-opacity: 1;background-color:rgb(var(--color-surface-900) / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\\/30{background-color:#ffffff4d}.bg-white\\/75{background-color:#ffffffbf}.bg-scroll{background-attachment:scroll}.fill-current{fill:currentColor}.fill-primary-500{fill:rgb(var(--color-primary-500) / 1)}.fill-slate-700{fill:#334155}.fill-transparent{fill:transparent}.stroke-primary-500{stroke:rgb(var(--color-primary-500) / 1)}.stroke-primary-500\\/30{stroke:rgb(var(--color-primary-500) / .3)}.stroke-surface-500\\/30{stroke:rgb(var(--color-surface-500) / .3)}.stroke-surface-900{stroke:rgb(var(--color-surface-900) / 1)}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.\\!p-0{padding:0!important}.p-0{padding:0}.p-1{padding:4px}.p-2{padding:8px}.p-4{padding:16px}.\\!px-1{padding-left:4px!important;padding-right:4px!important}.\\!py-2{padding-top:8px!important;padding-bottom:8px!important}.\\!py-\\[7px\\]{padding-top:7px!important;padding-bottom:7px!important}.px-3{padding-left:12px;padding-right:12px}.px-4{padding-left:16px;padding-right:16px}.px-8{padding-left:32px;padding-right:32px}.py-1{padding-top:4px;padding-bottom:4px}.py-2{padding-top:8px;padding-bottom:8px}.py-6{padding-top:24px;padding-bottom:24px}.pb-6{padding-bottom:24px}.pl-6{padding-left:24px}.pr-0{padding-right:0}.pr-2{padding-right:8px}.pr-4{padding-right:16px}.pr-6{padding-right:24px}.pt-4{padding-top:16px}.text-center{text-align:center}.text-2xl{font-size:24px;line-height:32px}.text-\\[12px\\]{font-size:12px}.text-base{font-size:16px;line-height:24px}.text-sm{font-size:14px;line-height:20px}.text-xs{font-size:12px;line-height:16px}.font-bold{font-weight:700}.italic{font-style:italic}.leading-\\[14px\\]{line-height:14px}.leading-loose{line-height:2}.\\!text-error-500{--tw-text-opacity: 1 !important;color:rgb(var(--color-error-500) / var(--tw-text-opacity))!important}.text-error-500{--tw-text-opacity: 1;color:rgb(var(--color-error-500) / var(--tw-text-opacity))}.text-surface-400{--tw-text-opacity: 1;color:rgb(var(--color-surface-400) / var(--tw-text-opacity))}.underline-offset-2{text-underline-offset:2px}.accent-surface-900{accent-color:rgb(var(--color-surface-900) / 1)}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.mix-blend-hard-light{mix-blend-mode:hard-light}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.-outline-offset-\\[3px\\]{outline-offset:-3px}.\\!ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\\[1px\\]{--tw-blur: blur(1px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-xl{--tw-drop-shadow: drop-shadow(0 20px 13px rgb(0 0 0 / .03)) drop-shadow(0 8px 5px rgb(0 0 0 / .08));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[grid-template-columns\\]{transition-property:grid-template-columns;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[grid-template-rows\\]{transition-property:grid-template-rows;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[stroke-dashoffset\\]{transition-property:stroke-dashoffset;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[transform\\]{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\\[width\\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-100{transition-delay:.1s}.duration-100{transition-duration:.1s}.duration-\\[200ms\\]{transition-duration:.2s}.duration-\\[250ms\\]{transition-duration:.25s}.duration-\\[400ms\\]{transition-duration:.4s}.bg-surface-backdrop-token{background-color:rgb(var(--color-surface-400) / .7)}.dark .bg-surface-backdrop-token{background-color:rgb(var(--color-surface-900) / .7)}.bg-surface-100-800-token{background-color:rgb(var(--color-surface-100))}.dark .bg-surface-100-800-token{background-color:rgb(var(--color-surface-800))}.bg-surface-200-700-token{background-color:rgb(var(--color-surface-200))}.dark .bg-surface-200-700-token{background-color:rgb(var(--color-surface-700))}.bg-surface-900-50-token{background-color:rgb(var(--color-surface-900))}.dark .bg-surface-900-50-token{background-color:rgb(var(--color-surface-50))}.border-token{border-width:var(--theme-border-base)}.border-surface-400-500-token{border-color:rgb(var(--color-surface-400))}.dark .border-surface-400-500-token{border-color:rgb(var(--color-surface-500))}.border-surface-900-50-token{border-color:rgb(var(--color-surface-900))}.dark .border-surface-900-50-token{border-color:rgb(var(--color-surface-50))}.border-surface-800-100-token{border-color:rgb(var(--color-surface-800))}.dark .border-surface-800-100-token{border-color:rgb(var(--color-surface-100))}.rounded-token{border-radius:var(--theme-rounded-base)}.rounded-container-token{border-radius:var(--theme-rounded-container)}.rounded-tl-container-token{border-top-left-radius:var(--theme-rounded-container)}.rounded-tr-container-token{border-top-right-radius:var(--theme-rounded-container)}.fill-token{fill:rgba(var(--theme-font-color-base))}.dark .fill-token{fill:rgba(var(--theme-font-color-dark))}.text-surface-700-200-token{color:rgb(var(--color-surface-700))}.dark .text-surface-700-200-token{color:rgb(var(--color-surface-200))}.scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover, var(--scrollbar-track))}.scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active, var(--scrollbar-track-hover, var(--scrollbar-track)))}.scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover, var(--scrollbar-thumb))}.scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active, var(--scrollbar-thumb-hover, var(--scrollbar-thumb)))}.scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover, var(--scrollbar-corner))}.scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active, var(--scrollbar-corner-hover, var(--scrollbar-corner)))}.scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb, initial) var(--scrollbar-track, initial)}.scrollbar-thin::-webkit-scrollbar{display:block;width:8px;height:8px}.scrollbar-track-transparent{--scrollbar-track: transparent !important}.scrollbar-thumb-slate-400\\/50{--scrollbar-thumb: rgb(148 163 184 / .5) !important}.scrollbar-corner-transparent{--scrollbar-corner: transparent !important}.has-\\[\\:checked\\]\\:\\!variant-filled-primary:has(:checked){--tw-bg-opacity: 1 !important;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))!important;color:rgb(var(--on-primary))!important}:is(.dark .has-\\[\\:checked\\]\\:\\!variant-filled-primary:has(:checked)){--tw-bg-opacity: 1 !important;background-color:rgb(var(--color-primary-500) / var(--tw-bg-opacity))!important;color:rgb(var(--on-primary))!important}.hover\\:variant-filled:hover{background-color:rgb(var(--color-surface-900));color:rgb(var(--color-surface-50))}.dark .hover\\:variant-filled:hover{background-color:rgb(var(--color-surface-50));color:rgb(var(--color-surface-900))}.hover\\:variant-soft:hover,.hover\\:variant-soft-surface:hover{background-color:rgb(var(--color-surface-400) / .2);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;color:rgb(var(--color-surface-700))}.dark .hover\\:variant-soft:hover,.dark .hover\\:variant-soft-surface:hover{color:rgb(var(--color-surface-200))}:is(.dark .hover\\:variant-soft:hover){background-color:rgb(var(--color-surface-500) / .2)}:is(.dark .hover\\:variant-soft-surface:hover){background-color:rgb(var(--color-surface-500) / .2)}.\\[\\&\\:not\\(\\[disabled\\]\\)\\]\\:variant-soft-primary:not([disabled]){background-color:rgb(var(--color-primary-400) / .2);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important;color:rgb(var(--color-primary-700))}.dark .\\[\\&\\:not\\(\\[disabled\\]\\)\\]\\:variant-soft-primary:not([disabled]){color:rgb(var(--color-primary-200))}:is(.dark .\\[\\&\\:not\\(\\[disabled\\]\\)\\]\\:variant-soft-primary:not([disabled])){background-color:rgb(var(--color-primary-500) / .2)}.\\*\\:\\!m-0>*{margin:0!important}.\\*\\:items-center>*{align-items:center}.\\*\\:\\!rounded-none>*{border-radius:0!important}.\\*\\:py-4>*{padding-top:16px;padding-bottom:16px}.\\*\\:text-sm>*{font-size:14px;line-height:20px}.\\*\\:border-surface-300-600-token>*{border-color:rgb(var(--color-surface-300))}.dark .\\*\\:border-surface-300-600-token>*{border-color:rgb(var(--color-surface-600))}.hover\\:translate-x-0:hover{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:text-xl:hover{font-size:20px;line-height:28px}.hover\\:opacity-100:hover{opacity:1}.hover\\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\\:brightness-\\[105\\%\\]:hover{--tw-brightness: brightness(105%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\\:decoration-wavy:focus{text-decoration-style:wavy}.focus\\:\\!outline-none:focus{outline:2px solid transparent!important;outline-offset:2px!important}.disabled\\:cursor-wait:disabled{cursor:wait}.disabled\\:opacity-70:disabled{opacity:.7}.dark\\:\\!border-surface-200:is(.dark *){--tw-border-opacity: 1 !important;border-color:rgb(var(--color-surface-200) / var(--tw-border-opacity))!important}.dark\\:border-surface-500\\/20:is(.dark *){border-color:rgb(var(--color-surface-500) / .2)}.dark\\:bg-black\\/15:is(.dark *){background-color:#00000026}.dark\\:bg-surface-300:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(var(--color-surface-300) / var(--tw-bg-opacity))}.dark\\:bg-surface-500\\/20:is(.dark *){background-color:rgb(var(--color-surface-500) / .2)}.dark\\:bg-surface-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(var(--color-surface-700) / var(--tw-bg-opacity))}.dark\\:fill-slate-200:is(.dark *){fill:#e2e8f0}.dark\\:stroke-surface-50:is(.dark *){stroke:rgb(var(--color-surface-50) / 1)}.dark\\:accent-surface-50:is(.dark *){accent-color:rgb(var(--color-surface-50) / 1)}.dark\\:hover\\:brightness-110:hover:is(.dark *){--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@media (min-width: 768px){.md\\:h-\\[600px\\]{height:600px}.md\\:max-w-screen-md{max-width:768px}.md\\:max-w-screen-sm{max-width:640px}.md\\:flex-row{flex-direction:row}.md\\:\\!items-baseline{align-items:baseline!important}}@media (min-width: 1024px){.lg\\:max-w-screen-md{max-width:768px}}@media (min-width: 1280px){.xl\\:max-w-screen-lg{max-width:1024px}}.\\[\\&\\:last-child\\]\\:\\*\\:pt-4>*:last-child{padding-top:16px}.\\[\\&\\:not\\(\\:last-child\\)\\]\\:\\*\\:py-4>*:not(:last-child){padding-top:16px;padding-bottom:16px}.\\[\\&\\:not\\(\\[disabled\\]\\)\\]\\:hover\\:bg-slate-400\\/30:hover:not([disabled]){background-color:#94a3b84d}.\\[\\&\\>input\\]\\:\\!min-w-0>input{min-width:0px!important}.\\[\\&\\>input\\]\\:\\!border-transparent>input{border-color:transparent!important} `);

(function (Dexie, dayjs, JSZip, GIF) {
  'use strict';

  var __defProp = Object.defineProperty;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  var _GM_download = /* @__PURE__ */ (() => typeof GM_download != "undefined" ? GM_download : void 0)();
  var _GM_info = /* @__PURE__ */ (() => typeof GM_info != "undefined" ? GM_info : void 0)();
  var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)();
  var _GM_xmlhttpRequest = /* @__PURE__ */ (() => typeof GM_xmlhttpRequest != "undefined" ? GM_xmlhttpRequest : void 0)();
  var _unsafeWindow = /* @__PURE__ */ (() => typeof unsafeWindow != "undefined" ? unsafeWindow : void 0)();
  function getLogger() {
    const methods = ["info", "warn", "error"];
    const style = ["color: green;", "color: orange;", "color: red;"];
    const logLevel = 2;
    const namePrefix = "[Pixiv Downlaoder] ";
    function log(level, args) {
      if (logLevel <= level) console[methods[level]]("%c[Pixiv Downloader]", style[level], ...args);
    }
    return {
      info(...args) {
        log(0, args);
      },
      warn(...args) {
        log(1, args);
      },
      error(...args) {
        log(2, args);
      },
      time(label) {
        console.time(namePrefix + label);
      },
      timeLog(label) {
        console.timeLog(namePrefix + label);
      },
      timeEnd(label) {
        console.timeEnd(namePrefix + label);
      },
      throw(msg, Err) {
        if (Err) {
          throw new Err(`${namePrefix}${msg}`);
        } else {
          throw new Error(`${namePrefix}${msg}`);
        }
      }
    };
  }
  const logger = getLogger();
  function sleep(delay) {
    return new Promise((resolve) => {
      setTimeout(resolve, delay);
    });
  }
  function replaceInvalidChar(str) {
    if (typeof str !== "string") throw new TypeError("expect string but got " + typeof str);
    if (!str) return "";
    return str.replace(new RegExp("\\p{C}", "gu"), "").replace(/\\/g, "\").replace(/\//g, "/").replace(/:/g, ":").replace(/\*/g, "*").replace(/\?/g, "?").replace(/\|/g, "|").replace(/"/g, """).replace(/</g, "﹤").replace(/>/g, "﹥").replace(/~/g, "~").trim().replace(/^\.|\.$/g, ".");
  }
  function unescapeHtml(str) {
    if (typeof str !== "string") throw new TypeError("expect string but got " + typeof str);
    if (!str) return "";
    const el = document.createElement("p");
    el.innerHTML = str;
    return el.innerText;
  }
  function generateCsv(sheetData) {
    const sheetStr = sheetData.map((row) => {
      return row.map((cell) => {
        return '"' + cell.replace(/"/g, '""') + '"';
      }).join(",");
    }).join("\r\n");
    return new Blob(["\uFEFF" + sheetStr], { type: "text/csv" });
  }
  function evalScript(script) {
    const el = document.createElement("script");
    el.text = script;
    document.head.appendChild(el).parentNode.removeChild(el);
  }
  function readBlobAsDataUrl(blob) {
    return new Promise((resolve) => {
      const reader = new FileReader();
      reader.onload = () => {
        resolve(reader.result);
      };
      reader.readAsDataURL(blob);
    });
  }
  async function addStyleToShadow(shadowRoot) {
    {
      shadowRoot.adoptedStyleSheets = [window._pdlShadowStyle];
    }
  }
  function getElementText(el) {
    el.normalize();
    if (el.childNodes.length === 0) return "";
    const blockNode = [
      "ADDRESS",
      "ARTICLE",
      "ASIDE",
      "BLOCKQUOTE",
      "DD",
      "DIV",
      "DL",
      "DT",
      "FIELDSET",
      "FIGCAPTION",
      "FIGURE",
      "FOOTER",
      "FORM",
      "H1",
      "H2",
      "H3",
      "H4",
      "H5",
      "H6",
      "HEADER",
      "HR",
      "LI",
      "MAIN",
      "NAV",
      "OL",
      "P",
      "PRE",
      "SECTION",
      "TABLE",
      "UL"
    ];
    let str = "";
    for (let i = 0; i < el.childNodes.length; i++) {
      const node = el.childNodes[i];
      if (node.nodeType === Node.TEXT_NODE) {
        const val = node.nodeValue;
        (val == null ? void 0 : val.trim()) && (str += val);
      } else if (node.nodeType === Node.ELEMENT_NODE) {
        if (node.nodeName === "BR") {
          str += "\n";
          continue;
        }
        if (!blockNode.includes(node.nodeName)) {
          const childText = getElementText(node);
          childText && (str += childText);
        } else {
          const childText = getElementText(node);
          if (childText) {
            str ? str += "\n" + childText : str += childText;
          }
        }
      }
    }
    return str;
  }
  function aDownload$1(blob, filename) {
    const el = document.createElement("a");
    el.href = URL.createObjectURL(blob);
    el.download = filename;
    el.click();
    URL.revokeObjectURL(el.href);
  }
  class RequestError extends Error {
    constructor(url2, status) {
      super(status + " " + url2);
      __publicField(this, "url");
      __publicField(this, "status");
      this.name = "RequestError";
      this.url = url2;
      this.status = status;
    }
  }
  class CancelError extends Error {
    constructor() {
      super("User aborted.");
      this.name = "CancelError";
    }
  }
  class JsonDataError extends Error {
    constructor(msg) {
      super(msg);
      this.name = "JsonDataError";
    }
  }
  const env = {
    isFirefox() {
      return navigator.userAgent.includes("Firefox");
    },
    isViolentmonkey() {
      return _GM_info.scriptHandler === "Violentmonkey";
    },
    isTampermonkey() {
      return _GM_info.scriptHandler === "Tampermonkey";
    },
    isBlobDlAvaliable() {
      return !this.isFirefox() || this.isFirefox() && this.isTampermonkey() && parseFloat(_GM_info.version ?? "") < 4.18;
    },
    // firefox使用tampermonkey,downloadmod为默认时也支持子目录,但GM_info显示为原生的“native”,而“原生”不支持子目录
    isSupportSubpath() {
      return this.isBrowserDownloadMode();
    },
    isBrowserDownloadMode() {
      return _GM_info.downloadMode === "browser";
    },
    isConflictActionEnable() {
      return this.isTampermonkey() && parseFloat(_GM_info.version ?? "") >= 4.18 && this.isBrowserDownloadMode();
    },
    isConflictActionPromptEnable() {
      return !this.isFirefox() && this.isConflictActionEnable();
    },
    isFileSystemAccessAvaliable() {
      return typeof _unsafeWindow.showDirectoryPicker === "function" && typeof _unsafeWindow.showSaveFilePicker === "function";
    },
    videoFrameSupported() {
      return typeof _unsafeWindow.VideoFrame === "function";
    },
    isPixiv() {
      return location.hostname === "www.pixiv.net";
    },
    isYande() {
      return location.hostname === "yande.re";
    }
  };
  class FileSystemAccessHandler {
    constructor(channelName) {
      __publicField(this, "filenameConflictAction", "uniquify");
      __publicField(this, "updateDirHandleChannel");
      __publicField(this, "dirHandle");
      __publicField(this, "dirHandleStatus", 0);
      __publicField(this, "cachedTasks", []);
      __publicField(this, "duplicateFilenameCached", {});
      this.updateDirHandleChannel = new BroadcastChannel(channelName);
      this.updateDirHandleChannel.onmessage = (evt) => {
        const data = evt.data;
        switch (data.kind) {
          case 1:
            this.dirHandleStatus = 1;
            logger.info("正在选择目录");
            break;
          case 0:
            logger.warn("取消更新dirHandle");
            if (this.dirHandle) {
              this.dirHandleStatus = 2;
              this.processCachedTasks();
            } else {
              this.dirHandleStatus = 0;
              this.rejectCachedTasks();
            }
            break;
          case 2:
            this.dirHandleStatus = 2;
            this.dirHandle = data.handle;
            logger.info("更新dirHandle", this.dirHandle);
            this.processCachedTasks();
            break;
          case "request":
            if (this.dirHandle) {
              this.updateDirHandleChannel.postMessage({
                kind: "response",
                handle: this.dirHandle
              });
              logger.info("响应请求dirHandle");
            }
            break;
          case "response":
            if (!this.dirHandle) {
              if (this.dirHandleStatus === 0)
                this.dirHandleStatus = 2;
              this.dirHandle = data.handle;
              logger.info("首次获取dirHandle", this.dirHandle);
            }
            break;
          default:
            throw new Error("Invalid data kind.");
        }
      };
      this.updateDirHandleChannel.postMessage({ kind: "request" });
    }
    async getDirHandleRecursive(dirs) {
      if (!this.dirHandle) throw new Error("未选择保存文件夹");
      let handler = this.dirHandle;
      if (typeof dirs === "string") {
        if (dirs.indexOf("/") === -1) return await handler.getDirectoryHandle(dirs, { create: true });
        dirs = dirs.split("/").filter((dir) => !!dir);
      }
      for await (const dir of dirs) {
        handler = await handler.getDirectoryHandle(dir, { create: true });
      }
      return handler;
    }
    processCachedTasks() {
      const { length } = this.cachedTasks;
      for (let i = 0; i < length; i++) {
        const [blob, downloadMeta, onSaveFullfilled, onSaveRejected] = this.cachedTasks[i];
        this.saveFile(blob, downloadMeta).then(onSaveFullfilled, onSaveRejected);
      }
      logger.info(`执行${length}个缓存任务`);
      if (this.cachedTasks.length > length) {
        this.cachedTasks = this.cachedTasks.slice(length);
      } else {
        this.cachedTasks.length = 0;
      }
    }
    rejectCachedTasks() {
      this.cachedTasks.forEach(([, , , onSaveRejected]) => onSaveRejected(new CancelError()));
      this.cachedTasks.length = 0;
      logger.info(`取消${this.cachedTasks.length}个缓存任务`);
    }
    async getFilenameHandle(dirHandle, filename) {
      if (this.filenameConflictAction === "overwrite")
        return await dirHandle.getFileHandle(filename, { create: true });
      if (!(filename in this.duplicateFilenameCached)) {
        this.duplicateFilenameCached[filename] = [];
        try {
          await dirHandle.getFileHandle(filename);
          logger.warn("存在同名文件", filename);
        } catch (error) {
          return await dirHandle.getFileHandle(filename, { create: true });
        }
      }
      const extIndex = filename.lastIndexOf(".");
      const ext = filename.slice(extIndex + 1);
      const name = filename.slice(0, extIndex);
      if (this.filenameConflictAction === "prompt") {
        return await _unsafeWindow.showSaveFilePicker({
          suggestedName: filename,
          // eslint-disable-next-line @typescript-eslint/ban-ts-comment
          //@ts-ignore
          types: [{ description: "Image file", accept: { ["image/" + ext]: ["." + ext] } }]
        });
      } else {
        for (let suffix = 1; suffix < 1e3; suffix++) {
          const newName = `${name} (${suffix}).${ext}`;
          try {
            await dirHandle.getFileHandle(newName);
          } catch (error) {
            if (this.duplicateFilenameCached[filename].includes(newName)) {
              continue;
            } else {
              this.duplicateFilenameCached[filename].push(newName);
            }
            logger.info("使用文件名:", newName);
            return await dirHandle.getFileHandle(newName, { create: true });
          }
        }
        throw new RangeError("Oops, you have too many duplicate files.");
      }
    }
    clearFilenameCached(duplicateName, actualName) {
      if (!(duplicateName in this.duplicateFilenameCached)) return;
      const usedNameArr = this.duplicateFilenameCached[duplicateName];
      logger.info("清理重名文件名", usedNameArr, actualName);
      if (usedNameArr.length === 0) {
        delete this.duplicateFilenameCached[duplicateName];
        return;
      }
      const index = usedNameArr.indexOf(actualName);
      if (index === -1) return;
      usedNameArr.splice(index, 1);
      if (usedNameArr.length === 0) delete this.duplicateFilenameCached[duplicateName];
    }
    async updateDirHandle() {
      try {
        this.dirHandleStatus = 1;
        this.updateDirHandleChannel.postMessage({
          kind: 1
          /* picking */
        });
        this.dirHandle = await _unsafeWindow.showDirectoryPicker({ id: "pdl", mode: "readwrite" });
        logger.info("更新dirHandle", this.dirHandle);
        this.dirHandleStatus = 2;
        this.updateDirHandleChannel.postMessage({
          kind: 2,
          handle: this.dirHandle
        });
        this.processCachedTasks();
        return true;
      } catch (error) {
        logger.warn(error);
        this.updateDirHandleChannel.postMessage({
          kind: 0
          /* unpick */
        });
        if (this.dirHandle) {
          this.dirHandleStatus = 2;
          this.processCachedTasks();
        } else {
          this.dirHandleStatus = 0;
          this.rejectCachedTasks();
        }
        return false;
      }
    }
    getCurrentDirName() {
      var _a;
      return ((_a = this.dirHandle) == null ? void 0 : _a.name) ?? "";
    }
    isDirHandleNotSet() {
      return this.dirHandleStatus === 0;
    }
    setFilenameConflictAction(action) {
      this.filenameConflictAction = action;
    }
    async saveFile(blob, downloadMeta) {
      if (downloadMeta.isAborted) throw new CancelError();
      if (this.dirHandleStatus === 1) {
        let onSaveFullfilled;
        let onSaveRejected;
        const promiseExcutor = new Promise((resolve, reject) => {
          onSaveFullfilled = resolve;
          onSaveRejected = reject;
        });
        this.cachedTasks.push([blob, downloadMeta, onSaveFullfilled, onSaveRejected]);
        return promiseExcutor;
      }
      if (this.dirHandleStatus === 0) {
        const isSuccess = await this.updateDirHandle();
        if (!isSuccess) throw new TypeError("Failed to get dir handle.");
      }
      let currenDirHandle;
      let filename;
      const path = downloadMeta.config.path;
      const index = path.lastIndexOf("/");
      if (index === -1) {
        filename = path;
        currenDirHandle = this.dirHandle;
      } else {
        filename = path.slice(index + 1);
        currenDirHandle = await this.getDirHandleRecursive(path.slice(0, index));
      }
      if (downloadMeta.isAborted) throw new CancelError();
      const fileHandle = await this.getFilenameHandle(currenDirHandle, filename);
      const writableStream = await fileHandle.createWritable();
      await writableStream.write(blob);
      await writableStream.close();
      this.clearFilenameCached(filename, fileHandle.name);
    }
  }
  const fsaHandler = new FileSystemAccessHandler("update_dir_channel");
  function gmDownload(blob, downloadMeta) {
    return new Promise((resolve, reject) => {
      if (downloadMeta.isAborted) return reject(new CancelError());
      const imgUrl = URL.createObjectURL(blob);
      const request = {
        url: URL.createObjectURL(blob),
        name: downloadMeta.config.path,
        onerror: (error) => {
          URL.revokeObjectURL(imgUrl);
          if (downloadMeta.isAborted) {
            resolve();
          } else {
            console.error(error);
            reject(new Error(`FileSave error: ${downloadMeta.config.path}`));
          }
        },
        onload: () => {
          URL.revokeObjectURL(imgUrl);
          resolve();
        }
      };
      downloadMeta.abort = _GM_download(request).abort;
    });
  }
  function aDownload(blob, downloadMeta) {
    if (downloadMeta.isAborted) return Promise.reject(new CancelError());
    let path = downloadMeta.config.path;
    const separaterIndex = path.lastIndexOf("/");
    if (separaterIndex !== -1) path = path.slice(separaterIndex + 1);
    const dlEle = document.createElement("a");
    dlEle.href = URL.createObjectURL(blob);
    dlEle.download = path;
    dlEle.click();
    URL.revokeObjectURL(dlEle.href);
    return Promise.resolve();
  }
  var UgoiraFormat = /* @__PURE__ */ ((UgoiraFormat2) => {
    UgoiraFormat2["ZIP"] = "zip";
    UgoiraFormat2["GIF"] = "gif";
    UgoiraFormat2["WEBP"] = "webp";
    UgoiraFormat2["PNG"] = "png";
    UgoiraFormat2["WEBM"] = "webm";
    UgoiraFormat2["MP4"] = "mp4";
    return UgoiraFormat2;
  })(UgoiraFormat || {});
  var FilenameConfigAction = /* @__PURE__ */ ((FilenameConfigAction2) => {
    FilenameConfigAction2["UNIQUIFY"] = "uniquify";
    FilenameConfigAction2["OVERWRITE"] = "overwrite";
    FilenameConfigAction2["PROMPT"] = "prompt";
    return FilenameConfigAction2;
  })(FilenameConfigAction || {});
  var TagLanguage = /* @__PURE__ */ ((TagLanguage2) => {
    TagLanguage2["JAPANESE"] = "ja";
    TagLanguage2["CHINESE"] = "zh";
    TagLanguage2["TRADITIONAL_CHINESE"] = "zh_tw";
    TagLanguage2["ENGLISH"] = "en";
    return TagLanguage2;
  })(TagLanguage || {});
  var HistoryBackupInterval = /* @__PURE__ */ ((HistoryBackupInterval2) => {
    HistoryBackupInterval2[HistoryBackupInterval2["NEVER"] = 0] = "NEVER";
    HistoryBackupInterval2[HistoryBackupInterval2["EVERY_DAY"] = 86400] = "EVERY_DAY";
    HistoryBackupInterval2[HistoryBackupInterval2["EVERY_7_DAY"] = 604800] = "EVERY_7_DAY";
    HistoryBackupInterval2[HistoryBackupInterval2["EVERY_30_DAY"] = 2592e3] = "EVERY_30_DAY";
    return HistoryBackupInterval2;
  })(HistoryBackupInterval || {});
  let config;
  function loadConfig(customConfig = {}) {
    if (config) throw new Error("`config` has already been defined.");
    const defaultConfig = Object.freeze({
      version: "1.3.1",
      ugoiraFormat: "zip",
      folderPattern: "",
      filenamePattern: "{id}",
      tagLang: "ja",
      showMsg: true,
      mixEffect: false,
      bundleIllusts: false,
      bundleManga: false,
      addBookmark: false,
      addBookmarkWithTags: false,
      privateR18: false,
      useFileSystemAccess: false,
      fileSystemFilenameConflictAction: "uniquify",
      showPopupButton: true,
      gifQuality: 10,
      webmQuality: 95,
      mp4Bitrate: 20,
      losslessWebp: false,
      webpQuality: 95,
      webpMehtod: 4,
      pngColor: 256,
      historyBackupInterval: 0,
      lastHistoryBackup: 0,
      "pdl-btn-self-bookmark-left": 100,
      "pdl-btn-self-bookmark-top": 76,
      "pdl-btn-left": 0,
      "pdl-btn-top": 100,
      ...customConfig
    });
    let configData;
    if (!localStorage.pdlSetting) {
      configData = Object.assign({}, defaultConfig);
    } else {
      try {
        configData = JSON.parse(localStorage.pdlSetting);
      } catch (error) {
        logger.error("Use default config because: ", error);
        configData = Object.assign({}, defaultConfig);
      }
    }
    if (configData.version !== defaultConfig.version) {
      configData = {
        ...defaultConfig,
        ...configData,
        version: defaultConfig.version,
        showMsg: true
      };
      localStorage.pdlSetting = JSON.stringify(configData);
    }
    return config = {
      get(key) {
        return configData[key] ?? defaultConfig[key];
      },
      set(key, value) {
        if (configData[key] !== value) {
          configData[key] = value;
          localStorage.pdlSetting = JSON.stringify(configData);
          logger.info("Config set:", key, value);
        }
      },
      getAll() {
        return { ...configData };
      },
      update(newConfig) {
        configData = { ...newConfig };
        localStorage.pdlSetting = JSON.stringify(configData);
      }
    };
  }
  function gmDownloadDataUrl(blob, downloadMeta) {
    return readBlobAsDataUrl(blob).then((dataUrl) => {
      return new Promise((resolve, reject) => {
        if (downloadMeta.isAborted) return reject(new CancelError());
        const request = {
          url: dataUrl,
          name: downloadMeta.config.path,
          onerror: (error) => {
            if (downloadMeta.isAborted) {
              resolve();
            } else {
              console.error(error);
              reject(new Error(`FileSave error: ${downloadMeta.config.path}`));
            }
          },
          onload: () => {
            resolve();
          }
        };
        downloadMeta.abort = _GM_download(request).abort;
      });
    });
  }
  let saveFile;
  const blobAvaliable = env.isBlobDlAvaliable();
  const subPathAvaliable = env.isSupportSubpath();
  if (subPathAvaliable) {
    if (!blobAvaliable) {
      saveFile = gmDownloadDataUrl;
    } else {
      saveFile = gmDownload;
    }
  } else {
    saveFile = aDownload;
    logger.warn("Download function is not fully supported:", _GM_info.scriptHandler, _GM_info.version);
  }
  const fileSaveAdapters = {
    getAdapter() {
      if (this.isFileSystemAccessEnable()) {
        fsaHandler.setFilenameConflictAction(config.get("fileSystemFilenameConflictAction"));
        return fsaHandler.saveFile.bind(fsaHandler);
      } else {
        return saveFile;
      }
    },
    isFileSystemAccessEnable() {
      return env.isFileSystemAccessAvaliable() && config.get("useFileSystemAccess");
    },
    dirHandleCheck() {
      if (this.isFileSystemAccessEnable() && fsaHandler.isDirHandleNotSet())
        fsaHandler.updateDirHandle();
    },
    async updateDirHandle() {
      if (this.isFileSystemAccessEnable()) {
        await fsaHandler.updateDirHandle();
        return fsaHandler.getCurrentDirName();
      }
      return "";
    },
    getFsaDirName() {
      if (this.isFileSystemAccessEnable()) {
        return fsaHandler.getCurrentDirName();
      } else {
        return "";
      }
    }
  };
  function createDownloader() {
    const MAX_DOWNLOAD = 5;
    const MAX_RETRY = 3;
    const DOWNLOAD_INTERVAL = 500;
    let queue = [];
    let active2 = [];
    const cleanAndStartNext = (removeMeta, nextMeta) => {
      sleep(DOWNLOAD_INTERVAL).then(() => {
        active2.splice(active2.indexOf(removeMeta), 1);
        if (nextMeta) {
          active2.push(nextMeta);
          dispatchDownload(nextMeta);
        } else if (queue.length) {
          const meta = queue.shift();
          active2.push(meta);
          dispatchDownload(meta);
        }
      });
    };
    const xhr = (downloadMeta) => {
      const { taskId, config: config2, timeout } = downloadMeta;
      const saveFile2 = fileSaveAdapters.getAdapter();
      return _GM_xmlhttpRequest({
        url: config2.src,
        timeout,
        method: "GET",
        headers: config2.headers,
        responseType: "blob",
        ontimeout() {
          var _a;
          const { taskId: taskId2, config: config22, isAborted } = downloadMeta;
          if (isAborted) return;
          downloadMeta.retry++;
          logger.warn("Download timeout", downloadMeta.retry, ":", config22.src);
          if (downloadMeta.retry > MAX_RETRY) {
            const err = new Error(`Download timout. ${taskId2} | ${config22.src}`);
            (_a = config22.onError) == null ? void 0 : _a.call(config22, err, config22);
            downloadMeta.reject(err);
            cleanAndStartNext(downloadMeta);
          } else {
            logger.info("Retry download:", downloadMeta.retry, config22.src);
            cleanAndStartNext(downloadMeta, downloadMeta);
          }
        },
        onerror(error) {
          var _a;
          const { taskId: taskId2, config: config22, isAborted } = downloadMeta;
          if (isAborted) return;
          let err;
          if (error.status === 429) {
            err = new RequestError(config22.src, error.status);
          } else {
            err = new Error(`Download failed. ID: ${taskId2}.`);
            logger.error(error);
          }
          (_a = config22.onError) == null ? void 0 : _a.call(config22, err, config22);
          downloadMeta.reject(err);
          cleanAndStartNext(downloadMeta);
        },
        onprogress: (res) => {
          var _a;
          if (res.loaded > 0 && res.total > 0) {
            const progress = Math.floor(res.loaded / res.total * 100);
            (_a = config2.onProgress) == null ? void 0 : _a.call(config2, progress, config2);
          }
        },
        onload: async (e) => {
          var _a, _b, _c, _d;
          logger.info("Xhr complete:", config2.src);
          cleanAndStartNext(downloadMeta);
          if (downloadMeta.isAborted)
            return logger.warn("Download was canceled.", taskId, config2.path);
          (_a = config2.onXhrLoaded) == null ? void 0 : _a.call(config2, config2);
          try {
            let modRes;
            if (typeof config2.beforeFileSave === "function") {
              modRes = await config2.beforeFileSave(e.response, config2);
              if (modRes && !downloadMeta.isAborted) {
                await saveFile2(modRes, downloadMeta);
                (_b = config2.onFileSaved) == null ? void 0 : _b.call(config2, config2);
                logger.info("Download complete:", config2.path);
              }
            } else {
              await saveFile2(e.response, downloadMeta);
              (_c = config2.onFileSaved) == null ? void 0 : _c.call(config2, config2);
              logger.info("Download complete:", config2.path);
            }
            downloadMeta.resolve(downloadMeta.taskId);
          } catch (error) {
            (_d = config2.onError) == null ? void 0 : _d.call(config2, error, config2);
            downloadMeta.reject(error);
          }
        }
      });
    };
    const dispatchDownload = (downloadMeta) => {
      logger.info("Start download:", downloadMeta.config.src);
      const abortObj = xhr(downloadMeta);
      downloadMeta.abort = abortObj.abort;
    };
    return {
      get fileSystemAccessEnabled() {
        return fileSaveAdapters.isFileSystemAccessEnable();
      },
      /**
       * 下载触发后应该先弹窗选择文件保存位置,避免下载/转换用时过长导致错误
       * Must be handling a user gesture to show a file picker.
       * https://bugs.chromium.org/p/chromium/issues/detail?id=1193489
       */
      dirHandleCheck() {
        fileSaveAdapters.dirHandleCheck();
      },
      updateDirHandle() {
        return fileSaveAdapters.updateDirHandle();
      },
      getCurrentFsaDirName() {
        return fileSaveAdapters.getFsaDirName();
      },
      async download(configs) {
        logger.info("Downloader add:", configs);
        if (!Array.isArray(configs)) configs = [configs];
        if (configs.length < 1) return Promise.resolve([]);
        const promises = [];
        configs.forEach((config2) => {
          promises.push(
            new Promise((resolve, reject) => {
              const downloadMeta = {
                taskId: config2.taskId,
                config: config2,
                isAborted: false,
                retry: 0,
                timeout: config2.timeout,
                resolve,
                reject
              };
              queue.push(downloadMeta);
            })
          );
        });
        while (active2.length < MAX_DOWNLOAD && queue.length) {
          const meta = queue.shift();
          active2.push(meta);
          dispatchDownload(meta);
        }
        const results = await Promise.allSettled(promises);
        const resultIds = [];
        for (let i = 0; i < results.length; i++) {
          const result = results[i];
          if (result.status === "rejected") throw result.reason;
          resultIds.push(result.value);
        }
        return resultIds;
      },
      abort(taskIds) {
        if (typeof taskIds === "string") taskIds = [taskIds];
        if (!taskIds.length) return;
        logger.info("Downloader delete, active:", active2.length, "queue", queue.length);
        active2 = active2.filter((downloadMeta) => {
          var _a, _b, _c;
          if (taskIds.includes(downloadMeta.taskId) && !downloadMeta.isAborted) {
            downloadMeta.isAborted = true;
            (_a = downloadMeta.abort) == null ? void 0 : _a.call(downloadMeta);
            (_c = (_b = downloadMeta.config).onAbort) == null ? void 0 : _c.call(_b, downloadMeta.config);
            downloadMeta.reject(new CancelError());
            logger.warn("Download aborted:", downloadMeta.config.path);
          } else {
            return true;
          }
        });
        queue = queue.filter((downloadMeta) => !taskIds.includes(downloadMeta.taskId));
        while (active2.length < MAX_DOWNLOAD && queue.length) {
          const meta = queue.shift();
          active2.push(meta);
          dispatchDownload(meta);
        }
      }
    };
  }
  const downloader = createDownloader();
  class HistoryDb extends Dexie {
    constructor() {
      super("PdlHistory");
      __publicField(this, "history");
      __publicField(this, "imageEffect");
      this.version(3).stores({
        history: "pid, userId, user, title, *tags",
        imageEffect: "id"
      });
    }
    throwIfInvalidNumber(num) {
      if (typeof num === "string") {
        if (num !== "") {
          num = +num;
        } else {
          return logger.throw('Invalid argument: can not be "".', RangeError);
        }
      }
      if (num < 0 || !Number.isSafeInteger(num)) {
        logger.throw(`Invalid number: ${num}, must be a non-negative integer.`, RangeError);
      }
      return num;
    }
    async add(historyData) {
      const { pid, page } = historyData;
      return this.transaction("rw", this.history, async () => {
        if (page !== void 0) {
          this.throwIfInvalidNumber(page);
          const historyItem = await this.get(pid);
          if (historyItem && historyItem.page === void 0) {
            delete historyData.page;
            this.history.put(historyData);
          } else {
            const u8arr = HistoryDb.updatePageData(page, historyItem == null ? void 0 : historyItem.page);
            this.history.put({ ...historyData, page: u8arr });
          }
        } else {
          this.history.put(historyData);
        }
      });
    }
    import(objArr) {
      const historyItems = objArr.map((historyObj) => {
        if (historyObj.page) {
          return { ...historyObj, page: new Uint8Array(Object.values(historyObj.page)) };
        } else {
          return historyObj;
        }
      });
      return this.history.bulkPut(historyItems);
    }
    async has(pid, page) {
      if (page === void 0) {
        return !!await this.get(pid);
      } else {
        this.throwIfInvalidNumber(page);
        const historyItem = await this.get(pid);
        if (!historyItem) return false;
        if (!historyItem.page) return true;
        return HistoryDb.isPageInData(page, historyItem.page);
      }
    }
    get(pid) {
      pid = this.throwIfInvalidNumber(pid);
      return this.history.get(pid);
    }
    getAll() {
      return this.history.toArray();
    }
    generateCsv() {
      return this.getAll().then((datas) => {
        const csvData = datas.map((historyData) => {
          const { pid, userId = "", user = "", title = "", tags = "", comment = "" } = historyData;
          return [String(pid), String(userId), user, title, comment, tags ? tags.join(",") : tags];
        });
        csvData.unshift(["id", "userId", "user", "title", "comment", "tags"]);
        return generateCsv(csvData);
      });
    }
    clear() {
      return this.history.clear();
    }
    // Firefox does not support storing `ImageData`, so it will always return `undefined`.
    async getImageEffect(effectId) {
      const item = await this.imageEffect.get(effectId);
      if (!item) return item;
      return item;
    }
    addImageEffect(effectData) {
      return this.imageEffect.put(effectData);
    }
    static updatePageData(page, pageData) {
      const byteIndex = Math.floor(page / 8);
      const bitIndex = page % 8;
      if (!pageData) {
        const newArr = new Uint8Array(byteIndex + 1);
        newArr[byteIndex] |= 1 << bitIndex;
        return newArr;
      } else if (byteIndex > pageData.length - 1) {
        const newArr = new Uint8Array(byteIndex + 1);
        newArr.set(pageData);
        newArr[byteIndex] |= 1 << bitIndex;
        return newArr;
      } else {
        pageData[byteIndex] |= 1 << bitIndex;
        return pageData;
      }
    }
    static isPageInData(page, pageData) {
      const byteIndex = Math.floor(page / 8);
      const bitIndex = page % 8;
      return !(byteIndex > pageData.length - 1) && (pageData[byteIndex] & 1 << bitIndex) !== 0;
    }
  }
  class CachedHistoryDb extends HistoryDb {
    constructor() {
      super();
      __publicField(this, "cache", /* @__PURE__ */ new Map());
      __publicField(this, "initCachePromise");
      __publicField(this, "channel");
      this.initCachePromise = this.initCache();
      this.channel = this.initChannel();
    }
    async initCache() {
      logger.time("loadDb");
      const historyItems = await this.getAll();
      let historyItem;
      for (let i = 0; historyItem = historyItems[i++]; ) {
        const { pid, page = null } = historyItem;
        this.cache.set(pid, page);
      }
      logger.timeEnd("loadDb");
    }
    initChannel() {
      const CHANNEL_NAME = "pdl_sync-cache";
      const channel = new BroadcastChannel(CHANNEL_NAME);
      channel.addEventListener("message", (evt) => {
        const { data } = evt;
        if (data === void 0) {
          this.cache.clear();
          logger.info("clear database cache");
          return;
        }
        if (Array.isArray(data)) {
          data.forEach((item) => {
            this.cache.set(item.pid, item.page);
          });
          logger.info("Sync database cache:", data.length);
        } else {
          this.cache.set(data.pid, data.page);
        }
      });
      return channel;
    }
    syncCacheViaChannel(item) {
      this.channel.postMessage(item);
    }
    updateCache(item) {
      if (Array.isArray(item)) {
        item.forEach((cache) => {
          this.cache.set(cache.pid, cache.page);
        });
      } else {
        this.cache.set(item.pid, item.page);
      }
      this.syncCacheViaChannel(item);
    }
    clearCache() {
      this.cache.clear();
      this.syncCacheViaChannel();
    }
    async getCache(pid) {
      pid = this.throwIfInvalidNumber(pid);
      await this.initCachePromise;
      return this.cache.get(pid);
    }
    async add(historyData) {
      const { pid, page } = historyData;
      if (page === void 0) {
        !await this.has(pid) && this.updateCache({ pid, page: null });
      } else {
        this.throwIfInvalidNumber(page);
        const pageData = await this.getCache(pid);
        if (pageData !== null) {
          this.updateCache({ pid, page: HistoryDb.updatePageData(page, pageData) });
        } else {
          this.updateCache({ pid, page: null });
        }
      }
      return super.add(historyData);
    }
    import(objArr) {
      const cacheItems = objArr.map((historyObj) => {
        return {
          pid: historyObj.pid,
          page: historyObj.page ? new Uint8Array(Object.values(historyObj.page)) : null
        };
      });
      this.updateCache(cacheItems);
      return super.import(objArr);
    }
    async has(pid, page) {
      pid = this.throwIfInvalidNumber(pid);
      await this.initCachePromise;
      if (page === void 0) {
        return this.cache.has(pid);
      } else {
        this.throwIfInvalidNumber(page);
        const cachesData = await this.getCache(pid);
        if (cachesData === void 0) return false;
        if (cachesData === null) return true;
        return HistoryDb.isPageInData(page, cachesData);
      }
    }
    clear() {
      this.clearCache();
      return super.clear();
    }
  }
  class ReadableHistoryDb extends CachedHistoryDb {
    constructor() {
      super(...arguments);
      __publicField(this, "subscribers", /* @__PURE__ */ new Set());
    }
    runSubscription() {
      logger.info("runSubscription", this.subscribers.size);
      this.subscribers.forEach((subscription) => {
        subscription(this.cache);
      });
    }
    async initCache() {
      await super.initCache();
      this.runSubscription();
    }
    initChannel() {
      const channel = super.initChannel();
      channel.addEventListener("message", () => {
        this.runSubscription();
      });
      return channel;
    }
    updateCache(item) {
      super.updateCache(item);
      this.runSubscription();
    }
    clearCache() {
      super.clearCache();
      this.runSubscription();
    }
    subscribe(subscription) {
      this.subscribers.add(subscription);
      subscription(this.cache);
      return () => {
        this.subscribers.delete(subscription);
      };
    }
  }
  const historyDb = new ReadableHistoryDb();
  const rule34Parser = {
    async parse(id) {
      var _a, _b, _c, _d, _e, _f;
      const res = await fetch("index.php?page=post&s=view&id=" + id);
      if (!res.ok) throw new RequestError(res.url, res.status);
      const html = await res.text();
      const doc = new DOMParser().parseFromString(html, "text/html");
      const src = ((_a = doc.querySelector("#gelcomVideoPlayer > source")) == null ? void 0 : _a.src) || doc.querySelector('meta[property="og:image"]').getAttribute("content");
      const imageNameMatch = new RegExp("(?<=\\/)\\w+\\.\\w+(?=\\?)").exec(src);
      if (!imageNameMatch) throw new Error("Can not parse image name from src.");
      const imageName = imageNameMatch[0];
      const [title, extendName] = imageName.split(".");
      const artists = [];
      const characters = [];
      const tags = [];
      const tagEls = doc.querySelectorAll('li[class*="tag-type"]');
      tagEls.forEach((tagEl) => {
        var _a2;
        const tagTypeMatch = new RegExp("(?<=tag-type-)\\w+").exec(tagEl.className);
        if (!tagTypeMatch) throw new Error("Unknown tag: " + tagEl.className);
        const tagType = tagTypeMatch[0];
        const tag = ((_a2 = tagEl.querySelector('a[href*="page=post"]')) == null ? void 0 : _a2.textContent) || "";
        if (tagType === "artist") {
          artists.push(tag);
        } else if (tagType === "character") {
          characters.push(tag);
        }
        tags.push(tagType + ":" + tag);
      });
      const uploaderEl = doc.querySelector('a[href*="page=account&s=profile"]');
      const postDateStr = (_c = (_b = uploaderEl == null ? void 0 : uploaderEl.parentElement) == null ? void 0 : _b.firstChild) == null ? void 0 : _c.nodeValue;
      const postDate = postDateStr ? postDateStr.split(": ")[1] : "";
      const sourceEl = (_e = (_d = uploaderEl == null ? void 0 : uploaderEl.parentElement) == null ? void 0 : _d.nextElementSibling) == null ? void 0 : _e.nextElementSibling;
      if (sourceEl && ((_f = sourceEl.textContent) == null ? void 0 : _f.toLowerCase().includes("source"))) {
        const sourceLink = sourceEl.querySelector("a");
        if (sourceLink) {
          tags.push("source:" + sourceLink.href);
        } else {
          tags.push("source:" + sourceEl.textContent.replace("Source: ", ""));
        }
      }
      return {
        id,
        src,
        extendName,
        artist: artists.join(",") || "UnknownArtist",
        character: characters.join(",") || "UnknownCharacter",
        title,
        tags,
        createDate: postDate
      };
    }
  };
  const btnStyle = ".pdl-thumbnail{position:absolute;display:flex;justify-content:center;align-items:center;margin:0;padding:0;height:32px;width:32px;top:calc((100% - 32px) * var(--pdl-btn-top) / 100);left:calc((100% - 32px) * var(--pdl-btn-left) / 100);border:none;border-radius:4px;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;font-family:system-ui;font-size:13px;font-weight:700;color:#262626;background-color:#ffffff80;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1;cursor:pointer}.pdl-thumbnail:disabled{cursor:default}.pdl-thumbnail>svg{position:absolute;width:85%;height:85%;fill:currentColor;stroke:currentColor}.pdl-thumbnail>span{opacity:0;transition:opacity .2s}.pdl-thumbnail>span.show{opacity:1}:host([data-type=gallery]) .pdl-thumbnail{position:sticky;top:40px;left:0}:host([data-type=pixiv-my-bookmark]) .pdl-thumbnail{top:calc((100% - 32px) * var(--pdl-btn-self-bookmark-top) / 100);left:calc((100% - 32px) * var(--pdl-btn-self-bookmark-left) / 100)}:host([data-type=pixiv-history]) .pdl-thumbnail{z-index:auto}:host([data-type=pixiv-presentation]) .pdl-thumbnail{position:fixed;top:50px;right:20px;left:auto}:host([data-type=pixiv-toolbar]) .pdl-thumbnail{position:relative;top:auto;left:auto;color:inherit;background-color:transparent}:host([data-type=pixiv-manga-viewer]) .pdl-thumbnail{top:80%;right:4px;left:auto}:host([data-type=yande-browse]) .pdl-thumbnail{top:320px;right:4px;left:auto}:host([data-status]) .pdl-thumbnail{color:#16a34a}:host([data-status=error]) .pdl-thumbnail{color:#ef4444}";
  const svgGroup = `<svg xmlns="http://www.w3.org/2000/svg" style="display: none">
  <symbol id="pdl-download" viewBox="0 0 512 512">
    <path
      d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"
    ></path>
  </symbol>

  <symbol id="pdl-loading" viewBox="0 0 512 512">
    <style>
      @keyframes pdl-loading {
        0% {
          transform: rotate3d(0, 0, 1, -90deg) rotate3d(1, 0, 0, 0deg);
          stroke-dashoffset: 1407.43;
        }

        49.99% {
          transform: rotate3d(0, 0, 1, 90deg) rotate3d(1, 0, 0, 0deg);
        }

        50% {
          transform: rotate3d(0, 0, 1, 90deg) rotate3d(1, 0, 0, 180deg);
          stroke-dashoffset: 0;
        }

        100% {
          transform: rotate3d(0, 0, 1, 270deg) rotate3d(1, 0, 0, 180deg);
          stroke-dashoffset: 1407.43;
        }
      }

      circle.rotate {
        transform-origin: 50% 50%;
        animation: 2.5s infinite ease-in-out pdl-loading;
      }
    </style>
    <circle
      class="rotate"
      cx="256"
      cy="256"
      r="224"
      stroke-width="48"
      fill="none"
      stroke-dasharray="1407.43"
      stroke-dashoffset="1055.57"
      stroke-linecap="round"
    ></circle>
  </symbol>

  <symbol id="pdl-progress" viewBox="0 0 512 512">
    <style>
      circle.progress {
        transition: stroke-dashoffset 0.2s ease;
      }
    </style>
    <circle
      class="progress"
      cx="256"
      cy="256"
      r="224"
      stroke-width="48"
      fill="none"
      stroke-dasharray="1407.43"
      stroke-linecap="round"
      transform="rotate(-90 256 256)"
    ></circle>
  </symbol>

  <symbol id="pdl-error" viewBox="0 0 512 512">
    <path
      d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"
    ></path>
  </symbol>

  <symbol id="pdl-complete" viewBox="0 0 512 512">
    <path
      d="M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z"
    ></path>
  </symbol>
</svg>
`;
  const iconTypeMap = {
    init: "#pdl-download",
    loading: "#pdl-loading",
    progress: "#pdl-progress",
    complete: "#pdl-complete",
    error: "#pdl-error"
  };
  var ThumbnailBtnStatus = /* @__PURE__ */ ((ThumbnailBtnStatus2) => {
    ThumbnailBtnStatus2["Init"] = "init";
    ThumbnailBtnStatus2["Loading"] = "loading";
    ThumbnailBtnStatus2["Progress"] = "progress";
    ThumbnailBtnStatus2["Complete"] = "complete";
    ThumbnailBtnStatus2["Error"] = "error";
    return ThumbnailBtnStatus2;
  })(ThumbnailBtnStatus || {});
  var ThumbnailBtnType = /* @__PURE__ */ ((ThumbnailBtnType2) => {
    ThumbnailBtnType2["Gallery"] = "gallery";
    ThumbnailBtnType2["PixivMyBookmark"] = "pixiv-my-bookmark";
    ThumbnailBtnType2["PixivHistory"] = "pixiv-history";
    ThumbnailBtnType2["PixivPresentation"] = "pixiv-presentation";
    ThumbnailBtnType2["PixivToolbar"] = "pixiv-toolbar";
    ThumbnailBtnType2["PixivMangaViewer"] = "pixiv-manga-viewer";
    ThumbnailBtnType2["DanbooruPool"] = "danbooru-pool";
    ThumbnailBtnType2["YandeBrowse"] = "yande-browse";
    return ThumbnailBtnType2;
  })(ThumbnailBtnType || {});
  class ThumbnailButton extends HTMLElement {
    constructor(props) {
      super();
      __publicField(this, "status");
      __publicField(this, "mediaId");
      __publicField(this, "page");
      __publicField(this, "type");
      __publicField(this, "onClick");
      __publicField(this, "btn");
      __publicField(this, "unsubscriber");
      __publicField(this, "connectedFlag", false);
      this.dispatchDownload = this.dispatchDownload.bind(this);
      this.status = "init";
      this.mediaId = this.checkNumberValidity(props.id);
      props.page !== void 0 && (this.page = this.checkNumberValidity(props.page));
      this.type = props.type;
      this.onClick = props.onClick;
      this.render();
      this.btn = this.shadowRoot.querySelector("button");
    }
    checkNumberValidity(num) {
      if (typeof num === "string") {
        if (num !== "") {
          num = +num;
        } else {
          return logger.throw('Invalid argument: can not be "".', RangeError);
        }
      }
      if (num < 0 || !Number.isSafeInteger(num)) {
        return logger.throw(`Invalid number: ${num}, must be a non-negative integer.`, RangeError);
      }
      return num;
    }
    static get observedAttributes() {
      return ["data-id", "data-status", "data-page", "data-type", "disabled"];
    }
    attributeChangedCallback(name, oldValue, newValue) {
      switch (name) {
        case "data-id":
          this.updateId(newValue);
          break;
        case "data-status":
          this.updateIcon(newValue);
          break;
        case "data-page":
          this.updatePage(newValue);
          break;
        case "data-type":
          this.resetType(newValue);
          break;
        case "disabled":
          this.updateDisableStatus(newValue);
          break;
      }
    }
    resetType(newVal) {
      if (newVal === null && this.type === void 0) return;
      if (newVal !== this.type) {
        if (this.type === void 0) {
          delete this.dataset.type;
        } else {
          this.dataset.type = this.type;
        }
        logger.error('Changes to "data-type" is not allowed.');
      }
    }
    updateId(id) {
      try {
        if (id === null) throw new Error('Attribute "data-id" is required.');
        this.mediaId = this.checkNumberValidity(id);
        this.connectedFlag && this.observerDb()();
      } catch (error) {
        logger.error(error);
        this.dataset.id = String(this.mediaId);
      }
    }
    updateDisableStatus(val) {
      const btn2 = this.shadowRoot.querySelector("button");
      if (typeof val === "string") {
        btn2.setAttribute("disabled", "");
      } else {
        btn2.removeAttribute("disabled");
      }
    }
    updatePage(page) {
      try {
        if (page === null) {
          this.page = void 0;
        } else {
          this.page = this.checkNumberValidity(page);
        }
        this.connectedFlag && this.observerDb()();
      } catch (error) {
        logger.error(error);
        if (this.page === void 0) {
          delete this.dataset.page;
        } else {
          this.dataset.page = String(this.page);
        }
      }
    }
    updateIcon(status) {
      if (status === null) {
        status = "init";
      } else if (status === "init") {
        delete this.dataset.status;
        return;
      } else if (!(status in iconTypeMap)) {
        this.dataset.status = this.status;
        return;
      }
      const useEl = this.shadowRoot.querySelector("use");
      this.status = status;
      useEl.setAttribute("xlink:href", iconTypeMap[status]);
      useEl.animate(
        [
          {
            opacity: 0.5
          },
          {
            opactiy: 1
          }
        ],
        {
          duration: 200
        }
      );
    }
    render() {
      const shadowRoot = this.attachShadow({ mode: "open" });
      shadowRoot.innerHTML = `    <style>${btnStyle}</style>${svgGroup}<button class="pdl-thumbnail">
      <svg xmlns="http://www.w3.org/2000/svg" class="pdl-icon">
        <use xlink:href="#pdl-download"></use>
      </svg>
      <span></span>
    </button>`;
      this.dataset.id = String(this.mediaId);
      this.type && (this.dataset.type = this.type);
      this.page !== void 0 && (this.dataset.page = String(this.page));
    }
    dispatchDownload(evt) {
      evt == null ? void 0 : evt.preventDefault();
      evt == null ? void 0 : evt.stopPropagation();
      this.setAttribute("disabled", "");
      this.setStatus(
        "loading"
        /* Loading */
      );
      Promise.resolve(this.onClick(this)).then(
        () => {
          this.setStatus(
            "complete"
            /* Complete */
          );
        },
        (err) => {
          if (err) logger.error(err);
          this.setStatus(
            "error"
            /* Error */
          );
        }
      ).finally(() => {
        this.removeAttribute("disabled");
      });
    }
    observerDb() {
      return historyDb.subscribe(async () => {
        if (this.type === "danbooru-pool") return;
        const downloaded = await historyDb.has(this.mediaId, this.page);
        if (this.status === "complete") {
          !downloaded && this.setStatus(
            "init"
            /* Init */
          );
        } else {
          downloaded && this.setStatus(
            "complete"
            /* Complete */
          );
        }
      });
    }
    connectedCallback() {
      this.connectedFlag = true;
      this.btn.addEventListener("click", this.dispatchDownload);
      this.unsubscriber = this.observerDb();
    }
    disconnectedCallback() {
      var _a;
      this.connectedFlag = false;
      this.btn.removeEventListener("click", this.dispatchDownload);
      (_a = this.unsubscriber) == null ? void 0 : _a.call(this);
    }
    setProgress(progress, updateProgressbar = true) {
      if (progress < 0 || progress > 100) throw new RangeError('Value "progress" must between 0-100');
      const shadowRoot = this.shadowRoot;
      const span = shadowRoot.querySelector("span");
      if (this.status !== "progress") {
        this.dataset.status = "progress";
        span.classList.toggle("show");
      }
      span.textContent = String(Math.floor(progress));
      if (!updateProgressbar) return;
      const svg = shadowRoot.querySelector("svg.pdl-icon");
      const radius = 224;
      const circumference = 2 * Math.PI * radius;
      const offset = circumference - progress / 100 * circumference;
      svg.style.strokeDashoffset = String(offset);
    }
    removeProgress() {
      const shadowRoot = this.shadowRoot;
      const span = shadowRoot.querySelector("span");
      const svg = shadowRoot.querySelector("svg.pdl-icon");
      span.classList.toggle("show");
      span.addEventListener(
        "transitionend",
        () => {
          span.textContent = "";
        },
        { once: true }
      );
      svg.style.removeProperty("stroke-dashoffset");
      if (this.status === "progress") this.dataset.status = "init";
    }
    setStatus(status) {
      if (status !== this.status) {
        if (status === "init") {
          delete this.dataset.status;
          return;
        }
        if (status === "progress") {
          this.setProgress(0);
          return;
        }
        if (this.status === "progress") {
          this.removeProgress();
        }
        this.dataset.status = status;
      }
    }
  }
  customElements.define("pdl-button", ThumbnailButton);
  class DownloadConfigBuilder {
    constructor(meta) {
      this.meta = meta;
    }
    normalizeString(str) {
      return replaceInvalidChar(unescapeHtml(str));
    }
    getFolderPattern() {
      return config.get("folderPattern");
    }
    getFilenamePattern() {
      return config.get("filenamePattern");
    }
    getFullpathPattern() {
      const folder = this.getFolderPattern();
      const filename = this.getFilenamePattern() + "." + this.meta.extendName;
      return folder ? folder + "/" + filename : filename;
    }
    isBrowserApi() {
      return env.isBrowserDownloadMode();
    }
    isFsaEnable() {
      return downloader.fileSystemAccessEnabled;
    }
    supportSubpath() {
      return this.isBrowserApi() || this.isFsaEnable();
    }
    isImage() {
      return /bmp|jp(e)?g|png|tif|gif|exif|svg|webp/i.test(this.meta.extendName);
    }
    buildFilePath() {
      const path = this.getFullpathPattern();
      const { id, createDate } = this.meta;
      let { artist, title, tags } = this.meta;
      artist = this.normalizeString(artist);
      title = this.normalizeString(title);
      tags = tags.map((tag) => this.normalizeString(tag));
      const replaceDate = (_, p1) => {
        const format = p1 || "YYYY-MM-DD";
        return dayjs(createDate).format(format);
      };
      return path.replaceAll(/\{date\((.*?)\)\}|\{date\}/g, replaceDate).replaceAll("{artist}", artist).replaceAll("{title}", title).replaceAll("{tags}", tags.join("_")).replaceAll("{id}", id);
    }
  }
  function artworkProgressFactory$1(btn2) {
    if (!btn2) return;
    return function onArtworkProgress(progress) {
      btn2.setProgress(progress);
    };
  }
  class Rule34DownloadConfig extends DownloadConfigBuilder {
    constructor(meta) {
      super(meta);
      this.meta = meta;
    }
    getDownloadConfig(btn2) {
      return {
        taskId: Math.random().toString(36).slice(2),
        src: this.meta.src,
        path: this.buildFilePath(),
        source: this.meta,
        timeout: this.isImage() ? 6e4 : void 0,
        onProgress: artworkProgressFactory$1(btn2)
      };
    }
    buildFilePath() {
      const path = super.buildFilePath();
      return path.replaceAll("{character}", this.normalizeString(this.meta.character));
    }
  }
  function addBookmark$2(id) {
    _unsafeWindow.addFav(id);
  }
  async function downloadArtwork$3(btn2) {
    downloader.dirHandleCheck();
    const id = btn2.dataset.id;
    const mediaMeta = await rule34Parser.parse(id);
    const { tags, artist, title } = mediaMeta;
    const downloadConfigs = new Rule34DownloadConfig(mediaMeta).getDownloadConfig(btn2);
    config.get("addBookmark") && addBookmark$2(id);
    await downloader.download(downloadConfigs);
    const historyData = {
      pid: Number(id),
      user: artist,
      title,
      tags
    };
    historyDb.add(historyData);
  }
  const zh = {
    setting: {
      save_to: {
        title: "保存至",
        label: {
          directory: "保存位置",
          filename: "文件名"
        },
        options: {
          use_fsa: "使用FileSystemAccess API",
          fsa_directory: "选择保存文件夹",
          fsa_filename_conflict: "当文件名重复时",
          tag_language: "使用的标签语言",
          tag_language_tips: "无翻译的标签仍可能是其他语言"
        },
        button: {
          choose_fsa_directory: "浏览"
        },
        radio: {
          filename_conflict_option_uniquify: "重命名",
          filename_conflict_option_overwrite: "覆盖",
          filename_conflict_option_prompt: "提示"
        },
        placeholder: {
          sub_directory_unused: "如不需要保存到子目录,此行留空即可",
          vm_not_supported: "Violentmonkey不支持",
          need_browser_api: '请将下载模式设置为"Browser Api"',
          filename_requried: "必填"
        }
      },
      ugoira: {
        title: "动图转换",
        label: {
          format: "动图格式",
          quality: "动图质量"
        },
        options: {
          select_format: "将动图转换到所选格式",
          gif_tips: "数值越低颜色越好,但处理速度显著减慢",
          webm_tips: "0最差,99最好",
          webp_lossy: "无损转换",
          webp_quality: "图片质量",
          webp_quality_tips: "有损:0表示文件最小,100表示文件最大。无损:0最快,但文件较大,100最慢,但质量最好。",
          webp_method: "压缩方法",
          webp_method_tips: "0=快,6=慢但效果更好",
          png_tips: "颜色数量。0:所有颜色(无损PNG)"
        }
      },
      history: {
        title: "下载历史",
        label: {
          scheduled_backups: "定期备份",
          export: "导出",
          import: "导入",
          clear: "清理"
        },
        options: {
          scheduled_backups: "以选定的时间间隔自动备份下载历史",
          export_as_json: "将下载历史导出为JSON文件",
          export_as_csv: "将下载历史导出为CSV文件",
          import_json: "导入JSON格式下载历史",
          clear_history: "清除下载历史"
        },
        button: {
          export: "导出记录",
          import: "导入记录",
          clear: "清除记录"
        },
        select: {
          backup_interval_never: "不备份",
          backup_interval_every_day: "每天",
          backup_interval_every_7_day: "每7天",
          backup_interval_every_30_day: "每30天"
        },
        text: {
          confirm_clear_history: "真的要清除历史记录吗?"
        }
      },
      button_position: {
        title: "按钮位置",
        label: {
          common: "通用",
          my_bookmark: "我的收藏"
        },
        options: {
          horizon_position: "水平位置",
          vertical_position: "垂直位置"
        }
      },
      others: {
        title: "其它",
        options: {
          show_setting_button: "显示设置按钮",
          bundle_multipage_illust: "将多页插图打包为zip压缩包",
          bundle_manga: "将漫画作品打包为zip压缩包",
          add_bookmark_when_download: "下载单个作品时收藏作品",
          add_bookmark_with_tags: "收藏时添加作品标签",
          add_bookmark_private_r18: "将R-18作品收藏到不公开类别"
        }
      },
      feedback: {
        title: "反馈 / 赞赏",
        label: {
          feedback: "反馈",
          donate: "赞赏"
        },
        text: {
          feedback_desc: `如果你在使用中发现了问题或有改进建议,欢迎到<a href="https://github.com/drunkg00se/Pixiv-Downloader/issues" target="_blank" class="anchor">此链接</a>反馈。`,
          give_me_a_star: '如果脚本有帮助到你,<a href="https://github.com/drunkg00se/Pixiv-Downloader" target="_blank" class="anchor">欢迎点此在GitHub中给我一个 ⭐Star。</a>',
          donate_desc: "或者,扫码请我喝杯可乐 ^_^"
        }
      }
    },
    downloader: {
      category: {
        tab_name: "类别",
        filter: {
          exclude_downloaded: "排除已下载",
          download_all_pages: "下载所有页",
          download_selected_pages: "自定义页数",
          pixiv_illust: "插画",
          pixiv_manga: "漫画",
          pixiv_ugoira: "动图"
        }
      },
      tag_filter: {
        tab_name: "标签",
        placeholder: {
          blacklist_tag: "黑名单,将排除含有以下标签的作品。",
          whitelist_tag: "白名单,只下载包含以下标签的作品。"
        }
      },
      others: {
        tab_name: "其它",
        options: {
          retry_failed: "对首次下载失败的图片进行重试"
        }
      },
      download_type: {
        stop: "停止",
        pixiv_works: "作品",
        pixiv_bookmark: "收藏",
        pixiv_bookmark_public: "公开收藏",
        pixiv_bookmark_private: "不公开收藏",
        pixiv_follow_latest_all: "全部",
        pixiv_follow_latest_r18: "R-18"
      }
    },
    button: {
      setting: "设置"
    },
    changelog: {
      feedback: "有问题or想建议?这里反馈",
      credit: "脚本还行?请点这里支持我!",
      give_me_a_star: "在GitHub中给我一个 ⭐Star,",
      buy_me_a_drink: "或者,扫码请我喝杯香草味冰可乐。^_^"
    }
  };
  const en = {
    setting: {
      save_to: {
        title: "Save To",
        label: {
          directory: "Save Path",
          filename: "Filename"
        },
        options: {
          use_fsa: "Use FileSystemAccess API",
          fsa_directory: "Select directory",
          fsa_filename_conflict: "When filename conflicts",
          tag_language: "Tag Language",
          tag_language_tips: "Tags without translation may still be in another language"
        },
        button: {
          choose_fsa_directory: "Browse"
        },
        radio: {
          filename_conflict_option_uniquify: "Uniquify",
          filename_conflict_option_overwrite: "Overwrite",
          filename_conflict_option_prompt: "Prompt"
        },
        placeholder: {
          sub_directory_unused: "Leave folder name blank if not saving to a subdirectory",
          vm_not_supported: "Not supported by Violentmonkey",
          need_browser_api: "Browser API required",
          filename_requried: "Required"
        }
      },
      ugoira: {
        title: "Ugoira",
        label: {
          format: "Ugoira Format",
          quality: "Ugoira Quality"
        },
        options: {
          select_format: "Convert Ugoira to selected format",
          gif_tips: "Lower values produce better colors, but slow processing significantly",
          webm_tips: "0 (worst) to 99 (best)",
          webp_lossy: "Lossless Webp",
          webp_quality: "Image Quality",
          webp_quality_tips: "For lossy, 0 gives the smallest size and 100 the largest. For lossless, 0 is the fastest but gives larger files compared to the slowest, but best, 100.",
          webp_method: "Compression Method",
          webp_method_tips: "Quality/speed trade-off (0=fast, 6=slower-better)",
          png_tips: "Number of colors in the result; 0: all colors (lossless PNG)"
        }
      },
      history: {
        title: "History",
        label: {
          scheduled_backups: "Scheduled Backups",
          export: "Export",
          import: "Import",
          clear: "Clear"
        },
        options: {
          scheduled_backups: "Automatically back up download history at selected intervals.",
          export_as_json: "Export download history as JSON file",
          export_as_csv: "Export download history as CSV file",
          import_json: "Import JSON format download history",
          clear_history: "Clear download history"
        },
        button: {
          export: "Export",
          import: "Import",
          clear: "Clear"
        },
        select: {
          backup_interval_never: "Never",
          backup_interval_every_day: "Every day",
          backup_interval_every_7_day: "7 days",
          backup_interval_every_30_day: "30 days"
        },
        text: {
          confirm_clear_history: "Do you really want to clear history?"
        }
      },
      button_position: {
        title: "Button",
        label: {
          common: "Common",
          my_bookmark: "My Bookmark"
        },
        options: {
          horizon_position: "Horizontal Position",
          vertical_position: "Vertical Position"
        }
      },
      others: {
        title: "Others",
        options: {
          show_setting_button: "Show Setting Button",
          bundle_multipage_illust: "Bundle multipage illustrations into a zip file",
          bundle_manga: "Bundle manga into a zip file",
          add_bookmark_when_download: "Bookmark artwork when downloading",
          add_bookmark_with_tags: "Add tags when bookmarking",
          add_bookmark_private_r18: "Bookmark R-18 artwork as private"
        }
      },
      feedback: {
        title: "Feedback",
        label: {
          feedback: "Feedback",
          donate: "Donate"
        },
        text: {
          feedback_desc: 'If you encounter any issues or have suggestions for improvements, feel free to provide feedback <a href="https://github.com/drunkg00se/Pixiv-Downloader/issues" target="_blank" class=" anchor">here.</a>',
          give_me_a_star: 'If the script is helpful to you, please <a href="https://github.com/drunkg00se/Pixiv-Downloader" target="_blank" class="anchor">click here and give me a ⭐Star on GitHub.</a>',
          donate_desc: "Or, buy me a cola. ^_^"
        }
      }
    },
    downloader: {
      category: {
        tab_name: "Category",
        filter: {
          exclude_downloaded: "Exclude Downloaded",
          download_all_pages: "All Pages",
          download_selected_pages: "Custom Pages",
          pixiv_illust: "Illustration",
          pixiv_manga: "Manga",
          pixiv_ugoira: "Ugoira"
        }
      },
      tag_filter: {
        tab_name: "Tags",
        placeholder: {
          blacklist_tag: "Blacklist: Exclude works with these tags.",
          whitelist_tag: "Whitelist: Only download works with these tags."
        }
      },
      others: {
        tab_name: "others",
        options: {
          retry_failed: "Retry failed image downloads."
        }
      },
      download_type: {
        stop: "Stop",
        pixiv_works: "Works",
        pixiv_bookmark: "Bookmarks",
        pixiv_bookmark_public: "Public",
        pixiv_bookmark_private: "Private",
        pixiv_follow_latest_all: "All",
        pixiv_follow_latest_r18: "R-18"
      }
    },
    button: {
      setting: "Setting"
    },
    changelog: {
      feedback: "Feedback / Report an issue",
      credit: "Click here to support me!",
      give_me_a_star: "Give me a ⭐Star on GitHub.",
      buy_me_a_drink: "Or, buy me a vanilla-flavored iced cola. ^_^"
    }
  };
  const messages = {
    "zh-cn": zh,
    "zh-tw": zh,
    zh,
    en
  };
  const curLang = navigator.language.toLowerCase();
  const lang = curLang in messages ? curLang : "en";
  function t(key) {
    const paths = key.split(".");
    let last2 = messages[lang];
    for (let i = 0; i < paths.length; i++) {
      const value = last2[paths[i]];
      if (value === void 0 || value === null) return null;
      last2 = value;
    }
    return last2;
  }
  function noop() {
  }
  const identity = (x) => x;
  function assign(tar, src) {
    for (const k in src) tar[k] = src[k];
    return (
      /** @type {T & S} */
      tar
    );
  }
  function is_promise(value) {
    return !!value && (typeof value === "object" || typeof value === "function") && typeof /** @type {any} */
    value.then === "function";
  }
  function run(fn) {
    return fn();
  }
  function blank_object() {
    return /* @__PURE__ */ Object.create(null);
  }
  function run_all(fns) {
    fns.forEach(run);
  }
  function is_function(thing) {
    return typeof thing === "function";
  }
  function safe_not_equal(a, b) {
    return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function";
  }
  let src_url_equal_anchor;
  function src_url_equal(element_src, url2) {
    if (element_src === url2) return true;
    if (!src_url_equal_anchor) {
      src_url_equal_anchor = document.createElement("a");
    }
    src_url_equal_anchor.href = url2;
    return element_src === src_url_equal_anchor.href;
  }
  function is_empty(obj) {
    return Object.keys(obj).length === 0;
  }
  function subscribe(store, ...callbacks) {
    if (store == null) {
      for (const callback of callbacks) {
        callback(void 0);
      }
      return noop;
    }
    const unsub = store.subscribe(...callbacks);
    return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
  }
  function get_store_value(store) {
    let value;
    subscribe(store, (_) => value = _)();
    return value;
  }
  function component_subscribe(component, store, callback) {
    component.$$.on_destroy.push(subscribe(store, callback));
  }
  function create_slot(definition, ctx, $$scope, fn) {
    if (definition) {
      const slot_ctx = get_slot_context(definition, ctx, $$scope, fn);
      return definition[0](slot_ctx);
    }
  }
  function get_slot_context(definition, ctx, $$scope, fn) {
    return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx;
  }
  function get_slot_changes(definition, $$scope, dirty, fn) {
    if (definition[2] && fn) {
      const lets = definition[2](fn(dirty));
      if ($$scope.dirty === void 0) {
        return lets;
      }
      if (typeof lets === "object") {
        const merged = [];
        const len = Math.max($$scope.dirty.length, lets.length);
        for (let i = 0; i < len; i += 1) {
          merged[i] = $$scope.dirty[i] | lets[i];
        }
        return merged;
      }
      return $$scope.dirty | lets;
    }
    return $$scope.dirty;
  }
  function update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) {
    if (slot_changes) {
      const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn);
      slot.p(slot_context, slot_changes);
    }
  }
  function get_all_dirty_from_scope($$scope) {
    if ($$scope.ctx.length > 32) {
      const dirty = [];
      const length = $$scope.ctx.length / 32;
      for (let i = 0; i < length; i++) {
        dirty[i] = -1;
      }
      return dirty;
    }
    return -1;
  }
  function exclude_internal_props(props) {
    const result = {};
    for (const k in props) if (k[0] !== "$") result[k] = props[k];
    return result;
  }
  function compute_rest_props(props, keys) {
    const rest = {};
    keys = new Set(keys);
    for (const k in props) if (!keys.has(k) && k[0] !== "$") rest[k] = props[k];
    return rest;
  }
  function compute_slots(slots) {
    const result = {};
    for (const key in slots) {
      result[key] = true;
    }
    return result;
  }
  function set_store_value(store, ret, value) {
    store.set(value);
    return ret;
  }
  function action_destroyer(action_result) {
    return action_result && is_function(action_result.destroy) ? action_result.destroy : noop;
  }
  function split_css_unit(value) {
    const split = typeof value === "string" && value.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);
    return split ? [parseFloat(split[1]), split[2] || "px"] : [
      /** @type {number} */
      value,
      "px"
    ];
  }
  const is_client = typeof window !== "undefined";
  let now = is_client ? () => window.performance.now() : () => Date.now();
  let raf = is_client ? (cb) => requestAnimationFrame(cb) : noop;
  const tasks = /* @__PURE__ */ new Set();
  function run_tasks(now2) {
    tasks.forEach((task) => {
      if (!task.c(now2)) {
        tasks.delete(task);
        task.f();
      }
    });
    if (tasks.size !== 0) raf(run_tasks);
  }
  function loop(callback) {
    let task;
    if (tasks.size === 0) raf(run_tasks);
    return {
      promise: new Promise((fulfill) => {
        tasks.add(task = { c: callback, f: fulfill });
      }),
      abort() {
        tasks.delete(task);
      }
    };
  }
  function append(target, node) {
    target.appendChild(node);
  }
  function get_root_for_style(node) {
    if (!node) return document;
    const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;
    if (root && /** @type {ShadowRoot} */
    root.host) {
      return (
        /** @type {ShadowRoot} */
        root
      );
    }
    return node.ownerDocument;
  }
  function append_empty_stylesheet(node) {
    const style_element = element("style");
    style_element.textContent = "/* empty */";
    append_stylesheet(get_root_for_style(node), style_element);
    return style_element.sheet;
  }
  function append_stylesheet(node, style) {
    append(
      /** @type {Document} */
      node.head || node,
      style
    );
    return style.sheet;
  }
  function insert(target, node, anchor) {
    target.insertBefore(node, anchor || null);
  }
  function detach(node) {
    if (node.parentNode) {
      node.parentNode.removeChild(node);
    }
  }
  function destroy_each(iterations, detaching) {
    for (let i = 0; i < iterations.length; i += 1) {
      if (iterations[i]) iterations[i].d(detaching);
    }
  }
  function element(name) {
    return document.createElement(name);
  }
  function svg_element(name) {
    return document.createElementNS("http://www.w3.org/2000/svg", name);
  }
  function text(data) {
    return document.createTextNode(data);
  }
  function space() {
    return text(" ");
  }
  function empty() {
    return text("");
  }
  function listen(node, event, handler, options) {
    node.addEventListener(event, handler, options);
    return () => node.removeEventListener(event, handler, options);
  }
  function stop_propagation(fn) {
    return function(event) {
      event.stopPropagation();
      return fn.call(this, event);
    };
  }
  function attr(node, attribute, value) {
    if (value == null) node.removeAttribute(attribute);
    else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value);
  }
  const always_set_through_set_attribute = ["width", "height"];
  function set_attributes(node, attributes) {
    const descriptors = Object.getOwnPropertyDescriptors(node.__proto__);
    for (const key in attributes) {
      if (attributes[key] == null) {
        node.removeAttribute(key);
      } else if (key === "style") {
        node.style.cssText = attributes[key];
      } else if (key === "__value") {
        node.value = node[key] = attributes[key];
      } else if (descriptors[key] && descriptors[key].set && always_set_through_set_attribute.indexOf(key) === -1) {
        node[key] = attributes[key];
      } else {
        attr(node, key, attributes[key]);
      }
    }
  }
  function get_binding_group_value(group, __value, checked) {
    const value = /* @__PURE__ */ new Set();
    for (let i = 0; i < group.length; i += 1) {
      if (group[i].checked) value.add(group[i].__value);
    }
    if (!checked) {
      value.delete(__value);
    }
    return Array.from(value);
  }
  function init_binding_group(group) {
    let _inputs;
    return {
      /* push */
      p(...inputs) {
        _inputs = inputs;
        _inputs.forEach((input) => group.push(input));
      },
      /* remove */
      r() {
        _inputs.forEach((input) => group.splice(group.indexOf(input), 1));
      }
    };
  }
  function to_number(value) {
    return value === "" ? null : +value;
  }
  function children(element2) {
    return Array.from(element2.childNodes);
  }
  function set_data(text2, data) {
    data = "" + data;
    if (text2.data === data) return;
    text2.data = /** @type {string} */
    data;
  }
  function set_input_value(input, value) {
    input.value = value == null ? "" : value;
  }
  function set_style(node, key, value, important) {
    if (value == null) {
      node.style.removeProperty(key);
    } else {
      node.style.setProperty(key, value, "");
    }
  }
  function select_option(select, value, mounting) {
    for (let i = 0; i < select.options.length; i += 1) {
      const option = select.options[i];
      if (option.__value === value) {
        option.selected = true;
        return;
      }
    }
    if (!mounting || value !== void 0) {
      select.selectedIndex = -1;
    }
  }
  function select_options(select, value) {
    for (let i = 0; i < select.options.length; i += 1) {
      const option = select.options[i];
      option.selected = ~value.indexOf(option.__value);
    }
  }
  function select_value(select) {
    const selected_option = select.querySelector(":checked");
    return selected_option && selected_option.__value;
  }
  function select_multiple_value(select) {
    return [].map.call(select.querySelectorAll(":checked"), (option) => option.__value);
  }
  function toggle_class(element2, name, toggle) {
    element2.classList.toggle(name, !!toggle);
  }
  function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
    return new CustomEvent(type, { detail, bubbles, cancelable });
  }
  class HtmlTag {
    constructor(is_svg = false) {
      /**
       * @private
       * @default false
       */
      __publicField(this, "is_svg", false);
      /** parent for creating node */
      __publicField(this, "e");
      /** html tag nodes */
      __publicField(this, "n");
      /** target */
      __publicField(this, "t");
      /** anchor */
      __publicField(this, "a");
      this.is_svg = is_svg;
      this.e = this.n = null;
    }
    /**
     * @param {string} html
     * @returns {void}
     */
    c(html) {
      this.h(html);
    }
    /**
     * @param {string} html
     * @param {HTMLElement | SVGElement} target
     * @param {HTMLElement | SVGElement} anchor
     * @returns {void}
     */
    m(html, target, anchor = null) {
      if (!this.e) {
        if (this.is_svg)
          this.e = svg_element(
            /** @type {keyof SVGElementTagNameMap} */
            target.nodeName
          );
        else
          this.e = element(
            /** @type {keyof HTMLElementTagNameMap} */
            target.nodeType === 11 ? "TEMPLATE" : target.nodeName
          );
        this.t = target.tagName !== "TEMPLATE" ? target : (
          /** @type {HTMLTemplateElement} */
          target.content
        );
        this.c(html);
      }
      this.i(anchor);
    }
    /**
     * @param {string} html
     * @returns {void}
     */
    h(html) {
      this.e.innerHTML = html;
      this.n = Array.from(
        this.e.nodeName === "TEMPLATE" ? this.e.content.childNodes : this.e.childNodes
      );
    }
    /**
     * @returns {void} */
    i(anchor) {
      for (let i = 0; i < this.n.length; i += 1) {
        insert(this.t, this.n[i], anchor);
      }
    }
    /**
     * @param {string} html
     * @returns {void}
     */
    p(html) {
      this.d();
      this.h(html);
      this.i(this.a);
    }
    /**
     * @returns {void} */
    d() {
      this.n.forEach(detach);
    }
  }
  function get_custom_elements_slots(element2) {
    const result = {};
    element2.childNodes.forEach(
      /** @param {Element} node */
      (node) => {
        result[node.slot || "default"] = true;
      }
    );
    return result;
  }
  function construct_svelte_component(component, props) {
    return new component(props);
  }
  const managed_styles = /* @__PURE__ */ new Map();
  let active = 0;
  function hash(str) {
    let hash2 = 5381;
    let i = str.length;
    while (i--) hash2 = (hash2 << 5) - hash2 ^ str.charCodeAt(i);
    return hash2 >>> 0;
  }
  function create_style_information(doc, node) {
    const info = { stylesheet: append_empty_stylesheet(node), rules: {} };
    managed_styles.set(doc, info);
    return info;
  }
  function create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {
    const step2 = 16.666 / duration;
    let keyframes = "{\n";
    for (let p = 0; p <= 1; p += step2) {
      const t2 = a + (b - a) * ease(p);
      keyframes += p * 100 + `%{${fn(t2, 1 - t2)}}
`;
    }
    const rule = keyframes + `100% {${fn(b, 1 - b)}}
}`;
    const name = `__svelte_${hash(rule)}_${uid}`;
    const doc = get_root_for_style(node);
    const { stylesheet, rules } = managed_styles.get(doc) || create_style_information(doc, node);
    if (!rules[name]) {
      rules[name] = true;
      stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);
    }
    const animation = node.style.animation || "";
    node.style.animation = `${animation ? `${animation}, ` : ""}${name} ${duration}ms linear ${delay}ms 1 both`;
    active += 1;
    return name;
  }
  function delete_rule(node, name) {
    const previous = (node.style.animation || "").split(", ");
    const next = previous.filter(
      name ? (anim) => anim.indexOf(name) < 0 : (anim) => anim.indexOf("__svelte") === -1
      // remove all Svelte animations
    );
    const deleted = previous.length - next.length;
    if (deleted) {
      node.style.animation = next.join(", ");
      active -= deleted;
      if (!active) clear_rules();
    }
  }
  function clear_rules() {
    raf(() => {
      if (active) return;
      managed_styles.forEach((info) => {
        const { ownerNode } = info.stylesheet;
        if (ownerNode) detach(ownerNode);
      });
      managed_styles.clear();
    });
  }
  function create_animation(node, from, fn, params) {
    if (!from) return noop;
    const to = node.getBoundingClientRect();
    if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)
      return noop;
    const {
      delay = 0,
      duration = 300,
      easing = identity,
      // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?
      start: start_time = now() + delay,
      // @ts-ignore todo:
      end = start_time + duration,
      tick: tick2 = noop,
      css
    } = fn(node, { from, to }, params);
    let running = true;
    let started = false;
    let name;
    function start() {
      if (css) {
        name = create_rule(node, 0, 1, duration, delay, easing, css);
      }
      if (!delay) {
        started = true;
      }
    }
    function stop() {
      if (css) delete_rule(node, name);
      running = false;
    }
    loop((now2) => {
      if (!started && now2 >= start_time) {
        started = true;
      }
      if (started && now2 >= end) {
        tick2(1, 0);
        stop();
      }
      if (!running) {
        return false;
      }
      if (started) {
        const p = now2 - start_time;
        const t2 = 0 + 1 * easing(p / duration);
        tick2(t2, 1 - t2);
      }
      return true;
    });
    start();
    tick2(0, 1);
    return stop;
  }
  function fix_position(node) {
    const style = getComputedStyle(node);
    if (style.position !== "absolute" && style.position !== "fixed") {
      const { width, height } = style;
      const a = node.getBoundingClientRect();
      node.style.position = "absolute";
      node.style.width = width;
      node.style.height = height;
      add_transform(node, a);
    }
  }
  function add_transform(node, a) {
    const b = node.getBoundingClientRect();
    if (a.left !== b.left || a.top !== b.top) {
      const style = getComputedStyle(node);
      const transform = style.transform === "none" ? "" : style.transform;
      node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;
    }
  }
  let current_component;
  function set_current_component(component) {
    current_component = component;
  }
  function get_current_component() {
    if (!current_component) throw new Error("Function called outside component initialization");
    return current_component;
  }
  function onMount(fn) {
    get_current_component().$$.on_mount.push(fn);
  }
  function afterUpdate(fn) {
    get_current_component().$$.after_update.push(fn);
  }
  function createEventDispatcher() {
    const component = get_current_component();
    return (type, detail, { cancelable = false } = {}) => {
      const callbacks = component.$$.callbacks[type];
      if (callbacks) {
        const event = custom_event(
          /** @type {string} */
          type,
          detail,
          { cancelable }
        );
        callbacks.slice().forEach((fn) => {
          fn.call(component, event);
        });
        return !event.defaultPrevented;
      }
      return true;
    };
  }
  function setContext(key, context) {
    get_current_component().$$.context.set(key, context);
    return context;
  }
  function getContext(key) {
    return get_current_component().$$.context.get(key);
  }
  function bubble(component, event) {
    const callbacks = component.$$.callbacks[event.type];
    if (callbacks) {
      callbacks.slice().forEach((fn) => fn.call(this, event));
    }
  }
  const dirty_components = [];
  const binding_callbacks = [];
  let render_callbacks = [];
  const flush_callbacks = [];
  const resolved_promise = /* @__PURE__ */ Promise.resolve();
  let update_scheduled = false;
  function schedule_update() {
    if (!update_scheduled) {
      update_scheduled = true;
      resolved_promise.then(flush);
    }
  }
  function tick() {
    schedule_update();
    return resolved_promise;
  }
  function add_render_callback(fn) {
    render_callbacks.push(fn);
  }
  function add_flush_callback(fn) {
    flush_callbacks.push(fn);
  }
  const seen_callbacks = /* @__PURE__ */ new Set();
  let flushidx = 0;
  function flush() {
    if (flushidx !== 0) {
      return;
    }
    const saved_component = current_component;
    do {
      try {
        while (flushidx < dirty_components.length) {
          const component = dirty_components[flushidx];
          flushidx++;
          set_current_component(component);
          update(component.$$);
        }
      } catch (e) {
        dirty_components.length = 0;
        flushidx = 0;
        throw e;
      }
      set_current_component(null);
      dirty_components.length = 0;
      flushidx = 0;
      while (binding_callbacks.length) binding_callbacks.pop()();
      for (let i = 0; i < render_callbacks.length; i += 1) {
        const callback = render_callbacks[i];
        if (!seen_callbacks.has(callback)) {
          seen_callbacks.add(callback);
          callback();
        }
      }
      render_callbacks.length = 0;
    } while (dirty_components.length);
    while (flush_callbacks.length) {
      flush_callbacks.pop()();
    }
    update_scheduled = false;
    seen_callbacks.clear();
    set_current_component(saved_component);
  }
  function update($$) {
    if ($$.fragment !== null) {
      $$.update();
      run_all($$.before_update);
      const dirty = $$.dirty;
      $$.dirty = [-1];
      $$.fragment && $$.fragment.p($$.ctx, dirty);
      $$.after_update.forEach(add_render_callback);
    }
  }
  function flush_render_callbacks(fns) {
    const filtered = [];
    const targets = [];
    render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));
    targets.forEach((c) => c());
    render_callbacks = filtered;
  }
  let promise;
  function wait() {
    if (!promise) {
      promise = Promise.resolve();
      promise.then(() => {
        promise = null;
      });
    }
    return promise;
  }
  function dispatch(node, direction, kind) {
    node.dispatchEvent(custom_event(`${direction ? "intro" : "outro"}${kind}`));
  }
  const outroing = /* @__PURE__ */ new Set();
  let outros;
  function group_outros() {
    outros = {
      r: 0,
      c: [],
      p: outros
      // parent group
    };
  }
  function check_outros() {
    if (!outros.r) {
      run_all(outros.c);
    }
    outros = outros.p;
  }
  function transition_in(block, local) {
    if (block && block.i) {
      outroing.delete(block);
      block.i(local);
    }
  }
  function transition_out(block, local, detach2, callback) {
    if (block && block.o) {
      if (outroing.has(block)) return;
      outroing.add(block);
      outros.c.push(() => {
        outroing.delete(block);
        if (callback) {
          if (detach2) block.d(1);
          callback();
        }
      });
      block.o(local);
    } else if (callback) {
      callback();
    }
  }
  const null_transition = { duration: 0 };
  function create_in_transition(node, fn, params) {
    const options = { direction: "in" };
    let config2 = fn(node, params, options);
    let running = false;
    let animation_name;
    let task;
    let uid = 0;
    function cleanup() {
      if (animation_name) delete_rule(node, animation_name);
    }
    function go() {
      const {
        delay = 0,
        duration = 300,
        easing = identity,
        tick: tick2 = noop,
        css
      } = config2 || null_transition;
      if (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);
      tick2(0, 1);
      const start_time = now() + delay;
      const end_time = start_time + duration;
      if (task) task.abort();
      running = true;
      add_render_callback(() => dispatch(node, true, "start"));
      task = loop((now2) => {
        if (running) {
          if (now2 >= end_time) {
            tick2(1, 0);
            dispatch(node, true, "end");
            cleanup();
            return running = false;
          }
          if (now2 >= start_time) {
            const t2 = easing((now2 - start_time) / duration);
            tick2(t2, 1 - t2);
          }
        }
        return running;
      });
    }
    let started = false;
    return {
      start() {
        if (started) return;
        started = true;
        delete_rule(node);
        if (is_function(config2)) {
          config2 = config2(options);
          wait().then(go);
        } else {
          go();
        }
      },
      invalidate() {
        started = false;
      },
      end() {
        if (running) {
          cleanup();
          running = false;
        }
      }
    };
  }
  function create_out_transition(node, fn, params) {
    const options = { direction: "out" };
    let config2 = fn(node, params, options);
    let running = true;
    let animation_name;
    const group = outros;
    group.r += 1;
    let original_inert_value;
    function go() {
      const {
        delay = 0,
        duration = 300,
        easing = identity,
        tick: tick2 = noop,
        css
      } = config2 || null_transition;
      if (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);
      const start_time = now() + delay;
      const end_time = start_time + duration;
      add_render_callback(() => dispatch(node, false, "start"));
      if ("inert" in node) {
        original_inert_value = /** @type {HTMLElement} */
        node.inert;
        node.inert = true;
      }
      loop((now2) => {
        if (running) {
          if (now2 >= end_time) {
            tick2(0, 1);
            dispatch(node, false, "end");
            if (!--group.r) {
              run_all(group.c);
            }
            return false;
          }
          if (now2 >= start_time) {
            const t2 = easing((now2 - start_time) / duration);
            tick2(1 - t2, t2);
          }
        }
        return running;
      });
    }
    if (is_function(config2)) {
      wait().then(() => {
        config2 = config2(options);
        go();
      });
    } else {
      go();
    }
    return {
      end(reset) {
        if (reset && "inert" in node) {
          node.inert = original_inert_value;
        }
        if (reset && config2.tick) {
          config2.tick(1, 0);
        }
        if (running) {
          if (animation_name) delete_rule(node, animation_name);
          running = false;
        }
      }
    };
  }
  function create_bidirectional_transition(node, fn, params, intro) {
    const options = { direction: "both" };
    let config2 = fn(node, params, options);
    let t2 = intro ? 0 : 1;
    let running_program = null;
    let pending_program = null;
    let animation_name = null;
    let original_inert_value;
    function clear_animation() {
      if (animation_name) delete_rule(node, animation_name);
    }
    function init2(program, duration) {
      const d = (
        /** @type {Program['d']} */
        program.b - t2
      );
      duration *= Math.abs(d);
      return {
        a: t2,
        b: program.b,
        d,
        duration,
        start: program.start,
        end: program.start + duration,
        group: program.group
      };
    }
    function go(b) {
      const {
        delay = 0,
        duration = 300,
        easing = identity,
        tick: tick2 = noop,
        css
      } = config2 || null_transition;
      const program = {
        start: now() + delay,
        b
      };
      if (!b) {
        program.group = outros;
        outros.r += 1;
      }
      if ("inert" in node) {
        if (b) {
          if (original_inert_value !== void 0) {
            node.inert = original_inert_value;
          }
        } else {
          original_inert_value = /** @type {HTMLElement} */
          node.inert;
          node.inert = true;
        }
      }
      if (running_program || pending_program) {
        pending_program = program;
      } else {
        if (css) {
          clear_animation();
          animation_name = create_rule(node, t2, b, duration, delay, easing, css);
        }
        if (b) tick2(0, 1);
        running_program = init2(program, duration);
        add_render_callback(() => dispatch(node, b, "start"));
        loop((now2) => {
          if (pending_program && now2 > pending_program.start) {
            running_program = init2(pending_program, duration);
            pending_program = null;
            dispatch(node, running_program.b, "start");
            if (css) {
              clear_animation();
              animation_name = create_rule(
                node,
                t2,
                running_program.b,
                running_program.duration,
                0,
                easing,
                config2.css
              );
            }
          }
          if (running_program) {
            if (now2 >= running_program.end) {
              tick2(t2 = running_program.b, 1 - t2);
              dispatch(node, running_program.b, "end");
              if (!pending_program) {
                if (running_program.b) {
                  clear_animation();
                } else {
                  if (!--running_program.group.r) run_all(running_program.group.c);
                }
              }
              running_program = null;
            } else if (now2 >= running_program.start) {
              const p = now2 - running_program.start;
              t2 = running_program.a + running_program.d * easing(p / running_program.duration);
              tick2(t2, 1 - t2);
            }
          }
          return !!(running_program || pending_program);
        });
      }
    }
    return {
      run(b) {
        if (is_function(config2)) {
          wait().then(() => {
            const opts = { direction: b ? "in" : "out" };
            config2 = config2(opts);
            go(b);
          });
        } else {
          go(b);
        }
      },
      end() {
        clear_animation();
        running_program = pending_program = null;
      }
    };
  }
  function handle_promise(promise2, info) {
    const token = info.token = {};
    function update2(type, index, key, value) {
      if (info.token !== token) return;
      info.resolved = value;
      let child_ctx = info.ctx;
      if (key !== void 0) {
        child_ctx = child_ctx.slice();
        child_ctx[key] = value;
      }
      const block = type && (info.current = type)(child_ctx);
      let needs_flush = false;
      if (info.block) {
        if (info.blocks) {
          info.blocks.forEach((block2, i) => {
            if (i !== index && block2) {
              group_outros();
              transition_out(block2, 1, 1, () => {
                if (info.blocks[i] === block2) {
                  info.blocks[i] = null;
                }
              });
              check_outros();
            }
          });
        } else {
          info.block.d(1);
        }
        block.c();
        transition_in(block, 1);
        block.m(info.mount(), info.anchor);
        needs_flush = true;
      }
      info.block = block;
      if (info.blocks) info.blocks[index] = block;
      if (needs_flush) {
        flush();
      }
    }
    if (is_promise(promise2)) {
      const current_component2 = get_current_component();
      promise2.then(
        (value) => {
          set_current_component(current_component2);
          update2(info.then, 1, info.value, value);
          set_current_component(null);
        },
        (error) => {
          set_current_component(current_component2);
          update2(info.catch, 2, info.error, error);
          set_current_component(null);
          if (!info.hasCatch) {
            throw error;
          }
        }
      );
      if (info.current !== info.pending) {
        update2(info.pending, 0);
        return true;
      }
    } else {
      if (info.current !== info.then) {
        update2(info.then, 1, info.value, promise2);
        return true;
      }
      info.resolved = /** @type {T} */
      promise2;
    }
  }
  function update_await_block_branch(info, ctx, dirty) {
    const child_ctx = ctx.slice();
    const { resolved } = info;
    if (info.current === info.then) {
      child_ctx[info.value] = resolved;
    }
    if (info.current === info.catch) {
      child_ctx[info.error] = resolved;
    }
    info.block.p(child_ctx, dirty);
  }
  function ensure_array_like(array_like_or_iterator) {
    return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator);
  }
  function outro_and_destroy_block(block, lookup) {
    transition_out(block, 1, 1, () => {
      lookup.delete(block.key);
    });
  }
  function fix_and_outro_and_destroy_block(block, lookup) {
    block.f();
    outro_and_destroy_block(block, lookup);
  }
  function update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block2, next, get_context) {
    let o = old_blocks.length;
    let n = list.length;
    let i = o;
    const old_indexes = {};
    while (i--) old_indexes[old_blocks[i].key] = i;
    const new_blocks = [];
    const new_lookup = /* @__PURE__ */ new Map();
    const deltas = /* @__PURE__ */ new Map();
    const updates = [];
    i = n;
    while (i--) {
      const child_ctx = get_context(ctx, list, i);
      const key = get_key(child_ctx);
      let block = lookup.get(key);
      if (!block) {
        block = create_each_block2(key, child_ctx);
        block.c();
      } else {
        updates.push(() => block.p(child_ctx, dirty));
      }
      new_lookup.set(key, new_blocks[i] = block);
      if (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));
    }
    const will_move = /* @__PURE__ */ new Set();
    const did_move = /* @__PURE__ */ new Set();
    function insert2(block) {
      transition_in(block, 1);
      block.m(node, next);
      lookup.set(block.key, block);
      next = block.first;
      n--;
    }
    while (o && n) {
      const new_block = new_blocks[n - 1];
      const old_block = old_blocks[o - 1];
      const new_key = new_block.key;
      const old_key = old_block.key;
      if (new_block === old_block) {
        next = new_block.first;
        o--;
        n--;
      } else if (!new_lookup.has(old_key)) {
        destroy(old_block, lookup);
        o--;
      } else if (!lookup.has(new_key) || will_move.has(new_key)) {
        insert2(new_block);
      } else if (did_move.has(old_key)) {
        o--;
      } else if (deltas.get(new_key) > deltas.get(old_key)) {
        did_move.add(new_key);
        insert2(new_block);
      } else {
        will_move.add(old_key);
        o--;
      }
    }
    while (o--) {
      const old_block = old_blocks[o];
      if (!new_lookup.has(old_block.key)) destroy(old_block, lookup);
    }
    while (n) insert2(new_blocks[n - 1]);
    run_all(updates);
    return new_blocks;
  }
  function get_spread_update(levels, updates) {
    const update2 = {};
    const to_null_out = {};
    const accounted_for = { $$scope: 1 };
    let i = levels.length;
    while (i--) {
      const o = levels[i];
      const n = updates[i];
      if (n) {
        for (const key in o) {
          if (!(key in n)) to_null_out[key] = 1;
        }
        for (const key in n) {
          if (!accounted_for[key]) {
            update2[key] = n[key];
            accounted_for[key] = 1;
          }
        }
        levels[i] = n;
      } else {
        for (const key in o) {
          accounted_for[key] = 1;
        }
      }
    }
    for (const key in to_null_out) {
      if (!(key in update2)) update2[key] = void 0;
    }
    return update2;
  }
  function get_spread_object(spread_props) {
    return typeof spread_props === "object" && spread_props !== null ? spread_props : {};
  }
  function bind(component, name, callback) {
    const index = component.$$.props[name];
    if (index !== void 0) {
      component.$$.bound[index] = callback;
      callback(component.$$.ctx[index]);
    }
  }
  function create_component(block) {
    block && block.c();
  }
  function mount_component(component, target, anchor) {
    const { fragment, after_update } = component.$$;
    fragment && fragment.m(target, anchor);
    add_render_callback(() => {
      const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
      if (component.$$.on_destroy) {
        component.$$.on_destroy.push(...new_on_destroy);
      } else {
        run_all(new_on_destroy);
      }
      component.$$.on_mount = [];
    });
    after_update.forEach(add_render_callback);
  }
  function destroy_component(component, detaching) {
    const $$ = component.$$;
    if ($$.fragment !== null) {
      flush_render_callbacks($$.after_update);
      run_all($$.on_destroy);
      $$.fragment && $$.fragment.d(detaching);
      $$.on_destroy = $$.fragment = null;
      $$.ctx = [];
    }
  }
  function make_dirty(component, i) {
    if (component.$$.dirty[0] === -1) {
      dirty_components.push(component);
      schedule_update();
      component.$$.dirty.fill(0);
    }
    component.$$.dirty[i / 31 | 0] |= 1 << i % 31;
  }
  function init(component, options, instance2, create_fragment2, not_equal, props, append_styles = null, dirty = [-1]) {
    const parent_component = current_component;
    set_current_component(component);
    const $$ = component.$$ = {
      fragment: null,
      ctx: [],
      // state
      props,
      update: noop,
      not_equal,
      bound: blank_object(),
      // lifecycle
      on_mount: [],
      on_destroy: [],
      on_disconnect: [],
      before_update: [],
      after_update: [],
      context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
      // everything else
      callbacks: blank_object(),
      dirty,
      skip_bound: false,
      root: options.target || parent_component.$$.root
    };
    append_styles && append_styles($$.root);
    let ready = false;
    $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => {
      const value = rest.length ? rest[0] : ret;
      if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
        if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value);
        if (ready) make_dirty(component, i);
      }
      return ret;
    }) : [];
    $$.update();
    ready = true;
    run_all($$.before_update);
    $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false;
    if (options.target) {
      if (options.hydrate) {
        const nodes = children(options.target);
        $$.fragment && $$.fragment.l(nodes);
        nodes.forEach(detach);
      } else {
        $$.fragment && $$.fragment.c();
      }
      if (options.intro) transition_in(component.$$.fragment);
      mount_component(component, options.target, options.anchor);
      flush();
    }
    set_current_component(parent_component);
  }
  let SvelteElement;
  if (typeof HTMLElement === "function") {
    SvelteElement = class extends HTMLElement {
      constructor($$componentCtor, $$slots, use_shadow_dom) {
        super();
        /** The Svelte component constructor */
        __publicField(this, "$$ctor");
        /** Slots */
        __publicField(this, "$$s");
        /** The Svelte component instance */
        __publicField(this, "$$c");
        /** Whether or not the custom element is connected */
        __publicField(this, "$$cn", false);
        /** Component props data */
        __publicField(this, "$$d", {});
        /** `true` if currently in the process of reflecting component props back to attributes */
        __publicField(this, "$$r", false);
        /** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */
        __publicField(this, "$$p_d", {});
        /** @type {Record<string, Function[]>} Event listeners */
        __publicField(this, "$$l", {});
        /** @type {Map<Function, Function>} Event listener unsubscribe functions */
        __publicField(this, "$$l_u", /* @__PURE__ */ new Map());
        this.$$ctor = $$componentCtor;
        this.$$s = $$slots;
        if (use_shadow_dom) {
          this.attachShadow({ mode: "open" });
        }
      }
      addEventListener(type, listener, options) {
        this.$$l[type] = this.$$l[type] || [];
        this.$$l[type].push(listener);
        if (this.$$c) {
          const unsub = this.$$c.$on(type, listener);
          this.$$l_u.set(listener, unsub);
        }
        super.addEventListener(type, listener, options);
      }
      removeEventListener(type, listener, options) {
        super.removeEventListener(type, listener, options);
        if (this.$$c) {
          const unsub = this.$$l_u.get(listener);
          if (unsub) {
            unsub();
            this.$$l_u.delete(listener);
          }
        }
      }
      async connectedCallback() {
        this.$$cn = true;
        if (!this.$$c) {
          let create_slot2 = function(name) {
            return () => {
              let node;
              const obj = {
                c: function create() {
                  node = element("slot");
                  if (name !== "default") {
                    attr(node, "name", name);
                  }
                },
                /**
                 * @param {HTMLElement} target
                 * @param {HTMLElement} [anchor]
                 */
                m: function mount(target, anchor) {
                  insert(target, node, anchor);
                },
                d: function destroy(detaching) {
                  if (detaching) {
                    detach(node);
                  }
                }
              };
              return obj;
            };
          };
          await Promise.resolve();
          if (!this.$$cn || this.$$c) {
            return;
          }
          const $$slots = {};
          const existing_slots = get_custom_elements_slots(this);
          for (const name of this.$$s) {
            if (name in existing_slots) {
              $$slots[name] = [create_slot2(name)];
            }
          }
          for (const attribute of this.attributes) {
            const name = this.$$g_p(attribute.name);
            if (!(name in this.$$d)) {
              this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp");
            }
          }
          for (const key in this.$$p_d) {
            if (!(key in this.$$d) && this[key] !== void 0) {
              this.$$d[key] = this[key];
              delete this[key];
            }
          }
          this.$$c = new this.$$ctor({
            target: this.shadowRoot || this,
            props: {
              ...this.$$d,
              $$slots,
              $$scope: {
                ctx: []
              }
            }
          });
          const reflect_attributes = () => {
            this.$$r = true;
            for (const key in this.$$p_d) {
              this.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]];
              if (this.$$p_d[key].reflect) {
                const attribute_value = get_custom_element_value(
                  key,
                  this.$$d[key],
                  this.$$p_d,
                  "toAttribute"
                );
                if (attribute_value == null) {
                  this.removeAttribute(this.$$p_d[key].attribute || key);
                } else {
                  this.setAttribute(this.$$p_d[key].attribute || key, attribute_value);
                }
              }
            }
            this.$$r = false;
          };
          this.$$c.$$.after_update.push(reflect_attributes);
          reflect_attributes();
          for (const type in this.$$l) {
            for (const listener of this.$$l[type]) {
              const unsub = this.$$c.$on(type, listener);
              this.$$l_u.set(listener, unsub);
            }
          }
          this.$$l = {};
        }
      }
      // We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte
      // and setting attributes through setAttribute etc, this is helpful
      attributeChangedCallback(attr2, _oldValue, newValue) {
        var _a;
        if (this.$$r) return;
        attr2 = this.$$g_p(attr2);
        this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp");
        (_a = this.$$c) == null ? void 0 : _a.$set({ [attr2]: this.$$d[attr2] });
      }
      disconnectedCallback() {
        this.$$cn = false;
        Promise.resolve().then(() => {
          if (!this.$$cn && this.$$c) {
            this.$$c.$destroy();
            this.$$c = void 0;
          }
        });
      }
      $$g_p(attribute_name) {
        return Object.keys(this.$$p_d).find(
          (key) => this.$$p_d[key].attribute === attribute_name || !this.$$p_d[key].attribute && key.toLowerCase() === attribute_name
        ) || attribute_name;
      }
    };
  }
  function get_custom_element_value(prop, value, props_definition, transform) {
    var _a;
    const type = (_a = props_definition[prop]) == null ? void 0 : _a.type;
    value = type === "Boolean" && typeof value !== "boolean" ? value != null : value;
    if (!transform || !props_definition[prop]) {
      return value;
    } else if (transform === "toAttribute") {
      switch (type) {
        case "Object":
        case "Array":
          return value == null ? null : JSON.stringify(value);
        case "Boolean":
          return value ? "" : null;
        case "Number":
          return value == null ? null : value;
        default:
          return value;
      }
    } else {
      switch (type) {
        case "Object":
        case "Array":
          return value && JSON.parse(value);
        case "Boolean":
          return value;
        case "Number":
          return value != null ? +value : value;
        default:
          return value;
      }
    }
  }
  function create_custom_element(Component, props_definition, slots, accessors, use_shadow_dom, extend) {
    let Class = class extends SvelteElement {
      constructor() {
        super(Component, slots, use_shadow_dom);
        this.$$p_d = props_definition;
      }
      static get observedAttributes() {
        return Object.keys(props_definition).map(
          (key) => (props_definition[key].attribute || key).toLowerCase()
        );
      }
    };
    Object.keys(props_definition).forEach((prop) => {
      Object.defineProperty(Class.prototype, prop, {
        get() {
          return this.$$c && prop in this.$$c ? this.$$c[prop] : this.$$d[prop];
        },
        set(value) {
          var _a;
          value = get_custom_element_value(prop, value, props_definition);
          this.$$d[prop] = value;
          (_a = this.$$c) == null ? void 0 : _a.$set({ [prop]: value });
        }
      });
    });
    accessors.forEach((accessor) => {
      Object.defineProperty(Class.prototype, accessor, {
        get() {
          var _a;
          return (_a = this.$$c) == null ? void 0 : _a[accessor];
        }
      });
    });
    if (extend) {
      Class = extend(Class);
    }
    Component.element = /** @type {any} */
    Class;
    return Class;
  }
  class SvelteComponent {
    constructor() {
      /**
       * ### PRIVATE API
       *
       * Do not use, may change at any time
       *
       * @type {any}
       */
      __publicField(this, "$$");
      /**
       * ### PRIVATE API
       *
       * Do not use, may change at any time
       *
       * @type {any}
       */
      __publicField(this, "$$set");
    }
    /** @returns {void} */
    $destroy() {
      destroy_component(this, 1);
      this.$destroy = noop;
    }
    /**
     * @template {Extract<keyof Events, string>} K
     * @param {K} type
     * @param {((e: Events[K]) => void) | null | undefined} callback
     * @returns {() => void}
     */
    $on(type, callback) {
      if (!is_function(callback)) {
        return noop;
      }
      const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
      callbacks.push(callback);
      return () => {
        const index = callbacks.indexOf(callback);
        if (index !== -1) callbacks.splice(index, 1);
      };
    }
    /**
     * @param {Partial<Props>} props
     * @returns {void}
     */
    $set(props) {
      if (this.$$set && !is_empty(props)) {
        this.$$.skip_bound = true;
        this.$$set(props);
        this.$$.skip_bound = false;
      }
    }
  }
  const PUBLIC_VERSION = "4";
  const subscriber_queue = [];
  function readable(value, start) {
    return {
      subscribe: writable(value, start).subscribe
    };
  }
  function writable(value, start = noop) {
    let stop;
    const subscribers = /* @__PURE__ */ new Set();
    function set(new_value) {
      if (safe_not_equal(value, new_value)) {
        value = new_value;
        if (stop) {
          const run_queue = !subscriber_queue.length;
          for (const subscriber of subscribers) {
            subscriber[1]();
            subscriber_queue.push(subscriber, value);
          }
          if (run_queue) {
            for (let i = 0; i < subscriber_queue.length; i += 2) {
              subscriber_queue[i][0](subscriber_queue[i + 1]);
            }
            subscriber_queue.length = 0;
          }
        }
      }
    }
    function update2(fn) {
      set(fn(value));
    }
    function subscribe2(run2, invalidate = noop) {
      const subscriber = [run2, invalidate];
      subscribers.add(subscriber);
      if (subscribers.size === 1) {
        stop = start(set, update2) || noop;
      }
      run2(value);
      return () => {
        subscribers.delete(subscriber);
        if (subscribers.size === 0 && stop) {
          stop();
          stop = null;
        }
      };
    }
    return { set, update: update2, subscribe: subscribe2 };
  }
  function derived(stores2, fn, initial_value) {
    const single = !Array.isArray(stores2);
    const stores_array = single ? [stores2] : stores2;
    if (!stores_array.every(Boolean)) {
      throw new Error("derived() expects stores as input, got a falsy value");
    }
    const auto = fn.length < 2;
    return readable(initial_value, (set, update2) => {
      let started = false;
      const values = [];
      let pending = 0;
      let cleanup = noop;
      const sync = () => {
        if (pending) {
          return;
        }
        cleanup();
        const result = fn(single ? values[0] : values, set, update2);
        if (auto) {
          set(result);
        } else {
          cleanup = is_function(result) ? result : noop;
        }
      };
      const unsubscribers = stores_array.map(
        (store, i) => subscribe(
          store,
          (value) => {
            values[i] = value;
            pending &= ~(1 << i);
            if (started) {
              sync();
            }
          },
          () => {
            pending |= 1 << i;
          }
        )
      );
      started = true;
      sync();
      return function stop() {
        run_all(unsubscribers);
        cleanup();
        started = false;
      };
    });
  }
  function readonly(store) {
    return {
      subscribe: store.subscribe.bind(store)
    };
  }
  const defaultData = {
    selectedFilters: null,
    blacklistTag: [],
    whitelistTag: [],
    downloadAllPages: true,
    pageStart: 1,
    pageEnd: 1,
    retryFailed: false
  };
  const STORAGE_KEY = "pdl-downloader_option";
  const saveData = localStorage.getItem(STORAGE_KEY);
  const storeData = saveData ? JSON.parse(saveData) : defaultData;
  function storeBuilder(data) {
    const obj = {};
    for (const key in defaultData) {
      if (!(key in data)) {
        obj[key] = writable(defaultData[key]);
      } else {
        obj[key] = writable(data[key]);
      }
    }
    return obj;
  }
  const optionStore = storeBuilder(storeData);
  const watchStoreData = derived(Object.values(optionStore), (data) => {
    const obj = {};
    Object.keys(optionStore).forEach((key, idx) => {
      obj[key] = data[idx];
    });
    return obj;
  });
  watchStoreData.subscribe((val) => {
    localStorage.setItem(STORAGE_KEY, JSON.stringify(val));
  });
  function useChannel() {
    const CHANNEL_NAME = "pdl_batch-download";
    const TAB_ID = String(Math.random());
    const channel = new BroadcastChannel(CHANNEL_NAME);
    const queue = [];
    let downloading = false;
    let pending = false;
    let onFullfilled;
    let onRejected;
    channel.addEventListener("message", (evt) => {
      const { data } = evt;
      switch (data.type) {
        case 5:
          logger.info("channel receive: QUERY");
          downloading && channel.postMessage({
            type: 0,
            value: null
          });
          break;
        case 0:
          logger.info("channel receive: SET_PENDING");
          !pending && (pending = true);
          break;
        case 1:
          logger.info("channel receive: SET_IDLE");
          pending && (pending = false);
          break;
        case 2:
          logger.info("channel receive: ADD_QUEUE");
          downloading && queue.push(data.value);
          break;
        case 3:
          logger.info("channel receive: REMOVE_QUEUE");
          if (downloading) {
            const idx = queue.findIndex((id) => id === data.value);
            idx !== -1 && queue.splice(idx, 1);
          }
          break;
        case 4:
          logger.info("channel receive: PROCESS_NEXT", TAB_ID, data.value);
          if (data.value[0] !== TAB_ID) return;
          queue.push(...data.value.slice(1));
          pending = false;
          downloading = true;
          onFullfilled();
          break;
      }
    });
    window.addEventListener("unload", () => {
      if (pending) {
        channel.postMessage({
          type: 3,
          value: TAB_ID
        });
        return;
      }
      if (downloading) {
        queue.length ? channel.postMessage({
          type: 4,
          value: queue
        }) : channel.postMessage({
          type: 1,
          value: null
        });
      }
    });
    channel.postMessage({
      type: 5,
      value: null
    });
    return {
      async requestDownload() {
        if (!pending) {
          downloading = true;
          channel.postMessage({
            type: 0,
            value: null
          });
          logger.info("channel post: SET_PENDING");
          return;
        }
        const waitUntilIdle = new Promise((resolve, reject) => {
          onFullfilled = resolve;
          onRejected = reject;
        });
        channel.postMessage({
          type: 2,
          value: TAB_ID
        });
        logger.info("channel post: ADD_QUEUE", TAB_ID);
        return waitUntilIdle;
      },
      cancelDownloadRequest(reason) {
        if (!pending) return;
        channel.postMessage({
          type: 3,
          value: TAB_ID
        });
        logger.info("channel post: REMOVE_QUEUE", TAB_ID);
        onRejected(reason);
      },
      processNextDownload() {
        if (!downloading) return;
        downloading = false;
        if (queue.length) {
          pending = true;
          channel.postMessage({
            type: 4,
            value: queue
          });
          queue.length = 0;
          logger.info("channel post: PROCESS_NEXT");
        } else {
          channel.postMessage({
            type: 1,
            value: null
          });
          logger.info("channel post: SET_IDLE");
        }
      }
    };
  }
  let useBatchDownload = () => {
    throw new Error("You need to call `defineBatchDownload` before using `useBatchDownload`.");
  };
  const ERROR_MASKED = "Masked.";
  function defineBatchDownload(downloaderConfig) {
    const artworkCount = writable(0);
    const successd = writable([]);
    const failed = writable([]);
    const excluded = writable([]);
    const downloading = writable(false);
    const log = writable();
    const { requestDownload, cancelDownloadRequest, processNextDownload } = useChannel();
    const tasks2 = [];
    const failedTasks = [];
    const unavaliableTasks = [];
    let controller;
    let downloadCompleted;
    let downloadAbort;
    const readonlyStore = {
      artworkCount: readonly(artworkCount),
      successd: readonly(successd),
      failed: readonly(failed),
      excluded: readonly(excluded),
      downloading: readonly(downloading),
      log: readonly(log)
    };
    let $pageStart;
    let $pageEnd;
    let $downloadAllPages;
    let $blacklistTag = [];
    let $whitelistTag = [];
    let $retryFailed = false;
    const includeFilters = [];
    const excludeFilters = [];
    const {
      selectedFilters,
      blacklistTag,
      whitelistTag,
      downloadAllPages,
      pageStart,
      pageEnd,
      retryFailed
    } = optionStore;
    const watchPageRange = derived([downloadAllPages, pageStart, pageEnd], (data) => data);
    watchPageRange.subscribe(([downloadAllPages2, pageStart2, pageEnd2]) => {
      $downloadAllPages = downloadAllPages2;
      $pageStart = pageStart2;
      $pageEnd = pageEnd2;
    });
    selectedFilters.subscribe((selected) => {
      if (!selected) return;
      includeFilters.length = 0;
      excludeFilters.length = 0;
      selected.forEach((id) => {
        const filter = downloaderConfig.filterOption.filters.find((filter2) => filter2.id === id);
        if (filter) {
          if (filter.type === "include") {
            includeFilters.push(filter.fn);
          } else {
            excludeFilters.push(filter.fn);
          }
        }
      });
    });
    blacklistTag.subscribe((val) => {
      $blacklistTag = [...val];
    });
    whitelistTag.subscribe((val) => {
      $whitelistTag = [...val];
    });
    retryFailed.subscribe((val) => {
      $retryFailed = val;
    });
    const checkIfDownloadCompleted = derived(
      [artworkCount, successd, failed, excluded],
      ([$artworkCount, $successd, $failed, $excluded]) => $artworkCount === $successd.length + $failed.length + $excluded.length
    );
    checkIfDownloadCompleted.subscribe((isDone) => {
      isDone && (downloadCompleted == null ? void 0 : downloadCompleted());
    });
    function reset() {
      artworkCount.set(0);
      successd.set([]);
      failed.set([]);
      excluded.set([]);
      tasks2.length = 0;
      failedTasks.length = 0;
      unavaliableTasks.length = 0;
      controller = null;
      downloadCompleted = () => {
      };
      downloadAbort = () => {
      };
      writeLog("Info", "Reset store.");
    }
    function setDownloading(isDownloading) {
      downloading.update((val) => {
        if (val && isDownloading) throw new Error("Already downloading.");
        return isDownloading;
      });
    }
    function setArtworkCount(num) {
      artworkCount.set(num);
    }
    function addSuccessd(id) {
      successd.update((val) => {
        if (Array.isArray(id)) {
          val.push(...id);
          writeLog("Complete", id[id.length - 1]);
        } else {
          val.push(id);
          writeLog("Complete", id);
        }
        return val;
      });
    }
    function addFailed(item) {
      failed.update((val) => {
        let id;
        let reason;
        if (Array.isArray(item)) {
          val.push(...item);
          const lastItem = item[item.length - 1];
          id = lastItem.id;
          reason = lastItem.reason;
        } else {
          val.push(item);
          id = item.id;
          reason = item.reason;
        }
        if (reason instanceof Error || typeof reason === "string") {
          writeLog("Fail", id, reason);
        }
        return val;
      });
    }
    function addExcluded(id) {
      excluded.update((val) => {
        if (Array.isArray(id)) {
          val.push(...id);
          writeLog("Info", `${id.length} was excluded...`);
        } else {
          val.push(id);
          writeLog("Info", `${id} was excluded...`);
        }
        return val;
      });
    }
    function writeLog(type, arg, error) {
      const item = {
        type,
        message: ""
      };
      switch (type) {
        case "Error":
          if (!(arg instanceof Error))
            throw new TypeError("error` is expected to be error, but got " + typeof arg);
          item.message = `[${arg.name}] ${arg.message}`;
          break;
        case "Fail":
          if (typeof arg !== "string")
            throw new TypeError("`id` is expected to be string, but got " + typeof arg);
          typeof error === "string" ? item.message = `[Fail] ${arg}...${error}` : item.message = `[Fail] ${arg}...${error ? error.name + ":" + error.message : ""}`;
          break;
        default:
          item.message = `[${type}] ${arg}`;
          break;
      }
      log.set(item);
    }
    function filterTag(partialMeta) {
      if (!("tags" in partialMeta) || !Array.isArray(partialMeta.tags)) return true;
      if ($whitelistTag.length) {
        return $whitelistTag.some((tag) => partialMeta.tags.includes(tag));
      }
      if ($blacklistTag.length) {
        return !$blacklistTag.some((tag) => partialMeta.tags.includes(tag));
      }
      return true;
    }
    async function checkValidity(partialMeta) {
      try {
        const { enableTagFilter } = downloaderConfig.filterOption;
        if (enableTagFilter && !filterTag(partialMeta)) return false;
        if (!includeFilters.length) return false;
        for (let i = 0; i < excludeFilters.length; i++) {
          const fn = excludeFilters[i];
          const isExcluded = await fn(partialMeta);
          if (isExcluded) return false;
        }
        for (let i = 0; i < includeFilters.length; i++) {
          const fn = includeFilters[i];
          const isValid = await fn(partialMeta);
          if (isValid) return true;
        }
      } catch (error) {
        console.error(error);
      }
      return false;
    }
    async function batchDownload(fnId, ...restArgs) {
      setDownloading(true);
      writeLog("Info", "Start download...");
      reset();
      controller = new AbortController();
      const signal = controller.signal;
      signal.addEventListener(
        "abort",
        () => {
          cancelDownloadRequest(signal.reason);
          downloadAbort == null ? void 0 : downloadAbort(signal.reason);
          downloaderConfig.onDownloadAbort(tasks2);
        },
        { once: true }
      );
      let generator;
      try {
        generator = getGenerator(fnId, ...restArgs);
        writeLog("Info", "Waiting for other downloads to finish...");
        await requestDownload();
        await dispatchDownload(generator, signal);
        if ($retryFailed && failedTasks.length) {
          writeLog("Info", "Retry...");
          generator = retryGenerator(
            get_store_value(artworkCount),
            failedTasks.slice(),
            unavaliableTasks.slice()
          );
          failedTasks.length = 0;
          unavaliableTasks.length = 0;
          failed.set([]);
          await dispatchDownload(generator, signal);
        }
        writeLog("Info", "Download complete.");
      } catch (error) {
        logger.error(error);
        generator == null ? void 0 : generator.return();
        if (!signal.aborted) {
          controller.abort(error);
        }
        if (error instanceof Error) {
          writeLog("Error", error);
        }
      }
      setDownloading(false);
      processNextDownload();
    }
    function getGenerator(fnId, ...restArgs) {
      let genFn;
      let generator;
      const pageConfig = downloaderConfig.pageMatch.find((pageItem) => {
        const { genPageId } = pageItem;
        if (Array.isArray(genPageId)) {
          const item = genPageId.find((item2) => item2.id === fnId);
          if (item) {
            genFn = item.fn;
            return true;
          }
        } else {
          if (genPageId.id === fnId) {
            genFn = genPageId.fn;
            return true;
          }
        }
        return false;
      });
      if (!pageConfig || !genFn) throw new Error("Invalid generator id: " + fnId);
      if (!$downloadAllPages && $pageEnd < $pageStart)
        throw new Error("End page must not be less than the start page.");
      const pageRange = $downloadAllPages ? null : [$pageStart, $pageEnd];
      const { filterWhenGenerateIngPage } = downloaderConfig.filterOption;
      if (filterWhenGenerateIngPage) {
        generator = genFn(pageRange, checkValidity, ...restArgs);
      } else {
        generator = genFn(pageRange, ...restArgs);
      }
      return generator;
    }
    function* retryGenerator(total, failedArtworks, unavaliableTasks2) {
      yield {
        total,
        page: 0,
        avaliable: failedArtworks,
        invalid: [],
        unavaliable: unavaliableTasks2
      };
    }
    async function dispatchDownload(generator, signal) {
      signal.throwIfAborted();
      const waitUntilDownloadComplete = new Promise((resolve, reject) => {
        downloadCompleted = resolve;
        downloadAbort = reject;
      });
      const THRESHOLD = 5;
      const { parseMetaByArtworkId, downloadByArtworkId } = downloaderConfig;
      const { filterWhenGenerateIngPage } = downloaderConfig.filterOption;
      const dlPromise = [];
      let result;
      let status429 = false;
      const failedHanlderFactory = (id) => {
        return (reason) => {
          if (signal.aborted) return;
          addFailed({ id, reason });
          reason && logger.error(reason);
          reason !== ERROR_MASKED && failedTasks.push(id);
          if (reason instanceof RequestError && reason.status === 429) {
            status429 = true;
          }
        };
      };
      while ((result = await Promise.race([generator.next(), waitUntilDownloadComplete])) && !result.done) {
        const { total, avaliable, invalid, unavaliable } = result.value;
        logger.info(total, avaliable, invalid, unavaliable);
        signal.throwIfAborted();
        setArtworkCount(total);
        invalid.length && addExcluded(invalid);
        if (unavaliable.length) {
          addFailed(unavaliable.map((id) => ({ id, reason: ERROR_MASKED })));
          unavaliableTasks.push(...unavaliable);
        }
        if (!avaliable.length) await Promise.race([sleep(1500), waitUntilDownloadComplete]);
        for (const id of avaliable) {
          if (status429) {
            writeLog("Error", new Error("Http status: 429, wait for 30 seconds."));
            await Promise.race([sleep(3e4), waitUntilDownloadComplete]);
            status429 = false;
          }
          const artworkMeta = await parseMetaByArtworkId(id).catch(failedHanlderFactory(id));
          signal.throwIfAborted();
          if (!artworkMeta) continue;
          if (!filterWhenGenerateIngPage) {
            const isValid = await checkValidity(artworkMeta);
            if (!isValid) {
              addExcluded(id);
              continue;
            }
          }
          writeLog("Add", id);
          const taskId = generateTaskID(id);
          const processDownload = downloadByArtworkId(artworkMeta, taskId).then(function handleSucccess() {
            !signal.aborted && addSuccessd(id);
          }, failedHanlderFactory(id)).finally(function removeTask() {
            const idx = tasks2.findIndex((storeId) => storeId === id);
            idx !== -1 && tasks2.splice(idx, 1);
          });
          tasks2.push(taskId);
          dlPromise.push(processDownload);
          if (dlPromise.length >= THRESHOLD) {
            await Promise.race([...dlPromise, waitUntilDownloadComplete]);
            dlPromise.length = 0;
          } else {
            await Promise.race([sleep(1e3), waitUntilDownloadComplete]);
          }
        }
      }
      return waitUntilDownloadComplete;
    }
    function abort() {
      controller && controller.abort(new CancelError());
    }
    function generateTaskID(id) {
      return id + "_" + Math.random().toString(36).slice(2);
    }
    useBatchDownload = () => {
      return {
        ...readonlyStore,
        batchDownload,
        abort
      };
    };
  }
  if (typeof window !== "undefined")
    (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION);
  const DRAWER_STORE_KEY = "drawerStore";
  function initializeDrawerStore() {
    const drawerStore = drawerService();
    return setContext(DRAWER_STORE_KEY, drawerStore);
  }
  function drawerService() {
    const { subscribe: subscribe2, set, update: update2 } = writable({});
    return {
      subscribe: subscribe2,
      set,
      update: update2,
      /** Open the drawer. */
      open: (newSettings) => update2(() => {
        return { open: true, ...newSettings };
      }),
      /** Close the drawer. */
      close: () => update2((d) => {
        d.open = false;
        return d;
      })
    };
  }
  const MODAL_STORE_KEY = "modalStore";
  function getModalStore() {
    const modalStore = getContext(MODAL_STORE_KEY);
    if (!modalStore)
      throw new Error("modalStore is not initialized. Please ensure that `initializeStores()` is invoked in the root layout file of this app!");
    return modalStore;
  }
  function initializeModalStore() {
    const modalStore = modalService();
    return setContext(MODAL_STORE_KEY, modalStore);
  }
  function modalService() {
    const { subscribe: subscribe2, set, update: update2 } = writable([]);
    return {
      subscribe: subscribe2,
      set,
      update: update2,
      /** Append to end of queue. */
      trigger: (modal) => update2((mStore) => {
        mStore.push(modal);
        return mStore;
      }),
      /**  Remove first item in queue. */
      close: () => update2((mStore) => {
        if (mStore.length > 0)
          mStore.shift();
        return mStore;
      }),
      /** Remove all items from queue. */
      clear: () => set([])
    };
  }
  const toastDefaults = { message: "Missing Toast Message", autohide: true, timeout: 5e3 };
  const TOAST_STORE_KEY = "toastStore";
  function initializeToastStore() {
    const toastStore = toastService();
    return setContext(TOAST_STORE_KEY, toastStore);
  }
  function randomUUID() {
    const random = Math.random();
    return Number(random).toString(32);
  }
  function toastService() {
    const { subscribe: subscribe2, set, update: update2 } = writable([]);
    const close = (id) => update2((tStore) => {
      if (tStore.length > 0) {
        const index = tStore.findIndex((t2) => t2.id === id);
        const selectedToast = tStore[index];
        if (selectedToast) {
          if (selectedToast.callback)
            selectedToast.callback({ id, status: "closed" });
          if (selectedToast.timeoutId)
            clearTimeout(selectedToast.timeoutId);
          tStore.splice(index, 1);
        }
      }
      return tStore;
    });
    function handleAutoHide(toast) {
      if (toast.autohide === true) {
        return setTimeout(() => {
          close(toast.id);
        }, toast.timeout);
      }
    }
    return {
      subscribe: subscribe2,
      close,
      /** Add a new toast to the queue. */
      trigger: (toast) => {
        const id = randomUUID();
        update2((tStore) => {
          if (toast && toast.callback)
            toast.callback({ id, status: "queued" });
          if (toast.hideDismiss)
            toast.autohide = true;
          const tMerged = { ...toastDefaults, ...toast, id };
          tMerged.timeoutId = handleAutoHide(tMerged);
          tStore.push(tMerged);
          return tStore;
        });
        return id;
      },
      /** Remain visible on hover */
      freeze: (index) => update2((tStore) => {
        if (tStore.length > 0)
          clearTimeout(tStore[index].timeoutId);
        return tStore;
      }),
      /** Cancel remain visible on leave */
      unfreeze: (index) => update2((tStore) => {
        if (tStore.length > 0)
          tStore[index].timeoutId = handleAutoHide(tStore[index]);
        return tStore;
      }),
      /** Remove all toasts from queue */
      clear: () => set([])
    };
  }
  function initializeStores() {
    initializeModalStore();
    initializeToastStore();
    initializeDrawerStore();
  }
  const stores = {};
  function getStorage(type) {
    return type === "local" ? localStorage : sessionStorage;
  }
  function localStorageStore(key, initialValue, options) {
    const serializer = JSON;
    const storageType = "local";
    function updateStorage(key2, value) {
      getStorage(storageType).setItem(key2, serializer.stringify(value));
    }
    if (!stores[key]) {
      const store = writable(initialValue, (set2) => {
        const json = getStorage(storageType).getItem(key);
        if (json) {
          set2(serializer.parse(json));
        }
        {
          const handleStorage = (event) => {
            if (event.key === key)
              set2(event.newValue ? serializer.parse(event.newValue) : null);
          };
          window.addEventListener("storage", handleStorage);
          return () => window.removeEventListener("storage", handleStorage);
        }
      });
      const { subscribe: subscribe2, set } = store;
      stores[key] = {
        set(value) {
          updateStorage(key, value);
          set(value);
        },
        update(updater) {
          const value = updater(get_store_value(store));
          updateStorage(key, value);
          set(value);
        },
        subscribe: subscribe2
      };
    }
    return stores[key];
  }
  localStorageStore("modeOsPrefers", false);
  localStorageStore("modeUserPrefers", void 0);
  localStorageStore("modeCurrent", false);
  const reducedMotionQuery = "(prefers-reduced-motion: reduce)";
  function prefersReducedMotion() {
    return window.matchMedia(reducedMotionQuery).matches;
  }
  const prefersReducedMotionStore = readable(prefersReducedMotion(), (set) => {
    {
      const setReducedMotion = (event) => {
        set(event.matches);
      };
      const mediaQueryList = window.matchMedia(reducedMotionQuery);
      mediaQueryList.addEventListener("change", setReducedMotion);
      return () => {
        mediaQueryList.removeEventListener("change", setReducedMotion);
      };
    }
  });
  function focusTrap(node, enabled) {
    const elemWhitelist = 'a[href]:not([tabindex="-1"]), button:not([tabindex="-1"]), input:not([tabindex="-1"]), textarea:not([tabindex="-1"]), select:not([tabindex="-1"]), details:not([tabindex="-1"]), [tabindex]:not([tabindex="-1"])';
    let elemFirst;
    let elemLast;
    function onFirstElemKeydown(e) {
      if (e.shiftKey && e.code === "Tab") {
        e.preventDefault();
        elemLast.focus();
      }
    }
    function onLastElemKeydown(e) {
      if (!e.shiftKey && e.code === "Tab") {
        e.preventDefault();
        elemFirst.focus();
      }
    }
    const sortByTabIndex = (focusableElems) => {
      return focusableElems.filter((elem) => elem.tabIndex >= 0).sort((a, b) => {
        if (a.tabIndex === 0 && b.tabIndex > 0)
          return 1;
        else if (a.tabIndex > 0 && b.tabIndex === 0)
          return -1;
        else
          return a.tabIndex - b.tabIndex;
      });
    };
    const getFocusTrapTarget = (elemFirst2) => {
      const focusindexElements = [...node.querySelectorAll("[data-focusindex]")];
      if (!focusindexElements || focusindexElements.length === 0)
        return elemFirst2;
      return focusindexElements.sort((a, b) => {
        return +a.dataset.focusindex - +b.dataset.focusindex;
      })[0] || elemFirst2;
    };
    const onScanElements = (fromObserver) => {
      if (enabled === false)
        return;
      const focusableElems = sortByTabIndex(Array.from(node.querySelectorAll(elemWhitelist)));
      if (focusableElems.length) {
        elemFirst = focusableElems[0];
        elemLast = focusableElems[focusableElems.length - 1];
        if (!fromObserver)
          getFocusTrapTarget(elemFirst).focus();
        elemFirst.addEventListener("keydown", onFirstElemKeydown);
        elemLast.addEventListener("keydown", onLastElemKeydown);
      }
    };
    onScanElements(false);
    function onCleanUp() {
      if (elemFirst)
        elemFirst.removeEventListener("keydown", onFirstElemKeydown);
      if (elemLast)
        elemLast.removeEventListener("keydown", onLastElemKeydown);
    }
    const onObservationChange = (mutationRecords, observer3) => {
      if (mutationRecords.length) {
        onCleanUp();
        onScanElements(true);
      }
      return observer3;
    };
    const observer2 = new MutationObserver(onObservationChange);
    observer2.observe(node, { childList: true, subtree: true });
    return {
      update(newArgs) {
        enabled = newArgs;
        newArgs ? onScanElements(false) : onCleanUp();
      },
      destroy() {
        onCleanUp();
        observer2.disconnect();
      }
    };
  }
  function cubicOut(t2) {
    const f = t2 - 1;
    return f * f * f + 1;
  }
  function fade(node, { delay = 0, duration = 400, easing = identity } = {}) {
    const o = +getComputedStyle(node).opacity;
    return {
      delay,
      duration,
      easing,
      css: (t2) => `opacity: ${t2 * o}`
    };
  }
  function fly(node, { delay = 0, duration = 400, easing = cubicOut, x = 0, y = 0, opacity = 0 } = {}) {
    const style = getComputedStyle(node);
    const target_opacity = +style.opacity;
    const transform = style.transform === "none" ? "" : style.transform;
    const od = target_opacity * (1 - opacity);
    const [xValue, xUnit] = split_css_unit(x);
    const [yValue, yUnit] = split_css_unit(y);
    return {
      delay,
      duration,
      easing,
      css: (t2, u) => `
			transform: ${transform} translate(${(1 - t2) * xValue}${xUnit}, ${(1 - t2) * yValue}${yUnit});
			opacity: ${target_opacity - od * u}`
    };
  }
  function slide(node, { delay = 0, duration = 400, easing = cubicOut, axis = "y" } = {}) {
    const style = getComputedStyle(node);
    const opacity = +style.opacity;
    const primary_property = axis === "y" ? "height" : "width";
    const primary_property_value = parseFloat(style[primary_property]);
    const secondary_properties = axis === "y" ? ["top", "bottom"] : ["left", "right"];
    const capitalized_secondary_properties = secondary_properties.map(
      (e) => `${e[0].toUpperCase()}${e.slice(1)}`
    );
    const padding_start_value = parseFloat(style[`padding${capitalized_secondary_properties[0]}`]);
    const padding_end_value = parseFloat(style[`padding${capitalized_secondary_properties[1]}`]);
    const margin_start_value = parseFloat(style[`margin${capitalized_secondary_properties[0]}`]);
    const margin_end_value = parseFloat(style[`margin${capitalized_secondary_properties[1]}`]);
    const border_width_start_value = parseFloat(
      style[`border${capitalized_secondary_properties[0]}Width`]
    );
    const border_width_end_value = parseFloat(
      style[`border${capitalized_secondary_properties[1]}Width`]
    );
    return {
      delay,
      duration,
      easing,
      css: (t2) => `overflow: hidden;opacity: ${Math.min(t2 * 20, 1) * opacity};${primary_property}: ${t2 * primary_property_value}px;padding-${secondary_properties[0]}: ${t2 * padding_start_value}px;padding-${secondary_properties[1]}: ${t2 * padding_end_value}px;margin-${secondary_properties[0]}: ${t2 * margin_start_value}px;margin-${secondary_properties[1]}: ${t2 * margin_end_value}px;border-${secondary_properties[0]}-width: ${t2 * border_width_start_value}px;border-${secondary_properties[1]}-width: ${t2 * border_width_end_value}px;`
    };
  }
  function scale(node, { delay = 0, duration = 400, easing = cubicOut, start = 0, opacity = 0 } = {}) {
    const style = getComputedStyle(node);
    const target_opacity = +style.opacity;
    const transform = style.transform === "none" ? "" : style.transform;
    const sd = 1 - start;
    const od = target_opacity * (1 - opacity);
    return {
      delay,
      duration,
      easing,
      css: (_t, u) => `
			transform: ${transform} scale(${1 - sd * u});
			opacity: ${target_opacity - od * u}
		`
    };
  }
  function dynamicTransition(node, dynParams) {
    const { transition, params, enabled } = dynParams;
    if (enabled)
      return transition(node, params);
    if ("duration" in params)
      return transition(node, { duration: 0 });
    return { duration: 0 };
  }
  const get_headline_slot_changes = (dirty) => ({});
  const get_headline_slot_context = (ctx) => ({});
  const get_trail_slot_changes$2 = (dirty) => ({});
  const get_trail_slot_context$2 = (ctx) => ({});
  const get_lead_slot_changes$2 = (dirty) => ({});
  const get_lead_slot_context$2 = (ctx) => ({});
  function create_if_block_2$7(ctx) {
    let div;
    let div_class_value;
    let current;
    const lead_slot_template = (
      /*#slots*/
      ctx[22].lead
    );
    const lead_slot = create_slot(
      lead_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      get_lead_slot_context$2
    );
    return {
      c() {
        div = element("div");
        if (lead_slot) lead_slot.c();
        attr(div, "class", div_class_value = "app-bar-slot-lead " + /*classesSlotLead*/
        ctx[4]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (lead_slot) {
          lead_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (lead_slot) {
          if (lead_slot.p && (!current || dirty & /*$$scope*/
          2097152)) {
            update_slot_base(
              lead_slot,
              lead_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                lead_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                get_lead_slot_changes$2
              ),
              get_lead_slot_context$2
            );
          }
        }
        if (!current || dirty & /*classesSlotLead*/
        16 && div_class_value !== (div_class_value = "app-bar-slot-lead " + /*classesSlotLead*/
        ctx2[4])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(lead_slot, local);
        current = true;
      },
      o(local) {
        transition_out(lead_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (lead_slot) lead_slot.d(detaching);
      }
    };
  }
  function create_if_block_1$9(ctx) {
    let div;
    let div_class_value;
    let current;
    const trail_slot_template = (
      /*#slots*/
      ctx[22].trail
    );
    const trail_slot = create_slot(
      trail_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      get_trail_slot_context$2
    );
    return {
      c() {
        div = element("div");
        if (trail_slot) trail_slot.c();
        attr(div, "class", div_class_value = "app-bar-slot-trail " + /*classesSlotTrail*/
        ctx[2]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (trail_slot) {
          trail_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (trail_slot) {
          if (trail_slot.p && (!current || dirty & /*$$scope*/
          2097152)) {
            update_slot_base(
              trail_slot,
              trail_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                trail_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                get_trail_slot_changes$2
              ),
              get_trail_slot_context$2
            );
          }
        }
        if (!current || dirty & /*classesSlotTrail*/
        4 && div_class_value !== (div_class_value = "app-bar-slot-trail " + /*classesSlotTrail*/
        ctx2[2])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(trail_slot, local);
        current = true;
      },
      o(local) {
        transition_out(trail_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (trail_slot) trail_slot.d(detaching);
      }
    };
  }
  function create_if_block$g(ctx) {
    let div;
    let div_class_value;
    let current;
    const headline_slot_template = (
      /*#slots*/
      ctx[22].headline
    );
    const headline_slot = create_slot(
      headline_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      get_headline_slot_context
    );
    return {
      c() {
        div = element("div");
        if (headline_slot) headline_slot.c();
        attr(div, "class", div_class_value = "app-bar-row-headline " + /*classesRowHeadline*/
        ctx[5]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (headline_slot) {
          headline_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (headline_slot) {
          if (headline_slot.p && (!current || dirty & /*$$scope*/
          2097152)) {
            update_slot_base(
              headline_slot,
              headline_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                headline_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                get_headline_slot_changes
              ),
              get_headline_slot_context
            );
          }
        }
        if (!current || dirty & /*classesRowHeadline*/
        32 && div_class_value !== (div_class_value = "app-bar-row-headline " + /*classesRowHeadline*/
        ctx2[5])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(headline_slot, local);
        current = true;
      },
      o(local) {
        transition_out(headline_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (headline_slot) headline_slot.d(detaching);
      }
    };
  }
  function create_fragment$o(ctx) {
    let div2;
    let div1;
    let t0;
    let div0;
    let div0_class_value;
    let t1;
    let div1_class_value;
    let t2;
    let div2_class_value;
    let current;
    let if_block0 = (
      /*$$slots*/
      ctx[8].lead && create_if_block_2$7(ctx)
    );
    const default_slot_template = (
      /*#slots*/
      ctx[22].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      null
    );
    let if_block1 = (
      /*$$slots*/
      ctx[8].trail && create_if_block_1$9(ctx)
    );
    let if_block2 = (
      /*$$slots*/
      ctx[8].headline && create_if_block$g(ctx)
    );
    return {
      c() {
        div2 = element("div");
        div1 = element("div");
        if (if_block0) if_block0.c();
        t0 = space();
        div0 = element("div");
        if (default_slot) default_slot.c();
        t1 = space();
        if (if_block1) if_block1.c();
        t2 = space();
        if (if_block2) if_block2.c();
        attr(div0, "class", div0_class_value = "app-bar-slot-default " + /*classesSlotDefault*/
        ctx[3]);
        attr(div1, "class", div1_class_value = "app-bar-row-main " + /*classesRowMain*/
        ctx[6]);
        attr(div2, "class", div2_class_value = "app-bar " + /*classesBase*/
        ctx[7]);
        attr(div2, "data-testid", "app-bar");
        attr(div2, "role", "toolbar");
        attr(
          div2,
          "aria-label",
          /*label*/
          ctx[0]
        );
        attr(
          div2,
          "aria-labelledby",
          /*labelledby*/
          ctx[1]
        );
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, div1);
        if (if_block0) if_block0.m(div1, null);
        append(div1, t0);
        append(div1, div0);
        if (default_slot) {
          default_slot.m(div0, null);
        }
        append(div1, t1);
        if (if_block1) if_block1.m(div1, null);
        append(div2, t2);
        if (if_block2) if_block2.m(div2, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        if (
          /*$$slots*/
          ctx2[8].lead
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            256) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_2$7(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div1, t0);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          2097152)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classesSlotDefault*/
        8 && div0_class_value !== (div0_class_value = "app-bar-slot-default " + /*classesSlotDefault*/
        ctx2[3])) {
          attr(div0, "class", div0_class_value);
        }
        if (
          /*$$slots*/
          ctx2[8].trail
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            256) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_1$9(ctx2);
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(div1, null);
          }
        } else if (if_block1) {
          group_outros();
          transition_out(if_block1, 1, 1, () => {
            if_block1 = null;
          });
          check_outros();
        }
        if (!current || dirty & /*classesRowMain*/
        64 && div1_class_value !== (div1_class_value = "app-bar-row-main " + /*classesRowMain*/
        ctx2[6])) {
          attr(div1, "class", div1_class_value);
        }
        if (
          /*$$slots*/
          ctx2[8].headline
        ) {
          if (if_block2) {
            if_block2.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            256) {
              transition_in(if_block2, 1);
            }
          } else {
            if_block2 = create_if_block$g(ctx2);
            if_block2.c();
            transition_in(if_block2, 1);
            if_block2.m(div2, null);
          }
        } else if (if_block2) {
          group_outros();
          transition_out(if_block2, 1, 1, () => {
            if_block2 = null;
          });
          check_outros();
        }
        if (!current || dirty & /*classesBase*/
        128 && div2_class_value !== (div2_class_value = "app-bar " + /*classesBase*/
        ctx2[7])) {
          attr(div2, "class", div2_class_value);
        }
        if (!current || dirty & /*label*/
        1) {
          attr(
            div2,
            "aria-label",
            /*label*/
            ctx2[0]
          );
        }
        if (!current || dirty & /*labelledby*/
        2) {
          attr(
            div2,
            "aria-labelledby",
            /*labelledby*/
            ctx2[1]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(default_slot, local);
        transition_in(if_block1);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(default_slot, local);
        transition_out(if_block1);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        if (if_block0) if_block0.d();
        if (default_slot) default_slot.d(detaching);
        if (if_block1) if_block1.d();
        if (if_block2) if_block2.d();
      }
    };
  }
  const cBase$a = "flex flex-col";
  const cRowMain = "grid items-center";
  const cRowHeadline = "";
  const cSlotLead = "flex-none flex justify-between items-center";
  const cSlotDefault = "flex-auto";
  const cSlotTrail = "flex-none flex items-center space-x-4";
  function instance$o($$self, $$props, $$invalidate) {
    let classesBase;
    let classesRowMain;
    let classesRowHeadline;
    let classesSlotLead;
    let classesSlotDefault;
    let classesSlotTrail;
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { background = "bg-surface-100-800-token" } = $$props;
    let { border = "" } = $$props;
    let { padding = "p-4" } = $$props;
    let { shadow = "" } = $$props;
    let { spacing = "space-y-4" } = $$props;
    let { gridColumns = "grid-cols-[auto_1fr_auto]" } = $$props;
    let { gap = "gap-4" } = $$props;
    let { regionRowMain = "" } = $$props;
    let { regionRowHeadline = "" } = $$props;
    let { slotLead = "" } = $$props;
    let { slotDefault = "" } = $$props;
    let { slotTrail = "" } = $$props;
    let { label = "" } = $$props;
    let { labelledby = "" } = $$props;
    $$self.$$set = ($$new_props) => {
      $$invalidate(23, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("background" in $$new_props) $$invalidate(9, background = $$new_props.background);
      if ("border" in $$new_props) $$invalidate(10, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(11, padding = $$new_props.padding);
      if ("shadow" in $$new_props) $$invalidate(12, shadow = $$new_props.shadow);
      if ("spacing" in $$new_props) $$invalidate(13, spacing = $$new_props.spacing);
      if ("gridColumns" in $$new_props) $$invalidate(14, gridColumns = $$new_props.gridColumns);
      if ("gap" in $$new_props) $$invalidate(15, gap = $$new_props.gap);
      if ("regionRowMain" in $$new_props) $$invalidate(16, regionRowMain = $$new_props.regionRowMain);
      if ("regionRowHeadline" in $$new_props) $$invalidate(17, regionRowHeadline = $$new_props.regionRowHeadline);
      if ("slotLead" in $$new_props) $$invalidate(18, slotLead = $$new_props.slotLead);
      if ("slotDefault" in $$new_props) $$invalidate(19, slotDefault = $$new_props.slotDefault);
      if ("slotTrail" in $$new_props) $$invalidate(20, slotTrail = $$new_props.slotTrail);
      if ("label" in $$new_props) $$invalidate(0, label = $$new_props.label);
      if ("labelledby" in $$new_props) $$invalidate(1, labelledby = $$new_props.labelledby);
      if ("$$scope" in $$new_props) $$invalidate(21, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(7, classesBase = `${cBase$a} ${background} ${border} ${spacing} ${padding} ${shadow} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*gridColumns, gap, regionRowMain*/
      114688) {
        $$invalidate(6, classesRowMain = `${cRowMain} ${gridColumns} ${gap} ${regionRowMain}`);
      }
      if ($$self.$$.dirty & /*regionRowHeadline*/
      131072) {
        $$invalidate(5, classesRowHeadline = `${cRowHeadline} ${regionRowHeadline}`);
      }
      if ($$self.$$.dirty & /*slotLead*/
      262144) {
        $$invalidate(4, classesSlotLead = `${cSlotLead} ${slotLead}`);
      }
      if ($$self.$$.dirty & /*slotDefault*/
      524288) {
        $$invalidate(3, classesSlotDefault = `${cSlotDefault} ${slotDefault}`);
      }
      if ($$self.$$.dirty & /*slotTrail*/
      1048576) {
        $$invalidate(2, classesSlotTrail = `${cSlotTrail} ${slotTrail}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      label,
      labelledby,
      classesSlotTrail,
      classesSlotDefault,
      classesSlotLead,
      classesRowHeadline,
      classesRowMain,
      classesBase,
      $$slots,
      background,
      border,
      padding,
      shadow,
      spacing,
      gridColumns,
      gap,
      regionRowMain,
      regionRowHeadline,
      slotLead,
      slotDefault,
      slotTrail,
      $$scope,
      slots
    ];
  }
  class AppBar extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$o, create_fragment$o, safe_not_equal, {
        background: 9,
        border: 10,
        padding: 11,
        shadow: 12,
        spacing: 13,
        gridColumns: 14,
        gap: 15,
        regionRowMain: 16,
        regionRowHeadline: 17,
        slotLead: 18,
        slotDefault: 19,
        slotTrail: 20,
        label: 0,
        labelledby: 1
      });
    }
  }
  function fallback_block(ctx) {
    let t2;
    return {
      c() {
        t2 = text("Select a File");
      },
      m(target, anchor) {
        insert(target, t2, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t2);
        }
      }
    };
  }
  function create_fragment$n(ctx) {
    let div1;
    let div0;
    let input;
    let t2;
    let button_1;
    let button_1_class_value;
    let button_1_disabled_value;
    let div1_class_value;
    let current;
    let mounted;
    let dispose;
    let input_levels = [
      { type: "file" },
      { name: (
        /*name*/
        ctx[2]
      ) },
      /*prunedRestProps*/
      ctx[6]()
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    const default_slot_template = (
      /*#slots*/
      ctx[11].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[10],
      null
    );
    const default_slot_or_fallback = default_slot || fallback_block();
    return {
      c() {
        div1 = element("div");
        div0 = element("div");
        input = element("input");
        t2 = space();
        button_1 = element("button");
        if (default_slot_or_fallback) default_slot_or_fallback.c();
        set_attributes(input, input_data);
        attr(div0, "class", "w-0 h-0 overflow-hidden");
        attr(button_1, "type", "button");
        attr(button_1, "class", button_1_class_value = "file-button-btn " + /*classesButton*/
        ctx[3]);
        button_1.disabled = button_1_disabled_value = /*$$restProps*/
        ctx[7].disabled;
        attr(div1, "class", div1_class_value = "file-button " + /*classesBase*/
        ctx[4]);
        attr(div1, "data-testid", "file-button");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
        append(div0, input);
        if (input.autofocus) input.focus();
        ctx[16](input);
        append(div1, t2);
        append(div1, button_1);
        if (default_slot_or_fallback) {
          default_slot_or_fallback.m(button_1, null);
        }
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler*/
              ctx[17]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[15]
            ),
            listen(
              button_1,
              "click",
              /*onButtonClick*/
              ctx[5]
            ),
            listen(
              button_1,
              "keydown",
              /*keydown_handler*/
              ctx[12]
            ),
            listen(
              button_1,
              "keyup",
              /*keyup_handler*/
              ctx[13]
            ),
            listen(
              button_1,
              "keypress",
              /*keypress_handler*/
              ctx[14]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, [dirty]) {
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { type: "file" },
          (!current || dirty & /*name*/
          4) && { name: (
            /*name*/
            ctx2[2]
          ) },
          /*prunedRestProps*/
          ctx2[6]()
        ]));
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          1024)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[10],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[10]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[10],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classesButton*/
        8 && button_1_class_value !== (button_1_class_value = "file-button-btn " + /*classesButton*/
        ctx2[3])) {
          attr(button_1, "class", button_1_class_value);
        }
        if (!current || dirty & /*$$restProps*/
        128 && button_1_disabled_value !== (button_1_disabled_value = /*$$restProps*/
        ctx2[7].disabled)) {
          button_1.disabled = button_1_disabled_value;
        }
        if (!current || dirty & /*classesBase*/
        16 && div1_class_value !== (div1_class_value = "file-button " + /*classesBase*/
        ctx2[4])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot_or_fallback, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot_or_fallback, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        ctx[16](null);
        if (default_slot_or_fallback) default_slot_or_fallback.d(detaching);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function instance$n($$self, $$props, $$invalidate) {
    let classesBase;
    let classesButton;
    const omit_props_names = ["files", "fileInput", "name", "width", "button"];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let { $$slots: slots = {}, $$scope } = $$props;
    let { files = void 0 } = $$props;
    let { fileInput = void 0 } = $$props;
    let { name } = $$props;
    let { width = "" } = $$props;
    let { button = "btn variant-filled" } = $$props;
    function onButtonClick() {
      if (fileInput) fileInput.click();
    }
    function prunedRestProps() {
      delete $$restProps.class;
      return $$restProps;
    }
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        fileInput = $$value;
        $$invalidate(1, fileInput);
      });
    }
    function input_change_handler() {
      files = this.files;
      $$invalidate(0, files);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(18, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(7, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("files" in $$new_props) $$invalidate(0, files = $$new_props.files);
      if ("fileInput" in $$new_props) $$invalidate(1, fileInput = $$new_props.fileInput);
      if ("name" in $$new_props) $$invalidate(2, name = $$new_props.name);
      if ("width" in $$new_props) $$invalidate(8, width = $$new_props.width);
      if ("button" in $$new_props) $$invalidate(9, button = $$new_props.button);
      if ("$$scope" in $$new_props) $$invalidate(10, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(4, classesBase = `${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*button, width*/
      768) {
        $$invalidate(3, classesButton = `${button} ${width}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      files,
      fileInput,
      name,
      classesButton,
      classesBase,
      onButtonClick,
      prunedRestProps,
      $$restProps,
      width,
      button,
      $$scope,
      slots,
      keydown_handler,
      keyup_handler,
      keypress_handler,
      change_handler,
      input_binding,
      input_change_handler
    ];
  }
  class FileButton extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$n, create_fragment$n, safe_not_equal, {
        files: 0,
        fileInput: 1,
        name: 2,
        width: 8,
        button: 9
      });
    }
  }
  function flip(node, { from, to }, params = {}) {
    const style = getComputedStyle(node);
    const transform = style.transform === "none" ? "" : style.transform;
    const [ox, oy] = style.transformOrigin.split(" ").map(parseFloat);
    const dx = from.left + from.width * ox / to.width - (to.left + ox);
    const dy = from.top + from.height * oy / to.height - (to.top + oy);
    const { delay = 0, duration = (d) => Math.sqrt(d) * 120, easing = cubicOut } = params;
    return {
      delay,
      duration: is_function(duration) ? duration(Math.sqrt(dx * dx + dy * dy)) : duration,
      easing,
      css: (t2, u) => {
        const x = u * dx;
        const y = u * dy;
        const sx = t2 + u * from.width / to.width;
        const sy = t2 + u * from.height / to.height;
        return `transform: ${transform} translate(${x}px, ${y}px) scale(${sx}, ${sy});`;
      }
    };
  }
  function get_each_context$5(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[65] = list[i].id;
    child_ctx[66] = list[i].val;
    child_ctx[68] = i;
    return child_ctx;
  }
  function get_each_context_1$3(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[69] = list[i];
    return child_ctx;
  }
  function create_each_block_1$3(ctx) {
    let option_1;
    let t_value = (
      /*option*/
      ctx[69] + ""
    );
    let t2;
    let option_1_value_value;
    return {
      c() {
        option_1 = element("option");
        t2 = text(t_value);
        option_1.__value = option_1_value_value = /*option*/
        ctx[69];
        set_input_value(option_1, option_1.__value);
      },
      m(target, anchor) {
        insert(target, option_1, anchor);
        append(option_1, t2);
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*value*/
        1 && t_value !== (t_value = /*option*/
        ctx2[69] + "")) set_data(t2, t_value);
        if (dirty[0] & /*value*/
        1 && option_1_value_value !== (option_1_value_value = /*option*/
        ctx2[69])) {
          option_1.__value = option_1_value_value;
          set_input_value(option_1, option_1.__value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(option_1);
        }
      }
    };
  }
  function create_if_block$f(ctx) {
    let div;
    let each_blocks = [];
    let each_1_lookup = /* @__PURE__ */ new Map();
    let div_class_value;
    let div_intro;
    let div_outro;
    let current;
    let each_value = ensure_array_like(
      /*chipValues*/
      ctx[16]
    );
    const get_key = (ctx2) => (
      /*id*/
      ctx2[65]
    );
    for (let i = 0; i < each_value.length; i += 1) {
      let child_ctx = get_each_context$5(ctx, each_value, i);
      let key = get_key(child_ctx);
      each_1_lookup.set(key, each_blocks[i] = create_each_block$5(key, child_ctx));
    }
    return {
      c() {
        div = element("div");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        attr(div, "class", div_class_value = "input-chip-list " + /*classesChipList*/
        ctx[19]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(div, null);
          }
        }
        current = true;
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty[0] & /*chips, chipTransitionOut, chipTransitionOutParams, transitions, removeChipInternally, chipValues*/
        8503456) {
          each_value = ensure_array_like(
            /*chipValues*/
            ctx[16]
          );
          group_outros();
          for (let i = 0; i < each_blocks.length; i += 1) each_blocks[i].r();
          each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, div, fix_and_outro_and_destroy_block, create_each_block$5, null, get_each_context$5);
          for (let i = 0; i < each_blocks.length; i += 1) each_blocks[i].a();
          check_outros();
        }
        if (!current || dirty[0] & /*classesChipList*/
        524288 && div_class_value !== (div_class_value = "input-chip-list " + /*classesChipList*/
        ctx[19])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        for (let i = 0; i < each_value.length; i += 1) {
          transition_in(each_blocks[i]);
        }
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (div_outro) div_outro.end(1);
            div_intro = create_in_transition(div, dynamicTransition, {
              transition: (
                /*listTransitionIn*/
                ctx[8]
              ),
              params: (
                /*listTransitionInParams*/
                ctx[9]
              ),
              enabled: (
                /*transitions*/
                ctx[7]
              )
            });
            div_intro.start();
          });
        }
        current = true;
      },
      o(local) {
        for (let i = 0; i < each_blocks.length; i += 1) {
          transition_out(each_blocks[i]);
        }
        if (div_intro) div_intro.invalidate();
        if (local) {
          div_outro = create_out_transition(div, dynamicTransition, {
            transition: (
              /*listTransitionOut*/
              ctx[10]
            ),
            params: (
              /*listTransitionOutParams*/
              ctx[11]
            ),
            enabled: (
              /*transitions*/
              ctx[7]
            )
          });
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].d();
        }
        if (detaching && div_outro) div_outro.end();
      }
    };
  }
  function create_each_block$5(key_1, ctx) {
    let div;
    let button;
    let span0;
    let t0_value = (
      /*val*/
      ctx[66] + ""
    );
    let t0;
    let t1;
    let span1;
    let button_class_value;
    let button_intro;
    let button_outro;
    let t3;
    let rect;
    let stop_animation = noop;
    let current;
    let mounted;
    let dispose;
    function click_handler_1(...args) {
      return (
        /*click_handler_1*/
        ctx[52](
          /*i*/
          ctx[68],
          /*val*/
          ctx[66],
          ...args
        )
      );
    }
    return {
      key: key_1,
      first: null,
      c() {
        div = element("div");
        button = element("button");
        span0 = element("span");
        t0 = text(t0_value);
        t1 = space();
        span1 = element("span");
        span1.textContent = "✕";
        t3 = space();
        attr(button, "type", "button");
        attr(button, "class", button_class_value = "chip " + /*chips*/
        ctx[5]);
        this.first = div;
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, button);
        append(button, span0);
        append(span0, t0);
        append(button, t1);
        append(button, span1);
        append(div, t3);
        current = true;
        if (!mounted) {
          dispose = [
            listen(button, "click", click_handler_1),
            listen(
              button,
              "click",
              /*click_handler*/
              ctx[42]
            ),
            listen(
              button,
              "keypress",
              /*keypress_handler*/
              ctx[43]
            ),
            listen(
              button,
              "keydown",
              /*keydown_handler*/
              ctx[44]
            ),
            listen(
              button,
              "keyup",
              /*keyup_handler*/
              ctx[45]
            )
          ];
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if ((!current || dirty[0] & /*chipValues*/
        65536) && t0_value !== (t0_value = /*val*/
        ctx[66] + "")) set_data(t0, t0_value);
        if (!current || dirty[0] & /*chips*/
        32 && button_class_value !== (button_class_value = "chip " + /*chips*/
        ctx[5])) {
          attr(button, "class", button_class_value);
        }
      },
      r() {
        rect = div.getBoundingClientRect();
      },
      f() {
        fix_position(div);
        stop_animation();
      },
      a() {
        stop_animation();
        stop_animation = create_animation(div, rect, flip, { duration: (
          /*duration*/
          ctx[3]
        ) });
      },
      i(local) {
        if (current) return;
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (button_outro) button_outro.end(1);
            button_intro = create_in_transition(button, dynamicTransition, {
              transition: (
                /*chipTransitionIn*/
                ctx[12]
              ),
              params: (
                /*chipTransitionInParams*/
                ctx[13]
              ),
              enabled: (
                /*transitions*/
                ctx[7]
              )
            });
            button_intro.start();
          });
        }
        current = true;
      },
      o(local) {
        if (button_intro) button_intro.invalidate();
        if (local) {
          button_outro = create_out_transition(button, dynamicTransition, {
            transition: (
              /*chipTransitionOut*/
              ctx[14]
            ),
            params: (
              /*chipTransitionOutParams*/
              ctx[15]
            ),
            enabled: (
              /*transitions*/
              ctx[7]
            )
          });
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (detaching && button_outro) button_outro.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_fragment$m(ctx) {
    let div2;
    let div0;
    let select;
    let t0;
    let div1;
    let input_1;
    let input_1_placeholder_value;
    let input_1_class_value;
    let input_1_disabled_value;
    let t1;
    let div1_class_value;
    let div2_class_value;
    let current;
    let mounted;
    let dispose;
    let each_value_1 = ensure_array_like(
      /*value*/
      ctx[0]
    );
    let each_blocks = [];
    for (let i = 0; i < each_value_1.length; i += 1) {
      each_blocks[i] = create_each_block_1$3(get_each_context_1$3(ctx, each_value_1, i));
    }
    let if_block = (
      /*chipValues*/
      ctx[16].length && create_if_block$f(ctx)
    );
    return {
      c() {
        div2 = element("div");
        div0 = element("div");
        select = element("select");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        t0 = space();
        div1 = element("div");
        input_1 = element("input");
        t1 = space();
        if (if_block) if_block.c();
        attr(
          select,
          "name",
          /*name*/
          ctx[2]
        );
        select.multiple = true;
        select.required = /*required*/
        ctx[4];
        attr(
          select,
          "aria-label",
          /*label*/
          ctx[6]
        );
        attr(select, "tabindex", "-1");
        if (
          /*value*/
          ctx[0] === void 0
        ) add_render_callback(() => (
          /*select_change_handler*/
          ctx[50].call(select)
        ));
        attr(div0, "class", "h-0 overflow-hidden");
        attr(input_1, "type", "text");
        attr(input_1, "placeholder", input_1_placeholder_value = /*$$restProps*/
        ctx[24].placeholder ?? "Enter values...");
        attr(input_1, "class", input_1_class_value = "input-chip-field " + /*classesInput*/
        ctx[18]);
        input_1.disabled = input_1_disabled_value = /*$$restProps*/
        ctx[24].disabled;
        attr(div1, "class", div1_class_value = "input-chip-wrapper " + /*classesChipWrapper*/
        ctx[20]);
        attr(div2, "class", div2_class_value = "input-chip " + /*classesBase*/
        ctx[21]);
        toggle_class(
          div2,
          "opacity-50",
          /*$$restProps*/
          ctx[24].disabled
        );
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, div0);
        append(div0, select);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(select, null);
          }
        }
        ctx[49](select);
        select_options(
          select,
          /*value*/
          ctx[0]
        );
        append(div2, t0);
        append(div2, div1);
        append(div1, input_1);
        set_input_value(
          input_1,
          /*input*/
          ctx[1]
        );
        append(div1, t1);
        if (if_block) if_block.m(div1, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              select,
              "change",
              /*select_change_handler*/
              ctx[50]
            ),
            listen(
              input_1,
              "input",
              /*input_1_input_handler*/
              ctx[51]
            ),
            listen(
              input_1,
              "keydown",
              /*onKeyHandler*/
              ctx[22]
            ),
            listen(
              input_1,
              "input",
              /*input_handler*/
              ctx[46]
            ),
            listen(
              input_1,
              "focus",
              /*focus_handler*/
              ctx[47]
            ),
            listen(
              input_1,
              "blur",
              /*blur_handler*/
              ctx[48]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*value*/
        1) {
          each_value_1 = ensure_array_like(
            /*value*/
            ctx2[0]
          );
          let i;
          for (i = 0; i < each_value_1.length; i += 1) {
            const child_ctx = get_each_context_1$3(ctx2, each_value_1, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block_1$3(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(select, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value_1.length;
        }
        if (!current || dirty[0] & /*name*/
        4) {
          attr(
            select,
            "name",
            /*name*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*required*/
        16) {
          select.required = /*required*/
          ctx2[4];
        }
        if (!current || dirty[0] & /*label*/
        64) {
          attr(
            select,
            "aria-label",
            /*label*/
            ctx2[6]
          );
        }
        if (dirty[0] & /*value*/
        1) {
          select_options(
            select,
            /*value*/
            ctx2[0]
          );
        }
        if (!current || dirty[0] & /*$$restProps*/
        16777216 && input_1_placeholder_value !== (input_1_placeholder_value = /*$$restProps*/
        ctx2[24].placeholder ?? "Enter values...")) {
          attr(input_1, "placeholder", input_1_placeholder_value);
        }
        if (!current || dirty[0] & /*classesInput*/
        262144 && input_1_class_value !== (input_1_class_value = "input-chip-field " + /*classesInput*/
        ctx2[18])) {
          attr(input_1, "class", input_1_class_value);
        }
        if (!current || dirty[0] & /*$$restProps*/
        16777216 && input_1_disabled_value !== (input_1_disabled_value = /*$$restProps*/
        ctx2[24].disabled)) {
          input_1.disabled = input_1_disabled_value;
        }
        if (dirty[0] & /*input*/
        2 && input_1.value !== /*input*/
        ctx2[1]) {
          set_input_value(
            input_1,
            /*input*/
            ctx2[1]
          );
        }
        if (
          /*chipValues*/
          ctx2[16].length
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty[0] & /*chipValues*/
            65536) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$f(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(div1, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*classesChipWrapper*/
        1048576 && div1_class_value !== (div1_class_value = "input-chip-wrapper " + /*classesChipWrapper*/
        ctx2[20])) {
          attr(div1, "class", div1_class_value);
        }
        if (!current || dirty[0] & /*classesBase*/
        2097152 && div2_class_value !== (div2_class_value = "input-chip " + /*classesBase*/
        ctx2[21])) {
          attr(div2, "class", div2_class_value);
        }
        if (!current || dirty[0] & /*classesBase, $$restProps*/
        18874368) {
          toggle_class(
            div2,
            "opacity-50",
            /*$$restProps*/
            ctx2[24].disabled
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        destroy_each(each_blocks, detaching);
        ctx[49](null);
        if (if_block) if_block.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase$9 = "textarea cursor-pointer";
  const cChipWrapper = "space-y-4";
  const cChipList = "flex flex-wrap gap-2";
  const cInputField = "unstyled bg-transparent border-0 !ring-0 p-0 w-full";
  function instance$m($$self, $$props, $$invalidate) {
    let classesInvalid;
    let classesBase;
    let classesChipWrapper;
    let classesChipList;
    let classesInput;
    const omit_props_names = [
      "input",
      "name",
      "value",
      "whitelist",
      "max",
      "minlength",
      "maxlength",
      "allowUpperCase",
      "allowDuplicates",
      "validation",
      "duration",
      "required",
      "chips",
      "invalid",
      "padding",
      "rounded",
      "regionChipWrapper",
      "regionChipList",
      "regionInput",
      "label",
      "transitions",
      "listTransitionIn",
      "listTransitionInParams",
      "listTransitionOut",
      "listTransitionOutParams",
      "chipTransitionIn",
      "chipTransitionInParams",
      "chipTransitionOut",
      "chipTransitionOutParams",
      "addChip",
      "removeChip"
    ];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let $prefersReducedMotionStore;
    component_subscribe($$self, prefersReducedMotionStore, ($$value) => $$invalidate(53, $prefersReducedMotionStore = $$value));
    const dispatch2 = createEventDispatcher();
    let { input = "" } = $$props;
    let { name } = $$props;
    let { value = [] } = $$props;
    let { whitelist = [] } = $$props;
    let { max: max2 = -1 } = $$props;
    let { minlength = -1 } = $$props;
    let { maxlength = -1 } = $$props;
    let { allowUpperCase = false } = $$props;
    let { allowDuplicates = false } = $$props;
    let { validation = () => true } = $$props;
    let { duration = 150 } = $$props;
    let { required = false } = $$props;
    let { chips = "variant-filled" } = $$props;
    let { invalid = "input-error" } = $$props;
    let { padding = "p-2" } = $$props;
    let { rounded = "rounded-container-token" } = $$props;
    let { regionChipWrapper = "" } = $$props;
    let { regionChipList = "" } = $$props;
    let { regionInput = "" } = $$props;
    let { label = "Chips select" } = $$props;
    let { transitions = !$prefersReducedMotionStore } = $$props;
    let { listTransitionIn = fly } = $$props;
    let { listTransitionInParams = { duration: 150, opacity: 0, y: -20 } } = $$props;
    let { listTransitionOut = fly } = $$props;
    let { listTransitionOutParams = { duration: 150, opacity: 0, y: -20 } } = $$props;
    let { chipTransitionIn = scale } = $$props;
    let { chipTransitionInParams = { duration: 150, opacity: 0 } } = $$props;
    let { chipTransitionOut = scale } = $$props;
    let { chipTransitionOutParams = { duration: 150, opacity: 0 } } = $$props;
    let inputValid = true;
    let chipValues = (value == null ? void 0 : value.map((val) => {
      return { val, id: Math.random() };
    })) || [];
    function resetFormHandler() {
      $$invalidate(0, value = []);
    }
    let selectElement;
    onMount(() => {
      if (!selectElement.form) return;
      const externalForm = selectElement.form;
      externalForm.addEventListener("reset", resetFormHandler);
      return () => {
        externalForm.removeEventListener("reset", resetFormHandler);
      };
    });
    function validateCustom(chip) {
      return validation === void 0 || validation(chip);
    }
    function validateCount() {
      return max2 === -1 || value.length < max2;
    }
    function validateLength(chip) {
      return (minlength === -1 || chip.length >= minlength) && (maxlength === -1 || chip.length <= maxlength);
    }
    function validateWhiteList(chip) {
      return whitelist.length === 0 || whitelist.includes(chip);
    }
    function validateDuplicates(chip) {
      return allowDuplicates || !value.includes(chip);
    }
    function validate(chip = "") {
      if (!chip && !input) return false;
      chip = chip !== "" ? chip.trim() : input.trim();
      return validateCustom(chip) && validateCount() && validateLength(chip) && validateWhiteList(chip) && validateDuplicates(chip);
    }
    function addChipCommon(chip) {
      chip = allowUpperCase ? chip : chip.toLowerCase();
      value.push(chip);
      $$invalidate(0, value);
      chipValues.push({ val: chip, id: Math.random() });
      $$invalidate(16, chipValues), $$invalidate(0, value);
    }
    function removeChipCommon(chip) {
      let chipIndex = value.indexOf(chip);
      value.splice(chipIndex, 1);
      $$invalidate(0, value);
      chipValues.splice(chipIndex, 1);
      $$invalidate(16, chipValues), $$invalidate(0, value);
    }
    function onKeyHandler(event) {
      if (event.key !== "Enter") return;
      event.preventDefault();
      $$invalidate(40, inputValid = validate());
      if (inputValid === false) {
        dispatch2("invalid", { event, input });
        return;
      }
      addChipCommon(input);
      dispatch2("add", {
        event,
        chipIndex: value.length - 1,
        chipValue: input
      });
      $$invalidate(1, input = "");
    }
    function removeChipInternally(event, chipIndex, chipValue) {
      if ($$restProps.disabled) return;
      removeChipCommon(chipValue);
      dispatch2("remove", { event, chipIndex, chipValue });
    }
    function addChip(chip) {
      $$invalidate(40, inputValid = validate(chip));
      if (inputValid === false) {
        dispatch2("invalidManually", { input: chip });
        return;
      }
      addChipCommon(chip);
      dispatch2("addManually", {
        chipIndex: value.length - 1,
        chipValue: chip
      });
    }
    function removeChip(chip) {
      if ($$restProps.disabled) return;
      removeChipCommon(chip);
      dispatch2("removeManually", { chipValue: chip });
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_handler(event) {
      bubble.call(this, $$self, event);
    }
    function focus_handler(event) {
      bubble.call(this, $$self, event);
    }
    function blur_handler(event) {
      bubble.call(this, $$self, event);
    }
    function select_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        selectElement = $$value;
        $$invalidate(17, selectElement);
      });
    }
    function select_change_handler() {
      value = select_multiple_value(this);
      $$invalidate(0, value);
    }
    function input_1_input_handler() {
      input = this.value;
      $$invalidate(1, input);
    }
    const click_handler_1 = (i, val, e) => removeChipInternally(e, i, val);
    $$self.$$set = ($$new_props) => {
      $$invalidate(64, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(24, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("input" in $$new_props) $$invalidate(1, input = $$new_props.input);
      if ("name" in $$new_props) $$invalidate(2, name = $$new_props.name);
      if ("value" in $$new_props) $$invalidate(0, value = $$new_props.value);
      if ("whitelist" in $$new_props) $$invalidate(25, whitelist = $$new_props.whitelist);
      if ("max" in $$new_props) $$invalidate(26, max2 = $$new_props.max);
      if ("minlength" in $$new_props) $$invalidate(27, minlength = $$new_props.minlength);
      if ("maxlength" in $$new_props) $$invalidate(28, maxlength = $$new_props.maxlength);
      if ("allowUpperCase" in $$new_props) $$invalidate(29, allowUpperCase = $$new_props.allowUpperCase);
      if ("allowDuplicates" in $$new_props) $$invalidate(30, allowDuplicates = $$new_props.allowDuplicates);
      if ("validation" in $$new_props) $$invalidate(31, validation = $$new_props.validation);
      if ("duration" in $$new_props) $$invalidate(3, duration = $$new_props.duration);
      if ("required" in $$new_props) $$invalidate(4, required = $$new_props.required);
      if ("chips" in $$new_props) $$invalidate(5, chips = $$new_props.chips);
      if ("invalid" in $$new_props) $$invalidate(32, invalid = $$new_props.invalid);
      if ("padding" in $$new_props) $$invalidate(33, padding = $$new_props.padding);
      if ("rounded" in $$new_props) $$invalidate(34, rounded = $$new_props.rounded);
      if ("regionChipWrapper" in $$new_props) $$invalidate(35, regionChipWrapper = $$new_props.regionChipWrapper);
      if ("regionChipList" in $$new_props) $$invalidate(36, regionChipList = $$new_props.regionChipList);
      if ("regionInput" in $$new_props) $$invalidate(37, regionInput = $$new_props.regionInput);
      if ("label" in $$new_props) $$invalidate(6, label = $$new_props.label);
      if ("transitions" in $$new_props) $$invalidate(7, transitions = $$new_props.transitions);
      if ("listTransitionIn" in $$new_props) $$invalidate(8, listTransitionIn = $$new_props.listTransitionIn);
      if ("listTransitionInParams" in $$new_props) $$invalidate(9, listTransitionInParams = $$new_props.listTransitionInParams);
      if ("listTransitionOut" in $$new_props) $$invalidate(10, listTransitionOut = $$new_props.listTransitionOut);
      if ("listTransitionOutParams" in $$new_props) $$invalidate(11, listTransitionOutParams = $$new_props.listTransitionOutParams);
      if ("chipTransitionIn" in $$new_props) $$invalidate(12, chipTransitionIn = $$new_props.chipTransitionIn);
      if ("chipTransitionInParams" in $$new_props) $$invalidate(13, chipTransitionInParams = $$new_props.chipTransitionInParams);
      if ("chipTransitionOut" in $$new_props) $$invalidate(14, chipTransitionOut = $$new_props.chipTransitionOut);
      if ("chipTransitionOutParams" in $$new_props) $$invalidate(15, chipTransitionOutParams = $$new_props.chipTransitionOutParams);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[1] & /*inputValid, invalid*/
      514) {
        $$invalidate(41, classesInvalid = inputValid === false ? invalid : "");
      }
      $$invalidate(21, classesBase = `${cBase$9} ${padding} ${rounded} ${$$props.class ?? ""} ${classesInvalid}`);
      if ($$self.$$.dirty[1] & /*regionChipWrapper*/
      16) {
        $$invalidate(20, classesChipWrapper = `${cChipWrapper} ${regionChipWrapper}`);
      }
      if ($$self.$$.dirty[1] & /*regionChipList*/
      32) {
        $$invalidate(19, classesChipList = `${cChipList} ${regionChipList}`);
      }
      if ($$self.$$.dirty[1] & /*regionInput*/
      64) {
        $$invalidate(18, classesInput = `${cInputField} ${regionInput}`);
      }
      if ($$self.$$.dirty[0] & /*value, chipValues*/
      65537) {
        $$invalidate(16, chipValues = (value == null ? void 0 : value.map((val, i) => {
          var _a;
          if (((_a = chipValues[i]) == null ? void 0 : _a.val) === val) return chipValues[i];
          return { id: Math.random(), val };
        })) || []);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      value,
      input,
      name,
      duration,
      required,
      chips,
      label,
      transitions,
      listTransitionIn,
      listTransitionInParams,
      listTransitionOut,
      listTransitionOutParams,
      chipTransitionIn,
      chipTransitionInParams,
      chipTransitionOut,
      chipTransitionOutParams,
      chipValues,
      selectElement,
      classesInput,
      classesChipList,
      classesChipWrapper,
      classesBase,
      onKeyHandler,
      removeChipInternally,
      $$restProps,
      whitelist,
      max2,
      minlength,
      maxlength,
      allowUpperCase,
      allowDuplicates,
      validation,
      invalid,
      padding,
      rounded,
      regionChipWrapper,
      regionChipList,
      regionInput,
      addChip,
      removeChip,
      inputValid,
      classesInvalid,
      click_handler,
      keypress_handler,
      keydown_handler,
      keyup_handler,
      input_handler,
      focus_handler,
      blur_handler,
      select_binding,
      select_change_handler,
      input_1_input_handler,
      click_handler_1
    ];
  }
  class InputChip extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$m,
        create_fragment$m,
        safe_not_equal,
        {
          input: 1,
          name: 2,
          value: 0,
          whitelist: 25,
          max: 26,
          minlength: 27,
          maxlength: 28,
          allowUpperCase: 29,
          allowDuplicates: 30,
          validation: 31,
          duration: 3,
          required: 4,
          chips: 5,
          invalid: 32,
          padding: 33,
          rounded: 34,
          regionChipWrapper: 35,
          regionChipList: 36,
          regionInput: 37,
          label: 6,
          transitions: 7,
          listTransitionIn: 8,
          listTransitionInParams: 9,
          listTransitionOut: 10,
          listTransitionOutParams: 11,
          chipTransitionIn: 12,
          chipTransitionInParams: 13,
          chipTransitionOut: 14,
          chipTransitionOutParams: 15,
          addChip: 38,
          removeChip: 39
        },
        null,
        [-1, -1, -1]
      );
    }
    get addChip() {
      return this.$$.ctx[38];
    }
    get removeChip() {
      return this.$$.ctx[39];
    }
  }
  function create_fragment$l(ctx) {
    let div;
    let div_class_value;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[13].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[12],
      null
    );
    return {
      c() {
        div = element("div");
        if (default_slot) default_slot.c();
        attr(div, "class", div_class_value = "listbox " + /*classesBase*/
        ctx[1]);
        attr(div, "role", "listbox");
        attr(
          div,
          "aria-labelledby",
          /*labelledby*/
          ctx[0]
        );
        attr(div, "data-testid", "listbox");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (default_slot) {
          default_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, [dirty]) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          4096)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[12],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[12]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[12],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classesBase*/
        2 && div_class_value !== (div_class_value = "listbox " + /*classesBase*/
        ctx2[1])) {
          attr(div, "class", div_class_value);
        }
        if (!current || dirty & /*labelledby*/
        1) {
          attr(
            div,
            "aria-labelledby",
            /*labelledby*/
            ctx2[0]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (default_slot) default_slot.d(detaching);
      }
    };
  }
  const cBase$8 = "";
  function instance$l($$self, $$props, $$invalidate) {
    let classesBase;
    let { $$slots: slots = {}, $$scope } = $$props;
    let { multiple = false } = $$props;
    let { disabled = false } = $$props;
    let { spacing = "space-y-1" } = $$props;
    let { rounded = "rounded-token" } = $$props;
    let { active: active2 = "variant-filled" } = $$props;
    let { hover = "hover:variant-soft" } = $$props;
    let { padding = "px-4 py-2" } = $$props;
    let { regionLead = "" } = $$props;
    let { regionDefault = "" } = $$props;
    let { regionTrail = "" } = $$props;
    let { labelledby = "" } = $$props;
    setContext("disabled", disabled);
    setContext("multiple", multiple);
    setContext("rounded", rounded);
    setContext("active", active2);
    setContext("hover", hover);
    setContext("padding", padding);
    setContext("regionLead", regionLead);
    setContext("regionDefault", regionDefault);
    setContext("regionTrail", regionTrail);
    $$self.$$set = ($$new_props) => {
      $$invalidate(14, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("multiple" in $$new_props) $$invalidate(2, multiple = $$new_props.multiple);
      if ("disabled" in $$new_props) $$invalidate(3, disabled = $$new_props.disabled);
      if ("spacing" in $$new_props) $$invalidate(4, spacing = $$new_props.spacing);
      if ("rounded" in $$new_props) $$invalidate(5, rounded = $$new_props.rounded);
      if ("active" in $$new_props) $$invalidate(6, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(7, hover = $$new_props.hover);
      if ("padding" in $$new_props) $$invalidate(8, padding = $$new_props.padding);
      if ("regionLead" in $$new_props) $$invalidate(9, regionLead = $$new_props.regionLead);
      if ("regionDefault" in $$new_props) $$invalidate(10, regionDefault = $$new_props.regionDefault);
      if ("regionTrail" in $$new_props) $$invalidate(11, regionTrail = $$new_props.regionTrail);
      if ("labelledby" in $$new_props) $$invalidate(0, labelledby = $$new_props.labelledby);
      if ("$$scope" in $$new_props) $$invalidate(12, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(1, classesBase = `${cBase$8} ${spacing} ${rounded} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [
      labelledby,
      classesBase,
      multiple,
      disabled,
      spacing,
      rounded,
      active2,
      hover,
      padding,
      regionLead,
      regionDefault,
      regionTrail,
      $$scope,
      slots
    ];
  }
  class ListBox extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$l, create_fragment$l, safe_not_equal, {
        multiple: 2,
        disabled: 3,
        spacing: 4,
        rounded: 5,
        active: 6,
        hover: 7,
        padding: 8,
        regionLead: 9,
        regionDefault: 10,
        regionTrail: 11,
        labelledby: 0
      });
    }
  }
  const get_trail_slot_changes$1 = (dirty) => ({});
  const get_trail_slot_context$1 = (ctx) => ({});
  const get_lead_slot_changes$1 = (dirty) => ({});
  const get_lead_slot_context$1 = (ctx) => ({});
  function create_else_block$4(ctx) {
    let input;
    let value_has_changed = false;
    let binding_group;
    let mounted;
    let dispose;
    binding_group = init_binding_group(
      /*$$binding_groups*/
      ctx[37][0]
    );
    return {
      c() {
        input = element("input");
        input.disabled = /*disabled*/
        ctx[3];
        attr(input, "type", "radio");
        attr(
          input,
          "name",
          /*name*/
          ctx[1]
        );
        input.__value = /*value*/
        ctx[2];
        set_input_value(input, input.__value);
        attr(input, "tabindex", "-1");
        binding_group.p(input);
      },
      m(target, anchor) {
        insert(target, input, anchor);
        ctx[35](input);
        input.checked = input.__value === /*group*/
        ctx[0];
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler_1*/
              ctx[36]
            ),
            listen(
              input,
              "click",
              /*click_handler_1*/
              ctx[31]
            ),
            listen(
              input,
              "change",
              /*change_handler_1*/
              ctx[32]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*disabled*/
        8) {
          input.disabled = /*disabled*/
          ctx2[3];
        }
        if (dirty[0] & /*name*/
        2) {
          attr(
            input,
            "name",
            /*name*/
            ctx2[1]
          );
        }
        if (dirty[0] & /*value*/
        4) {
          input.__value = /*value*/
          ctx2[2];
          set_input_value(input, input.__value);
          value_has_changed = true;
        }
        if (value_has_changed || dirty[0] & /*group*/
        1) {
          input.checked = input.__value === /*group*/
          ctx2[0];
        }
      },
      d(detaching) {
        if (detaching) {
          detach(input);
        }
        ctx[35](null);
        binding_group.r();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_2$6(ctx) {
    let input;
    let mounted;
    let dispose;
    return {
      c() {
        input = element("input");
        input.disabled = /*disabled*/
        ctx[3];
        attr(input, "type", "checkbox");
        attr(
          input,
          "name",
          /*name*/
          ctx[1]
        );
        input.__value = /*value*/
        ctx[2];
        set_input_value(input, input.__value);
        attr(input, "tabindex", "-1");
      },
      m(target, anchor) {
        insert(target, input, anchor);
        ctx[33](input);
        input.checked = /*checked*/
        ctx[5];
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler*/
              ctx[34]
            ),
            listen(
              input,
              "click",
              /*click_handler*/
              ctx[29]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[30]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*disabled*/
        8) {
          input.disabled = /*disabled*/
          ctx2[3];
        }
        if (dirty[0] & /*name*/
        2) {
          attr(
            input,
            "name",
            /*name*/
            ctx2[1]
          );
        }
        if (dirty[0] & /*value*/
        4) {
          input.__value = /*value*/
          ctx2[2];
          set_input_value(input, input.__value);
        }
        if (dirty[0] & /*checked*/
        32) {
          input.checked = /*checked*/
          ctx2[5];
        }
      },
      d(detaching) {
        if (detaching) {
          detach(input);
        }
        ctx[33](null);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_1$8(ctx) {
    let div;
    let div_class_value;
    let current;
    const lead_slot_template = (
      /*#slots*/
      ctx[25].lead
    );
    const lead_slot = create_slot(
      lead_slot_template,
      ctx,
      /*$$scope*/
      ctx[24],
      get_lead_slot_context$1
    );
    return {
      c() {
        div = element("div");
        if (lead_slot) lead_slot.c();
        attr(div, "class", div_class_value = "listbox-label-lead " + /*classesRegionLead*/
        ctx[10]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (lead_slot) {
          lead_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (lead_slot) {
          if (lead_slot.p && (!current || dirty[0] & /*$$scope*/
          16777216)) {
            update_slot_base(
              lead_slot,
              lead_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[24],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[24]
              ) : get_slot_changes(
                lead_slot_template,
                /*$$scope*/
                ctx2[24],
                dirty,
                get_lead_slot_changes$1
              ),
              get_lead_slot_context$1
            );
          }
        }
        if (!current || dirty[0] & /*classesRegionLead*/
        1024 && div_class_value !== (div_class_value = "listbox-label-lead " + /*classesRegionLead*/
        ctx2[10])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(lead_slot, local);
        current = true;
      },
      o(local) {
        transition_out(lead_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (lead_slot) lead_slot.d(detaching);
      }
    };
  }
  function create_if_block$e(ctx) {
    let div;
    let div_class_value;
    let current;
    const trail_slot_template = (
      /*#slots*/
      ctx[25].trail
    );
    const trail_slot = create_slot(
      trail_slot_template,
      ctx,
      /*$$scope*/
      ctx[24],
      get_trail_slot_context$1
    );
    return {
      c() {
        div = element("div");
        if (trail_slot) trail_slot.c();
        attr(div, "class", div_class_value = "listbox-label-trail " + /*classesRegionTrail*/
        ctx[8]);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (trail_slot) {
          trail_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (trail_slot) {
          if (trail_slot.p && (!current || dirty[0] & /*$$scope*/
          16777216)) {
            update_slot_base(
              trail_slot,
              trail_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[24],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[24]
              ) : get_slot_changes(
                trail_slot_template,
                /*$$scope*/
                ctx2[24],
                dirty,
                get_trail_slot_changes$1
              ),
              get_trail_slot_context$1
            );
          }
        }
        if (!current || dirty[0] & /*classesRegionTrail*/
        256 && div_class_value !== (div_class_value = "listbox-label-trail " + /*classesRegionTrail*/
        ctx2[8])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(trail_slot, local);
        current = true;
      },
      o(local) {
        transition_out(trail_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (trail_slot) trail_slot.d(detaching);
      }
    };
  }
  function create_fragment$k(ctx) {
    let label;
    let div3;
    let div0;
    let t0;
    let div2;
    let t1;
    let div1;
    let div1_class_value;
    let t2;
    let div2_class_value;
    let div3_class_value;
    let current;
    let mounted;
    let dispose;
    function select_block_type(ctx2, dirty) {
      if (
        /*multiple*/
        ctx2[4]
      ) return create_if_block_2$6;
      return create_else_block$4;
    }
    let current_block_type = select_block_type(ctx);
    let if_block0 = current_block_type(ctx);
    let if_block1 = (
      /*$$slots*/
      ctx[14].lead && create_if_block_1$8(ctx)
    );
    const default_slot_template = (
      /*#slots*/
      ctx[25].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[24],
      null
    );
    let if_block2 = (
      /*$$slots*/
      ctx[14].trail && create_if_block$e(ctx)
    );
    return {
      c() {
        label = element("label");
        div3 = element("div");
        div0 = element("div");
        if_block0.c();
        t0 = space();
        div2 = element("div");
        if (if_block1) if_block1.c();
        t1 = space();
        div1 = element("div");
        if (default_slot) default_slot.c();
        t2 = space();
        if (if_block2) if_block2.c();
        attr(div0, "class", "h-0 w-0 overflow-hidden");
        attr(div1, "class", div1_class_value = "listbox-label-content " + /*classesRegionDefault*/
        ctx[9]);
        attr(div2, "class", div2_class_value = "listbox-label " + /*classesLabel*/
        ctx[11]);
        attr(div3, "class", div3_class_value = "listbox-item " + /*classesBase*/
        ctx[12]);
        attr(div3, "data-testid", "listbox-item");
        attr(div3, "role", "option");
        attr(
          div3,
          "aria-selected",
          /*selected*/
          ctx[6]
        );
        attr(div3, "tabindex", "0");
      },
      m(target, anchor) {
        insert(target, label, anchor);
        append(label, div3);
        append(div3, div0);
        if_block0.m(div0, null);
        append(div3, t0);
        append(div3, div2);
        if (if_block1) if_block1.m(div2, null);
        append(div2, t1);
        append(div2, div1);
        if (default_slot) {
          default_slot.m(div1, null);
        }
        append(div2, t2);
        if (if_block2) if_block2.m(div2, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              div3,
              "keydown",
              /*onKeyDown*/
              ctx[13]
            ),
            listen(
              div3,
              "keydown",
              /*keydown_handler*/
              ctx[26]
            ),
            listen(
              div3,
              "keyup",
              /*keyup_handler*/
              ctx[27]
            ),
            listen(
              div3,
              "keypress",
              /*keypress_handler*/
              ctx[28]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block0) {
          if_block0.p(ctx2, dirty);
        } else {
          if_block0.d(1);
          if_block0 = current_block_type(ctx2);
          if (if_block0) {
            if_block0.c();
            if_block0.m(div0, null);
          }
        }
        if (
          /*$$slots*/
          ctx2[14].lead
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
            if (dirty[0] & /*$$slots*/
            16384) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_1$8(ctx2);
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(div2, t1);
          }
        } else if (if_block1) {
          group_outros();
          transition_out(if_block1, 1, 1, () => {
            if_block1 = null;
          });
          check_outros();
        }
        if (default_slot) {
          if (default_slot.p && (!current || dirty[0] & /*$$scope*/
          16777216)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[24],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[24]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[24],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty[0] & /*classesRegionDefault*/
        512 && div1_class_value !== (div1_class_value = "listbox-label-content " + /*classesRegionDefault*/
        ctx2[9])) {
          attr(div1, "class", div1_class_value);
        }
        if (
          /*$$slots*/
          ctx2[14].trail
        ) {
          if (if_block2) {
            if_block2.p(ctx2, dirty);
            if (dirty[0] & /*$$slots*/
            16384) {
              transition_in(if_block2, 1);
            }
          } else {
            if_block2 = create_if_block$e(ctx2);
            if_block2.c();
            transition_in(if_block2, 1);
            if_block2.m(div2, null);
          }
        } else if (if_block2) {
          group_outros();
          transition_out(if_block2, 1, 1, () => {
            if_block2 = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*classesLabel*/
        2048 && div2_class_value !== (div2_class_value = "listbox-label " + /*classesLabel*/
        ctx2[11])) {
          attr(div2, "class", div2_class_value);
        }
        if (!current || dirty[0] & /*classesBase*/
        4096 && div3_class_value !== (div3_class_value = "listbox-item " + /*classesBase*/
        ctx2[12])) {
          attr(div3, "class", div3_class_value);
        }
        if (!current || dirty[0] & /*selected*/
        64) {
          attr(
            div3,
            "aria-selected",
            /*selected*/
            ctx2[6]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block1);
        transition_in(default_slot, local);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(if_block1);
        transition_out(default_slot, local);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(label);
        }
        if_block0.d();
        if (if_block1) if_block1.d();
        if (default_slot) default_slot.d(detaching);
        if (if_block2) if_block2.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase$7 = "cursor-pointer -outline-offset-[3px]";
  const cDisabled$1 = "opacity-50 !cursor-default";
  const cLabel$1 = "flex items-center space-x-4";
  const cRegionLead = "";
  const cRegionDefault = "flex-1";
  const cRegionTrail = "";
  function areDeeplyEqual(param1, param2) {
    if (param1 === param2) return true;
    if (!(param1 instanceof Object) || !(param2 instanceof Object)) return false;
    const keys1 = Object.keys(param1);
    const keys2 = Object.keys(param2);
    if (keys1.length !== keys2.length) return false;
    for (const key of keys1) {
      const value1 = param1[key];
      const value2 = param2[key];
      if (!areDeeplyEqual(value1, value2)) return false;
    }
    return true;
  }
  function instance$k($$self, $$props, $$invalidate) {
    let selected;
    let classesActive;
    let classesDisabled;
    let classesBase;
    let classesLabel;
    let classesRegionLead;
    let classesRegionDefault;
    let classesRegionTrail;
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { group } = $$props;
    let { name } = $$props;
    let { value } = $$props;
    let { disabled = getContext("disabled") } = $$props;
    let { multiple = getContext("multiple") } = $$props;
    let { rounded = getContext("rounded") } = $$props;
    let { active: active2 = getContext("active") } = $$props;
    let { hover = getContext("hover") } = $$props;
    let { padding = getContext("padding") } = $$props;
    let { regionLead = getContext("regionLead") } = $$props;
    let { regionDefault = getContext("regionDefault") } = $$props;
    let { regionTrail = getContext("regionTrail") } = $$props;
    let checked;
    let elemInput;
    function updateCheckbox(group2) {
      $$invalidate(5, checked = group2.indexOf(value) >= 0);
    }
    function updateGroup(checked2) {
      const index = group.indexOf(value);
      if (checked2) {
        if (index < 0) {
          group.push(value);
          $$invalidate(0, group);
        }
      } else {
        if (index >= 0) {
          group.splice(index, 1);
          $$invalidate(0, group);
        }
      }
    }
    function onKeyDown(event) {
      if (["Enter", "Space"].includes(event.code)) {
        event.preventDefault();
        elemInput.click();
      }
    }
    const $$binding_groups = [[]];
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function click_handler_1(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler_1(event) {
      bubble.call(this, $$self, event);
    }
    function input_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        elemInput = $$value;
        $$invalidate(7, elemInput);
      });
    }
    function input_change_handler() {
      checked = this.checked;
      $$invalidate(5, checked);
    }
    function input_binding_1($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        elemInput = $$value;
        $$invalidate(7, elemInput);
      });
    }
    function input_change_handler_1() {
      group = this.__value;
      $$invalidate(0, group);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(40, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("group" in $$new_props) $$invalidate(0, group = $$new_props.group);
      if ("name" in $$new_props) $$invalidate(1, name = $$new_props.name);
      if ("value" in $$new_props) $$invalidate(2, value = $$new_props.value);
      if ("disabled" in $$new_props) $$invalidate(3, disabled = $$new_props.disabled);
      if ("multiple" in $$new_props) $$invalidate(4, multiple = $$new_props.multiple);
      if ("rounded" in $$new_props) $$invalidate(15, rounded = $$new_props.rounded);
      if ("active" in $$new_props) $$invalidate(16, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(17, hover = $$new_props.hover);
      if ("padding" in $$new_props) $$invalidate(18, padding = $$new_props.padding);
      if ("regionLead" in $$new_props) $$invalidate(19, regionLead = $$new_props.regionLead);
      if ("regionDefault" in $$new_props) $$invalidate(20, regionDefault = $$new_props.regionDefault);
      if ("regionTrail" in $$new_props) $$invalidate(21, regionTrail = $$new_props.regionTrail);
      if ("$$scope" in $$new_props) $$invalidate(24, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[0] & /*multiple, group*/
      17) {
        if (multiple) updateCheckbox(group);
      }
      if ($$self.$$.dirty[0] & /*multiple, checked*/
      48) {
        if (multiple) updateGroup(checked);
      }
      if ($$self.$$.dirty[0] & /*multiple, group, value*/
      21) {
        $$invalidate(6, selected = multiple ? group.some((groupVal) => areDeeplyEqual(value, groupVal)) : areDeeplyEqual(group, value));
      }
      if ($$self.$$.dirty[0] & /*selected, active, disabled, hover*/
      196680) {
        $$invalidate(22, classesActive = selected ? active2 : !disabled ? hover : "");
      }
      if ($$self.$$.dirty[0] & /*disabled*/
      8) {
        $$invalidate(23, classesDisabled = disabled ? cDisabled$1 : "");
      }
      $$invalidate(12, classesBase = `${cBase$7} ${classesDisabled} ${rounded} ${padding} ${classesActive} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*regionLead*/
      524288) {
        $$invalidate(10, classesRegionLead = `${cRegionLead} ${regionLead}`);
      }
      if ($$self.$$.dirty[0] & /*regionDefault*/
      1048576) {
        $$invalidate(9, classesRegionDefault = `${cRegionDefault} ${regionDefault}`);
      }
      if ($$self.$$.dirty[0] & /*regionTrail*/
      2097152) {
        $$invalidate(8, classesRegionTrail = `${cRegionTrail} ${regionTrail}`);
      }
    };
    $$invalidate(11, classesLabel = `${cLabel$1}`);
    $$props = exclude_internal_props($$props);
    return [
      group,
      name,
      value,
      disabled,
      multiple,
      checked,
      selected,
      elemInput,
      classesRegionTrail,
      classesRegionDefault,
      classesRegionLead,
      classesLabel,
      classesBase,
      onKeyDown,
      $$slots,
      rounded,
      active2,
      hover,
      padding,
      regionLead,
      regionDefault,
      regionTrail,
      classesActive,
      classesDisabled,
      $$scope,
      slots,
      keydown_handler,
      keyup_handler,
      keypress_handler,
      click_handler,
      change_handler,
      click_handler_1,
      change_handler_1,
      input_binding,
      input_change_handler,
      input_binding_1,
      input_change_handler_1,
      $$binding_groups
    ];
  }
  class ListBoxItem extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$k,
        create_fragment$k,
        safe_not_equal,
        {
          group: 0,
          name: 1,
          value: 2,
          disabled: 3,
          multiple: 4,
          rounded: 15,
          active: 16,
          hover: 17,
          padding: 18,
          regionLead: 19,
          regionDefault: 20,
          regionTrail: 21
        },
        null,
        [-1, -1]
      );
    }
  }
  function create_fragment$j(ctx) {
    let div1;
    let div0;
    let div0_class_value;
    let style_width = `${/*indeterminate*/
  ctx[4] ? 100 : (
    /*fillPercent*/
    ctx[7]
  )}%`;
    let div1_class_value;
    let div1_aria_valuemax_value;
    return {
      c() {
        div1 = element("div");
        div0 = element("div");
        attr(div0, "class", div0_class_value = "progress-bar-meter " + /*classesMeter*/
        ctx[5] + " svelte-12wvf64");
        set_style(div0, "width", style_width);
        attr(div1, "class", div1_class_value = "progress-bar " + /*classesTrack*/
        ctx[6] + " svelte-12wvf64");
        attr(div1, "data-testid", "progress-bar");
        attr(div1, "role", "progressbar");
        attr(
          div1,
          "aria-labelledby",
          /*labelledby*/
          ctx[3]
        );
        attr(
          div1,
          "aria-valuenow",
          /*value*/
          ctx[0]
        );
        attr(
          div1,
          "aria-valuemin",
          /*min*/
          ctx[1]
        );
        attr(div1, "aria-valuemax", div1_aria_valuemax_value = /*max*/
        ctx[2] - /*min*/
        ctx[1]);
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
      },
      p(ctx2, [dirty]) {
        if (dirty & /*classesMeter*/
        32 && div0_class_value !== (div0_class_value = "progress-bar-meter " + /*classesMeter*/
        ctx2[5] + " svelte-12wvf64")) {
          attr(div0, "class", div0_class_value);
        }
        if (dirty & /*indeterminate, fillPercent*/
        144 && style_width !== (style_width = `${/*indeterminate*/
      ctx2[4] ? 100 : (
        /*fillPercent*/
        ctx2[7]
      )}%`)) {
          set_style(div0, "width", style_width);
        }
        if (dirty & /*classesTrack*/
        64 && div1_class_value !== (div1_class_value = "progress-bar " + /*classesTrack*/
        ctx2[6] + " svelte-12wvf64")) {
          attr(div1, "class", div1_class_value);
        }
        if (dirty & /*labelledby*/
        8) {
          attr(
            div1,
            "aria-labelledby",
            /*labelledby*/
            ctx2[3]
          );
        }
        if (dirty & /*value*/
        1) {
          attr(
            div1,
            "aria-valuenow",
            /*value*/
            ctx2[0]
          );
        }
        if (dirty & /*min*/
        2) {
          attr(
            div1,
            "aria-valuemin",
            /*min*/
            ctx2[1]
          );
        }
        if (dirty & /*max, min*/
        6 && div1_aria_valuemax_value !== (div1_aria_valuemax_value = /*max*/
        ctx2[2] - /*min*/
        ctx2[1])) {
          attr(div1, "aria-valuemax", div1_aria_valuemax_value);
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
      }
    };
  }
  const cTrack$1 = "w-full overflow-hidden";
  const cMeter = "h-full";
  function instance$j($$self, $$props, $$invalidate) {
    let fillPercent;
    let indeterminate;
    let classesIndeterminate;
    let classesTrack;
    let classesMeter;
    let { value = void 0 } = $$props;
    let { min = 0 } = $$props;
    let { max: max2 = 100 } = $$props;
    let { height = "h-2" } = $$props;
    let { rounded = "rounded-token" } = $$props;
    let { transition = "transition-[width]" } = $$props;
    let { animIndeterminate = "anim-indeterminate" } = $$props;
    let { meter = "bg-surface-900-50-token" } = $$props;
    let { track = "bg-surface-200-700-token" } = $$props;
    let { labelledby = "" } = $$props;
    $$self.$$set = ($$new_props) => {
      $$invalidate(15, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("value" in $$new_props) $$invalidate(0, value = $$new_props.value);
      if ("min" in $$new_props) $$invalidate(1, min = $$new_props.min);
      if ("max" in $$new_props) $$invalidate(2, max2 = $$new_props.max);
      if ("height" in $$new_props) $$invalidate(8, height = $$new_props.height);
      if ("rounded" in $$new_props) $$invalidate(9, rounded = $$new_props.rounded);
      if ("transition" in $$new_props) $$invalidate(10, transition = $$new_props.transition);
      if ("animIndeterminate" in $$new_props) $$invalidate(11, animIndeterminate = $$new_props.animIndeterminate);
      if ("meter" in $$new_props) $$invalidate(12, meter = $$new_props.meter);
      if ("track" in $$new_props) $$invalidate(13, track = $$new_props.track);
      if ("labelledby" in $$new_props) $$invalidate(3, labelledby = $$new_props.labelledby);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*value, min, max*/
      7) {
        $$invalidate(7, fillPercent = value ? 100 * (value - min) / (max2 - min) : 0);
      }
      if ($$self.$$.dirty & /*value*/
      1) {
        $$invalidate(4, indeterminate = value === void 0 || value < 0);
      }
      if ($$self.$$.dirty & /*indeterminate, animIndeterminate*/
      2064) {
        $$invalidate(14, classesIndeterminate = indeterminate ? animIndeterminate : "");
      }
      $$invalidate(6, classesTrack = `${cTrack$1} ${track} ${height} ${rounded} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*meter, rounded, classesIndeterminate, transition*/
      22016) {
        $$invalidate(5, classesMeter = `${cMeter} ${meter} ${rounded} ${classesIndeterminate} ${transition}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      value,
      min,
      max2,
      labelledby,
      indeterminate,
      classesMeter,
      classesTrack,
      fillPercent,
      height,
      rounded,
      transition,
      animIndeterminate,
      meter,
      track,
      classesIndeterminate
    ];
  }
  class ProgressBar extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$j, create_fragment$j, safe_not_equal, {
        value: 0,
        min: 1,
        max: 2,
        height: 8,
        rounded: 9,
        transition: 10,
        animIndeterminate: 11,
        meter: 12,
        track: 13,
        labelledby: 3
      });
    }
  }
  function create_if_block$d(ctx) {
    let text_1;
    let text_1_class_value;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[16].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[15],
      null
    );
    return {
      c() {
        text_1 = svg_element("text");
        if (default_slot) default_slot.c();
        attr(text_1, "x", "50%");
        attr(text_1, "y", "50%");
        attr(text_1, "text-anchor", "middle");
        attr(text_1, "dominant-baseline", "middle");
        attr(text_1, "font-weight", "bold");
        attr(
          text_1,
          "font-size",
          /*font*/
          ctx[2]
        );
        attr(text_1, "class", text_1_class_value = "progress-radial-text " + /*fill*/
        ctx[7]);
      },
      m(target, anchor) {
        insert(target, text_1, anchor);
        if (default_slot) {
          default_slot.m(text_1, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          32768)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[15],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[15]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[15],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*font*/
        4) {
          attr(
            text_1,
            "font-size",
            /*font*/
            ctx2[2]
          );
        }
        if (!current || dirty & /*fill*/
        128 && text_1_class_value !== (text_1_class_value = "progress-radial-text " + /*fill*/
        ctx2[7])) {
          attr(text_1, "class", text_1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(text_1);
        }
        if (default_slot) default_slot.d(detaching);
      }
    };
  }
  function create_fragment$i(ctx) {
    let figure;
    let svg;
    let circle0;
    let circle0_class_value;
    let circle1;
    let circle1_class_value;
    let style_stroke_dasharray = `${/*circumference*/
  ctx[9]}
			${/*circumference*/
  ctx[9]}`;
    let figure_class_value;
    let figure_aria_valuenow_value;
    let figure_aria_valuetext_value;
    let current;
    let if_block = (
      /*value*/
      ctx[0] != void 0 && /*value*/
      ctx[0] >= 0 && /*$$slots*/
      ctx[13].default && create_if_block$d(ctx)
    );
    return {
      c() {
        figure = element("figure");
        svg = svg_element("svg");
        circle0 = svg_element("circle");
        circle1 = svg_element("circle");
        if (if_block) if_block.c();
        attr(circle0, "class", circle0_class_value = "progress-radial-track " + cBaseTrack + " " + /*track*/
        ctx[6]);
        attr(
          circle0,
          "stroke-width",
          /*stroke*/
          ctx[1]
        );
        attr(
          circle0,
          "r",
          /*radius*/
          ctx[12]
        );
        attr(circle0, "cx", "50%");
        attr(circle0, "cy", "50%");
        attr(circle1, "class", circle1_class_value = "progress-radial-meter " + cBaseMeter + " " + /*meter*/
        ctx[5] + " " + /*transition*/
        ctx[4]);
        attr(
          circle1,
          "stroke-width",
          /*stroke*/
          ctx[1]
        );
        attr(
          circle1,
          "r",
          /*radius*/
          ctx[12]
        );
        attr(circle1, "cx", "50%");
        attr(circle1, "cy", "50%");
        attr(
          circle1,
          "stroke-linecap",
          /*strokeLinecap*/
          ctx[3]
        );
        set_style(circle1, "stroke-dasharray", style_stroke_dasharray);
        set_style(
          circle1,
          "stroke-dashoffset",
          /*dashoffset*/
          ctx[10]
        );
        attr(svg, "viewBox", "0 0 " + baseSize + " " + baseSize);
        attr(svg, "class", "rounded-full");
        toggle_class(
          svg,
          "animate-spin",
          /*value*/
          ctx[0] === void 0
        );
        attr(figure, "class", figure_class_value = "progress-radial " + /*classesBase*/
        ctx[11]);
        attr(figure, "data-testid", "progress-radial");
        attr(figure, "role", "meter");
        attr(
          figure,
          "aria-labelledby",
          /*labelledby*/
          ctx[8]
        );
        attr(figure, "aria-valuenow", figure_aria_valuenow_value = /*value*/
        ctx[0] || 0);
        attr(figure, "aria-valuetext", figure_aria_valuetext_value = /*value*/
        ctx[0] ? `${/*value*/
      ctx[0]}%` : "Indeterminate Spinner");
        attr(figure, "aria-valuemin", 0);
        attr(figure, "aria-valuemax", 100);
      },
      m(target, anchor) {
        insert(target, figure, anchor);
        append(figure, svg);
        append(svg, circle0);
        append(svg, circle1);
        if (if_block) if_block.m(svg, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        if (!current || dirty & /*track*/
        64 && circle0_class_value !== (circle0_class_value = "progress-radial-track " + cBaseTrack + " " + /*track*/
        ctx2[6])) {
          attr(circle0, "class", circle0_class_value);
        }
        if (!current || dirty & /*stroke*/
        2) {
          attr(
            circle0,
            "stroke-width",
            /*stroke*/
            ctx2[1]
          );
        }
        if (!current || dirty & /*meter, transition*/
        48 && circle1_class_value !== (circle1_class_value = "progress-radial-meter " + cBaseMeter + " " + /*meter*/
        ctx2[5] + " " + /*transition*/
        ctx2[4])) {
          attr(circle1, "class", circle1_class_value);
        }
        if (!current || dirty & /*stroke*/
        2) {
          attr(
            circle1,
            "stroke-width",
            /*stroke*/
            ctx2[1]
          );
        }
        if (!current || dirty & /*strokeLinecap*/
        8) {
          attr(
            circle1,
            "stroke-linecap",
            /*strokeLinecap*/
            ctx2[3]
          );
        }
        if (dirty & /*circumference*/
        512 && style_stroke_dasharray !== (style_stroke_dasharray = `${/*circumference*/
      ctx2[9]}
			${/*circumference*/
      ctx2[9]}`)) {
          set_style(circle1, "stroke-dasharray", style_stroke_dasharray);
        }
        if (dirty & /*dashoffset*/
        1024) {
          set_style(
            circle1,
            "stroke-dashoffset",
            /*dashoffset*/
            ctx2[10]
          );
        }
        if (
          /*value*/
          ctx2[0] != void 0 && /*value*/
          ctx2[0] >= 0 && /*$$slots*/
          ctx2[13].default
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*value, $$slots*/
            8193) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$d(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(svg, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
        if (!current || dirty & /*value, undefined*/
        1) {
          toggle_class(
            svg,
            "animate-spin",
            /*value*/
            ctx2[0] === void 0
          );
        }
        if (!current || dirty & /*classesBase*/
        2048 && figure_class_value !== (figure_class_value = "progress-radial " + /*classesBase*/
        ctx2[11])) {
          attr(figure, "class", figure_class_value);
        }
        if (!current || dirty & /*labelledby*/
        256) {
          attr(
            figure,
            "aria-labelledby",
            /*labelledby*/
            ctx2[8]
          );
        }
        if (!current || dirty & /*value*/
        1 && figure_aria_valuenow_value !== (figure_aria_valuenow_value = /*value*/
        ctx2[0] || 0)) {
          attr(figure, "aria-valuenow", figure_aria_valuenow_value);
        }
        if (!current || dirty & /*value*/
        1 && figure_aria_valuetext_value !== (figure_aria_valuetext_value = /*value*/
        ctx2[0] ? `${/*value*/
      ctx2[0]}%` : "Indeterminate Spinner")) {
          attr(figure, "aria-valuetext", figure_aria_valuetext_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(figure);
        }
        if (if_block) if_block.d();
      }
    };
  }
  const cBase$6 = "progress-radial relative overflow-hidden";
  const cBaseTrack = "fill-transparent";
  const cBaseMeter = "fill-transparent -rotate-90 origin-[50%_50%]";
  const baseSize = 512;
  function instance$i($$self, $$props, $$invalidate) {
    let classesBase;
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { value = void 0 } = $$props;
    let { stroke = 40 } = $$props;
    let { font = 56 } = $$props;
    let { strokeLinecap = "butt" } = $$props;
    let { transition = "transition-[stroke-dashoffset]" } = $$props;
    let { width = "w-36" } = $$props;
    let { meter = "stroke-surface-900 dark:stroke-surface-50" } = $$props;
    let { track = "stroke-surface-500/30" } = $$props;
    let { fill = "fill-token" } = $$props;
    let { labelledby = "" } = $$props;
    const radius = baseSize / 2 - stroke / 2;
    let circumference = radius;
    let dashoffset;
    function setProgress(percent) {
      $$invalidate(9, circumference = radius * 2 * Math.PI);
      $$invalidate(10, dashoffset = circumference - percent / 100 * circumference);
    }
    setProgress(0);
    afterUpdate(() => {
      setProgress(value === void 0 ? 25 : value);
    });
    $$self.$$set = ($$new_props) => {
      $$invalidate(18, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("value" in $$new_props) $$invalidate(0, value = $$new_props.value);
      if ("stroke" in $$new_props) $$invalidate(1, stroke = $$new_props.stroke);
      if ("font" in $$new_props) $$invalidate(2, font = $$new_props.font);
      if ("strokeLinecap" in $$new_props) $$invalidate(3, strokeLinecap = $$new_props.strokeLinecap);
      if ("transition" in $$new_props) $$invalidate(4, transition = $$new_props.transition);
      if ("width" in $$new_props) $$invalidate(14, width = $$new_props.width);
      if ("meter" in $$new_props) $$invalidate(5, meter = $$new_props.meter);
      if ("track" in $$new_props) $$invalidate(6, track = $$new_props.track);
      if ("fill" in $$new_props) $$invalidate(7, fill = $$new_props.fill);
      if ("labelledby" in $$new_props) $$invalidate(8, labelledby = $$new_props.labelledby);
      if ("$$scope" in $$new_props) $$invalidate(15, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(11, classesBase = `${cBase$6} ${width} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [
      value,
      stroke,
      font,
      strokeLinecap,
      transition,
      meter,
      track,
      fill,
      labelledby,
      circumference,
      dashoffset,
      classesBase,
      radius,
      $$slots,
      width,
      $$scope,
      slots
    ];
  }
  class ProgressRadial extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$i, create_fragment$i, safe_not_equal, {
        value: 0,
        stroke: 1,
        font: 2,
        strokeLinecap: 3,
        transition: 4,
        width: 14,
        meter: 5,
        track: 6,
        fill: 7,
        labelledby: 8
      });
    }
  }
  function create_fragment$h(ctx) {
    let div;
    let div_class_value;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[15].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[14],
      null
    );
    return {
      c() {
        div = element("div");
        if (default_slot) default_slot.c();
        attr(div, "class", div_class_value = "radio-group " + /*classesBase*/
        ctx[1]);
        attr(div, "data-testid", "radio-group");
        attr(div, "role", "radiogroup");
        attr(
          div,
          "aria-labelledby",
          /*labelledby*/
          ctx[0]
        );
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (default_slot) {
          default_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, [dirty]) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          16384)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[14],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[14]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[14],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classesBase*/
        2 && div_class_value !== (div_class_value = "radio-group " + /*classesBase*/
        ctx2[1])) {
          attr(div, "class", div_class_value);
        }
        if (!current || dirty & /*labelledby*/
        1) {
          attr(
            div,
            "aria-labelledby",
            /*labelledby*/
            ctx2[0]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (default_slot) default_slot.d(detaching);
      }
    };
  }
  const cBase$5 = "p-1";
  function instance$h($$self, $$props, $$invalidate) {
    let classesBase;
    let { $$slots: slots = {}, $$scope } = $$props;
    let { display = "inline-flex" } = $$props;
    let { flexDirection = "flex-row" } = $$props;
    let { gap = "gap-1" } = $$props;
    let { background = "bg-surface-200-700-token" } = $$props;
    let { border = "border-token border-surface-400-500-token" } = $$props;
    let { rounded = "rounded-token" } = $$props;
    let { padding = "px-4 py-1" } = $$props;
    let { active: active2 = "variant-filled" } = $$props;
    let { hover = "hover:variant-soft" } = $$props;
    let { color = "" } = $$props;
    let { fill = "" } = $$props;
    let { regionLabel = "" } = $$props;
    let { labelledby = "" } = $$props;
    setContext("rounded", rounded);
    setContext("padding", padding);
    setContext("active", active2);
    setContext("hover", hover);
    setContext("color", color);
    setContext("fill", fill);
    setContext("regionLabel", regionLabel);
    $$self.$$set = ($$new_props) => {
      $$invalidate(16, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("display" in $$new_props) $$invalidate(2, display = $$new_props.display);
      if ("flexDirection" in $$new_props) $$invalidate(3, flexDirection = $$new_props.flexDirection);
      if ("gap" in $$new_props) $$invalidate(4, gap = $$new_props.gap);
      if ("background" in $$new_props) $$invalidate(5, background = $$new_props.background);
      if ("border" in $$new_props) $$invalidate(6, border = $$new_props.border);
      if ("rounded" in $$new_props) $$invalidate(7, rounded = $$new_props.rounded);
      if ("padding" in $$new_props) $$invalidate(8, padding = $$new_props.padding);
      if ("active" in $$new_props) $$invalidate(9, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(10, hover = $$new_props.hover);
      if ("color" in $$new_props) $$invalidate(11, color = $$new_props.color);
      if ("fill" in $$new_props) $$invalidate(12, fill = $$new_props.fill);
      if ("regionLabel" in $$new_props) $$invalidate(13, regionLabel = $$new_props.regionLabel);
      if ("labelledby" in $$new_props) $$invalidate(0, labelledby = $$new_props.labelledby);
      if ("$$scope" in $$new_props) $$invalidate(14, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(1, classesBase = `${cBase$5} ${display} ${flexDirection} ${gap} ${background} ${border} ${rounded} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [
      labelledby,
      classesBase,
      display,
      flexDirection,
      gap,
      background,
      border,
      rounded,
      padding,
      active2,
      hover,
      color,
      fill,
      regionLabel,
      $$scope,
      slots
    ];
  }
  class RadioGroup extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$h, create_fragment$h, safe_not_equal, {
        display: 2,
        flexDirection: 3,
        gap: 4,
        background: 5,
        border: 6,
        rounded: 7,
        padding: 8,
        active: 9,
        hover: 10,
        color: 11,
        fill: 12,
        regionLabel: 13,
        labelledby: 0
      });
    }
  }
  function create_fragment$g(ctx) {
    let label_1;
    let div1;
    let div0;
    let input;
    let t2;
    let div1_class_value;
    let label_1_class_value;
    let current;
    let binding_group;
    let mounted;
    let dispose;
    let input_levels = [
      { type: "radio" },
      { name: (
        /*name*/
        ctx[1]
      ) },
      { __value: (
        /*value*/
        ctx[2]
      ) },
      /*prunedRestProps*/
      ctx[11](),
      { tabindex: "-1" }
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    const default_slot_template = (
      /*#slots*/
      ctx[21].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[20],
      null
    );
    binding_group = init_binding_group(
      /*$$binding_groups*/
      ctx[29][0]
    );
    return {
      c() {
        label_1 = element("label");
        div1 = element("div");
        div0 = element("div");
        input = element("input");
        t2 = space();
        if (default_slot) default_slot.c();
        set_attributes(input, input_data);
        attr(div0, "class", "h-0 w-0 overflow-hidden");
        attr(div1, "class", div1_class_value = "radio-item " + /*classesWrapper*/
        ctx[8]);
        attr(div1, "data-testid", "radio-item");
        attr(div1, "role", "radio");
        attr(
          div1,
          "aria-checked",
          /*checked*/
          ctx[6]
        );
        attr(
          div1,
          "aria-label",
          /*label*/
          ctx[4]
        );
        attr(div1, "tabindex", "0");
        attr(
          div1,
          "title",
          /*title*/
          ctx[3]
        );
        attr(label_1, "class", label_1_class_value = "radio-label " + /*classsBase*/
        ctx[9] + " " + /*regionLabel*/
        ctx[5]);
        binding_group.p(input);
      },
      m(target, anchor) {
        insert(target, label_1, anchor);
        append(label_1, div1);
        append(div1, div0);
        append(div0, input);
        if (input.autofocus) input.focus();
        ctx[27](input);
        input.checked = input.__value === /*group*/
        ctx[0];
        append(div1, t2);
        if (default_slot) {
          default_slot.m(div1, null);
        }
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler*/
              ctx[28]
            ),
            listen(
              input,
              "click",
              /*click_handler*/
              ctx[25]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[26]
            ),
            listen(
              div1,
              "keydown",
              /*onKeyDown*/
              ctx[10]
            ),
            listen(
              div1,
              "keydown",
              /*keydown_handler*/
              ctx[22]
            ),
            listen(
              div1,
              "keyup",
              /*keyup_handler*/
              ctx[23]
            ),
            listen(
              div1,
              "keypress",
              /*keypress_handler*/
              ctx[24]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { type: "radio" },
          (!current || dirty[0] & /*name*/
          2) && { name: (
            /*name*/
            ctx2[1]
          ) },
          (!current || dirty[0] & /*value*/
          4) && { __value: (
            /*value*/
            ctx2[2]
          ) },
          /*prunedRestProps*/
          ctx2[11](),
          { tabindex: "-1" }
        ]));
        if (dirty[0] & /*group*/
        1) {
          input.checked = input.__value === /*group*/
          ctx2[0];
        }
        if (default_slot) {
          if (default_slot.p && (!current || dirty[0] & /*$$scope*/
          1048576)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[20],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[20]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[20],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty[0] & /*classesWrapper*/
        256 && div1_class_value !== (div1_class_value = "radio-item " + /*classesWrapper*/
        ctx2[8])) {
          attr(div1, "class", div1_class_value);
        }
        if (!current || dirty[0] & /*checked*/
        64) {
          attr(
            div1,
            "aria-checked",
            /*checked*/
            ctx2[6]
          );
        }
        if (!current || dirty[0] & /*label*/
        16) {
          attr(
            div1,
            "aria-label",
            /*label*/
            ctx2[4]
          );
        }
        if (!current || dirty[0] & /*title*/
        8) {
          attr(
            div1,
            "title",
            /*title*/
            ctx2[3]
          );
        }
        if (!current || dirty[0] & /*classsBase, regionLabel*/
        544 && label_1_class_value !== (label_1_class_value = "radio-label " + /*classsBase*/
        ctx2[9] + " " + /*regionLabel*/
        ctx2[5])) {
          attr(label_1, "class", label_1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(label_1);
        }
        ctx[27](null);
        if (default_slot) default_slot.d(detaching);
        binding_group.r();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase$4 = "flex-auto";
  const cWrapper = "text-base text-center cursor-pointer";
  const cDisabled = "opacity-50 cursor-not-allowed";
  function instance$g($$self, $$props, $$invalidate) {
    let checked;
    let classesActive;
    let classesDisabled;
    let classsBase;
    let classesWrapper;
    const omit_props_names = [
      "group",
      "name",
      "value",
      "title",
      "label",
      "rounded",
      "padding",
      "active",
      "hover",
      "color",
      "fill",
      "regionLabel"
    ];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let { $$slots: slots = {}, $$scope } = $$props;
    let { group } = $$props;
    let { name } = $$props;
    let { value } = $$props;
    let { title = "" } = $$props;
    let { label = "" } = $$props;
    let { rounded = getContext("rounded") } = $$props;
    let { padding = getContext("padding") } = $$props;
    let { active: active2 = getContext("active") } = $$props;
    let { hover = getContext("hover") } = $$props;
    let { color = getContext("color") } = $$props;
    let { fill = getContext("fill") } = $$props;
    let { regionLabel = getContext("regionLabel") } = $$props;
    let elemInput;
    function onKeyDown(event) {
      if (["Enter", "Space"].includes(event.code)) {
        event.preventDefault();
        elemInput.click();
      }
    }
    function prunedRestProps() {
      delete $$restProps.class;
      return $$restProps;
    }
    const $$binding_groups = [[]];
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        elemInput = $$value;
        $$invalidate(7, elemInput);
      });
    }
    function input_change_handler() {
      group = this.__value;
      $$invalidate(0, group);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(31, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(30, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("group" in $$new_props) $$invalidate(0, group = $$new_props.group);
      if ("name" in $$new_props) $$invalidate(1, name = $$new_props.name);
      if ("value" in $$new_props) $$invalidate(2, value = $$new_props.value);
      if ("title" in $$new_props) $$invalidate(3, title = $$new_props.title);
      if ("label" in $$new_props) $$invalidate(4, label = $$new_props.label);
      if ("rounded" in $$new_props) $$invalidate(12, rounded = $$new_props.rounded);
      if ("padding" in $$new_props) $$invalidate(13, padding = $$new_props.padding);
      if ("active" in $$new_props) $$invalidate(14, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(15, hover = $$new_props.hover);
      if ("color" in $$new_props) $$invalidate(16, color = $$new_props.color);
      if ("fill" in $$new_props) $$invalidate(17, fill = $$new_props.fill);
      if ("regionLabel" in $$new_props) $$invalidate(5, regionLabel = $$new_props.regionLabel);
      if ("$$scope" in $$new_props) $$invalidate(20, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[0] & /*value, group*/
      5) {
        $$invalidate(6, checked = value === group);
      }
      if ($$self.$$.dirty[0] & /*checked, active, color, fill, hover*/
      245824) {
        $$invalidate(19, classesActive = checked ? `${active2} ${color} ${fill}` : hover);
      }
      $$invalidate(18, classesDisabled = $$props.disabled ? cDisabled : "");
      $$invalidate(8, classesWrapper = `${cWrapper} ${padding} ${rounded} ${classesActive} ${classesDisabled} ${$$props.class ?? ""}`);
    };
    $$invalidate(9, classsBase = `${cBase$4}`);
    $$props = exclude_internal_props($$props);
    return [
      group,
      name,
      value,
      title,
      label,
      regionLabel,
      checked,
      elemInput,
      classesWrapper,
      classsBase,
      onKeyDown,
      prunedRestProps,
      rounded,
      padding,
      active2,
      hover,
      color,
      fill,
      classesDisabled,
      classesActive,
      $$scope,
      slots,
      keydown_handler,
      keyup_handler,
      keypress_handler,
      click_handler,
      change_handler,
      input_binding,
      input_change_handler,
      $$binding_groups
    ];
  }
  class RadioItem extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$g,
        create_fragment$g,
        safe_not_equal,
        {
          group: 0,
          name: 1,
          value: 2,
          title: 3,
          label: 4,
          rounded: 12,
          padding: 13,
          active: 14,
          hover: 15,
          color: 16,
          fill: 17,
          regionLabel: 5
        },
        null,
        [-1, -1]
      );
    }
  }
  const get_trail_slot_changes = (dirty) => ({});
  const get_trail_slot_context = (ctx) => ({});
  function get_each_context$4(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[23] = list[i];
    return child_ctx;
  }
  function create_if_block_2$5(ctx) {
    let label_1;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[15].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[14],
      null
    );
    return {
      c() {
        label_1 = element("label");
        if (default_slot) default_slot.c();
        attr(label_1, "class", "range-slider-label " + cBaseLabel);
        attr(
          label_1,
          "for",
          /*id*/
          ctx[2]
        );
      },
      m(target, anchor) {
        insert(target, label_1, anchor);
        if (default_slot) {
          default_slot.m(label_1, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          16384)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[14],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[14]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[14],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*id*/
        4) {
          attr(
            label_1,
            "for",
            /*id*/
            ctx2[2]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(label_1);
        }
        if (default_slot) default_slot.d(detaching);
      }
    };
  }
  function create_if_block_1$7(ctx) {
    let datalist;
    let datalist_id_value;
    let each_value = ensure_array_like(
      /*tickmarks*/
      ctx[8]
    );
    let each_blocks = [];
    for (let i = 0; i < each_value.length; i += 1) {
      each_blocks[i] = create_each_block$4(get_each_context$4(ctx, each_value, i));
    }
    return {
      c() {
        datalist = element("datalist");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        attr(datalist, "id", datalist_id_value = "tickmarks-" + /*id*/
        ctx[2]);
        attr(datalist, "class", "range-slider-ticks");
      },
      m(target, anchor) {
        insert(target, datalist, anchor);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(datalist, null);
          }
        }
      },
      p(ctx2, dirty) {
        if (dirty & /*tickmarks*/
        256) {
          each_value = ensure_array_like(
            /*tickmarks*/
            ctx2[8]
          );
          let i;
          for (i = 0; i < each_value.length; i += 1) {
            const child_ctx = get_each_context$4(ctx2, each_value, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block$4(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(datalist, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value.length;
        }
        if (dirty & /*id*/
        4 && datalist_id_value !== (datalist_id_value = "tickmarks-" + /*id*/
        ctx2[2])) {
          attr(datalist, "id", datalist_id_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(datalist);
        }
        destroy_each(each_blocks, detaching);
      }
    };
  }
  function create_each_block$4(ctx) {
    let option;
    let option_value_value;
    let option_label_value;
    return {
      c() {
        option = element("option");
        option.__value = option_value_value = /*tm*/
        ctx[23];
        set_input_value(option, option.__value);
        attr(option, "label", option_label_value = /*tm*/
        ctx[23]);
      },
      m(target, anchor) {
        insert(target, option, anchor);
      },
      p(ctx2, dirty) {
        if (dirty & /*tickmarks*/
        256 && option_value_value !== (option_value_value = /*tm*/
        ctx2[23])) {
          option.__value = option_value_value;
          set_input_value(option, option.__value);
        }
        if (dirty & /*tickmarks*/
        256 && option_label_value !== (option_label_value = /*tm*/
        ctx2[23])) {
          attr(option, "label", option_label_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(option);
        }
      }
    };
  }
  function create_if_block$c(ctx) {
    let div;
    let current;
    const trail_slot_template = (
      /*#slots*/
      ctx[15].trail
    );
    const trail_slot = create_slot(
      trail_slot_template,
      ctx,
      /*$$scope*/
      ctx[14],
      get_trail_slot_context
    );
    return {
      c() {
        div = element("div");
        if (trail_slot) trail_slot.c();
        attr(div, "class", "range-slider-trail");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (trail_slot) {
          trail_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (trail_slot) {
          if (trail_slot.p && (!current || dirty & /*$$scope*/
          16384)) {
            update_slot_base(
              trail_slot,
              trail_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[14],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[14]
              ) : get_slot_changes(
                trail_slot_template,
                /*$$scope*/
                ctx2[14],
                dirty,
                get_trail_slot_changes
              ),
              get_trail_slot_context
            );
          }
        }
      },
      i(local) {
        if (current) return;
        transition_in(trail_slot, local);
        current = true;
      },
      o(local) {
        transition_out(trail_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (trail_slot) trail_slot.d(detaching);
      }
    };
  }
  function create_fragment$f(ctx) {
    let div1;
    let t0;
    let div0;
    let input;
    let input_class_value;
    let input_list_value;
    let t1;
    let t2;
    let div1_class_value;
    let current;
    let mounted;
    let dispose;
    let if_block0 = (
      /*$$slots*/
      ctx[12].default && create_if_block_2$5(ctx)
    );
    let input_levels = [
      { type: "range" },
      { id: (
        /*id*/
        ctx[2]
      ) },
      { name: (
        /*name*/
        ctx[1]
      ) },
      {
        class: input_class_value = "range-slider-input " + /*classesInput*/
        ctx[9]
      },
      {
        list: input_list_value = "tickmarks-" + /*id*/
        ctx[2]
      },
      { "aria-label": (
        /*label*/
        ctx[7]
      ) },
      { min: (
        /*min*/
        ctx[3]
      ) },
      { max: (
        /*max*/
        ctx[4]
      ) },
      { step: (
        /*step*/
        ctx[5]
      ) },
      /*prunedRestProps*/
      ctx[11]()
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    let if_block1 = (
      /*ticked*/
      ctx[6] && /*tickmarks*/
      ctx[8] && /*tickmarks*/
      ctx[8].length && create_if_block_1$7(ctx)
    );
    let if_block2 = (
      /*$$slots*/
      ctx[12].trail && create_if_block$c(ctx)
    );
    return {
      c() {
        div1 = element("div");
        if (if_block0) if_block0.c();
        t0 = space();
        div0 = element("div");
        input = element("input");
        t1 = space();
        if (if_block1) if_block1.c();
        t2 = space();
        if (if_block2) if_block2.c();
        set_attributes(input, input_data);
        attr(div0, "class", "range-content " + cBaseContent);
        attr(div1, "class", div1_class_value = "range-slider " + /*classesBase*/
        ctx[10]);
        attr(div1, "data-testid", "range-slider");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        if (if_block0) if_block0.m(div1, null);
        append(div1, t0);
        append(div1, div0);
        append(div0, input);
        if (input.autofocus) input.focus();
        set_input_value(
          input,
          /*value*/
          ctx[0]
        );
        append(div0, t1);
        if (if_block1) if_block1.m(div0, null);
        append(div1, t2);
        if (if_block2) if_block2.m(div1, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_input_handler*/
              ctx[19]
            ),
            listen(
              input,
              "input",
              /*input_change_input_handler*/
              ctx[19]
            ),
            listen(
              input,
              "click",
              /*click_handler*/
              ctx[16]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[17]
            ),
            listen(
              input,
              "blur",
              /*blur_handler*/
              ctx[18]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, [dirty]) {
        if (
          /*$$slots*/
          ctx2[12].default
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            4096) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_2$5(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div1, t0);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { type: "range" },
          (!current || dirty & /*id*/
          4) && { id: (
            /*id*/
            ctx2[2]
          ) },
          (!current || dirty & /*name*/
          2) && { name: (
            /*name*/
            ctx2[1]
          ) },
          (!current || dirty & /*classesInput*/
          512 && input_class_value !== (input_class_value = "range-slider-input " + /*classesInput*/
          ctx2[9])) && { class: input_class_value },
          (!current || dirty & /*id*/
          4 && input_list_value !== (input_list_value = "tickmarks-" + /*id*/
          ctx2[2])) && { list: input_list_value },
          (!current || dirty & /*label*/
          128) && { "aria-label": (
            /*label*/
            ctx2[7]
          ) },
          (!current || dirty & /*min*/
          8) && { min: (
            /*min*/
            ctx2[3]
          ) },
          (!current || dirty & /*max*/
          16) && { max: (
            /*max*/
            ctx2[4]
          ) },
          (!current || dirty & /*step*/
          32) && { step: (
            /*step*/
            ctx2[5]
          ) },
          /*prunedRestProps*/
          ctx2[11]()
        ]));
        if (dirty & /*value*/
        1) {
          set_input_value(
            input,
            /*value*/
            ctx2[0]
          );
        }
        if (
          /*ticked*/
          ctx2[6] && /*tickmarks*/
          ctx2[8] && /*tickmarks*/
          ctx2[8].length
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
          } else {
            if_block1 = create_if_block_1$7(ctx2);
            if_block1.c();
            if_block1.m(div0, null);
          }
        } else if (if_block1) {
          if_block1.d(1);
          if_block1 = null;
        }
        if (
          /*$$slots*/
          ctx2[12].trail
        ) {
          if (if_block2) {
            if_block2.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            4096) {
              transition_in(if_block2, 1);
            }
          } else {
            if_block2 = create_if_block$c(ctx2);
            if_block2.c();
            transition_in(if_block2, 1);
            if_block2.m(div1, null);
          }
        } else if (if_block2) {
          group_outros();
          transition_out(if_block2, 1, 1, () => {
            if_block2 = null;
          });
          check_outros();
        }
        if (!current || dirty & /*classesBase*/
        1024 && div1_class_value !== (div1_class_value = "range-slider " + /*classesBase*/
        ctx2[10])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        if (if_block2) if_block2.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase$3 = "space-y-2";
  const cBaseLabel = "";
  const cBaseContent = "flex justify-center py-2";
  const cBaseInput = "w-full h-2";
  function instance$f($$self, $$props, $$invalidate) {
    let classesBase;
    let classesInput;
    const omit_props_names = ["name", "id", "value", "min", "max", "step", "ticked", "accent", "label"];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { name } = $$props;
    let { id = String(Math.random()) } = $$props;
    let { value = 0 } = $$props;
    let { min = 0 } = $$props;
    let { max: max2 = 100 } = $$props;
    let { step: step2 = 1 } = $$props;
    let { ticked = false } = $$props;
    let { accent = "accent-surface-900 dark:accent-surface-50" } = $$props;
    let { label = "" } = $$props;
    let tickmarks;
    function setTicks() {
      if (ticked == false) return;
      $$invalidate(8, tickmarks = Array.from({ length: max2 - min + 1 }, (_, i) => i + min));
    }
    if (ticked) setTicks();
    afterUpdate(() => {
      setTicks();
    });
    function prunedRestProps() {
      delete $$restProps.class;
      return $$restProps;
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function blur_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_change_input_handler() {
      value = to_number(this.value);
      $$invalidate(0, value);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(22, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(21, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("name" in $$new_props) $$invalidate(1, name = $$new_props.name);
      if ("id" in $$new_props) $$invalidate(2, id = $$new_props.id);
      if ("value" in $$new_props) $$invalidate(0, value = $$new_props.value);
      if ("min" in $$new_props) $$invalidate(3, min = $$new_props.min);
      if ("max" in $$new_props) $$invalidate(4, max2 = $$new_props.max);
      if ("step" in $$new_props) $$invalidate(5, step2 = $$new_props.step);
      if ("ticked" in $$new_props) $$invalidate(6, ticked = $$new_props.ticked);
      if ("accent" in $$new_props) $$invalidate(13, accent = $$new_props.accent);
      if ("label" in $$new_props) $$invalidate(7, label = $$new_props.label);
      if ("$$scope" in $$new_props) $$invalidate(14, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(10, classesBase = `${cBase$3} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*accent*/
      8192) {
        $$invalidate(9, classesInput = `${cBaseInput} ${accent}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      value,
      name,
      id,
      min,
      max2,
      step2,
      ticked,
      label,
      tickmarks,
      classesInput,
      classesBase,
      prunedRestProps,
      $$slots,
      accent,
      $$scope,
      slots,
      click_handler,
      change_handler,
      blur_handler,
      input_change_input_handler
    ];
  }
  class RangeSlider extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$f, create_fragment$f, safe_not_equal, {
        name: 1,
        id: 2,
        value: 0,
        min: 3,
        max: 4,
        step: 5,
        ticked: 6,
        accent: 13,
        label: 7
      });
    }
  }
  function create_if_block$b(ctx) {
    let div;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[22].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      null
    );
    return {
      c() {
        div = element("div");
        if (default_slot) default_slot.c();
        attr(div, "class", "slide-toggle-text ml-3");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (default_slot) {
          default_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty[0] & /*$$scope*/
          2097152)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                null
              ),
              null
            );
          }
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (default_slot) default_slot.d(detaching);
      }
    };
  }
  function create_fragment$e(ctx) {
    let div2;
    let label_1;
    let input;
    let input_disabled_value;
    let t0;
    let div1;
    let div0;
    let div0_class_value;
    let div1_class_value;
    let t1;
    let label_1_class_value;
    let div2_class_value;
    let current;
    let mounted;
    let dispose;
    let input_levels = [
      { type: "checkbox" },
      { class: "slide-toggle-input hidden" },
      { name: (
        /*name*/
        ctx[1]
      ) },
      /*prunedRestProps*/
      ctx[8](),
      {
        disabled: input_disabled_value = /*$$props*/
        ctx[9].disabled
      }
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    let if_block = (
      /*$$slots*/
      ctx[10].default && create_if_block$b(ctx)
    );
    return {
      c() {
        div2 = element("div");
        label_1 = element("label");
        input = element("input");
        t0 = space();
        div1 = element("div");
        div0 = element("div");
        t1 = space();
        if (if_block) if_block.c();
        set_attributes(input, input_data);
        attr(div0, "class", div0_class_value = "slide-toggle-thumb " + /*classesThumb*/
        ctx[3]);
        toggle_class(
          div0,
          "cursor-not-allowed",
          /*$$props*/
          ctx[9].disabled
        );
        attr(div1, "class", div1_class_value = "slide-toggle-track " + /*classesTrack*/
        ctx[4]);
        toggle_class(
          div1,
          "cursor-not-allowed",
          /*$$props*/
          ctx[9].disabled
        );
        attr(label_1, "class", label_1_class_value = "slide-toggle-label " + /*classesLabel*/
        ctx[5]);
        attr(
          div2,
          "id",
          /*label*/
          ctx[2]
        );
        attr(div2, "class", div2_class_value = "slide-toggle " + /*classesBase*/
        ctx[6]);
        attr(div2, "data-testid", "slide-toggle");
        attr(div2, "role", "switch");
        attr(
          div2,
          "aria-label",
          /*label*/
          ctx[2]
        );
        attr(
          div2,
          "aria-checked",
          /*checked*/
          ctx[0]
        );
        attr(div2, "tabindex", "0");
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, label_1);
        append(label_1, input);
        if (input.autofocus) input.focus();
        input.checked = /*checked*/
        ctx[0];
        append(label_1, t0);
        append(label_1, div1);
        append(div1, div0);
        append(label_1, t1);
        if (if_block) if_block.m(label_1, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler*/
              ctx[31]
            ),
            listen(
              input,
              "click",
              /*click_handler*/
              ctx[23]
            ),
            listen(
              input,
              "keydown",
              /*keydown_handler*/
              ctx[24]
            ),
            listen(
              input,
              "keyup",
              /*keyup_handler*/
              ctx[25]
            ),
            listen(
              input,
              "keypress",
              /*keypress_handler*/
              ctx[26]
            ),
            listen(
              input,
              "mouseover",
              /*mouseover_handler*/
              ctx[27]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[28]
            ),
            listen(
              input,
              "focus",
              /*focus_handler*/
              ctx[29]
            ),
            listen(
              input,
              "blur",
              /*blur_handler*/
              ctx[30]
            ),
            listen(
              div2,
              "keydown",
              /*onKeyDown*/
              ctx[7]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { type: "checkbox" },
          { class: "slide-toggle-input hidden" },
          (!current || dirty[0] & /*name*/
          2) && { name: (
            /*name*/
            ctx2[1]
          ) },
          /*prunedRestProps*/
          ctx2[8](),
          (!current || dirty[0] & /*$$props*/
          512 && input_disabled_value !== (input_disabled_value = /*$$props*/
          ctx2[9].disabled)) && { disabled: input_disabled_value }
        ]));
        if (dirty[0] & /*checked*/
        1) {
          input.checked = /*checked*/
          ctx2[0];
        }
        if (!current || dirty[0] & /*classesThumb*/
        8 && div0_class_value !== (div0_class_value = "slide-toggle-thumb " + /*classesThumb*/
        ctx2[3])) {
          attr(div0, "class", div0_class_value);
        }
        if (!current || dirty[0] & /*classesThumb, $$props*/
        520) {
          toggle_class(
            div0,
            "cursor-not-allowed",
            /*$$props*/
            ctx2[9].disabled
          );
        }
        if (!current || dirty[0] & /*classesTrack*/
        16 && div1_class_value !== (div1_class_value = "slide-toggle-track " + /*classesTrack*/
        ctx2[4])) {
          attr(div1, "class", div1_class_value);
        }
        if (!current || dirty[0] & /*classesTrack, $$props*/
        528) {
          toggle_class(
            div1,
            "cursor-not-allowed",
            /*$$props*/
            ctx2[9].disabled
          );
        }
        if (
          /*$$slots*/
          ctx2[10].default
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty[0] & /*$$slots*/
            1024) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$b(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(label_1, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*classesLabel*/
        32 && label_1_class_value !== (label_1_class_value = "slide-toggle-label " + /*classesLabel*/
        ctx2[5])) {
          attr(label_1, "class", label_1_class_value);
        }
        if (!current || dirty[0] & /*label*/
        4) {
          attr(
            div2,
            "id",
            /*label*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*classesBase*/
        64 && div2_class_value !== (div2_class_value = "slide-toggle " + /*classesBase*/
        ctx2[6])) {
          attr(div2, "class", div2_class_value);
        }
        if (!current || dirty[0] & /*label*/
        4) {
          attr(
            div2,
            "aria-label",
            /*label*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*checked*/
        1) {
          attr(
            div2,
            "aria-checked",
            /*checked*/
            ctx2[0]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        if (if_block) if_block.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase$2 = "inline-block";
  const cLabel = "unstyled flex items-center";
  const cTrack = "flex transition-all duration-[200ms] cursor-pointer";
  const cThumb = "w-[50%] h-full scale-[0.8] transition-all duration-[200ms] shadow";
  function instance$e($$self, $$props, $$invalidate) {
    let cTrackActive;
    let cThumbBackground;
    let cThumbPos;
    let classesDisabled;
    let classesBase;
    let classesLabel;
    let classesTrack;
    let classesThumb;
    const omit_props_names = ["name", "checked", "size", "background", "active", "border", "rounded", "label"];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    const dispatch2 = createEventDispatcher();
    let { name } = $$props;
    let { checked = false } = $$props;
    let { size = "md" } = $$props;
    let { background = "bg-surface-400 dark:bg-surface-700" } = $$props;
    let { active: active2 = "bg-surface-900 dark:bg-surface-300" } = $$props;
    let { border = "" } = $$props;
    let { rounded = "rounded-full" } = $$props;
    let { label = "" } = $$props;
    let trackSize;
    switch (size) {
      case "sm":
        trackSize = "w-12 h-6";
        break;
      case "lg":
        trackSize = "w-20 h-10";
        break;
      default:
        trackSize = "w-16 h-8";
    }
    function onKeyDown(event) {
      if (["Enter", "Space"].includes(event.code)) {
        event.preventDefault();
        dispatch2("keyup", event);
        const inputElem = event.currentTarget.firstChild;
        inputElem.click();
      }
    }
    function prunedRestProps() {
      delete $$restProps.class;
      return $$restProps;
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function mouseover_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function focus_handler(event) {
      bubble.call(this, $$self, event);
    }
    function blur_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_change_handler() {
      checked = this.checked;
      $$invalidate(0, checked);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(9, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(33, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("name" in $$new_props) $$invalidate(1, name = $$new_props.name);
      if ("checked" in $$new_props) $$invalidate(0, checked = $$new_props.checked);
      if ("size" in $$new_props) $$invalidate(11, size = $$new_props.size);
      if ("background" in $$new_props) $$invalidate(12, background = $$new_props.background);
      if ("active" in $$new_props) $$invalidate(13, active2 = $$new_props.active);
      if ("border" in $$new_props) $$invalidate(14, border = $$new_props.border);
      if ("rounded" in $$new_props) $$invalidate(15, rounded = $$new_props.rounded);
      if ("label" in $$new_props) $$invalidate(2, label = $$new_props.label);
      if ("$$scope" in $$new_props) $$invalidate(21, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[0] & /*checked, active, background*/
      12289) {
        $$invalidate(19, cTrackActive = checked ? active2 : `${background} cursor-pointer`);
      }
      if ($$self.$$.dirty[0] & /*checked*/
      1) {
        $$invalidate(18, cThumbBackground = checked ? "bg-white/75" : "bg-white");
      }
      if ($$self.$$.dirty[0] & /*checked*/
      1) {
        $$invalidate(17, cThumbPos = checked ? "translate-x-full" : "");
      }
      $$invalidate(20, classesDisabled = $$props.disabled === true ? "opacity-50" : "hover:brightness-[105%] dark:hover:brightness-110 cursor-pointer");
      $$invalidate(6, classesBase = `${cBase$2} ${rounded} ${classesDisabled} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*border, rounded, trackSize, cTrackActive*/
      638976) {
        $$invalidate(4, classesTrack = `${cTrack} ${border} ${rounded} ${trackSize} ${cTrackActive}`);
      }
      if ($$self.$$.dirty[0] & /*rounded, cThumbBackground, cThumbPos*/
      425984) {
        $$invalidate(3, classesThumb = `${cThumb} ${rounded} ${cThumbBackground} ${cThumbPos}`);
      }
    };
    $$invalidate(5, classesLabel = `${cLabel}`);
    $$props = exclude_internal_props($$props);
    return [
      checked,
      name,
      label,
      classesThumb,
      classesTrack,
      classesLabel,
      classesBase,
      onKeyDown,
      prunedRestProps,
      $$props,
      $$slots,
      size,
      background,
      active2,
      border,
      rounded,
      trackSize,
      cThumbPos,
      cThumbBackground,
      cTrackActive,
      classesDisabled,
      $$scope,
      slots,
      click_handler,
      keydown_handler,
      keyup_handler,
      keypress_handler,
      mouseover_handler,
      change_handler,
      focus_handler,
      blur_handler,
      input_change_handler
    ];
  }
  class SlideToggle extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$e,
        create_fragment$e,
        safe_not_equal,
        {
          name: 1,
          checked: 0,
          size: 11,
          background: 12,
          active: 13,
          border: 14,
          rounded: 15,
          label: 2
        },
        null,
        [-1, -1]
      );
    }
  }
  const get_panel_slot_changes = (dirty) => ({});
  const get_panel_slot_context = (ctx) => ({});
  function create_if_block$a(ctx) {
    let div;
    let div_class_value;
    let current;
    const panel_slot_template = (
      /*#slots*/
      ctx[17].panel
    );
    const panel_slot = create_slot(
      panel_slot_template,
      ctx,
      /*$$scope*/
      ctx[16],
      get_panel_slot_context
    );
    return {
      c() {
        div = element("div");
        if (panel_slot) panel_slot.c();
        attr(div, "class", div_class_value = "tab-panel " + /*classesPanel*/
        ctx[2]);
        attr(div, "role", "tabpanel");
        attr(
          div,
          "aria-labelledby",
          /*panel*/
          ctx[1]
        );
        attr(div, "tabindex", "0");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (panel_slot) {
          panel_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (panel_slot) {
          if (panel_slot.p && (!current || dirty & /*$$scope*/
          65536)) {
            update_slot_base(
              panel_slot,
              panel_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[16],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[16]
              ) : get_slot_changes(
                panel_slot_template,
                /*$$scope*/
                ctx2[16],
                dirty,
                get_panel_slot_changes
              ),
              get_panel_slot_context
            );
          }
        }
        if (!current || dirty & /*classesPanel*/
        4 && div_class_value !== (div_class_value = "tab-panel " + /*classesPanel*/
        ctx2[2])) {
          attr(div, "class", div_class_value);
        }
        if (!current || dirty & /*panel*/
        2) {
          attr(
            div,
            "aria-labelledby",
            /*panel*/
            ctx2[1]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(panel_slot, local);
        current = true;
      },
      o(local) {
        transition_out(panel_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (panel_slot) panel_slot.d(detaching);
      }
    };
  }
  function create_fragment$d(ctx) {
    let div1;
    let div0;
    let div0_class_value;
    let t2;
    let div1_class_value;
    let current;
    const default_slot_template = (
      /*#slots*/
      ctx[17].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[16],
      null
    );
    let if_block = (
      /*$$slots*/
      ctx[5].panel && create_if_block$a(ctx)
    );
    return {
      c() {
        div1 = element("div");
        div0 = element("div");
        if (default_slot) default_slot.c();
        t2 = space();
        if (if_block) if_block.c();
        attr(div0, "class", div0_class_value = "tab-list " + /*classesList*/
        ctx[3]);
        attr(div0, "role", "tablist");
        attr(
          div0,
          "aria-labelledby",
          /*labelledby*/
          ctx[0]
        );
        attr(div1, "class", div1_class_value = "tab-group " + /*classesBase*/
        ctx[4]);
        attr(div1, "data-testid", "tab-group");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
        if (default_slot) {
          default_slot.m(div0, null);
        }
        append(div1, t2);
        if (if_block) if_block.m(div1, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          65536)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[16],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[16]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[16],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classesList*/
        8 && div0_class_value !== (div0_class_value = "tab-list " + /*classesList*/
        ctx2[3])) {
          attr(div0, "class", div0_class_value);
        }
        if (!current || dirty & /*labelledby*/
        1) {
          attr(
            div0,
            "aria-labelledby",
            /*labelledby*/
            ctx2[0]
          );
        }
        if (
          /*$$slots*/
          ctx2[5].panel
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*$$slots*/
            32) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$a(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(div1, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
        if (!current || dirty & /*classesBase*/
        16 && div1_class_value !== (div1_class_value = "tab-group " + /*classesBase*/
        ctx2[4])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if (default_slot) default_slot.d(detaching);
        if (if_block) if_block.d();
      }
    };
  }
  const cBase$1 = "space-y-4";
  const cList = "flex overflow-x-auto hide-scrollbar";
  const cPanel = "";
  function instance$d($$self, $$props, $$invalidate) {
    let classesBase;
    let classesList;
    let classesPanel;
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { justify = "justify-start" } = $$props;
    let { border = "border-b border-surface-400-500-token" } = $$props;
    let { active: active2 = "border-b-2 border-surface-900-50-token" } = $$props;
    let { hover = "hover:variant-soft" } = $$props;
    let { flex = "flex-none" } = $$props;
    let { padding = "px-4 py-2" } = $$props;
    let { rounded = "rounded-tl-container-token rounded-tr-container-token" } = $$props;
    let { spacing = "space-y-1" } = $$props;
    let { regionList = "" } = $$props;
    let { regionPanel = "" } = $$props;
    let { labelledby = "" } = $$props;
    let { panel = "" } = $$props;
    setContext("active", active2);
    setContext("hover", hover);
    setContext("flex", flex);
    setContext("padding", padding);
    setContext("rounded", rounded);
    setContext("spacing", spacing);
    $$self.$$set = ($$new_props) => {
      $$invalidate(18, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("justify" in $$new_props) $$invalidate(6, justify = $$new_props.justify);
      if ("border" in $$new_props) $$invalidate(7, border = $$new_props.border);
      if ("active" in $$new_props) $$invalidate(8, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(9, hover = $$new_props.hover);
      if ("flex" in $$new_props) $$invalidate(10, flex = $$new_props.flex);
      if ("padding" in $$new_props) $$invalidate(11, padding = $$new_props.padding);
      if ("rounded" in $$new_props) $$invalidate(12, rounded = $$new_props.rounded);
      if ("spacing" in $$new_props) $$invalidate(13, spacing = $$new_props.spacing);
      if ("regionList" in $$new_props) $$invalidate(14, regionList = $$new_props.regionList);
      if ("regionPanel" in $$new_props) $$invalidate(15, regionPanel = $$new_props.regionPanel);
      if ("labelledby" in $$new_props) $$invalidate(0, labelledby = $$new_props.labelledby);
      if ("panel" in $$new_props) $$invalidate(1, panel = $$new_props.panel);
      if ("$$scope" in $$new_props) $$invalidate(16, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(4, classesBase = `${cBase$1} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*justify, border, regionList*/
      16576) {
        $$invalidate(3, classesList = `${cList} ${justify} ${border} ${regionList}`);
      }
      if ($$self.$$.dirty & /*regionPanel*/
      32768) {
        $$invalidate(2, classesPanel = `${cPanel} ${regionPanel}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      labelledby,
      panel,
      classesPanel,
      classesList,
      classesBase,
      $$slots,
      justify,
      border,
      active2,
      hover,
      flex,
      padding,
      rounded,
      spacing,
      regionList,
      regionPanel,
      $$scope,
      slots
    ];
  }
  class TabGroup extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$d, create_fragment$d, safe_not_equal, {
        justify: 6,
        border: 7,
        active: 8,
        hover: 9,
        flex: 10,
        padding: 11,
        rounded: 12,
        spacing: 13,
        regionList: 14,
        regionPanel: 15,
        labelledby: 0,
        panel: 1
      });
    }
  }
  const get_lead_slot_changes = (dirty) => ({});
  const get_lead_slot_context = (ctx) => ({});
  function create_if_block$9(ctx) {
    let div;
    let current;
    const lead_slot_template = (
      /*#slots*/
      ctx[22].lead
    );
    const lead_slot = create_slot(
      lead_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      get_lead_slot_context
    );
    return {
      c() {
        div = element("div");
        if (lead_slot) lead_slot.c();
        attr(div, "class", "tab-lead");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (lead_slot) {
          lead_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, dirty) {
        if (lead_slot) {
          if (lead_slot.p && (!current || dirty[0] & /*$$scope*/
          2097152)) {
            update_slot_base(
              lead_slot,
              lead_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                lead_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                get_lead_slot_changes
              ),
              get_lead_slot_context
            );
          }
        }
      },
      i(local) {
        if (current) return;
        transition_in(lead_slot, local);
        current = true;
      },
      o(local) {
        transition_out(lead_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (lead_slot) lead_slot.d(detaching);
      }
    };
  }
  function create_fragment$c(ctx) {
    let label;
    let div3;
    let div0;
    let input;
    let t0;
    let div2;
    let t1;
    let div1;
    let div2_class_value;
    let div3_class_value;
    let div3_tabindex_value;
    let current;
    let binding_group;
    let mounted;
    let dispose;
    let input_levels = [
      { type: "radio" },
      { name: (
        /*name*/
        ctx[1]
      ) },
      { __value: (
        /*value*/
        ctx[2]
      ) },
      /*prunedRestProps*/
      ctx[11](),
      { tabindex: "-1" }
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    let if_block = (
      /*$$slots*/
      ctx[12].lead && create_if_block$9(ctx)
    );
    const default_slot_template = (
      /*#slots*/
      ctx[22].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[21],
      null
    );
    binding_group = init_binding_group(
      /*$$binding_groups*/
      ctx[30][0]
    );
    return {
      c() {
        label = element("label");
        div3 = element("div");
        div0 = element("div");
        input = element("input");
        t0 = space();
        div2 = element("div");
        if (if_block) if_block.c();
        t1 = space();
        div1 = element("div");
        if (default_slot) default_slot.c();
        set_attributes(input, input_data);
        attr(div0, "class", "h-0 w-0 overflow-hidden");
        attr(div1, "class", "tab-label");
        attr(div2, "class", div2_class_value = "tab-interface " + /*classesInterface*/
        ctx[8]);
        attr(div3, "class", div3_class_value = "tab " + /*classesTab*/
        ctx[7]);
        attr(div3, "data-testid", "tab");
        attr(div3, "role", "tab");
        attr(
          div3,
          "aria-controls",
          /*controls*/
          ctx[4]
        );
        attr(
          div3,
          "aria-selected",
          /*selected*/
          ctx[5]
        );
        attr(div3, "tabindex", div3_tabindex_value = /*selected*/
        ctx[5] ? 0 : -1);
        attr(
          label,
          "class",
          /*classesBase*/
          ctx[9]
        );
        attr(
          label,
          "title",
          /*title*/
          ctx[3]
        );
        binding_group.p(input);
      },
      m(target, anchor) {
        insert(target, label, anchor);
        append(label, div3);
        append(div3, div0);
        append(div0, input);
        if (input.autofocus) input.focus();
        ctx[28](input);
        input.checked = input.__value === /*group*/
        ctx[0];
        append(div3, t0);
        append(div3, div2);
        if (if_block) if_block.m(div2, null);
        append(div2, t1);
        append(div2, div1);
        if (default_slot) {
          default_slot.m(div1, null);
        }
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              input,
              "change",
              /*input_change_handler*/
              ctx[29]
            ),
            listen(
              input,
              "click",
              /*click_handler*/
              ctx[26]
            ),
            listen(
              input,
              "change",
              /*change_handler*/
              ctx[27]
            ),
            listen(
              div3,
              "keydown",
              /*onKeyDown*/
              ctx[10]
            ),
            listen(
              div3,
              "keydown",
              /*keydown_handler*/
              ctx[23]
            ),
            listen(
              div3,
              "keyup",
              /*keyup_handler*/
              ctx[24]
            ),
            listen(
              div3,
              "keypress",
              /*keypress_handler*/
              ctx[25]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { type: "radio" },
          (!current || dirty[0] & /*name*/
          2) && { name: (
            /*name*/
            ctx2[1]
          ) },
          (!current || dirty[0] & /*value*/
          4) && { __value: (
            /*value*/
            ctx2[2]
          ) },
          /*prunedRestProps*/
          ctx2[11](),
          { tabindex: "-1" }
        ]));
        if (dirty[0] & /*group*/
        1) {
          input.checked = input.__value === /*group*/
          ctx2[0];
        }
        if (
          /*$$slots*/
          ctx2[12].lead
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty[0] & /*$$slots*/
            4096) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$9(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(div2, t1);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
        if (default_slot) {
          if (default_slot.p && (!current || dirty[0] & /*$$scope*/
          2097152)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[21],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[21]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx2[21],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty[0] & /*classesInterface*/
        256 && div2_class_value !== (div2_class_value = "tab-interface " + /*classesInterface*/
        ctx2[8])) {
          attr(div2, "class", div2_class_value);
        }
        if (!current || dirty[0] & /*classesTab*/
        128 && div3_class_value !== (div3_class_value = "tab " + /*classesTab*/
        ctx2[7])) {
          attr(div3, "class", div3_class_value);
        }
        if (!current || dirty[0] & /*controls*/
        16) {
          attr(
            div3,
            "aria-controls",
            /*controls*/
            ctx2[4]
          );
        }
        if (!current || dirty[0] & /*selected*/
        32) {
          attr(
            div3,
            "aria-selected",
            /*selected*/
            ctx2[5]
          );
        }
        if (!current || dirty[0] & /*selected*/
        32 && div3_tabindex_value !== (div3_tabindex_value = /*selected*/
        ctx2[5] ? 0 : -1)) {
          attr(div3, "tabindex", div3_tabindex_value);
        }
        if (!current || dirty[0] & /*classesBase*/
        512) {
          attr(
            label,
            "class",
            /*classesBase*/
            ctx2[9]
          );
        }
        if (!current || dirty[0] & /*title*/
        8) {
          attr(
            label,
            "title",
            /*title*/
            ctx2[3]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(label);
        }
        ctx[28](null);
        if (if_block) if_block.d();
        if (default_slot) default_slot.d(detaching);
        binding_group.r();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBase = "text-center cursor-pointer transition-colors duration-100";
  const cInterface = "";
  function instance$c($$self, $$props, $$invalidate) {
    let selected;
    let classesActive;
    let classesBase;
    let classesInterface;
    let classesTab;
    const omit_props_names = [
      "group",
      "name",
      "value",
      "title",
      "controls",
      "regionTab",
      "active",
      "hover",
      "flex",
      "padding",
      "rounded",
      "spacing"
    ];
    let $$restProps = compute_rest_props($$props, omit_props_names);
    let { $$slots: slots = {}, $$scope } = $$props;
    const $$slots = compute_slots(slots);
    let { group } = $$props;
    let { name } = $$props;
    let { value } = $$props;
    let { title = "" } = $$props;
    let { controls = "" } = $$props;
    let { regionTab = "" } = $$props;
    let { active: active2 = getContext("active") } = $$props;
    let { hover = getContext("hover") } = $$props;
    let { flex = getContext("flex") } = $$props;
    let { padding = getContext("padding") } = $$props;
    let { rounded = getContext("rounded") } = $$props;
    let { spacing = getContext("spacing") } = $$props;
    let elemInput;
    function onKeyDown(event) {
      if (["Enter", "Space"].includes(event.code)) {
        event.preventDefault();
        elemInput.click();
      } else if (event.code === "ArrowRight") {
        const tabList = elemInput.closest(".tab-list");
        if (!tabList) return;
        const tabs = Array.from(tabList.querySelectorAll(".tab"));
        const currTab = elemInput.closest(".tab");
        if (!currTab) return;
        const currIndex = tabs.indexOf(currTab);
        const nextIndex = currIndex + 1 >= tabs.length ? 0 : currIndex + 1;
        const nextTab = tabs[nextIndex];
        const nextTabInput = nextTab == null ? void 0 : nextTab.querySelector("input");
        if (nextTab && nextTabInput) {
          nextTabInput.click();
          nextTab.focus();
        }
      } else if (event.code === "ArrowLeft") {
        const tabList = elemInput.closest(".tab-list");
        if (!tabList) return;
        const tabs = Array.from(tabList.querySelectorAll(".tab"));
        const currTab = elemInput.closest(".tab");
        if (!currTab) return;
        const currIndex = tabs.indexOf(currTab);
        const nextIndex = currIndex - 1 < 0 ? tabs.length - 1 : currIndex - 1;
        const nextTab = tabs[nextIndex];
        const nextTabInput = nextTab == null ? void 0 : nextTab.querySelector("input");
        if (nextTab && nextTabInput) {
          nextTabInput.click();
          nextTab.focus();
        }
      }
    }
    function prunedRestProps() {
      delete $$restProps.class;
      return $$restProps;
    }
    const $$binding_groups = [[]];
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keyup_handler(event) {
      bubble.call(this, $$self, event);
    }
    function keypress_handler(event) {
      bubble.call(this, $$self, event);
    }
    function click_handler(event) {
      bubble.call(this, $$self, event);
    }
    function change_handler(event) {
      bubble.call(this, $$self, event);
    }
    function input_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        elemInput = $$value;
        $$invalidate(6, elemInput);
      });
    }
    function input_change_handler() {
      group = this.__value;
      $$invalidate(0, group);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(32, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      $$invalidate(31, $$restProps = compute_rest_props($$props, omit_props_names));
      if ("group" in $$new_props) $$invalidate(0, group = $$new_props.group);
      if ("name" in $$new_props) $$invalidate(1, name = $$new_props.name);
      if ("value" in $$new_props) $$invalidate(2, value = $$new_props.value);
      if ("title" in $$new_props) $$invalidate(3, title = $$new_props.title);
      if ("controls" in $$new_props) $$invalidate(4, controls = $$new_props.controls);
      if ("regionTab" in $$new_props) $$invalidate(13, regionTab = $$new_props.regionTab);
      if ("active" in $$new_props) $$invalidate(14, active2 = $$new_props.active);
      if ("hover" in $$new_props) $$invalidate(15, hover = $$new_props.hover);
      if ("flex" in $$new_props) $$invalidate(16, flex = $$new_props.flex);
      if ("padding" in $$new_props) $$invalidate(17, padding = $$new_props.padding);
      if ("rounded" in $$new_props) $$invalidate(18, rounded = $$new_props.rounded);
      if ("spacing" in $$new_props) $$invalidate(19, spacing = $$new_props.spacing);
      if ("$$scope" in $$new_props) $$invalidate(21, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[0] & /*value, group*/
      5) {
        $$invalidate(5, selected = value === group);
      }
      if ($$self.$$.dirty[0] & /*selected, active, hover*/
      49184) {
        $$invalidate(20, classesActive = selected ? active2 : hover);
      }
      $$invalidate(9, classesBase = `${cBase} ${flex} ${padding} ${rounded} ${classesActive} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*spacing*/
      524288) {
        $$invalidate(8, classesInterface = `${cInterface} ${spacing}`);
      }
      if ($$self.$$.dirty[0] & /*regionTab*/
      8192) {
        $$invalidate(7, classesTab = `${regionTab}`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      group,
      name,
      value,
      title,
      controls,
      selected,
      elemInput,
      classesTab,
      classesInterface,
      classesBase,
      onKeyDown,
      prunedRestProps,
      $$slots,
      regionTab,
      active2,
      hover,
      flex,
      padding,
      rounded,
      spacing,
      classesActive,
      $$scope,
      slots,
      keydown_handler,
      keyup_handler,
      keypress_handler,
      click_handler,
      change_handler,
      input_binding,
      input_change_handler,
      $$binding_groups
    ];
  }
  class Tab extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$c,
        create_fragment$c,
        safe_not_equal,
        {
          group: 0,
          name: 1,
          value: 2,
          title: 3,
          controls: 4,
          regionTab: 13,
          active: 14,
          hover: 15,
          flex: 16,
          padding: 17,
          rounded: 18,
          spacing: 19
        },
        null,
        [-1, -1]
      );
    }
  }
  function create_if_block$8(ctx) {
    let previous_key = (
      /*$modalStore*/
      ctx[14]
    );
    let key_block_anchor;
    let current;
    let key_block = create_key_block(ctx);
    return {
      c() {
        key_block.c();
        key_block_anchor = empty();
      },
      m(target, anchor) {
        key_block.m(target, anchor);
        insert(target, key_block_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*$modalStore*/
        16384 && safe_not_equal(previous_key, previous_key = /*$modalStore*/
        ctx2[14])) {
          group_outros();
          transition_out(key_block, 1, 1, noop);
          check_outros();
          key_block = create_key_block(ctx2);
          key_block.c();
          transition_in(key_block, 1);
          key_block.m(key_block_anchor.parentNode, key_block_anchor);
        } else {
          key_block.p(ctx2, dirty);
        }
      },
      i(local) {
        if (current) return;
        transition_in(key_block);
        current = true;
      },
      o(local) {
        transition_out(key_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(key_block_anchor);
        }
        key_block.d(detaching);
      }
    };
  }
  function create_else_block$3(ctx) {
    let div;
    let current_block_type_index;
    let if_block;
    let div_class_value;
    let div_aria_label_value;
    let current;
    const if_block_creators = [create_if_block_8$1, create_else_block_1];
    const if_blocks = [];
    function select_block_type_2(ctx2, dirty) {
      var _a;
      if (
        /*currentComponent*/
        (_a = ctx2[16]) == null ? void 0 : _a.slot
      ) return 0;
      return 1;
    }
    current_block_type_index = select_block_type_2(ctx);
    if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    return {
      c() {
        var _a;
        div = element("div");
        if_block.c();
        attr(div, "class", div_class_value = "modal contents " + /*$modalStore*/
        (((_a = ctx[14][0]) == null ? void 0 : _a.modalClasses) ?? ""));
        attr(div, "data-testid", "modal-component");
        attr(div, "role", "dialog");
        attr(div, "aria-modal", "true");
        attr(div, "aria-label", div_aria_label_value = /*$modalStore*/
        ctx[14][0].title ?? "");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if_blocks[current_block_type_index].m(div, null);
        ctx[47](div);
        current = true;
      },
      p(ctx2, dirty) {
        var _a;
        let previous_block_index = current_block_type_index;
        current_block_type_index = select_block_type_2(ctx2);
        if (current_block_type_index === previous_block_index) {
          if_blocks[current_block_type_index].p(ctx2, dirty);
        } else {
          group_outros();
          transition_out(if_blocks[previous_block_index], 1, 1, () => {
            if_blocks[previous_block_index] = null;
          });
          check_outros();
          if_block = if_blocks[current_block_type_index];
          if (!if_block) {
            if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
            if_block.c();
          } else {
            if_block.p(ctx2, dirty);
          }
          transition_in(if_block, 1);
          if_block.m(div, null);
        }
        if (!current || dirty[0] & /*$modalStore*/
        16384 && div_class_value !== (div_class_value = "modal contents " + /*$modalStore*/
        (((_a = ctx2[14][0]) == null ? void 0 : _a.modalClasses) ?? ""))) {
          attr(div, "class", div_class_value);
        }
        if (!current || dirty[0] & /*$modalStore*/
        16384 && div_aria_label_value !== (div_aria_label_value = /*$modalStore*/
        ctx2[14][0].title ?? "")) {
          attr(div, "aria-label", div_aria_label_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if_blocks[current_block_type_index].d();
        ctx[47](null);
      }
    };
  }
  function create_if_block_1$6(ctx) {
    var _a, _b, _c, _d;
    let div;
    let t0;
    let t1;
    let t2;
    let div_class_value;
    let div_aria_label_value;
    let if_block0 = (
      /*$modalStore*/
      ((_a = ctx[14][0]) == null ? void 0 : _a.title) && create_if_block_7$1(ctx)
    );
    let if_block1 = (
      /*$modalStore*/
      ((_b = ctx[14][0]) == null ? void 0 : _b.body) && create_if_block_6$1(ctx)
    );
    let if_block2 = (
      /*$modalStore*/
      ((_c = ctx[14][0]) == null ? void 0 : _c.image) && typeof /*$modalStore*/
      ((_d = ctx[14][0]) == null ? void 0 : _d.image) === "string" && create_if_block_5$1(ctx)
    );
    function select_block_type_1(ctx2, dirty) {
      if (
        /*$modalStore*/
        ctx2[14][0].type === "alert"
      ) return create_if_block_2$4;
      if (
        /*$modalStore*/
        ctx2[14][0].type === "confirm"
      ) return create_if_block_3$3;
      if (
        /*$modalStore*/
        ctx2[14][0].type === "prompt"
      ) return create_if_block_4$1;
    }
    let current_block_type = select_block_type_1(ctx);
    let if_block3 = current_block_type && current_block_type(ctx);
    return {
      c() {
        div = element("div");
        if (if_block0) if_block0.c();
        t0 = space();
        if (if_block1) if_block1.c();
        t1 = space();
        if (if_block2) if_block2.c();
        t2 = space();
        if (if_block3) if_block3.c();
        attr(div, "class", div_class_value = "modal " + /*classesModal*/
        ctx[20]);
        attr(div, "data-testid", "modal");
        attr(div, "role", "dialog");
        attr(div, "aria-modal", "true");
        attr(div, "aria-label", div_aria_label_value = /*$modalStore*/
        ctx[14][0].title ?? "");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (if_block0) if_block0.m(div, null);
        append(div, t0);
        if (if_block1) if_block1.m(div, null);
        append(div, t1);
        if (if_block2) if_block2.m(div, null);
        append(div, t2);
        if (if_block3) if_block3.m(div, null);
        ctx[46](div);
      },
      p(ctx2, dirty) {
        var _a2, _b2, _c2, _d2;
        if (
          /*$modalStore*/
          (_a2 = ctx2[14][0]) == null ? void 0 : _a2.title
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
          } else {
            if_block0 = create_if_block_7$1(ctx2);
            if_block0.c();
            if_block0.m(div, t0);
          }
        } else if (if_block0) {
          if_block0.d(1);
          if_block0 = null;
        }
        if (
          /*$modalStore*/
          (_b2 = ctx2[14][0]) == null ? void 0 : _b2.body
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
          } else {
            if_block1 = create_if_block_6$1(ctx2);
            if_block1.c();
            if_block1.m(div, t1);
          }
        } else if (if_block1) {
          if_block1.d(1);
          if_block1 = null;
        }
        if (
          /*$modalStore*/
          ((_c2 = ctx2[14][0]) == null ? void 0 : _c2.image) && typeof /*$modalStore*/
          ((_d2 = ctx2[14][0]) == null ? void 0 : _d2.image) === "string"
        ) {
          if (if_block2) {
            if_block2.p(ctx2, dirty);
          } else {
            if_block2 = create_if_block_5$1(ctx2);
            if_block2.c();
            if_block2.m(div, t2);
          }
        } else if (if_block2) {
          if_block2.d(1);
          if_block2 = null;
        }
        if (current_block_type === (current_block_type = select_block_type_1(ctx2)) && if_block3) {
          if_block3.p(ctx2, dirty);
        } else {
          if (if_block3) if_block3.d(1);
          if_block3 = current_block_type && current_block_type(ctx2);
          if (if_block3) {
            if_block3.c();
            if_block3.m(div, null);
          }
        }
        if (dirty[0] & /*classesModal*/
        1048576 && div_class_value !== (div_class_value = "modal " + /*classesModal*/
        ctx2[20])) {
          attr(div, "class", div_class_value);
        }
        if (dirty[0] & /*$modalStore*/
        16384 && div_aria_label_value !== (div_aria_label_value = /*$modalStore*/
        ctx2[14][0].title ?? "")) {
          attr(div, "aria-label", div_aria_label_value);
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        if (if_block2) if_block2.d();
        if (if_block3) {
          if_block3.d();
        }
        ctx[46](null);
      }
    };
  }
  function create_else_block_1(ctx) {
    var _a, _b;
    let switch_instance;
    let switch_instance_anchor;
    let current;
    const switch_instance_spread_levels = [
      /*currentComponent*/
      (_a = ctx[16]) == null ? void 0 : _a.props,
      { parent: (
        /*parent*/
        ctx[19]
      ) }
    ];
    var switch_value = (
      /*currentComponent*/
      (_b = ctx[16]) == null ? void 0 : _b.ref
    );
    function switch_props(ctx2, dirty) {
      var _a2;
      let switch_instance_props = {};
      for (let i = 0; i < switch_instance_spread_levels.length; i += 1) {
        switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);
      }
      if (dirty !== void 0 && dirty[0] & /*currentComponent, parent*/
      589824) {
        switch_instance_props = assign(switch_instance_props, get_spread_update(switch_instance_spread_levels, [
          dirty[0] & /*currentComponent*/
          65536 && get_spread_object(
            /*currentComponent*/
            (_a2 = ctx2[16]) == null ? void 0 : _a2.props
          ),
          dirty[0] & /*parent*/
          524288 && { parent: (
            /*parent*/
            ctx2[19]
          ) }
        ]));
      }
      return { props: switch_instance_props };
    }
    if (switch_value) {
      switch_instance = construct_svelte_component(switch_value, switch_props(ctx));
    }
    return {
      c() {
        if (switch_instance) create_component(switch_instance.$$.fragment);
        switch_instance_anchor = empty();
      },
      m(target, anchor) {
        if (switch_instance) mount_component(switch_instance, target, anchor);
        insert(target, switch_instance_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        var _a2, _b2;
        if (dirty[0] & /*currentComponent*/
        65536 && switch_value !== (switch_value = /*currentComponent*/
        (_a2 = ctx2[16]) == null ? void 0 : _a2.ref)) {
          if (switch_instance) {
            group_outros();
            const old_component = switch_instance;
            transition_out(old_component.$$.fragment, 1, 0, () => {
              destroy_component(old_component, 1);
            });
            check_outros();
          }
          if (switch_value) {
            switch_instance = construct_svelte_component(switch_value, switch_props(ctx2, dirty));
            create_component(switch_instance.$$.fragment);
            transition_in(switch_instance.$$.fragment, 1);
            mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor);
          } else {
            switch_instance = null;
          }
        } else if (switch_value) {
          const switch_instance_changes = dirty[0] & /*currentComponent, parent*/
          589824 ? get_spread_update(switch_instance_spread_levels, [
            dirty[0] & /*currentComponent*/
            65536 && get_spread_object(
              /*currentComponent*/
              (_b2 = ctx2[16]) == null ? void 0 : _b2.props
            ),
            dirty[0] & /*parent*/
            524288 && { parent: (
              /*parent*/
              ctx2[19]
            ) }
          ]) : {};
          switch_instance.$set(switch_instance_changes);
        }
      },
      i(local) {
        if (current) return;
        if (switch_instance) transition_in(switch_instance.$$.fragment, local);
        current = true;
      },
      o(local) {
        if (switch_instance) transition_out(switch_instance.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(switch_instance_anchor);
        }
        if (switch_instance) destroy_component(switch_instance, detaching);
      }
    };
  }
  function create_if_block_8$1(ctx) {
    var _a, _b;
    let switch_instance;
    let switch_instance_anchor;
    let current;
    const switch_instance_spread_levels = [
      /*currentComponent*/
      (_a = ctx[16]) == null ? void 0 : _a.props,
      { parent: (
        /*parent*/
        ctx[19]
      ) }
    ];
    var switch_value = (
      /*currentComponent*/
      (_b = ctx[16]) == null ? void 0 : _b.ref
    );
    function switch_props(ctx2, dirty) {
      var _a2;
      let switch_instance_props = {
        $$slots: { default: [create_default_slot$7] },
        $$scope: { ctx: ctx2 }
      };
      for (let i = 0; i < switch_instance_spread_levels.length; i += 1) {
        switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);
      }
      if (dirty !== void 0 && dirty[0] & /*currentComponent, parent*/
      589824) {
        switch_instance_props = assign(switch_instance_props, get_spread_update(switch_instance_spread_levels, [
          dirty[0] & /*currentComponent*/
          65536 && get_spread_object(
            /*currentComponent*/
            (_a2 = ctx2[16]) == null ? void 0 : _a2.props
          ),
          dirty[0] & /*parent*/
          524288 && { parent: (
            /*parent*/
            ctx2[19]
          ) }
        ]));
      }
      return { props: switch_instance_props };
    }
    if (switch_value) {
      switch_instance = construct_svelte_component(switch_value, switch_props(ctx));
    }
    return {
      c() {
        if (switch_instance) create_component(switch_instance.$$.fragment);
        switch_instance_anchor = empty();
      },
      m(target, anchor) {
        if (switch_instance) mount_component(switch_instance, target, anchor);
        insert(target, switch_instance_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        var _a2, _b2;
        if (dirty[0] & /*currentComponent*/
        65536 && switch_value !== (switch_value = /*currentComponent*/
        (_a2 = ctx2[16]) == null ? void 0 : _a2.ref)) {
          if (switch_instance) {
            group_outros();
            const old_component = switch_instance;
            transition_out(old_component.$$.fragment, 1, 0, () => {
              destroy_component(old_component, 1);
            });
            check_outros();
          }
          if (switch_value) {
            switch_instance = construct_svelte_component(switch_value, switch_props(ctx2, dirty));
            create_component(switch_instance.$$.fragment);
            transition_in(switch_instance.$$.fragment, 1);
            mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor);
          } else {
            switch_instance = null;
          }
        } else if (switch_value) {
          const switch_instance_changes = dirty[0] & /*currentComponent, parent*/
          589824 ? get_spread_update(switch_instance_spread_levels, [
            dirty[0] & /*currentComponent*/
            65536 && get_spread_object(
              /*currentComponent*/
              (_b2 = ctx2[16]) == null ? void 0 : _b2.props
            ),
            dirty[0] & /*parent*/
            524288 && { parent: (
              /*parent*/
              ctx2[19]
            ) }
          ]) : {};
          if (dirty[0] & /*currentComponent*/
          65536 | dirty[1] & /*$$scope*/
          16777216) {
            switch_instance_changes.$$scope = { dirty, ctx: ctx2 };
          }
          switch_instance.$set(switch_instance_changes);
        }
      },
      i(local) {
        if (current) return;
        if (switch_instance) transition_in(switch_instance.$$.fragment, local);
        current = true;
      },
      o(local) {
        if (switch_instance) transition_out(switch_instance.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(switch_instance_anchor);
        }
        if (switch_instance) destroy_component(switch_instance, detaching);
      }
    };
  }
  function create_default_slot$7(ctx) {
    var _a;
    let html_tag;
    let raw_value = (
      /*currentComponent*/
      ((_a = ctx[16]) == null ? void 0 : _a.slot) + ""
    );
    let html_anchor;
    return {
      c() {
        html_tag = new HtmlTag(false);
        html_anchor = empty();
        html_tag.a = html_anchor;
      },
      m(target, anchor) {
        html_tag.m(raw_value, target, anchor);
        insert(target, html_anchor, anchor);
      },
      p(ctx2, dirty) {
        var _a2;
        if (dirty[0] & /*currentComponent*/
        65536 && raw_value !== (raw_value = /*currentComponent*/
        ((_a2 = ctx2[16]) == null ? void 0 : _a2.slot) + "")) html_tag.p(raw_value);
      },
      d(detaching) {
        if (detaching) {
          detach(html_anchor);
          html_tag.d();
        }
      }
    };
  }
  function create_if_block_7$1(ctx) {
    let header;
    let raw_value = (
      /*$modalStore*/
      ctx[14][0].title + ""
    );
    let header_class_value;
    return {
      c() {
        header = element("header");
        attr(header, "class", header_class_value = "modal-header " + /*regionHeader*/
        ctx[5]);
      },
      m(target, anchor) {
        insert(target, header, anchor);
        header.innerHTML = raw_value;
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*$modalStore*/
        16384 && raw_value !== (raw_value = /*$modalStore*/
        ctx2[14][0].title + "")) header.innerHTML = raw_value;
        if (dirty[0] & /*regionHeader*/
        32 && header_class_value !== (header_class_value = "modal-header " + /*regionHeader*/
        ctx2[5])) {
          attr(header, "class", header_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(header);
        }
      }
    };
  }
  function create_if_block_6$1(ctx) {
    let article;
    let raw_value = (
      /*$modalStore*/
      ctx[14][0].body + ""
    );
    let article_class_value;
    return {
      c() {
        article = element("article");
        attr(article, "class", article_class_value = "modal-body " + /*regionBody*/
        ctx[6]);
      },
      m(target, anchor) {
        insert(target, article, anchor);
        article.innerHTML = raw_value;
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*$modalStore*/
        16384 && raw_value !== (raw_value = /*$modalStore*/
        ctx2[14][0].body + "")) article.innerHTML = raw_value;
        if (dirty[0] & /*regionBody*/
        64 && article_class_value !== (article_class_value = "modal-body " + /*regionBody*/
        ctx2[6])) {
          attr(article, "class", article_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(article);
        }
      }
    };
  }
  function create_if_block_5$1(ctx) {
    let img;
    let img_src_value;
    return {
      c() {
        var _a;
        img = element("img");
        attr(img, "class", "modal-image " + cModalImage);
        if (!src_url_equal(img.src, img_src_value = /*$modalStore*/
        (_a = ctx[14][0]) == null ? void 0 : _a.image)) attr(img, "src", img_src_value);
        attr(img, "alt", "Modal");
      },
      m(target, anchor) {
        insert(target, img, anchor);
      },
      p(ctx2, dirty) {
        var _a;
        if (dirty[0] & /*$modalStore*/
        16384 && !src_url_equal(img.src, img_src_value = /*$modalStore*/
        (_a = ctx2[14][0]) == null ? void 0 : _a.image)) {
          attr(img, "src", img_src_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(img);
        }
      }
    };
  }
  function create_if_block_4$1(ctx) {
    let form;
    let input;
    let t0;
    let footer;
    let button0;
    let t1;
    let button0_class_value;
    let t2;
    let button1;
    let t3;
    let button1_class_value;
    let footer_class_value;
    let mounted;
    let dispose;
    let input_levels = [
      { class: "modal-prompt-input input" },
      { name: "prompt" },
      { type: "text" },
      /*$modalStore*/
      ctx[14][0].valueAttr
    ];
    let input_data = {};
    for (let i = 0; i < input_levels.length; i += 1) {
      input_data = assign(input_data, input_levels[i]);
    }
    return {
      c() {
        form = element("form");
        input = element("input");
        t0 = space();
        footer = element("footer");
        button0 = element("button");
        t1 = text(
          /*buttonTextCancel*/
          ctx[0]
        );
        t2 = space();
        button1 = element("button");
        t3 = text(
          /*buttonTextSubmit*/
          ctx[2]
        );
        set_attributes(input, input_data);
        attr(button0, "type", "button");
        attr(button0, "class", button0_class_value = "btn " + /*buttonNeutral*/
        ctx[3]);
        attr(button1, "type", "submit");
        attr(button1, "class", button1_class_value = "btn " + /*buttonPositive*/
        ctx[4]);
        attr(footer, "class", footer_class_value = "modal-footer " + /*regionFooter*/
        ctx[7]);
        attr(form, "class", "space-y-4");
      },
      m(target, anchor) {
        insert(target, form, anchor);
        append(form, input);
        if (input.autofocus) input.focus();
        set_input_value(
          input,
          /*promptValue*/
          ctx[15]
        );
        append(form, t0);
        append(form, footer);
        append(footer, button0);
        append(button0, t1);
        append(footer, t2);
        append(footer, button1);
        append(button1, t3);
        if (!mounted) {
          dispose = [
            listen(
              input,
              "input",
              /*input_input_handler*/
              ctx[45]
            ),
            listen(
              button0,
              "click",
              /*onClose*/
              ctx[26]
            ),
            listen(
              form,
              "submit",
              /*onPromptSubmit*/
              ctx[28]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        set_attributes(input, input_data = get_spread_update(input_levels, [
          { class: "modal-prompt-input input" },
          { name: "prompt" },
          { type: "text" },
          dirty[0] & /*$modalStore*/
          16384 && /*$modalStore*/
          ctx2[14][0].valueAttr
        ]));
        if (dirty[0] & /*promptValue*/
        32768 && input.value !== /*promptValue*/
        ctx2[15]) {
          set_input_value(
            input,
            /*promptValue*/
            ctx2[15]
          );
        }
        if (dirty[0] & /*buttonTextCancel*/
        1) set_data(
          t1,
          /*buttonTextCancel*/
          ctx2[0]
        );
        if (dirty[0] & /*buttonNeutral*/
        8 && button0_class_value !== (button0_class_value = "btn " + /*buttonNeutral*/
        ctx2[3])) {
          attr(button0, "class", button0_class_value);
        }
        if (dirty[0] & /*buttonTextSubmit*/
        4) set_data(
          t3,
          /*buttonTextSubmit*/
          ctx2[2]
        );
        if (dirty[0] & /*buttonPositive*/
        16 && button1_class_value !== (button1_class_value = "btn " + /*buttonPositive*/
        ctx2[4])) {
          attr(button1, "class", button1_class_value);
        }
        if (dirty[0] & /*regionFooter*/
        128 && footer_class_value !== (footer_class_value = "modal-footer " + /*regionFooter*/
        ctx2[7])) {
          attr(footer, "class", footer_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(form);
        }
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_3$3(ctx) {
    let footer;
    let button0;
    let t0;
    let button0_class_value;
    let t1;
    let button1;
    let t2;
    let button1_class_value;
    let footer_class_value;
    let mounted;
    let dispose;
    return {
      c() {
        footer = element("footer");
        button0 = element("button");
        t0 = text(
          /*buttonTextCancel*/
          ctx[0]
        );
        t1 = space();
        button1 = element("button");
        t2 = text(
          /*buttonTextConfirm*/
          ctx[1]
        );
        attr(button0, "type", "button");
        attr(button0, "class", button0_class_value = "btn " + /*buttonNeutral*/
        ctx[3]);
        attr(button1, "type", "button");
        attr(button1, "class", button1_class_value = "btn " + /*buttonPositive*/
        ctx[4]);
        attr(footer, "class", footer_class_value = "modal-footer " + /*regionFooter*/
        ctx[7]);
      },
      m(target, anchor) {
        insert(target, footer, anchor);
        append(footer, button0);
        append(button0, t0);
        append(footer, t1);
        append(footer, button1);
        append(button1, t2);
        if (!mounted) {
          dispose = [
            listen(
              button0,
              "click",
              /*onClose*/
              ctx[26]
            ),
            listen(
              button1,
              "click",
              /*onConfirm*/
              ctx[27]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*buttonTextCancel*/
        1) set_data(
          t0,
          /*buttonTextCancel*/
          ctx2[0]
        );
        if (dirty[0] & /*buttonNeutral*/
        8 && button0_class_value !== (button0_class_value = "btn " + /*buttonNeutral*/
        ctx2[3])) {
          attr(button0, "class", button0_class_value);
        }
        if (dirty[0] & /*buttonTextConfirm*/
        2) set_data(
          t2,
          /*buttonTextConfirm*/
          ctx2[1]
        );
        if (dirty[0] & /*buttonPositive*/
        16 && button1_class_value !== (button1_class_value = "btn " + /*buttonPositive*/
        ctx2[4])) {
          attr(button1, "class", button1_class_value);
        }
        if (dirty[0] & /*regionFooter*/
        128 && footer_class_value !== (footer_class_value = "modal-footer " + /*regionFooter*/
        ctx2[7])) {
          attr(footer, "class", footer_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(footer);
        }
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_2$4(ctx) {
    let footer;
    let button;
    let t2;
    let button_class_value;
    let footer_class_value;
    let mounted;
    let dispose;
    return {
      c() {
        footer = element("footer");
        button = element("button");
        t2 = text(
          /*buttonTextCancel*/
          ctx[0]
        );
        attr(button, "type", "button");
        attr(button, "class", button_class_value = "btn " + /*buttonNeutral*/
        ctx[3]);
        attr(footer, "class", footer_class_value = "modal-footer " + /*regionFooter*/
        ctx[7]);
      },
      m(target, anchor) {
        insert(target, footer, anchor);
        append(footer, button);
        append(button, t2);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*onClose*/
            ctx[26]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*buttonTextCancel*/
        1) set_data(
          t2,
          /*buttonTextCancel*/
          ctx2[0]
        );
        if (dirty[0] & /*buttonNeutral*/
        8 && button_class_value !== (button_class_value = "btn " + /*buttonNeutral*/
        ctx2[3])) {
          attr(button, "class", button_class_value);
        }
        if (dirty[0] & /*regionFooter*/
        128 && footer_class_value !== (footer_class_value = "modal-footer " + /*regionFooter*/
        ctx2[7])) {
          attr(footer, "class", footer_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(footer);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_key_block(ctx) {
    let div1;
    let div0;
    let current_block_type_index;
    let if_block;
    let div0_class_value;
    let div0_intro;
    let div0_outro;
    let div1_class_value;
    let div1_transition;
    let current;
    let mounted;
    let dispose;
    const if_block_creators = [create_if_block_1$6, create_else_block$3];
    const if_blocks = [];
    function select_block_type(ctx2, dirty) {
      if (
        /*$modalStore*/
        ctx2[14][0].type !== "component"
      ) return 0;
      return 1;
    }
    current_block_type_index = select_block_type(ctx);
    if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    return {
      c() {
        div1 = element("div");
        div0 = element("div");
        if_block.c();
        attr(div0, "class", div0_class_value = "modal-transition " + /*classesTransitionLayer*/
        ctx[21]);
        attr(div1, "class", div1_class_value = "modal-backdrop " + /*classesBackdrop*/
        ctx[22] + " " + /*backdropOverflow*/
        ctx[18]);
        attr(div1, "data-testid", "modal-backdrop");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
        if_blocks[current_block_type_index].m(div0, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              div1,
              "mousedown",
              /*onBackdropInteractionBegin*/
              ctx[24]
            ),
            listen(
              div1,
              "mouseup",
              /*onBackdropInteractionEnd*/
              ctx[25]
            ),
            listen(
              div1,
              "touchstart",
              /*touchstart_handler*/
              ctx[42],
              { passive: true }
            ),
            listen(
              div1,
              "touchend",
              /*touchend_handler*/
              ctx[43],
              { passive: true }
            ),
            action_destroyer(focusTrap.call(null, div1, true))
          ];
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        let previous_block_index = current_block_type_index;
        current_block_type_index = select_block_type(ctx);
        if (current_block_type_index === previous_block_index) {
          if_blocks[current_block_type_index].p(ctx, dirty);
        } else {
          group_outros();
          transition_out(if_blocks[previous_block_index], 1, 1, () => {
            if_blocks[previous_block_index] = null;
          });
          check_outros();
          if_block = if_blocks[current_block_type_index];
          if (!if_block) {
            if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
            if_block.c();
          } else {
            if_block.p(ctx, dirty);
          }
          transition_in(if_block, 1);
          if_block.m(div0, null);
        }
        if (!current || dirty[0] & /*classesTransitionLayer*/
        2097152 && div0_class_value !== (div0_class_value = "modal-transition " + /*classesTransitionLayer*/
        ctx[21])) {
          attr(div0, "class", div0_class_value);
        }
        if (!current || dirty[0] & /*classesBackdrop, backdropOverflow*/
        4456448 && div1_class_value !== (div1_class_value = "modal-backdrop " + /*classesBackdrop*/
        ctx[22] + " " + /*backdropOverflow*/
        ctx[18])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        add_render_callback(() => {
          if (!current) return;
          if (div0_outro) div0_outro.end(1);
          div0_intro = create_in_transition(div0, dynamicTransition, {
            transition: (
              /*transitionIn*/
              ctx[9]
            ),
            params: (
              /*transitionInParams*/
              ctx[10]
            ),
            enabled: (
              /*transitions*/
              ctx[8]
            )
          });
          div0_intro.start();
        });
        add_render_callback(() => {
          if (!current) return;
          if (!div1_transition) div1_transition = create_bidirectional_transition(
            div1,
            dynamicTransition,
            {
              transition: fade,
              params: { duration: 150 },
              enabled: (
                /*transitions*/
                ctx[8]
              )
            },
            true
          );
          div1_transition.run(1);
        });
        current = true;
      },
      o(local) {
        transition_out(if_block);
        if (div0_intro) div0_intro.invalidate();
        div0_outro = create_out_transition(div0, dynamicTransition, {
          transition: (
            /*transitionOut*/
            ctx[11]
          ),
          params: (
            /*transitionOutParams*/
            ctx[12]
          ),
          enabled: (
            /*transitions*/
            ctx[8]
          )
        });
        if (!div1_transition) div1_transition = create_bidirectional_transition(
          div1,
          dynamicTransition,
          {
            transition: fade,
            params: { duration: 150 },
            enabled: (
              /*transitions*/
              ctx[8]
            )
          },
          false
        );
        div1_transition.run(0);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if_blocks[current_block_type_index].d();
        if (detaching && div0_outro) div0_outro.end();
        if (detaching && div1_transition) div1_transition.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_fragment$b(ctx) {
    let if_block_anchor;
    let current;
    let mounted;
    let dispose;
    add_render_callback(
      /*onwindowresize*/
      ctx[44]
    );
    let if_block = (
      /*$modalStore*/
      ctx[14].length > 0 && create_if_block$8(ctx)
    );
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              window,
              "keydown",
              /*onKeyDown*/
              ctx[29]
            ),
            listen(
              window,
              "resize",
              /*onwindowresize*/
              ctx[44]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (
          /*$modalStore*/
          ctx2[14].length > 0
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty[0] & /*$modalStore*/
            16384) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$8(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) if_block.d(detaching);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const cBackdrop = "fixed top-0 left-0 right-0 bottom-0 bg-surface-backdrop-token p-4";
  const cTransitionLayer = "w-full h-fit min-h-full overflow-y-auto flex justify-center";
  const cModal = "block overflow-y-auto";
  const cModalImage = "w-full h-auto";
  function instance$b($$self, $$props, $$invalidate) {
    let cPosition;
    let classesBackdrop;
    let classesTransitionLayer;
    let classesModal;
    let parent;
    let $modalStore;
    let $prefersReducedMotionStore;
    component_subscribe($$self, prefersReducedMotionStore, ($$value) => $$invalidate(49, $prefersReducedMotionStore = $$value));
    const dispatch2 = createEventDispatcher();
    let { components = {} } = $$props;
    let { position = "items-center" } = $$props;
    let { background = "bg-surface-100-800-token" } = $$props;
    let { width = "w-modal" } = $$props;
    let { height = "h-auto" } = $$props;
    let { padding = "p-4" } = $$props;
    let { spacing = "space-y-4" } = $$props;
    let { rounded = "rounded-container-token" } = $$props;
    let { shadow = "shadow-xl" } = $$props;
    let { zIndex = "z-[999]" } = $$props;
    let { buttonNeutral = "variant-ghost-surface" } = $$props;
    let { buttonPositive = "variant-filled" } = $$props;
    let { buttonTextCancel = "Cancel" } = $$props;
    let { buttonTextConfirm = "Confirm" } = $$props;
    let { buttonTextSubmit = "Submit" } = $$props;
    let { regionBackdrop = "" } = $$props;
    let { regionHeader = "text-2xl font-bold" } = $$props;
    let { regionBody = "max-h-[200px] overflow-hidden" } = $$props;
    let { regionFooter = "flex justify-end space-x-2" } = $$props;
    let { transitions = !$prefersReducedMotionStore } = $$props;
    let { transitionIn = fly } = $$props;
    let { transitionInParams = { duration: 150, opacity: 0, x: 0, y: 100 } } = $$props;
    let { transitionOut = fly } = $$props;
    let { transitionOutParams = { duration: 150, opacity: 0, x: 0, y: 100 } } = $$props;
    let promptValue;
    const buttonTextDefaults = {
      buttonTextCancel,
      buttonTextConfirm,
      buttonTextSubmit
    };
    let currentComponent;
    let registeredInteractionWithBackdrop = false;
    let modalElement;
    let windowHeight;
    let backdropOverflow = "overflow-y-hidden";
    const modalStore = getModalStore();
    component_subscribe($$self, modalStore, (value) => $$invalidate(14, $modalStore = value));
    function handleModals(modals) {
      if (modals[0].type === "prompt") $$invalidate(15, promptValue = modals[0].value);
      $$invalidate(0, buttonTextCancel = modals[0].buttonTextCancel || buttonTextDefaults.buttonTextCancel);
      $$invalidate(1, buttonTextConfirm = modals[0].buttonTextConfirm || buttonTextDefaults.buttonTextConfirm);
      $$invalidate(2, buttonTextSubmit = modals[0].buttonTextSubmit || buttonTextDefaults.buttonTextSubmit);
      $$invalidate(16, currentComponent = typeof modals[0].component === "string" ? components[modals[0].component] : modals[0].component);
    }
    function onModalHeightChange(modal) {
      var _a;
      let modalHeight = modal == null ? void 0 : modal.clientHeight;
      if (!modalHeight) modalHeight = (_a = modal == null ? void 0 : modal.firstChild) == null ? void 0 : _a.clientHeight;
      if (!modalHeight) return;
      if (modalHeight > windowHeight) {
        $$invalidate(18, backdropOverflow = "overflow-y-auto");
      } else {
        $$invalidate(18, backdropOverflow = "overflow-y-hidden");
      }
    }
    function onBackdropInteractionBegin(event) {
      if (!(event.target instanceof Element)) return;
      const classList = event.target.classList;
      if (classList.contains("modal-backdrop") || classList.contains("modal-transition")) {
        registeredInteractionWithBackdrop = true;
      }
    }
    function onBackdropInteractionEnd(event) {
      if (!(event.target instanceof Element)) return;
      const classList = event.target.classList;
      if ((classList.contains("modal-backdrop") || classList.contains("modal-transition")) && registeredInteractionWithBackdrop) {
        if ($modalStore[0].response) $modalStore[0].response(void 0);
        modalStore.close();
        dispatch2("backdrop", event);
      }
      registeredInteractionWithBackdrop = false;
    }
    function onClose() {
      if ($modalStore[0].response) $modalStore[0].response(false);
      modalStore.close();
    }
    function onConfirm() {
      if ($modalStore[0].response) $modalStore[0].response(true);
      modalStore.close();
    }
    function onPromptSubmit(event) {
      event.preventDefault();
      if ($modalStore[0].response) {
        if ($modalStore[0].valueAttr !== void 0 && "type" in $modalStore[0].valueAttr && $modalStore[0].valueAttr.type === "number") $modalStore[0].response(parseInt(promptValue));
        else $modalStore[0].response(promptValue);
      }
      modalStore.close();
    }
    function onKeyDown(event) {
      if (!$modalStore.length) return;
      if (event.code === "Escape") onClose();
    }
    function touchstart_handler(event) {
      bubble.call(this, $$self, event);
    }
    function touchend_handler(event) {
      bubble.call(this, $$self, event);
    }
    function onwindowresize() {
      $$invalidate(17, windowHeight = window.innerHeight);
    }
    function input_input_handler() {
      promptValue = this.value;
      $$invalidate(15, promptValue);
    }
    function div_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        modalElement = $$value;
        $$invalidate(13, modalElement);
      });
    }
    function div_binding_1($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        modalElement = $$value;
        $$invalidate(13, modalElement);
      });
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(54, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("components" in $$new_props) $$invalidate(30, components = $$new_props.components);
      if ("position" in $$new_props) $$invalidate(31, position = $$new_props.position);
      if ("background" in $$new_props) $$invalidate(32, background = $$new_props.background);
      if ("width" in $$new_props) $$invalidate(33, width = $$new_props.width);
      if ("height" in $$new_props) $$invalidate(34, height = $$new_props.height);
      if ("padding" in $$new_props) $$invalidate(35, padding = $$new_props.padding);
      if ("spacing" in $$new_props) $$invalidate(36, spacing = $$new_props.spacing);
      if ("rounded" in $$new_props) $$invalidate(37, rounded = $$new_props.rounded);
      if ("shadow" in $$new_props) $$invalidate(38, shadow = $$new_props.shadow);
      if ("zIndex" in $$new_props) $$invalidate(39, zIndex = $$new_props.zIndex);
      if ("buttonNeutral" in $$new_props) $$invalidate(3, buttonNeutral = $$new_props.buttonNeutral);
      if ("buttonPositive" in $$new_props) $$invalidate(4, buttonPositive = $$new_props.buttonPositive);
      if ("buttonTextCancel" in $$new_props) $$invalidate(0, buttonTextCancel = $$new_props.buttonTextCancel);
      if ("buttonTextConfirm" in $$new_props) $$invalidate(1, buttonTextConfirm = $$new_props.buttonTextConfirm);
      if ("buttonTextSubmit" in $$new_props) $$invalidate(2, buttonTextSubmit = $$new_props.buttonTextSubmit);
      if ("regionBackdrop" in $$new_props) $$invalidate(40, regionBackdrop = $$new_props.regionBackdrop);
      if ("regionHeader" in $$new_props) $$invalidate(5, regionHeader = $$new_props.regionHeader);
      if ("regionBody" in $$new_props) $$invalidate(6, regionBody = $$new_props.regionBody);
      if ("regionFooter" in $$new_props) $$invalidate(7, regionFooter = $$new_props.regionFooter);
      if ("transitions" in $$new_props) $$invalidate(8, transitions = $$new_props.transitions);
      if ("transitionIn" in $$new_props) $$invalidate(9, transitionIn = $$new_props.transitionIn);
      if ("transitionInParams" in $$new_props) $$invalidate(10, transitionInParams = $$new_props.transitionInParams);
      if ("transitionOut" in $$new_props) $$invalidate(11, transitionOut = $$new_props.transitionOut);
      if ("transitionOutParams" in $$new_props) $$invalidate(12, transitionOutParams = $$new_props.transitionOutParams);
    };
    $$self.$$.update = () => {
      var _a, _b, _c;
      if ($$self.$$.dirty[0] & /*$modalStore*/
      16384) {
        if ($modalStore.length) handleModals($modalStore);
      }
      if ($$self.$$.dirty[0] & /*modalElement*/
      8192) {
        onModalHeightChange(modalElement);
      }
      if ($$self.$$.dirty[0] & /*$modalStore*/
      16384 | $$self.$$.dirty[1] & /*position*/
      1) {
        $$invalidate(41, cPosition = ((_a = $modalStore[0]) == null ? void 0 : _a.position) ?? position);
      }
      $$invalidate(22, classesBackdrop = `${cBackdrop} ${regionBackdrop} ${zIndex} ${$$props.class ?? ""} ${((_b = $modalStore[0]) == null ? void 0 : _b.backdropClasses) ?? ""}`);
      if ($$self.$$.dirty[1] & /*cPosition*/
      1024) {
        $$invalidate(21, classesTransitionLayer = `${cTransitionLayer} ${cPosition ?? ""}`);
      }
      if ($$self.$$.dirty[0] & /*$modalStore*/
      16384 | $$self.$$.dirty[1] & /*background, width, height, padding, spacing, rounded, shadow*/
      254) {
        $$invalidate(20, classesModal = `${cModal} ${background} ${width} ${height} ${padding} ${spacing} ${rounded} ${shadow} ${((_c = $modalStore[0]) == null ? void 0 : _c.modalClasses) ?? ""}`);
      }
      if ($$self.$$.dirty[0] & /*buttonNeutral, buttonPositive, buttonTextCancel, buttonTextConfirm, buttonTextSubmit, regionHeader, regionBody, regionFooter*/
      255 | $$self.$$.dirty[1] & /*position, background, width, height, padding, spacing, rounded, shadow, regionBackdrop*/
      767) {
        $$invalidate(19, parent = {
          position,
          // ---
          background,
          width,
          height,
          padding,
          spacing,
          rounded,
          shadow,
          // ---
          buttonNeutral,
          buttonPositive,
          buttonTextCancel,
          buttonTextConfirm,
          buttonTextSubmit,
          // ---
          regionBackdrop,
          regionHeader,
          regionBody,
          regionFooter,
          // ---
          onClose
        });
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      buttonTextCancel,
      buttonTextConfirm,
      buttonTextSubmit,
      buttonNeutral,
      buttonPositive,
      regionHeader,
      regionBody,
      regionFooter,
      transitions,
      transitionIn,
      transitionInParams,
      transitionOut,
      transitionOutParams,
      modalElement,
      $modalStore,
      promptValue,
      currentComponent,
      windowHeight,
      backdropOverflow,
      parent,
      classesModal,
      classesTransitionLayer,
      classesBackdrop,
      modalStore,
      onBackdropInteractionBegin,
      onBackdropInteractionEnd,
      onClose,
      onConfirm,
      onPromptSubmit,
      onKeyDown,
      components,
      position,
      background,
      width,
      height,
      padding,
      spacing,
      rounded,
      shadow,
      zIndex,
      regionBackdrop,
      cPosition,
      touchstart_handler,
      touchend_handler,
      onwindowresize,
      input_input_handler,
      div_binding,
      div_binding_1
    ];
  }
  class Modal extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$b,
        create_fragment$b,
        safe_not_equal,
        {
          components: 30,
          position: 31,
          background: 32,
          width: 33,
          height: 34,
          padding: 35,
          spacing: 36,
          rounded: 37,
          shadow: 38,
          zIndex: 39,
          buttonNeutral: 3,
          buttonPositive: 4,
          buttonTextCancel: 0,
          buttonTextConfirm: 1,
          buttonTextSubmit: 2,
          regionBackdrop: 40,
          regionHeader: 5,
          regionBody: 6,
          regionFooter: 7,
          transitions: 8,
          transitionIn: 9,
          transitionInParams: 10,
          transitionOut: 11,
          transitionOutParams: 12
        },
        null,
        [-1, -1]
      );
    }
  }
  const creditCode = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxMAAAsTAQCanBgAADzWSURBVHhe7Z0HnBRF9sdrMyxZoiCegKCCOZ3xzKcCgp56CoqKohj+6pmznBGMGM+cQDALBgwneuZ4nieGU5KKIoqAIrCEDf1/3zddQ29vd09P2oD++BQzW93TXV316uWqLvhZUCowv8P8+OOP5uOPPzY9evQwvXr1MoWFhe6RYDiOY2bPnm2+/vprs+WWW5p27dq5R37bWCEwNTU1K6WDfvNYvny5M2LECKd58+bOjjvu6Hz77bfukXB88803zuabb+60aNHCueqqq5xVq1a5R+JB+t79tmZBnms5U7IqQWdrHhYvXmymTZvm/hWNlStXmpkzZxohMOVCcK9UKCkpMT/88INZtmyZqa6uNgUFBe6RaHzxxRdm6dKl7l9rJKqieX0Txi+//GKGDh1qhKOYs846y1RVRc+fsrIy0759eyWOyspK2Ll7JBxrr722ef31182ECRPMyJEjTXFxsXskHOeee67p27ev+b//+79Y92iqWGMJCy4yb9481YNeeOGFlBwINbNbt26qV8G94g567969lYDXWmsttyYatIM2iWqLGuLWrnlYYwmrdevWyoHATz/9ZL777jv9HgYIqmPHjqaoqEg5FmIUAsg1xo4dax588EFz/fXXm/Lycrd2zUOTIiy4CDqNKMluTThatmxpNt54YxVPiMXvv/8+JaF07dpVCYvrw1nywVHatm1rDjvsMLU64+hk6G60Jc4zNyY0GcJCPI0ePdoMGjTIiAWmXCUKDNr+++9vNthgA7PeeuupmEs1kB06dFDCgqDgcg0tqrj/zTffbAYPHmzGjRuXUk9sVJDGL5OZ3OghHMfZZpttYDmO6DXOl19+6R4JhwyEI7PdmTNnjn5PhX/9619Oq1at9B4nn3yyuiDiQvrR/ZY7VFRUOMJFtT177723s2TJEvdI44b0xZImw7FQjvv166cc5auvvjJTp05VMREFzu3UqZPp3r27fk8FxJQ9LxXH4t633Xab2XrrrVVfSsVBM0GzZs3MlVdeaf70pz+Z4cOHm+bNm7tHmgCaCscC77//vtOmTRudwZtuuqkjg+8eiQYz/7PPPnNk8N2aYMyePdvp3LmzXn+PPfZwfv31V/dIXcyfP9/Zbrvt9Ny+ffsqV4xC3DYEAU4lhOz+1fjRpDiWtNdstdVWZt9999W/P/30UzNlyhT9ngrXXHON2XHHHdWHFAUh2mRYZtGiRZEcCwcnliOAy6XyYV133XXahlGjRrk18dGiRYuU4aVGh8bAscTaiz0jZ8yYoSEUabrqWmLxuUfCIaJEzxcCcObNm+fW1gXtsHrcH/7wh0iO+MUXXzg9evTQc//4xz86QojukbrgulZXEmPCrQ0HoaFrr73WkYngiBUcW3+jD9PRC/OFRsGx3nvvPXPUUUeZ++67L5aesv7665tjjjlGvwuRmXvuuUe/R0EGXj/Ri15++WX9HgS87zvttJN+h3NFcSFcHzhhgYjPSP1HjAJ1kwARsfoZhaefflq565gxY8xTTz0Vyy1BKOqGG25QVwb6Z4OjoTnWgQce6EjHafD3zTffdGuj8c477ziiaMfiFkBEpiNEo+eLEhzKHeEMIt6cCy+8UC3EKC767rvvOq1bt9ZrCqG7tcE47rjj9DzKs88+69YGg/tvttlmei5t5j5xMHPmTGejjTbSvtxnn30y0uVyhUbBsbB40FGYccOGDdMwTCrgm8IaYyb/73//M//+97/dI8HgfOl09XSjR4VxAOrx2F922WVm1113jeQUePJFIdfv1sMfBvxjOGy32GILs+2227q1wXj44YfNl19+qd+HDBlixEjR76lAG0jd6dmzp+qhcazgvKKhORbWkrDv5Iw++OCDI60xi0cffVR1LazEl156ya0NBj6s//znP8ot0tFZoiDErHqTEIxytygsXLjQefHFF9UqTKVL3nXXXcq9hRidV155Ja22LliwQP176HQNCThWAYQlM7NBg1b//e9/zX777adcoFWrVkaIxuy99956LIxr4IV+5plnVNfBw17fPh70tY8++kitVThFrjgEz/PEE08ohxswYECsjInGBumTpQ3OsZiRzOKLLrrIKSkpUa5Fot3PP//snpFbYOkxo9PhBL8jPcCxGlzHgiPhozn99NONKPJah2ed2GBcEGT+8MMPk7E0eTb99IPcKeJuf//732OnxdQnPvnkkzUnAbChOZYX0qnO3/72N+eBBx5QX04criImv3PEEUeolYjfB+4X9jtSj+WRndLSUmfatGlubV288MILzvHHH+98+umnbk1dfPzxx3rOk08+6dZkDtorBoM+A5xbJpV7JByiPqi1+fLLL6fU2+obcKx6JSzcAjgWGRQGdvr06UlXgZ8Y+NtfFwQcntapKRaRI1aie6QurrvuOj2Pcs0117i1tcEg9evXT88R68qtrYujjz5az0HRZkJkA4wL3CZcb+DAgSmDzfRfly5d9Pw999yzjrGDGuHtZxR6FPv6Qr0RFlzl/vvvVw/4euutp51CWX/99bVu/Pjxah1mAjgbXE6UXC1XXHFF6KIGvPbWn7XTTju5tbUBMW+88cZ6Dt73MO7x8MMPKzFw7ziZE6mAxSgi2nn77bcjORA6IgQv6oOW8847L9lGnnvixIka5yQqYPuZCcfz3n333VlPgjioF8KCqE488UQ1yxmsoIKjcezYsaEEkQrMTBuchtuEKf4MWJ8+ffQ8wjuk4gRh11131XNoc1AICOLDAYkzkxAKf+cCccT/PffcoxOI9jEx4UwAg+Tss89OOm2DCu6ZSy+9NJaozQb1QljEvNBpmF277LKLM2HCBEcUbc1UuOOOO3TWYw3SWRCXv2MhTEQmeVVRIH/KdiDXCcMJJ5yQPI+2BAHvPMchrKBlYLkiJIAYw7cWR0/6/PPP1b9F2+C89957r3vEce68804VyxzDqkZPxdf2wQcf6HnUWW6NHpdPz3zeCeutt97SGSSWn3POOedoqokfyP4zzzxTCYuO8TobETFXX321cpn99tsvMjUFztKtWzftOJTgr7/+2j1SGyjbEDrnocwHEQmDwbH77rsvp0TkB4P717/+VScXYaooMLG22morbTflggsuSIpgOHb79u21HukQxGXh4qNGjdJnp6+feeYZ90jukXfC2n///fVhIYoovxQEs+WWW+q5WHh2MGHvgwYN0npEFwp31ExD3+BcyujRo93a2hCT3llnnXX0HJT+oDgj3AOdLxe6UxQgcjg5bbnkkkvc2mCghNv46IABA2q121q7iPCojAw44/bbb6/nDh48OG8iMa+EhQhBcYT9ouhaYqFDCFs8+OCDSUWSY6eddprOJBL46ACLJ554wmnXrp12BmIgKigL6+/YsaOeS/JdkBjj2tYC6969u5rtuQTPgni76aabnIsvvtj57rvv3CO1AQFsuOGG2g7SoVHao4D+dfvtt2vA25uWzb1IxaHvUC3sZCCdCIMJkYiVafsfAkb1IGAdxtWzhdwrf4SFlcMMo7z66qturePceuutTrNmzVTZJhZmgV4EEdLZX331lVubEBdXXnmlDgAF300YUKSJO8IFYPnoUH7dhQEaMmRIMqMCrmE7PR0Q+8O1EfRbYpLoZ3BZxGmQ/mSfl2fCH5Yqj8rex3+tuXPn6gTmfvjfLCAqng+F3VuP8k99r169Yq0byAQQVt487zbGJ/eBePU7YMMNmV0aE/RuoiEzzf1WG5x7xhlnmIMOOkhz0v/85z+7R+qCHHEbNxQCMo899phmTXjBsvjttttOc684hrc77N5heOihh7Q95JHZLFIvyEiQCaLrFMmqEEJ3jyRApECIT6ML9ANtpu1BIDfrueeeS7bRfy3bz/SxEJ1+B6xMsv3sXUyb7rNmDGlQxhwLvQmrLQhE9FG6mbU4Jr26EfqC15GJrB82bJhyGnSAIH2MGY0Ca2duGGjPzjvvrJyA602ePNk9shrc34pXIdRY2RReYFDAdfEVhek0tCNsYxE4NeKP+2OtBel5cNbLL79cuRoqQFiuGn2HaIcD+732WJFED+gzCmOAcs+YbLHFFrVUDgvOoz+ycajKNTIXhVgiuA8OPfTQ0Ie2IgxHY5QO8c9//jO5iIFdW3i4bADRwu65HjqbX8xgFDCgHIfArC8oLvBfCTdUq9fqNOlg6NChem+K12XgBVaiTWfu1KlTpG6JbsV5iET6Mgy011rOGDpBbcdyx92CQzVu4qUfWREWpisNhCvgUkCx9DeUAcSJx3kQznvvveceWQ3ypNZdd12dcXRgutwjDFhO3Jfr4o32gyxRe/y2225za+MD4s9kAjAhbRYHHC/MMkNXpG2c95e//CVSB+Ma1qpGd33ttdfcI6vB5EHJ55pw2zDnMD5G67o49dRT3dr0kBVhwWZRtLFGaASNxfloRZztdIKkmPc8EIo8pjFugzFjxqgSDavnGGIzlWWUDlCurbd/9913rxN/gwMgEuzABSGKG2XCqRBvpGJzT4jr8ccfd4/UhSUULNco6832M8+DQk5fMtFF/1PuT0HNKC8v1+sxib3KvB+I9iOPPFJVklS+tTBkRVhg1qxZGiuzDkcKK2fGjRuXtF6Q6zg9Ca7C3ex53oJPhZkSZD1lAjobcxuuRUfjR/MTFoNswzvMUL+uRGQAfQQrystVaCOW3imnnJK2CBVFPKlbsbI5ijvDdYh7wtHjgHZBCGJUJCe7vxBj5JxU/YwbKM7qpzBkRVgMHgUWjb6BGLMPwEJOq4Db8xhYTHs8zdtuu62zww476KyaNGmSPgjn5Ar2WiwwIPCK+yLo+taxSPHOYgiJFGk4GlyZkJIFDlbEOoOHcg2BesHAMeH89+OaPDuEznW9ky8I/N5/7ShwPoW+xKuONGAc6OfDDz9cU7m9/qx8Qu6RHcfygswBvOTIcYKhYbpDYwLOQ8tF4by20xkAVrpQj0IM97J46qmnkusa0UHQIy2YONQj+ukPLyBIxBDHcd6y6npNBYSVMz8W6/3YEQWfCxmaIh61njVud955p5HB0r8bAiKOjYgUXYfoxSabbKJ7OwAhnqRPCh8XPighOv2tTBKtB8uWLUtmqLL6hnOA6Fzm1ltv1e8iVutkggrRJffoEp3OiKWs3+sTCxcuNP/4xz/Uh5Z35Ipj2dnuBWwZ5RPFHo97QwGzGW6BCEM8WmAZ2cAuFhoGCeBZTj/9dBV3KL1wKft8N998sz4Pv7nhhhuSSjz6ls08QPx4fXH49KzrAA7pbUN9ggwI2o5Rw8a8+UJOOZboDu631aBOxIYWy8HSBVxERJaZOHFich1fupBO1PWKcBUv58Tzzzo82sl36XSt52/pfOVG1Nl6AAezx+E6lmNNmzZNPd88p+hSetxCLDYjirpywvPOO083XWsIcH/WVvKsoue5tflB3pd/CRfQDTZYrAmBEUZ59dVXVQSxbIpBigJiVPQfHdzJkyfrAtd0wY54hEZE/9Ml9JYYAEvPWGQh5nWtZVxz5swxzz//vIpElqLRdgCBIu7FpDeih2nIBPCMr7zyihIQCza8i1h5ZlQCjrGki9BUQ4BJxZI1Fu1uttlmbm3uIUwr3vKvVOZpOsCRinkv+k2sICieZEx0RBnOxUwR5ndCxIUdoz7o2cPqo67FsVz2Y0PBa6yEQZ41tShkI1Z2BmbZuVeJzRTsBcoMRrn1K7hB2GuvvXRp10svvaTB3UwRxvrhmGHHqPdyN4uw+qhrcSzoN00BGCMywZVzY6RhAAj9uEdDkIpj4c+R0yI3ImM2xgWBz4ceekgDsXGoPwjc77dUGhKkPBET9ubS9+/fP9LHJm1O7cciRIMjU/SNJJvHYUhiHp7hTKLgiIRMO4zf8fvfUmlIEKYTTpskKpyuXr9eECCsSOVdzqmjXFN34oknmrvuukutIPKNjjjiCM0pItcKq8j/m7hAuUXZR/ENe0kS96f8lhAmQul/Xs8iUkDfduE1GDIBfi728kL1wcfHfTFszj//fLUoMaLYyYY8ryjI+GS2dwMhHGKCXMMWUmPI7iQ9OFOwrg6Wy7VZphQketc0jhXnecLAWgF8ZkQCiAJwrTgIO48FL/ju8O15Y4Xki5EqBOLcQ87JzI8Fd3rzzTd11znMboCviN312LFu7ty5WpcuRNQq18JDfvnll5vDDz9clf01DdL37rfa39MFv8WFQDQgHcMKicJvRcetdf+uXbvqGODn8nJJ/rbjHFsaCXVl7HmHeslKIDYIl8FLjXfbG7TFAw21x6F0YnRwPa+iiEwn9cbmI3GdoFm9JpcwcIwsCBZuBGWDekG/UcjiQCE/5JBDNCrCekw7Nnzi3onzSr0oyHVyG4QmDZjovm0oYQNyobAsUy04tWDZFYl5drtECnlchE+4LsXf8WtyCfOLxYEdB0BYiUxTxsOuGqeQiMl9cgm5b+4Iyw66Fyz7ovFYFXGT+LgGnQmns2sKKaxRpJ7j/s7PZeEeQfUNUWhLNoQFcOmMGzdOtx4gXVtEmfYnn7vttlvGyXxRkDHK745+ONZ4Lx8ymh2ACWWgCxBWwAIhrIBcD7N6iBPy9gfOP+WUU3SfdGl3VnpJKnDt2HpEPYD20D/ptgldVcSkZlywU7QQqF6DscDJecIJJ2hMk9hhriFtzv+OfswYrzONhDoi/cweXnvLnlbkKsGJwkAWqkW6HCtzDiS/q1klpTLgWP2WqL4Jw4033phMzabwna2Xpk6dqmIxn5D21rUKpdLMnz/f/St74P9gLZ8Ff2PJENYhAMwbGwjbXHLJJWrdAGmbflqk8ptEISvuY4elnuB/7mxAaAkuxSf7u+KPuuWWW4zoWLFf2ulHUPuQPGR81IEQUpJjsfSH/HCsO5TnkSNHqnwmryqXIJzDEiiyM2Xg7fApJwtaB+hFuhwru8K96u9+Ydw1DFjK+JuCOBpGEH3JHveZ7j0WBO7JIhCW+rM2EQuexReso7SAY9UiLHLD7W52tuAwI7aXa9BAQgM4Re0eBhQWMEShfgmrcRQ/ICYWZrCmkxhuPhRwwBiRwOhVRQjtwXi8NMKCWetABXUIi4dgcQPuAbuAlJJqH/VsgP6FW+L888/XZUreFdJwNlH+nTfeeMOt+Z2wRKSpNUcqEdY240O2az7A/hIiNtUjb4HfUsSr3pdjLGfzv8WjDmF5gVh87rnnMl4NmwvYvUVpvMVvnbDsNpYU0VdVZWGFcz7AUjLuwzI5LyAumE2YbxLCKho1atQFoues1q5dkDFJMHLdddd1a+ofdvHBWWedpQHu+gDKfqYlX/BeG2WcV+rheqFfLr74Yg1A5+P+bCxCYJut0vlusfbaa2tKt82qDcCqenszxbfffmtEXus7cPClACFu/QzrFHxeIir1Aayvi9/Y32UK+2vvXblmJv4iP6Q/3W+5g9fPhwVG/JQ+pF/CEgu94NlEnVCfIT6suOB33A+rPp1+kd8trRfCEr1JXQoEp8l1J/cc5xyvhyOXPc1Ga4kDrht0rpiiUmTAalYf41wyVVmmhSPXO2Ac81/L2w7Meghq+PDhOptzTVxewvKC+8fpO17/izuHxR/k66dDXJlA2rU0uMU5Bg9vBwofGbPniiuu0L2pbMcsWLDAvP322xlnRgTBSwheFDAgvmO0A9FL+8hx+uyzz8z06dM1a4M2UViUAbfgO2/P4DhiyZ5HpCGX8BJvEGzf0Sbe++hdgeSFPY9P+z3fqBeOxQxGDLIRGoslCdEgEh9//HGzzjrraIeMGDHCvPjii7qChNxqVuPwySoZL1J1dqagwy2h3HTTTZpSUlpSagqLCk1hgZRCGRQpYjvo89AGUaz1O8mNJD+i93Tr1i1nHMs+pxXR/G0Jg1VB9BeFkA0hHPqQCetdrgZ4lhdeeEH7mpVIYRwwV5B21o8o9IJOZ3azitgunWLGsWTK/95BiIz3+9FhiE5A59oOzyUYMJZ2jRs3TnfsIwpguaxTzf3kvgWO1BXrM9iBBhDWcccdZ0aOHKmRhVwRloWXEPCe83Ywoha//PKLW5vALrvsom9Es/3aUICw6kUUekEnYeF5Hx69i2X5EBAWjg0BEYRmdQ5rAusDtA2FGEsIwiGURCkpKzGlzcrke4mGQyAerXfbybNQ5yW2fIFkStZlWqKiDeisRx99tK6kykdQORPUO8cKA7McKxCxyMphcq9ZAAo3YJb+0X2vcz45FiutH3roYfPIow+br0WHKi0tc48m2oeIsZmacDPqsFoRfyeddJI54IADIsWMbTf3Sgfea7IqnMxdOD5xP3LQt9lmGyWodA2hfAGOpYQlnKH8wgsvVKUUC4IFEoAAI0vH6RAsJWYlM4TBZmbzcPl8EKwt7m05A+BvO0C5BgM4ZcpzZuzY682cb78xRYWY2QlCIGi+1VZbqdKOmKTO1tNfo0aNUr0xCrbd6faZn1jRr0gVziY4nwq01bYTyYFhw8TjO/dFV7Ppyh988IG59NJL1beF5BFaSaTNkPpLiEAupPtJ4e0lIMrWPgQZOcb+6WzPw65xbMPDjm9kevo9w4AwDd5gPPd4aYVg1WOeCnHPsR7pXBeuzersQYMGO336bKDP2r37OhrL5JlZvY2neyP5m33S+/btp3t6EoTlGUHQdbMpjEOcfkkF0pdYqkcCZdj1OM7e9GzvJJxZ60hAYMdDxp4QDuk3ZKCSDm1jiKSmC7E5a6+9ti6mkesnQjqswmBzLgKadscVHoj9x4XlM80CC7sTB2U+EOPjJrYRNIo1iF6Qo024iMal03GcGzQAuShcm8Ar+6uutVZ7JZ6BA/dTwiI9muwLCIy3aXXp3MVp224tp43UswEbgeGga+aiZAN2BCT2y9oB0cU0yYB9vILAjkAiHXQLBLs9JWEb/vaPPVt9WsIiCG430oOWIKxIHQufDoozPh18NBSheGX/cj3N6kTh9rNqdobBWYj+YYHoxA/Ep9xT91qHhY4ePVp1BsC1zznnHDX7cTNgFaIsH3roocp6Afel5AOwfgrPjIXYv/8AEcPF5pJLLhXrdBszc+YsscgeN7379DEbbriBaVHeQp2OGB/sP+91qoaBtlsRExfe/sVtgO6J8o5IZIwIt+Bm6N69u3vWatAuDCAvcOWQXeoHm6CQWUoYD1eQ3TsMp/H999+fHA+2OmCPLxtB8UOeMX4GKRyMvB5YKWyfV3kwwyl+2MR99ulk91/y1WGvdvbxG1ItpMOU8i14vQnt8hdmnAW/9c/oXBauz7ORUcGMRKwjIsjLYoXLpElP6r5anEtfIO6pz2e7vPCnNdkiBo57Rm3Qv0Igym0JYLM6x/umEC+4F/vCs0rHP66IRmjAC/85FlKfu8UUftAI5DoJYIhLf6NYbEmaLMdsA8moYBWJcLVanebdtI1z/R2f68I9yBVj52UL2g/BkdYDwTHJSKJjEzXOz2e7vDj22GNr9Q3qBmLIvzWlBWPAtpSoHkwExsO2N1+Qa+d3MUVcSFuS4kE6Utk7bgdEJ+IFJ6m1gDiXkm8gfnDYYgnh6uCeDzwwzgwdOkSPsfWkjfJ7258PeEUhHnYWC+M769Kli4on1IZ07p/v9sr169/zni3oFEoYctlpDCjuBfZGwJWAzgjBE/bBKUm2QD4HyMJLWE0BayRh5RLch0HFyBArSTmY6Clmzz33VG5VX+34nbBiQHQVLcx+0VWSn3i0bYHd45wV/UstUbZXJNQD6pOwLMfCInrkkUe0TbRj6NCh5sADD8x4tUu68BIWFiEE3rlzZxWHhJ9wVOJExvNundh84tSuD47qR84JC4Ih/QXPNCID/YTBgDggFnQmvmMm48H1EhMuDM6H0IjG84m+RcHdQGAY1Cdh4WYhc4ClU7SfZyNhEZcJbcLVEie3ifZmM8BewmKRL9EQdE8KBARBEQ0hrMMr9ajjk3DPmWeemdRP6XtcOUQQvBkQjBt9znPlghCThCXfy1NdMFXnQCxnn322+kzgNBAEv5HrJ9NL7Cf1lLi45pprtINAur/NBDznO++8o23Ff0a7AUSF4swxJsbAgQPNzjvvrMTFuUH9Y9uazYB5CYsdeCZMmOD+FQ2IDX2QFHPAPmZPPfWUxjUJ3QEmMz5H6zvEF0Z6DRyR52Iz4HQD2/LMCcKSL+XsEmw38YJImJ1QOE5Lsj+HDBlSi8r9INGMLYzgVn7QqcwuZg7FsmquR6P5zmwh9oiVA3u3qbcoydzfxgvzTVi0FQIitYedlO1sDwJcmb05xdxXCy1f7fISFuNBFqiVAvxtvzNu9L/l+JtvvrmKcUQm4HnQF8lzmzJlitaRgsNLPYPAfSFGlukzTkiWcePGaUYw3JoYKf2FtIF24JI4a6UuQViffPJJOWkX/IAf2xlqgUlNQzbccEO3pi4gyAsuuECzQvHYQiA8ELMAIkHeU4c+YIkKwuFvGkRhhkGA3o70I5+EZbkKxIKLgfYG3cuexycDChfbbbfd9Lks+J09L134fxvVHwBuafVWOBAF4iIqQL9aoJuRZLnrrrsmuRjjduqpp5qPP/44SZzQgAWrqImktGzZUrkfHBqvP4s4GG/G7I477lAOSJYH2RfC6RKed2J7BJrlOoGFhZE416Ig11HnGzEzmcn6nbibNFIdikKssZ1yUedxjGvlo3DtefPm6Tq5uPcBeLL5XdDxTIoQiRb7t0Xc/guDfSY/GCvGl4iKcDR9EwfbphPfxfFq7yuEp0vx8OITcbDXsjsBeoPQyrHkIcqR21A04oiCOQ17t7JWfp/xDEwXzD5mDso+XBRRg9wHtIOSD/B8KOtwUmKZce4DN0HJ5zeIAelP90jmsPe1/W05FvUo7l9++aXp16+fSgPUBrh8fQKOhQSiPbSRlJq7775b9TN0QOFi9e9uSAX0luuvv15zuWUGKatGzrOZLuBh4gx4phg/frym+CJG4tyHQaed6GSIz3xMPq8oRE/C68+EZ7IdfPDBmm/vFcMNDem3+k9NToVZs2bpBvVYXhgU6A1ePSFfgCCw9CBsBi0dwDHgriIa3Jr8gb6gTzAw6CN2NIZjeAGhc05Dot4IC2sFpTIVYO2kZcBW4QBXXXWVZidmg7gcDhYPkaRDyFwbyxGCRAzmg2N5wUZ0p512mvqiSG+BuyKWAAo71nufPn00BMUCj4cffjjQUs838ioK4QDobTgY+cRkJXUV/SAMDBQzEB0LPc8fYOV4XEJJB9yDJWoUcte99wi6n7dNDByWJA5JrN1cty/IKsTFgJqABU4fcQ7EjW7IXvkW9DmWGvlT9jo2Lw5LLx+Q58/Pjn7PPvus7p9ExiLWJlmJ3E8erNY7/jKBtDdpLeWycF32SSUtJl3wW3aBsa/sDbp+NiUuuDdWGTlXZLzS56J76V6wtl2kILEnP3u5X3LJJWoBC6dzr5C95QnkGrlPm2EpN1zJC2YKMwSF+MYbb1Sfj3fG+yFtc7/V5gyAY97juQJtnPTkk+app59WHw/3QCxyf45R+C69ZqTrTZVTY5xqKfwtBb2G/VZ5owN/5xLcG9Am2sD1bV0YSD1ipRN+Jl5/h3iHs7I+EwerF1izOLeJydpzgb2f/YwLOX9p6G4zFuledNKkSeqF5zc4VskEOOqoozSNmbRXYl12kMLAMQpeYgiRB0f3yivkfhXLl5v5IiYYDPQm66y17bFt5rOQIsdsQWzjPIyKTsSFv8+998UdIlxfnZhMAO4dBCYymRh4x23UgmfCIY3IpBB6A+iWOE4J96CmWFUFAwDXBvflemlgVSxRiJMTJ+B0z4sBwoCz7d5779WEfTJCyRDFQZoJeOsUjjc2ZbWQ9tYRFbkqlSKiEQs8byYlX23zYtttt9UFLjLQzuDBg9Wh6T8nCqghQlS6eyNikRU4pC4LMWjhhQQWvKZYJrTuBX/SSSfpixzijKX0Q+3UZDpGFG71wHr1IGS0zETVl0hzzTW4ryiUqqMwQBZ0XIcOHXQZmkW+Bs8W//X52xZvfapjuSxeDBw4UPUmSwiinCtxsHUkfWjbkw7EEHBIw2ZFjxd42e19KBD0+PHj3aMJiAFRZ6WW3L82YYkl5owYMUIVu0cffdStdXQzU3KrcdnbZUG5BB3CggmUfdY1WpDUzxIxOJ9FPgeRyRRU39DFC/Lu77vvPkdUjFqve2N8WOI1evTorF9ZYgE3ZEnXpptuqoyFezzyyCPuUUdz/uGgbKlO+M6iDmFhEYk+ow0dMmSI1jGQFRUVujUgaw75O9dgA1XW6nFf1jdGIZ+E1ViLH0wA4nZMeAZddKAkgYl+qGsfWSic7VjZsSf+i/WImPRakMSQuScLe2FKFvK72ltFEhbAmkBpJeJt37aO8oci7vcpZQIi6Dj5ePk2KTH4UlAMpT2qoLP9ITHK37Ea/j5HYWesyGY97LDDNGcMZRwl3Gbd4mAmxspYZgruy9hjkGBAYdVjAFiQ80/KNpYmhovn2OqtIhlYYNOEbQ5PrsHiR2J/WBy8b5pYFw/A/WV21mp4EDjPtvW3gjDLzwsIi9QX8qvI2uWllVtssUXWjCAMjAHXxoUBkXvHTY7VfxAaz/agQYN0ZrHiONVGGn40NsKyHZwO0v1NHMKygCkwQeEy3CPoPpm0OR3I9es/CE2yIHt9UtIlqsaKdAk900HFz4QD9thjj03uAuQH3IMwDsQYdR8kBqEz4ovptj8OckpYiNE4jUTM4lBcExDGFfIBUonI4iT3Ca7Pe4jQWdMF7RXLUrND2b4qL0AUCjFkDRyivDHhjDPOCLRkcgUsFWsteb83tKsgn/e3IJuTHXBk2LTgzyImi1M6XfTv31+vgaPVe49cQMYlu70bcGby4vF99tkn+bAUNpbIBOxNxbt0uGaYhzcXxNSYCDJO8YINSXBcQhC2v/E74nNKB7zejxeN3nPPPW6No+nVV111lboW6JdMkTVhsSEGr8OwD4iX/IQTTtCQQSYgbMB18M3gOwmClygaY8kHofpBfjoSgk3gbN/jU6Jv4oJz8Ul5f8M7ebgWu9KkWuMQBblm/LfYy/nut9XAB0V+PCBjgb2bSCumPgpcK+h6LEvCl8UqEpTQ3xEMEvv2339/8+ijj2pWAjor+2Clo+txLn3s/Q3LxQBrHGzgOlOkdDfIDNQ0WJyjQQSDQ5WEM6w9sgLiAKLCGmHPd3wuhxxySHITL/6mo8KuFUaUDQ3bJjtQfOaqnVHuBtwLJFTaTdKyBYtXWMZFFoQfrGEkAZPjUVkc8typE/2IgKMw8to3bzwoWxByIHJOO3jNbDqAfTe24hVdYfX+Y0El6LzGAFQTm7zJsrAoHUzanFoUwm6hYkxdZke2kPvqJ9yPBaGAUEE6gBs0tgJXsSWs3n8sqASdFwekFlaLupX4lH6m0gfq7HE+00lHhFPxShrys1B5kGRRSCkKyVVnn1A2wSAXPFXIJQy8fYIYFkRkCYpl2YQEWDyRLeQ5VCQgRjNtY2MGkQry6nnO/v37qxPUC1EQEp+Vy82qioVm1YpfTOWyn0xNNe9rdkxRSUtT2rKDKW3W1hRLKShupr8REtbfpQIOVfxn7FNKuAjdLgzCPOKFdHB8MlhxZ48XNAiud/PNN2vAkpUjOOVyqZzDBdlfgA1Zhw8froFZL3Ghz/GKEN6I4V/ahY6I0xGPNnqkBdz5/fffV+OELEwL6lnXhw7iXxTCwlUIgBid1RFpG/02Y8YM3eOA32QSGGZBMesHuRbxVl4e4MWqigXmp88nm4q575jlC6YbZ+UvcnN4E0LJ5V8Fxaa4RWdTttb6plXPvUz73nuZ4tL0FlTw/KnGDsKKZRVmSlSA1OKTTz5ZB4lBZDdiZl0csHSJVGcIOwoQ77XXXqs7AU+ePLmOyIZw2M8KTzOeaiuOAS9k4hhhEq8Xm5Ut1BMk9656oT1wbgoEZkG2BlYt9exhZe9BvxEfJUUbTsNayUxgNx0hH71lqwQx2FWMi2a9Yr58/Ejz/WuXmyVfv2mcFUuED5WYgsIyEavFUkq0SGNM5dIfzOJZU82cF880s6acZpb+9IWSHYINDpbgfKv7xwvuH5chxCKsdIlKlE/lEOxiwtZGpHMwS1kDx5q4OOv2kOeskeMabLoRBR6W+/DqD5Y5+R+eTSsQxeTQs8DAPg8ZAeTn0z6OzZw5U+sBxIAVBKeBsCyhsOLZ1vMbO0m4PvVMHF6U5CVuFpYSl2PBBZtneAk7LhA977z9jnle9BsbY61e9qOZPfUCM2PS0WbVohmmtEUHU9SstSkoEm4pBAWHqqpxzMqqai1VMi4FUl/SvI0pLW9rfv1qqvl84gFm3gd3moJVdu2hFap1kQ4dxCKsdEGHQxCwbMDCyquvvlo3T4taU+gFsUQWXtCJ5P2kwvHHH69KJcToFTWIJ3bjA+SUsce5BVs1MdgA0WYXbKCYwr0gGnLFEIe2U2mXFbMQkiUsBt6KUjiWl/vRF4haQKoQ7wrKBP027mc2ZzFKQaFZsWSucJxTzC+fPiL6luiVQlAgQbSJUlW5zJS27Wm6/+l8s96frzRt199XdC72KBMCk39l5e1N85JCM+/ta8yc10ebmiomA8+ZHiMJQl4Ii8FEMech2V8AgmKVTtzAM78jsYwVKWyfxMreVMCSYutGv9geM2aMcibAu429m94jmuE0AOK3viAIC0OAdthENwsIzV4fw8MSFsRvX3LAJmb0gQUGBaIWoO8hZjPhWoBfVS5faGZPOdlUfPu+KS5ra5zCZkoo/EMZr5GzqqtXiKgsNt33uMx02vSvpkOfAWa93S4wrXvsaqqEO+lbZrleYbkpKW1tFnw03nzz2hVSw++zR04IC7bP4NnOQuQhkthzi1egkcnIgHMOBIf7goJYsYPu7Wg7cHAQ69nPBIgg+0o6xCQ7oXgBZ4WAADvXWRGNTod4pE2IVa8FBvFCxIBzLGHRZvQrQB2rv71A/4IDcy0v4acLp3ql+fbN64Wo3jMl5WvJjWsPIb3I1WsqV5hW62xjWnfpZ37874Pm8ydHCrdaaTpscqj8pLm00aO3FhSJGG1nFvz7djP/v+NMgXC0bJE1YeGOgIAYNPQqBoOQACyfHWJIb0bn4u2qpLDaRZEsR+c7BIhC7PeLeDvfPxCcm8oIgNjZXAQrDQsNa9QfOfC+CgTl2oLfYsEBfuvV2XCVWMLCt+NtA8q5nQgYEd7JgkVKqgrqwUUXXZQWcSlnSXw1i4Wgfv7iGVPaMvFOxdVHErBXdZwaIbz2xhECWv7jf8yCjx80i6Y/b5p37Guate8hs2eFnGt/K5ar6F7NW3U0c9/9h1m+aLZb6796fGRFWKyoxb+F9YbCyiy1HY34YAAYJNwLI0aMUB0IpRjLCG6FuMCa4hjbB0Ew3sEIA0SK7sW+pGHnoyxjidIe8r/RrfxmvrXQEGPepEMmgrVE+Y03bublOP4kOTis3d3Z7mNlwXVwQ8C54uiMXnifcP7HE02BU2lqCspEZAUTJ+o377wuKipTAnOkD0plclQvX2AKy1qK+GxjatQVsRrco1rEorNqsfl55vNKkNkgY8JC/yEQyrZDDB6ciY6zs9mCWYrLAWWW3WPwN+EW4PfsJINegkhhw1V0jzgzGQJFN2J/TfScIEDoWG4An49dGOIFjj7ENi4HL/F4OZaa9x5OB0ey23AT1/RzTd4LDahHiQ8C4p+Vx8Rg48D2yK/zPjSLv3rVFJag8wnxJKp9gERExxLCKm3dVURnlalZ9av0a6EQS5VwJplcxeWmGiuxcqXUJQiMa2kpKjE/f/mcqVqxOFmXCVIusQ8D3Am2DmfCEhs7dqzOei9hocMMHz5cOxJfFk5SBhnvO6KBQSATEuLgXAaCzAY4TBT4PVYcyjhWpp8Y8WsdeeSRKqpoH2LZq6tZLoOlRgAcz7/3GhAZ+7tjMSLiyRywz8X14KxMKByxPIOXE/KdfqENXAdR7+eUqAhwaYgfP5nfix4EWvzjh3eYiu8+EI7TWgacfxC1o9ZctViANdWr5PsKU7VymSnvurVZZ4dTVdea/5/7jVNVYYqEU7Xtubtp3W1r0w7naMsupmL+Z/qbQghOrojFWbl0vilbq6cp75Sw4DMgrtWrdNyK2GBWw2Gw9EiZCcp8QKdCbMH+2SA1bMN9PPJwP1aZoK8ROojiXBCGHTg/hwRwSPxlnAeBwTWjrucHv0PMwUlps1fH4hhiEg6Mtef3meELQ3fEMoRgibH6l7OhGvAaOODdajwMENVKEWPTHx1qqhfPMUWldgWVcB2x8ApL25jmbbooR0KZb9ahr+m8zfGmebse5vuPJph5b44xJcVFprKmwHTa+gTTfoOBpqxNV1Mo5y+Y8az5+oVzTVmpcMHCRLRg1bIFpnXvP5veg+7Qe6cr1qSPMl9MQYeiEOPNDiIqRNVbb72lyu+wYcOSm4NhhUFkzGq7ERscCJHEzGaRBTHFKEAk3D+IqOAyiFgIAPcBg+gnKtqAbgeXDPLqcz4ikEnjJxyO8UxwQP8xgJ5ldSivn8wLDAWblkKohvOiQOsrF8811UvnSh+tTieCQzXr+kfT+6CJZoMhk80GQ5/Rsu6eo01hcXOxBseZH96+NsExC4pNUYFjfnjrWjN9Yn/zxcRBpmLRLNNxwwNEod9IRPdq46mwuMRULf5Kro+CnxkyJqxUYPAgHNg8+TuWCFD08ekgChhYwGBBXLgk4IRxdv7zA0Ki8JZ3dB9wzDHHqH/KC85BbBOuQcx5wzW5AFYjnIpnwU8GF/brYezGh74JmIBej38YVi37yTiiExV4JhNKeefNDjEt2vcyi2b80/z40QMi9u4zc1670syYNMLMff0qUyzEVFhULM9dJdytwrTrtYtp1WUTs+z7j8yyH7DiRbFvs45cbLUyX4jHvmKRqVq+yK1JH3kjLAsG0gvEAoSErhLE6TIF14TTodgjJhFhiGAbDLZAn8O/hShD1FklPVdgAkE4iGl0MZR02uMFInTkyJHqbIUrxnIcJ/vR8hA+xfIrFq4pX38UPeqbqRebb4WoFk0bb1b+MlvaUmCcQmmHcOUVi380HfodaNr3PcAs/1msYRR4wjhCWMWlLTzXF0hfJqKGtccuHeSNsAhvIBYYSILA1k81ePBgdZpCANZTjTjiHD6Z8Tatht/ce++9mjLL3lreMEkQEKOY+QAL1abaeoFCjw8M0Ea7zXeuwETCALHPQJwziAPDMXnZAr40uHVK1BljKshSTXDDwpLmpqRZay2kyJS139CUdugnivxSU1DWzvQYcJMQ1UHmuzeuFm40XwiyNGEh6jXIwNDLJJG4XSMkLHQQRA3EgTLtFTlYj15LjEAwSi4iA8XX6mN0PLsDIk5wTyBaooDVad0PKO92cL1ARFudho3L0t0h2QJxCyHbCWPBM2HV8vJOgGESJtqxjL2pOlEguFwoCrglpNVI9CH3JUyjnyLWSsrbmV4DbzI9B99lNjjwPrEIW5lZz55sKpctNMUlhICE27WQe4uyj9jzOi/4Pek0q42E9JFXUcgGH3AETHPCHXAlP9Av0LfgIhAC/ixLcKNGjUpuNc3udOhqYcBQsJ50fFaIwSAgduBkED7iyOu/Sge4Ogg833LLLW7NatB+tsmmvbzIyRufzATwjZIWHeS/lkm/U11In2m3FahOtfjr183MZ/9m2v5hB1Mx/1Mz+7nTTM2qJeoDSwi5QlNW3onGCrHNl4/VpFBTXWWKytsLcdXNe4+LvO/dQBAZFwLchsHErwWnwLsNR8LHhIhjluPwxM8FFyAcw443gAF64403dIaHAX8UCYVYaoRTCBuFAQ6C3mM5Y7pAdGAUQPToUxghdjJ4wX1Q4i3xBp0TBxAWsb3Zz55olsx8WdSjRBYGvqv1Btxo2vXc00yfdIxZ8t17ci/inRAOBLPQtOy2uan8VSxK0acKSsqlvsY4K381JW16mt5/ud9Urlxs/vfQX00ZUrEQK9cRQ2Gh6bTdiab7jmfpvdPlPtI/+d+7AecifilCKogg/DZwCrIhIR6ICmIiAwLdBLBjCi8BArgMMMmjiAoQZEanY79TXBdRwFLNlKgABGIzIbDqwkQd98F44PwoorIGDiEm/GdBIFGv7fp7m6qaKiUOMhjcI/o/3MhZschUr1go5WdTI9+LigrNsu/e1+Q+p3q5qVm+wFRjXRaVm7V3OMUUCxec/+G9ouRWqJIPOdaI9VjcqrPpsMEgZYCZTYV64Fh0GoVgMHlRcBXEHtYTSiued+KNWEjUsQc53mosN3532WWXmXPOOSelyMJNAQdBZwlaupRrMAkITdFm9KhU0YJUuP3221Wf5FnZfdn7vJaEqqsqzKcPDFACKSJnXYipx363mTY9djPfvD7aLP/hE9HDiA/S5wmvvCUM5WFCPM3ar286bnygad6ut1k04znz1T/PEQJM+AQ5t7JypWn1hx1Nr33HihGQGVnI/RvmXTpYf8xgxIQfODfPO+887Rx8PXjusx20dMG9QRSX4ZVqcFzENMYHEyNToBbwrBgD6GRwb68rhtZQ4E3ff3iP+f6ta01JaQvjVC0z7Tc/yqy9zfEarllNROFwCPmsWGyWzP1AXRNO5ZIEkeoz18jYrDK99rvFtFtvF/mL/K700WCEFQb0Md63jHhEV8IStEHd+gSZFliicA4SDv1gELAKMUYwTkgTyhZwaJzHcHC4oT++aLFSRNmMycea6oWfmQKx3ETNNq26bqOcKEEcQl7JCSGfLpVRhbW3aslcs2LBdP0slIOFbhiHE6ukrnW/Q0yPva7MmFuBRkVYiBP0MBvxv/zyy9WyAlGcIy4QlXfeeafqPYSY/I5TC9wRiGjcFhAWXno/GMA4bUoMdCLDA2OBuGVYvj/n0kbahVgKAyJt0eyXzcwnjjKlzRPLuKoqlwsnWmUcaRLpMom7EqTWHySBO6KosEh+wz0SmbaJs0TRX77QOCWtzSZHTjGlrbomfpshIKy8K+9xgPebmB5xNR6WiD8pLfrgMQYwDnAL4P4499xzNTkxDOSIQVxYpnwGIW6bOA8LlbRsAs24Qyyx+cG5NocNfTTMIEBrWkuswJ4Db9I3ZJCwV1ZSZsqatzTNm7U0zZq3ksJba/mUv8vlU0oZn/J3aVlz4Ybe9O0asRiXmpK2PUyfg+5XovJ7yjJBoyAsMkhJIRbuqdwCIstGZ/EDSws/lw2thA0uwMqziPKbxQX6E4AD0oagoLcXED3qAItDrA/PCxybkFfHjf5ieg64yRQ0byNGnVh6Ul0jYrFGh7RIzqAUu5+I1UThu8vLDKnKlUu+N2UdN5Jr3Whad95UjwQL4fTQ4IRFh+NasLnvOEtxhuYSrKbBlIegcDNEbaDh9e7HCrWkABEGK3bRo8LcCRbkaBHuIgOEpWpMtrpA3NWYdmIN9trvH6a02w5m+a/zVSRCesKOEp8BJcGpakSB/9WsWlFhWvUbYnrvf5dp0amvHOZYbtDghEX+N555wNvqsQijdAzA4OCURGxZjhAFjAFihABlOyroi1UGMWA0RDlZ44IoAIsoAOnYqTgWDlf0QJ4LhzGTwovE0CeIpLqg0LTovJnpd8gjwnFuMM1If6mGaJaqeMOB6lRWmBopfKeucuVS5Wwt19vZbHjQA6b3vteY4uZrCaHmjqgUKO8ykxsM7FwiFpBuM8n7XeKAjfOF6zjdu3d33n//fbc2HMINdbecPfbYw+HVHmGQvtBP0fV0dzv7d7bgdXX77ruvM2bMmFob8AdB9E1n+PDhKu+Ki4udCRMmuEeiUSP/VlUsdJb+MM354ZOJzjf/GuXMnHKCM+PpEVpmP3+KM+eNK52F059zlv30P6dqZWab48WB9Ft2O/rlAnQkb70QURV7IHfYYYeEoiFl6tSpbm00uI9wLt0iqL7Bc0HcYvW5NdFgr1EmG8/32GOPubXR4Klq5H96sKamyqmuWuFUV1Y41auWJYp8r6mS+0tb9Bz33HwAwmpUfqw4YGUQGRAA0YnvK9NAcrawS+rJkCCclEuQWoT4RjSHuUa8gAot+B4m2PzHciwAFUJb+XnDar6wYMGC5L6bLVu2dN599133SDTGjx+v4qgqiw1b/UCknXzyyc66667rDBs2LON9V4MQl3M3VsCxGoW7IS7Ym8ku6SItJs4+ECQKEvQmP9+mLOcCGAS4BrA22YuBGGeusNrHlAAuEH/eV2NHkyEsnIbE0HCm4uMiiTCVrwsLDG87zkb2SQ1zOmYCnJn2/vjHaFeuITNfExYJGRFDtX64poAmQ1gQCcQlnFY5VZwYIu4Iy+FI7gtbfpYJ0HtI4IO7MOCEY3INuBS+L4iW5WRNiWs1GcLCscmsxStPVgFJg36R4QdZB5ZLkQ4Nl8kVMBggLHxuEFYqx2cm4B7kopFJSygqzr5ijQVNhrAgou22207zs3AipiIqHIzsuAeng7vAsVJZj+hNbBHOmsNUhAJBYQnyybn8Ni6wJmkX3DcVcLCSp8V2lameuTGhSSnv6YDBs555uBvp0KkGhjAKcTrep8jOOamAaIWwEIO4HdCJUsFuNYnul0q0NSVC8mONJSxEoOUicZZ5McjsTkPs0pZUIFMVwoJ4SbuOQ1iIczJPCdfk0phobFhjCQsuxSoaRCB5VamWWaEnseAV8USSIfG6VEDvg6vwG/9eWWFgFRLrKVlX2JR0prQhndFkHKTpQjiCviFfntGtCcfixYud3XffXZ2vOD2nTZvmHgnH66+/7gjX0t/wginCRnGAozdueKcpQvq7aTlI0wUcgRSZOLoKy95JC4ZTbb/99roRbiqwKJVd/BCJrDSKE3oBKP1xz22qaHKxwnwDJRyxGbTQIwzkcEXleP3WIExraYEorVVFYZn7v+N3ZABoCo7FZlS58xz+jt9hTMX/A/eR72+RaQ9jAAAAAElFTkSuQmCC";
  const githubMark = `<svg viewBox="0 0 98 96" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z"/></svg>`;
  function create_if_block$7(ctx) {
    let div1;
    let section;
    let t0;
    let div0;
    let a;
    let t1;
    let button;
    let div1_class_value;
    let current;
    let mounted;
    let dispose;
    const default_slot_template = (
      /*#slots*/
      ctx[8].default
    );
    const default_slot = create_slot(
      default_slot_template,
      ctx,
      /*$$scope*/
      ctx[7],
      null
    );
    return {
      c() {
        div1 = element("div");
        section = element("section");
        if (default_slot) default_slot.c();
        t0 = space();
        div0 = element("div");
        a = element("a");
        t1 = space();
        button = element("button");
        button.textContent = "✕";
        attr(section, "class", "overflow-hidden h-full");
        attr(a, "target", "_blank");
        attr(a, "href", "https://github.com/drunkg00se/Pixiv-Downloader");
        attr(a, "class", "w-5 fill-current");
        attr(button, "class", "btn-icon btn-icon-sm bg-transparent font-bold hover:text-xl");
        attr(div0, "class", "absolute top-2 right-2 z-1 select-none flex items-center gap-1");
        attr(div1, "data-theme", "skeleton");
        attr(div1, "class", div1_class_value = "relative rounded-container-token shadow-xl bg-scroll " + /*classes*/
        ctx[1]);
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, section);
        if (default_slot) {
          default_slot.m(section, null);
        }
        append(div1, t0);
        append(div1, div0);
        append(div0, a);
        a.innerHTML = githubMark;
        append(div0, t1);
        append(div0, button);
        current = true;
        if (!mounted) {
          dispose = listen(button, "click", function() {
            if (is_function(
              /*parent*/
              ctx[0].onClose
            )) ctx[0].onClose.apply(this, arguments);
          });
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (default_slot) {
          if (default_slot.p && (!current || dirty & /*$$scope*/
          128)) {
            update_slot_base(
              default_slot,
              default_slot_template,
              ctx,
              /*$$scope*/
              ctx[7],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx[7]
              ) : get_slot_changes(
                default_slot_template,
                /*$$scope*/
                ctx[7],
                dirty,
                null
              ),
              null
            );
          }
        }
        if (!current || dirty & /*classes*/
        2 && div1_class_value !== (div1_class_value = "relative rounded-container-token shadow-xl bg-scroll " + /*classes*/
        ctx[1])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(default_slot, local);
        current = true;
      },
      o(local) {
        transition_out(default_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if (default_slot) default_slot.d(detaching);
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment$a(ctx) {
    let if_block_anchor;
    let current;
    let if_block = (
      /*$modalStore*/
      ctx[2][0] && create_if_block$7(ctx)
    );
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
        current = true;
      },
      p(ctx2, [dirty]) {
        if (
          /*$modalStore*/
          ctx2[2][0]
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*$modalStore*/
            4) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block$7(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) if_block.d(detaching);
      }
    };
  }
  function instance$a($$self, $$props, $$invalidate) {
    let classes;
    let $modalStore;
    let { $$slots: slots = {}, $$scope } = $$props;
    let { parent } = $$props;
    let { padding = "py-6 px-8" } = $$props;
    let { width = "w-full md:max-w-screen-sm lg:max-w-screen-md xl:max-w-screen-lg" } = $$props;
    let { height = "" } = $$props;
    const modalStore = getModalStore();
    component_subscribe($$self, modalStore, (value) => $$invalidate(2, $modalStore = value));
    $$self.$$set = ($$new_props) => {
      $$invalidate(9, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("parent" in $$new_props) $$invalidate(0, parent = $$new_props.parent);
      if ("padding" in $$new_props) $$invalidate(4, padding = $$new_props.padding);
      if ("width" in $$new_props) $$invalidate(5, width = $$new_props.width);
      if ("height" in $$new_props) $$invalidate(6, height = $$new_props.height);
      if ("$$scope" in $$new_props) $$invalidate(7, $$scope = $$new_props.$$scope);
    };
    $$self.$$.update = () => {
      $$invalidate(1, classes = `${padding} ${width} ${height} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [
      parent,
      classes,
      $modalStore,
      modalStore,
      padding,
      width,
      height,
      $$scope,
      slots
    ];
  }
  class ModalWrapper extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$a, create_fragment$a, safe_not_equal, {
        parent: 0,
        padding: 4,
        width: 5,
        height: 6
      });
    }
  }
  function create_default_slot$6(ctx) {
    let header;
    let t2;
    let article;
    let t12;
    let footer;
    let div0;
    let button;
    let t13_value = t("changelog.credit") + "";
    let t13;
    let t14;
    let a0;
    let t15_value = t("changelog.feedback") + "";
    let t15;
    let t16;
    let div2;
    let div1;
    let img;
    let img_src_value;
    let t17;
    let p;
    let a1;
    let t19;
    let span;
    let div2_class_value;
    let mounted;
    let dispose;
    return {
      c() {
        header = element("header");
        header.textContent = `Pixiv Downloader ${"1.3.1"}`;
        t2 = space();
        article = element("article");
        article.innerHTML = `<ul class="list-disc list-inside leading-loose"><li>New: Add support for all the fallen booru.</li> <li>优化:现在支持多标签页排队进行批量下载。</li> <li>优化:下载按钮现在会响应式更新完成状态。</li> <li>优化:导入,清除历史记录不再刷新页面。</li> <li>修复:Pixiv浏览记录页不显示下载按钮的问题。</li></ul>`;
        t12 = space();
        footer = element("footer");
        div0 = element("div");
        button = element("button");
        t13 = text(t13_value);
        t14 = space();
        a0 = element("a");
        t15 = text(t15_value);
        t16 = space();
        div2 = element("div");
        div1 = element("div");
        img = element("img");
        t17 = space();
        p = element("p");
        a1 = element("a");
        a1.textContent = `${t("changelog.give_me_a_star")}`;
        t19 = space();
        span = element("span");
        span.textContent = `${t("changelog.buy_me_a_drink")}`;
        attr(header, "class", "modal-header text-2xl font-bold");
        attr(article, "class", "modal-body mt-4");
        attr(
          button,
          "class",
          /*anchor*/
          ctx[3]
        );
        attr(
          a0,
          "class",
          /*anchor*/
          ctx[3]
        );
        attr(a0, "target", "_blank");
        attr(a0, "href", "https://github.com/drunkg00se/Pixiv-Downloader/issues");
        attr(div0, "class", "flex justify-between items-center text-sm");
        if (!src_url_equal(img.src, img_src_value = creditCode)) attr(img, "src", img_src_value);
        attr(img, "alt", "credit");
        attr(img, "class", "rounded-full");
        attr(a1, "href", "https://github.com/drunkg00se/Pixiv-Downloader");
        attr(a1, "target", "_blank");
        attr(a1, "class", "anchor");
        attr(p, "class", "flex flex-col h-full justify-evenly");
        attr(div1, "class", "flex justify-center items-center min-h-0 gap-14 overflow-hidden");
        attr(div2, "class", div2_class_value = "grid transition-[grid-template-rows] duration-[400ms] " + /*gridRows*/
        ctx[2]);
        attr(footer, "class", "modal-footer mt-4");
      },
      m(target, anchor) {
        insert(target, header, anchor);
        insert(target, t2, anchor);
        insert(target, article, anchor);
        insert(target, t12, anchor);
        insert(target, footer, anchor);
        append(footer, div0);
        append(div0, button);
        append(button, t13);
        append(div0, t14);
        append(div0, a0);
        append(a0, t15);
        append(footer, t16);
        append(footer, div2);
        append(div2, div1);
        append(div1, img);
        append(div1, t17);
        append(div1, p);
        append(p, a1);
        append(p, t19);
        append(p, span);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*click_handler*/
            ctx[4]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty & /*gridRows*/
        4 && div2_class_value !== (div2_class_value = "grid transition-[grid-template-rows] duration-[400ms] " + /*gridRows*/
        ctx2[2])) {
          attr(div2, "class", div2_class_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(header);
          detach(t2);
          detach(article);
          detach(t12);
          detach(footer);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment$9(ctx) {
    let modalwrapper;
    let current;
    modalwrapper = new ModalWrapper({
      props: {
        parent: (
          /*parent*/
          ctx[0]
        ),
        $$slots: { default: [create_default_slot$6] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        create_component(modalwrapper.$$.fragment);
      },
      m(target, anchor) {
        mount_component(modalwrapper, target, anchor);
        current = true;
      },
      p(ctx2, [dirty]) {
        const modalwrapper_changes = {};
        if (dirty & /*parent*/
        1) modalwrapper_changes.parent = /*parent*/
        ctx2[0];
        if (dirty & /*$$scope, gridRows, showCreditCode*/
        70) {
          modalwrapper_changes.$$scope = { dirty, ctx: ctx2 };
        }
        modalwrapper.$set(modalwrapper_changes);
      },
      i(local) {
        if (current) return;
        transition_in(modalwrapper.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(modalwrapper.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(modalwrapper, detaching);
      }
    };
  }
  function instance$9($$self, $$props, $$invalidate) {
    let gridRows;
    const anchorFocus = `focus:!outline-none focus:decoration-wavy`;
    const anchor = `leading-loose anchor underline-offset-2 ${anchorFocus}`;
    let { parent } = $$props;
    let showCreditCode = false;
    const click_handler = () => $$invalidate(1, showCreditCode = !showCreditCode);
    $$self.$$set = ($$props2) => {
      if ("parent" in $$props2) $$invalidate(0, parent = $$props2.parent);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*showCreditCode*/
      2) {
        $$invalidate(2, gridRows = showCreditCode ? "grid-rows-[1fr] mt-2" : "grid-rows-[0fr]");
      }
    };
    return [parent, showCreditCode, gridRows, anchor, click_handler];
  }
  class Changelog extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$9, create_fragment$9, safe_not_equal, { parent: 0 });
    }
  }
  const check = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>check</title><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" /></svg>`;
  const folderSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z" /></svg>`;
  const fileSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13,9V3.5L18.5,9M6,2C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2H6Z" /></svg>`;
  const configStore = writable();
  function initConfigStore() {
    const data = config.getAll();
    configStore.set(data);
    configStore.subscribe(config.update);
    return configStore;
  }
  function get_each_context$3(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[40] = list[i];
    return child_ctx;
  }
  function get_each_context_1$2(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[40] = list[i];
    return child_ctx;
  }
  function create_else_block$2(ctx) {
    let input;
    return {
      c() {
        input = element("input");
        attr(input, "type", "text");
        input.disabled = true;
        attr(
          input,
          "placeholder",
          /*directoryPlaceholder*/
          ctx[11]
        );
      },
      m(target, anchor) {
        insert(target, input, anchor);
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*directoryPlaceholder*/
        2048) {
          attr(
            input,
            "placeholder",
            /*directoryPlaceholder*/
            ctx2[11]
          );
        }
      },
      d(detaching) {
        if (detaching) {
          detach(input);
        }
      }
    };
  }
  function create_if_block_2$3(ctx) {
    let input;
    let mounted;
    let dispose;
    return {
      c() {
        input = element("input");
        attr(input, "type", "text");
        attr(
          input,
          "placeholder",
          /*directoryPlaceholder*/
          ctx[11]
        );
      },
      m(target, anchor) {
        insert(target, input, anchor);
        ctx[27](input);
        set_input_value(
          input,
          /*directory*/
          ctx[4]
        );
        if (!mounted) {
          dispose = listen(
            input,
            "input",
            /*input_input_handler*/
            ctx[28]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*directoryPlaceholder*/
        2048) {
          attr(
            input,
            "placeholder",
            /*directoryPlaceholder*/
            ctx2[11]
          );
        }
        if (dirty[0] & /*directory*/
        16 && input.value !== /*directory*/
        ctx2[4]) {
          set_input_value(
            input,
            /*directory*/
            ctx2[4]
          );
        }
      },
      d(detaching) {
        if (detaching) {
          detach(input);
        }
        ctx[27](null);
        mounted = false;
        dispose();
      }
    };
  }
  function create_each_block_1$2(ctx) {
    let button;
    let span;
    let t0_value = (
      /*template*/
      ctx[40] + ""
    );
    let t0;
    let t1;
    let button_disabled_value;
    let mounted;
    let dispose;
    return {
      c() {
        button = element("button");
        span = element("span");
        t0 = text(t0_value);
        t1 = space();
        attr(button, "class", "chip variant-soft hover:variant-filled");
        button.disabled = button_disabled_value = !/*subDirectoryAvailable*/
        ctx[6];
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, span);
        append(span, t0);
        append(button, t1);
        if (!mounted) {
          dispose = listen(button, "click", function() {
            if (is_function(
              /*insertDirTemplateAtCursor*/
              ctx[20](
                /*template*/
                ctx[40]
              )
            )) ctx[20](
              /*template*/
              ctx[40]
            ).apply(this, arguments);
          });
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty[0] & /*templates*/
        8 && t0_value !== (t0_value = /*template*/
        ctx[40] + "")) set_data(t0, t0_value);
        if (dirty[0] & /*subDirectoryAvailable*/
        64 && button_disabled_value !== (button_disabled_value = !/*subDirectoryAvailable*/
        ctx[6])) {
          button.disabled = button_disabled_value;
        }
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_if_block_1$5(ctx) {
    let li0;
    let p0;
    let t1;
    let span;
    let t2;
    let t3;
    let button;
    let t5;
    let li1;
    let p1;
    let t7;
    let radiogroup;
    let current;
    let mounted;
    let dispose;
    radiogroup = new RadioGroup({
      props: {
        class: "shrink-0",
        $$slots: { default: [create_default_slot_5$2] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        li0 = element("li");
        p0 = element("p");
        p0.textContent = `${t("setting.save_to.options.fsa_directory")}`;
        t1 = space();
        span = element("span");
        t2 = text(
          /*fsaDirectory*/
          ctx[10]
        );
        t3 = space();
        button = element("button");
        button.textContent = `${t("setting.save_to.button.choose_fsa_directory")}`;
        t5 = space();
        li1 = element("li");
        p1 = element("p");
        p1.textContent = `${t("setting.save_to.options.fsa_filename_conflict")}`;
        t7 = space();
        create_component(radiogroup.$$.fragment);
        attr(p0, "class", "flex-auto");
        attr(span, "class", "text-sm italic");
        attr(button, "class", "btn btn-sm variant-filled");
        attr(p1, "class", "flex-auto");
      },
      m(target, anchor) {
        insert(target, li0, anchor);
        append(li0, p0);
        append(li0, t1);
        append(li0, span);
        append(span, t2);
        append(li0, t3);
        append(li0, button);
        insert(target, t5, anchor);
        insert(target, li1, anchor);
        append(li1, p1);
        append(li1, t7);
        mount_component(radiogroup, li1, null);
        current = true;
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*updatefsaDir*/
            ctx[19]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*fsaDirectory*/
        1024) set_data(
          t2,
          /*fsaDirectory*/
          ctx2[10]
        );
        const radiogroup_changes = {};
        if (dirty[0] & /*$store*/
        128 | dirty[1] & /*$$scope*/
        16384) {
          radiogroup_changes.$$scope = { dirty, ctx: ctx2 };
        }
        radiogroup.$set(radiogroup_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radiogroup.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radiogroup.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(li0);
          detach(t5);
          detach(li1);
        }
        destroy_component(radiogroup);
        mounted = false;
        dispose();
      }
    };
  }
  function create_default_slot_8(ctx) {
    let t_1_value = t("setting.save_to.radio.filename_conflict_option_uniquify") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_7(ctx) {
    let t_1_value = t("setting.save_to.radio.filename_conflict_option_overwrite") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_6$2(ctx) {
    let t_1_value = t("setting.save_to.radio.filename_conflict_option_prompt") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_5$2(ctx) {
    let radioitem0;
    let updating_group;
    let t0;
    let radioitem1;
    let updating_group_1;
    let t1;
    let radioitem2;
    let updating_group_2;
    let current;
    function radioitem0_group_binding(value) {
      ctx[30](value);
    }
    let radioitem0_props = {
      name: "filenameConfigAction",
      class: "text-sm",
      value: FilenameConfigAction.UNIQUIFY,
      $$slots: { default: [create_default_slot_8] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].fileSystemFilenameConflictAction !== void 0
    ) {
      radioitem0_props.group = /*$store*/
      ctx[7].fileSystemFilenameConflictAction;
    }
    radioitem0 = new RadioItem({ props: radioitem0_props });
    binding_callbacks.push(() => bind(radioitem0, "group", radioitem0_group_binding));
    function radioitem1_group_binding(value) {
      ctx[31](value);
    }
    let radioitem1_props = {
      name: "filenameConfigAction",
      class: "text-sm",
      value: FilenameConfigAction.OVERWRITE,
      $$slots: { default: [create_default_slot_7] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].fileSystemFilenameConflictAction !== void 0
    ) {
      radioitem1_props.group = /*$store*/
      ctx[7].fileSystemFilenameConflictAction;
    }
    radioitem1 = new RadioItem({ props: radioitem1_props });
    binding_callbacks.push(() => bind(radioitem1, "group", radioitem1_group_binding));
    function radioitem2_group_binding(value) {
      ctx[32](value);
    }
    let radioitem2_props = {
      name: "filenameConfigAction",
      class: "text-sm",
      value: FilenameConfigAction.PROMPT,
      $$slots: { default: [create_default_slot_6$2] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].fileSystemFilenameConflictAction !== void 0
    ) {
      radioitem2_props.group = /*$store*/
      ctx[7].fileSystemFilenameConflictAction;
    }
    radioitem2 = new RadioItem({ props: radioitem2_props });
    binding_callbacks.push(() => bind(radioitem2, "group", radioitem2_group_binding));
    return {
      c() {
        create_component(radioitem0.$$.fragment);
        t0 = space();
        create_component(radioitem1.$$.fragment);
        t1 = space();
        create_component(radioitem2.$$.fragment);
      },
      m(target, anchor) {
        mount_component(radioitem0, target, anchor);
        insert(target, t0, anchor);
        mount_component(radioitem1, target, anchor);
        insert(target, t1, anchor);
        mount_component(radioitem2, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const radioitem0_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty[0] & /*$store*/
        128) {
          updating_group = true;
          radioitem0_changes.group = /*$store*/
          ctx2[7].fileSystemFilenameConflictAction;
          add_flush_callback(() => updating_group = false);
        }
        radioitem0.$set(radioitem0_changes);
        const radioitem1_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_1 && dirty[0] & /*$store*/
        128) {
          updating_group_1 = true;
          radioitem1_changes.group = /*$store*/
          ctx2[7].fileSystemFilenameConflictAction;
          add_flush_callback(() => updating_group_1 = false);
        }
        radioitem1.$set(radioitem1_changes);
        const radioitem2_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem2_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_2 && dirty[0] & /*$store*/
        128) {
          updating_group_2 = true;
          radioitem2_changes.group = /*$store*/
          ctx2[7].fileSystemFilenameConflictAction;
          add_flush_callback(() => updating_group_2 = false);
        }
        radioitem2.$set(radioitem2_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radioitem0.$$.fragment, local);
        transition_in(radioitem1.$$.fragment, local);
        transition_in(radioitem2.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radioitem0.$$.fragment, local);
        transition_out(radioitem1.$$.fragment, local);
        transition_out(radioitem2.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(t1);
        }
        destroy_component(radioitem0, detaching);
        destroy_component(radioitem1, detaching);
        destroy_component(radioitem2, detaching);
      }
    };
  }
  function create_each_block$3(ctx) {
    let button;
    let span;
    let t0_value = (
      /*template*/
      ctx[40] + ""
    );
    let t0;
    let t1;
    let mounted;
    let dispose;
    return {
      c() {
        button = element("button");
        span = element("span");
        t0 = text(t0_value);
        t1 = space();
        attr(button, "class", "chip variant-soft hover:variant-filled");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, span);
        append(span, t0);
        append(button, t1);
        if (!mounted) {
          dispose = listen(button, "click", function() {
            if (is_function(
              /*insertFilenameTemplateAtCursor*/
              ctx[21](
                /*template*/
                ctx[40]
              )
            )) ctx[21](
              /*template*/
              ctx[40]
            ).apply(this, arguments);
          });
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty[0] & /*templates*/
        8 && t0_value !== (t0_value = /*template*/
        ctx[40] + "")) set_data(t0, t0_value);
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_if_block$6(ctx) {
    let li;
    let div;
    let p0;
    let t1;
    let p1;
    let t2_value = t("setting.save_to.options.tag_language_tips") + "";
    let t2;
    let t3;
    let radiogroup;
    let current;
    radiogroup = new RadioGroup({
      props: {
        class: " shrink-0",
        $$slots: { default: [create_default_slot$5] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        li = element("li");
        div = element("div");
        p0 = element("p");
        p0.textContent = `${t("setting.save_to.options.tag_language")}`;
        t1 = space();
        p1 = element("p");
        t2 = text(t2_value);
        t3 = space();
        create_component(radiogroup.$$.fragment);
        attr(
          p1,
          "class",
          /*descritionText*/
          ctx[0]
        );
        attr(div, "class", "flex-auto");
      },
      m(target, anchor) {
        insert(target, li, anchor);
        append(li, div);
        append(div, p0);
        append(div, t1);
        append(div, p1);
        append(p1, t2);
        append(li, t3);
        mount_component(radiogroup, li, null);
        current = true;
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*descritionText*/
        1) {
          attr(
            p1,
            "class",
            /*descritionText*/
            ctx2[0]
          );
        }
        const radiogroup_changes = {};
        if (dirty[0] & /*$store*/
        128 | dirty[1] & /*$$scope*/
        16384) {
          radiogroup_changes.$$scope = { dirty, ctx: ctx2 };
        }
        radiogroup.$set(radiogroup_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radiogroup.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radiogroup.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(li);
        }
        destroy_component(radiogroup);
      }
    };
  }
  function create_default_slot_4$2(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("日本語");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_3$4(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("简中");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_2$4(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("繁中");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_1$4(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("En");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot$5(ctx) {
    let radioitem0;
    let updating_group;
    let t0;
    let radioitem1;
    let updating_group_1;
    let t1;
    let radioitem2;
    let updating_group_2;
    let t2;
    let radioitem3;
    let updating_group_3;
    let current;
    function radioitem0_group_binding_1(value) {
      ctx[35](value);
    }
    let radioitem0_props = {
      name: "tagLang",
      class: "text-sm",
      value: TagLanguage.JAPANESE,
      $$slots: { default: [create_default_slot_4$2] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].tagLang !== void 0
    ) {
      radioitem0_props.group = /*$store*/
      ctx[7].tagLang;
    }
    radioitem0 = new RadioItem({ props: radioitem0_props });
    binding_callbacks.push(() => bind(radioitem0, "group", radioitem0_group_binding_1));
    function radioitem1_group_binding_1(value) {
      ctx[36](value);
    }
    let radioitem1_props = {
      name: "tagLang",
      class: "text-sm",
      value: TagLanguage.CHINESE,
      $$slots: { default: [create_default_slot_3$4] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].tagLang !== void 0
    ) {
      radioitem1_props.group = /*$store*/
      ctx[7].tagLang;
    }
    radioitem1 = new RadioItem({ props: radioitem1_props });
    binding_callbacks.push(() => bind(radioitem1, "group", radioitem1_group_binding_1));
    function radioitem2_group_binding_1(value) {
      ctx[37](value);
    }
    let radioitem2_props = {
      name: "tagLang",
      class: "text-sm",
      value: TagLanguage.TRADITIONAL_CHINESE,
      $$slots: { default: [create_default_slot_2$4] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].tagLang !== void 0
    ) {
      radioitem2_props.group = /*$store*/
      ctx[7].tagLang;
    }
    radioitem2 = new RadioItem({ props: radioitem2_props });
    binding_callbacks.push(() => bind(radioitem2, "group", radioitem2_group_binding_1));
    function radioitem3_group_binding(value) {
      ctx[38](value);
    }
    let radioitem3_props = {
      name: "tagLang",
      class: "text-sm",
      value: TagLanguage.ENGLISH,
      $$slots: { default: [create_default_slot_1$4] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].tagLang !== void 0
    ) {
      radioitem3_props.group = /*$store*/
      ctx[7].tagLang;
    }
    radioitem3 = new RadioItem({ props: radioitem3_props });
    binding_callbacks.push(() => bind(radioitem3, "group", radioitem3_group_binding));
    return {
      c() {
        create_component(radioitem0.$$.fragment);
        t0 = space();
        create_component(radioitem1.$$.fragment);
        t1 = space();
        create_component(radioitem2.$$.fragment);
        t2 = space();
        create_component(radioitem3.$$.fragment);
      },
      m(target, anchor) {
        mount_component(radioitem0, target, anchor);
        insert(target, t0, anchor);
        mount_component(radioitem1, target, anchor);
        insert(target, t1, anchor);
        mount_component(radioitem2, target, anchor);
        insert(target, t2, anchor);
        mount_component(radioitem3, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const radioitem0_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty[0] & /*$store*/
        128) {
          updating_group = true;
          radioitem0_changes.group = /*$store*/
          ctx2[7].tagLang;
          add_flush_callback(() => updating_group = false);
        }
        radioitem0.$set(radioitem0_changes);
        const radioitem1_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_1 && dirty[0] & /*$store*/
        128) {
          updating_group_1 = true;
          radioitem1_changes.group = /*$store*/
          ctx2[7].tagLang;
          add_flush_callback(() => updating_group_1 = false);
        }
        radioitem1.$set(radioitem1_changes);
        const radioitem2_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem2_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_2 && dirty[0] & /*$store*/
        128) {
          updating_group_2 = true;
          radioitem2_changes.group = /*$store*/
          ctx2[7].tagLang;
          add_flush_callback(() => updating_group_2 = false);
        }
        radioitem2.$set(radioitem2_changes);
        const radioitem3_changes = {};
        if (dirty[1] & /*$$scope*/
        16384) {
          radioitem3_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_3 && dirty[0] & /*$store*/
        128) {
          updating_group_3 = true;
          radioitem3_changes.group = /*$store*/
          ctx2[7].tagLang;
          add_flush_callback(() => updating_group_3 = false);
        }
        radioitem3.$set(radioitem3_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radioitem0.$$.fragment, local);
        transition_in(radioitem1.$$.fragment, local);
        transition_in(radioitem2.$$.fragment, local);
        transition_in(radioitem3.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radioitem0.$$.fragment, local);
        transition_out(radioitem1.$$.fragment, local);
        transition_out(radioitem2.$$.fragment, local);
        transition_out(radioitem3.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(t1);
          detach(t2);
        }
        destroy_component(radioitem0, detaching);
        destroy_component(radioitem1, detaching);
        destroy_component(radioitem2, detaching);
        destroy_component(radioitem3, detaching);
      }
    };
  }
  function create_fragment$8(ctx) {
    let div4;
    let section0;
    let p0;
    let t0_value = t("setting.save_to.label.directory") + "";
    let t0;
    let t1;
    let ul0;
    let li0;
    let div0;
    let button0;
    let i0;
    let t2;
    let t3;
    let button1;
    let i1;
    let t4;
    let div1;
    let t5;
    let li1;
    let p1;
    let t7;
    let slidetoggle;
    let updating_checked;
    let t8;
    let t9;
    let section1;
    let p2;
    let t10_value = t("setting.save_to.label.filename") + "";
    let t10;
    let t11;
    let ul1;
    let li2;
    let div2;
    let button2;
    let i2;
    let t12;
    let input;
    let t13;
    let button3;
    let i3;
    let t14;
    let div3;
    let t15;
    let show_if = env.isPixiv();
    let current;
    let mounted;
    let dispose;
    function select_block_type(ctx2, dirty) {
      if (
        /*subDirectoryAvailable*/
        ctx2[6]
      ) return create_if_block_2$3;
      return create_else_block$2;
    }
    let current_block_type = select_block_type(ctx);
    let if_block0 = current_block_type(ctx);
    let each_value_1 = ensure_array_like(
      /*templates*/
      ctx[3]
    );
    let each_blocks_1 = [];
    for (let i = 0; i < each_value_1.length; i += 1) {
      each_blocks_1[i] = create_each_block_1$2(get_each_context_1$2(ctx, each_value_1, i));
    }
    function slidetoggle_checked_binding(value) {
      ctx[29](value);
    }
    let slidetoggle_props = {
      size: "sm",
      name: "fsa-enable",
      disabled: !env.isFileSystemAccessAvaliable()
    };
    if (
      /*$store*/
      ctx[7].useFileSystemAccess !== void 0
    ) {
      slidetoggle_props.checked = /*$store*/
      ctx[7].useFileSystemAccess;
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding));
    let if_block1 = (
      /*$store*/
      ctx[7].useFileSystemAccess && create_if_block_1$5(ctx)
    );
    let each_value = ensure_array_like(
      /*templates*/
      ctx[3]
    );
    let each_blocks = [];
    for (let i = 0; i < each_value.length; i += 1) {
      each_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i));
    }
    let if_block2 = show_if && create_if_block$6(ctx);
    return {
      c() {
        div4 = element("div");
        section0 = element("section");
        p0 = element("p");
        t0 = text(t0_value);
        t1 = space();
        ul0 = element("ul");
        li0 = element("li");
        div0 = element("div");
        button0 = element("button");
        i0 = element("i");
        t2 = space();
        if_block0.c();
        t3 = space();
        button1 = element("button");
        i1 = element("i");
        t4 = space();
        div1 = element("div");
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          each_blocks_1[i].c();
        }
        t5 = space();
        li1 = element("li");
        p1 = element("p");
        p1.textContent = `${t("setting.save_to.options.use_fsa")}`;
        t7 = space();
        create_component(slidetoggle.$$.fragment);
        t8 = space();
        if (if_block1) if_block1.c();
        t9 = space();
        section1 = element("section");
        p2 = element("p");
        t10 = text(t10_value);
        t11 = space();
        ul1 = element("ul");
        li2 = element("li");
        div2 = element("div");
        button2 = element("button");
        i2 = element("i");
        t12 = space();
        input = element("input");
        t13 = space();
        button3 = element("button");
        i3 = element("i");
        t14 = space();
        div3 = element("div");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        t15 = space();
        if (if_block2) if_block2.c();
        attr(
          p0,
          "class",
          /*sectionTitle*/
          ctx[2]
        );
        attr(i0, "class", "w-6 fill-current");
        attr(button0, "type", "button");
        attr(button0, "class", "[&:not([disabled])]:variant-soft-primary");
        button0.disabled = /*folderBtnDisabled*/
        ctx[13];
        attr(i1, "class", "w-6 fill-current");
        attr(button1, "type", "button");
        attr(button1, "class", "variant-soft-surface [&:not([disabled])]:variant-soft-primary");
        button1.disabled = /*folderBtnDisabled*/
        ctx[13];
        attr(div0, "class", "input-group input-group-divider grid-cols-[auto_1fr_auto_auto]");
        attr(div1, "class", "self-start space-x-2");
        attr(li0, "class", "flex-col gap-3");
        attr(p1, "class", "flex-auto");
        attr(
          ul0,
          "class",
          /*ulClasses*/
          ctx[14]
        );
        attr(
          p2,
          "class",
          /*sectionTitle*/
          ctx[2]
        );
        attr(i2, "class", "w-6 fill-current");
        attr(button2, "type", "button");
        attr(button2, "class", "[&:not([disabled])]:variant-soft-primary");
        button2.disabled = /*filenameBtnDisabled*/
        ctx[12];
        attr(input, "type", "text");
        input.required = true;
        attr(input, "placeholder", t("setting.save_to.placeholder.filename_requried"));
        attr(i3, "class", "w-6 fill-current");
        attr(button3, "type", "button");
        attr(button3, "class", "variant-soft-surface dark:variant-fill-surface [&:not([disabled])]:variant-soft-primary");
        button3.disabled = /*filenameBtnDisabled*/
        ctx[12];
        attr(div2, "class", "input-group input-group-divider grid-cols-[auto_1fr_auto]");
        attr(div3, "class", "self-start space-x-2");
        attr(li2, "class", "flex-col gap-3");
        attr(
          ul1,
          "class",
          /*ulClasses*/
          ctx[14]
        );
        attr(
          div4,
          "class",
          /*sectionSpace*/
          ctx[1]
        );
      },
      m(target, anchor) {
        insert(target, div4, anchor);
        append(div4, section0);
        append(section0, p0);
        append(p0, t0);
        append(section0, t1);
        append(section0, ul0);
        append(ul0, li0);
        append(li0, div0);
        append(div0, button0);
        append(button0, i0);
        i0.innerHTML = folderSvg;
        append(div0, t2);
        if_block0.m(div0, null);
        append(div0, t3);
        append(div0, button1);
        append(button1, i1);
        i1.innerHTML = check;
        append(li0, t4);
        append(li0, div1);
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          if (each_blocks_1[i]) {
            each_blocks_1[i].m(div1, null);
          }
        }
        append(ul0, t5);
        append(ul0, li1);
        append(li1, p1);
        append(li1, t7);
        mount_component(slidetoggle, li1, null);
        append(ul0, t8);
        if (if_block1) if_block1.m(ul0, null);
        append(div4, t9);
        append(div4, section1);
        append(section1, p2);
        append(p2, t10);
        append(section1, t11);
        append(section1, ul1);
        append(ul1, li2);
        append(li2, div2);
        append(div2, button2);
        append(button2, i2);
        i2.innerHTML = fileSvg;
        append(div2, t12);
        append(div2, input);
        ctx[33](input);
        set_input_value(
          input,
          /*filename*/
          ctx[5]
        );
        append(div2, t13);
        append(div2, button3);
        append(button3, i3);
        i3.innerHTML = check;
        append(li2, t14);
        append(li2, div3);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(div3, null);
          }
        }
        append(ul1, t15);
        if (if_block2) if_block2.m(ul1, null);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              button0,
              "click",
              /*resetFolder*/
              ctx[17]
            ),
            listen(
              button1,
              "click",
              /*updateDirectory*/
              ctx[15]
            ),
            listen(
              button2,
              "click",
              /*resetFilename*/
              ctx[18]
            ),
            listen(
              input,
              "input",
              /*input_input_handler_1*/
              ctx[34]
            ),
            listen(
              button3,
              "click",
              /*updateFilename*/
              ctx[16]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*sectionTitle*/
        4) {
          attr(
            p0,
            "class",
            /*sectionTitle*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*folderBtnDisabled*/
        8192) {
          button0.disabled = /*folderBtnDisabled*/
          ctx2[13];
        }
        if (current_block_type === (current_block_type = select_block_type(ctx2)) && if_block0) {
          if_block0.p(ctx2, dirty);
        } else {
          if_block0.d(1);
          if_block0 = current_block_type(ctx2);
          if (if_block0) {
            if_block0.c();
            if_block0.m(div0, t3);
          }
        }
        if (!current || dirty[0] & /*folderBtnDisabled*/
        8192) {
          button1.disabled = /*folderBtnDisabled*/
          ctx2[13];
        }
        if (dirty[0] & /*subDirectoryAvailable, insertDirTemplateAtCursor, templates*/
        1048648) {
          each_value_1 = ensure_array_like(
            /*templates*/
            ctx2[3]
          );
          let i;
          for (i = 0; i < each_value_1.length; i += 1) {
            const child_ctx = get_each_context_1$2(ctx2, each_value_1, i);
            if (each_blocks_1[i]) {
              each_blocks_1[i].p(child_ctx, dirty);
            } else {
              each_blocks_1[i] = create_each_block_1$2(child_ctx);
              each_blocks_1[i].c();
              each_blocks_1[i].m(div1, null);
            }
          }
          for (; i < each_blocks_1.length; i += 1) {
            each_blocks_1[i].d(1);
          }
          each_blocks_1.length = each_value_1.length;
        }
        const slidetoggle_changes = {};
        if (!updating_checked && dirty[0] & /*$store*/
        128) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$store*/
          ctx2[7].useFileSystemAccess;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
        if (
          /*$store*/
          ctx2[7].useFileSystemAccess
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
            if (dirty[0] & /*$store*/
            128) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_1$5(ctx2);
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(ul0, null);
          }
        } else if (if_block1) {
          group_outros();
          transition_out(if_block1, 1, 1, () => {
            if_block1 = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*ulClasses*/
        16384) {
          attr(
            ul0,
            "class",
            /*ulClasses*/
            ctx2[14]
          );
        }
        if (!current || dirty[0] & /*sectionTitle*/
        4) {
          attr(
            p2,
            "class",
            /*sectionTitle*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*filenameBtnDisabled*/
        4096) {
          button2.disabled = /*filenameBtnDisabled*/
          ctx2[12];
        }
        if (dirty[0] & /*filename*/
        32 && input.value !== /*filename*/
        ctx2[5]) {
          set_input_value(
            input,
            /*filename*/
            ctx2[5]
          );
        }
        if (!current || dirty[0] & /*filenameBtnDisabled*/
        4096) {
          button3.disabled = /*filenameBtnDisabled*/
          ctx2[12];
        }
        if (dirty[0] & /*insertFilenameTemplateAtCursor, templates*/
        2097160) {
          each_value = ensure_array_like(
            /*templates*/
            ctx2[3]
          );
          let i;
          for (i = 0; i < each_value.length; i += 1) {
            const child_ctx = get_each_context$3(ctx2, each_value, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block$3(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(div3, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value.length;
        }
        if (show_if) if_block2.p(ctx2, dirty);
        if (!current || dirty[0] & /*ulClasses*/
        16384) {
          attr(
            ul1,
            "class",
            /*ulClasses*/
            ctx2[14]
          );
        }
        if (!current || dirty[0] & /*sectionSpace*/
        2) {
          attr(
            div4,
            "class",
            /*sectionSpace*/
            ctx2[1]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle.$$.fragment, local);
        transition_in(if_block1);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle.$$.fragment, local);
        transition_out(if_block1);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div4);
        }
        if_block0.d();
        destroy_each(each_blocks_1, detaching);
        destroy_component(slidetoggle);
        if (if_block1) if_block1.d();
        ctx[33](null);
        destroy_each(each_blocks, detaching);
        if (if_block2) if_block2.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function instance$8($$self, $$props, $$invalidate) {
    let ulClasses;
    let subDirectoryAvailable;
    let folderBtnDisabled;
    let filenameBtnDisabled;
    let directoryPlaceholder;
    let $store;
    component_subscribe($$self, configStore, ($$value) => $$invalidate(7, $store = $$value));
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { descritionText = "text-sm text-surface-400" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    let { templates = [] } = $$props;
    let directoryRef;
    let filenameRef;
    let directory = $store.folderPattern;
    let filename = $store.filenamePattern;
    let fsaDirectory = downloader.getCurrentFsaDirName();
    function updateDirectory() {
      const newDirectory = directory.split("/").map(replaceInvalidChar).filter((path) => !!path).join("/");
      set_store_value(configStore, $store.folderPattern = $$invalidate(4, directory = newDirectory), $store);
    }
    function updateFilename() {
      const newFilename = replaceInvalidChar(filename);
      if (newFilename === "") {
        $$invalidate(5, filename = $store.filenamePattern);
      } else {
        set_store_value(configStore, $store.filenamePattern = $$invalidate(5, filename = newFilename), $store);
      }
    }
    async function resetFolder() {
      $$invalidate(4, directory = $store.folderPattern);
      await tick();
      const pos = directory.length;
      directoryRef.focus();
      directoryRef.setSelectionRange(pos, pos);
    }
    async function resetFilename() {
      $$invalidate(5, filename = $store.filenamePattern);
      await tick();
      const pos = filename.length;
      filenameRef.focus();
      filenameRef.setSelectionRange(pos, pos);
    }
    async function updatefsaDir() {
      $$invalidate(10, fsaDirectory = await downloader.updateDirHandle());
      console.log(fsaDirectory);
    }
    function insertDirTemplateAtCursor(template) {
      return async () => {
        const start = directoryRef.selectionStart;
        const end = directoryRef.selectionEnd;
        $$invalidate(4, directory = directory.slice(0, start) + template + directory.slice(end));
        await tick();
        const newStart = start + template.length;
        directoryRef.focus();
        directoryRef.setSelectionRange(newStart, newStart);
      };
    }
    function insertFilenameTemplateAtCursor(template) {
      return async () => {
        const start = filenameRef.selectionStart;
        const end = filenameRef.selectionEnd;
        $$invalidate(5, filename = filename.slice(0, start) + template + filename.slice(end));
        await tick();
        const newStart = start + template.length;
        filenameRef.focus();
        filenameRef.setSelectionRange(newStart, newStart);
      };
    }
    function input_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        directoryRef = $$value;
        $$invalidate(8, directoryRef);
      });
    }
    function input_input_handler() {
      directory = this.value;
      $$invalidate(4, directory);
    }
    function slidetoggle_checked_binding(value) {
      if ($$self.$$.not_equal($store.useFileSystemAccess, value)) {
        $store.useFileSystemAccess = value;
        configStore.set($store);
      }
    }
    function radioitem0_group_binding(value) {
      if ($$self.$$.not_equal($store.fileSystemFilenameConflictAction, value)) {
        $store.fileSystemFilenameConflictAction = value;
        configStore.set($store);
      }
    }
    function radioitem1_group_binding(value) {
      if ($$self.$$.not_equal($store.fileSystemFilenameConflictAction, value)) {
        $store.fileSystemFilenameConflictAction = value;
        configStore.set($store);
      }
    }
    function radioitem2_group_binding(value) {
      if ($$self.$$.not_equal($store.fileSystemFilenameConflictAction, value)) {
        $store.fileSystemFilenameConflictAction = value;
        configStore.set($store);
      }
    }
    function input_binding_1($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        filenameRef = $$value;
        $$invalidate(9, filenameRef);
      });
    }
    function input_input_handler_1() {
      filename = this.value;
      $$invalidate(5, filename);
    }
    function radioitem0_group_binding_1(value) {
      if ($$self.$$.not_equal($store.tagLang, value)) {
        $store.tagLang = value;
        configStore.set($store);
      }
    }
    function radioitem1_group_binding_1(value) {
      if ($$self.$$.not_equal($store.tagLang, value)) {
        $store.tagLang = value;
        configStore.set($store);
      }
    }
    function radioitem2_group_binding_1(value) {
      if ($$self.$$.not_equal($store.tagLang, value)) {
        $store.tagLang = value;
        configStore.set($store);
      }
    }
    function radioitem3_group_binding(value) {
      if ($$self.$$.not_equal($store.tagLang, value)) {
        $store.tagLang = value;
        configStore.set($store);
      }
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(39, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(22, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(23, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(24, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(25, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(26, rounded = $$new_props.rounded);
      if ("descritionText" in $$new_props) $$invalidate(0, descritionText = $$new_props.descritionText);
      if ("sectionSpace" in $$new_props) $$invalidate(1, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(2, sectionTitle = $$new_props.sectionTitle);
      if ("templates" in $$new_props) $$invalidate(3, templates = $$new_props.templates);
    };
    $$self.$$.update = () => {
      $$invalidate(14, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*$store*/
      128) {
        $$invalidate(6, subDirectoryAvailable = $store.useFileSystemAccess || env.isSupportSubpath());
      }
      if ($$self.$$.dirty[0] & /*directory, $store*/
      144) {
        $$invalidate(13, folderBtnDisabled = directory === $store.folderPattern);
      }
      if ($$self.$$.dirty[0] & /*filename, $store*/
      160) {
        $$invalidate(12, filenameBtnDisabled = filename === $store.filenamePattern);
      }
      if ($$self.$$.dirty[0] & /*subDirectoryAvailable*/
      64) {
        $$invalidate(11, directoryPlaceholder = subDirectoryAvailable ? t("setting.save_to.placeholder.sub_directory_unused") : env.isViolentmonkey() ? t("setting.save_to.placeholder.vm_not_supported") : t("setting.save_to.placeholder.need_browser_api"));
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      descritionText,
      sectionSpace,
      sectionTitle,
      templates,
      directory,
      filename,
      subDirectoryAvailable,
      $store,
      directoryRef,
      filenameRef,
      fsaDirectory,
      directoryPlaceholder,
      filenameBtnDisabled,
      folderBtnDisabled,
      ulClasses,
      updateDirectory,
      updateFilename,
      resetFolder,
      resetFilename,
      updatefsaDir,
      insertDirTemplateAtCursor,
      insertFilenameTemplateAtCursor,
      bg,
      border,
      padding,
      margin,
      rounded,
      input_binding,
      input_input_handler,
      slidetoggle_checked_binding,
      radioitem0_group_binding,
      radioitem1_group_binding,
      radioitem2_group_binding,
      input_binding_1,
      input_input_handler_1,
      radioitem0_group_binding_1,
      radioitem1_group_binding_1,
      radioitem2_group_binding_1,
      radioitem3_group_binding
    ];
  }
  class SaveTo extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$8,
        create_fragment$8,
        safe_not_equal,
        {
          bg: 22,
          border: 23,
          padding: 24,
          margin: 25,
          rounded: 26,
          descritionText: 0,
          sectionSpace: 1,
          sectionTitle: 2,
          templates: 3
        },
        null,
        [-1, -1]
      );
    }
  }
  const nonNegativeInt = (node, params) => {
    if (!(node instanceof HTMLInputElement) || node.type !== "number")
      throw new Error('Node should be an HTMLInputElement with a `type` of "number".');
    const updateStore = (newVal) => {
      if ("key" in params) {
        const { key, store } = params;
        store.update((currentVal) => {
          if (typeof newVal === "number") {
            return { ...currentVal, [key]: newVal };
          } else {
            return currentVal;
          }
        });
      } else {
        params.update((currentVal) => {
          if (typeof newVal === "number") {
            return newVal;
          } else {
            const nodeVal = node.value === "" ? null : +node.value;
            nodeVal !== currentVal && (node.value = typeof currentVal === "number" ? "" + currentVal : "");
            return currentVal;
          }
        });
      }
    };
    node.addEventListener("input", (evt) => {
      const el = evt.currentTarget;
      const { min, max: max2, value } = el;
      const minVal = min === "" ? 0 : +min;
      const maxVal = max2 === "" ? null : +max2;
      if (!el.checkValidity()) {
        if (/^[0-9]+$/.test(value)) {
          const numVal = +value;
          if (numVal < minVal) {
            updateStore(minVal);
          } else if (maxVal && numVal > maxVal) {
            updateStore(maxVal);
          }
        } else {
          updateStore();
        }
      }
    });
    node.addEventListener("blur", (evt) => {
      const el = evt.currentTarget;
      const { min, value } = el;
      const minVal = min === "" ? 0 : +min;
      if (value === "") {
        updateStore(minVal);
      }
    });
    return {};
  };
  function get_each_context$2(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[27] = list[i];
    return child_ctx;
  }
  function get_each_context_1$1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[27] = list[i];
    return child_ctx;
  }
  function create_default_slot_6$1(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Zip");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_5$1(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Webm");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_4$1(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Mp4");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_3$3(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Webp");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_2$3(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Gif");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_1$3(ctx) {
    let t_1;
    return {
      c() {
        t_1 = text("Png");
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot$4(ctx) {
    let radioitem0;
    let updating_group;
    let t0;
    let radioitem1;
    let updating_group_1;
    let t1;
    let radioitem2;
    let updating_group_2;
    let t2;
    let radioitem3;
    let updating_group_3;
    let t3;
    let radioitem4;
    let updating_group_4;
    let t4;
    let radioitem5;
    let updating_group_5;
    let current;
    function radioitem0_group_binding(value) {
      ctx[13](value);
    }
    let radioitem0_props = {
      name: "ugoiraFormat",
      class: "text-sm",
      value: UgoiraFormat.ZIP,
      $$slots: { default: [create_default_slot_6$1] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem0_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem0 = new RadioItem({ props: radioitem0_props });
    binding_callbacks.push(() => bind(radioitem0, "group", radioitem0_group_binding));
    function radioitem1_group_binding(value) {
      ctx[14](value);
    }
    let radioitem1_props = {
      name: "ugoiraFormat",
      class: "text-sm",
      value: UgoiraFormat.WEBM,
      $$slots: { default: [create_default_slot_5$1] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem1_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem1 = new RadioItem({ props: radioitem1_props });
    binding_callbacks.push(() => bind(radioitem1, "group", radioitem1_group_binding));
    function radioitem2_group_binding(value) {
      ctx[15](value);
    }
    let radioitem2_props = {
      disabled: !env.videoFrameSupported(),
      class: "text-sm",
      name: "ugoiraFormat",
      value: UgoiraFormat.MP4,
      $$slots: { default: [create_default_slot_4$1] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem2_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem2 = new RadioItem({ props: radioitem2_props });
    binding_callbacks.push(() => bind(radioitem2, "group", radioitem2_group_binding));
    function radioitem3_group_binding(value) {
      ctx[16](value);
    }
    let radioitem3_props = {
      name: "ugoiraFormat",
      class: "text-sm",
      value: UgoiraFormat.WEBP,
      $$slots: { default: [create_default_slot_3$3] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem3_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem3 = new RadioItem({ props: radioitem3_props });
    binding_callbacks.push(() => bind(radioitem3, "group", radioitem3_group_binding));
    function radioitem4_group_binding(value) {
      ctx[17](value);
    }
    let radioitem4_props = {
      name: "ugoiraFormat",
      class: "text-sm",
      value: UgoiraFormat.GIF,
      $$slots: { default: [create_default_slot_2$3] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem4_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem4 = new RadioItem({ props: radioitem4_props });
    binding_callbacks.push(() => bind(radioitem4, "group", radioitem4_group_binding));
    function radioitem5_group_binding(value) {
      ctx[18](value);
    }
    let radioitem5_props = {
      name: "ugoiraFormat",
      class: "text-sm",
      value: UgoiraFormat.PNG,
      $$slots: { default: [create_default_slot_1$3] },
      $$scope: { ctx }
    };
    if (
      /*$store*/
      ctx[7].ugoiraFormat !== void 0
    ) {
      radioitem5_props.group = /*$store*/
      ctx[7].ugoiraFormat;
    }
    radioitem5 = new RadioItem({ props: radioitem5_props });
    binding_callbacks.push(() => bind(radioitem5, "group", radioitem5_group_binding));
    return {
      c() {
        create_component(radioitem0.$$.fragment);
        t0 = space();
        create_component(radioitem1.$$.fragment);
        t1 = space();
        create_component(radioitem2.$$.fragment);
        t2 = space();
        create_component(radioitem3.$$.fragment);
        t3 = space();
        create_component(radioitem4.$$.fragment);
        t4 = space();
        create_component(radioitem5.$$.fragment);
      },
      m(target, anchor) {
        mount_component(radioitem0, target, anchor);
        insert(target, t0, anchor);
        mount_component(radioitem1, target, anchor);
        insert(target, t1, anchor);
        mount_component(radioitem2, target, anchor);
        insert(target, t2, anchor);
        mount_component(radioitem3, target, anchor);
        insert(target, t3, anchor);
        mount_component(radioitem4, target, anchor);
        insert(target, t4, anchor);
        mount_component(radioitem5, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const radioitem0_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty[0] & /*$store*/
        128) {
          updating_group = true;
          radioitem0_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group = false);
        }
        radioitem0.$set(radioitem0_changes);
        const radioitem1_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_1 && dirty[0] & /*$store*/
        128) {
          updating_group_1 = true;
          radioitem1_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group_1 = false);
        }
        radioitem1.$set(radioitem1_changes);
        const radioitem2_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem2_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_2 && dirty[0] & /*$store*/
        128) {
          updating_group_2 = true;
          radioitem2_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group_2 = false);
        }
        radioitem2.$set(radioitem2_changes);
        const radioitem3_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem3_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_3 && dirty[0] & /*$store*/
        128) {
          updating_group_3 = true;
          radioitem3_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group_3 = false);
        }
        radioitem3.$set(radioitem3_changes);
        const radioitem4_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem4_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_4 && dirty[0] & /*$store*/
        128) {
          updating_group_4 = true;
          radioitem4_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group_4 = false);
        }
        radioitem4.$set(radioitem4_changes);
        const radioitem5_changes = {};
        if (dirty[1] & /*$$scope*/
        2) {
          radioitem5_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_5 && dirty[0] & /*$store*/
        128) {
          updating_group_5 = true;
          radioitem5_changes.group = /*$store*/
          ctx2[7].ugoiraFormat;
          add_flush_callback(() => updating_group_5 = false);
        }
        radioitem5.$set(radioitem5_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radioitem0.$$.fragment, local);
        transition_in(radioitem1.$$.fragment, local);
        transition_in(radioitem2.$$.fragment, local);
        transition_in(radioitem3.$$.fragment, local);
        transition_in(radioitem4.$$.fragment, local);
        transition_in(radioitem5.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radioitem0.$$.fragment, local);
        transition_out(radioitem1.$$.fragment, local);
        transition_out(radioitem2.$$.fragment, local);
        transition_out(radioitem3.$$.fragment, local);
        transition_out(radioitem4.$$.fragment, local);
        transition_out(radioitem5.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(t1);
          detach(t2);
          detach(t3);
          detach(t4);
        }
        destroy_component(radioitem0, detaching);
        destroy_component(radioitem1, detaching);
        destroy_component(radioitem2, detaching);
        destroy_component(radioitem3, detaching);
        destroy_component(radioitem4, detaching);
        destroy_component(radioitem5, detaching);
      }
    };
  }
  function create_each_block_1$1(ctx) {
    let option;
    let t_1_value = (
      /*quality*/
      ctx[27] + ""
    );
    let t_1;
    return {
      c() {
        option = element("option");
        t_1 = text(t_1_value);
        option.__value = /*quality*/
        ctx[27];
        set_input_value(option, option.__value);
      },
      m(target, anchor) {
        insert(target, option, anchor);
        append(option, t_1);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(option);
        }
      }
    };
  }
  function create_each_block$2(ctx) {
    let option;
    let t_1_value = (
      /*quality*/
      ctx[27] + 1 + ""
    );
    let t_1;
    return {
      c() {
        option = element("option");
        t_1 = text(t_1_value);
        option.__value = /*quality*/
        ctx[27] + 1;
        set_input_value(option, option.__value);
      },
      m(target, anchor) {
        insert(target, option, anchor);
        append(option, t_1);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(option);
        }
      }
    };
  }
  function create_fragment$7(ctx) {
    let div6;
    let section0;
    let p0;
    let t0_value = t("setting.ugoira.label.format") + "";
    let t0;
    let t1;
    let ul0;
    let li0;
    let p1;
    let t3;
    let radiogroup;
    let t4;
    let section1;
    let p2;
    let t5_value = t("setting.ugoira.label.quality") + "";
    let t5;
    let t6;
    let ul2;
    let li1;
    let div0;
    let p3;
    let t8;
    let p4;
    let t9_value = t("setting.ugoira.options.webm_tips") + "";
    let t9;
    let t10;
    let input0;
    let input0_class_value;
    let t11;
    let li2;
    let div1;
    let p5;
    let t13;
    let p6;
    let t14;
    let t15;
    let input1;
    let input1_class_value;
    let t16;
    let li6;
    let p7;
    let t18;
    let ul1;
    let li3;
    let p8;
    let t20;
    let slidetoggle;
    let updating_checked;
    let t21;
    let li4;
    let div2;
    let p9;
    let t23;
    let p10;
    let t24_value = t("setting.ugoira.options.webp_quality_tips") + "";
    let t24;
    let t25;
    let input2;
    let input2_class_value;
    let t26;
    let li5;
    let div3;
    let p11;
    let t28;
    let p12;
    let t29_value = t("setting.ugoira.options.webp_method_tips") + "";
    let t29;
    let t30;
    let select0;
    let select0_class_value;
    let ul1_class_value;
    let t31;
    let li7;
    let div4;
    let p13;
    let t33;
    let p14;
    let t34_value = t("setting.ugoira.options.gif_tips") + "";
    let t34;
    let t35;
    let select1;
    let select1_class_value;
    let t36;
    let li8;
    let div5;
    let p15;
    let t38;
    let p16;
    let t39_value = t("setting.ugoira.options.png_tips") + "";
    let t39;
    let t40;
    let input3;
    let input3_class_value;
    let current;
    let mounted;
    let dispose;
    radiogroup = new RadioGroup({
      props: {
        class: "shrink-0",
        $$slots: { default: [create_default_slot$4] },
        $$scope: { ctx }
      }
    });
    function slidetoggle_checked_binding(value) {
      ctx[21](value);
    }
    let slidetoggle_props = { name: "lossless-webp", size: "sm" };
    if (
      /*$store*/
      ctx[7].losslessWebp !== void 0
    ) {
      slidetoggle_props.checked = /*$store*/
      ctx[7].losslessWebp;
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding));
    let each_value_1 = ensure_array_like(Array.from({ length: 7 }, func));
    let each_blocks_1 = [];
    for (let i = 0; i < each_value_1.length; i += 1) {
      each_blocks_1[i] = create_each_block_1$1(get_each_context_1$1(ctx, each_value_1, i));
    }
    let each_value = ensure_array_like(Array.from({ length: 20 }, func_1));
    let each_blocks = [];
    for (let i = 0; i < each_value.length; i += 1) {
      each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i));
    }
    return {
      c() {
        div6 = element("div");
        section0 = element("section");
        p0 = element("p");
        t0 = text(t0_value);
        t1 = space();
        ul0 = element("ul");
        li0 = element("li");
        p1 = element("p");
        p1.textContent = `${t("setting.ugoira.options.select_format")}`;
        t3 = space();
        create_component(radiogroup.$$.fragment);
        t4 = space();
        section1 = element("section");
        p2 = element("p");
        t5 = text(t5_value);
        t6 = space();
        ul2 = element("ul");
        li1 = element("li");
        div0 = element("div");
        p3 = element("p");
        p3.textContent = "Webm";
        t8 = space();
        p4 = element("p");
        t9 = text(t9_value);
        t10 = space();
        input0 = element("input");
        t11 = space();
        li2 = element("li");
        div1 = element("div");
        p5 = element("p");
        p5.textContent = "Mp4";
        t13 = space();
        p6 = element("p");
        t14 = text("Bitrate (Mbps)");
        t15 = space();
        input1 = element("input");
        t16 = space();
        li6 = element("li");
        p7 = element("p");
        p7.textContent = "Webp";
        t18 = space();
        ul1 = element("ul");
        li3 = element("li");
        p8 = element("p");
        p8.textContent = `${t("setting.ugoira.options.webp_lossy")}`;
        t20 = space();
        create_component(slidetoggle.$$.fragment);
        t21 = space();
        li4 = element("li");
        div2 = element("div");
        p9 = element("p");
        p9.textContent = `${t("setting.ugoira.options.webp_quality")}`;
        t23 = space();
        p10 = element("p");
        t24 = text(t24_value);
        t25 = space();
        input2 = element("input");
        t26 = space();
        li5 = element("li");
        div3 = element("div");
        p11 = element("p");
        p11.textContent = `${t("setting.ugoira.options.webp_method")}`;
        t28 = space();
        p12 = element("p");
        t29 = text(t29_value);
        t30 = space();
        select0 = element("select");
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          each_blocks_1[i].c();
        }
        t31 = space();
        li7 = element("li");
        div4 = element("div");
        p13 = element("p");
        p13.textContent = "Gif";
        t33 = space();
        p14 = element("p");
        t34 = text(t34_value);
        t35 = space();
        select1 = element("select");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        t36 = space();
        li8 = element("li");
        div5 = element("div");
        p15 = element("p");
        p15.textContent = "Png";
        t38 = space();
        p16 = element("p");
        t39 = text(t39_value);
        t40 = space();
        input3 = element("input");
        attr(
          p0,
          "class",
          /*sectionTitle*/
          ctx[4]
        );
        attr(p1, "class", "flex-auto");
        attr(
          ul0,
          "class",
          /*ulClasses*/
          ctx[6]
        );
        attr(
          p2,
          "class",
          /*sectionTitle*/
          ctx[4]
        );
        attr(
          p4,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div0, "class", "flex-auto");
        attr(input0, "type", "number");
        attr(input0, "class", input0_class_value = "input " + /*inputClasses*/
        ctx[5]);
        attr(input0, "min", "0");
        attr(input0, "max", "99");
        attr(input0, "step", "1");
        attr(
          p6,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div1, "class", "flex-auto");
        attr(input1, "type", "number");
        attr(input1, "class", input1_class_value = "input " + /*inputClasses*/
        ctx[5]);
        attr(input1, "min", "1");
        attr(input1, "max", "99");
        attr(input1, "step", "1");
        attr(p8, "class", "flex-auto");
        attr(li3, "class", "items-center");
        attr(
          p10,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div2, "class", "flex-auto");
        attr(input2, "type", "number");
        attr(input2, "class", input2_class_value = "input " + /*inputClasses*/
        ctx[5]);
        attr(input2, "min", "0");
        attr(input2, "max", "100");
        attr(input2, "step", "1");
        attr(li4, "class", "items-center");
        attr(
          p12,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div3, "class", "flex-auto");
        attr(select0, "class", select0_class_value = "select " + /*inputClasses*/
        ctx[5]);
        if (
          /*$store*/
          ctx[7].webpMehtod === void 0
        ) add_render_callback(() => (
          /*select0_change_handler*/
          ctx[23].call(select0)
        ));
        attr(li5, "class", "items-center");
        attr(ul1, "class", ul1_class_value = "list " + /*border*/
        ctx[0] + " " + /*rounded*/
        ctx[1] + " [&:not(:last-child)]:*:py-4 [&:last-child]:*:pt-4");
        attr(li6, "class", "flex-col !items-stretch");
        attr(
          p14,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div4, "class", "flex-auto");
        attr(select1, "class", select1_class_value = "select " + /*inputClasses*/
        ctx[5]);
        if (
          /*$store*/
          ctx[7].gifQuality === void 0
        ) add_render_callback(() => (
          /*select1_change_handler*/
          ctx[24].call(select1)
        ));
        attr(
          p16,
          "class",
          /*descriptionText*/
          ctx[2]
        );
        attr(div5, "class", "flex-auto");
        attr(input3, "type", "number");
        attr(input3, "class", input3_class_value = "input " + /*inputClasses*/
        ctx[5]);
        attr(input3, "min", "0");
        attr(input3, "max", "256");
        attr(input3, "step", "1");
        attr(
          ul2,
          "class",
          /*ulClasses*/
          ctx[6]
        );
        attr(
          div6,
          "class",
          /*sectionSpace*/
          ctx[3]
        );
      },
      m(target, anchor) {
        insert(target, div6, anchor);
        append(div6, section0);
        append(section0, p0);
        append(p0, t0);
        append(section0, t1);
        append(section0, ul0);
        append(ul0, li0);
        append(li0, p1);
        append(li0, t3);
        mount_component(radiogroup, li0, null);
        append(div6, t4);
        append(div6, section1);
        append(section1, p2);
        append(p2, t5);
        append(section1, t6);
        append(section1, ul2);
        append(ul2, li1);
        append(li1, div0);
        append(div0, p3);
        append(div0, t8);
        append(div0, p4);
        append(p4, t9);
        append(li1, t10);
        append(li1, input0);
        set_input_value(
          input0,
          /*$store*/
          ctx[7].webmQuality
        );
        append(ul2, t11);
        append(ul2, li2);
        append(li2, div1);
        append(div1, p5);
        append(div1, t13);
        append(div1, p6);
        append(p6, t14);
        append(li2, t15);
        append(li2, input1);
        set_input_value(
          input1,
          /*$store*/
          ctx[7].mp4Bitrate
        );
        append(ul2, t16);
        append(ul2, li6);
        append(li6, p7);
        append(li6, t18);
        append(li6, ul1);
        append(ul1, li3);
        append(li3, p8);
        append(li3, t20);
        mount_component(slidetoggle, li3, null);
        append(ul1, t21);
        append(ul1, li4);
        append(li4, div2);
        append(div2, p9);
        append(div2, t23);
        append(div2, p10);
        append(p10, t24);
        append(li4, t25);
        append(li4, input2);
        set_input_value(
          input2,
          /*$store*/
          ctx[7].webpQuality
        );
        append(ul1, t26);
        append(ul1, li5);
        append(li5, div3);
        append(div3, p11);
        append(div3, t28);
        append(div3, p12);
        append(p12, t29);
        append(li5, t30);
        append(li5, select0);
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          if (each_blocks_1[i]) {
            each_blocks_1[i].m(select0, null);
          }
        }
        select_option(
          select0,
          /*$store*/
          ctx[7].webpMehtod,
          true
        );
        append(ul2, t31);
        append(ul2, li7);
        append(li7, div4);
        append(div4, p13);
        append(div4, t33);
        append(div4, p14);
        append(p14, t34);
        append(li7, t35);
        append(li7, select1);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(select1, null);
          }
        }
        select_option(
          select1,
          /*$store*/
          ctx[7].gifQuality,
          true
        );
        append(ul2, t36);
        append(ul2, li8);
        append(li8, div5);
        append(div5, p15);
        append(div5, t38);
        append(div5, p16);
        append(p16, t39);
        append(li8, t40);
        append(li8, input3);
        set_input_value(
          input3,
          /*$store*/
          ctx[7].pngColor
        );
        current = true;
        if (!mounted) {
          dispose = [
            action_destroyer(nonNegativeInt.call(null, input0, { store: configStore, key: "webmQuality" })),
            listen(
              input0,
              "input",
              /*input0_input_handler*/
              ctx[19]
            ),
            action_destroyer(nonNegativeInt.call(null, input1, { store: configStore, key: "mp4Bitrate" })),
            listen(
              input1,
              "input",
              /*input1_input_handler*/
              ctx[20]
            ),
            action_destroyer(nonNegativeInt.call(null, input2, { store: configStore, key: "webpQuality" })),
            listen(
              input2,
              "input",
              /*input2_input_handler*/
              ctx[22]
            ),
            listen(
              select0,
              "change",
              /*select0_change_handler*/
              ctx[23]
            ),
            listen(
              select1,
              "change",
              /*select1_change_handler*/
              ctx[24]
            ),
            action_destroyer(nonNegativeInt.call(null, input3, { store: configStore, key: "pngColor" })),
            listen(
              input3,
              "input",
              /*input3_input_handler*/
              ctx[25]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*sectionTitle*/
        16) {
          attr(
            p0,
            "class",
            /*sectionTitle*/
            ctx2[4]
          );
        }
        const radiogroup_changes = {};
        if (dirty[0] & /*$store*/
        128 | dirty[1] & /*$$scope*/
        2) {
          radiogroup_changes.$$scope = { dirty, ctx: ctx2 };
        }
        radiogroup.$set(radiogroup_changes);
        if (!current || dirty[0] & /*ulClasses*/
        64) {
          attr(
            ul0,
            "class",
            /*ulClasses*/
            ctx2[6]
          );
        }
        if (!current || dirty[0] & /*sectionTitle*/
        16) {
          attr(
            p2,
            "class",
            /*sectionTitle*/
            ctx2[4]
          );
        }
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p4,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && input0_class_value !== (input0_class_value = "input " + /*inputClasses*/
        ctx2[5])) {
          attr(input0, "class", input0_class_value);
        }
        if (dirty[0] & /*$store*/
        128 && to_number(input0.value) !== /*$store*/
        ctx2[7].webmQuality) {
          set_input_value(
            input0,
            /*$store*/
            ctx2[7].webmQuality
          );
        }
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p6,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && input1_class_value !== (input1_class_value = "input " + /*inputClasses*/
        ctx2[5])) {
          attr(input1, "class", input1_class_value);
        }
        if (dirty[0] & /*$store*/
        128 && to_number(input1.value) !== /*$store*/
        ctx2[7].mp4Bitrate) {
          set_input_value(
            input1,
            /*$store*/
            ctx2[7].mp4Bitrate
          );
        }
        const slidetoggle_changes = {};
        if (!updating_checked && dirty[0] & /*$store*/
        128) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$store*/
          ctx2[7].losslessWebp;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p10,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && input2_class_value !== (input2_class_value = "input " + /*inputClasses*/
        ctx2[5])) {
          attr(input2, "class", input2_class_value);
        }
        if (dirty[0] & /*$store*/
        128 && to_number(input2.value) !== /*$store*/
        ctx2[7].webpQuality) {
          set_input_value(
            input2,
            /*$store*/
            ctx2[7].webpQuality
          );
        }
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p12,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (dirty & /*Array*/
        0) {
          each_value_1 = ensure_array_like(Array.from({ length: 7 }, func));
          let i;
          for (i = 0; i < each_value_1.length; i += 1) {
            const child_ctx = get_each_context_1$1(ctx2, each_value_1, i);
            if (each_blocks_1[i]) {
              each_blocks_1[i].p(child_ctx, dirty);
            } else {
              each_blocks_1[i] = create_each_block_1$1(child_ctx);
              each_blocks_1[i].c();
              each_blocks_1[i].m(select0, null);
            }
          }
          for (; i < each_blocks_1.length; i += 1) {
            each_blocks_1[i].d(1);
          }
          each_blocks_1.length = each_value_1.length;
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && select0_class_value !== (select0_class_value = "select " + /*inputClasses*/
        ctx2[5])) {
          attr(select0, "class", select0_class_value);
        }
        if (dirty[0] & /*$store*/
        128) {
          select_option(
            select0,
            /*$store*/
            ctx2[7].webpMehtod
          );
        }
        if (!current || dirty[0] & /*border, rounded*/
        3 && ul1_class_value !== (ul1_class_value = "list " + /*border*/
        ctx2[0] + " " + /*rounded*/
        ctx2[1] + " [&:not(:last-child)]:*:py-4 [&:last-child]:*:pt-4")) {
          attr(ul1, "class", ul1_class_value);
        }
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p14,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (dirty & /*Array*/
        0) {
          each_value = ensure_array_like(Array.from({ length: 20 }, func_1));
          let i;
          for (i = 0; i < each_value.length; i += 1) {
            const child_ctx = get_each_context$2(ctx2, each_value, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block$2(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(select1, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value.length;
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && select1_class_value !== (select1_class_value = "select " + /*inputClasses*/
        ctx2[5])) {
          attr(select1, "class", select1_class_value);
        }
        if (dirty[0] & /*$store*/
        128) {
          select_option(
            select1,
            /*$store*/
            ctx2[7].gifQuality
          );
        }
        if (!current || dirty[0] & /*descriptionText*/
        4) {
          attr(
            p16,
            "class",
            /*descriptionText*/
            ctx2[2]
          );
        }
        if (!current || dirty[0] & /*inputClasses*/
        32 && input3_class_value !== (input3_class_value = "input " + /*inputClasses*/
        ctx2[5])) {
          attr(input3, "class", input3_class_value);
        }
        if (dirty[0] & /*$store*/
        128 && to_number(input3.value) !== /*$store*/
        ctx2[7].pngColor) {
          set_input_value(
            input3,
            /*$store*/
            ctx2[7].pngColor
          );
        }
        if (!current || dirty[0] & /*ulClasses*/
        64) {
          attr(
            ul2,
            "class",
            /*ulClasses*/
            ctx2[6]
          );
        }
        if (!current || dirty[0] & /*sectionSpace*/
        8) {
          attr(
            div6,
            "class",
            /*sectionSpace*/
            ctx2[3]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(radiogroup.$$.fragment, local);
        transition_in(slidetoggle.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radiogroup.$$.fragment, local);
        transition_out(slidetoggle.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div6);
        }
        destroy_component(radiogroup);
        destroy_component(slidetoggle);
        destroy_each(each_blocks_1, detaching);
        destroy_each(each_blocks, detaching);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  const func = (_, idx) => idx;
  const func_1 = (_, idx) => idx;
  function instance$7($$self, $$props, $$invalidate) {
    let ulClasses;
    let inputClasses;
    let $store;
    component_subscribe($$self, configStore, ($$value) => $$invalidate(7, $store = $$value));
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { descriptionText = "text-sm text-surface-400" } = $$props;
    let { inputRounded = "rounded-full" } = $$props;
    let { inputWidth = "w-32" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    function radioitem0_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function radioitem1_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function radioitem2_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function radioitem3_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function radioitem4_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function radioitem5_group_binding(value) {
      if ($$self.$$.not_equal($store.ugoiraFormat, value)) {
        $store.ugoiraFormat = value;
        configStore.set($store);
      }
    }
    function input0_input_handler() {
      $store.webmQuality = to_number(this.value);
      configStore.set($store);
    }
    function input1_input_handler() {
      $store.mp4Bitrate = to_number(this.value);
      configStore.set($store);
    }
    function slidetoggle_checked_binding(value) {
      if ($$self.$$.not_equal($store.losslessWebp, value)) {
        $store.losslessWebp = value;
        configStore.set($store);
      }
    }
    function input2_input_handler() {
      $store.webpQuality = to_number(this.value);
      configStore.set($store);
    }
    function select0_change_handler() {
      $store.webpMehtod = select_value(this);
      configStore.set($store);
    }
    function select1_change_handler() {
      $store.gifQuality = select_value(this);
      configStore.set($store);
    }
    function input3_input_handler() {
      $store.pngColor = to_number(this.value);
      configStore.set($store);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(26, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(8, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(0, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(9, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(10, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(1, rounded = $$new_props.rounded);
      if ("descriptionText" in $$new_props) $$invalidate(2, descriptionText = $$new_props.descriptionText);
      if ("inputRounded" in $$new_props) $$invalidate(11, inputRounded = $$new_props.inputRounded);
      if ("inputWidth" in $$new_props) $$invalidate(12, inputWidth = $$new_props.inputWidth);
      if ("sectionSpace" in $$new_props) $$invalidate(3, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(4, sectionTitle = $$new_props.sectionTitle);
    };
    $$self.$$.update = () => {
      $$invalidate(6, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*inputWidth, inputRounded*/
      6144) {
        $$invalidate(5, inputClasses = `${inputWidth} ${inputRounded} shrink-0`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      border,
      rounded,
      descriptionText,
      sectionSpace,
      sectionTitle,
      inputClasses,
      ulClasses,
      $store,
      bg,
      padding,
      margin,
      inputRounded,
      inputWidth,
      radioitem0_group_binding,
      radioitem1_group_binding,
      radioitem2_group_binding,
      radioitem3_group_binding,
      radioitem4_group_binding,
      radioitem5_group_binding,
      input0_input_handler,
      input1_input_handler,
      slidetoggle_checked_binding,
      input2_input_handler,
      select0_change_handler,
      select1_change_handler,
      input3_input_handler
    ];
  }
  class UgoiraConvert extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$7,
        create_fragment$7,
        safe_not_equal,
        {
          bg: 8,
          border: 0,
          padding: 9,
          margin: 10,
          rounded: 1,
          descriptionText: 2,
          inputRounded: 11,
          inputWidth: 12,
          sectionSpace: 3,
          sectionTitle: 4
        },
        null,
        [-1, -1]
      );
    }
  }
  function readHistoryFile(type, file) {
    return new Promise((resolve) => {
      if (file.type !== type) throw new Error("Invalid file");
      const reader = new FileReader();
      reader.readAsText(file);
      reader.onload = (readEvt) => {
        var _a;
        const text2 = (_a = readEvt.target) == null ? void 0 : _a.result;
        if (typeof text2 !== "string") throw new Error("Invalid file");
        const history2 = JSON.parse(text2);
        if (!(history2 instanceof Array)) throw new Error("Invalid file");
        resolve(history2);
      };
    });
  }
  function importJSON(file) {
    return readHistoryFile("application/json", file).then((data) => historyDb.import(data));
  }
  function exportAsJSON() {
    return historyDb.getAll().then((datas) => {
      const str = JSON.stringify(datas);
      const blob = new Blob([str], { type: "application/json" });
      const filename = `Pixiv Downloader_${location.hostname}_${(/* @__PURE__ */ new Date()).toLocaleString()}.json`;
      aDownload$1(blob, filename);
    });
  }
  function exportAsCSV() {
    return historyDb.generateCsv().then((csv) => {
      const filename = `Pixiv Downloader_${location.hostname}_${(/* @__PURE__ */ new Date()).toLocaleString()}.csv`;
      aDownload$1(csv, filename);
    });
  }
  function scheduleBackup() {
    const interval = config.get("historyBackupInterval");
    if (interval === HistoryBackupInterval.NEVER) return;
    const lastTimestamp = config.get("lastHistoryBackup");
    const timestamp = (/* @__PURE__ */ new Date()).getTime();
    if (!lastTimestamp || lastTimestamp + interval * 1e3 < timestamp) {
      exportAsJSON();
      config.set("lastHistoryBackup", timestamp);
    }
  }
  function useHistoryBackup() {
    return {
      importJSON,
      exportAsJSON,
      exportAsCSV,
      scheduleBackup
    };
  }
  function create_if_block_3$2(ctx) {
    let progressradial;
    let current;
    progressradial = new ProgressRadial({
      props: {
        stroke: 80,
        width: "w-5",
        meter: "stroke-primary-500",
        track: "stroke-primary-500/30"
      }
    });
    return {
      c() {
        create_component(progressradial.$$.fragment);
      },
      m(target, anchor) {
        mount_component(progressradial, target, anchor);
        current = true;
      },
      i(local) {
        if (current) return;
        transition_in(progressradial.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(progressradial.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(progressradial, detaching);
      }
    };
  }
  function create_if_block_2$2(ctx) {
    let progressradial;
    let current;
    progressradial = new ProgressRadial({
      props: {
        stroke: 80,
        width: "w-5",
        meter: "stroke-primary-500",
        track: "stroke-primary-500/30"
      }
    });
    return {
      c() {
        create_component(progressradial.$$.fragment);
      },
      m(target, anchor) {
        mount_component(progressradial, target, anchor);
        current = true;
      },
      i(local) {
        if (current) return;
        transition_in(progressradial.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(progressradial.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(progressradial, detaching);
      }
    };
  }
  function create_if_block_1$4(ctx) {
    let progressradial;
    let current;
    progressradial = new ProgressRadial({
      props: {
        stroke: 80,
        width: "w-5",
        meter: "stroke-primary-500",
        track: "stroke-primary-500/30"
      }
    });
    return {
      c() {
        create_component(progressradial.$$.fragment);
      },
      m(target, anchor) {
        mount_component(progressradial, target, anchor);
        current = true;
      },
      i(local) {
        if (current) return;
        transition_in(progressradial.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(progressradial.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(progressradial, detaching);
      }
    };
  }
  function create_default_slot$3(ctx) {
    let t0;
    let span;
    let current;
    let if_block = (
      /*$importPending*/
      ctx[7] && create_if_block_1$4()
    );
    return {
      c() {
        if (if_block) if_block.c();
        t0 = space();
        span = element("span");
        span.textContent = `${t("setting.history.button.import")}`;
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, t0, anchor);
        insert(target, span, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        if (
          /*$importPending*/
          ctx2[7]
        ) {
          if (if_block) {
            if (dirty[0] & /*$importPending*/
            128) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block_1$4();
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(t0.parentNode, t0);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(span);
        }
        if (if_block) if_block.d(detaching);
      }
    };
  }
  function create_if_block$5(ctx) {
    let progressradial;
    let current;
    progressradial = new ProgressRadial({
      props: {
        stroke: 80,
        width: "w-5",
        meter: "stroke-primary-500",
        track: "stroke-primary-500/30"
      }
    });
    return {
      c() {
        create_component(progressradial.$$.fragment);
      },
      m(target, anchor) {
        mount_component(progressradial, target, anchor);
        current = true;
      },
      i(local) {
        if (current) return;
        transition_in(progressradial.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(progressradial.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(progressradial, detaching);
      }
    };
  }
  function create_fragment$6(ctx) {
    let div;
    let section0;
    let p0;
    let t0_value = t("setting.history.label.scheduled_backups") + "";
    let t0;
    let t1;
    let ul0;
    let li0;
    let p1;
    let t3;
    let select;
    let option0;
    let option1;
    let option2;
    let option3;
    let select_class_value;
    let t8;
    let section1;
    let p2;
    let t9_value = t("setting.history.label.export") + "";
    let t9;
    let t10;
    let ul1;
    let li1;
    let p3;
    let t12;
    let button0;
    let t13;
    let span0;
    let t15;
    let li2;
    let p4;
    let t17;
    let button1;
    let t18;
    let span1;
    let t20;
    let section2;
    let p5;
    let t21_value = t("setting.history.label.import") + "";
    let t21;
    let t22;
    let ul2;
    let li3;
    let p6;
    let t24;
    let filebutton;
    let updating_disabled;
    let t25;
    let section3;
    let p7;
    let t26_value = t("setting.history.label.clear") + "";
    let t26;
    let t27;
    let ul3;
    let li4;
    let p8;
    let t29;
    let button2;
    let t30;
    let span2;
    let current;
    let mounted;
    let dispose;
    let if_block0 = (
      /*$exportJsonPending*/
      ctx[5] && create_if_block_3$2()
    );
    let if_block1 = (
      /*$exportCsvPending*/
      ctx[6] && create_if_block_2$2()
    );
    function filebutton_disabled_binding(value) {
      ctx[25](value);
    }
    let filebutton_props = {
      name: "import-file",
      accept: ".json",
      $$slots: { default: [create_default_slot$3] },
      $$scope: { ctx }
    };
    if (
      /*$importPending*/
      ctx[7] !== void 0
    ) {
      filebutton_props.disabled = /*$importPending*/
      ctx[7];
    }
    filebutton = new FileButton({ props: filebutton_props });
    binding_callbacks.push(() => bind(filebutton, "disabled", filebutton_disabled_binding));
    filebutton.$on(
      "change",
      /*wrapImportFromJSON*/
      ctx[10]
    );
    let if_block2 = (
      /*$clearPending*/
      ctx[8] && create_if_block$5()
    );
    return {
      c() {
        div = element("div");
        section0 = element("section");
        p0 = element("p");
        t0 = text(t0_value);
        t1 = space();
        ul0 = element("ul");
        li0 = element("li");
        p1 = element("p");
        p1.textContent = `${t("setting.history.options.scheduled_backups")}`;
        t3 = space();
        select = element("select");
        option0 = element("option");
        option0.textContent = `${t("setting.history.select.backup_interval_never")}`;
        option1 = element("option");
        option1.textContent = `${t("setting.history.select.backup_interval_every_day")}`;
        option2 = element("option");
        option2.textContent = `${t("setting.history.select.backup_interval_every_7_day")}`;
        option3 = element("option");
        option3.textContent = `${t("setting.history.select.backup_interval_every_30_day")}`;
        t8 = space();
        section1 = element("section");
        p2 = element("p");
        t9 = text(t9_value);
        t10 = space();
        ul1 = element("ul");
        li1 = element("li");
        p3 = element("p");
        p3.textContent = `${t("setting.history.options.export_as_json")}`;
        t12 = space();
        button0 = element("button");
        if (if_block0) if_block0.c();
        t13 = space();
        span0 = element("span");
        span0.textContent = `${t("setting.history.button.export")}`;
        t15 = space();
        li2 = element("li");
        p4 = element("p");
        p4.textContent = `${t("setting.history.options.export_as_csv")}`;
        t17 = space();
        button1 = element("button");
        if (if_block1) if_block1.c();
        t18 = space();
        span1 = element("span");
        span1.textContent = `${t("setting.history.button.export")}`;
        t20 = space();
        section2 = element("section");
        p5 = element("p");
        t21 = text(t21_value);
        t22 = space();
        ul2 = element("ul");
        li3 = element("li");
        p6 = element("p");
        p6.textContent = `${t("setting.history.options.import_json")}`;
        t24 = space();
        create_component(filebutton.$$.fragment);
        t25 = space();
        section3 = element("section");
        p7 = element("p");
        t26 = text(t26_value);
        t27 = space();
        ul3 = element("ul");
        li4 = element("li");
        p8 = element("p");
        p8.textContent = `${t("setting.history.options.clear_history")}`;
        t29 = space();
        button2 = element("button");
        if (if_block2) if_block2.c();
        t30 = space();
        span2 = element("span");
        span2.textContent = `${t("setting.history.button.clear")}`;
        attr(
          p0,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        attr(p1, "class", "flex-auto");
        option0.__value = HistoryBackupInterval.NEVER;
        set_input_value(option0, option0.__value);
        option1.__value = HistoryBackupInterval.EVERY_DAY;
        set_input_value(option1, option1.__value);
        option2.__value = HistoryBackupInterval.EVERY_7_DAY;
        set_input_value(option2, option2.__value);
        option3.__value = HistoryBackupInterval.EVERY_30_DAY;
        set_input_value(option3, option3.__value);
        attr(select, "class", select_class_value = "select " + /*inputClasses*/
        ctx[2]);
        if (
          /*$configStore*/
          ctx[4].historyBackupInterval === void 0
        ) add_render_callback(() => (
          /*select_change_handler*/
          ctx[24].call(select)
        ));
        attr(
          ul0,
          "class",
          /*ulClasses*/
          ctx[3]
        );
        attr(
          p2,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        attr(p3, "class", "flex-auto");
        button0.disabled = /*$exportJsonPending*/
        ctx[5];
        attr(button0, "class", "btn variant-filled");
        attr(p4, "class", "flex-auto");
        button1.disabled = /*$exportCsvPending*/
        ctx[6];
        attr(button1, "class", "btn variant-filled");
        attr(
          ul1,
          "class",
          /*ulClasses*/
          ctx[3]
        );
        attr(
          p5,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        attr(p6, "class", "flex-auto");
        attr(
          ul2,
          "class",
          /*ulClasses*/
          ctx[3]
        );
        attr(
          p7,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        attr(p8, "class", "flex-auto");
        button2.disabled = /*$clearPending*/
        ctx[8];
        attr(button2, "class", "btn variant-filled");
        attr(
          ul3,
          "class",
          /*ulClasses*/
          ctx[3]
        );
        attr(
          div,
          "class",
          /*sectionSpace*/
          ctx[0]
        );
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, section0);
        append(section0, p0);
        append(p0, t0);
        append(section0, t1);
        append(section0, ul0);
        append(ul0, li0);
        append(li0, p1);
        append(li0, t3);
        append(li0, select);
        append(select, option0);
        append(select, option1);
        append(select, option2);
        append(select, option3);
        select_option(
          select,
          /*$configStore*/
          ctx[4].historyBackupInterval,
          true
        );
        append(div, t8);
        append(div, section1);
        append(section1, p2);
        append(p2, t9);
        append(section1, t10);
        append(section1, ul1);
        append(ul1, li1);
        append(li1, p3);
        append(li1, t12);
        append(li1, button0);
        if (if_block0) if_block0.m(button0, null);
        append(button0, t13);
        append(button0, span0);
        append(ul1, t15);
        append(ul1, li2);
        append(li2, p4);
        append(li2, t17);
        append(li2, button1);
        if (if_block1) if_block1.m(button1, null);
        append(button1, t18);
        append(button1, span1);
        append(div, t20);
        append(div, section2);
        append(section2, p5);
        append(p5, t21);
        append(section2, t22);
        append(section2, ul2);
        append(ul2, li3);
        append(li3, p6);
        append(li3, t24);
        mount_component(filebutton, li3, null);
        append(div, t25);
        append(div, section3);
        append(section3, p7);
        append(p7, t26);
        append(section3, t27);
        append(section3, ul3);
        append(ul3, li4);
        append(li4, p8);
        append(li4, t29);
        append(li4, button2);
        if (if_block2) if_block2.m(button2, null);
        append(button2, t30);
        append(button2, span2);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              select,
              "change",
              /*select_change_handler*/
              ctx[24]
            ),
            listen(
              button0,
              "click",
              /*wrapExportAsJSON*/
              ctx[14]
            ),
            listen(
              button1,
              "click",
              /*wrapExportAsCSV*/
              ctx[16]
            ),
            listen(
              button2,
              "click",
              /*wrapClearDb*/
              ctx[12]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*sectionTitle*/
        2) {
          attr(
            p0,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        if (!current || dirty[0] & /*inputClasses*/
        4 && select_class_value !== (select_class_value = "select " + /*inputClasses*/
        ctx2[2])) {
          attr(select, "class", select_class_value);
        }
        if (dirty[0] & /*$configStore*/
        16) {
          select_option(
            select,
            /*$configStore*/
            ctx2[4].historyBackupInterval
          );
        }
        if (!current || dirty[0] & /*ulClasses*/
        8) {
          attr(
            ul0,
            "class",
            /*ulClasses*/
            ctx2[3]
          );
        }
        if (!current || dirty[0] & /*sectionTitle*/
        2) {
          attr(
            p2,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        if (
          /*$exportJsonPending*/
          ctx2[5]
        ) {
          if (if_block0) {
            if (dirty[0] & /*$exportJsonPending*/
            32) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_3$2();
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(button0, t13);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*$exportJsonPending*/
        32) {
          button0.disabled = /*$exportJsonPending*/
          ctx2[5];
        }
        if (
          /*$exportCsvPending*/
          ctx2[6]
        ) {
          if (if_block1) {
            if (dirty[0] & /*$exportCsvPending*/
            64) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_2$2();
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(button1, t18);
          }
        } else if (if_block1) {
          group_outros();
          transition_out(if_block1, 1, 1, () => {
            if_block1 = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*$exportCsvPending*/
        64) {
          button1.disabled = /*$exportCsvPending*/
          ctx2[6];
        }
        if (!current || dirty[0] & /*ulClasses*/
        8) {
          attr(
            ul1,
            "class",
            /*ulClasses*/
            ctx2[3]
          );
        }
        if (!current || dirty[0] & /*sectionTitle*/
        2) {
          attr(
            p5,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        const filebutton_changes = {};
        if (dirty[0] & /*$importPending*/
        128 | dirty[1] & /*$$scope*/
        4) {
          filebutton_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_disabled && dirty[0] & /*$importPending*/
        128) {
          updating_disabled = true;
          filebutton_changes.disabled = /*$importPending*/
          ctx2[7];
          add_flush_callback(() => updating_disabled = false);
        }
        filebutton.$set(filebutton_changes);
        if (!current || dirty[0] & /*ulClasses*/
        8) {
          attr(
            ul2,
            "class",
            /*ulClasses*/
            ctx2[3]
          );
        }
        if (!current || dirty[0] & /*sectionTitle*/
        2) {
          attr(
            p7,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        if (
          /*$clearPending*/
          ctx2[8]
        ) {
          if (if_block2) {
            if (dirty[0] & /*$clearPending*/
            256) {
              transition_in(if_block2, 1);
            }
          } else {
            if_block2 = create_if_block$5();
            if_block2.c();
            transition_in(if_block2, 1);
            if_block2.m(button2, t30);
          }
        } else if (if_block2) {
          group_outros();
          transition_out(if_block2, 1, 1, () => {
            if_block2 = null;
          });
          check_outros();
        }
        if (!current || dirty[0] & /*$clearPending*/
        256) {
          button2.disabled = /*$clearPending*/
          ctx2[8];
        }
        if (!current || dirty[0] & /*ulClasses*/
        8) {
          attr(
            ul3,
            "class",
            /*ulClasses*/
            ctx2[3]
          );
        }
        if (!current || dirty[0] & /*sectionSpace*/
        1) {
          attr(
            div,
            "class",
            /*sectionSpace*/
            ctx2[0]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(if_block1);
        transition_in(filebutton.$$.fragment, local);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(if_block1);
        transition_out(filebutton.$$.fragment, local);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        destroy_component(filebutton);
        if (if_block2) if_block2.d();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function instance$6($$self, $$props, $$invalidate) {
    let ulClasses;
    let inputClasses;
    let $configStore;
    let $exportJsonPending;
    let $exportCsvPending;
    let $importPending;
    let $clearPending;
    component_subscribe($$self, configStore, ($$value) => $$invalidate(4, $configStore = $$value));
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { inputRounded = "rounded-full" } = $$props;
    let { inputWidth = "w-32" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    function usePendingButton(fn) {
      const store = writable(false);
      const wrapFn = async (...args) => {
        store.set(true);
        const result = await fn(...args);
        store.set(false);
        return result;
      };
      return { store, wrapFn };
    }
    async function importFromJSON(evt) {
      var _a;
      const file = (_a = evt.currentTarget.files) == null ? void 0 : _a[0];
      if (!file) return;
      try {
        await importJSON2(file);
      } catch (error) {
        logger.error(error);
        alert(error);
      }
    }
    function clearDb() {
      const isConfirm = confirm(t("setting.history.text.confirm_clear_history"));
      if (!isConfirm) return;
      return historyDb.clear();
    }
    const { importJSON: importJSON2, exportAsJSON: exportAsJSON2, exportAsCSV: exportAsCSV2 } = useHistoryBackup();
    const { store: importPending, wrapFn: wrapImportFromJSON } = usePendingButton(importFromJSON);
    component_subscribe($$self, importPending, (value) => $$invalidate(7, $importPending = value));
    const { store: clearPending, wrapFn: wrapClearDb } = usePendingButton(clearDb);
    component_subscribe($$self, clearPending, (value) => $$invalidate(8, $clearPending = value));
    const { store: exportJsonPending, wrapFn: wrapExportAsJSON } = usePendingButton(exportAsJSON2);
    component_subscribe($$self, exportJsonPending, (value) => $$invalidate(5, $exportJsonPending = value));
    const { store: exportCsvPending, wrapFn: wrapExportAsCSV } = usePendingButton(exportAsCSV2);
    component_subscribe($$self, exportCsvPending, (value) => $$invalidate(6, $exportCsvPending = value));
    function select_change_handler() {
      $configStore.historyBackupInterval = select_value(this);
      configStore.set($configStore);
    }
    function filebutton_disabled_binding(value) {
      $importPending = value;
      importPending.set($importPending);
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(32, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(17, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(18, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(19, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(20, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(21, rounded = $$new_props.rounded);
      if ("inputRounded" in $$new_props) $$invalidate(22, inputRounded = $$new_props.inputRounded);
      if ("inputWidth" in $$new_props) $$invalidate(23, inputWidth = $$new_props.inputWidth);
      if ("sectionSpace" in $$new_props) $$invalidate(0, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(1, sectionTitle = $$new_props.sectionTitle);
    };
    $$self.$$.update = () => {
      $$invalidate(3, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty[0] & /*inputWidth, inputRounded*/
      12582912) {
        $$invalidate(2, inputClasses = `${inputWidth} ${inputRounded} shrink-0`);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      sectionSpace,
      sectionTitle,
      inputClasses,
      ulClasses,
      $configStore,
      $exportJsonPending,
      $exportCsvPending,
      $importPending,
      $clearPending,
      importPending,
      wrapImportFromJSON,
      clearPending,
      wrapClearDb,
      exportJsonPending,
      wrapExportAsJSON,
      exportCsvPending,
      wrapExportAsCSV,
      bg,
      border,
      padding,
      margin,
      rounded,
      inputRounded,
      inputWidth,
      select_change_handler,
      filebutton_disabled_binding
    ];
  }
  class DownloadHistory extends SvelteComponent {
    constructor(options) {
      super();
      init(
        this,
        options,
        instance$6,
        create_fragment$6,
        safe_not_equal,
        {
          bg: 17,
          border: 18,
          padding: 19,
          margin: 20,
          rounded: 21,
          inputRounded: 22,
          inputWidth: 23,
          sectionSpace: 0,
          sectionTitle: 1
        },
        null,
        [-1, -1]
      );
    }
  }
  function create_default_slot_3$2(ctx) {
    let div1;
    let p;
    let t1;
    let div0;
    let t2;
    let t3;
    let t4;
    return {
      c() {
        div1 = element("div");
        p = element("p");
        p.textContent = `${t("setting.button_position.options.horizon_position")}`;
        t1 = space();
        div0 = element("div");
        t2 = text(
          /*btnLeft*/
          ctx[3]
        );
        t3 = text(" / ");
        t4 = text(max);
        attr(div0, "class", "text-xs");
        attr(div1, "class", "flex justify-between items-center");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, p);
        append(div1, t1);
        append(div1, div0);
        append(div0, t2);
        append(div0, t3);
        append(div0, t4);
      },
      p(ctx2, dirty) {
        if (dirty & /*btnLeft*/
        8) set_data(
          t2,
          /*btnLeft*/
          ctx2[3]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
      }
    };
  }
  function create_default_slot_2$2(ctx) {
    let div1;
    let p;
    let t1;
    let div0;
    let t2;
    let t3;
    let t4;
    return {
      c() {
        div1 = element("div");
        p = element("p");
        p.textContent = `${t("setting.button_position.options.vertical_position")}`;
        t1 = space();
        div0 = element("div");
        t2 = text(
          /*btnTop*/
          ctx[4]
        );
        t3 = text(" / ");
        t4 = text(max);
        attr(div0, "class", "text-xs");
        attr(div1, "class", "flex justify-between items-center");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, p);
        append(div1, t1);
        append(div1, div0);
        append(div0, t2);
        append(div0, t3);
        append(div0, t4);
      },
      p(ctx2, dirty) {
        if (dirty & /*btnTop*/
        16) set_data(
          t2,
          /*btnTop*/
          ctx2[4]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
      }
    };
  }
  function create_if_block$4(ctx) {
    let section;
    let p;
    let t0_value = t("setting.button_position.label.my_bookmark") + "";
    let t0;
    let t1;
    let ul;
    let li;
    let rangeslider0;
    let updating_value;
    let t2;
    let rangeslider1;
    let updating_value_1;
    let current;
    function rangeslider0_value_binding_1(value) {
      ctx[19](value);
    }
    let rangeslider0_props = {
      name: "pdl-bookmark-btn-left",
      step,
      max,
      ticked: true,
      class: "flex-grow",
      $$slots: { default: [create_default_slot_1$2] },
      $$scope: { ctx }
    };
    if (
      /*bookmarkBtnLeft*/
      ctx[5] !== void 0
    ) {
      rangeslider0_props.value = /*bookmarkBtnLeft*/
      ctx[5];
    }
    rangeslider0 = new RangeSlider({ props: rangeslider0_props });
    binding_callbacks.push(() => bind(rangeslider0, "value", rangeslider0_value_binding_1));
    rangeslider0.$on(
      "change",
      /*change_handler_2*/
      ctx[20]
    );
    function rangeslider1_value_binding_1(value) {
      ctx[21](value);
    }
    let rangeslider1_props = {
      name: "pdl-bookmark-btn-top",
      step,
      max,
      ticked: true,
      class: "flex-grow",
      $$slots: { default: [create_default_slot$2] },
      $$scope: { ctx }
    };
    if (
      /*bookmarkBtnTop*/
      ctx[6] !== void 0
    ) {
      rangeslider1_props.value = /*bookmarkBtnTop*/
      ctx[6];
    }
    rangeslider1 = new RangeSlider({ props: rangeslider1_props });
    binding_callbacks.push(() => bind(rangeslider1, "value", rangeslider1_value_binding_1));
    rangeslider1.$on(
      "change",
      /*change_handler_3*/
      ctx[22]
    );
    return {
      c() {
        section = element("section");
        p = element("p");
        t0 = text(t0_value);
        t1 = space();
        ul = element("ul");
        li = element("li");
        create_component(rangeslider0.$$.fragment);
        t2 = space();
        create_component(rangeslider1.$$.fragment);
        attr(
          p,
          "class",
          /*sectionTitle*/
          ctx[2]
        );
        attr(li, "class", "flex-col !items-stretch md:flex-row md:!items-baseline gap-4 *:!m-0");
        attr(
          ul,
          "class",
          /*ulClasses*/
          ctx[8]
        );
      },
      m(target, anchor) {
        insert(target, section, anchor);
        append(section, p);
        append(p, t0);
        append(section, t1);
        append(section, ul);
        append(ul, li);
        mount_component(rangeslider0, li, null);
        append(li, t2);
        mount_component(rangeslider1, li, null);
        current = true;
      },
      p(ctx2, dirty) {
        if (!current || dirty & /*sectionTitle*/
        4) {
          attr(
            p,
            "class",
            /*sectionTitle*/
            ctx2[2]
          );
        }
        const rangeslider0_changes = {};
        if (dirty & /*$$scope, bookmarkBtnLeft*/
        33554464) {
          rangeslider0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_value && dirty & /*bookmarkBtnLeft*/
        32) {
          updating_value = true;
          rangeslider0_changes.value = /*bookmarkBtnLeft*/
          ctx2[5];
          add_flush_callback(() => updating_value = false);
        }
        rangeslider0.$set(rangeslider0_changes);
        const rangeslider1_changes = {};
        if (dirty & /*$$scope, bookmarkBtnTop*/
        33554496) {
          rangeslider1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_value_1 && dirty & /*bookmarkBtnTop*/
        64) {
          updating_value_1 = true;
          rangeslider1_changes.value = /*bookmarkBtnTop*/
          ctx2[6];
          add_flush_callback(() => updating_value_1 = false);
        }
        rangeslider1.$set(rangeslider1_changes);
        if (!current || dirty & /*ulClasses*/
        256) {
          attr(
            ul,
            "class",
            /*ulClasses*/
            ctx2[8]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(rangeslider0.$$.fragment, local);
        transition_in(rangeslider1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(rangeslider0.$$.fragment, local);
        transition_out(rangeslider1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(section);
        }
        destroy_component(rangeslider0);
        destroy_component(rangeslider1);
      }
    };
  }
  function create_default_slot_1$2(ctx) {
    let div1;
    let p;
    let t1;
    let div0;
    let t2;
    let t3;
    let t4;
    return {
      c() {
        div1 = element("div");
        p = element("p");
        p.textContent = `${t("setting.button_position.options.horizon_position")}`;
        t1 = space();
        div0 = element("div");
        t2 = text(
          /*bookmarkBtnLeft*/
          ctx[5]
        );
        t3 = text(" / ");
        t4 = text(max);
        attr(div0, "class", "text-xs");
        attr(div1, "class", "flex justify-between items-center");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, p);
        append(div1, t1);
        append(div1, div0);
        append(div0, t2);
        append(div0, t3);
        append(div0, t4);
      },
      p(ctx2, dirty) {
        if (dirty & /*bookmarkBtnLeft*/
        32) set_data(
          t2,
          /*bookmarkBtnLeft*/
          ctx2[5]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
      }
    };
  }
  function create_default_slot$2(ctx) {
    let div1;
    let p;
    let t1;
    let div0;
    let t2;
    let t3;
    let t4;
    return {
      c() {
        div1 = element("div");
        p = element("p");
        p.textContent = `${t("setting.button_position.options.vertical_position")}`;
        t1 = space();
        div0 = element("div");
        t2 = text(
          /*bookmarkBtnTop*/
          ctx[6]
        );
        t3 = text(" / ");
        t4 = text(max);
        attr(div0, "class", "text-xs");
        attr(div1, "class", "flex justify-between items-center");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, p);
        append(div1, t1);
        append(div1, div0);
        append(div0, t2);
        append(div0, t3);
        append(div0, t4);
      },
      p(ctx2, dirty) {
        if (dirty & /*bookmarkBtnTop*/
        64) set_data(
          t2,
          /*bookmarkBtnTop*/
          ctx2[6]
        );
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
      }
    };
  }
  function create_fragment$5(ctx) {
    let div2;
    let div1;
    let div0;
    let div0_class_value;
    let t0;
    let section;
    let p;
    let t1_value = t("setting.button_position.label.common") + "";
    let t1;
    let t2;
    let ul;
    let li;
    let rangeslider0;
    let updating_value;
    let t3;
    let rangeslider1;
    let updating_value_1;
    let t4;
    let show_if = env.isPixiv();
    let current;
    function rangeslider0_value_binding(value) {
      ctx[15](value);
    }
    let rangeslider0_props = {
      name: "pdl-btn-left",
      step,
      max,
      ticked: true,
      class: "flex-grow",
      $$slots: { default: [create_default_slot_3$2] },
      $$scope: { ctx }
    };
    if (
      /*btnLeft*/
      ctx[3] !== void 0
    ) {
      rangeslider0_props.value = /*btnLeft*/
      ctx[3];
    }
    rangeslider0 = new RangeSlider({ props: rangeslider0_props });
    binding_callbacks.push(() => bind(rangeslider0, "value", rangeslider0_value_binding));
    rangeslider0.$on(
      "change",
      /*change_handler*/
      ctx[16]
    );
    function rangeslider1_value_binding(value) {
      ctx[17](value);
    }
    let rangeslider1_props = {
      name: "pdl-btn-top",
      step,
      max,
      ticked: true,
      class: "flex-grow",
      $$slots: { default: [create_default_slot_2$2] },
      $$scope: { ctx }
    };
    if (
      /*btnTop*/
      ctx[4] !== void 0
    ) {
      rangeslider1_props.value = /*btnTop*/
      ctx[4];
    }
    rangeslider1 = new RangeSlider({ props: rangeslider1_props });
    binding_callbacks.push(() => bind(rangeslider1, "value", rangeslider1_value_binding));
    rangeslider1.$on(
      "change",
      /*change_handler_1*/
      ctx[18]
    );
    let if_block = show_if && create_if_block$4(ctx);
    return {
      c() {
        div2 = element("div");
        div1 = element("div");
        div0 = element("div");
        t0 = space();
        section = element("section");
        p = element("p");
        t1 = text(t1_value);
        t2 = space();
        ul = element("ul");
        li = element("li");
        create_component(rangeslider0.$$.fragment);
        t3 = space();
        create_component(rangeslider1.$$.fragment);
        t4 = space();
        if (if_block) if_block.c();
        attr(div0, "class", div0_class_value = "w-48 h-48 backdrop-blur-sm rounded-lg relative " + /*bg*/
        ctx[0]);
        attr(div1, "class", "flex items-center justify-center");
        attr(
          p,
          "class",
          /*sectionTitle*/
          ctx[2]
        );
        attr(li, "class", "flex-col !items-stretch md:flex-row md:!items-baseline gap-4 *:!m-0");
        attr(
          ul,
          "class",
          /*ulClasses*/
          ctx[8]
        );
        attr(
          div2,
          "class",
          /*sectionSpace*/
          ctx[1]
        );
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, div1);
        append(div1, div0);
        ctx[14](div0);
        append(div2, t0);
        append(div2, section);
        append(section, p);
        append(p, t1);
        append(section, t2);
        append(section, ul);
        append(ul, li);
        mount_component(rangeslider0, li, null);
        append(li, t3);
        mount_component(rangeslider1, li, null);
        append(div2, t4);
        if (if_block) if_block.m(div2, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        if (!current || dirty & /*bg*/
        1 && div0_class_value !== (div0_class_value = "w-48 h-48 backdrop-blur-sm rounded-lg relative " + /*bg*/
        ctx2[0])) {
          attr(div0, "class", div0_class_value);
        }
        if (!current || dirty & /*sectionTitle*/
        4) {
          attr(
            p,
            "class",
            /*sectionTitle*/
            ctx2[2]
          );
        }
        const rangeslider0_changes = {};
        if (dirty & /*$$scope, btnLeft*/
        33554440) {
          rangeslider0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_value && dirty & /*btnLeft*/
        8) {
          updating_value = true;
          rangeslider0_changes.value = /*btnLeft*/
          ctx2[3];
          add_flush_callback(() => updating_value = false);
        }
        rangeslider0.$set(rangeslider0_changes);
        const rangeslider1_changes = {};
        if (dirty & /*$$scope, btnTop*/
        33554448) {
          rangeslider1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_value_1 && dirty & /*btnTop*/
        16) {
          updating_value_1 = true;
          rangeslider1_changes.value = /*btnTop*/
          ctx2[4];
          add_flush_callback(() => updating_value_1 = false);
        }
        rangeslider1.$set(rangeslider1_changes);
        if (!current || dirty & /*ulClasses*/
        256) {
          attr(
            ul,
            "class",
            /*ulClasses*/
            ctx2[8]
          );
        }
        if (show_if) if_block.p(ctx2, dirty);
        if (!current || dirty & /*sectionSpace*/
        2) {
          attr(
            div2,
            "class",
            /*sectionSpace*/
            ctx2[1]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(rangeslider0.$$.fragment, local);
        transition_in(rangeslider1.$$.fragment, local);
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(rangeslider0.$$.fragment, local);
        transition_out(rangeslider1.$$.fragment, local);
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        ctx[14](null);
        destroy_component(rangeslider0);
        destroy_component(rangeslider1);
        if (if_block) if_block.d();
      }
    };
  }
  const max = 100;
  const step = 4;
  function changeCssProp(key, value) {
    document.documentElement.style.setProperty(key, String(value));
  }
  function instance$5($$self, $$props, $$invalidate) {
    let ulClasses;
    let $store;
    component_subscribe($$self, configStore, ($$value) => $$invalidate(23, $store = $$value));
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    let btnLeft = $store["pdl-btn-left"];
    let btnTop = $store["pdl-btn-top"];
    let bookmarkBtnLeft = $store["pdl-btn-self-bookmark-left"];
    let bookmarkBtnTop = $store["pdl-btn-self-bookmark-top"];
    function updateBtnPosConfig(key, val) {
      set_store_value(configStore, $store[key] = val, $store);
    }
    let buttonContainer;
    onMount(() => {
      const sampleBtn = new ThumbnailButton({ id: "0", onClick: () => void 0 });
      sampleBtn.setAttribute("disabled", "");
      buttonContainer.appendChild(sampleBtn);
      if (!env.isPixiv()) return;
      const sampleBookmarkBtn = new ThumbnailButton({
        id: "0",
        type: ThumbnailBtnType.PixivMyBookmark,
        onClick: () => void 0
      });
      sampleBookmarkBtn.setAttribute("disabled", "");
      buttonContainer.appendChild(sampleBookmarkBtn);
    });
    function div0_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        buttonContainer = $$value;
        $$invalidate(7, buttonContainer);
      });
    }
    function rangeslider0_value_binding(value) {
      btnLeft = value;
      $$invalidate(3, btnLeft);
    }
    const change_handler = () => updateBtnPosConfig("pdl-btn-left", btnLeft);
    function rangeslider1_value_binding(value) {
      btnTop = value;
      $$invalidate(4, btnTop);
    }
    const change_handler_1 = () => updateBtnPosConfig("pdl-btn-top", btnTop);
    function rangeslider0_value_binding_1(value) {
      bookmarkBtnLeft = value;
      $$invalidate(5, bookmarkBtnLeft);
    }
    const change_handler_2 = () => updateBtnPosConfig("pdl-btn-self-bookmark-left", bookmarkBtnLeft);
    function rangeslider1_value_binding_1(value) {
      bookmarkBtnTop = value;
      $$invalidate(6, bookmarkBtnTop);
    }
    const change_handler_3 = () => updateBtnPosConfig("pdl-btn-self-bookmark-top", bookmarkBtnTop);
    $$self.$$set = ($$new_props) => {
      $$invalidate(24, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(0, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(10, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(11, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(12, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(13, rounded = $$new_props.rounded);
      if ("sectionSpace" in $$new_props) $$invalidate(1, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(2, sectionTitle = $$new_props.sectionTitle);
    };
    $$self.$$.update = () => {
      $$invalidate(8, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
      if ($$self.$$.dirty & /*btnLeft*/
      8) {
        changeCssProp("--pdl-btn-left", btnLeft);
      }
      if ($$self.$$.dirty & /*btnTop*/
      16) {
        changeCssProp("--pdl-btn-top", btnTop);
      }
      if ($$self.$$.dirty & /*bookmarkBtnLeft*/
      32) {
        changeCssProp("--pdl-btn-self-bookmark-left", bookmarkBtnLeft);
      }
      if ($$self.$$.dirty & /*bookmarkBtnTop*/
      64) {
        changeCssProp("--pdl-btn-self-bookmark-top", bookmarkBtnTop);
      }
    };
    $$props = exclude_internal_props($$props);
    return [
      bg,
      sectionSpace,
      sectionTitle,
      btnLeft,
      btnTop,
      bookmarkBtnLeft,
      bookmarkBtnTop,
      buttonContainer,
      ulClasses,
      updateBtnPosConfig,
      border,
      padding,
      margin,
      rounded,
      div0_binding,
      rangeslider0_value_binding,
      change_handler,
      rangeslider1_value_binding,
      change_handler_1,
      rangeslider0_value_binding_1,
      change_handler_2,
      rangeslider1_value_binding_1,
      change_handler_3
    ];
  }
  class BtnPosition extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$5, create_fragment$5, safe_not_equal, {
        bg: 0,
        border: 10,
        padding: 11,
        margin: 12,
        rounded: 13,
        sectionSpace: 1,
        sectionTitle: 2
      });
    }
  }
  function create_if_block_3$1(ctx) {
    let li0;
    let p0;
    let t1;
    let slidetoggle0;
    let updating_checked;
    let t2;
    let li1;
    let p1;
    let t4;
    let slidetoggle1;
    let updating_checked_1;
    let current;
    function slidetoggle0_checked_binding(value) {
      ctx[11](value);
    }
    let slidetoggle0_props = { name: "bundle-illusts", size: "sm" };
    if (
      /*$store*/
      ctx[6].bundleIllusts !== void 0
    ) {
      slidetoggle0_props.checked = /*$store*/
      ctx[6].bundleIllusts;
    }
    slidetoggle0 = new SlideToggle({ props: slidetoggle0_props });
    binding_callbacks.push(() => bind(slidetoggle0, "checked", slidetoggle0_checked_binding));
    function slidetoggle1_checked_binding(value) {
      ctx[12](value);
    }
    let slidetoggle1_props = { name: "bundle-manga", size: "sm" };
    if (
      /*$store*/
      ctx[6].bundleManga !== void 0
    ) {
      slidetoggle1_props.checked = /*$store*/
      ctx[6].bundleManga;
    }
    slidetoggle1 = new SlideToggle({ props: slidetoggle1_props });
    binding_callbacks.push(() => bind(slidetoggle1, "checked", slidetoggle1_checked_binding));
    return {
      c() {
        li0 = element("li");
        p0 = element("p");
        p0.textContent = `${t("setting.others.options.bundle_multipage_illust")}`;
        t1 = space();
        create_component(slidetoggle0.$$.fragment);
        t2 = space();
        li1 = element("li");
        p1 = element("p");
        p1.textContent = `${t("setting.others.options.bundle_manga")}`;
        t4 = space();
        create_component(slidetoggle1.$$.fragment);
        attr(p0, "class", "flex-auto");
        attr(p1, "class", "flex-auto");
      },
      m(target, anchor) {
        insert(target, li0, anchor);
        append(li0, p0);
        append(li0, t1);
        mount_component(slidetoggle0, li0, null);
        insert(target, t2, anchor);
        insert(target, li1, anchor);
        append(li1, p1);
        append(li1, t4);
        mount_component(slidetoggle1, li1, null);
        current = true;
      },
      p(ctx2, dirty) {
        const slidetoggle0_changes = {};
        if (!updating_checked && dirty & /*$store*/
        64) {
          updating_checked = true;
          slidetoggle0_changes.checked = /*$store*/
          ctx2[6].bundleIllusts;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle0.$set(slidetoggle0_changes);
        const slidetoggle1_changes = {};
        if (!updating_checked_1 && dirty & /*$store*/
        64) {
          updating_checked_1 = true;
          slidetoggle1_changes.checked = /*$store*/
          ctx2[6].bundleManga;
          add_flush_callback(() => updating_checked_1 = false);
        }
        slidetoggle1.$set(slidetoggle1_changes);
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle0.$$.fragment, local);
        transition_in(slidetoggle1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle0.$$.fragment, local);
        transition_out(slidetoggle1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(li0);
          detach(t2);
          detach(li1);
        }
        destroy_component(slidetoggle0);
        destroy_component(slidetoggle1);
      }
    };
  }
  function create_if_block_1$3(ctx) {
    let li;
    let div;
    let p;
    let t1;
    let slidetoggle;
    let updating_checked;
    let t2;
    let show_if = (
      /*$store*/
      ctx[6].addBookmark && env.isPixiv()
    );
    let current;
    function slidetoggle_checked_binding_1(value) {
      ctx[13](value);
    }
    let slidetoggle_props = { name: "fsa-enable", size: "sm" };
    if (
      /*$store*/
      ctx[6].addBookmark !== void 0
    ) {
      slidetoggle_props.checked = /*$store*/
      ctx[6].addBookmark;
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding_1));
    let if_block = show_if && create_if_block_2$1(ctx);
    return {
      c() {
        li = element("li");
        div = element("div");
        p = element("p");
        p.textContent = `${t("setting.others.options.add_bookmark_when_download")}`;
        t1 = space();
        create_component(slidetoggle.$$.fragment);
        t2 = space();
        if (if_block) if_block.c();
        attr(p, "class", "flex-auto");
        attr(div, "class", "flex items-center");
        attr(li, "class", "flex-col !items-stretch");
      },
      m(target, anchor) {
        insert(target, li, anchor);
        append(li, div);
        append(div, p);
        append(div, t1);
        mount_component(slidetoggle, div, null);
        append(li, t2);
        if (if_block) if_block.m(li, null);
        current = true;
      },
      p(ctx2, dirty) {
        const slidetoggle_changes = {};
        if (!updating_checked && dirty & /*$store*/
        64) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$store*/
          ctx2[6].addBookmark;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
        if (dirty & /*$store*/
        64) show_if = /*$store*/
        ctx2[6].addBookmark && env.isPixiv();
        if (show_if) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*$store*/
            64) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block_2$1(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(li, null);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle.$$.fragment, local);
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle.$$.fragment, local);
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(li);
        }
        destroy_component(slidetoggle);
        if (if_block) if_block.d();
      }
    };
  }
  function create_if_block_2$1(ctx) {
    let ul;
    let li0;
    let label0;
    let p0;
    let t1;
    let slidetoggle0;
    let updating_checked;
    let t2;
    let li1;
    let label1;
    let p1;
    let t4;
    let slidetoggle1;
    let updating_checked_1;
    let ul_class_value;
    let current;
    function slidetoggle0_checked_binding_1(value) {
      ctx[14](value);
    }
    let slidetoggle0_props = { name: "fsa-enable", size: "sm" };
    if (
      /*$store*/
      ctx[6].addBookmarkWithTags !== void 0
    ) {
      slidetoggle0_props.checked = /*$store*/
      ctx[6].addBookmarkWithTags;
    }
    slidetoggle0 = new SlideToggle({ props: slidetoggle0_props });
    binding_callbacks.push(() => bind(slidetoggle0, "checked", slidetoggle0_checked_binding_1));
    function slidetoggle1_checked_binding_1(value) {
      ctx[15](value);
    }
    let slidetoggle1_props = { name: "fsa-enable", size: "sm" };
    if (
      /*$store*/
      ctx[6].privateR18 !== void 0
    ) {
      slidetoggle1_props.checked = /*$store*/
      ctx[6].privateR18;
    }
    slidetoggle1 = new SlideToggle({ props: slidetoggle1_props });
    binding_callbacks.push(() => bind(slidetoggle1, "checked", slidetoggle1_checked_binding_1));
    return {
      c() {
        ul = element("ul");
        li0 = element("li");
        label0 = element("label");
        p0 = element("p");
        p0.textContent = `${t("setting.others.options.add_bookmark_with_tags")}`;
        t1 = space();
        create_component(slidetoggle0.$$.fragment);
        t2 = space();
        li1 = element("li");
        label1 = element("label");
        p1 = element("p");
        p1.textContent = `${t("setting.others.options.add_bookmark_private_r18")}`;
        t4 = space();
        create_component(slidetoggle1.$$.fragment);
        attr(p0, "class", "flex-auto");
        attr(label0, "class", "label flex flex-grow items-center justify-center");
        attr(p1, "class", "flex-auto");
        attr(label1, "class", "label flex flex-grow items-center justify-center");
        attr(ul, "class", ul_class_value = "list " + /*border*/
        ctx[0] + " " + /*rounded*/
        ctx[1] + " [&:not(:last-child)]:*:py-4 [&:last-child]:*:pt-4");
      },
      m(target, anchor) {
        insert(target, ul, anchor);
        append(ul, li0);
        append(li0, label0);
        append(label0, p0);
        append(label0, t1);
        mount_component(slidetoggle0, label0, null);
        append(ul, t2);
        append(ul, li1);
        append(li1, label1);
        append(label1, p1);
        append(label1, t4);
        mount_component(slidetoggle1, label1, null);
        current = true;
      },
      p(ctx2, dirty) {
        const slidetoggle0_changes = {};
        if (!updating_checked && dirty & /*$store*/
        64) {
          updating_checked = true;
          slidetoggle0_changes.checked = /*$store*/
          ctx2[6].addBookmarkWithTags;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle0.$set(slidetoggle0_changes);
        const slidetoggle1_changes = {};
        if (!updating_checked_1 && dirty & /*$store*/
        64) {
          updating_checked_1 = true;
          slidetoggle1_changes.checked = /*$store*/
          ctx2[6].privateR18;
          add_flush_callback(() => updating_checked_1 = false);
        }
        slidetoggle1.$set(slidetoggle1_changes);
        if (!current || dirty & /*border, rounded*/
        3 && ul_class_value !== (ul_class_value = "list " + /*border*/
        ctx2[0] + " " + /*rounded*/
        ctx2[1] + " [&:not(:last-child)]:*:py-4 [&:last-child]:*:pt-4")) {
          attr(ul, "class", ul_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle0.$$.fragment, local);
        transition_in(slidetoggle1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle0.$$.fragment, local);
        transition_out(slidetoggle1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(ul);
        }
        destroy_component(slidetoggle0);
        destroy_component(slidetoggle1);
      }
    };
  }
  function create_if_block$3(ctx) {
    let section;
    let p0;
    let t0;
    let t1;
    let ul;
    let li;
    let div;
    let p1;
    let t3;
    let p2;
    let t4;
    let p2_class_value;
    let t5;
    let slidetoggle;
    let updating_checked;
    let current;
    function slidetoggle_checked_binding_2(value) {
      ctx[16](value);
    }
    let slidetoggle_props = { name: "mix-effect", size: "sm" };
    if (
      /*$store*/
      ctx[6].mixEffect !== void 0
    ) {
      slidetoggle_props.checked = /*$store*/
      ctx[6].mixEffect;
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding_2));
    return {
      c() {
        section = element("section");
        p0 = element("p");
        t0 = text("实验性功能");
        t1 = space();
        ul = element("ul");
        li = element("li");
        div = element("div");
        p1 = element("p");
        p1.textContent = "为单页插图增加 #pixivGlow2024 效果";
        t3 = space();
        p2 = element("p");
        t4 = text("* 转换至动图格式。如果插图尺寸过大,可能占用大量内存 / 转换失败");
        t5 = space();
        create_component(slidetoggle.$$.fragment);
        attr(
          p0,
          "class",
          /*sectionTitle*/
          ctx[4]
        );
        attr(p2, "class", p2_class_value = /*descritionText*/
        ctx[2] + " !text-error-500");
        attr(div, "class", "flex-auto");
        attr(
          ul,
          "class",
          /*ulClasses*/
          ctx[5]
        );
      },
      m(target, anchor) {
        insert(target, section, anchor);
        append(section, p0);
        append(p0, t0);
        append(section, t1);
        append(section, ul);
        append(ul, li);
        append(li, div);
        append(div, p1);
        append(div, t3);
        append(div, p2);
        append(p2, t4);
        append(li, t5);
        mount_component(slidetoggle, li, null);
        current = true;
      },
      p(ctx2, dirty) {
        if (!current || dirty & /*sectionTitle*/
        16) {
          attr(
            p0,
            "class",
            /*sectionTitle*/
            ctx2[4]
          );
        }
        if (!current || dirty & /*descritionText*/
        4 && p2_class_value !== (p2_class_value = /*descritionText*/
        ctx2[2] + " !text-error-500")) {
          attr(p2, "class", p2_class_value);
        }
        const slidetoggle_changes = {};
        if (!updating_checked && dirty & /*$store*/
        64) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$store*/
          ctx2[6].mixEffect;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
        if (!current || dirty & /*ulClasses*/
        32) {
          attr(
            ul,
            "class",
            /*ulClasses*/
            ctx2[5]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(section);
        }
        destroy_component(slidetoggle);
      }
    };
  }
  function create_fragment$4(ctx) {
    let div;
    let ul;
    let li;
    let p;
    let t1;
    let slidetoggle;
    let updating_checked;
    let t2;
    let show_if_2 = env.isPixiv();
    let t3;
    let show_if_1 = !env.isYande();
    let t4;
    let show_if = env.isPixiv();
    let current;
    function slidetoggle_checked_binding(value) {
      ctx[10](value);
    }
    let slidetoggle_props = { name: "show-popup-button", size: "sm" };
    if (
      /*$store*/
      ctx[6].showPopupButton !== void 0
    ) {
      slidetoggle_props.checked = /*$store*/
      ctx[6].showPopupButton;
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding));
    let if_block0 = show_if_2 && create_if_block_3$1(ctx);
    let if_block1 = show_if_1 && create_if_block_1$3(ctx);
    let if_block2 = show_if && create_if_block$3(ctx);
    return {
      c() {
        div = element("div");
        ul = element("ul");
        li = element("li");
        p = element("p");
        p.textContent = `${t("setting.others.options.show_setting_button")}`;
        t1 = space();
        create_component(slidetoggle.$$.fragment);
        t2 = space();
        if (if_block0) if_block0.c();
        t3 = space();
        if (if_block1) if_block1.c();
        t4 = space();
        if (if_block2) if_block2.c();
        attr(p, "class", "flex-auto");
        attr(
          ul,
          "class",
          /*ulClasses*/
          ctx[5]
        );
        attr(
          div,
          "class",
          /*sectionSpace*/
          ctx[3]
        );
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, ul);
        append(ul, li);
        append(li, p);
        append(li, t1);
        mount_component(slidetoggle, li, null);
        append(ul, t2);
        if (if_block0) if_block0.m(ul, null);
        append(ul, t3);
        if (if_block1) if_block1.m(ul, null);
        append(div, t4);
        if (if_block2) if_block2.m(div, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        const slidetoggle_changes = {};
        if (!updating_checked && dirty & /*$store*/
        64) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$store*/
          ctx2[6].showPopupButton;
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
        if (show_if_2) if_block0.p(ctx2, dirty);
        if (show_if_1) if_block1.p(ctx2, dirty);
        if (!current || dirty & /*ulClasses*/
        32) {
          attr(
            ul,
            "class",
            /*ulClasses*/
            ctx2[5]
          );
        }
        if (show_if) if_block2.p(ctx2, dirty);
        if (!current || dirty & /*sectionSpace*/
        8) {
          attr(
            div,
            "class",
            /*sectionSpace*/
            ctx2[3]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle.$$.fragment, local);
        transition_in(if_block0);
        transition_in(if_block1);
        transition_in(if_block2);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle.$$.fragment, local);
        transition_out(if_block0);
        transition_out(if_block1);
        transition_out(if_block2);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(slidetoggle);
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        if (if_block2) if_block2.d();
      }
    };
  }
  function instance$4($$self, $$props, $$invalidate) {
    let ulClasses;
    let $store;
    component_subscribe($$self, configStore, ($$value) => $$invalidate(6, $store = $$value));
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { descritionText = "text-sm text-surface-400" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    function slidetoggle_checked_binding(value) {
      if ($$self.$$.not_equal($store.showPopupButton, value)) {
        $store.showPopupButton = value;
        configStore.set($store);
      }
    }
    function slidetoggle0_checked_binding(value) {
      if ($$self.$$.not_equal($store.bundleIllusts, value)) {
        $store.bundleIllusts = value;
        configStore.set($store);
      }
    }
    function slidetoggle1_checked_binding(value) {
      if ($$self.$$.not_equal($store.bundleManga, value)) {
        $store.bundleManga = value;
        configStore.set($store);
      }
    }
    function slidetoggle_checked_binding_1(value) {
      if ($$self.$$.not_equal($store.addBookmark, value)) {
        $store.addBookmark = value;
        configStore.set($store);
      }
    }
    function slidetoggle0_checked_binding_1(value) {
      if ($$self.$$.not_equal($store.addBookmarkWithTags, value)) {
        $store.addBookmarkWithTags = value;
        configStore.set($store);
      }
    }
    function slidetoggle1_checked_binding_1(value) {
      if ($$self.$$.not_equal($store.privateR18, value)) {
        $store.privateR18 = value;
        configStore.set($store);
      }
    }
    function slidetoggle_checked_binding_2(value) {
      if ($$self.$$.not_equal($store.mixEffect, value)) {
        $store.mixEffect = value;
        configStore.set($store);
      }
    }
    $$self.$$set = ($$new_props) => {
      $$invalidate(17, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(7, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(0, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(8, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(9, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(1, rounded = $$new_props.rounded);
      if ("descritionText" in $$new_props) $$invalidate(2, descritionText = $$new_props.descritionText);
      if ("sectionSpace" in $$new_props) $$invalidate(3, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(4, sectionTitle = $$new_props.sectionTitle);
    };
    $$self.$$.update = () => {
      $$invalidate(5, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [
      border,
      rounded,
      descritionText,
      sectionSpace,
      sectionTitle,
      ulClasses,
      $store,
      bg,
      padding,
      margin,
      slidetoggle_checked_binding,
      slidetoggle0_checked_binding,
      slidetoggle1_checked_binding,
      slidetoggle_checked_binding_1,
      slidetoggle0_checked_binding_1,
      slidetoggle1_checked_binding_1,
      slidetoggle_checked_binding_2
    ];
  }
  class Others extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$4, create_fragment$4, safe_not_equal, {
        bg: 7,
        border: 0,
        padding: 8,
        margin: 9,
        rounded: 1,
        descritionText: 2,
        sectionSpace: 3,
        sectionTitle: 4
      });
    }
  }
  function create_fragment$3(ctx) {
    let div;
    let section0;
    let p0;
    let t0_value = t("setting.feedback.label.feedback") + "";
    let t0;
    let t1;
    let ul0;
    let li0;
    let span;
    let raw0_value = t("setting.feedback.text.feedback_desc") + "";
    let t2;
    let section1;
    let p1;
    let t3_value = t("setting.feedback.label.donate") + "";
    let t3;
    let t4;
    let ul1;
    let li1;
    let p2;
    let raw1_value = t("setting.feedback.text.give_me_a_star") + "";
    let t5;
    let li2;
    let figure;
    let img;
    let img_src_value;
    let t6;
    let figcaption;
    return {
      c() {
        div = element("div");
        section0 = element("section");
        p0 = element("p");
        t0 = text(t0_value);
        t1 = space();
        ul0 = element("ul");
        li0 = element("li");
        span = element("span");
        t2 = space();
        section1 = element("section");
        p1 = element("p");
        t3 = text(t3_value);
        t4 = space();
        ul1 = element("ul");
        li1 = element("li");
        p2 = element("p");
        t5 = space();
        li2 = element("li");
        figure = element("figure");
        img = element("img");
        t6 = space();
        figcaption = element("figcaption");
        figcaption.textContent = `${t("setting.feedback.text.donate_desc")}`;
        attr(
          p0,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        attr(
          ul0,
          "class",
          /*ulClasses*/
          ctx[2]
        );
        attr(
          p1,
          "class",
          /*sectionTitle*/
          ctx[1]
        );
        if (!src_url_equal(img.src, img_src_value = creditCode)) attr(img, "src", img_src_value);
        attr(img, "alt", "credit");
        attr(img, "class", "rounded-full m-auto");
        attr(figcaption, "class", "mt-4");
        attr(li2, "class", "justify-center");
        attr(
          ul1,
          "class",
          /*ulClasses*/
          ctx[2]
        );
        attr(
          div,
          "class",
          /*sectionSpace*/
          ctx[0]
        );
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, section0);
        append(section0, p0);
        append(p0, t0);
        append(section0, t1);
        append(section0, ul0);
        append(ul0, li0);
        append(li0, span);
        span.innerHTML = raw0_value;
        append(div, t2);
        append(div, section1);
        append(section1, p1);
        append(p1, t3);
        append(section1, t4);
        append(section1, ul1);
        append(ul1, li1);
        append(li1, p2);
        p2.innerHTML = raw1_value;
        append(ul1, t5);
        append(ul1, li2);
        append(li2, figure);
        append(figure, img);
        append(figure, t6);
        append(figure, figcaption);
      },
      p(ctx2, [dirty]) {
        if (dirty & /*sectionTitle*/
        2) {
          attr(
            p0,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        if (dirty & /*ulClasses*/
        4) {
          attr(
            ul0,
            "class",
            /*ulClasses*/
            ctx2[2]
          );
        }
        if (dirty & /*sectionTitle*/
        2) {
          attr(
            p1,
            "class",
            /*sectionTitle*/
            ctx2[1]
          );
        }
        if (dirty & /*ulClasses*/
        4) {
          attr(
            ul1,
            "class",
            /*ulClasses*/
            ctx2[2]
          );
        }
        if (dirty & /*sectionSpace*/
        1) {
          attr(
            div,
            "class",
            /*sectionSpace*/
            ctx2[0]
          );
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div);
        }
      }
    };
  }
  function instance$3($$self, $$props, $$invalidate) {
    let ulClasses;
    let { bg = "bg-white/30 dark:bg-black/15" } = $$props;
    let { border = "divide-y-[1px] *:border-surface-300-600-token" } = $$props;
    let { padding = "px-4 *:py-4" } = $$props;
    let { margin = "mt-2 *:!m-0" } = $$props;
    let { rounded = "rounded-container-token *:!rounded-none" } = $$props;
    let { sectionSpace = `space-y-4` } = $$props;
    let { sectionTitle = "font-bold" } = $$props;
    $$self.$$set = ($$new_props) => {
      $$invalidate(8, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props)));
      if ("bg" in $$new_props) $$invalidate(3, bg = $$new_props.bg);
      if ("border" in $$new_props) $$invalidate(4, border = $$new_props.border);
      if ("padding" in $$new_props) $$invalidate(5, padding = $$new_props.padding);
      if ("margin" in $$new_props) $$invalidate(6, margin = $$new_props.margin);
      if ("rounded" in $$new_props) $$invalidate(7, rounded = $$new_props.rounded);
      if ("sectionSpace" in $$new_props) $$invalidate(0, sectionSpace = $$new_props.sectionSpace);
      if ("sectionTitle" in $$new_props) $$invalidate(1, sectionTitle = $$new_props.sectionTitle);
    };
    $$self.$$.update = () => {
      $$invalidate(2, ulClasses = `list *:items-center ${padding} ${margin} ${border} ${bg} ${rounded} ${$$props.class ?? ""}`);
    };
    $$props = exclude_internal_props($$props);
    return [sectionSpace, sectionTitle, ulClasses, bg, border, padding, margin, rounded];
  }
  class FeedBack extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$3, create_fragment$3, safe_not_equal, {
        bg: 3,
        border: 4,
        padding: 5,
        margin: 6,
        rounded: 7,
        sectionSpace: 0,
        sectionTitle: 1
      });
    }
  }
  const menuOpen = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21,15.61L19.59,17L14.58,12L19.59,7L21,8.39L17.44,12L21,15.61M3,6H16V8H3V6M3,13V11H13V13H3M3,18V16H16V18H3Z" /></svg>`;
  const menuClose = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6H13V8H3V6M3 16H13V18H3V16M3 11H15V13H3V11M16 7L14.58 8.39L18.14 12L14.58 15.61L16 17L21 12L16 7Z" /></svg>`;
  function get_each_context$1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[9] = list[i];
    child_ctx[11] = i;
    return child_ctx;
  }
  function create_if_block_1$2(ctx) {
    let listboxitem;
    let updating_group;
    let current;
    function listboxitem_group_binding(value) {
      ctx[6](value);
    }
    let listboxitem_props = {
      name: "option",
      value: (
        /*idx*/
        ctx[11]
      ),
      class: "rounded-token",
      $$slots: { default: [create_default_slot_3$1] },
      $$scope: { ctx }
    };
    if (
      /*slected*/
      ctx[2] !== void 0
    ) {
      listboxitem_props.group = /*slected*/
      ctx[2];
    }
    listboxitem = new ListBoxItem({ props: listboxitem_props });
    binding_callbacks.push(() => bind(listboxitem, "group", listboxitem_group_binding));
    return {
      c() {
        create_component(listboxitem.$$.fragment);
      },
      m(target, anchor) {
        mount_component(listboxitem, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const listboxitem_changes = {};
        if (dirty & /*$$scope*/
        4096) {
          listboxitem_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty & /*slected*/
        4) {
          updating_group = true;
          listboxitem_changes.group = /*slected*/
          ctx2[2];
          add_flush_callback(() => updating_group = false);
        }
        listboxitem.$set(listboxitem_changes);
      },
      i(local) {
        if (current) return;
        transition_in(listboxitem.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(listboxitem.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(listboxitem, detaching);
      }
    };
  }
  function create_default_slot_3$1(ctx) {
    let t_1_value = (
      /*option*/
      ctx[9].name + ""
    );
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_each_block$1(ctx) {
    let if_block_anchor;
    let current;
    let if_block = (!("show" in /*option*/
    ctx[9]) || /*option*/
    ctx[9].show) && create_if_block_1$2(ctx);
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        if (!("show" in /*option*/
        ctx2[9]) || /*option*/
        ctx2[9].show) if_block.p(ctx2, dirty);
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) if_block.d(detaching);
      }
    };
  }
  function create_default_slot_2$1(ctx) {
    let each_1_anchor;
    let current;
    let each_value = ensure_array_like(
      /*optionList*/
      ctx[5]
    );
    let each_blocks = [];
    for (let i = 0; i < each_value.length; i += 1) {
      each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i));
    }
    const out = (i) => transition_out(each_blocks[i], 1, 1, () => {
      each_blocks[i] = null;
    });
    return {
      c() {
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        each_1_anchor = empty();
      },
      m(target, anchor) {
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(target, anchor);
          }
        }
        insert(target, each_1_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        if (dirty & /*slected, optionList*/
        36) {
          each_value = ensure_array_like(
            /*optionList*/
            ctx2[5]
          );
          let i;
          for (i = 0; i < each_value.length; i += 1) {
            const child_ctx = get_each_context$1(ctx2, each_value, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
              transition_in(each_blocks[i], 1);
            } else {
              each_blocks[i] = create_each_block$1(child_ctx);
              each_blocks[i].c();
              transition_in(each_blocks[i], 1);
              each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor);
            }
          }
          group_outros();
          for (i = each_value.length; i < each_blocks.length; i += 1) {
            out(i);
          }
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        for (let i = 0; i < each_value.length; i += 1) {
          transition_in(each_blocks[i]);
        }
        current = true;
      },
      o(local) {
        each_blocks = each_blocks.filter(Boolean);
        for (let i = 0; i < each_blocks.length; i += 1) {
          transition_out(each_blocks[i]);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(each_1_anchor);
        }
        destroy_each(each_blocks, detaching);
      }
    };
  }
  function create_default_slot_1$1(ctx) {
    let h3;
    let t_1_value = (
      /*optionList*/
      (ctx[5][
        /*slected*/
        ctx[2]
      ].name || "设置") + ""
    );
    let t_1;
    return {
      c() {
        h3 = element("h3");
        t_1 = text(t_1_value);
        attr(h3, "class", "h3");
      },
      m(target, anchor) {
        insert(target, h3, anchor);
        append(h3, t_1);
      },
      p(ctx2, dirty) {
        if (dirty & /*slected*/
        4 && t_1_value !== (t_1_value = /*optionList*/
        (ctx2[5][
          /*slected*/
          ctx2[2]
        ].name || "设置") + "")) set_data(t_1, t_1_value);
      },
      d(detaching) {
        if (detaching) {
          detach(h3);
        }
      }
    };
  }
  function create_else_block$1(ctx) {
    let html_tag;
    let html_anchor;
    return {
      c() {
        html_tag = new HtmlTag(false);
        html_anchor = empty();
        html_tag.a = html_anchor;
      },
      m(target, anchor) {
        html_tag.m(menuOpen, target, anchor);
        insert(target, html_anchor, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(html_anchor);
          html_tag.d();
        }
      }
    };
  }
  function create_if_block$2(ctx) {
    let html_tag;
    let html_anchor;
    return {
      c() {
        html_tag = new HtmlTag(false);
        html_anchor = empty();
        html_tag.a = html_anchor;
      },
      m(target, anchor) {
        html_tag.m(menuClose, target, anchor);
        insert(target, html_anchor, anchor);
      },
      d(detaching) {
        if (detaching) {
          detach(html_anchor);
          html_tag.d();
        }
      }
    };
  }
  function create_lead_slot(ctx) {
    let button;
    let i;
    let mounted;
    let dispose;
    function select_block_type(ctx2, dirty) {
      if (
        /*showListbox*/
        ctx2[1]
      ) return create_if_block$2;
      return create_else_block$1;
    }
    let current_block_type = select_block_type(ctx);
    let if_block = current_block_type(ctx);
    return {
      c() {
        button = element("button");
        i = element("i");
        if_block.c();
        attr(i, "class", "w-8 fill-current");
        attr(button, "type", "button");
        attr(button, "class", "btn-icon hover:variant-soft-surface ml-1");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, i);
        if_block.m(i, null);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*click_handler*/
            ctx[7]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (current_block_type !== (current_block_type = select_block_type(ctx2))) {
          if_block.d(1);
          if_block = current_block_type(ctx2);
          if (if_block) {
            if_block.c();
            if_block.m(i, null);
          }
        }
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        if_block.d();
        mounted = false;
        dispose();
      }
    };
  }
  function create_default_slot$1(ctx) {
    let div1;
    let listbox;
    let t0;
    let appbar;
    let t1;
    let div0;
    let switch_instance;
    let div1_class_value;
    let current;
    listbox = new ListBox({
      props: {
        class: "pt-4 pr-6 row-start-1 row-span-2 " + sidebarWidth + " transition-[transform] " + /*transform*/
        ctx[3],
        $$slots: { default: [create_default_slot_2$1] },
        $$scope: { ctx }
      }
    });
    appbar = new AppBar({
      props: {
        padding: "py-2",
        background: "bg-transparent",
        class: "mr-6 border-b border-surface-800-100-token",
        $$slots: {
          lead: [create_lead_slot],
          default: [create_default_slot_1$1]
        },
        $$scope: { ctx }
      }
    });
    const switch_instance_spread_levels = [
      /*optionList*/
      ctx[5][
        /*slected*/
        ctx[2]
      ].props,
      {
        bg: "bg-white/30 dark:bg-surface-500/20 backdrop-blur-sm"
      }
    ];
    var switch_value = (
      /*optionList*/
      ctx[5][
        /*slected*/
        ctx[2]
      ].component
    );
    function switch_props(ctx2, dirty) {
      let switch_instance_props = {};
      for (let i = 0; i < switch_instance_spread_levels.length; i += 1) {
        switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]);
      }
      if (dirty !== void 0 && dirty & /*optionList, slected*/
      36) {
        switch_instance_props = assign(switch_instance_props, get_spread_update(switch_instance_spread_levels, [
          get_spread_object(
            /*optionList*/
            ctx2[5][
              /*slected*/
              ctx2[2]
            ].props
          ),
          switch_instance_spread_levels[1]
        ]));
      }
      return { props: switch_instance_props };
    }
    if (switch_value) {
      switch_instance = construct_svelte_component(switch_value, switch_props(ctx));
    }
    return {
      c() {
        div1 = element("div");
        create_component(listbox.$$.fragment);
        t0 = space();
        create_component(appbar.$$.fragment);
        t1 = space();
        div0 = element("div");
        if (switch_instance) create_component(switch_instance.$$.fragment);
        attr(div0, "class", "mt-4 pr-4 scrollbar-track-transparent scrollbar-thumb-slate-400/50 scrollbar-corner-transparent scrollbar-thin overflow-y-auto");
        set_style(div0, "scrollbar-gutter", "stable");
        attr(div1, "class", div1_class_value = "h-full pt-4 pb-6 pl-6 grid grid-rows-[auto_1fr] transition-[grid-template-columns] " + /*gridCol*/
        ctx[4]);
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        mount_component(listbox, div1, null);
        append(div1, t0);
        mount_component(appbar, div1, null);
        append(div1, t1);
        append(div1, div0);
        if (switch_instance) mount_component(switch_instance, div0, null);
        current = true;
      },
      p(ctx2, dirty) {
        const listbox_changes = {};
        if (dirty & /*transform*/
        8) listbox_changes.class = "pt-4 pr-6 row-start-1 row-span-2 " + sidebarWidth + " transition-[transform] " + /*transform*/
        ctx2[3];
        if (dirty & /*$$scope, slected*/
        4100) {
          listbox_changes.$$scope = { dirty, ctx: ctx2 };
        }
        listbox.$set(listbox_changes);
        const appbar_changes = {};
        if (dirty & /*$$scope, showListbox, slected*/
        4102) {
          appbar_changes.$$scope = { dirty, ctx: ctx2 };
        }
        appbar.$set(appbar_changes);
        if (dirty & /*slected*/
        4 && switch_value !== (switch_value = /*optionList*/
        ctx2[5][
          /*slected*/
          ctx2[2]
        ].component)) {
          if (switch_instance) {
            group_outros();
            const old_component = switch_instance;
            transition_out(old_component.$$.fragment, 1, 0, () => {
              destroy_component(old_component, 1);
            });
            check_outros();
          }
          if (switch_value) {
            switch_instance = construct_svelte_component(switch_value, switch_props(ctx2, dirty));
            create_component(switch_instance.$$.fragment);
            transition_in(switch_instance.$$.fragment, 1);
            mount_component(switch_instance, div0, null);
          } else {
            switch_instance = null;
          }
        } else if (switch_value) {
          const switch_instance_changes = dirty & /*optionList, slected*/
          36 ? get_spread_update(switch_instance_spread_levels, [
            get_spread_object(
              /*optionList*/
              ctx2[5][
                /*slected*/
                ctx2[2]
              ].props
            ),
            switch_instance_spread_levels[1]
          ]) : {};
          switch_instance.$set(switch_instance_changes);
        }
        if (!current || dirty & /*gridCol*/
        16 && div1_class_value !== (div1_class_value = "h-full pt-4 pb-6 pl-6 grid grid-rows-[auto_1fr] transition-[grid-template-columns] " + /*gridCol*/
        ctx2[4])) {
          attr(div1, "class", div1_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(listbox.$$.fragment, local);
        transition_in(appbar.$$.fragment, local);
        if (switch_instance) transition_in(switch_instance.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(listbox.$$.fragment, local);
        transition_out(appbar.$$.fragment, local);
        if (switch_instance) transition_out(switch_instance.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        destroy_component(listbox);
        destroy_component(appbar);
        if (switch_instance) destroy_component(switch_instance);
      }
    };
  }
  function create_fragment$2(ctx) {
    let modalwrapper;
    let current;
    modalwrapper = new ModalWrapper({
      props: {
        parent: (
          /*parent*/
          ctx[0]
        ),
        height: "h-screen md:h-[600px]",
        width: "w-screen md:max-w-screen-md xl:max-w-screen-lg",
        padding: "",
        $$slots: { default: [create_default_slot$1] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        create_component(modalwrapper.$$.fragment);
      },
      m(target, anchor) {
        mount_component(modalwrapper, target, anchor);
        current = true;
      },
      p(ctx2, [dirty]) {
        const modalwrapper_changes = {};
        if (dirty & /*parent*/
        1) modalwrapper_changes.parent = /*parent*/
        ctx2[0];
        if (dirty & /*$$scope, gridCol, slected, showListbox, transform*/
        4126) {
          modalwrapper_changes.$$scope = { dirty, ctx: ctx2 };
        }
        modalwrapper.$set(modalwrapper_changes);
      },
      i(local) {
        if (current) return;
        transition_in(modalwrapper.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(modalwrapper.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(modalwrapper, detaching);
      }
    };
  }
  const sidebarWidth = "w-[140px]";
  function instance$2($$self, $$props, $$invalidate) {
    let gridCol;
    let transform;
    let { parent } = $$props;
    const templates = env.isPixiv() ? ["{artist}", "{artistID}", "{title}", "{id}", "{page}", "{tags}", "{date}"] : ["{artist}", "{character}", "{id}", "{date}"];
    let slected = 0;
    const optionList = [
      {
        name: t("setting.save_to.title"),
        component: SaveTo,
        props: { templates }
      },
      {
        name: t("setting.ugoira.title"),
        component: UgoiraConvert,
        show: env.isPixiv()
      },
      {
        name: t("setting.history.title"),
        component: DownloadHistory
      },
      {
        name: t("setting.button_position.title"),
        component: BtnPosition
      },
      {
        name: t("setting.others.title"),
        component: Others
      },
      {
        name: t("setting.feedback.title"),
        component: FeedBack
      }
    ];
    let showListbox = true;
    function listboxitem_group_binding(value) {
      slected = value;
      $$invalidate(2, slected);
    }
    const click_handler = () => $$invalidate(1, showListbox = !showListbox);
    $$self.$$set = ($$props2) => {
      if ("parent" in $$props2) $$invalidate(0, parent = $$props2.parent);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*showListbox*/
      2) {
        $$invalidate(4, gridCol = showListbox ? "grid-cols-[140px_1fr]" : "grid-cols-[0px_1fr]");
      }
      if ($$self.$$.dirty & /*showListbox*/
      2) {
        $$invalidate(3, transform = showListbox ? "translate-x-0" : "-translate-x-full");
      }
    };
    return [
      parent,
      showListbox,
      slected,
      transform,
      gridCol,
      optionList,
      listboxitem_group_binding,
      click_handler
    ];
  }
  class Config extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$2, create_fragment$2, safe_not_equal, { parent: 0 });
    }
  }
  const downloadSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm-32-316v116h-67c-10.7 0-16 12.9-8.5 20.5l99 99c4.7 4.7 12.3 4.7 17 0l99-99c7.6-7.6 2.2-20.5-8.5-20.5h-67V140c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12z"></path></svg>`;
  const stopSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z"></path></svg>
`;
  const playSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M10,16.5L16,12L10,7.5V16.5Z" /></svg>`;
  const stopOutLineSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4M9,9V15H15V9" /></svg>`;
  const downloadMultipleSvg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9,1V7H5L12,14L19,7H15V1H9M5,16V18H19V16H5M5,20V22H19V20H5Z" /></svg>`;
  function get_each_context(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[79] = list[i].name;
    child_ctx[80] = list[i].id;
    return child_ctx;
  }
  function get_each_context_1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[80] = list[i].id;
    child_ctx[79] = list[i].name;
    return child_ctx;
  }
  function create_if_block_5(ctx) {
    let div1;
    let t_1;
    let div0;
    let current_block_type_index;
    let if_block1;
    let div1_transition;
    let current;
    let if_block0 = !/*$downloading*/
    ctx[5] && create_if_block_9(ctx);
    const if_block_creators = [create_if_block_6, create_else_block];
    const if_blocks = [];
    function select_block_type_1(ctx2, dirty) {
      if (!/*$downloading*/
      ctx2[5]) return 0;
      return 1;
    }
    current_block_type_index = select_block_type_1(ctx);
    if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    return {
      c() {
        div1 = element("div");
        if (if_block0) if_block0.c();
        t_1 = space();
        div0 = element("div");
        if_block1.c();
        attr(div0, "class", "flex relative my-4");
        attr(div1, "data-theme", "skeleton");
        attr(div1, "class", "card px-4 fixed right-20 top-36 w-[600px] *:text-sm shadow-xl bg-scroll");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        if (if_block0) if_block0.m(div1, null);
        append(div1, t_1);
        append(div1, div0);
        if_blocks[current_block_type_index].m(div0, null);
        current = true;
      },
      p(ctx2, dirty) {
        if (!/*$downloading*/
        ctx2[5]) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty[0] & /*$downloading*/
            32) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_9(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div1, t_1);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        let previous_block_index = current_block_type_index;
        current_block_type_index = select_block_type_1(ctx2);
        if (current_block_type_index === previous_block_index) {
          if_blocks[current_block_type_index].p(ctx2, dirty);
        } else {
          group_outros();
          transition_out(if_blocks[previous_block_index], 1, 1, () => {
            if_blocks[previous_block_index] = null;
          });
          check_outros();
          if_block1 = if_blocks[current_block_type_index];
          if (!if_block1) {
            if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
            if_block1.c();
          } else {
            if_block1.p(ctx2, dirty);
          }
          transition_in(if_block1, 1);
          if_block1.m(div0, null);
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(if_block1);
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div1_transition) div1_transition = create_bidirectional_transition(div1, fly, { x: 50, opacity: 0 }, true);
            div1_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(if_block1);
        if (local) {
          if (!div1_transition) div1_transition = create_bidirectional_transition(div1, fly, { x: 50, opacity: 0 }, false);
          div1_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if (if_block0) if_block0.d();
        if_blocks[current_block_type_index].d();
        if (detaching && div1_transition) div1_transition.end();
      }
    };
  }
  function create_if_block_9(ctx) {
    let div;
    let tabgroup;
    let t_1;
    let hr;
    let div_transition;
    let current;
    tabgroup = new TabGroup({
      props: {
        regionList: "text-surface-700-200-token",
        class: "text-sm",
        $$slots: {
          panel: [create_panel_slot],
          default: [create_default_slot_3]
        },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        div = element("div");
        create_component(tabgroup.$$.fragment);
        t_1 = space();
        hr = element("hr");
        attr(hr, "class", "!border-t-1 my-4");
        attr(div, "class", "downloader-filter");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(tabgroup, div, null);
        append(div, t_1);
        append(div, hr);
        current = true;
      },
      p(ctx2, dirty) {
        const tabgroup_changes = {};
        if (dirty[0] & /*$downloadAllPages, $pageEnd, $pageStart, downloaderConfig, $selectedFilters, tabSet, $whitelistTag, $blacklistTag, $retryFailed*/
        8327169 | dirty[2] & /*$$scope*/
        8388608) {
          tabgroup_changes.$$scope = { dirty, ctx: ctx2 };
        }
        tabgroup.$set(tabgroup_changes);
      },
      i(local) {
        if (current) return;
        transition_in(tabgroup.$$.fragment, local);
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div_transition) div_transition = create_bidirectional_transition(div, slide, {}, true);
            div_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        transition_out(tabgroup.$$.fragment, local);
        if (local) {
          if (!div_transition) div_transition = create_bidirectional_transition(div, slide, {}, false);
          div_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(tabgroup);
        if (detaching && div_transition) div_transition.end();
      }
    };
  }
  function create_default_slot_6(ctx) {
    let t_1_value = t("downloader.category.tab_name") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_5(ctx) {
    let t_1_value = t("downloader.tag_filter.tab_name") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_4(ctx) {
    let t_1_value = t("downloader.others.tab_name") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_3(ctx) {
    let tab0;
    let updating_group;
    let t0;
    let tab1;
    let updating_group_1;
    let t1;
    let tab2;
    let updating_group_2;
    let current;
    function tab0_group_binding(value) {
      ctx[51](value);
    }
    let tab0_props = {
      name: "category",
      value: 0,
      $$slots: { default: [create_default_slot_6] },
      $$scope: { ctx }
    };
    if (
      /*tabSet*/
      ctx[12] !== void 0
    ) {
      tab0_props.group = /*tabSet*/
      ctx[12];
    }
    tab0 = new Tab({ props: tab0_props });
    binding_callbacks.push(() => bind(tab0, "group", tab0_group_binding));
    function tab1_group_binding(value) {
      ctx[52](value);
    }
    let tab1_props = {
      name: "tag_filter",
      value: 1,
      $$slots: { default: [create_default_slot_5] },
      $$scope: { ctx }
    };
    if (
      /*tabSet*/
      ctx[12] !== void 0
    ) {
      tab1_props.group = /*tabSet*/
      ctx[12];
    }
    tab1 = new Tab({ props: tab1_props });
    binding_callbacks.push(() => bind(tab1, "group", tab1_group_binding));
    function tab2_group_binding(value) {
      ctx[53](value);
    }
    let tab2_props = {
      name: "tag_filter",
      value: 2,
      $$slots: { default: [create_default_slot_4] },
      $$scope: { ctx }
    };
    if (
      /*tabSet*/
      ctx[12] !== void 0
    ) {
      tab2_props.group = /*tabSet*/
      ctx[12];
    }
    tab2 = new Tab({ props: tab2_props });
    binding_callbacks.push(() => bind(tab2, "group", tab2_group_binding));
    return {
      c() {
        create_component(tab0.$$.fragment);
        t0 = space();
        create_component(tab1.$$.fragment);
        t1 = space();
        create_component(tab2.$$.fragment);
      },
      m(target, anchor) {
        mount_component(tab0, target, anchor);
        insert(target, t0, anchor);
        mount_component(tab1, target, anchor);
        insert(target, t1, anchor);
        mount_component(tab2, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const tab0_changes = {};
        if (dirty[2] & /*$$scope*/
        8388608) {
          tab0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty[0] & /*tabSet*/
        4096) {
          updating_group = true;
          tab0_changes.group = /*tabSet*/
          ctx2[12];
          add_flush_callback(() => updating_group = false);
        }
        tab0.$set(tab0_changes);
        const tab1_changes = {};
        if (dirty[2] & /*$$scope*/
        8388608) {
          tab1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_1 && dirty[0] & /*tabSet*/
        4096) {
          updating_group_1 = true;
          tab1_changes.group = /*tabSet*/
          ctx2[12];
          add_flush_callback(() => updating_group_1 = false);
        }
        tab1.$set(tab1_changes);
        const tab2_changes = {};
        if (dirty[2] & /*$$scope*/
        8388608) {
          tab2_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_2 && dirty[0] & /*tabSet*/
        4096) {
          updating_group_2 = true;
          tab2_changes.group = /*tabSet*/
          ctx2[12];
          add_flush_callback(() => updating_group_2 = false);
        }
        tab2.$set(tab2_changes);
      },
      i(local) {
        if (current) return;
        transition_in(tab0.$$.fragment, local);
        transition_in(tab1.$$.fragment, local);
        transition_in(tab2.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(tab0.$$.fragment, local);
        transition_out(tab1.$$.fragment, local);
        transition_out(tab2.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(t1);
        }
        destroy_component(tab0, detaching);
        destroy_component(tab1, detaching);
        destroy_component(tab2, detaching);
      }
    };
  }
  function create_if_block_12(ctx) {
    let div;
    let p;
    let t1;
    let slidetoggle;
    let updating_checked;
    let current;
    function slidetoggle_checked_binding(value) {
      ctx[50](value);
    }
    let slidetoggle_props = { size: "sm", name: "download-retry" };
    if (
      /*$retryFailed*/
      ctx[22] !== void 0
    ) {
      slidetoggle_props.checked = /*$retryFailed*/
      ctx[22];
    }
    slidetoggle = new SlideToggle({ props: slidetoggle_props });
    binding_callbacks.push(() => bind(slidetoggle, "checked", slidetoggle_checked_binding));
    return {
      c() {
        div = element("div");
        p = element("p");
        p.textContent = `${t("downloader.others.options.retry_failed")}`;
        t1 = space();
        create_component(slidetoggle.$$.fragment);
        attr(div, "class", "flex justify-between items-center text-base text-surface-700-200-token");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, p);
        append(div, t1);
        mount_component(slidetoggle, div, null);
        current = true;
      },
      p(ctx2, dirty) {
        const slidetoggle_changes = {};
        if (!updating_checked && dirty[0] & /*$retryFailed*/
        4194304) {
          updating_checked = true;
          slidetoggle_changes.checked = /*$retryFailed*/
          ctx2[22];
          add_flush_callback(() => updating_checked = false);
        }
        slidetoggle.$set(slidetoggle_changes);
      },
      i(local) {
        if (current) return;
        transition_in(slidetoggle.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(slidetoggle.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(slidetoggle);
      }
    };
  }
  function create_if_block_11(ctx) {
    let inputchip0;
    let updating_value;
    let t_1;
    let inputchip1;
    let updating_value_1;
    let current;
    function inputchip0_value_binding(value) {
      ctx[48](value);
    }
    let inputchip0_props = {
      allowUpperCase: true,
      name: "blacklist",
      chips: "variant-filled-primary",
      placeholder: t("downloader.tag_filter.placeholder.blacklist_tag")
    };
    if (
      /*$blacklistTag*/
      ctx[20] !== void 0
    ) {
      inputchip0_props.value = /*$blacklistTag*/
      ctx[20];
    }
    inputchip0 = new InputChip({ props: inputchip0_props });
    binding_callbacks.push(() => bind(inputchip0, "value", inputchip0_value_binding));
    function inputchip1_value_binding(value) {
      ctx[49](value);
    }
    let inputchip1_props = {
      allowUpperCase: true,
      name: "whitelist",
      chips: "variant-filled-primary",
      placeholder: t("downloader.tag_filter.placeholder.whitelist_tag"),
      class: "my-4"
    };
    if (
      /*$whitelistTag*/
      ctx[21] !== void 0
    ) {
      inputchip1_props.value = /*$whitelistTag*/
      ctx[21];
    }
    inputchip1 = new InputChip({ props: inputchip1_props });
    binding_callbacks.push(() => bind(inputchip1, "value", inputchip1_value_binding));
    return {
      c() {
        create_component(inputchip0.$$.fragment);
        t_1 = space();
        create_component(inputchip1.$$.fragment);
      },
      m(target, anchor) {
        mount_component(inputchip0, target, anchor);
        insert(target, t_1, anchor);
        mount_component(inputchip1, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const inputchip0_changes = {};
        if (!updating_value && dirty[0] & /*$blacklistTag*/
        1048576) {
          updating_value = true;
          inputchip0_changes.value = /*$blacklistTag*/
          ctx2[20];
          add_flush_callback(() => updating_value = false);
        }
        inputchip0.$set(inputchip0_changes);
        const inputchip1_changes = {};
        if (!updating_value_1 && dirty[0] & /*$whitelistTag*/
        2097152) {
          updating_value_1 = true;
          inputchip1_changes.value = /*$whitelistTag*/
          ctx2[21];
          add_flush_callback(() => updating_value_1 = false);
        }
        inputchip1.$set(inputchip1_changes);
      },
      i(local) {
        if (current) return;
        transition_in(inputchip0.$$.fragment, local);
        transition_in(inputchip1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(inputchip0.$$.fragment, local);
        transition_out(inputchip1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
        destroy_component(inputchip0, detaching);
        destroy_component(inputchip1, detaching);
      }
    };
  }
  function create_if_block_10(ctx) {
    let div1;
    let div0;
    let t0;
    let div6;
    let div2;
    let radiogroup;
    let t1;
    let div5;
    let label0;
    let div3;
    let i0;
    let t2;
    let input0;
    let t3;
    let label1;
    let div4;
    let i1;
    let t4;
    let input1;
    let current;
    let mounted;
    let dispose;
    let each_value_1 = ensure_array_like(
      /*downloaderConfig*/
      ctx[0].filterOption.filters
    );
    let each_blocks = [];
    for (let i = 0; i < each_value_1.length; i += 1) {
      each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i));
    }
    radiogroup = new RadioGroup({
      props: {
        regionLabel: "text-surface-700-200-token",
        active: "variant-filled-primary",
        background: "bg-surface-400/20 dark:bg-surface-500/20",
        border: "",
        display: "flex",
        $$slots: { default: [create_default_slot] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        div1 = element("div");
        div0 = element("div");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        t0 = space();
        div6 = element("div");
        div2 = element("div");
        create_component(radiogroup.$$.fragment);
        t1 = space();
        div5 = element("div");
        label0 = element("label");
        div3 = element("div");
        i0 = element("i");
        t2 = space();
        input0 = element("input");
        t3 = space();
        label1 = element("label");
        div4 = element("div");
        i1 = element("i");
        t4 = space();
        input1 = element("input");
        attr(div0, "class", "btn-group w-full");
        attr(div1, "class", "flex justify-end items-center my-4");
        attr(div2, "class", "flex-grow w-full");
        attr(i0, "class", "w-6 fill-current");
        attr(div3, "class", "input-group-shim !px-1 flex-none");
        attr(input0, "class", "w-20 pr-0 text-surface-700-200-token text-sm");
        attr(input0, "type", "number");
        attr(input0, "min", 1);
        attr(input0, "step", "1");
        input0.disabled = /*$downloadAllPages*/
        ctx[17];
        attr(label0, "class", "input-group input-group-divider flex [&>input]:!min-w-0 [&>input]:!border-transparent border-surface-400/20 dark:border-surface-500/20 bg-surface-400/20 dark:bg-surface-500/20");
        attr(i1, "class", "w-6 fill-current");
        attr(div4, "class", "input-group-shim !px-1 flex-none");
        attr(input1, "class", "w-20 pr-0 text-surface-700-200-token text-sm");
        attr(input1, "type", "number");
        attr(input1, "min", "1");
        attr(input1, "step", "1");
        input1.disabled = /*$downloadAllPages*/
        ctx[17];
        attr(label1, "class", "input-group input-group-divider flex [&>input]:!min-w-0 [&>input]:!border-transparent border-surface-400/20 dark:border-surface-500/20 bg-surface-400/20 dark:bg-surface-500/20");
        attr(div5, "class", "flex justify-between items-center gap-4 w-full");
        attr(div6, "class", "flex justify-between items-center my-4 gap-4");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(div0, null);
          }
        }
        insert(target, t0, anchor);
        insert(target, div6, anchor);
        append(div6, div2);
        mount_component(radiogroup, div2, null);
        append(div6, t1);
        append(div6, div5);
        append(div5, label0);
        append(label0, div3);
        append(div3, i0);
        i0.innerHTML = playSvg;
        append(label0, t2);
        append(label0, input0);
        set_input_value(
          input0,
          /*$pageStart*/
          ctx[18]
        );
        append(div5, t3);
        append(div5, label1);
        append(label1, div4);
        append(div4, i1);
        i1.innerHTML = stopOutLineSvg;
        append(label1, t4);
        append(label1, input1);
        set_input_value(
          input1,
          /*$pageEnd*/
          ctx[19]
        );
        current = true;
        if (!mounted) {
          dispose = [
            action_destroyer(nonNegativeInt.call(
              null,
              input0,
              /*pageStart*/
              ctx[29]
            )),
            listen(
              input0,
              "input",
              /*input0_input_handler*/
              ctx[46]
            ),
            action_destroyer(nonNegativeInt.call(
              null,
              input1,
              /*pageEnd*/
              ctx[30]
            )),
            listen(
              input1,
              "input",
              /*input1_input_handler*/
              ctx[47]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*downloaderConfig, $selectedFilters*/
        65537) {
          each_value_1 = ensure_array_like(
            /*downloaderConfig*/
            ctx2[0].filterOption.filters
          );
          let i;
          for (i = 0; i < each_value_1.length; i += 1) {
            const child_ctx = get_each_context_1(ctx2, each_value_1, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block_1(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(div0, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value_1.length;
        }
        const radiogroup_changes = {};
        if (dirty[0] & /*$downloadAllPages*/
        131072 | dirty[2] & /*$$scope*/
        8388608) {
          radiogroup_changes.$$scope = { dirty, ctx: ctx2 };
        }
        radiogroup.$set(radiogroup_changes);
        if (!current || dirty[0] & /*$downloadAllPages*/
        131072) {
          input0.disabled = /*$downloadAllPages*/
          ctx2[17];
        }
        if (dirty[0] & /*$pageStart*/
        262144 && to_number(input0.value) !== /*$pageStart*/
        ctx2[18]) {
          set_input_value(
            input0,
            /*$pageStart*/
            ctx2[18]
          );
        }
        if (!current || dirty[0] & /*$downloadAllPages*/
        131072) {
          input1.disabled = /*$downloadAllPages*/
          ctx2[17];
        }
        if (dirty[0] & /*$pageEnd*/
        524288 && to_number(input1.value) !== /*$pageEnd*/
        ctx2[19]) {
          set_input_value(
            input1,
            /*$pageEnd*/
            ctx2[19]
          );
        }
      },
      i(local) {
        if (current) return;
        transition_in(radiogroup.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radiogroup.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
          detach(t0);
          detach(div6);
        }
        destroy_each(each_blocks, detaching);
        destroy_component(radiogroup);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_each_block_1(ctx) {
    let label;
    let div0;
    let input;
    let input_value_value;
    let value_has_changed = false;
    let t0;
    let div1;
    let t1_value = (
      /*name*/
      ctx[79] + ""
    );
    let t1;
    let t2;
    let binding_group;
    let mounted;
    let dispose;
    binding_group = init_binding_group(
      /*$$binding_groups*/
      ctx[43][0]
    );
    return {
      c() {
        label = element("label");
        div0 = element("div");
        input = element("input");
        t0 = space();
        div1 = element("div");
        t1 = text(t1_value);
        t2 = space();
        attr(input, "type", "checkbox");
        input.__value = input_value_value = /*id*/
        ctx[80];
        set_input_value(input, input.__value);
        attr(div0, "class", "w-0 h-0 overflow-hidden hidden");
        attr(div1, "class", "!m-0");
        attr(label, "class", "btn !py-2 rounded-none !transform-none cursor-pointer variant-soft-surface has-[:checked]:!variant-filled-primary text-sm w-full");
        binding_group.p(input);
      },
      m(target, anchor) {
        insert(target, label, anchor);
        append(label, div0);
        append(div0, input);
        input.checked = ~/*$selectedFilters*/
        (ctx[16] || []).indexOf(input.__value);
        append(label, t0);
        append(label, div1);
        append(div1, t1);
        append(label, t2);
        if (!mounted) {
          dispose = listen(
            input,
            "change",
            /*input_change_handler*/
            ctx[42]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*downloaderConfig*/
        1 && input_value_value !== (input_value_value = /*id*/
        ctx2[80])) {
          input.__value = input_value_value;
          set_input_value(input, input.__value);
          value_has_changed = true;
        }
        if (value_has_changed || dirty[0] & /*$selectedFilters, downloaderConfig*/
        65537) {
          input.checked = ~/*$selectedFilters*/
          (ctx2[16] || []).indexOf(input.__value);
        }
        if (dirty[0] & /*downloaderConfig*/
        1 && t1_value !== (t1_value = /*name*/
        ctx2[79] + "")) set_data(t1, t1_value);
      },
      d(detaching) {
        if (detaching) {
          detach(label);
        }
        binding_group.r();
        mounted = false;
        dispose();
      }
    };
  }
  function create_default_slot_2(ctx) {
    let t_1_value = t("downloader.category.filter.download_all_pages") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot_1(ctx) {
    let t_1_value = t("downloader.category.filter.download_selected_pages") + "";
    let t_1;
    return {
      c() {
        t_1 = text(t_1_value);
      },
      m(target, anchor) {
        insert(target, t_1, anchor);
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
      }
    };
  }
  function create_default_slot(ctx) {
    let radioitem0;
    let updating_group;
    let t_1;
    let radioitem1;
    let updating_group_1;
    let current;
    function radioitem0_group_binding(value) {
      ctx[44](value);
    }
    let radioitem0_props = {
      class: "text-sm !py-[7px]",
      name: "justify",
      value: true,
      $$slots: { default: [create_default_slot_2] },
      $$scope: { ctx }
    };
    if (
      /*$downloadAllPages*/
      ctx[17] !== void 0
    ) {
      radioitem0_props.group = /*$downloadAllPages*/
      ctx[17];
    }
    radioitem0 = new RadioItem({ props: radioitem0_props });
    binding_callbacks.push(() => bind(radioitem0, "group", radioitem0_group_binding));
    function radioitem1_group_binding(value) {
      ctx[45](value);
    }
    let radioitem1_props = {
      class: "text-sm !py-[7px]",
      name: "justify",
      value: false,
      $$slots: { default: [create_default_slot_1] },
      $$scope: { ctx }
    };
    if (
      /*$downloadAllPages*/
      ctx[17] !== void 0
    ) {
      radioitem1_props.group = /*$downloadAllPages*/
      ctx[17];
    }
    radioitem1 = new RadioItem({ props: radioitem1_props });
    binding_callbacks.push(() => bind(radioitem1, "group", radioitem1_group_binding));
    return {
      c() {
        create_component(radioitem0.$$.fragment);
        t_1 = space();
        create_component(radioitem1.$$.fragment);
      },
      m(target, anchor) {
        mount_component(radioitem0, target, anchor);
        insert(target, t_1, anchor);
        mount_component(radioitem1, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const radioitem0_changes = {};
        if (dirty[2] & /*$$scope*/
        8388608) {
          radioitem0_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group && dirty[0] & /*$downloadAllPages*/
        131072) {
          updating_group = true;
          radioitem0_changes.group = /*$downloadAllPages*/
          ctx2[17];
          add_flush_callback(() => updating_group = false);
        }
        radioitem0.$set(radioitem0_changes);
        const radioitem1_changes = {};
        if (dirty[2] & /*$$scope*/
        8388608) {
          radioitem1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        if (!updating_group_1 && dirty[0] & /*$downloadAllPages*/
        131072) {
          updating_group_1 = true;
          radioitem1_changes.group = /*$downloadAllPages*/
          ctx2[17];
          add_flush_callback(() => updating_group_1 = false);
        }
        radioitem1.$set(radioitem1_changes);
      },
      i(local) {
        if (current) return;
        transition_in(radioitem0.$$.fragment, local);
        transition_in(radioitem1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(radioitem0.$$.fragment, local);
        transition_out(radioitem1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
        }
        destroy_component(radioitem0, detaching);
        destroy_component(radioitem1, detaching);
      }
    };
  }
  function create_panel_slot(ctx) {
    let current_block_type_index;
    let if_block;
    let if_block_anchor;
    let current;
    const if_block_creators = [create_if_block_10, create_if_block_11, create_if_block_12];
    const if_blocks = [];
    function select_block_type(ctx2, dirty) {
      if (
        /*tabSet*/
        ctx2[12] === 0
      ) return 0;
      if (
        /*tabSet*/
        ctx2[12] === 1
      ) return 1;
      if (
        /*tabSet*/
        ctx2[12] === 2
      ) return 2;
      return -1;
    }
    if (~(current_block_type_index = select_block_type(ctx))) {
      if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    }
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (~current_block_type_index) {
          if_blocks[current_block_type_index].m(target, anchor);
        }
        insert(target, if_block_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        let previous_block_index = current_block_type_index;
        current_block_type_index = select_block_type(ctx2);
        if (current_block_type_index === previous_block_index) {
          if (~current_block_type_index) {
            if_blocks[current_block_type_index].p(ctx2, dirty);
          }
        } else {
          if (if_block) {
            group_outros();
            transition_out(if_blocks[previous_block_index], 1, 1, () => {
              if_blocks[previous_block_index] = null;
            });
            check_outros();
          }
          if (~current_block_type_index) {
            if_block = if_blocks[current_block_type_index];
            if (!if_block) {
              if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2);
              if_block.c();
            } else {
              if_block.p(ctx2, dirty);
            }
            transition_in(if_block, 1);
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          } else {
            if_block = null;
          }
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (~current_block_type_index) {
          if_blocks[current_block_type_index].d(detaching);
        }
      }
    };
  }
  function create_else_block(ctx) {
    var _a;
    let div2;
    let div1;
    let progressbar;
    let t0;
    let div0;
    let p0;
    let t1_value = (
      /*$log*/
      (((_a = ctx[23]) == null ? void 0 : _a.message) ?? "") + ""
    );
    let t1;
    let t2;
    let p1;
    let t3_value = (
      /*$artworkCount*/
      ctx[4] ? `${/*processed*/
    ctx[2]} / ${/*$artworkCount*/
    ctx[4]}` : ""
    );
    let t3;
    let t4;
    let button;
    let i;
    let t5;
    let span;
    let div2_transition;
    let current;
    let mounted;
    let dispose;
    progressbar = new ProgressBar({
      props: {
        height: "h-4",
        rounded: "rounded-md",
        meter: "bg-primary-500",
        track: "bg-primary-500/30",
        max: 100,
        value: (
          /*downloadProgress*/
          ctx[15]
        )
      }
    });
    return {
      c() {
        var _a2;
        div2 = element("div");
        div1 = element("div");
        create_component(progressbar.$$.fragment);
        t0 = space();
        div0 = element("div");
        p0 = element("p");
        t1 = text(t1_value);
        t2 = space();
        p1 = element("p");
        t3 = text(t3_value);
        t4 = space();
        button = element("button");
        i = element("i");
        t5 = space();
        span = element("span");
        span.textContent = `${t("downloader.download_type.stop")}`;
        attr(p0, "class", "truncate");
        toggle_class(
          p0,
          "text-error-500",
          /*$log*/
          ((_a2 = ctx[23]) == null ? void 0 : _a2.type) === "Error"
        );
        attr(p1, "class", "flex-none");
        attr(div0, "class", "flex items-center justify-between gap-4 basis-0 text-surface-700-200-token");
        attr(div1, "class", "flex flex-grow flex-col justify-between h-full overflow-hidden");
        attr(i, "class", "w-5");
        attr(button, "class", "btn variant-filled-primary");
        attr(div2, "class", "flex flex-grow w-full gap-6 items-center");
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, div1);
        mount_component(progressbar, div1, null);
        append(div1, t0);
        append(div1, div0);
        append(div0, p0);
        append(p0, t1);
        append(div0, t2);
        append(div0, p1);
        append(p1, t3);
        append(div2, t4);
        append(div2, button);
        append(button, i);
        i.innerHTML = stopSvg;
        append(button, t5);
        append(button, span);
        ctx[60](div2);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              button,
              "click",
              /*click_handler_2*/
              ctx[59]
            ),
            listen(
              div2,
              "introstart",
              /*introstart_handler_1*/
              ctx[61]
            ),
            listen(
              div2,
              "outrostart",
              /*outrostart_handler_1*/
              ctx[62]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        var _a2, _b;
        const progressbar_changes = {};
        if (dirty[0] & /*downloadProgress*/
        32768) progressbar_changes.value = /*downloadProgress*/
        ctx2[15];
        progressbar.$set(progressbar_changes);
        if ((!current || dirty[0] & /*$log*/
        8388608) && t1_value !== (t1_value = /*$log*/
        (((_a2 = ctx2[23]) == null ? void 0 : _a2.message) ?? "") + "")) set_data(t1, t1_value);
        if (!current || dirty[0] & /*$log*/
        8388608) {
          toggle_class(
            p0,
            "text-error-500",
            /*$log*/
            ((_b = ctx2[23]) == null ? void 0 : _b.type) === "Error"
          );
        }
        if ((!current || dirty[0] & /*$artworkCount, processed*/
        20) && t3_value !== (t3_value = /*$artworkCount*/
        ctx2[4] ? `${/*processed*/
      ctx2[2]} / ${/*$artworkCount*/
      ctx2[4]}` : "")) set_data(t3, t3_value);
      },
      i(local) {
        if (current) return;
        transition_in(progressbar.$$.fragment, local);
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div2_transition) div2_transition = create_bidirectional_transition(div2, fade, { duration: 250 }, true);
            div2_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        transition_out(progressbar.$$.fragment, local);
        if (local) {
          if (!div2_transition) div2_transition = create_bidirectional_transition(div2, fade, { duration: 250 }, false);
          div2_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        destroy_component(progressbar);
        ctx[60](null);
        if (detaching && div2_transition) div2_transition.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_6(ctx) {
    var _a;
    let div1;
    let div0;
    let p0;
    let t0;
    let t1;
    let p1;
    let t2_value = (
      /*$log*/
      (((_a = ctx[23]) == null ? void 0 : _a.message) ?? "") + ""
    );
    let t2;
    let t3;
    let show_if;
    let show_if_1;
    let div1_transition;
    let current;
    let mounted;
    let dispose;
    function select_block_type_2(ctx2, dirty) {
      if (dirty[0] & /*pageConfig*/
      2) show_if = null;
      if (dirty[0] & /*pageConfig*/
      2) show_if_1 = null;
      if (show_if == null) show_if = !!/*pageConfig*/
      (ctx2[1] && Array.isArray(
        /*pageConfig*/
        ctx2[1].genPageId
      ));
      if (show_if) return create_if_block_7;
      if (show_if_1 == null) show_if_1 = !!/*pageConfig*/
      (ctx2[1] && !Array.isArray(
        /*pageConfig*/
        ctx2[1].genPageId
      ));
      if (show_if_1) return create_if_block_8;
    }
    let current_block_type = select_block_type_2(ctx, [-1, -1, -1]);
    let if_block = current_block_type && current_block_type(ctx);
    return {
      c() {
        var _a2;
        div1 = element("div");
        div0 = element("div");
        p0 = element("p");
        t0 = text(
          /*downloadResult*/
          ctx[14]
        );
        t1 = space();
        p1 = element("p");
        t2 = text(t2_value);
        t3 = space();
        if (if_block) if_block.c();
        attr(p0, "class", "truncate");
        attr(p1, "class", "break-words");
        toggle_class(
          p1,
          "text-error-500",
          /*$log*/
          ((_a2 = ctx[23]) == null ? void 0 : _a2.type) === "Error"
        );
        attr(div0, "class", "flex flex-grow flex-col justify-between overflow-hidden text-surface-700-200-token");
        attr(div1, "class", "flex justify-end flex-grow w-full gap-4");
      },
      m(target, anchor) {
        insert(target, div1, anchor);
        append(div1, div0);
        append(div0, p0);
        append(p0, t0);
        append(div0, t1);
        append(div0, p1);
        append(p1, t2);
        append(div1, t3);
        if (if_block) if_block.m(div1, null);
        ctx[56](div1);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              div1,
              "introstart",
              /*introstart_handler*/
              ctx[57]
            ),
            listen(
              div1,
              "outrostart",
              /*outrostart_handler*/
              ctx[58]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        var _a2, _b;
        if (!current || dirty[0] & /*downloadResult*/
        16384) set_data(
          t0,
          /*downloadResult*/
          ctx2[14]
        );
        if ((!current || dirty[0] & /*$log*/
        8388608) && t2_value !== (t2_value = /*$log*/
        (((_a2 = ctx2[23]) == null ? void 0 : _a2.message) ?? "") + "")) set_data(t2, t2_value);
        if (!current || dirty[0] & /*$log*/
        8388608) {
          toggle_class(
            p1,
            "text-error-500",
            /*$log*/
            ((_b = ctx2[23]) == null ? void 0 : _b.type) === "Error"
          );
        }
        if (current_block_type === (current_block_type = select_block_type_2(ctx2, dirty)) && if_block) {
          if_block.p(ctx2, dirty);
        } else {
          if (if_block) if_block.d(1);
          if_block = current_block_type && current_block_type(ctx2);
          if (if_block) {
            if_block.c();
            if_block.m(div1, null);
          }
        }
      },
      i(local) {
        if (current) return;
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div1_transition) div1_transition = create_bidirectional_transition(div1, fade, { duration: 250 }, true);
            div1_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        if (local) {
          if (!div1_transition) div1_transition = create_bidirectional_transition(div1, fade, { duration: 250 }, false);
          div1_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div1);
        }
        if (if_block) {
          if_block.d();
        }
        ctx[56](null);
        if (detaching && div1_transition) div1_transition.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_8(ctx) {
    let button;
    let i;
    let t0;
    let span;
    let t1_value = (
      /*pageConfig*/
      ctx[1].genPageId.name + ""
    );
    let t1;
    let mounted;
    let dispose;
    return {
      c() {
        button = element("button");
        i = element("i");
        t0 = space();
        span = element("span");
        t1 = text(t1_value);
        attr(i, "class", "w-5");
        attr(button, "class", "btn variant-filled-primary self-start");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, i);
        i.innerHTML = downloadSvg;
        append(button, t0);
        append(button, span);
        append(span, t1);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*click_handler_1*/
            ctx[55]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*pageConfig*/
        2 && t1_value !== (t1_value = /*pageConfig*/
        ctx2[1].genPageId.name + "")) set_data(t1, t1_value);
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_if_block_7(ctx) {
    let div;
    let each_value = ensure_array_like(
      /*pageConfig*/
      ctx[1].genPageId
    );
    let each_blocks = [];
    for (let i = 0; i < each_value.length; i += 1) {
      each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
    }
    return {
      c() {
        div = element("div");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        attr(div, "class", "flex-none btn-group self-start");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(div, null);
          }
        }
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*startDownload, pageConfig*/
        16777218) {
          each_value = ensure_array_like(
            /*pageConfig*/
            ctx2[1].genPageId
          );
          let i;
          for (i = 0; i < each_value.length; i += 1) {
            const child_ctx = get_each_context(ctx2, each_value, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(div, null);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value.length;
        }
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_each(each_blocks, detaching);
      }
    };
  }
  function create_each_block(ctx) {
    let button;
    let i;
    let t0;
    let span;
    let t1_value = (
      /*name*/
      ctx[79] + ""
    );
    let t1;
    let t2;
    let mounted;
    let dispose;
    function click_handler() {
      return (
        /*click_handler*/
        ctx[54](
          /*id*/
          ctx[80]
        )
      );
    }
    return {
      c() {
        button = element("button");
        i = element("i");
        t0 = space();
        span = element("span");
        t1 = text(t1_value);
        t2 = space();
        attr(i, "class", "w-5");
        attr(button, "class", "btn rounded-none !transform-none !variant-filled-primary");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, i);
        i.innerHTML = downloadSvg;
        append(button, t0);
        append(button, span);
        append(span, t1);
        append(button, t2);
        if (!mounted) {
          dispose = listen(button, "click", click_handler);
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty[0] & /*pageConfig*/
        2 && t1_value !== (t1_value = /*name*/
        ctx[79] + "")) set_data(t1, t1_value);
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_if_block$1(ctx) {
    let div2;
    let div0;
    let promise2;
    let t0;
    let t1;
    let div1;
    let current_block_type_index;
    let if_block1;
    let div2_transition;
    let current;
    let mounted;
    let dispose;
    let info = {
      ctx,
      current: null,
      token: null,
      hasCatch: false,
      pending: create_pending_block,
      then: create_then_block,
      catch: create_catch_block,
      value: 78
    };
    handle_promise(promise2 = /*avatarUpdated*/
    ctx[11], info);
    let if_block0 = (
      /*$downloading*/
      ctx[5] && !/*showDownloadMenu*/
      ctx[13] && create_if_block_3(ctx)
    );
    const if_block_creators = [create_if_block_1$1, create_if_block_2];
    const if_blocks = [];
    function select_block_type_3(ctx2, dirty) {
      if (
        /*$downloading*/
        ctx2[5] && /*$artworkCount*/
        ctx2[4] && !/*showDownloadMenu*/
        ctx2[13]
      ) return 0;
      if (!/*showDownloadMenu*/
      ctx2[13]) return 1;
      return -1;
    }
    if (~(current_block_type_index = select_block_type_3(ctx))) {
      if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    }
    return {
      c() {
        div2 = element("div");
        div0 = element("div");
        info.block.c();
        t0 = space();
        if (if_block0) if_block0.c();
        t1 = space();
        div1 = element("div");
        if (if_block1) if_block1.c();
        attr(div0, "data-theme", "skeleton");
        attr(div0, "class", "avatar absolute -z-10 size-14 rounded-full overflow-hidden bg-scroll transition-opacity duration-[250ms]");
        toggle_class(div0, "opacity-70", !/*showDownloadMenu*/
        ctx[13]);
        toggle_class(div0, "blur-[1px]", !/*showDownloadMenu*/
        ctx[13]);
        attr(div1, "class", "size-14 flex justify-center items-center relative");
        attr(div2, "class", "size-14 rounded-full fixed right-4 top-36 drop-shadow-xl cursor-pointer hover:brightness-110 backdrop-blur-sm");
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        append(div2, div0);
        info.block.m(div0, info.anchor = null);
        info.mount = () => div0;
        info.anchor = null;
        append(div2, t0);
        if (if_block0) if_block0.m(div2, null);
        append(div2, t1);
        append(div2, div1);
        if (~current_block_type_index) {
          if_blocks[current_block_type_index].m(div1, null);
        }
        current = true;
        if (!mounted) {
          dispose = listen(
            div2,
            "click",
            /*click_handler_3*/
            ctx[70]
          );
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        info.ctx = ctx;
        if (dirty[0] & /*avatarUpdated*/
        2048 && promise2 !== (promise2 = /*avatarUpdated*/
        ctx[11]) && handle_promise(promise2, info)) ;
        else {
          update_await_block_branch(info, ctx, dirty);
        }
        if (!current || dirty[0] & /*showDownloadMenu*/
        8192) {
          toggle_class(div0, "opacity-70", !/*showDownloadMenu*/
          ctx[13]);
        }
        if (!current || dirty[0] & /*showDownloadMenu*/
        8192) {
          toggle_class(div0, "blur-[1px]", !/*showDownloadMenu*/
          ctx[13]);
        }
        if (
          /*$downloading*/
          ctx[5] && !/*showDownloadMenu*/
          ctx[13]
        ) {
          if (if_block0) {
            if_block0.p(ctx, dirty);
            if (dirty[0] & /*$downloading, showDownloadMenu*/
            8224) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_3(ctx);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div2, t1);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        let previous_block_index = current_block_type_index;
        current_block_type_index = select_block_type_3(ctx);
        if (current_block_type_index === previous_block_index) {
          if (~current_block_type_index) {
            if_blocks[current_block_type_index].p(ctx, dirty);
          }
        } else {
          if (if_block1) {
            group_outros();
            transition_out(if_blocks[previous_block_index], 1, 1, () => {
              if_blocks[previous_block_index] = null;
            });
            check_outros();
          }
          if (~current_block_type_index) {
            if_block1 = if_blocks[current_block_type_index];
            if (!if_block1) {
              if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
              if_block1.c();
            } else {
              if_block1.p(ctx, dirty);
            }
            transition_in(if_block1, 1);
            if_block1.m(div1, null);
          } else {
            if_block1 = null;
          }
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(if_block1);
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div2_transition) div2_transition = create_bidirectional_transition(div2, fly, { opacity: 0, x: 50 }, true);
            div2_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(if_block1);
        if (local) {
          if (!div2_transition) div2_transition = create_bidirectional_transition(div2, fly, { opacity: 0, x: 50 }, false);
          div2_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        info.block.d();
        info.token = null;
        info = null;
        if (if_block0) if_block0.d();
        if (~current_block_type_index) {
          if_blocks[current_block_type_index].d();
        }
        if (detaching && div2_transition) div2_transition.end();
        mounted = false;
        dispose();
      }
    };
  }
  function create_catch_block(ctx) {
    return { c: noop, m: noop, p: noop, d: noop };
  }
  function create_then_block(ctx) {
    let if_block_anchor;
    let if_block = (
      /*val*/
      ctx[78] && create_if_block_4(ctx)
    );
    return {
      c() {
        if (if_block) if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (if_block) if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
      },
      p(ctx2, dirty) {
        if (
          /*val*/
          ctx2[78]
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
          } else {
            if_block = create_if_block_4(ctx2);
            if_block.c();
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          }
        } else if (if_block) {
          if_block.d(1);
          if_block = null;
        }
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) if_block.d(detaching);
      }
    };
  }
  function create_if_block_4(ctx) {
    let img;
    let img_src_value;
    return {
      c() {
        img = element("img");
        if (!src_url_equal(img.src, img_src_value = /*val*/
        ctx[78])) attr(img, "src", img_src_value);
        attr(img, "alt", "batch download");
        attr(img, "class", "object-cover object-center size-full");
      },
      m(target, anchor) {
        insert(target, img, anchor);
        ctx[63](img);
      },
      p(ctx2, dirty) {
        if (dirty[0] & /*avatarUpdated*/
        2048 && !src_url_equal(img.src, img_src_value = /*val*/
        ctx2[78])) {
          attr(img, "src", img_src_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(img);
        }
        ctx[63](null);
      }
    };
  }
  function create_pending_block(ctx) {
    return { c: noop, m: noop, p: noop, d: noop };
  }
  function create_if_block_3(ctx) {
    let div;
    let progressradial;
    let div_transition;
    let current;
    progressradial = new ProgressRadial({
      props: {
        width: "w-16",
        stroke: 32,
        meter: "stroke-primary-500",
        track: "stroke-primary-500/30",
        fill: "fill-primary-500",
        strokeLinecap: "butt",
        value: (
          /*downloadProgress*/
          ctx[15]
        )
      }
    });
    return {
      c() {
        div = element("div");
        create_component(progressradial.$$.fragment);
        attr(div, "class", "!absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(progressradial, div, null);
        current = true;
      },
      p(ctx2, dirty) {
        const progressradial_changes = {};
        if (dirty[0] & /*downloadProgress*/
        32768) progressradial_changes.value = /*downloadProgress*/
        ctx2[15];
        progressradial.$set(progressradial_changes);
      },
      i(local) {
        if (current) return;
        transition_in(progressradial.$$.fragment, local);
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div_transition) div_transition = create_bidirectional_transition(div, fade, { duration: 250 }, true);
            div_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        transition_out(progressradial.$$.fragment, local);
        if (local) {
          if (!div_transition) div_transition = create_bidirectional_transition(div, fade, { duration: 250 }, false);
          div_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(progressradial);
        if (detaching && div_transition) div_transition.end();
      }
    };
  }
  function create_if_block_2(ctx) {
    let i;
    let i_transition;
    let current;
    let mounted;
    let dispose;
    return {
      c() {
        i = element("i");
        attr(i, "class", "w-6 fill-slate-700 dark:fill-slate-200 mix-blend-hard-light mt-4");
      },
      m(target, anchor) {
        insert(target, i, anchor);
        i.innerHTML = downloadMultipleSvg;
        ctx[67](i);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              i,
              "introstart",
              /*introstart_handler_3*/
              ctx[68]
            ),
            listen(
              i,
              "outrostart",
              /*outrostart_handler_3*/
              ctx[69]
            )
          ];
          mounted = true;
        }
      },
      p: noop,
      i(local) {
        if (current) return;
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!i_transition) i_transition = create_bidirectional_transition(i, fade, { duration: 250 }, true);
            i_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        if (local) {
          if (!i_transition) i_transition = create_bidirectional_transition(i, fade, { duration: 250 }, false);
          i_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(i);
        }
        ctx[67](null);
        if (detaching && i_transition) i_transition.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_if_block_1$1(ctx) {
    let div;
    let span0;
    let t0;
    let t1;
    let hr;
    let t2;
    let span1;
    let t3;
    let div_transition;
    let current;
    let mounted;
    let dispose;
    return {
      c() {
        div = element("div");
        span0 = element("span");
        t0 = text(
          /*processed*/
          ctx[2]
        );
        t1 = space();
        hr = element("hr");
        t2 = space();
        span1 = element("span");
        t3 = text(
          /*$artworkCount*/
          ctx[4]
        );
        attr(span0, "class", "truncate max-w-full");
        attr(hr, "class", "!border-t-1 my-[1px] self-stretch !border-surface-700 dark:!border-surface-200");
        attr(span1, "class", "truncate max-w-full");
        attr(div, "class", "flex flex-col justify-center items-center px-3 font-bold text-[12px] leading-[14px] overflow-hidden text-surface-700-200-token");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, span0);
        append(span0, t0);
        append(div, t1);
        append(div, hr);
        append(div, t2);
        append(div, span1);
        append(span1, t3);
        ctx[64](div);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              div,
              "introstart",
              /*introstart_handler_2*/
              ctx[65]
            ),
            listen(
              div,
              "outrostart",
              /*outrostart_handler_2*/
              ctx[66]
            )
          ];
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (!current || dirty[0] & /*processed*/
        4) set_data(
          t0,
          /*processed*/
          ctx2[2]
        );
        if (!current || dirty[0] & /*$artworkCount*/
        16) set_data(
          t3,
          /*$artworkCount*/
          ctx2[4]
        );
      },
      i(local) {
        if (current) return;
        if (local) {
          add_render_callback(() => {
            if (!current) return;
            if (!div_transition) div_transition = create_bidirectional_transition(div, fade, { duration: 250 }, true);
            div_transition.run(1);
          });
        }
        current = true;
      },
      o(local) {
        if (local) {
          if (!div_transition) div_transition = create_bidirectional_transition(div, fade, { duration: 250 }, false);
          div_transition.run(0);
        }
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        ctx[64](null);
        if (detaching && div_transition) div_transition.end();
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function create_fragment$1(ctx) {
    let t_1;
    let if_block1_anchor;
    let current;
    let if_block0 = (
      /*showDownloadMenu*/
      ctx[13] && /*ifDownloaderCanShow*/
      ctx[3] && create_if_block_5(ctx)
    );
    let if_block1 = (
      /*ifDownloaderCanShow*/
      ctx[3] && create_if_block$1(ctx)
    );
    return {
      c() {
        if (if_block0) if_block0.c();
        t_1 = space();
        if (if_block1) if_block1.c();
        if_block1_anchor = empty();
      },
      m(target, anchor) {
        if (if_block0) if_block0.m(target, anchor);
        insert(target, t_1, anchor);
        if (if_block1) if_block1.m(target, anchor);
        insert(target, if_block1_anchor, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        if (
          /*showDownloadMenu*/
          ctx2[13] && /*ifDownloaderCanShow*/
          ctx2[3]
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty[0] & /*showDownloadMenu, ifDownloaderCanShow*/
            8200) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_5(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(t_1.parentNode, t_1);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (
          /*ifDownloaderCanShow*/
          ctx2[3]
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
            if (dirty[0] & /*ifDownloaderCanShow*/
            8) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block$1(ctx2);
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(if_block1_anchor.parentNode, if_block1_anchor);
          }
        } else if (if_block1) {
          group_outros();
          transition_out(if_block1, 1, 1, () => {
            if_block1 = null;
          });
          check_outros();
        }
      },
      i(local) {
        if (current) return;
        transition_in(if_block0);
        transition_in(if_block1);
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(if_block1);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t_1);
          detach(if_block1_anchor);
        }
        if (if_block0) if_block0.d(detaching);
        if (if_block1) if_block1.d(detaching);
      }
    };
  }
  function beforeUnloadHandler(evt) {
    evt.preventDefault();
    evt.returnValue = true;
  }
  function instance$1($$self, $$props, $$invalidate) {
    let ifDownloaderCanShow;
    let processed;
    let downloadProgress;
    let downloadResult;
    let $excluded;
    let $failed;
    let $successd;
    let $artworkCount;
    let $downloading;
    let $selectedFilters;
    let $downloadAllPages;
    let $pageStart;
    let $pageEnd;
    let $blacklistTag;
    let $whitelistTag;
    let $retryFailed;
    let $log;
    function initFilterStore() {
      Array.isArray($selectedFilters) || set_store_value(selectedFilters, $selectedFilters = downloaderConfig.filterOption.filters.filter((filter) => filter.checked).map((filter) => filter.id), $selectedFilters);
    }
    async function updateAvatarSrc(url2) {
      if (!downloaderConfig.avatar) return;
      if ($downloading) {
        updateAvatarAfterDownload = url2;
        return;
      }
      let src;
      if (typeof downloaderConfig.avatar === "string") {
        src = downloaderConfig.avatar;
      } else {
        if (url2 in avatarCache) {
          src = avatarCache[url2];
        } else {
          src = await downloaderConfig.avatar(url2);
          avatarCache[url2] = src;
        }
      }
      if (!src || avatarEl && avatarEl.src === src) return;
      let imageLoaded;
      $$invalidate(11, avatarUpdated = new Promise((resolve) => {
        imageLoaded = resolve;
      }));
      const el = document.createElement("img");
      el.src = src;
      el.onload = () => {
        imageLoaded(src);
      };
    }
    function onUrlChange(url2) {
      logger.info("Navigating to ", url2);
      if (!downloaderConfig) return;
      const pageConfigs = downloaderConfig.pageMatch;
      for (let i = 0; i < pageConfigs.length; i++) {
        const matchPattern = pageConfigs[i].match;
        if (typeof matchPattern === "string") {
          if (url2.match(matchPattern)) {
            $$invalidate(1, pageConfig = pageConfigs[i]);
            updateAvatarSrc(url2);
            return;
          }
        } else if (typeof matchPattern === "function") {
          if (matchPattern(url2)) {
            $$invalidate(1, pageConfig = pageConfigs[i]);
            updateAvatarSrc(url2);
            return;
          }
        } else {
          if (matchPattern.test(url2)) {
            $$invalidate(1, pageConfig = pageConfigs[i]);
            updateAvatarSrc(url2);
            return;
          }
        }
      }
      $$invalidate(1, pageConfig = null);
      updateAvatarAfterDownload = "";
    }
    function watchUrlChange() {
      if ("navigation" in window) {
        let prevUrl;
        let nextUrl;
        navigation.addEventListener("navigatesuccess", () => {
          prevUrl !== nextUrl && onUrlChange(nextUrl);
        });
        navigation.addEventListener("navigate", (evt) => {
          prevUrl = location.href;
          nextUrl = evt.destination.url;
        });
      } else {
        const rewrite = (type) => {
          const oriHistory = history[type];
          return function(...args) {
            const currentUrl = location.href;
            const res = oriHistory.apply(this, args);
            const navigateUrl = location.href;
            currentUrl !== navigateUrl && onUrlChange(navigateUrl);
            return res;
          };
        };
        history.pushState = rewrite("pushState");
        history.replaceState = rewrite("replaceState");
      }
    }
    async function startDownload(id) {
      const { genPageId } = pageConfig;
      if (Array.isArray(genPageId)) {
        id && await batchDownload(id);
      } else {
        !id && await batchDownload(genPageId.id);
      }
    }
    let { downloaderConfig } = $$props;
    let pageConfig;
    const { selectedFilters, blacklistTag, whitelistTag, downloadAllPages, pageStart, pageEnd, retryFailed } = optionStore;
    component_subscribe($$self, selectedFilters, (value) => $$invalidate(16, $selectedFilters = value));
    component_subscribe($$self, blacklistTag, (value) => $$invalidate(20, $blacklistTag = value));
    component_subscribe($$self, whitelistTag, (value) => $$invalidate(21, $whitelistTag = value));
    component_subscribe($$self, downloadAllPages, (value) => $$invalidate(17, $downloadAllPages = value));
    component_subscribe($$self, pageStart, (value) => $$invalidate(18, $pageStart = value));
    component_subscribe($$self, pageEnd, (value) => $$invalidate(19, $pageEnd = value));
    component_subscribe($$self, retryFailed, (value) => $$invalidate(22, $retryFailed = value));
    let startDownloadEl;
    let stopDownloadEl;
    let avatarEl;
    let avatarProgressEl;
    let avatarDownloadIcon;
    const avatarCache = {};
    let avatarUpdated;
    let updateAvatarAfterDownload;
    let tabSet = 0;
    let showDownloadMenu = false;
    initFilterStore();
    defineBatchDownload(downloaderConfig);
    const { artworkCount, successd, failed, excluded, downloading, log, batchDownload, abort } = useBatchDownload();
    component_subscribe($$self, artworkCount, (value) => $$invalidate(4, $artworkCount = value));
    component_subscribe($$self, successd, (value) => $$invalidate(41, $successd = value));
    component_subscribe($$self, failed, (value) => $$invalidate(40, $failed = value));
    component_subscribe($$self, excluded, (value) => $$invalidate(39, $excluded = value));
    component_subscribe($$self, downloading, (value) => $$invalidate(5, $downloading = value));
    component_subscribe($$self, log, (value) => $$invalidate(23, $log = value));
    watchUrlChange();
    onUrlChange(location.href);
    downloading.subscribe((val) => {
      if (val) {
        window.addEventListener("beforeunload", beforeUnloadHandler);
      } else {
        window.removeEventListener("beforeunload", beforeUnloadHandler);
        updateAvatarAfterDownload && pageConfig && updateAvatarSrc(updateAvatarAfterDownload);
      }
    });
    const $$binding_groups = [[]];
    function input_change_handler() {
      $selectedFilters = get_binding_group_value($$binding_groups[0], this.__value, this.checked);
      selectedFilters.set($selectedFilters);
    }
    function radioitem0_group_binding(value) {
      $downloadAllPages = value;
      downloadAllPages.set($downloadAllPages);
    }
    function radioitem1_group_binding(value) {
      $downloadAllPages = value;
      downloadAllPages.set($downloadAllPages);
    }
    function input0_input_handler() {
      $pageStart = to_number(this.value);
      pageStart.set($pageStart);
    }
    function input1_input_handler() {
      $pageEnd = to_number(this.value);
      pageEnd.set($pageEnd);
    }
    function inputchip0_value_binding(value) {
      $blacklistTag = value;
      blacklistTag.set($blacklistTag);
    }
    function inputchip1_value_binding(value) {
      $whitelistTag = value;
      whitelistTag.set($whitelistTag);
    }
    function slidetoggle_checked_binding(value) {
      $retryFailed = value;
      retryFailed.set($retryFailed);
    }
    function tab0_group_binding(value) {
      tabSet = value;
      $$invalidate(12, tabSet);
    }
    function tab1_group_binding(value) {
      tabSet = value;
      $$invalidate(12, tabSet);
    }
    function tab2_group_binding(value) {
      tabSet = value;
      $$invalidate(12, tabSet);
    }
    const click_handler = (id) => {
      startDownload(id);
    };
    const click_handler_1 = () => {
      startDownload();
    };
    function div1_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        startDownloadEl = $$value;
        $$invalidate(6, startDownloadEl);
      });
    }
    const introstart_handler = () => (
      // required when the transition reverses
      startDownloadEl.classList.remove("absolute")
    );
    const outrostart_handler = () => startDownloadEl.classList.add("absolute");
    const click_handler_2 = () => {
      abort();
    };
    function div2_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        stopDownloadEl = $$value;
        $$invalidate(7, stopDownloadEl);
      });
    }
    const introstart_handler_1 = () => stopDownloadEl.classList.remove("absolute");
    const outrostart_handler_1 = () => stopDownloadEl.classList.add("absolute");
    function img_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        avatarEl = $$value;
        $$invalidate(8, avatarEl);
      });
    }
    function div_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        avatarProgressEl = $$value;
        $$invalidate(9, avatarProgressEl);
      });
    }
    const introstart_handler_2 = () => avatarProgressEl.classList.remove("absolute");
    const outrostart_handler_2 = () => avatarProgressEl.classList.add("absolute");
    function i_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        avatarDownloadIcon = $$value;
        $$invalidate(10, avatarDownloadIcon);
      });
    }
    const introstart_handler_3 = () => avatarDownloadIcon.classList.remove("absolute");
    const outrostart_handler_3 = () => avatarDownloadIcon.classList.add("absolute");
    const click_handler_3 = () => {
      $$invalidate(13, showDownloadMenu = !showDownloadMenu);
    };
    $$self.$$set = ($$props2) => {
      if ("downloaderConfig" in $$props2) $$invalidate(0, downloaderConfig = $$props2.downloaderConfig);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty[0] & /*$downloading, pageConfig*/
      34) {
        $$invalidate(3, ifDownloaderCanShow = $downloading || !!pageConfig);
      }
      if ($$self.$$.dirty[0] & /*ifDownloaderCanShow*/
      8) {
        {
          if (!ifDownloaderCanShow) $$invalidate(13, showDownloadMenu = false);
        }
      }
      if ($$self.$$.dirty[1] & /*$successd, $failed, $excluded*/
      1792) {
        $$invalidate(2, processed = $successd.length + $failed.length + $excluded.length);
      }
      if ($$self.$$.dirty[0] & /*$artworkCount, processed*/
      20) {
        $$invalidate(15, downloadProgress = $artworkCount ? processed / $artworkCount * 100 : void 0);
      }
      if ($$self.$$.dirty[0] & /*$downloading, $artworkCount*/
      48 | $$self.$$.dirty[1] & /*$successd, $failed, $excluded*/
      1792) {
        $$invalidate(14, downloadResult = !$downloading && $artworkCount ? `Completed: ${$successd.length}. Failed: ${$failed.length}. Excluded: ${$excluded.length}.` : "");
      }
    };
    return [
      downloaderConfig,
      pageConfig,
      processed,
      ifDownloaderCanShow,
      $artworkCount,
      $downloading,
      startDownloadEl,
      stopDownloadEl,
      avatarEl,
      avatarProgressEl,
      avatarDownloadIcon,
      avatarUpdated,
      tabSet,
      showDownloadMenu,
      downloadResult,
      downloadProgress,
      $selectedFilters,
      $downloadAllPages,
      $pageStart,
      $pageEnd,
      $blacklistTag,
      $whitelistTag,
      $retryFailed,
      $log,
      startDownload,
      selectedFilters,
      blacklistTag,
      whitelistTag,
      downloadAllPages,
      pageStart,
      pageEnd,
      retryFailed,
      artworkCount,
      successd,
      failed,
      excluded,
      downloading,
      log,
      abort,
      $excluded,
      $failed,
      $successd,
      input_change_handler,
      $$binding_groups,
      radioitem0_group_binding,
      radioitem1_group_binding,
      input0_input_handler,
      input1_input_handler,
      inputchip0_value_binding,
      inputchip1_value_binding,
      slidetoggle_checked_binding,
      tab0_group_binding,
      tab1_group_binding,
      tab2_group_binding,
      click_handler,
      click_handler_1,
      div1_binding,
      introstart_handler,
      outrostart_handler,
      click_handler_2,
      div2_binding,
      introstart_handler_1,
      outrostart_handler_1,
      img_binding,
      div_binding,
      introstart_handler_2,
      outrostart_handler_2,
      i_binding,
      introstart_handler_3,
      outrostart_handler_3,
      click_handler_3
    ];
  }
  class Downloader extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$1, create_fragment$1, safe_not_equal, { downloaderConfig: 0 }, null, [-1, -1, -1]);
    }
  }
  const cog = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" /></svg>`;
  function create_if_block_1(ctx) {
    let downloader2;
    let current;
    downloader2 = new Downloader({
      props: {
        downloaderConfig: (
          /*downloaderConfig*/
          ctx[0]
        )
      }
    });
    return {
      c() {
        create_component(downloader2.$$.fragment);
      },
      m(target, anchor) {
        mount_component(downloader2, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const downloader_changes = {};
        if (dirty & /*downloaderConfig*/
        1) downloader_changes.downloaderConfig = /*downloaderConfig*/
        ctx2[0];
        downloader2.$set(downloader_changes);
      },
      i(local) {
        if (current) return;
        transition_in(downloader2.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(downloader2.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(downloader2, detaching);
      }
    };
  }
  function create_if_block(ctx) {
    let button;
    let i;
    let t0;
    let span;
    let mounted;
    let dispose;
    return {
      c() {
        button = element("button");
        i = element("i");
        t0 = space();
        span = element("span");
        span.textContent = `${t("button.setting")}`;
        attr(i, "class", "text-sm w-6 fill-current");
        attr(span, "class", "text-sm");
        attr(button, "type", "button");
        attr(button, "class", "btn btn-sm variant-filled fixed bottom-24 rounded-none rounded-s-full opacity-40 hover:opacity-100 right-0 translate-x-[calc(100%-44px)] hover:translate-x-0 delay-100");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, i);
        i.innerHTML = cog;
        append(button, t0);
        append(button, span);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*click_handler*/
            ctx[14]
          );
          mounted = true;
        }
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment(ctx) {
    let div;
    let modal;
    let t0;
    let t1;
    let div_class_value;
    let current;
    let mounted;
    let dispose;
    modal = new Modal({
      props: {
        components: (
          /*components*/
          ctx[6]
        ),
        class: "!p-0"
      }
    });
    let if_block0 = (
      /*downloaderConfig*/
      ctx[0] && create_if_block_1(ctx)
    );
    let if_block1 = (
      /*$store*/
      ctx[3].showPopupButton && create_if_block(ctx)
    );
    return {
      c() {
        div = element("div");
        create_component(modal.$$.fragment);
        t0 = space();
        if (if_block0) if_block0.c();
        t1 = space();
        if (if_block1) if_block1.c();
        attr(div, "class", div_class_value = "contents " + /*darkMode*/
        ctx[2]);
        attr(div, "data-theme", "skeleton");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(modal, div, null);
        append(div, t0);
        if (if_block0) if_block0.m(div, null);
        append(div, t1);
        if (if_block1) if_block1.m(div, null);
        ctx[15](div);
        current = true;
        if (!mounted) {
          dispose = [
            listen(
              window,
              "keydown",
              /*handleKeydown*/
              ctx[8],
              true
            ),
            listen(div, "keydown", stop_propagation(
              /*keydown_handler*/
              ctx[13]
            )),
            listen(div, "mousedown", preventBackDropClick, true),
            listen(div, "mouseup", preventBackDropClick, true)
          ];
          mounted = true;
        }
      },
      p(ctx2, [dirty]) {
        if (
          /*downloaderConfig*/
          ctx2[0]
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty & /*downloaderConfig*/
            1) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_1(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div, t1);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (
          /*$store*/
          ctx2[3].showPopupButton
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
          } else {
            if_block1 = create_if_block(ctx2);
            if_block1.c();
            if_block1.m(div, null);
          }
        } else if (if_block1) {
          if_block1.d(1);
          if_block1 = null;
        }
        if (!current || dirty & /*darkMode*/
        4 && div_class_value !== (div_class_value = "contents " + /*darkMode*/
        ctx2[2])) {
          attr(div, "class", div_class_value);
        }
      },
      i(local) {
        if (current) return;
        transition_in(modal.$$.fragment, local);
        transition_in(if_block0);
        current = true;
      },
      o(local) {
        transition_out(modal.$$.fragment, local);
        transition_out(if_block0);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(modal);
        if (if_block0) if_block0.d();
        if (if_block1) if_block1.d();
        ctx[15](null);
        mounted = false;
        run_all(dispose);
      }
    };
  }
  function preventBackDropClick(event) {
    if (!(event.target instanceof Element)) return;
    const classList = event.target.classList;
    if (classList.contains("modal-backdrop") || classList.contains("modal-transition")) {
      event.stopPropagation();
    }
  }
  function instance($$self, $$props, $$invalidate) {
    let darkMode;
    let $store;
    initializeStores();
    const store = initConfigStore();
    component_subscribe($$self, store, (value) => $$invalidate(3, $store = value));
    const modalStore = getModalStore();
    const components = {
      changelog: { ref: Changelog },
      setting: { ref: Config }
    };
    const changelogModal = {
      type: "component",
      component: "changelog"
    };
    const settingModal = { type: "component", component: "setting" };
    let { dark = false } = $$props;
    let { updated = false } = $$props;
    let { downloaderConfig } = $$props;
    function showChangelog() {
      modalStore.trigger(changelogModal);
    }
    function showSetting() {
      modalStore.trigger(settingModal);
    }
    let root;
    onMount(async () => {
      const shadow = root.getRootNode();
      addStyleToShadow(shadow);
      shadow.host.setAttribute("style", "position:fixed; z-index:99999");
      if (updated) {
        showChangelog();
      }
    });
    function modalExist() {
      return !!(root == null ? void 0 : root.querySelector(".modal-backdrop"));
    }
    function handleKeydown(event) {
      if (!modalExist()) return;
      if (event.code === "Escape") {
        modalStore.close();
        return;
      } else if (event.ctrlKey || event.shiftKey) {
        return;
      }
      if (!event.composedPath().includes(root)) {
        event.stopImmediatePropagation();
        event.preventDefault();
      }
    }
    function keydown_handler(event) {
      bubble.call(this, $$self, event);
    }
    const click_handler = () => modalStore.trigger(settingModal);
    function div_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        root = $$value;
        $$invalidate(1, root);
      });
    }
    $$self.$$set = ($$props2) => {
      if ("dark" in $$props2) $$invalidate(9, dark = $$props2.dark);
      if ("updated" in $$props2) $$invalidate(10, updated = $$props2.updated);
      if ("downloaderConfig" in $$props2) $$invalidate(0, downloaderConfig = $$props2.downloaderConfig);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*dark*/
      512) {
        $$invalidate(2, darkMode = dark ? "dark" : "");
      }
    };
    return [
      downloaderConfig,
      root,
      darkMode,
      $store,
      store,
      modalStore,
      components,
      settingModal,
      handleKeydown,
      dark,
      updated,
      showChangelog,
      showSetting,
      keydown_handler,
      click_handler,
      div_binding
    ];
  }
  class App extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance, create_fragment, safe_not_equal, {
        dark: 9,
        updated: 10,
        downloaderConfig: 0,
        showChangelog: 11,
        showSetting: 12
      });
    }
    get showChangelog() {
      return this.$$.ctx[11];
    }
    get showSetting() {
      return this.$$.ctx[12];
    }
  }
  const PdlApp = create_custom_element(
    App,
    { dark: { type: "Boolean" }, updated: { type: "Boolean" }, downloaderConfig: {} },
    [],
    ["showChangelog", "showSetting"],
    true,
    (customElementConstructor) => {
      return class extends customElementConstructor {
        constructor(props) {
          super();
          this.updated = props.updated ?? false;
          this.downloaderConfig = props.downloaderConfig;
        }
      };
    }
  );
  customElements.define("pdl-app", PdlApp);
  class SiteInject {
    constructor() {
      __publicField(this, "modal");
      __publicField(this, "config");
      this.config = loadConfig(this.getCustomConfig() || void 0);
      this.inject();
      this.observeColorScheme();
      this.runScheduledTask();
    }
    static get hostname() {
      throw new Error("`hostname` should be overwritten by a subclass.");
    }
    inject() {
      this.injectApp();
      this.injectStyle();
      _GM_registerMenuCommand(
        t("button.setting"),
        () => {
          var _a;
          if ((_a = this.modal.shadowRoot) == null ? void 0 : _a.querySelector(".modal")) {
            return;
          }
          this.modal.showSetting();
        },
        "s"
      );
    }
    injectApp() {
      const updated = this.config.get("showMsg");
      updated && this.config.set("showMsg", false);
      const downloaderConfig = this.getBatchDownloadConfig();
      const modal = new PdlApp({ updated, downloaderConfig });
      document.body.append(modal);
      this.modal = modal;
    }
    injectStyle() {
      [
        "pdl-btn-self-bookmark-left",
        "pdl-btn-self-bookmark-top",
        "pdl-btn-left",
        "pdl-btn-top"
      ].forEach((key) => {
        let val;
        if ((val = this.config.get(key)) !== void 0) {
          document.documentElement.style.setProperty("--" + key, val);
        }
      });
    }
    runScheduledTask() {
      useHistoryBackup().scheduleBackup();
    }
    setAppDarkMode() {
      this.modal.setAttribute("dark", "");
    }
    setAppLightMode() {
      this.modal.removeAttribute("dark");
    }
  }
  const wrapperStyle = ".button-wrapper{position:absolute;right:8px;top:0;bottom:0;margin-top:40px;z-index:1}.button-wrapper.rule34{bottom:calc(1em + 22px)}.button-wrapper.yande{right:calc(5em + 8px)}";
  class ArtworkButton extends HTMLElement {
    constructor(props) {
      super();
      __publicField(this, "props");
      this.props = props;
      this.render();
    }
    render() {
      const shadowRoot = this.attachShadow({ mode: "open" });
      const btnProps = { ...this.props };
      shadowRoot.innerHTML = `<style>${wrapperStyle}</style><div class="button-wrapper${btnProps.site ? " " + btnProps.site : ""}"></div>`;
      delete btnProps.site;
      const thumbnailButton = new ThumbnailButton({
        type: ThumbnailBtnType.Gallery,
        ...btnProps
      });
      const wrapper = shadowRoot.querySelector(".button-wrapper");
      wrapper.appendChild(thumbnailButton);
    }
  }
  customElements.define("pdl-artwork-button", ArtworkButton);
  class Rule34 extends SiteInject {
    static get hostname() {
      return "rule34.xxx";
    }
    inject() {
      super.inject();
      this.pageAction();
    }
    createThumbnailBtn() {
      const btnContainers = document.querySelectorAll(
        ".thumb:not(.blacklisted-image) > a:first-child"
      );
      if (!btnContainers.length) return;
      btnContainers.forEach((el) => {
        el.style.display = "inline-block";
        el.style.position = "relative";
        const imgEl = el.querySelector("img");
        imgEl.style.boxSizing = "border-box";
        let aspectRatio = imgEl.naturalHeight / imgEl.naturalWidth;
        aspectRatio > 1 && (el.style.height = "inherit");
        imgEl.onload = () => {
          aspectRatio = imgEl.naturalHeight / imgEl.naturalWidth;
          aspectRatio > 1 && (el.style.height = "inherit");
        };
        const idMathch = new RegExp("(?<=&id=)\\d+").exec(el.href);
        if (!idMathch) return;
        const id = idMathch[0];
        el.appendChild(
          new ThumbnailButton({
            id,
            onClick: downloadArtwork$3
          })
        );
      });
    }
    createArtworkBtn(id) {
      const btnContainer = document.querySelector("div.flexi > div");
      btnContainer.style.position = "relative";
      btnContainer.appendChild(
        new ArtworkButton({
          id,
          site: "rule34",
          onClick: downloadArtwork$3
        })
      );
    }
    pageAction() {
      const query = location.search;
      if (!query) return;
      const searchParams = new URLSearchParams(query);
      const page = searchParams.get("page");
      const s = searchParams.get("s");
      if (page === "post" && s === "view") {
        if (!document.querySelector("#image, #gelcomVideoPlayer")) return;
        const id = searchParams.get("id");
        this.createArtworkBtn(id);
      } else {
        this.createThumbnailBtn();
      }
    }
    getCustomConfig() {
      return {
        folderPattern: "rule34/{artist}",
        filenamePattern: "{id}_{artist}_{character}"
      };
    }
    observeColorScheme() {
      const query = window.matchMedia("(prefers-color-scheme: dark)");
      if (query.matches) {
        this.setAppDarkMode();
      }
      query.addEventListener("change", (e) => {
        e.matches ? this.setAppDarkMode() : this.setAppLightMode();
      });
    }
    getBatchDownloadConfig() {
      return void 0;
    }
  }
  async function addBookmark$1(id) {
    var _a;
    try {
      const token = (_a = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : _a.content;
      if (!token) throw new Error("Can not get csrf-token");
      const res = await fetch("/favorites?post_id=" + id, {
        method: "POST",
        headers: {
          "X-Csrf-Token": token
        }
      });
      if (!res.ok) throw new Error(res.status + " " + res.statusText);
      const galleryMatch = new RegExp("(?<=^\\/posts\\/)\\d+").exec(location.pathname);
      if (galleryMatch && id !== galleryMatch[0]) {
        _unsafeWindow.Danbooru.Utility.notice("You have favorited " + id);
      } else {
        const script = await res.text();
        evalScript(script);
      }
    } catch (error) {
      logger.error(error);
    }
  }
  const danbooruParser = {
    async getDoc(url2) {
      const res = await fetch(url2);
      if (!res.ok) throw new RequestError(res.url, res.status);
      const html = await res.text();
      return new DOMParser().parseFromString(html, "text/html");
    },
    async parse(id) {
      var _a, _b, _c;
      const doc = await this.getDoc("/posts/" + id);
      const src = (_a = doc.querySelector("a[download]")) == null ? void 0 : _a.href;
      if (!src) throw new Error("Can not get media src");
      const ogImageMeta = doc.querySelector('meta[property="og:image"]');
      const mediaSrc = ogImageMeta.getAttribute("content");
      const title = mediaSrc.slice(mediaSrc.lastIndexOf("/") + 1).split(".")[0];
      const ogTypeMeta = doc.querySelector('meta[property="og:video:type"]') || doc.querySelector('meta[property="og:image:type"]');
      const mimeType = ogTypeMeta.getAttribute("content");
      const extendName = mimeType.slice(mimeType.lastIndexOf("/") + 1);
      const artists = [];
      const characters = [];
      const tags = [];
      const tagLists = doc.querySelectorAll(
        'section#tag-list  ul[class*="-tag-list"]'
      );
      if (tagLists.length) {
        tagLists.forEach((ul) => {
          const tagTypeMatch = /[a-zA-Z]+(?=-tag-list)/.exec(ul.className);
          if (!tagTypeMatch) throw new Error("Unknown tag: " + ul.className);
          const tagType = tagTypeMatch[0];
          const liEls = ul.children;
          let tagRef;
          if (tagType === "artist") {
            tagRef = artists;
          } else if (tagType === "character") {
            tagRef = characters;
          }
          for (let i = 0; i < liEls.length; i++) {
            const tag = liEls[i].getAttribute("data-tag-name");
            if (!tag) continue;
            tagRef && tagRef.push(tag);
            tags.push(tagType + ":" + tag);
          }
        });
      }
      const postDate = ((_b = doc.querySelector("time")) == null ? void 0 : _b.getAttribute("datetime")) ?? "";
      const source = (_c = doc.querySelector("li#post-info-source > a")) == null ? void 0 : _c.href;
      if (source) tags.push("source:" + source);
      let comment = "";
      const commentEl = doc.querySelector("#original-artist-commentary");
      commentEl && (comment = getElementText(commentEl));
      return {
        id,
        src,
        extendName,
        artist: artists.join(",") || "UnknownArtist",
        character: characters.join(",") || "UnknownCharacter",
        title,
        comment,
        tags,
        createDate: postDate
      };
    },
    async getPoolPostCount(poolId) {
      const doc = await this.getDoc(`/pools/${poolId}`);
      const nextEl = doc.querySelector("a.paginator-next");
      if (nextEl) {
        const lastPageEl = nextEl.previousElementSibling;
        const poolPageCount = Number(lastPageEl.textContent);
        const lastPageDoc = await this.getDoc(lastPageEl.href);
        const postPerPage = Number(lastPageDoc.body.getAttribute("data-current-user-per-page"));
        const lastPagePostCount = lastPageDoc.querySelectorAll(
          ".posts-container article"
        ).length;
        return (poolPageCount - 1) * postPerPage + lastPagePostCount;
      } else {
        const imageContainers = doc.querySelectorAll(".posts-container article");
        return imageContainers.length;
      }
    },
    async *genIdByPool(poolId, filter) {
      let page = 0;
      let nextUrl;
      do {
        ++page > 1 && await sleep(1e3);
        const doc = await this.getDoc(`/pools/${poolId}?page=${page}`);
        const nextEl = doc.querySelector("a.paginator-next");
        nextUrl = (nextEl == null ? void 0 : nextEl.getAttribute("href")) ?? "";
        const imageContainers = doc.querySelectorAll(".posts-container article");
        const ids = Array.from(imageContainers).map((el) => el.getAttribute("data-id"));
        for (let i = 0; i < ids.length; i++) {
          const id = ids[i];
          const isValid = await (filter == null ? void 0 : filter(id)) ?? true;
          if (isValid) {
            yield id;
            i !== id.length - 1 && await sleep(1e3);
          }
        }
      } while (nextUrl);
    }
  };
  function artworkProgressFactory(btn2) {
    if (!btn2) return;
    return function onArtworkProgress(progress) {
      btn2.setProgress(progress);
    };
  }
  class DanbooruDownloadConfig extends DownloadConfigBuilder {
    constructor(meta) {
      super(meta);
      this.meta = meta;
    }
    getDownloadConfig(btn2) {
      return {
        taskId: Math.random().toString(36).slice(2),
        src: this.meta.src,
        path: this.buildFilePath(),
        source: this.meta,
        timeout: this.isImage() ? 6e4 : void 0,
        onProgress: artworkProgressFactory(btn2)
      };
    }
    buildFilePath() {
      const path = super.buildFilePath();
      return path.replaceAll("{character}", this.normalizeString(this.meta.character));
    }
  }
  async function downloadArtwork$2(btn2) {
    downloader.dirHandleCheck();
    const id = btn2.dataset.id;
    const mediaMeta = await danbooruParser.parse(id);
    const downloadConfigs = new DanbooruDownloadConfig(mediaMeta).getDownloadConfig(btn2);
    config.get("addBookmark") && addBookmark$1(id);
    await downloader.download(downloadConfigs);
    const { tags, artist, title, comment } = mediaMeta;
    const historyData = {
      pid: Number(id),
      user: artist,
      title,
      comment,
      tags
    };
    historyDb.add(historyData);
  }
  async function downloadPoolArtwork(btn2) {
    downloader.dirHandleCheck();
    const poolId = btn2.dataset.id;
    const promises = [];
    const postCount = await danbooruParser.getPoolPostCount(poolId);
    let completed = 0;
    const filter = async (id) => !await historyDb.has(id);
    const idGen = danbooruParser.genIdByPool(poolId, filter);
    for await (const id of idGen) {
      const mediaMeta = await danbooruParser.parse(id);
      const downloadConfigs = new DanbooruDownloadConfig(mediaMeta).getDownloadConfig();
      const p = downloader.download(downloadConfigs).then(() => {
        completed++;
        btn2.setProgress(completed / postCount * 100);
      }).then(() => {
        const { tags, artist, title } = mediaMeta;
        const historyData = {
          pid: Number(id),
          user: artist,
          title,
          tags
        };
        historyDb.add(historyData);
      });
      promises.push(p);
    }
    const results = await Promise.allSettled(promises);
    const rejectedTasks = results.filter(
      (result) => result.status === "rejected"
    );
    if (rejectedTasks.length) {
      rejectedTasks.length > 1 && logger.error(rejectedTasks);
      throw rejectedTasks[0].reason;
    }
  }
  class Danbooru extends SiteInject {
    static get hostname() {
      return "danbooru.donmai.us";
    }
    inject() {
      super.inject();
      this.pageAction();
    }
    createThumbnailBtn() {
      const btnContainers = document.querySelectorAll(
        "article a.post-preview-link"
      );
      if (!btnContainers.length) return;
      btnContainers.forEach((el) => {
        var _a;
        const id = (_a = new RegExp("(?<=\\/posts\\/)\\d+").exec(el.href)) == null ? void 0 : _a[0];
        if (!id) return;
        const btn2 = new ThumbnailButton({
          id,
          onClick: downloadArtwork$2
        });
        el.appendChild(btn2);
      });
    }
    createArtworkBtn(id) {
      const btnContainer = document.querySelector("section.image-container");
      btnContainer.appendChild(
        new ArtworkButton({
          id,
          onClick: downloadArtwork$2
        })
      );
    }
    createPoolThumbnailBtn() {
      const btnContainers = document.querySelectorAll(
        "article a.post-preview-link"
      );
      if (!btnContainers.length) return;
      btnContainers.forEach((el) => {
        var _a;
        const poolId = (_a = new RegExp("(?<=\\/pools\\/)\\d+").exec(el.href)) == null ? void 0 : _a[0];
        if (!poolId) return;
        const btn2 = new ThumbnailButton({
          id: poolId,
          type: ThumbnailBtnType.DanbooruPool,
          onClick: downloadPoolArtwork
        });
        el.appendChild(btn2);
      });
    }
    pageAction() {
      const path = location.pathname;
      if (/^\/posts\/\d+/.test(path)) {
        const imageContainer = document.querySelector(
          "section.image-container:not(.blacklisted-active)"
        );
        if (!imageContainer) return;
        const id = imageContainer.getAttribute("data-id");
        this.createArtworkBtn(id);
        this.createThumbnailBtn();
      } else if (/^\/pools\/gallery/.test(path)) {
        this.createPoolThumbnailBtn();
      } else {
        this.createThumbnailBtn();
      }
    }
    observeColorScheme() {
      const query = window.matchMedia("(prefers-color-scheme: dark)");
      let uaPreferDark = query.matches;
      const siteSetting = document.body.getAttribute("data-current-user-theme");
      const sitePreferDark = siteSetting === "dark";
      if (sitePreferDark || siteSetting === "auto" && uaPreferDark) {
        this.setAppDarkMode();
      }
      if (siteSetting === "auto") {
        query.addEventListener("change", (e) => {
          uaPreferDark = e.matches;
          uaPreferDark ? this.setAppDarkMode() : this.setAppLightMode();
        });
      }
    }
    getCustomConfig() {
      return {
        folderPattern: "danbooru/{artist}",
        filenamePattern: "{id}_{artist}_{character}"
      };
    }
    getBatchDownloadConfig() {
      return void 0;
    }
  }
  const regexp = {
    preloadData: /"meta-preload-data" content='(.*?)'>/,
    globalData: /"meta-global-data" content='(.*?)'>/,
    artworksPage: /artworks\/(\d+)$/,
    userPage: /\/users\/(\d+)$|\/users\/(\d+)\/(?!following|mypixiv|followers)/,
    bookmarkPage: /users\/(\d+)\/bookmarks\/artworks/,
    userPageTags: new RegExp("(?<=users\\/)([0-9]+)\\/(artworks|illustrations|manga|bookmarks(?=\\/artworks))(?:\\/artworks)?\\/?([^?]*)"),
    searchPage: /\/tags\/.*\/(artworks|illustrations|manga)/,
    activityHref: /illust_id=(\d+)/,
    originSrcPageNum: new RegExp("(?<=_p)\\d+"),
    followLatest: /\/bookmark_new_illust(?:_r18)?\.php/,
    historyPage: /\/history\.php/,
    historyThumbnailsId: /\d+(?=_)/
  };
  function getSelfId() {
    var _a, _b;
    return ((_b = (_a = _unsafeWindow.dataLayer) == null ? void 0 : _a[0]) == null ? void 0 : _b.user_id) ?? "";
  }
  function getIllustId(node) {
    const isLinkToArtworksPage = regexp.artworksPage.exec(node.getAttribute("href") || "");
    if (isLinkToArtworksPage) {
      if (node.getAttribute("data-gtm-value") || [
        "gtm-illust-recommend-node-node",
        "gtm-discover-user-recommend-node",
        "work",
        "_history-item",
        "_history-related-item"
      ].some((className) => node.classList.contains(className))) {
        return isLinkToArtworksPage[1];
      }
    } else if (node instanceof HTMLSpanElement && node.className.includes("_history-item")) {
      const img = node.querySelector("img");
      if (!img) return "";
      const matchPid = regexp.historyThumbnailsId.exec(img.src);
      if (matchPid) return matchPid[0];
    } else {
      const isActivityThumb = regexp.activityHref.exec(node.getAttribute("href") || "");
      if (isActivityThumb && node.classList.contains("work")) {
        return isActivityThumb[1];
      }
    }
    return "";
  }
  var IllustType = /* @__PURE__ */ ((IllustType2) => {
    IllustType2[IllustType2["illusts"] = 0] = "illusts";
    IllustType2[IllustType2["manga"] = 1] = "manga";
    IllustType2[IllustType2["ugoira"] = 2] = "ugoira";
    return IllustType2;
  })(IllustType || {});
  var BookmarkRestrict = /* @__PURE__ */ ((BookmarkRestrict2) => {
    BookmarkRestrict2[BookmarkRestrict2["public"] = 0] = "public";
    BookmarkRestrict2[BookmarkRestrict2["private"] = 1] = "private";
    return BookmarkRestrict2;
  })(BookmarkRestrict || {});
  function createService() {
    async function _requestJson(url2, init2) {
      logger.info("Fetch url:", url2);
      const res = await fetch(url2, init2);
      if (!res.ok) throw new RequestError(res.url, res.status);
      const data = await res.json();
      if (data.error) throw new JsonDataError(data.message);
      return data.body;
    }
    return {
      async getJson(url2) {
        return await _requestJson(url2);
      },
      async getArtworkHtml(illustId) {
        logger.info("Fetch illust:", illustId);
        const params = "?lang=" + config.get("tagLang");
        const res = await fetch("https://www.pixiv.net/artworks/" + illustId + params);
        if (!res.ok) throw new RequestError(res.url, res.status);
        return await res.text();
      },
      getArtworkDetail(illustId) {
        logger.info("Fetch illust:", illustId);
        const params = "?lang=" + config.get("tagLang");
        return _requestJson("/ajax/illust/" + illustId + params);
      },
      addBookmark(illustId, token, tags = [], restrict = BookmarkRestrict.public) {
        return _requestJson("/ajax/illusts/bookmarks/add", {
          method: "POST",
          headers: {
            accept: "application/json",
            "content-type": "application/json; charset=utf-8",
            "x-csrf-token": token
          },
          body: JSON.stringify({
            illust_id: illustId,
            restrict,
            comment: "",
            tags
          })
        });
      },
      getFollowLatestWorks(page, mode = "all") {
        return _requestJson(
          `/ajax/follow_latest/illust?p=${page}&mode=${mode}&lang=jp`
        );
      },
      getUserAllProfile(userId) {
        return _requestJson("/ajax/user/" + userId + "/profile/all");
      },
      getUgoiraMeta(illustId) {
        return _requestJson("/ajax/illust/" + illustId + "/ugoira_meta");
      },
      getUserData(userId) {
        return _requestJson("/ajax/user/" + userId);
      }
    };
  }
  const api = createService();
  function addBookmark(btn2, illustId, token, tags) {
    if (!config.get("addBookmark")) return;
    api.addBookmark(
      illustId,
      token,
      config.get("addBookmarkWithTags") ? tags : [],
      config.get("privateR18") && tags.includes("R-18") ? BookmarkRestrict.private : BookmarkRestrict.public
    ).then(() => {
      const bookmarkBtnRef = findBookmarkBtn(btn2);
      if (!bookmarkBtnRef) return;
      switch (bookmarkBtnRef.kind) {
        case "main": {
          const pathBorder = bookmarkBtnRef.button.querySelector("svg g path");
          pathBorder && (pathBorder.style.color = "rgb(255, 64, 96)");
          break;
        }
        case "sub": {
          const pathBorder = bookmarkBtnRef.button.querySelector("path");
          pathBorder && (pathBorder.style.color = "rgb(255, 64, 96)");
          break;
        }
        case "rank": {
          bookmarkBtnRef.button.style.backgroundColor = "rgb(255, 64, 96)";
          break;
        }
      }
    }).catch((reason) => {
      logger.error(reason.message);
    });
  }
  function findBookmarkBtn(btn2) {
    var _a, _b, _c, _d, _e;
    const bookmarkBtnRef = {};
    if (!btn2.dataset.type) {
      const favBtn = (_b = (_a = btn2.parentElement) == null ? void 0 : _a.nextElementSibling) == null ? void 0 : _b.querySelector(
        'button[type="button"]'
      );
      if (favBtn) {
        bookmarkBtnRef.kind = "sub";
        bookmarkBtnRef.button = favBtn;
      } else {
        const favBtn2 = (_c = btn2.parentElement) == null ? void 0 : _c.querySelector("div._one-click-bookmark");
        if (favBtn2) {
          bookmarkBtnRef.kind = "rank";
          bookmarkBtnRef.button = favBtn2;
        }
      }
    } else if (btn2.dataset.type === ThumbnailBtnType.PixivToolbar) {
      const favBtn = (_e = (_d = btn2.parentElement) == null ? void 0 : _d.parentElement) == null ? void 0 : _e.querySelector(
        "button.gtm-main-bookmark"
      );
      if (favBtn) {
        bookmarkBtnRef.kind = "main";
        bookmarkBtnRef.button = favBtn;
      }
    } else {
      return logger.warn(new Error("Can not find bookmark button."));
    }
    return bookmarkBtnRef;
  }
  const pixivParser = {
    async parse(illustId, ajax) {
      let illustData;
      let token;
      if (ajax) {
        illustData = await api.getArtworkDetail(illustId);
        token = "";
      } else {
        const htmlText = await api.getArtworkHtml(illustId);
        const preloadDataText = htmlText.match(regexp.preloadData);
        if (!preloadDataText) throw new Error("Fail to parse preload data: " + illustId);
        const globalDataText = htmlText.match(regexp.globalData);
        if (!globalDataText) throw new Error("Fail to parse global data: " + illustId);
        const preloadData = JSON.parse(preloadDataText[1]);
        const globalData = JSON.parse(globalDataText[1]);
        illustData = preloadData.illust[illustId];
        token = globalData.token;
      }
      const {
        illustType,
        userName,
        userId,
        illustTitle,
        illustComment,
        tags,
        pageCount,
        createDate,
        urls,
        bookmarkData
      } = illustData;
      const tagsArr = [];
      const tagsTranslatedArr = [];
      tags.tags.forEach((tagData) => {
        var _a;
        tagsArr.push(tagData.tag);
        tagsTranslatedArr.push(((_a = tagData.translation) == null ? void 0 : _a.en) || tagData.tag);
      });
      const unescapeComment = illustComment.replaceAll(/&lt;|&amp;lt;/g, "<").replaceAll(/&gt;|&amp;gt;/g, ">");
      const p = document.createElement("p");
      p.innerHTML = unescapeComment;
      const comment = getElementText(p);
      const meta = {
        id: illustId,
        src: urls.original,
        extendName: urls.original.slice(-3),
        artist: userName,
        title: illustTitle,
        tags: tagsArr,
        tagsTranslated: tagsTranslatedArr,
        userId,
        pageCount,
        comment,
        bookmarkData,
        createDate,
        token
      };
      if (illustType === IllustType.ugoira) {
        return {
          ...meta,
          illustType,
          ugoiraMeta: await api.getUgoiraMeta(illustId)
        };
      } else {
        return {
          ...meta,
          illustType
        };
      }
    },
    async *illustMangaGenerator(pageRange, checkValidity, userId) {
      const ARTWORKS_PER_PAGE = 48;
      const profile = await api.getUserAllProfile(userId);
      let ids = [];
      typeof profile.illusts === "object" && ids.push(...Object.keys(profile.illusts));
      typeof profile.manga === "object" && ids.push(...Object.keys(profile.manga));
      if (!ids.length) throw new Error(`User ${userId} has no illusts or mangas.`);
      ids = ids.sort((a, b) => Number(b) - Number(a));
      let sliceStart;
      let sliceEnd;
      const [startPage = null, endPage = null] = pageRange ?? [];
      let page = startPage ?? 1;
      startPage === null ? sliceStart = 0 : sliceStart = (startPage - 1) * ARTWORKS_PER_PAGE;
      endPage === null ? sliceEnd = ids.length : sliceEnd = endPage * ARTWORKS_PER_PAGE;
      const selectedIds = ids.slice(sliceStart, sliceEnd);
      if (!selectedIds.length) throw new RangeError(`Page ${page} exceeds the limit.`);
      const baseUrl = `https://www.pixiv.net/ajax/user/${userId}/profile/illusts?`;
      const total = selectedIds.length;
      do {
        const chunk = selectedIds.splice(0, ARTWORKS_PER_PAGE);
        const queryStr = chunk.map((id) => "ids[]=" + id).join("&") + `&work_category=illustManga&is_first_page=0&lang=ja`;
        const data = await api.getJson(baseUrl + queryStr);
        const workDatas = Object.values(data.works).sort((a, b) => Number(b.id) - Number(a.id));
        const avaliable = [];
        const invalid = [];
        const unavaliable = [];
        for (let i = 0; i < workDatas.length; i++) {
          const work = workDatas[i];
          const { id, isMasked } = work;
          if (isMasked) {
            unavaliable.push(String(id));
            continue;
          }
          const isValid = await checkValidity(work);
          isValid ? avaliable.push(id) : invalid.push(id);
        }
        yield {
          total,
          page,
          avaliable,
          invalid,
          unavaliable
        };
        page++;
      } while (selectedIds.length > 0);
    },
    async *chunkGenerator(pageRange, checkValidity, userId, category, tag, bookmarkRest = "show") {
      const ARTWORKS_PER_PAGE = 48;
      const [startPage = null, endPage = null] = pageRange ?? [];
      if (!userId) throw new Error('Require argument "userId".');
      let offset;
      let offsetEnd;
      let total;
      let page = startPage ?? 1;
      startPage === null ? offset = 0 : offset = (startPage - 1) * ARTWORKS_PER_PAGE;
      do {
        let requestUrl;
        if (category === "bookmarks") {
          requestUrl = `/ajax/user/${userId}/illusts/bookmarks?tag=${tag}&offset=${offset}&limit=${ARTWORKS_PER_PAGE}&rest=${bookmarkRest}&lang=ja`;
        } else {
          requestUrl = `/ajax/user/${userId}/${category}/tag?tag=${tag}&offset=${offset}&limit=${ARTWORKS_PER_PAGE}&lang=ja`;
        }
        const userPageData = await api.getJson(requestUrl);
        const { works, total: totalArtwork } = userPageData;
        if (totalArtwork === 0)
          throw new Error(`User ${userId} has no ${category} tagged with ${tag}.`);
        if (!offsetEnd) {
          endPage === null ? offsetEnd = totalArtwork : offsetEnd = endPage * ARTWORKS_PER_PAGE > totalArtwork ? totalArtwork : endPage * ARTWORKS_PER_PAGE;
          if (offsetEnd <= offset) throw new RangeError(`Page ${page} exceeds the limit.`);
          total = offsetEnd - offset;
        }
        const avaliable = [];
        const invalid = [];
        const unavaliable = [];
        for (let i = 0; i < works.length; i++) {
          const work = works[i];
          const { id, isMasked } = work;
          if (isMasked) {
            unavaliable.push(String(id));
            continue;
          }
          const isValid = await checkValidity(work);
          isValid ? avaliable.push(id) : invalid.push(id);
        }
        yield {
          total,
          page,
          avaliable,
          invalid,
          unavaliable
        };
        page++;
      } while ((offset += ARTWORKS_PER_PAGE) < offsetEnd);
    },
    async *bookmarkGenerator(pageRange, checkValidity, userId, bookmarkRest = "show", tag = "") {
      yield* this.chunkGenerator(pageRange, checkValidity, userId, "bookmarks", tag, bookmarkRest);
    },
    async *taggedArtworkGenerator(pageRange, checkValidity, userId, category, tag, bookmarkRest = "show") {
      if (category === "bookmarks") {
        yield* this.bookmarkGenerator(pageRange, checkValidity, userId, bookmarkRest, tag);
      } else {
        yield* this.chunkGenerator(pageRange, checkValidity, userId, category, tag);
      }
    },
    async *followLatestGenerator(pageRange, checkValidity, mode = "all") {
      const PAGE_LIMIT = 34;
      const ARTWORKS_PER_PAGE = 60;
      let [startPage = null, endPage = null] = pageRange ?? [];
      startPage === null && (startPage = 1);
      (endPage === null || endPage > PAGE_LIMIT) && (endPage = PAGE_LIMIT);
      if (startPage > PAGE_LIMIT) throw new RangeError(`Page ${startPage} exceeds the limit.`);
      let earliestId;
      let total;
      let cache;
      let page = startPage;
      function findEarliestId(ids2) {
        return Math.min(...ids2);
      }
      async function* yieldData(data2, page2) {
        const avaliable = [];
        const invalid = [];
        const unavaliable = [];
        const { illust } = data2.thumbnails;
        for (let i = 0; i < illust.length; i++) {
          const work = illust[i];
          const { id, isMasked } = work;
          if (isMasked) {
            unavaliable.push(String(id));
            continue;
          }
          const isValid = await checkValidity(work);
          isValid ? avaliable.push(id) : invalid.push(id);
        }
        const { ids: ids2 } = data2.page;
        if (ids2.length !== illust.length) {
          const idDiff = ids2.filter((id) => !illust.some((item) => +item.id === id));
          unavaliable.push(...idDiff.map((id) => String(id)));
        }
        yield {
          total,
          page: page2,
          avaliable,
          invalid,
          unavaliable
        };
      }
      const data = await api.getFollowLatestWorks(page, mode);
      const ids = data.page.ids;
      total = ids.length;
      earliestId = findEarliestId(ids);
      if (endPage === startPage) {
        yield* yieldData(data, startPage);
        return;
      }
      if (total === ARTWORKS_PER_PAGE) {
        const secondPageData = await api.getFollowLatestWorks(++page, mode);
        const secondIds = secondPageData.page.ids;
        const secondPageEarliestId = findEarliestId(secondIds);
        if (secondPageEarliestId < earliestId) {
          earliestId = secondPageEarliestId;
          cache = secondPageData;
          total += secondIds.length;
        }
      }
      yield* yieldData(data, startPage);
      if (total === ARTWORKS_PER_PAGE) return;
      if (total < ARTWORKS_PER_PAGE * 2 || endPage - startPage === 1) {
        yield* yieldData(cache, page);
        return;
      }
      while (++page <= endPage) {
        const data2 = await api.getFollowLatestWorks(page, mode);
        const ids2 = data2.page.ids;
        const pageEarliestId = findEarliestId(ids2);
        if (pageEarliestId >= earliestId) {
          logger.info("getFollowLatestGenerator: got duplicate works");
          yield* yieldData(cache, page - 1);
          break;
        }
        earliestId = pageEarliestId;
        total += ids2.length;
        yield* yieldData(cache, page - 1);
        cache = data2;
      }
      yield* yieldData(cache, page - 1);
    }
  };
  function createCompressor() {
    const zip = new JSZip();
    return {
      add(id, name, data) {
        var _a;
        (_a = zip.folder(id)) == null ? void 0 : _a.file(name, data);
      },
      bundle(id, comment) {
        const folder = zip.folder(id);
        if (!folder) throw new TypeError("no such folder:" + id);
        return folder.generateAsync({ type: "blob", comment });
      },
      remove(ids) {
        if (typeof ids === "string") {
          zip.remove(ids);
        } else {
          const dirs = zip.filter((_, file) => file.dir).map((dir) => dir.name);
          const dirsToDel = ids.filter((id) => dirs.some((dir) => dir.includes(id)));
          dirsToDel.forEach((dir) => zip.remove(dir));
          logger.info("Compressor: Remove", zip);
        }
      },
      fileCount(id) {
        var _a;
        let count = 0;
        (_a = zip.folder(id)) == null ? void 0 : _a.forEach(() => count++);
        return count;
      },
      async unzip(data) {
        const id = Math.random().toString(36);
        let folder = zip.folder(id);
        if (!folder) throw TypeError("Can not get new root folder");
        const filesPromises = [];
        folder = await folder.loadAsync(data);
        folder.forEach((_, file) => {
          filesPromises.push(file.async("blob"));
        });
        const files = await Promise.all(filesPromises);
        zip.remove(id);
        return files;
      }
    };
  }
  const compressor = createCompressor();
  const gifWorker = (() => GM_getResourceText("gif.js/dist/gif.worker?raw"))();
  const workerUrl$2 = URL.createObjectURL(new Blob([gifWorker], { type: "text/javascript" }));
  function gif(frames, convertMeta) {
    return Promise.all(
      frames.map((frame) => {
        if (frame instanceof Blob) {
          return createImageBitmap(frame);
        } else {
          return frame;
        }
      })
    ).then((bitmaps) => {
      return new Promise((resolve, reject) => {
        logger.info("Start convert:", convertMeta.id);
        logger.time(convertMeta.id);
        const canvas = document.createElement("canvas");
        const width = canvas.width = bitmaps[0].width;
        const height = canvas.height = bitmaps[0].height;
        const ctx = canvas.getContext("2d", { willReadFrequently: true });
        const gif2 = new GIF({
          workers: 2,
          quality: config.get("gifQuality"),
          width,
          height,
          workerScript: workerUrl$2
        });
        convertMeta.abort = () => {
          gif2.abort();
        };
        bitmaps.forEach((bitmap, i) => {
          ctx.drawImage(bitmap, 0, 0);
          gif2.addFrame(ctx, {
            copy: true,
            delay: convertMeta.source.delays[i]
          });
          bitmap.close();
        });
        gif2.on("progress", (progress) => {
          var _a;
          (_a = convertMeta.onProgress) == null ? void 0 : _a.call(convertMeta, progress * 100);
        });
        gif2.on("finished", (gifBlob) => {
          logger.timeEnd(convertMeta.id);
          resolve(gifBlob);
        });
        gif2.on("abort", () => {
          logger.timeEnd(convertMeta.id);
          logger.warn("Convert stop manually. " + convertMeta.id);
          convertMeta.isAborted = true;
          reject(new CancelError());
        });
        gif2.render();
      });
    });
  }
  const pngWorkerFragment = 'async function encodeAPNG(frames, delays, cnum) {\n    const bitmaps = await Promise.all(frames.map((frame) => {\n        if (frame instanceof Blob) {\n            return createImageBitmap(frame);\n        }\n        else {\n            return frame;\n        }\n    }));\n    const width = bitmaps[0].width;\n    const height = bitmaps[0].height;\n    const canvas = new OffscreenCanvas(width, height);\n    const ctx = canvas.getContext("2d", { willReadFrequently: true });\n    const u8arrs = [];\n    for (let i = 0; i < bitmaps.length; i++) {\n        ctx.drawImage(bitmaps[i], 0, 0);\n        bitmaps[i].close();\n        u8arrs.push(ctx.getImageData(0, 0, width, height).data);\n    }\n    const png = UPNG.encode(u8arrs, width, height, cnum, delays, { loop: 0 });\n    if (!png)\n        throw new Error("Failed to encode apng.");\n    return png;\n}\nasync function decodeApng(ab) {\n    const img = UPNG.decode(ab);\n    const rgba = UPNG.toRGBA8(img);\n    const { width, height } = img;\n    const delays = img.frames.map((frame) => frame.delay);\n    return { frames: rgba, delays, width, height };\n}\nasync function appendEffect(illustBlob, effect, delays, width, height) {\n    if (!Array.isArray(effect)) {\n        const apngDatas = await decodeApng(effect);\n        effect = apngDatas.frames;\n        delays = apngDatas.delays;\n        width = apngDatas.width;\n        height = apngDatas.height;\n    }\n    else {\n        if (!delays || width === void 0 || height === void 0)\n            throw new Error("Missing argument.");\n    }\n    const illustBitmap = await createImageBitmap(illustBlob);\n    const effectBitmaps = await Promise.all(effect.map((buf) => createImageBitmap(new ImageData(new Uint8ClampedArray(buf), width, height))));\n    const { width: illustWidth, height: illustHeight } = illustBitmap;\n    const illustAspectRatio = illustWidth / illustHeight;\n    const effectAspectRatio = width / height;\n    let dx;\n    let dy;\n    let dWidth;\n    let dHeight;\n    if (effectAspectRatio > illustAspectRatio) {\n        dWidth = illustHeight * effectAspectRatio;\n        dHeight = illustHeight;\n        dx = (illustWidth - dWidth) / 2;\n        dy = 0;\n    }\n    else {\n        dWidth = illustWidth;\n        dHeight = illustWidth / effectAspectRatio;\n        dx = 0;\n        dy = (illustHeight - dHeight) / 2;\n    }\n    const canvas = new OffscreenCanvas(illustWidth, illustHeight);\n    const ctx = canvas.getContext("2d", { willReadFrequently: true });\n    const finalDatas = [];\n    for (let i = 0; i < effectBitmaps.length; i++) {\n        ctx.drawImage(illustBitmap, 0, 0);\n        ctx.drawImage(effectBitmaps[i], dx, dy, dWidth, dHeight);\n        finalDatas.push(ctx.getImageData(0, 0, illustWidth, illustHeight));\n        effectBitmaps[i].close();\n    }\n    illustBitmap.close();\n    const bitmaps = [];\n    for (let i = 0; i < finalDatas.length; i++) {\n        const bitmap = await createImageBitmap(finalDatas[i]);\n        bitmaps.push(bitmap);\n    }\n    return {\n        bitmaps,\n        frames: effect,\n        width,\n        height,\n        delays\n    };\n}\nself.onmessage = async (evt) => {\n    try {\n        const data = evt.data;\n        if ("effect" in data) {\n            let result;\n            if ("delays" in data) {\n                const { illust, effect, width, height, delays } = data;\n                result = await appendEffect(illust, effect, delays, width, height);\n            }\n            else {\n                const { illust, effect } = data;\n                result = await appendEffect(illust, effect);\n            }\n            self.postMessage(result, [...result.frames, ...result.bitmaps]);\n        }\n        else {\n            const { frames, delays, cnum = 256 } = data;\n            const apng = await encodeAPNG(frames, delays, cnum);\n            self.postMessage(apng, [apng]);\n        }\n    }\n    catch (error) {\n        console.error(error);\n        self.postMessage(void 0);\n    }\n};\n';
  const UPNG = (() => GM_getResourceText("upng-js?raw"))();
  const pako = (() => GM_getResourceText("pako/dist/pako.js?raw"))();
  const workerUrl$1 = URL.createObjectURL(
    new Blob(
      [
        pngWorkerFragment + pako + UPNG.replace("window.UPNG", "self.UPNG").replace("window.pako", "self.pako")
      ],
      {
        type: "text/javascript"
      }
    )
  );
  const freeApngWorkers = [];
  function png(frames, convertMeta) {
    return new Promise((resolve, reject) => {
      logger.info("Start convert:", convertMeta.id);
      logger.time(convertMeta.id);
      let worker;
      if (freeApngWorkers.length) {
        worker = freeApngWorkers.shift();
        logger.info("Reuse apng workers.");
      } else {
        worker = new Worker(workerUrl$1);
      }
      convertMeta.abort = () => {
        logger.timeEnd(convertMeta.id);
        logger.warn("Convert stop manually. " + convertMeta.id);
        reject(new CancelError());
        convertMeta.isAborted = true;
        worker.terminate();
      };
      worker.onmessage = function(e) {
        freeApngWorkers.push(worker);
        logger.timeEnd(convertMeta.id);
        if (!e.data) {
          return reject(new TypeError("Failed to get png data. " + convertMeta.id));
        }
        const pngBlob = new Blob([e.data], { type: "image/png" });
        resolve(pngBlob);
      };
      const delays = convertMeta.source.delays;
      const cfg = { frames, delays, cnum: config.get("pngColor") };
      worker.postMessage(
        cfg,
        cfg.frames[0] instanceof ImageBitmap ? cfg.frames : []
      );
    });
  }
  function mixPngEffect(convertMeta) {
    logger.info("Start convert:", convertMeta.id);
    logger.time(convertMeta.id);
    const { illust, data } = convertMeta.source;
    let p;
    if (data instanceof Blob) {
      p = data.arrayBuffer();
    } else {
      p = Promise.resolve(data);
    }
    return p.then((effect) => {
      return new Promise((resolve, reject) => {
        let worker;
        if (freeApngWorkers.length) {
          worker = freeApngWorkers.shift();
          logger.info("Reuse apng workers.");
        } else {
          worker = new Worker(workerUrl$1);
        }
        convertMeta.abort = () => {
          logger.timeEnd(convertMeta.id);
          logger.warn("Convert stop manually. " + convertMeta.id);
          reject(new CancelError());
          convertMeta.isAborted = true;
          worker.terminate();
        };
        worker.onmessage = function(e) {
          logger.timeEnd(convertMeta.id);
          worker.terminate();
          if (!e.data) {
            return reject(new Error("Mix Effect convert Failed " + convertMeta.id));
          }
          resolve(e.data);
        };
        let cfg;
        if (effect instanceof ArrayBuffer) {
          cfg = { illust, effect };
          worker.postMessage(cfg, [effect]);
        } else {
          const { frames, delays, width, height } = effect;
          cfg = { illust, delays, effect: frames, width, height };
          worker.postMessage(cfg, frames);
        }
      });
    });
  }
  const webpWorkerFragment = 'let webpApi = {};\nModule.onRuntimeInitialized = () => {\n    webpApi = {\n        init: Module.cwrap("init", "", ["number", "number", "number"]),\n        createBuffer: Module.cwrap("createBuffer", "number", ["number"]),\n        addFrame: Module.cwrap("addFrame", "number", ["number", "number", "number"]),\n        generate: Module.cwrap("generate", "number", []),\n        freeResult: Module.cwrap("freeResult", "", []),\n        getResultPointer: Module.cwrap("getResultPointer", "number", []),\n        getResultSize: Module.cwrap("getResultSize", "number", [])\n    };\n    postMessage("ok");\n};\nonmessage = async (evt) => {\n    const { frames, delays, lossless = 0, quality = 95, method = 4 } = evt.data;\n    webpApi.init(lossless, quality, method);\n    const bitmaps = await Promise.all(frames.map((frame) => {\n        if (frame instanceof Blob) {\n            return createImageBitmap(frame);\n        }\n        else {\n            return frame;\n        }\n    }));\n    const width = bitmaps[0].width;\n    const height = bitmaps[0].height;\n    const canvas = new OffscreenCanvas(width, height);\n    const ctx = canvas.getContext("2d");\n    for (let i = 0; i < bitmaps.length; i++) {\n        ctx?.drawImage(bitmaps[i], 0, 0);\n        bitmaps[i].close();\n        const webpBlob = await canvas.convertToBlob({\n            type: "image/webp",\n            quality: lossless ? 1 : quality / 100\n        });\n        const buffer = await webpBlob.arrayBuffer();\n        const u8a = new Uint8Array(buffer);\n        const pointer = webpApi.createBuffer(u8a.length);\n        Module.HEAPU8.set(u8a, pointer);\n        webpApi.addFrame(pointer, u8a.length, delays[i]);\n        postMessage((i + 1) / bitmaps.length * 100);\n    }\n    webpApi.generate();\n    const resultPointer = webpApi.getResultPointer();\n    const resultSize = webpApi.getResultSize();\n    const result = new Uint8Array(Module.HEAP8.buffer, resultPointer, resultSize);\n    postMessage(result);\n    webpApi.freeResult();\n};\n';
  const webpWasm = (() => GM_getResourceText("../wasm/toWebpWorker?raw"))();
  const workerUrl = URL.createObjectURL(
    new Blob([webpWasm + webpWorkerFragment], { type: "text/javascript" })
  );
  const freeWebpWorkers = [];
  function webp(frames, convertMeta) {
    return new Promise((resolve, reject) => {
      logger.time(convertMeta.id);
      let worker;
      if (freeWebpWorkers.length) {
        logger.info("Reuse webp workers.");
        worker = freeWebpWorkers.shift();
        resolve(worker);
      } else {
        worker = new Worker(workerUrl);
        worker.onmessage = (evt) => {
          if (evt.data === "ok") {
            logger.info("Webp worker loaded.");
            resolve(worker);
          } else {
            reject(evt.data);
          }
        };
      }
    }).then((worker) => {
      if (convertMeta.isAborted) {
        freeWebpWorkers.push(worker);
        logger.timeEnd(convertMeta.id);
        logger.warn("Convert stop manually." + convertMeta.id);
        throw new CancelError();
      }
      return new Promise((resolve, reject) => {
        worker.onmessage = (evt) => {
          var _a;
          if (convertMeta.isAborted) {
            worker.terminate();
            logger.timeEnd(convertMeta.id);
            logger.warn("Convert stop manually." + convertMeta.id);
            reject(new CancelError());
          } else {
            const data = evt.data;
            if (typeof data !== "object") {
              (_a = convertMeta.onProgress) == null ? void 0 : _a.call(convertMeta, evt.data);
            } else {
              logger.timeEnd(convertMeta.id);
              freeWebpWorkers.push(worker);
              resolve(new Blob([evt.data], { type: "image/webp" }));
            }
          }
        };
        const delays = convertMeta.source.delays;
        worker.postMessage(
          {
            frames,
            delays,
            lossless: Number(config.get("losslessWebp")),
            quality: config.get("webpQuality"),
            method: config.get("webpMehtod")
          },
          frames[0] instanceof ImageBitmap ? frames : []
        );
      });
    });
  }
  function getDefaultExportFromCjs(x) {
    return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
  }
  var WebMWriter$1 = { exports: {} };
  (function(module) {
    (function() {
      function extend(base, top) {
        let target = {};
        [base, top].forEach(function(obj) {
          for (let prop in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, prop)) {
              target[prop] = obj[prop];
            }
          }
        });
        return target;
      }
      function decodeBase64WebPDataURL(url2) {
        if (typeof url2 !== "string" || !url2.match(/^data:image\/webp;base64,/i)) {
          throw new Error("Failed to decode WebP Base64 URL");
        }
        return window.atob(url2.substring("data:image/webp;base64,".length));
      }
      function renderAsWebP(canvas, quality) {
        let frame = typeof canvas === "string" && /^data:image\/webp/.test(canvas) ? canvas : canvas.toDataURL("image/webp", quality);
        return decodeBase64WebPDataURL(frame);
      }
      function byteStringToUint32LE(string) {
        let a = string.charCodeAt(0), b = string.charCodeAt(1), c = string.charCodeAt(2), d = string.charCodeAt(3);
        return (a | b << 8 | c << 16 | d << 24) >>> 0;
      }
      function extractKeyframeFromWebP(webP) {
        let cursor = webP.indexOf("VP8", 12);
        if (cursor === -1) {
          throw new Error("Bad image format, does this browser support WebP?");
        }
        let hasAlpha = false;
        while (cursor < webP.length - 8) {
          let chunkLength, fourCC;
          fourCC = webP.substring(cursor, cursor + 4);
          cursor += 4;
          chunkLength = byteStringToUint32LE(webP.substring(cursor, cursor + 4));
          cursor += 4;
          switch (fourCC) {
            case "VP8 ":
              return {
                frame: webP.substring(cursor, cursor + chunkLength),
                hasAlpha
              };
            case "ALPH":
              hasAlpha = true;
              break;
          }
          cursor += chunkLength;
          if ((chunkLength & 1) !== 0) {
            cursor++;
          }
        }
        throw new Error("Failed to find VP8 keyframe in WebP image, is this image mistakenly encoded in the Lossless WebP format?");
      }
      const EBML_SIZE_UNKNOWN = -1, EBML_SIZE_UNKNOWN_5_BYTES = -2;
      function EBMLFloat32(value) {
        this.value = value;
      }
      function EBMLFloat64(value) {
        this.value = value;
      }
      function writeEBML(buffer, bufferFileOffset, ebml) {
        if (Array.isArray(ebml)) {
          for (let i = 0; i < ebml.length; i++) {
            writeEBML(buffer, bufferFileOffset, ebml[i]);
          }
        } else if (typeof ebml === "string") {
          buffer.writeString(ebml);
        } else if (ebml instanceof Uint8Array) {
          buffer.writeBytes(ebml);
        } else if (ebml.id) {
          ebml.offset = buffer.pos + bufferFileOffset;
          buffer.writeUnsignedIntBE(ebml.id);
          if (Array.isArray(ebml.data)) {
            let sizePos, dataBegin, dataEnd;
            if (ebml.size === EBML_SIZE_UNKNOWN) {
              buffer.writeByte(255);
            } else if (ebml.size === EBML_SIZE_UNKNOWN_5_BYTES) {
              sizePos = buffer.pos;
              buffer.writeBytes([15, 255, 255, 255, 255]);
            } else {
              sizePos = buffer.pos;
              buffer.writeBytes([0, 0, 0, 0]);
            }
            dataBegin = buffer.pos;
            ebml.dataOffset = dataBegin + bufferFileOffset;
            writeEBML(buffer, bufferFileOffset, ebml.data);
            if (ebml.size !== EBML_SIZE_UNKNOWN && ebml.size !== EBML_SIZE_UNKNOWN_5_BYTES) {
              dataEnd = buffer.pos;
              ebml.size = dataEnd - dataBegin;
              buffer.seek(sizePos);
              buffer.writeEBMLVarIntWidth(ebml.size, 4);
              buffer.seek(dataEnd);
            }
          } else if (typeof ebml.data === "string") {
            buffer.writeEBMLVarInt(ebml.data.length);
            ebml.dataOffset = buffer.pos + bufferFileOffset;
            buffer.writeString(ebml.data);
          } else if (typeof ebml.data === "number") {
            if (!ebml.size) {
              ebml.size = buffer.measureUnsignedInt(ebml.data);
            }
            buffer.writeEBMLVarInt(ebml.size);
            ebml.dataOffset = buffer.pos + bufferFileOffset;
            buffer.writeUnsignedIntBE(ebml.data, ebml.size);
          } else if (ebml.data instanceof EBMLFloat64) {
            buffer.writeEBMLVarInt(8);
            ebml.dataOffset = buffer.pos + bufferFileOffset;
            buffer.writeDoubleBE(ebml.data.value);
          } else if (ebml.data instanceof EBMLFloat32) {
            buffer.writeEBMLVarInt(4);
            ebml.dataOffset = buffer.pos + bufferFileOffset;
            buffer.writeFloatBE(ebml.data.value);
          } else if (ebml.data instanceof Uint8Array) {
            buffer.writeEBMLVarInt(ebml.data.byteLength);
            ebml.dataOffset = buffer.pos + bufferFileOffset;
            buffer.writeBytes(ebml.data);
          } else {
            throw new Error("Bad EBML datatype " + typeof ebml.data);
          }
        } else {
          throw new Error("Bad EBML datatype " + typeof ebml.data);
        }
      }
      let WebMWriter2 = function(ArrayBufferDataStream2, BlobBuffer2) {
        return function(options) {
          let MAX_CLUSTER_DURATION_MSEC = 5e3, DEFAULT_TRACK_NUMBER = 1, writtenHeader = false, videoWidth = 0, videoHeight = 0, alphaBuffer = null, alphaBufferContext = null, alphaBufferData = null, clusterFrameBuffer = [], clusterStartTime = 0, clusterDuration = 0, optionDefaults = {
            quality: 0.95,
            // WebM image quality from 0.0 (worst) to 0.99999 (best), 1.00 (WebP lossless) is not supported
            transparent: false,
            // True if an alpha channel should be included in the video
            alphaQuality: void 0,
            // Allows you to set the quality level of the alpha channel separately.
            // If not specified this defaults to the same value as `quality`.
            fileWriter: null,
            // Chrome FileWriter in order to stream to a file instead of buffering to memory (optional)
            fd: null,
            // Node.JS file descriptor to write to instead of buffering (optional)
            // You must supply one of:
            frameDuration: null,
            // Duration of frames in milliseconds
            frameRate: null
            // Number of frames per second
          }, seekPoints = {
            Cues: { id: new Uint8Array([28, 83, 187, 107]), positionEBML: null },
            SegmentInfo: { id: new Uint8Array([21, 73, 169, 102]), positionEBML: null },
            Tracks: { id: new Uint8Array([22, 84, 174, 107]), positionEBML: null }
          }, ebmlSegment, segmentDuration = {
            "id": 17545,
            // Duration
            "data": new EBMLFloat64(0)
          }, seekHead, cues = [], blobBuffer = new BlobBuffer2(options.fileWriter || options.fd);
          function fileOffsetToSegmentRelative(fileOffset) {
            return fileOffset - ebmlSegment.dataOffset;
          }
          function convertAlphaToGrayscaleImage(source) {
            if (alphaBuffer === null || alphaBuffer.width !== source.width || alphaBuffer.height !== source.height) {
              alphaBuffer = document.createElement("canvas");
              alphaBuffer.width = source.width;
              alphaBuffer.height = source.height;
              alphaBufferContext = alphaBuffer.getContext("2d");
              alphaBufferData = alphaBufferContext.createImageData(alphaBuffer.width, alphaBuffer.height);
            }
            let sourceContext = source.getContext("2d"), sourceData = sourceContext.getImageData(0, 0, source.width, source.height).data, destData = alphaBufferData.data, dstCursor = 0, srcEnd = source.width * source.height * 4;
            for (let srcCursor = 3; srcCursor < srcEnd; srcCursor += 4) {
              let alpha = sourceData[srcCursor];
              destData[dstCursor++] = alpha;
              destData[dstCursor++] = alpha;
              destData[dstCursor++] = alpha;
              destData[dstCursor++] = 255;
            }
            alphaBufferContext.putImageData(alphaBufferData, 0, 0);
            return alphaBuffer;
          }
          function createSeekHead() {
            let seekPositionEBMLTemplate = {
              "id": 21420,
              // SeekPosition
              "size": 5,
              // Allows for 32GB video files
              "data": 0
              // We'll overwrite this when the file is complete
            }, result = {
              "id": 290298740,
              // SeekHead
              "data": []
            };
            for (let name in seekPoints) {
              let seekPoint = seekPoints[name];
              seekPoint.positionEBML = Object.create(seekPositionEBMLTemplate);
              result.data.push({
                "id": 19899,
                // Seek
                "data": [
                  {
                    "id": 21419,
                    // SeekID
                    "data": seekPoint.id
                  },
                  seekPoint.positionEBML
                ]
              });
            }
            return result;
          }
          function writeHeader() {
            seekHead = createSeekHead();
            let ebmlHeader = {
              "id": 440786851,
              // EBML
              "data": [
                {
                  "id": 17030,
                  // EBMLVersion
                  "data": 1
                },
                {
                  "id": 17143,
                  // EBMLReadVersion
                  "data": 1
                },
                {
                  "id": 17138,
                  // EBMLMaxIDLength
                  "data": 4
                },
                {
                  "id": 17139,
                  // EBMLMaxSizeLength
                  "data": 8
                },
                {
                  "id": 17026,
                  // DocType
                  "data": "webm"
                },
                {
                  "id": 17031,
                  // DocTypeVersion
                  "data": 2
                },
                {
                  "id": 17029,
                  // DocTypeReadVersion
                  "data": 2
                }
              ]
            }, segmentInfo = {
              "id": 357149030,
              // Info
              "data": [
                {
                  "id": 2807729,
                  // TimecodeScale
                  "data": 1e6
                  // Times will be in miliseconds (1e6 nanoseconds per step = 1ms)
                },
                {
                  "id": 19840,
                  // MuxingApp
                  "data": "webm-writer-js"
                },
                {
                  "id": 22337,
                  // WritingApp
                  "data": "webm-writer-js"
                },
                segmentDuration
                // To be filled in later
              ]
            }, videoProperties = [
              {
                "id": 176,
                // PixelWidth
                "data": videoWidth
              },
              {
                "id": 186,
                // PixelHeight
                "data": videoHeight
              }
            ];
            if (options.transparent) {
              videoProperties.push(
                {
                  "id": 21440,
                  // AlphaMode
                  "data": 1
                }
              );
            }
            let tracks = {
              "id": 374648427,
              // Tracks
              "data": [
                {
                  "id": 174,
                  // TrackEntry
                  "data": [
                    {
                      "id": 215,
                      // TrackNumber
                      "data": DEFAULT_TRACK_NUMBER
                    },
                    {
                      "id": 29637,
                      // TrackUID
                      "data": DEFAULT_TRACK_NUMBER
                    },
                    {
                      "id": 156,
                      // FlagLacing
                      "data": 0
                    },
                    {
                      "id": 2274716,
                      // Language
                      "data": "und"
                    },
                    {
                      "id": 134,
                      // CodecID
                      "data": "V_VP8"
                    },
                    {
                      "id": 2459272,
                      // CodecName
                      "data": "VP8"
                    },
                    {
                      "id": 131,
                      // TrackType
                      "data": 1
                    },
                    {
                      "id": 224,
                      // Video
                      "data": videoProperties
                    }
                  ]
                }
              ]
            };
            ebmlSegment = {
              "id": 408125543,
              // Segment
              "size": EBML_SIZE_UNKNOWN_5_BYTES,
              // We'll seek back and fill this in at completion
              "data": [
                seekHead,
                segmentInfo,
                tracks
              ]
            };
            let bufferStream = new ArrayBufferDataStream2(256);
            writeEBML(bufferStream, blobBuffer.pos, [ebmlHeader, ebmlSegment]);
            blobBuffer.write(bufferStream.getAsDataArray());
            seekPoints.SegmentInfo.positionEBML.data = fileOffsetToSegmentRelative(segmentInfo.offset);
            seekPoints.Tracks.positionEBML.data = fileOffsetToSegmentRelative(tracks.offset);
            writtenHeader = true;
          }
          function createBlockGroupForTransparentKeyframe(keyframe) {
            let block, blockAdditions, bufferStream = new ArrayBufferDataStream2(1 + 2 + 1);
            if (!(keyframe.trackNumber > 0 && keyframe.trackNumber < 127)) {
              throw new Error("TrackNumber must be > 0 and < 127");
            }
            bufferStream.writeEBMLVarInt(keyframe.trackNumber);
            bufferStream.writeU16BE(keyframe.timecode);
            bufferStream.writeByte(0);
            block = {
              "id": 161,
              // Block
              "data": [
                bufferStream.getAsDataArray(),
                keyframe.frame
              ]
            };
            blockAdditions = {
              "id": 30113,
              // BlockAdditions
              "data": [
                {
                  "id": 166,
                  // BlockMore
                  "data": [
                    {
                      "id": 238,
                      // BlockAddID
                      "data": 1
                      // Means "BlockAdditional has a codec-defined meaning, pass it to the codec"
                    },
                    {
                      "id": 165,
                      // BlockAdditional
                      "data": keyframe.alpha
                      // The actual alpha channel image
                    }
                  ]
                }
              ]
            };
            return {
              "id": 160,
              // BlockGroup
              "data": [
                block,
                blockAdditions
              ]
            };
          }
          function createSimpleBlockForKeyframe(keyframe) {
            let bufferStream = new ArrayBufferDataStream2(1 + 2 + 1);
            if (!(keyframe.trackNumber > 0 && keyframe.trackNumber < 127)) {
              throw new Error("TrackNumber must be > 0 and < 127");
            }
            bufferStream.writeEBMLVarInt(keyframe.trackNumber);
            bufferStream.writeU16BE(keyframe.timecode);
            bufferStream.writeByte(
              1 << 7
              // Keyframe
            );
            return {
              "id": 163,
              // SimpleBlock
              "data": [
                bufferStream.getAsDataArray(),
                keyframe.frame
              ]
            };
          }
          function createContainerForKeyframe(keyframe) {
            if (keyframe.alpha) {
              return createBlockGroupForTransparentKeyframe(keyframe);
            }
            return createSimpleBlockForKeyframe(keyframe);
          }
          function createCluster(cluster) {
            return {
              "id": 524531317,
              "data": [
                {
                  "id": 231,
                  // Timecode
                  "data": Math.round(cluster.timecode)
                }
              ]
            };
          }
          function addCuePoint(trackIndex, clusterTime, clusterFileOffset) {
            cues.push({
              "id": 187,
              // Cue
              "data": [
                {
                  "id": 179,
                  // CueTime
                  "data": clusterTime
                },
                {
                  "id": 183,
                  // CueTrackPositions
                  "data": [
                    {
                      "id": 247,
                      // CueTrack
                      "data": trackIndex
                    },
                    {
                      "id": 241,
                      // CueClusterPosition
                      "data": fileOffsetToSegmentRelative(clusterFileOffset)
                    }
                  ]
                }
              ]
            });
          }
          function writeCues() {
            let ebml = {
              "id": 475249515,
              "data": cues
            }, cuesBuffer = new ArrayBufferDataStream2(16 + cues.length * 32);
            writeEBML(cuesBuffer, blobBuffer.pos, ebml);
            blobBuffer.write(cuesBuffer.getAsDataArray());
            seekPoints.Cues.positionEBML.data = fileOffsetToSegmentRelative(ebml.offset);
          }
          function flushClusterFrameBuffer() {
            if (clusterFrameBuffer.length === 0) {
              return;
            }
            let rawImageSize = 0;
            for (let i = 0; i < clusterFrameBuffer.length; i++) {
              rawImageSize += clusterFrameBuffer[i].frame.length + (clusterFrameBuffer[i].alpha ? clusterFrameBuffer[i].alpha.length : 0);
            }
            let buffer = new ArrayBufferDataStream2(rawImageSize + clusterFrameBuffer.length * 64), cluster = createCluster({
              timecode: Math.round(clusterStartTime)
            });
            for (let i = 0; i < clusterFrameBuffer.length; i++) {
              cluster.data.push(createContainerForKeyframe(clusterFrameBuffer[i]));
            }
            writeEBML(buffer, blobBuffer.pos, cluster);
            blobBuffer.write(buffer.getAsDataArray());
            addCuePoint(DEFAULT_TRACK_NUMBER, Math.round(clusterStartTime), cluster.offset);
            clusterFrameBuffer = [];
            clusterStartTime += clusterDuration;
            clusterDuration = 0;
          }
          function validateOptions() {
            if (!options.frameDuration) {
              if (options.frameRate) {
                options.frameDuration = 1e3 / options.frameRate;
              } else {
                throw new Error("Missing required frameDuration or frameRate setting");
              }
            }
            options.quality = Math.max(Math.min(options.quality, 0.99999), 0);
            if (options.alphaQuality === void 0) {
              options.alphaQuality = options.quality;
            } else {
              options.alphaQuality = Math.max(Math.min(options.alphaQuality, 0.99999), 0);
            }
          }
          function addFrameToCluster(frame) {
            frame.trackNumber = DEFAULT_TRACK_NUMBER;
            frame.timecode = Math.round(clusterDuration);
            clusterFrameBuffer.push(frame);
            clusterDuration += frame.duration;
            if (clusterDuration >= MAX_CLUSTER_DURATION_MSEC) {
              flushClusterFrameBuffer();
            }
          }
          function rewriteSeekHead() {
            let seekHeadBuffer = new ArrayBufferDataStream2(seekHead.size), oldPos = blobBuffer.pos;
            writeEBML(seekHeadBuffer, seekHead.dataOffset, seekHead.data);
            blobBuffer.seek(seekHead.dataOffset);
            blobBuffer.write(seekHeadBuffer.getAsDataArray());
            blobBuffer.seek(oldPos);
          }
          function rewriteDuration() {
            let buffer = new ArrayBufferDataStream2(8), oldPos = blobBuffer.pos;
            buffer.writeDoubleBE(clusterStartTime);
            blobBuffer.seek(segmentDuration.dataOffset);
            blobBuffer.write(buffer.getAsDataArray());
            blobBuffer.seek(oldPos);
          }
          function rewriteSegmentLength() {
            let buffer = new ArrayBufferDataStream2(10), oldPos = blobBuffer.pos;
            buffer.writeUnsignedIntBE(ebmlSegment.id);
            buffer.writeEBMLVarIntWidth(blobBuffer.pos - ebmlSegment.dataOffset, 5);
            blobBuffer.seek(ebmlSegment.offset);
            blobBuffer.write(buffer.getAsDataArray());
            blobBuffer.seek(oldPos);
          }
          this.addFrame = function(frame, alpha, overrideFrameDuration) {
            if (!writtenHeader) {
              videoWidth = frame.width || 0;
              videoHeight = frame.height || 0;
              writeHeader();
            }
            let keyframe = extractKeyframeFromWebP(renderAsWebP(frame, options.quality)), frameDuration, frameAlpha = null;
            if (overrideFrameDuration) {
              frameDuration = overrideFrameDuration;
            } else if (typeof alpha == "number") {
              frameDuration = alpha;
            } else {
              frameDuration = options.frameDuration;
            }
            if (options.transparent) {
              if (alpha instanceof HTMLCanvasElement || typeof alpha === "string") {
                frameAlpha = alpha;
              } else if (keyframe.hasAlpha) {
                frameAlpha = convertAlphaToGrayscaleImage(frame);
              }
            }
            addFrameToCluster({
              frame: keyframe.frame,
              duration: frameDuration,
              alpha: frameAlpha ? extractKeyframeFromWebP(renderAsWebP(frameAlpha, options.alphaQuality)).frame : null
            });
          };
          this.complete = function() {
            if (!writtenHeader) {
              writeHeader();
            }
            flushClusterFrameBuffer();
            writeCues();
            rewriteSeekHead();
            rewriteDuration();
            rewriteSegmentLength();
            return blobBuffer.complete("video/webm");
          };
          this.getWrittenSize = function() {
            return blobBuffer.length;
          };
          options = extend(optionDefaults, options || {});
          validateOptions();
        };
      };
      {
        module.exports = WebMWriter2;
      }
    })();
  })(WebMWriter$1);
  var WebMWriterExports = WebMWriter$1.exports;
  var ArrayBufferDataStream = { exports: {} };
  (function(module) {
    (function() {
      let ArrayBufferDataStream2 = function(length) {
        this.data = new Uint8Array(length);
        this.pos = 0;
      };
      ArrayBufferDataStream2.prototype.seek = function(toOffset) {
        this.pos = toOffset;
      };
      ArrayBufferDataStream2.prototype.writeBytes = function(arr) {
        for (let i = 0; i < arr.length; i++) {
          this.data[this.pos++] = arr[i];
        }
      };
      ArrayBufferDataStream2.prototype.writeByte = function(b) {
        this.data[this.pos++] = b;
      };
      ArrayBufferDataStream2.prototype.writeU8 = ArrayBufferDataStream2.prototype.writeByte;
      ArrayBufferDataStream2.prototype.writeU16BE = function(u) {
        this.data[this.pos++] = u >> 8;
        this.data[this.pos++] = u;
      };
      ArrayBufferDataStream2.prototype.writeDoubleBE = function(d) {
        let bytes2 = new Uint8Array(new Float64Array([d]).buffer);
        for (let i = bytes2.length - 1; i >= 0; i--) {
          this.writeByte(bytes2[i]);
        }
      };
      ArrayBufferDataStream2.prototype.writeFloatBE = function(d) {
        let bytes2 = new Uint8Array(new Float32Array([d]).buffer);
        for (let i = bytes2.length - 1; i >= 0; i--) {
          this.writeByte(bytes2[i]);
        }
      };
      ArrayBufferDataStream2.prototype.writeString = function(s) {
        for (let i = 0; i < s.length; i++) {
          this.data[this.pos++] = s.charCodeAt(i);
        }
      };
      ArrayBufferDataStream2.prototype.writeEBMLVarIntWidth = function(i, width) {
        switch (width) {
          case 1:
            this.writeU8(1 << 7 | i);
            break;
          case 2:
            this.writeU8(1 << 6 | i >> 8);
            this.writeU8(i);
            break;
          case 3:
            this.writeU8(1 << 5 | i >> 16);
            this.writeU8(i >> 8);
            this.writeU8(i);
            break;
          case 4:
            this.writeU8(1 << 4 | i >> 24);
            this.writeU8(i >> 16);
            this.writeU8(i >> 8);
            this.writeU8(i);
            break;
          case 5:
            this.writeU8(1 << 3 | i / 4294967296 & 7);
            this.writeU8(i >> 24);
            this.writeU8(i >> 16);
            this.writeU8(i >> 8);
            this.writeU8(i);
            break;
          default:
            throw new Error("Bad EBML VINT size " + width);
        }
      };
      ArrayBufferDataStream2.prototype.measureEBMLVarInt = function(val) {
        if (val < (1 << 7) - 1) {
          return 1;
        } else if (val < (1 << 14) - 1) {
          return 2;
        } else if (val < (1 << 21) - 1) {
          return 3;
        } else if (val < (1 << 28) - 1) {
          return 4;
        } else if (val < 34359738367) {
          return 5;
        } else {
          throw new Error("EBML VINT size not supported " + val);
        }
      };
      ArrayBufferDataStream2.prototype.writeEBMLVarInt = function(i) {
        this.writeEBMLVarIntWidth(i, this.measureEBMLVarInt(i));
      };
      ArrayBufferDataStream2.prototype.writeUnsignedIntBE = function(u, width) {
        if (width === void 0) {
          width = this.measureUnsignedInt(u);
        }
        switch (width) {
          case 5:
            this.writeU8(Math.floor(u / 4294967296));
          case 4:
            this.writeU8(u >> 24);
          case 3:
            this.writeU8(u >> 16);
          case 2:
            this.writeU8(u >> 8);
          case 1:
            this.writeU8(u);
            break;
          default:
            throw new Error("Bad UINT size " + width);
        }
      };
      ArrayBufferDataStream2.prototype.measureUnsignedInt = function(val) {
        if (val < 1 << 8) {
          return 1;
        } else if (val < 1 << 16) {
          return 2;
        } else if (val < 1 << 24) {
          return 3;
        } else if (val < 4294967296) {
          return 4;
        } else {
          return 5;
        }
      };
      ArrayBufferDataStream2.prototype.getAsDataArray = function() {
        if (this.pos < this.data.byteLength) {
          return this.data.subarray(0, this.pos);
        } else if (this.pos == this.data.byteLength) {
          return this.data;
        } else {
          throw new Error("ArrayBufferDataStream's pos lies beyond end of buffer");
        }
      };
      {
        module.exports = ArrayBufferDataStream2;
      }
    })();
  })(ArrayBufferDataStream);
  var ArrayBufferDataStreamExports = ArrayBufferDataStream.exports;
  var BlobBuffer = { exports: {} };
  (function(module) {
    (function() {
      let BlobBuffer2 = function(fs) {
        return function(destination) {
          let buffer = [], writePromise = Promise.resolve(), fileWriter = null, fd = null;
          if (destination && destination.constructor.name === "FileWriter") {
            fileWriter = destination;
          } else if (fs && destination) {
            fd = destination;
          }
          this.pos = 0;
          this.length = 0;
          function readBlobAsBuffer(blob) {
            return new Promise(function(resolve, reject) {
              let reader = new FileReader();
              reader.addEventListener("loadend", function() {
                resolve(reader.result);
              });
              reader.readAsArrayBuffer(blob);
            });
          }
          function convertToUint8Array(thing) {
            return new Promise(function(resolve, reject) {
              if (thing instanceof Uint8Array) {
                resolve(thing);
              } else if (thing instanceof ArrayBuffer || ArrayBuffer.isView(thing)) {
                resolve(new Uint8Array(thing));
              } else if (thing instanceof Blob) {
                resolve(readBlobAsBuffer(thing).then(function(buffer2) {
                  return new Uint8Array(buffer2);
                }));
              } else {
                resolve(readBlobAsBuffer(new Blob([thing])).then(function(buffer2) {
                  return new Uint8Array(buffer2);
                }));
              }
            });
          }
          function measureData(data) {
            let result = data.byteLength || data.length || data.size;
            if (!Number.isInteger(result)) {
              throw new Error("Failed to determine size of element");
            }
            return result;
          }
          this.seek = function(offset) {
            if (offset < 0) {
              throw new Error("Offset may not be negative");
            }
            if (isNaN(offset)) {
              throw new Error("Offset may not be NaN");
            }
            if (offset > this.length) {
              throw new Error("Seeking beyond the end of file is not allowed");
            }
            this.pos = offset;
          };
          this.write = function(data) {
            let newEntry = {
              offset: this.pos,
              data,
              length: measureData(data)
            }, isAppend = newEntry.offset >= this.length;
            this.pos += newEntry.length;
            this.length = Math.max(this.length, this.pos);
            writePromise = writePromise.then(function() {
              if (fd) {
                return new Promise(function(resolve, reject) {
                  convertToUint8Array(newEntry.data).then(function(dataArray) {
                    let totalWritten = 0, buffer2 = Buffer.from(dataArray.buffer), handleWriteComplete = function(err, written, buffer3) {
                      totalWritten += written;
                      if (totalWritten >= buffer3.length) {
                        resolve();
                      } else {
                        fs.write(fd, buffer3, totalWritten, buffer3.length - totalWritten, newEntry.offset + totalWritten, handleWriteComplete);
                      }
                    };
                    fs.write(fd, buffer2, 0, buffer2.length, newEntry.offset, handleWriteComplete);
                  });
                });
              } else if (fileWriter) {
                return new Promise(function(resolve, reject) {
                  fileWriter.onwriteend = resolve;
                  fileWriter.seek(newEntry.offset);
                  fileWriter.write(new Blob([newEntry.data]));
                });
              } else if (!isAppend) {
                for (let i = 0; i < buffer.length; i++) {
                  let entry = buffer[i];
                  if (!(newEntry.offset + newEntry.length <= entry.offset || newEntry.offset >= entry.offset + entry.length)) {
                    if (newEntry.offset < entry.offset || newEntry.offset + newEntry.length > entry.offset + entry.length) {
                      throw new Error("Overwrite crosses blob boundaries");
                    }
                    if (newEntry.offset == entry.offset && newEntry.length == entry.length) {
                      entry.data = newEntry.data;
                      return;
                    } else {
                      return convertToUint8Array(entry.data).then(function(entryArray) {
                        entry.data = entryArray;
                        return convertToUint8Array(newEntry.data);
                      }).then(function(newEntryArray) {
                        newEntry.data = newEntryArray;
                        entry.data.set(newEntry.data, newEntry.offset - entry.offset);
                      });
                    }
                  }
                }
              }
              buffer.push(newEntry);
            });
          };
          this.complete = function(mimeType) {
            if (fd || fileWriter) {
              writePromise = writePromise.then(function() {
                return null;
              });
            } else {
              writePromise = writePromise.then(function() {
                let result = [];
                for (let i = 0; i < buffer.length; i++) {
                  result.push(buffer[i].data);
                }
                return new Blob(result, { type: mimeType });
              });
            }
            return writePromise;
          };
        };
      };
      {
        module.exports = BlobBuffer2;
      }
    })();
  })(BlobBuffer);
  var BlobBufferExports = BlobBuffer.exports;
  var browser = WebMWriterExports(ArrayBufferDataStreamExports, BlobBufferExports(null));
  const WebMWriter = /* @__PURE__ */ getDefaultExportFromCjs(browser);
  function webm(frames, convertMeta) {
    const quality = config.get("webmQuality") / 100;
    return Promise.all(
      frames.map((frame) => {
        if (frame instanceof Blob) {
          return createImageBitmap(frame);
        } else {
          return frame;
        }
      })
    ).then((bitmaps) => {
      if (convertMeta.isAborted) throw new CancelError();
      const width = bitmaps[0].width;
      const height = bitmaps[0].height;
      const canvas = new OffscreenCanvas(width, height);
      const ctx = canvas.getContext("2d");
      const dataUrls = [];
      for (let i = 0; i < frames.length; i++) {
        ctx.drawImage(bitmaps[i], 0, 0);
        bitmaps[i].close();
        const url2 = canvas.convertToBlob({ type: "image/webp", quality }).then(readBlobAsDataUrl);
        dataUrls.push(url2);
      }
      return Promise.all(dataUrls);
    }).then((dataUrls) => {
      if (convertMeta.isAborted) throw new CancelError();
      const videoWriter = new WebMWriter({
        quality,
        // WebM image quality from 0.0 (worst) to 0.99999 (best), 1.00 (VP8L lossless) is not supported
        frameRate: 30,
        // Number of frames per second
        transparent: false
        // True if an alpha channel should be included in the video
      });
      const delays = convertMeta.source.delays;
      for (let i = 0; i < dataUrls.length; i++) {
        videoWriter.addFrame(dataUrls[i], delays[i]);
      }
      return videoWriter.complete();
    }).then((blob) => {
      if (convertMeta.isAborted) throw new CancelError();
      return blob;
    });
  }
  var __accessCheck = (obj, member, msg) => {
    if (!member.has(obj))
      throw TypeError("Cannot " + msg);
  };
  var __privateGet = (obj, member, getter) => {
    __accessCheck(obj, member, "read from private field");
    return getter ? getter.call(obj) : member.get(obj);
  };
  var __privateAdd = (obj, member, value) => {
    if (member.has(obj))
      throw TypeError("Cannot add the same private member more than once");
    member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
  };
  var __privateSet = (obj, member, value, setter) => {
    __accessCheck(obj, member, "write to private field");
    member.set(obj, value);
    return value;
  };
  var __privateWrapper = (obj, member, setter, getter) => ({
    set _(value) {
      __privateSet(obj, member, value);
    },
    get _() {
      return __privateGet(obj, member, getter);
    }
  });
  var __privateMethod = (obj, member, method) => {
    __accessCheck(obj, member, "access private method");
    return method;
  };
  var bytes = new Uint8Array(8);
  var view = new DataView(bytes.buffer);
  var u8 = (value) => {
    return [(value % 256 + 256) % 256];
  };
  var u16 = (value) => {
    view.setUint16(0, value, false);
    return [bytes[0], bytes[1]];
  };
  var i16 = (value) => {
    view.setInt16(0, value, false);
    return [bytes[0], bytes[1]];
  };
  var u24 = (value) => {
    view.setUint32(0, value, false);
    return [bytes[1], bytes[2], bytes[3]];
  };
  var u32 = (value) => {
    view.setUint32(0, value, false);
    return [bytes[0], bytes[1], bytes[2], bytes[3]];
  };
  var i32 = (value) => {
    view.setInt32(0, value, false);
    return [bytes[0], bytes[1], bytes[2], bytes[3]];
  };
  var u64 = (value) => {
    view.setUint32(0, Math.floor(value / 2 ** 32), false);
    view.setUint32(4, value, false);
    return [bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7]];
  };
  var fixed_8_8 = (value) => {
    view.setInt16(0, 2 ** 8 * value, false);
    return [bytes[0], bytes[1]];
  };
  var fixed_16_16 = (value) => {
    view.setInt32(0, 2 ** 16 * value, false);
    return [bytes[0], bytes[1], bytes[2], bytes[3]];
  };
  var fixed_2_30 = (value) => {
    view.setInt32(0, 2 ** 30 * value, false);
    return [bytes[0], bytes[1], bytes[2], bytes[3]];
  };
  var ascii = (text2, nullTerminated = false) => {
    let bytes2 = Array(text2.length).fill(null).map((_, i) => text2.charCodeAt(i));
    if (nullTerminated)
      bytes2.push(0);
    return bytes2;
  };
  var last = (arr) => {
    return arr && arr[arr.length - 1];
  };
  var lastPresentedSample = (samples) => {
    let result = void 0;
    for (let sample of samples) {
      if (!result || sample.presentationTimestamp > result.presentationTimestamp) {
        result = sample;
      }
    }
    return result;
  };
  var intoTimescale = (timeInSeconds, timescale, round = true) => {
    let value = timeInSeconds * timescale;
    return round ? Math.round(value) : value;
  };
  var rotationMatrix = (rotationInDegrees) => {
    let theta = rotationInDegrees * (Math.PI / 180);
    let cosTheta = Math.cos(theta);
    let sinTheta = Math.sin(theta);
    return [
      cosTheta,
      sinTheta,
      0,
      -sinTheta,
      cosTheta,
      0,
      0,
      0,
      1
    ];
  };
  var IDENTITY_MATRIX = rotationMatrix(0);
  var matrixToBytes = (matrix) => {
    return [
      fixed_16_16(matrix[0]),
      fixed_16_16(matrix[1]),
      fixed_2_30(matrix[2]),
      fixed_16_16(matrix[3]),
      fixed_16_16(matrix[4]),
      fixed_2_30(matrix[5]),
      fixed_16_16(matrix[6]),
      fixed_16_16(matrix[7]),
      fixed_2_30(matrix[8])
    ];
  };
  var deepClone = (x) => {
    if (!x)
      return x;
    if (typeof x !== "object")
      return x;
    if (Array.isArray(x))
      return x.map(deepClone);
    return Object.fromEntries(Object.entries(x).map(([key, value]) => [key, deepClone(value)]));
  };
  var isU32 = (value) => {
    return value >= 0 && value < 2 ** 32;
  };
  var box = (type, contents, children2) => ({
    type,
    contents: contents && new Uint8Array(contents.flat(10)),
    children: children2
  });
  var fullBox = (type, version, flags, contents, children2) => box(
    type,
    [u8(version), u24(flags), contents ?? []],
    children2
  );
  var ftyp = (details) => {
    let minorVersion = 512;
    if (details.fragmented)
      return box("ftyp", [
        ascii("iso5"),
        // Major brand
        u32(minorVersion),
        // Minor version
        // Compatible brands
        ascii("iso5"),
        ascii("iso6"),
        ascii("mp41")
      ]);
    return box("ftyp", [
      ascii("isom"),
      // Major brand
      u32(minorVersion),
      // Minor version
      // Compatible brands
      ascii("isom"),
      details.holdsAvc ? ascii("avc1") : [],
      ascii("mp41")
    ]);
  };
  var mdat = (reserveLargeSize) => ({ type: "mdat", largeSize: reserveLargeSize });
  var free = (size) => ({ type: "free", size });
  var moov = (tracks, creationTime, fragmented = false) => box("moov", null, [
    mvhd(creationTime, tracks),
    ...tracks.map((x) => trak(x, creationTime)),
    fragmented ? mvex(tracks) : null
  ]);
  var mvhd = (creationTime, tracks) => {
    let duration = intoTimescale(Math.max(
      0,
      ...tracks.filter((x) => x.samples.length > 0).map((x) => {
        const lastSample = lastPresentedSample(x.samples);
        return lastSample.presentationTimestamp + lastSample.duration;
      })
    ), GLOBAL_TIMESCALE);
    let nextTrackId = Math.max(...tracks.map((x) => x.id)) + 1;
    let needsU64 = !isU32(creationTime) || !isU32(duration);
    let u32OrU64 = needsU64 ? u64 : u32;
    return fullBox("mvhd", +needsU64, 0, [
      u32OrU64(creationTime),
      // Creation time
      u32OrU64(creationTime),
      // Modification time
      u32(GLOBAL_TIMESCALE),
      // Timescale
      u32OrU64(duration),
      // Duration
      fixed_16_16(1),
      // Preferred rate
      fixed_8_8(1),
      // Preferred volume
      Array(10).fill(0),
      // Reserved
      matrixToBytes(IDENTITY_MATRIX),
      // Matrix
      Array(24).fill(0),
      // Pre-defined
      u32(nextTrackId)
      // Next track ID
    ]);
  };
  var trak = (track, creationTime) => box("trak", null, [
    tkhd(track, creationTime),
    mdia(track, creationTime)
  ]);
  var tkhd = (track, creationTime) => {
    let lastSample = lastPresentedSample(track.samples);
    let durationInGlobalTimescale = intoTimescale(
      lastSample ? lastSample.presentationTimestamp + lastSample.duration : 0,
      GLOBAL_TIMESCALE
    );
    let needsU64 = !isU32(creationTime) || !isU32(durationInGlobalTimescale);
    let u32OrU64 = needsU64 ? u64 : u32;
    let matrix;
    if (track.info.type === "video") {
      matrix = typeof track.info.rotation === "number" ? rotationMatrix(track.info.rotation) : track.info.rotation;
    } else {
      matrix = IDENTITY_MATRIX;
    }
    return fullBox("tkhd", +needsU64, 3, [
      u32OrU64(creationTime),
      // Creation time
      u32OrU64(creationTime),
      // Modification time
      u32(track.id),
      // Track ID
      u32(0),
      // Reserved
      u32OrU64(durationInGlobalTimescale),
      // Duration
      Array(8).fill(0),
      // Reserved
      u16(0),
      // Layer
      u16(0),
      // Alternate group
      fixed_8_8(track.info.type === "audio" ? 1 : 0),
      // Volume
      u16(0),
      // Reserved
      matrixToBytes(matrix),
      // Matrix
      fixed_16_16(track.info.type === "video" ? track.info.width : 0),
      // Track width
      fixed_16_16(track.info.type === "video" ? track.info.height : 0)
      // Track height
    ]);
  };
  var mdia = (track, creationTime) => box("mdia", null, [
    mdhd(track, creationTime),
    hdlr(track.info.type === "video" ? "vide" : "soun"),
    minf(track)
  ]);
  var mdhd = (track, creationTime) => {
    let lastSample = lastPresentedSample(track.samples);
    let localDuration = intoTimescale(
      lastSample ? lastSample.presentationTimestamp + lastSample.duration : 0,
      track.timescale
    );
    let needsU64 = !isU32(creationTime) || !isU32(localDuration);
    let u32OrU64 = needsU64 ? u64 : u32;
    return fullBox("mdhd", +needsU64, 0, [
      u32OrU64(creationTime),
      // Creation time
      u32OrU64(creationTime),
      // Modification time
      u32(track.timescale),
      // Timescale
      u32OrU64(localDuration),
      // Duration
      u16(21956),
      // Language ("und", undetermined)
      u16(0)
      // Quality
    ]);
  };
  var hdlr = (componentSubtype) => fullBox("hdlr", 0, 0, [
    ascii("mhlr"),
    // Component type
    ascii(componentSubtype),
    // Component subtype
    u32(0),
    // Component manufacturer
    u32(0),
    // Component flags
    u32(0),
    // Component flags mask
    ascii("mp4-muxer-hdlr", true)
    // Component name
  ]);
  var minf = (track) => box("minf", null, [
    track.info.type === "video" ? vmhd() : smhd(),
    dinf(),
    stbl(track)
  ]);
  var vmhd = () => fullBox("vmhd", 0, 1, [
    u16(0),
    // Graphics mode
    u16(0),
    // Opcolor R
    u16(0),
    // Opcolor G
    u16(0)
    // Opcolor B
  ]);
  var smhd = () => fullBox("smhd", 0, 0, [
    u16(0),
    // Balance
    u16(0)
    // Reserved
  ]);
  var dinf = () => box("dinf", null, [
    dref()
  ]);
  var dref = () => fullBox("dref", 0, 0, [
    u32(1)
    // Entry count
  ], [
    url()
  ]);
  var url = () => fullBox("url ", 0, 1);
  var stbl = (track) => {
    const needsCtts = track.compositionTimeOffsetTable.length > 1 || track.compositionTimeOffsetTable.some((x) => x.sampleCompositionTimeOffset !== 0);
    return box("stbl", null, [
      stsd(track),
      stts(track),
      stss(track),
      stsc(track),
      stsz(track),
      stco(track),
      needsCtts ? ctts(track) : null
    ]);
  };
  var stsd = (track) => fullBox("stsd", 0, 0, [
    u32(1)
    // Entry count
  ], [
    track.info.type === "video" ? videoSampleDescription(
      VIDEO_CODEC_TO_BOX_NAME[track.info.codec],
      track
    ) : soundSampleDescription(
      AUDIO_CODEC_TO_BOX_NAME[track.info.codec],
      track
    )
  ]);
  var videoSampleDescription = (compressionType, track) => box(compressionType, [
    Array(6).fill(0),
    // Reserved
    u16(1),
    // Data reference index
    u16(0),
    // Pre-defined
    u16(0),
    // Reserved
    Array(12).fill(0),
    // Pre-defined
    u16(track.info.width),
    // Width
    u16(track.info.height),
    // Height
    u32(4718592),
    // Horizontal resolution
    u32(4718592),
    // Vertical resolution
    u32(0),
    // Reserved
    u16(1),
    // Frame count
    Array(32).fill(0),
    // Compressor name
    u16(24),
    // Depth
    i16(65535)
    // Pre-defined
  ], [
    VIDEO_CODEC_TO_CONFIGURATION_BOX[track.info.codec](track)
  ]);
  var avcC = (track) => track.info.decoderConfig && box("avcC", [
    // For AVC, description is an AVCDecoderConfigurationRecord, so nothing else to do here
    ...new Uint8Array(track.info.decoderConfig.description)
  ]);
  var hvcC = (track) => track.info.decoderConfig && box("hvcC", [
    // For HEVC, description is a HEVCDecoderConfigurationRecord, so nothing else to do here
    ...new Uint8Array(track.info.decoderConfig.description)
  ]);
  var vpcC = (track) => {
    if (!track.info.decoderConfig) {
      return null;
    }
    let decoderConfig = track.info.decoderConfig;
    if (!decoderConfig.colorSpace) {
      throw new Error(`'colorSpace' is required in the decoder config for VP9.`);
    }
    let parts = decoderConfig.codec.split(".");
    let profile = Number(parts[1]);
    let level = Number(parts[2]);
    let bitDepth = Number(parts[3]);
    let chromaSubsampling = 0;
    let thirdByte = (bitDepth << 4) + (chromaSubsampling << 1) + Number(decoderConfig.colorSpace.fullRange);
    let colourPrimaries = 2;
    let transferCharacteristics = 2;
    let matrixCoefficients = 2;
    return fullBox("vpcC", 1, 0, [
      u8(profile),
      // Profile
      u8(level),
      // Level
      u8(thirdByte),
      // Bit depth, chroma subsampling, full range
      u8(colourPrimaries),
      // Colour primaries
      u8(transferCharacteristics),
      // Transfer characteristics
      u8(matrixCoefficients),
      // Matrix coefficients
      u16(0)
      // Codec initialization data size
    ]);
  };
  var av1C = () => {
    let marker = 1;
    let version = 1;
    let firstByte = (marker << 7) + version;
    return box("av1C", [
      firstByte,
      0,
      0,
      0
    ]);
  };
  var soundSampleDescription = (compressionType, track) => box(compressionType, [
    Array(6).fill(0),
    // Reserved
    u16(1),
    // Data reference index
    u16(0),
    // Version
    u16(0),
    // Revision level
    u32(0),
    // Vendor
    u16(track.info.numberOfChannels),
    // Number of channels
    u16(16),
    // Sample size (bits)
    u16(0),
    // Compression ID
    u16(0),
    // Packet size
    fixed_16_16(track.info.sampleRate)
    // Sample rate
  ], [
    AUDIO_CODEC_TO_CONFIGURATION_BOX[track.info.codec](track)
  ]);
  var esds = (track) => {
    let description = new Uint8Array(track.info.decoderConfig.description);
    return fullBox("esds", 0, 0, [
      // https://stackoverflow.com/a/54803118
      u32(58753152),
      // TAG(3) = Object Descriptor ([2])
      u8(32 + description.byteLength),
      // length of this OD (which includes the next 2 tags)
      u16(1),
      // ES_ID = 1
      u8(0),
      // flags etc = 0
      u32(75530368),
      // TAG(4) = ES Descriptor ([2]) embedded in above OD
      u8(18 + description.byteLength),
      // length of this ESD
      u8(64),
      // MPEG-4 Audio
      u8(21),
      // stream type(6bits)=5 audio, flags(2bits)=1
      u24(0),
      // 24bit buffer size
      u32(130071),
      // max bitrate
      u32(130071),
      // avg bitrate
      u32(92307584),
      // TAG(5) = ASC ([2],[3]) embedded in above OD
      u8(description.byteLength),
      // length
      ...description,
      u32(109084800),
      // TAG(6)
      u8(1),
      // length
      u8(2)
      // data
    ]);
  };
  var dOps = (track) => box("dOps", [
    u8(0),
    // Version
    u8(track.info.numberOfChannels),
    // OutputChannelCount
    u16(3840),
    // PreSkip, should be at least 80 milliseconds worth of playback, measured in 48000 Hz samples
    u32(track.info.sampleRate),
    // InputSampleRate
    fixed_8_8(0),
    // OutputGain
    u8(0)
    // ChannelMappingFamily
  ]);
  var stts = (track) => {
    return fullBox("stts", 0, 0, [
      u32(track.timeToSampleTable.length),
      // Number of entries
      track.timeToSampleTable.map((x) => [
        // Time-to-sample table
        u32(x.sampleCount),
        // Sample count
        u32(x.sampleDelta)
        // Sample duration
      ])
    ]);
  };
  var stss = (track) => {
    if (track.samples.every((x) => x.type === "key"))
      return null;
    let keySamples = [...track.samples.entries()].filter(([, sample]) => sample.type === "key");
    return fullBox("stss", 0, 0, [
      u32(keySamples.length),
      // Number of entries
      keySamples.map(([index]) => u32(index + 1))
      // Sync sample table
    ]);
  };
  var stsc = (track) => {
    return fullBox("stsc", 0, 0, [
      u32(track.compactlyCodedChunkTable.length),
      // Number of entries
      track.compactlyCodedChunkTable.map((x) => [
        // Sample-to-chunk table
        u32(x.firstChunk),
        // First chunk
        u32(x.samplesPerChunk),
        // Samples per chunk
        u32(1)
        // Sample description index
      ])
    ]);
  };
  var stsz = (track) => fullBox("stsz", 0, 0, [
    u32(0),
    // Sample size (0 means non-constant size)
    u32(track.samples.length),
    // Number of entries
    track.samples.map((x) => u32(x.size))
    // Sample size table
  ]);
  var stco = (track) => {
    if (track.finalizedChunks.length > 0 && last(track.finalizedChunks).offset >= 2 ** 32) {
      return fullBox("co64", 0, 0, [
        u32(track.finalizedChunks.length),
        // Number of entries
        track.finalizedChunks.map((x) => u64(x.offset))
        // Chunk offset table
      ]);
    }
    return fullBox("stco", 0, 0, [
      u32(track.finalizedChunks.length),
      // Number of entries
      track.finalizedChunks.map((x) => u32(x.offset))
      // Chunk offset table
    ]);
  };
  var ctts = (track) => {
    return fullBox("ctts", 0, 0, [
      u32(track.compositionTimeOffsetTable.length),
      // Number of entries
      track.compositionTimeOffsetTable.map((x) => [
        // Time-to-sample table
        u32(x.sampleCount),
        // Sample count
        u32(x.sampleCompositionTimeOffset)
        // Sample offset
      ])
    ]);
  };
  var mvex = (tracks) => {
    return box("mvex", null, tracks.map(trex));
  };
  var trex = (track) => {
    return fullBox("trex", 0, 0, [
      u32(track.id),
      // Track ID
      u32(1),
      // Default sample description index
      u32(0),
      // Default sample duration
      u32(0),
      // Default sample size
      u32(0)
      // Default sample flags
    ]);
  };
  var moof = (sequenceNumber, tracks) => {
    return box("moof", null, [
      mfhd(sequenceNumber),
      ...tracks.map(traf)
    ]);
  };
  var mfhd = (sequenceNumber) => {
    return fullBox("mfhd", 0, 0, [
      u32(sequenceNumber)
      // Sequence number
    ]);
  };
  var fragmentSampleFlags = (sample) => {
    let byte1 = 0;
    let byte2 = 0;
    let byte3 = 0;
    let byte4 = 0;
    let sampleIsDifferenceSample = sample.type === "delta";
    byte2 |= +sampleIsDifferenceSample;
    if (sampleIsDifferenceSample) {
      byte1 |= 1;
    } else {
      byte1 |= 2;
    }
    return byte1 << 24 | byte2 << 16 | byte3 << 8 | byte4;
  };
  var traf = (track) => {
    return box("traf", null, [
      tfhd(track),
      tfdt(track),
      trun(track)
    ]);
  };
  var tfhd = (track) => {
    let tfFlags = 0;
    tfFlags |= 8;
    tfFlags |= 16;
    tfFlags |= 32;
    tfFlags |= 131072;
    let referenceSample = track.currentChunk.samples[1] ?? track.currentChunk.samples[0];
    let referenceSampleInfo = {
      duration: referenceSample.timescaleUnitsToNextSample,
      size: referenceSample.size,
      flags: fragmentSampleFlags(referenceSample)
    };
    return fullBox("tfhd", 0, tfFlags, [
      u32(track.id),
      // Track ID
      u32(referenceSampleInfo.duration),
      // Default sample duration
      u32(referenceSampleInfo.size),
      // Default sample size
      u32(referenceSampleInfo.flags)
      // Default sample flags
    ]);
  };
  var tfdt = (track) => {
    return fullBox("tfdt", 1, 0, [
      u64(intoTimescale(track.currentChunk.startTimestamp, track.timescale))
      // Base Media Decode Time
    ]);
  };
  var trun = (track) => {
    let allSampleDurations = track.currentChunk.samples.map((x) => x.timescaleUnitsToNextSample);
    let allSampleSizes = track.currentChunk.samples.map((x) => x.size);
    let allSampleFlags = track.currentChunk.samples.map(fragmentSampleFlags);
    let allSampleCompositionTimeOffsets = track.currentChunk.samples.map((x) => intoTimescale(x.presentationTimestamp - x.decodeTimestamp, track.timescale));
    let uniqueSampleDurations = new Set(allSampleDurations);
    let uniqueSampleSizes = new Set(allSampleSizes);
    let uniqueSampleFlags = new Set(allSampleFlags);
    let uniqueSampleCompositionTimeOffsets = new Set(allSampleCompositionTimeOffsets);
    let firstSampleFlagsPresent = uniqueSampleFlags.size === 2 && allSampleFlags[0] !== allSampleFlags[1];
    let sampleDurationPresent = uniqueSampleDurations.size > 1;
    let sampleSizePresent = uniqueSampleSizes.size > 1;
    let sampleFlagsPresent = !firstSampleFlagsPresent && uniqueSampleFlags.size > 1;
    let sampleCompositionTimeOffsetsPresent = uniqueSampleCompositionTimeOffsets.size > 1 || [...uniqueSampleCompositionTimeOffsets].some((x) => x !== 0);
    let flags = 0;
    flags |= 1;
    flags |= 4 * +firstSampleFlagsPresent;
    flags |= 256 * +sampleDurationPresent;
    flags |= 512 * +sampleSizePresent;
    flags |= 1024 * +sampleFlagsPresent;
    flags |= 2048 * +sampleCompositionTimeOffsetsPresent;
    return fullBox("trun", 1, flags, [
      u32(track.currentChunk.samples.length),
      // Sample count
      u32(track.currentChunk.offset - track.currentChunk.moofOffset || 0),
      // Data offset
      firstSampleFlagsPresent ? u32(allSampleFlags[0]) : [],
      track.currentChunk.samples.map((_, i) => [
        sampleDurationPresent ? u32(allSampleDurations[i]) : [],
        // Sample duration
        sampleSizePresent ? u32(allSampleSizes[i]) : [],
        // Sample size
        sampleFlagsPresent ? u32(allSampleFlags[i]) : [],
        // Sample flags
        // Sample composition time offsets
        sampleCompositionTimeOffsetsPresent ? i32(allSampleCompositionTimeOffsets[i]) : []
      ])
    ]);
  };
  var mfra = (tracks) => {
    return box("mfra", null, [
      ...tracks.map(tfra),
      mfro()
    ]);
  };
  var tfra = (track, trackIndex) => {
    let version = 1;
    return fullBox("tfra", version, 0, [
      u32(track.id),
      // Track ID
      u32(63),
      // This specifies that traf number, trun number and sample number are 32-bit ints
      u32(track.finalizedChunks.length),
      // Number of entries
      track.finalizedChunks.map((chunk) => [
        u64(intoTimescale(chunk.startTimestamp, track.timescale)),
        // Time
        u64(chunk.moofOffset),
        // moof offset
        u32(trackIndex + 1),
        // traf number
        u32(1),
        // trun number
        u32(1)
        // Sample number
      ])
    ]);
  };
  var mfro = () => {
    return fullBox("mfro", 0, 0, [
      // This value needs to be overwritten manually from the outside, where the actual size of the enclosing mfra box
      // is known
      u32(0)
      // Size
    ]);
  };
  var VIDEO_CODEC_TO_BOX_NAME = {
    "avc": "avc1",
    "hevc": "hvc1",
    "vp9": "vp09",
    "av1": "av01"
  };
  var VIDEO_CODEC_TO_CONFIGURATION_BOX = {
    "avc": avcC,
    "hevc": hvcC,
    "vp9": vpcC,
    "av1": av1C
  };
  var AUDIO_CODEC_TO_BOX_NAME = {
    "aac": "mp4a",
    "opus": "Opus"
  };
  var AUDIO_CODEC_TO_CONFIGURATION_BOX = {
    "aac": esds,
    "opus": dOps
  };
  var ArrayBufferTarget = class {
    constructor() {
      this.buffer = null;
    }
  };
  var StreamTarget = class {
    constructor(options) {
      this.options = options;
    }
  };
  var FileSystemWritableFileStreamTarget = class {
    constructor(stream, options) {
      this.stream = stream;
      this.options = options;
    }
  };
  var _helper, _helperView;
  var Writer = class {
    constructor() {
      this.pos = 0;
      __privateAdd(this, _helper, new Uint8Array(8));
      __privateAdd(this, _helperView, new DataView(__privateGet(this, _helper).buffer));
      this.offsets = /* @__PURE__ */ new WeakMap();
    }
    /** Sets the current position for future writes to a new one. */
    seek(newPos) {
      this.pos = newPos;
    }
    writeU32(value) {
      __privateGet(this, _helperView).setUint32(0, value, false);
      this.write(__privateGet(this, _helper).subarray(0, 4));
    }
    writeU64(value) {
      __privateGet(this, _helperView).setUint32(0, Math.floor(value / 2 ** 32), false);
      __privateGet(this, _helperView).setUint32(4, value, false);
      this.write(__privateGet(this, _helper).subarray(0, 8));
    }
    writeAscii(text2) {
      for (let i = 0; i < text2.length; i++) {
        __privateGet(this, _helperView).setUint8(i % 8, text2.charCodeAt(i));
        if (i % 8 === 7)
          this.write(__privateGet(this, _helper));
      }
      if (text2.length % 8 !== 0) {
        this.write(__privateGet(this, _helper).subarray(0, text2.length % 8));
      }
    }
    writeBox(box2) {
      this.offsets.set(box2, this.pos);
      if (box2.contents && !box2.children) {
        this.writeBoxHeader(box2, box2.size ?? box2.contents.byteLength + 8);
        this.write(box2.contents);
      } else {
        let startPos = this.pos;
        this.writeBoxHeader(box2, 0);
        if (box2.contents)
          this.write(box2.contents);
        if (box2.children) {
          for (let child of box2.children)
            if (child)
              this.writeBox(child);
        }
        let endPos = this.pos;
        let size = box2.size ?? endPos - startPos;
        this.seek(startPos);
        this.writeBoxHeader(box2, size);
        this.seek(endPos);
      }
    }
    writeBoxHeader(box2, size) {
      this.writeU32(box2.largeSize ? 1 : size);
      this.writeAscii(box2.type);
      if (box2.largeSize)
        this.writeU64(size);
    }
    measureBoxHeader(box2) {
      return 8 + (box2.largeSize ? 8 : 0);
    }
    patchBox(box2) {
      let endPos = this.pos;
      this.seek(this.offsets.get(box2));
      this.writeBox(box2);
      this.seek(endPos);
    }
    measureBox(box2) {
      if (box2.contents && !box2.children) {
        let headerSize = this.measureBoxHeader(box2);
        return headerSize + box2.contents.byteLength;
      } else {
        let result = this.measureBoxHeader(box2);
        if (box2.contents)
          result += box2.contents.byteLength;
        if (box2.children) {
          for (let child of box2.children)
            if (child)
              result += this.measureBox(child);
        }
        return result;
      }
    }
  };
  _helper = /* @__PURE__ */ new WeakMap();
  _helperView = /* @__PURE__ */ new WeakMap();
  var _target, _buffer, _bytes, _maxPos, _ensureSize, ensureSize_fn;
  var ArrayBufferTargetWriter = class extends Writer {
    constructor(target) {
      super();
      __privateAdd(this, _ensureSize);
      __privateAdd(this, _target, void 0);
      __privateAdd(this, _buffer, new ArrayBuffer(2 ** 16));
      __privateAdd(this, _bytes, new Uint8Array(__privateGet(this, _buffer)));
      __privateAdd(this, _maxPos, 0);
      __privateSet(this, _target, target);
    }
    write(data) {
      __privateMethod(this, _ensureSize, ensureSize_fn).call(this, this.pos + data.byteLength);
      __privateGet(this, _bytes).set(data, this.pos);
      this.pos += data.byteLength;
      __privateSet(this, _maxPos, Math.max(__privateGet(this, _maxPos), this.pos));
    }
    finalize() {
      __privateMethod(this, _ensureSize, ensureSize_fn).call(this, this.pos);
      __privateGet(this, _target).buffer = __privateGet(this, _buffer).slice(0, Math.max(__privateGet(this, _maxPos), this.pos));
    }
  };
  _target = /* @__PURE__ */ new WeakMap();
  _buffer = /* @__PURE__ */ new WeakMap();
  _bytes = /* @__PURE__ */ new WeakMap();
  _maxPos = /* @__PURE__ */ new WeakMap();
  _ensureSize = /* @__PURE__ */ new WeakSet();
  ensureSize_fn = function(size) {
    let newLength = __privateGet(this, _buffer).byteLength;
    while (newLength < size)
      newLength *= 2;
    if (newLength === __privateGet(this, _buffer).byteLength)
      return;
    let newBuffer = new ArrayBuffer(newLength);
    let newBytes = new Uint8Array(newBuffer);
    newBytes.set(__privateGet(this, _bytes), 0);
    __privateSet(this, _buffer, newBuffer);
    __privateSet(this, _bytes, newBytes);
  };
  var _target2, _sections;
  var StreamTargetWriter = class extends Writer {
    constructor(target) {
      super();
      __privateAdd(this, _target2, void 0);
      __privateAdd(this, _sections, []);
      __privateSet(this, _target2, target);
    }
    write(data) {
      __privateGet(this, _sections).push({
        data: data.slice(),
        start: this.pos
      });
      this.pos += data.byteLength;
    }
    flush() {
      var _a, _b;
      if (__privateGet(this, _sections).length === 0)
        return;
      let chunks = [];
      let sorted = [...__privateGet(this, _sections)].sort((a, b) => a.start - b.start);
      chunks.push({
        start: sorted[0].start,
        size: sorted[0].data.byteLength
      });
      for (let i = 1; i < sorted.length; i++) {
        let lastChunk = chunks[chunks.length - 1];
        let section = sorted[i];
        if (section.start <= lastChunk.start + lastChunk.size) {
          lastChunk.size = Math.max(lastChunk.size, section.start + section.data.byteLength - lastChunk.start);
        } else {
          chunks.push({
            start: section.start,
            size: section.data.byteLength
          });
        }
      }
      for (let chunk of chunks) {
        chunk.data = new Uint8Array(chunk.size);
        for (let section of __privateGet(this, _sections)) {
          if (chunk.start <= section.start && section.start < chunk.start + chunk.size) {
            chunk.data.set(section.data, section.start - chunk.start);
          }
        }
        (_b = (_a = __privateGet(this, _target2).options).onData) == null ? void 0 : _b.call(_a, chunk.data, chunk.start);
      }
      __privateGet(this, _sections).length = 0;
    }
    finalize() {
    }
  };
  _target2 = /* @__PURE__ */ new WeakMap();
  _sections = /* @__PURE__ */ new WeakMap();
  var DEFAULT_CHUNK_SIZE = 2 ** 24;
  var MAX_CHUNKS_AT_ONCE = 2;
  var _target3, _chunkSize, _chunks, _writeDataIntoChunks, writeDataIntoChunks_fn, _insertSectionIntoChunk, insertSectionIntoChunk_fn, _createChunk, createChunk_fn, _flushChunks, flushChunks_fn;
  var ChunkedStreamTargetWriter = class extends Writer {
    constructor(target) {
      var _a;
      super();
      __privateAdd(this, _writeDataIntoChunks);
      __privateAdd(this, _insertSectionIntoChunk);
      __privateAdd(this, _createChunk);
      __privateAdd(this, _flushChunks);
      __privateAdd(this, _target3, void 0);
      __privateAdd(this, _chunkSize, void 0);
      __privateAdd(this, _chunks, []);
      __privateSet(this, _target3, target);
      __privateSet(this, _chunkSize, ((_a = target.options) == null ? void 0 : _a.chunkSize) ?? DEFAULT_CHUNK_SIZE);
      if (!Number.isInteger(__privateGet(this, _chunkSize)) || __privateGet(this, _chunkSize) < 2 ** 10) {
        throw new Error("Invalid StreamTarget options: chunkSize must be an integer not smaller than 1024.");
      }
    }
    write(data) {
      __privateMethod(this, _writeDataIntoChunks, writeDataIntoChunks_fn).call(this, data, this.pos);
      __privateMethod(this, _flushChunks, flushChunks_fn).call(this);
      this.pos += data.byteLength;
    }
    finalize() {
      __privateMethod(this, _flushChunks, flushChunks_fn).call(this, true);
    }
  };
  _target3 = /* @__PURE__ */ new WeakMap();
  _chunkSize = /* @__PURE__ */ new WeakMap();
  _chunks = /* @__PURE__ */ new WeakMap();
  _writeDataIntoChunks = /* @__PURE__ */ new WeakSet();
  writeDataIntoChunks_fn = function(data, position) {
    let chunkIndex = __privateGet(this, _chunks).findIndex((x) => x.start <= position && position < x.start + __privateGet(this, _chunkSize));
    if (chunkIndex === -1)
      chunkIndex = __privateMethod(this, _createChunk, createChunk_fn).call(this, position);
    let chunk = __privateGet(this, _chunks)[chunkIndex];
    let relativePosition = position - chunk.start;
    let toWrite = data.subarray(0, Math.min(__privateGet(this, _chunkSize) - relativePosition, data.byteLength));
    chunk.data.set(toWrite, relativePosition);
    let section = {
      start: relativePosition,
      end: relativePosition + toWrite.byteLength
    };
    __privateMethod(this, _insertSectionIntoChunk, insertSectionIntoChunk_fn).call(this, chunk, section);
    if (chunk.written[0].start === 0 && chunk.written[0].end === __privateGet(this, _chunkSize)) {
      chunk.shouldFlush = true;
    }
    if (__privateGet(this, _chunks).length > MAX_CHUNKS_AT_ONCE) {
      for (let i = 0; i < __privateGet(this, _chunks).length - 1; i++) {
        __privateGet(this, _chunks)[i].shouldFlush = true;
      }
      __privateMethod(this, _flushChunks, flushChunks_fn).call(this);
    }
    if (toWrite.byteLength < data.byteLength) {
      __privateMethod(this, _writeDataIntoChunks, writeDataIntoChunks_fn).call(this, data.subarray(toWrite.byteLength), position + toWrite.byteLength);
    }
  };
  _insertSectionIntoChunk = /* @__PURE__ */ new WeakSet();
  insertSectionIntoChunk_fn = function(chunk, section) {
    let low = 0;
    let high = chunk.written.length - 1;
    let index = -1;
    while (low <= high) {
      let mid = Math.floor(low + (high - low + 1) / 2);
      if (chunk.written[mid].start <= section.start) {
        low = mid + 1;
        index = mid;
      } else {
        high = mid - 1;
      }
    }
    chunk.written.splice(index + 1, 0, section);
    if (index === -1 || chunk.written[index].end < section.start)
      index++;
    while (index < chunk.written.length - 1 && chunk.written[index].end >= chunk.written[index + 1].start) {
      chunk.written[index].end = Math.max(chunk.written[index].end, chunk.written[index + 1].end);
      chunk.written.splice(index + 1, 1);
    }
  };
  _createChunk = /* @__PURE__ */ new WeakSet();
  createChunk_fn = function(includesPosition) {
    let start = Math.floor(includesPosition / __privateGet(this, _chunkSize)) * __privateGet(this, _chunkSize);
    let chunk = {
      start,
      data: new Uint8Array(__privateGet(this, _chunkSize)),
      written: [],
      shouldFlush: false
    };
    __privateGet(this, _chunks).push(chunk);
    __privateGet(this, _chunks).sort((a, b) => a.start - b.start);
    return __privateGet(this, _chunks).indexOf(chunk);
  };
  _flushChunks = /* @__PURE__ */ new WeakSet();
  flushChunks_fn = function(force = false) {
    var _a, _b;
    for (let i = 0; i < __privateGet(this, _chunks).length; i++) {
      let chunk = __privateGet(this, _chunks)[i];
      if (!chunk.shouldFlush && !force)
        continue;
      for (let section of chunk.written) {
        (_b = (_a = __privateGet(this, _target3).options).onData) == null ? void 0 : _b.call(
          _a,
          chunk.data.subarray(section.start, section.end),
          chunk.start + section.start
        );
      }
      __privateGet(this, _chunks).splice(i--, 1);
    }
  };
  var FileSystemWritableFileStreamTargetWriter = class extends ChunkedStreamTargetWriter {
    constructor(target) {
      var _a;
      super(new StreamTarget({
        onData: (data, position) => target.stream.write({
          type: "write",
          data,
          position
        }),
        chunkSize: (_a = target.options) == null ? void 0 : _a.chunkSize
      }));
    }
  };
  var GLOBAL_TIMESCALE = 1e3;
  var SUPPORTED_VIDEO_CODECS2 = ["avc", "hevc", "vp9", "av1"];
  var SUPPORTED_AUDIO_CODECS2 = ["aac", "opus"];
  var TIMESTAMP_OFFSET = 2082844800;
  var FIRST_TIMESTAMP_BEHAVIORS = ["strict", "offset", "cross-track-offset"];
  var _options, _writer, _ftypSize, _mdat, _videoTrack, _audioTrack, _creationTime, _finalizedChunks, _nextFragmentNumber, _videoSampleQueue, _audioSampleQueue, _finalized, _validateOptions, validateOptions_fn, _writeHeader, writeHeader_fn, _computeMoovSizeUpperBound, computeMoovSizeUpperBound_fn, _prepareTracks, prepareTracks_fn, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn, _createSampleForTrack, createSampleForTrack_fn, _addSampleToTrack, addSampleToTrack_fn, _validateTimestamp, validateTimestamp_fn, _finalizeCurrentChunk, finalizeCurrentChunk_fn, _finalizeFragment, finalizeFragment_fn, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn, _ensureNotFinalized, ensureNotFinalized_fn;
  var Muxer = class {
    constructor(options) {
      var _a;
      __privateAdd(this, _validateOptions);
      __privateAdd(this, _writeHeader);
      __privateAdd(this, _computeMoovSizeUpperBound);
      __privateAdd(this, _prepareTracks);
      __privateAdd(this, _generateMpeg4AudioSpecificConfig);
      __privateAdd(this, _createSampleForTrack);
      __privateAdd(this, _addSampleToTrack);
      __privateAdd(this, _validateTimestamp);
      __privateAdd(this, _finalizeCurrentChunk);
      __privateAdd(this, _finalizeFragment);
      __privateAdd(this, _maybeFlushStreamingTargetWriter);
      __privateAdd(this, _ensureNotFinalized);
      __privateAdd(this, _options, void 0);
      __privateAdd(this, _writer, void 0);
      __privateAdd(this, _ftypSize, void 0);
      __privateAdd(this, _mdat, void 0);
      __privateAdd(this, _videoTrack, null);
      __privateAdd(this, _audioTrack, null);
      __privateAdd(this, _creationTime, Math.floor(Date.now() / 1e3) + TIMESTAMP_OFFSET);
      __privateAdd(this, _finalizedChunks, []);
      __privateAdd(this, _nextFragmentNumber, 1);
      __privateAdd(this, _videoSampleQueue, []);
      __privateAdd(this, _audioSampleQueue, []);
      __privateAdd(this, _finalized, false);
      __privateMethod(this, _validateOptions, validateOptions_fn).call(this, options);
      options.video = deepClone(options.video);
      options.audio = deepClone(options.audio);
      options.fastStart = deepClone(options.fastStart);
      this.target = options.target;
      __privateSet(this, _options, {
        firstTimestampBehavior: "strict",
        ...options
      });
      if (options.target instanceof ArrayBufferTarget) {
        __privateSet(this, _writer, new ArrayBufferTargetWriter(options.target));
      } else if (options.target instanceof StreamTarget) {
        __privateSet(this, _writer, ((_a = options.target.options) == null ? void 0 : _a.chunked) ? new ChunkedStreamTargetWriter(options.target) : new StreamTargetWriter(options.target));
      } else if (options.target instanceof FileSystemWritableFileStreamTarget) {
        __privateSet(this, _writer, new FileSystemWritableFileStreamTargetWriter(options.target));
      } else {
        throw new Error(`Invalid target: ${options.target}`);
      }
      __privateMethod(this, _prepareTracks, prepareTracks_fn).call(this);
      __privateMethod(this, _writeHeader, writeHeader_fn).call(this);
    }
    addVideoChunk(sample, meta, timestamp, compositionTimeOffset) {
      let data = new Uint8Array(sample.byteLength);
      sample.copyTo(data);
      this.addVideoChunkRaw(
        data,
        sample.type,
        timestamp ?? sample.timestamp,
        sample.duration,
        meta,
        compositionTimeOffset
      );
    }
    addVideoChunkRaw(data, type, timestamp, duration, meta, compositionTimeOffset) {
      __privateMethod(this, _ensureNotFinalized, ensureNotFinalized_fn).call(this);
      if (!__privateGet(this, _options).video)
        throw new Error("No video track declared.");
      if (typeof __privateGet(this, _options).fastStart === "object" && __privateGet(this, _videoTrack).samples.length === __privateGet(this, _options).fastStart.expectedVideoChunks) {
        throw new Error(`Cannot add more video chunks than specified in 'fastStart' (${__privateGet(this, _options).fastStart.expectedVideoChunks}).`);
      }
      let videoSample = __privateMethod(this, _createSampleForTrack, createSampleForTrack_fn).call(this, __privateGet(this, _videoTrack), data, type, timestamp, duration, meta, compositionTimeOffset);
      if (__privateGet(this, _options).fastStart === "fragmented" && __privateGet(this, _audioTrack)) {
        while (__privateGet(this, _audioSampleQueue).length > 0 && __privateGet(this, _audioSampleQueue)[0].decodeTimestamp <= videoSample.decodeTimestamp) {
          let audioSample = __privateGet(this, _audioSampleQueue).shift();
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);
        }
        if (videoSample.decodeTimestamp <= __privateGet(this, _audioTrack).lastDecodeTimestamp) {
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);
        } else {
          __privateGet(this, _videoSampleQueue).push(videoSample);
        }
      } else {
        __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);
      }
    }
    addAudioChunk(sample, meta, timestamp) {
      let data = new Uint8Array(sample.byteLength);
      sample.copyTo(data);
      this.addAudioChunkRaw(data, sample.type, timestamp ?? sample.timestamp, sample.duration, meta);
    }
    addAudioChunkRaw(data, type, timestamp, duration, meta) {
      __privateMethod(this, _ensureNotFinalized, ensureNotFinalized_fn).call(this);
      if (!__privateGet(this, _options).audio)
        throw new Error("No audio track declared.");
      if (typeof __privateGet(this, _options).fastStart === "object" && __privateGet(this, _audioTrack).samples.length === __privateGet(this, _options).fastStart.expectedAudioChunks) {
        throw new Error(`Cannot add more audio chunks than specified in 'fastStart' (${__privateGet(this, _options).fastStart.expectedAudioChunks}).`);
      }
      let audioSample = __privateMethod(this, _createSampleForTrack, createSampleForTrack_fn).call(this, __privateGet(this, _audioTrack), data, type, timestamp, duration, meta);
      if (__privateGet(this, _options).fastStart === "fragmented" && __privateGet(this, _videoTrack)) {
        while (__privateGet(this, _videoSampleQueue).length > 0 && __privateGet(this, _videoSampleQueue)[0].decodeTimestamp <= audioSample.decodeTimestamp) {
          let videoSample = __privateGet(this, _videoSampleQueue).shift();
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);
        }
        if (audioSample.decodeTimestamp <= __privateGet(this, _videoTrack).lastDecodeTimestamp) {
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);
        } else {
          __privateGet(this, _audioSampleQueue).push(audioSample);
        }
      } else {
        __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);
      }
    }
    /** Finalizes the file, making it ready for use. Must be called after all video and audio chunks have been added. */
    finalize() {
      if (__privateGet(this, _finalized)) {
        throw new Error("Cannot finalize a muxer more than once.");
      }
      if (__privateGet(this, _options).fastStart === "fragmented") {
        for (let videoSample of __privateGet(this, _videoSampleQueue))
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _videoTrack), videoSample);
        for (let audioSample of __privateGet(this, _audioSampleQueue))
          __privateMethod(this, _addSampleToTrack, addSampleToTrack_fn).call(this, __privateGet(this, _audioTrack), audioSample);
        __privateMethod(this, _finalizeFragment, finalizeFragment_fn).call(this, false);
      } else {
        if (__privateGet(this, _videoTrack))
          __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, __privateGet(this, _videoTrack));
        if (__privateGet(this, _audioTrack))
          __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, __privateGet(this, _audioTrack));
      }
      let tracks = [__privateGet(this, _videoTrack), __privateGet(this, _audioTrack)].filter(Boolean);
      if (__privateGet(this, _options).fastStart === "in-memory") {
        let mdatSize;
        for (let i = 0; i < 2; i++) {
          let movieBox2 = moov(tracks, __privateGet(this, _creationTime));
          let movieBoxSize = __privateGet(this, _writer).measureBox(movieBox2);
          mdatSize = __privateGet(this, _writer).measureBox(__privateGet(this, _mdat));
          let currentChunkPos = __privateGet(this, _writer).pos + movieBoxSize + mdatSize;
          for (let chunk of __privateGet(this, _finalizedChunks)) {
            chunk.offset = currentChunkPos;
            for (let { data } of chunk.samples) {
              currentChunkPos += data.byteLength;
              mdatSize += data.byteLength;
            }
          }
          if (currentChunkPos < 2 ** 32)
            break;
          if (mdatSize >= 2 ** 32)
            __privateGet(this, _mdat).largeSize = true;
        }
        let movieBox = moov(tracks, __privateGet(this, _creationTime));
        __privateGet(this, _writer).writeBox(movieBox);
        __privateGet(this, _mdat).size = mdatSize;
        __privateGet(this, _writer).writeBox(__privateGet(this, _mdat));
        for (let chunk of __privateGet(this, _finalizedChunks)) {
          for (let sample of chunk.samples) {
            __privateGet(this, _writer).write(sample.data);
            sample.data = null;
          }
        }
      } else if (__privateGet(this, _options).fastStart === "fragmented") {
        let startPos = __privateGet(this, _writer).pos;
        let mfraBox = mfra(tracks);
        __privateGet(this, _writer).writeBox(mfraBox);
        let mfraBoxSize = __privateGet(this, _writer).pos - startPos;
        __privateGet(this, _writer).seek(__privateGet(this, _writer).pos - 4);
        __privateGet(this, _writer).writeU32(mfraBoxSize);
      } else {
        let mdatPos = __privateGet(this, _writer).offsets.get(__privateGet(this, _mdat));
        let mdatSize = __privateGet(this, _writer).pos - mdatPos;
        __privateGet(this, _mdat).size = mdatSize;
        __privateGet(this, _mdat).largeSize = mdatSize >= 2 ** 32;
        __privateGet(this, _writer).patchBox(__privateGet(this, _mdat));
        let movieBox = moov(tracks, __privateGet(this, _creationTime));
        if (typeof __privateGet(this, _options).fastStart === "object") {
          __privateGet(this, _writer).seek(__privateGet(this, _ftypSize));
          __privateGet(this, _writer).writeBox(movieBox);
          let remainingBytes = mdatPos - __privateGet(this, _writer).pos;
          __privateGet(this, _writer).writeBox(free(remainingBytes));
        } else {
          __privateGet(this, _writer).writeBox(movieBox);
        }
      }
      __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);
      __privateGet(this, _writer).finalize();
      __privateSet(this, _finalized, true);
    }
  };
  _options = /* @__PURE__ */ new WeakMap();
  _writer = /* @__PURE__ */ new WeakMap();
  _ftypSize = /* @__PURE__ */ new WeakMap();
  _mdat = /* @__PURE__ */ new WeakMap();
  _videoTrack = /* @__PURE__ */ new WeakMap();
  _audioTrack = /* @__PURE__ */ new WeakMap();
  _creationTime = /* @__PURE__ */ new WeakMap();
  _finalizedChunks = /* @__PURE__ */ new WeakMap();
  _nextFragmentNumber = /* @__PURE__ */ new WeakMap();
  _videoSampleQueue = /* @__PURE__ */ new WeakMap();
  _audioSampleQueue = /* @__PURE__ */ new WeakMap();
  _finalized = /* @__PURE__ */ new WeakMap();
  _validateOptions = /* @__PURE__ */ new WeakSet();
  validateOptions_fn = function(options) {
    if (options.video) {
      if (!SUPPORTED_VIDEO_CODECS2.includes(options.video.codec)) {
        throw new Error(`Unsupported video codec: ${options.video.codec}`);
      }
      const videoRotation = options.video.rotation;
      if (typeof videoRotation === "number" && ![0, 90, 180, 270].includes(videoRotation)) {
        throw new Error(`Invalid video rotation: ${videoRotation}. Has to be 0, 90, 180 or 270.`);
      } else if (Array.isArray(videoRotation) && (videoRotation.length !== 9 || videoRotation.some((value) => typeof value !== "number"))) {
        throw new Error(`Invalid video transformation matrix: ${videoRotation.join()}`);
      }
    }
    if (options.audio && !SUPPORTED_AUDIO_CODECS2.includes(options.audio.codec)) {
      throw new Error(`Unsupported audio codec: ${options.audio.codec}`);
    }
    if (options.firstTimestampBehavior && !FIRST_TIMESTAMP_BEHAVIORS.includes(options.firstTimestampBehavior)) {
      throw new Error(`Invalid first timestamp behavior: ${options.firstTimestampBehavior}`);
    }
    if (typeof options.fastStart === "object") {
      if (options.video && options.fastStart.expectedVideoChunks === void 0) {
        throw new Error(`'fastStart' is an object but is missing property 'expectedVideoChunks'.`);
      }
      if (options.audio && options.fastStart.expectedAudioChunks === void 0) {
        throw new Error(`'fastStart' is an object but is missing property 'expectedAudioChunks'.`);
      }
    } else if (![false, "in-memory", "fragmented"].includes(options.fastStart)) {
      throw new Error(`'fastStart' option must be false, 'in-memory', 'fragmented' or an object.`);
    }
  };
  _writeHeader = /* @__PURE__ */ new WeakSet();
  writeHeader_fn = function() {
    var _a;
    __privateGet(this, _writer).writeBox(ftyp({
      holdsAvc: ((_a = __privateGet(this, _options).video) == null ? void 0 : _a.codec) === "avc",
      fragmented: __privateGet(this, _options).fastStart === "fragmented"
    }));
    __privateSet(this, _ftypSize, __privateGet(this, _writer).pos);
    if (__privateGet(this, _options).fastStart === "in-memory") {
      __privateSet(this, _mdat, mdat(false));
    } else if (__privateGet(this, _options).fastStart === "fragmented") ;
    else {
      if (typeof __privateGet(this, _options).fastStart === "object") {
        let moovSizeUpperBound = __privateMethod(this, _computeMoovSizeUpperBound, computeMoovSizeUpperBound_fn).call(this);
        __privateGet(this, _writer).seek(__privateGet(this, _writer).pos + moovSizeUpperBound);
      }
      __privateSet(this, _mdat, mdat(true));
      __privateGet(this, _writer).writeBox(__privateGet(this, _mdat));
    }
    __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);
  };
  _computeMoovSizeUpperBound = /* @__PURE__ */ new WeakSet();
  computeMoovSizeUpperBound_fn = function() {
    if (typeof __privateGet(this, _options).fastStart !== "object")
      return;
    let upperBound = 0;
    let sampleCounts = [
      __privateGet(this, _options).fastStart.expectedVideoChunks,
      __privateGet(this, _options).fastStart.expectedAudioChunks
    ];
    for (let n of sampleCounts) {
      if (!n)
        continue;
      upperBound += (4 + 4) * Math.ceil(2 / 3 * n);
      upperBound += 4 * n;
      upperBound += (4 + 4 + 4) * Math.ceil(2 / 3 * n);
      upperBound += 4 * n;
      upperBound += 8 * n;
    }
    upperBound += 4096;
    return upperBound;
  };
  _prepareTracks = /* @__PURE__ */ new WeakSet();
  prepareTracks_fn = function() {
    if (__privateGet(this, _options).video) {
      __privateSet(this, _videoTrack, {
        id: 1,
        info: {
          type: "video",
          codec: __privateGet(this, _options).video.codec,
          width: __privateGet(this, _options).video.width,
          height: __privateGet(this, _options).video.height,
          rotation: __privateGet(this, _options).video.rotation ?? 0,
          decoderConfig: null
        },
        timescale: 11520,
        // Timescale used by FFmpeg, contains many common frame rates as factors
        samples: [],
        finalizedChunks: [],
        currentChunk: null,
        firstDecodeTimestamp: void 0,
        lastDecodeTimestamp: -1,
        timeToSampleTable: [],
        compositionTimeOffsetTable: [],
        lastTimescaleUnits: null,
        lastSample: null,
        compactlyCodedChunkTable: []
      });
    }
    if (__privateGet(this, _options).audio) {
      let guessedCodecPrivate = __privateMethod(this, _generateMpeg4AudioSpecificConfig, generateMpeg4AudioSpecificConfig_fn).call(
        this,
        2,
        // Object type for AAC-LC, since it's the most common
        __privateGet(this, _options).audio.sampleRate,
        __privateGet(this, _options).audio.numberOfChannels
      );
      __privateSet(this, _audioTrack, {
        id: __privateGet(this, _options).video ? 2 : 1,
        info: {
          type: "audio",
          codec: __privateGet(this, _options).audio.codec,
          numberOfChannels: __privateGet(this, _options).audio.numberOfChannels,
          sampleRate: __privateGet(this, _options).audio.sampleRate,
          decoderConfig: {
            codec: __privateGet(this, _options).audio.codec,
            description: guessedCodecPrivate,
            numberOfChannels: __privateGet(this, _options).audio.numberOfChannels,
            sampleRate: __privateGet(this, _options).audio.sampleRate
          }
        },
        timescale: __privateGet(this, _options).audio.sampleRate,
        samples: [],
        finalizedChunks: [],
        currentChunk: null,
        firstDecodeTimestamp: void 0,
        lastDecodeTimestamp: -1,
        timeToSampleTable: [],
        compositionTimeOffsetTable: [],
        lastTimescaleUnits: null,
        lastSample: null,
        compactlyCodedChunkTable: []
      });
    }
  };
  _generateMpeg4AudioSpecificConfig = /* @__PURE__ */ new WeakSet();
  generateMpeg4AudioSpecificConfig_fn = function(objectType, sampleRate, numberOfChannels) {
    let frequencyIndices = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
    let frequencyIndex = frequencyIndices.indexOf(sampleRate);
    let channelConfig = numberOfChannels;
    let configBits = "";
    configBits += objectType.toString(2).padStart(5, "0");
    configBits += frequencyIndex.toString(2).padStart(4, "0");
    if (frequencyIndex === 15)
      configBits += sampleRate.toString(2).padStart(24, "0");
    configBits += channelConfig.toString(2).padStart(4, "0");
    let paddingLength = Math.ceil(configBits.length / 8) * 8;
    configBits = configBits.padEnd(paddingLength, "0");
    let configBytes = new Uint8Array(configBits.length / 8);
    for (let i = 0; i < configBits.length; i += 8) {
      configBytes[i / 8] = parseInt(configBits.slice(i, i + 8), 2);
    }
    return configBytes;
  };
  _createSampleForTrack = /* @__PURE__ */ new WeakSet();
  createSampleForTrack_fn = function(track, data, type, timestamp, duration, meta, compositionTimeOffset) {
    let presentationTimestampInSeconds = timestamp / 1e6;
    let decodeTimestampInSeconds = (timestamp - (compositionTimeOffset ?? 0)) / 1e6;
    let durationInSeconds = duration / 1e6;
    let adjusted = __privateMethod(this, _validateTimestamp, validateTimestamp_fn).call(this, presentationTimestampInSeconds, decodeTimestampInSeconds, track);
    presentationTimestampInSeconds = adjusted.presentationTimestamp;
    decodeTimestampInSeconds = adjusted.decodeTimestamp;
    if (meta == null ? void 0 : meta.decoderConfig) {
      if (track.info.decoderConfig === null) {
        track.info.decoderConfig = meta.decoderConfig;
      } else {
        Object.assign(track.info.decoderConfig, meta.decoderConfig);
      }
    }
    let sample = {
      presentationTimestamp: presentationTimestampInSeconds,
      decodeTimestamp: decodeTimestampInSeconds,
      duration: durationInSeconds,
      data,
      size: data.byteLength,
      type,
      // Will be refined once the next sample comes in
      timescaleUnitsToNextSample: intoTimescale(durationInSeconds, track.timescale)
    };
    return sample;
  };
  _addSampleToTrack = /* @__PURE__ */ new WeakSet();
  addSampleToTrack_fn = function(track, sample) {
    if (__privateGet(this, _options).fastStart !== "fragmented") {
      track.samples.push(sample);
    }
    const sampleCompositionTimeOffset = intoTimescale(sample.presentationTimestamp - sample.decodeTimestamp, track.timescale);
    if (track.lastTimescaleUnits !== null) {
      let timescaleUnits = intoTimescale(sample.decodeTimestamp, track.timescale, false);
      let delta = Math.round(timescaleUnits - track.lastTimescaleUnits);
      track.lastTimescaleUnits += delta;
      track.lastSample.timescaleUnitsToNextSample = delta;
      if (__privateGet(this, _options).fastStart !== "fragmented") {
        let lastTableEntry = last(track.timeToSampleTable);
        if (lastTableEntry.sampleCount === 1) {
          lastTableEntry.sampleDelta = delta;
          lastTableEntry.sampleCount++;
        } else if (lastTableEntry.sampleDelta === delta) {
          lastTableEntry.sampleCount++;
        } else {
          lastTableEntry.sampleCount--;
          track.timeToSampleTable.push({
            sampleCount: 2,
            sampleDelta: delta
          });
        }
        const lastCompositionTimeOffsetTableEntry = last(track.compositionTimeOffsetTable);
        if (lastCompositionTimeOffsetTableEntry.sampleCompositionTimeOffset === sampleCompositionTimeOffset) {
          lastCompositionTimeOffsetTableEntry.sampleCount++;
        } else {
          track.compositionTimeOffsetTable.push({
            sampleCount: 1,
            sampleCompositionTimeOffset
          });
        }
      }
    } else {
      track.lastTimescaleUnits = 0;
      if (__privateGet(this, _options).fastStart !== "fragmented") {
        track.timeToSampleTable.push({
          sampleCount: 1,
          sampleDelta: intoTimescale(sample.duration, track.timescale)
        });
        track.compositionTimeOffsetTable.push({
          sampleCount: 1,
          sampleCompositionTimeOffset
        });
      }
    }
    track.lastSample = sample;
    let beginNewChunk = false;
    if (!track.currentChunk) {
      beginNewChunk = true;
    } else {
      let currentChunkDuration = sample.presentationTimestamp - track.currentChunk.startTimestamp;
      if (__privateGet(this, _options).fastStart === "fragmented") {
        let mostImportantTrack = __privateGet(this, _videoTrack) ?? __privateGet(this, _audioTrack);
        if (track === mostImportantTrack && sample.type === "key" && currentChunkDuration >= 1) {
          beginNewChunk = true;
          __privateMethod(this, _finalizeFragment, finalizeFragment_fn).call(this);
        }
      } else {
        beginNewChunk = currentChunkDuration >= 0.5;
      }
    }
    if (beginNewChunk) {
      if (track.currentChunk) {
        __privateMethod(this, _finalizeCurrentChunk, finalizeCurrentChunk_fn).call(this, track);
      }
      track.currentChunk = {
        startTimestamp: sample.presentationTimestamp,
        samples: []
      };
    }
    track.currentChunk.samples.push(sample);
  };
  _validateTimestamp = /* @__PURE__ */ new WeakSet();
  validateTimestamp_fn = function(presentationTimestamp, decodeTimestamp, track) {
    var _a, _b;
    const strictTimestampBehavior = __privateGet(this, _options).firstTimestampBehavior === "strict";
    const noLastDecodeTimestamp = track.lastDecodeTimestamp === -1;
    const timestampNonZero = decodeTimestamp !== 0;
    if (strictTimestampBehavior && noLastDecodeTimestamp && timestampNonZero) {
      throw new Error(
        `The first chunk for your media track must have a timestamp of 0 (received DTS=${decodeTimestamp}).Non-zero first timestamps are often caused by directly piping frames or audio data from a MediaStreamTrack into the encoder. Their timestamps are typically relative to the age of thedocument, which is probably what you want.

If you want to offset all timestamps of a track such that the first one is zero, set firstTimestampBehavior: 'offset' in the options.
`
      );
    } else if (__privateGet(this, _options).firstTimestampBehavior === "offset" || __privateGet(this, _options).firstTimestampBehavior === "cross-track-offset") {
      if (track.firstDecodeTimestamp === void 0) {
        track.firstDecodeTimestamp = decodeTimestamp;
      }
      let baseDecodeTimestamp;
      if (__privateGet(this, _options).firstTimestampBehavior === "offset") {
        baseDecodeTimestamp = track.firstDecodeTimestamp;
      } else {
        baseDecodeTimestamp = Math.min(
          ((_a = __privateGet(this, _videoTrack)) == null ? void 0 : _a.firstDecodeTimestamp) ?? Infinity,
          ((_b = __privateGet(this, _audioTrack)) == null ? void 0 : _b.firstDecodeTimestamp) ?? Infinity
        );
      }
      decodeTimestamp -= baseDecodeTimestamp;
      presentationTimestamp -= baseDecodeTimestamp;
    }
    if (decodeTimestamp < track.lastDecodeTimestamp) {
      throw new Error(
        `Timestamps must be monotonically increasing (DTS went from ${track.lastDecodeTimestamp * 1e6} to ${decodeTimestamp * 1e6}).`
      );
    }
    track.lastDecodeTimestamp = decodeTimestamp;
    return { presentationTimestamp, decodeTimestamp };
  };
  _finalizeCurrentChunk = /* @__PURE__ */ new WeakSet();
  finalizeCurrentChunk_fn = function(track) {
    if (__privateGet(this, _options).fastStart === "fragmented") {
      throw new Error("Can't finalize individual chunks 'fastStart' is set to 'fragmented'.");
    }
    if (!track.currentChunk)
      return;
    track.finalizedChunks.push(track.currentChunk);
    __privateGet(this, _finalizedChunks).push(track.currentChunk);
    if (track.compactlyCodedChunkTable.length === 0 || last(track.compactlyCodedChunkTable).samplesPerChunk !== track.currentChunk.samples.length) {
      track.compactlyCodedChunkTable.push({
        firstChunk: track.finalizedChunks.length,
        // 1-indexed
        samplesPerChunk: track.currentChunk.samples.length
      });
    }
    if (__privateGet(this, _options).fastStart === "in-memory") {
      track.currentChunk.offset = 0;
      return;
    }
    track.currentChunk.offset = __privateGet(this, _writer).pos;
    for (let sample of track.currentChunk.samples) {
      __privateGet(this, _writer).write(sample.data);
      sample.data = null;
    }
    __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);
  };
  _finalizeFragment = /* @__PURE__ */ new WeakSet();
  finalizeFragment_fn = function(flushStreamingWriter = true) {
    if (__privateGet(this, _options).fastStart !== "fragmented") {
      throw new Error("Can't finalize a fragment unless 'fastStart' is set to 'fragmented'.");
    }
    let tracks = [__privateGet(this, _videoTrack), __privateGet(this, _audioTrack)].filter((track) => track && track.currentChunk);
    if (tracks.length === 0)
      return;
    let fragmentNumber = __privateWrapper(this, _nextFragmentNumber)._++;
    if (fragmentNumber === 1) {
      let movieBox = moov(tracks, __privateGet(this, _creationTime), true);
      __privateGet(this, _writer).writeBox(movieBox);
    }
    let moofOffset = __privateGet(this, _writer).pos;
    let moofBox = moof(fragmentNumber, tracks);
    __privateGet(this, _writer).writeBox(moofBox);
    {
      let mdatBox = mdat(false);
      let totalTrackSampleSize = 0;
      for (let track of tracks) {
        for (let sample of track.currentChunk.samples) {
          totalTrackSampleSize += sample.size;
        }
      }
      let mdatSize = __privateGet(this, _writer).measureBox(mdatBox) + totalTrackSampleSize;
      if (mdatSize >= 2 ** 32) {
        mdatBox.largeSize = true;
        mdatSize = __privateGet(this, _writer).measureBox(mdatBox) + totalTrackSampleSize;
      }
      mdatBox.size = mdatSize;
      __privateGet(this, _writer).writeBox(mdatBox);
    }
    for (let track of tracks) {
      track.currentChunk.offset = __privateGet(this, _writer).pos;
      track.currentChunk.moofOffset = moofOffset;
      for (let sample of track.currentChunk.samples) {
        __privateGet(this, _writer).write(sample.data);
        sample.data = null;
      }
    }
    let endPos = __privateGet(this, _writer).pos;
    __privateGet(this, _writer).seek(__privateGet(this, _writer).offsets.get(moofBox));
    let newMoofBox = moof(fragmentNumber, tracks);
    __privateGet(this, _writer).writeBox(newMoofBox);
    __privateGet(this, _writer).seek(endPos);
    for (let track of tracks) {
      track.finalizedChunks.push(track.currentChunk);
      __privateGet(this, _finalizedChunks).push(track.currentChunk);
      track.currentChunk = null;
    }
    if (flushStreamingWriter) {
      __privateMethod(this, _maybeFlushStreamingTargetWriter, maybeFlushStreamingTargetWriter_fn).call(this);
    }
  };
  _maybeFlushStreamingTargetWriter = /* @__PURE__ */ new WeakSet();
  maybeFlushStreamingTargetWriter_fn = function() {
    if (__privateGet(this, _writer) instanceof StreamTargetWriter) {
      __privateGet(this, _writer).flush();
    }
  };
  _ensureNotFinalized = /* @__PURE__ */ new WeakSet();
  ensureNotFinalized_fn = function() {
    if (__privateGet(this, _finalized)) {
      throw new Error("Cannot add new video or audio chunks after the file has been finalized.");
    }
  };
  async function mp4(frames, convertMeta) {
    const p = frames.map((frame) => {
      if (frame instanceof Blob) {
        return createImageBitmap(frame);
      } else {
        return frame;
      }
    });
    const bitmaps = await Promise.all(p);
    if (convertMeta.isAborted) throw new CancelError();
    let width = bitmaps[0].width;
    let height = bitmaps[0].height;
    if (width % 2 !== 0) width += 1;
    if (height % 2 !== 0) height += 1;
    const muxer = new Muxer({
      target: new ArrayBufferTarget(),
      video: {
        codec: "avc",
        width,
        height
      },
      fastStart: "in-memory"
    });
    const videoEncoder = new VideoEncoder({
      output: (chunk, meta) => muxer.addVideoChunk(chunk, meta),
      error: (e) => logger.error(e)
    });
    videoEncoder.configure({
      codec: "avc1.420034",
      width,
      height,
      bitrate: config.get("mp4Bitrate") * 1e6
    });
    const delays = convertMeta.source.delays.map((delay) => delay *= 1e3);
    let timestamp = 0;
    const videoFrames = [];
    for (let i = 0; i < bitmaps.length; i++) {
      const frame = new VideoFrame(bitmaps[i], { duration: delays[i], timestamp });
      videoFrames.push(frame);
      bitmaps[i].close();
      videoEncoder.encode(frame);
      timestamp += delays[i];
    }
    await videoEncoder.flush();
    if (convertMeta.isAborted) {
      videoFrames.forEach((frame) => frame.close());
      throw new CancelError();
    }
    muxer.finalize();
    const { buffer } = muxer.target;
    videoFrames.forEach((frame) => frame.close());
    return new Blob([buffer], { type: "video/mp4" });
  }
  const adapter = {
    gif,
    png,
    webp,
    webm,
    mp4
  };
  const convertAdapter = {
    getAdapter(format) {
      return adapter[format];
    },
    getMixEffectFn() {
      return mixPngEffect;
    }
  };
  function createConverter() {
    const MAX_CONVERT = 2;
    const framesData = {};
    let isStop = false;
    let queue = [];
    let active2 = [];
    const isConvertSource = (meta) => {
      return Array.isArray(meta.source.data) && meta.source.data[0] instanceof Blob;
    };
    const doConvert = (convertMeta) => {
      var _a;
      const { id, format, resolve, reject } = convertMeta;
      active2.push(convertMeta);
      (_a = convertMeta.onProgress) == null ? void 0 : _a.call(convertMeta, 0);
      const adapter2 = convertAdapter.getAdapter(format);
      if (!isConvertSource(convertMeta)) {
        const mixEffect = convertAdapter.getMixEffectFn();
        mixEffect(convertMeta).then(({ bitmaps, frames, delays, width, height }) => {
          const meta = {
            ...convertMeta,
            source: {
              id,
              data: bitmaps,
              delays
            }
          };
          return Promise.all([adapter2(meta.source.data, meta), frames, delays, width, height]);
        }).then(([blob, frames, delays, width, height]) => {
          resolve({ blob, frames, delays, width, height });
        }, reject).finally(() => {
          active2.splice(active2.indexOf(convertMeta), 1);
          if (queue.length) doConvert(queue.shift());
        });
      } else {
        delete framesData[id];
        adapter2(convertMeta.source.data, convertMeta).then(resolve, reject).finally(() => {
          active2.splice(active2.indexOf(convertMeta), 1);
          if (queue.length) doConvert(queue.shift());
        });
      }
    };
    return {
      del: (taskIds) => {
        if (typeof taskIds === "string") taskIds = [taskIds];
        if (!taskIds.length) return;
        logger.info(
          "Converter del, active:",
          active2.map((meta) => meta.id),
          "queue:",
          queue.map((meta) => meta.id)
        );
        isStop = true;
        taskIds.forEach((taskId) => {
          if (taskId in framesData) delete framesData[taskId];
        });
        active2 = active2.filter((convertMeta) => {
          if (taskIds.includes(convertMeta.id)) {
            convertMeta.abort();
          } else {
            return true;
          }
        });
        queue = queue.filter((convertMeta) => !taskIds.includes(convertMeta.id));
        isStop = false;
        while (active2.length < MAX_CONVERT && queue.length) {
          doConvert(queue.shift());
        }
      },
      addFrame(taskId, data, delay, order) {
        if (!(taskId in framesData)) {
          framesData[taskId] = {
            id: taskId,
            data: [],
            delays: []
          };
        }
        if (order === void 0) {
          const length = framesData[taskId].data.length;
          framesData[taskId]["data"][length] = data;
          framesData[taskId]["delays"][length] = delay;
        } else {
          framesData[taskId]["data"][order] = data;
          framesData[taskId]["delays"][order] = delay;
        }
      },
      framesCount(taskId) {
        return taskId in framesData ? framesData[taskId]["delays"].filter((delay) => delay !== void 0).length : 0;
      },
      convert(taskId, format, onProgress) {
        return new Promise((resolve, reject) => {
          const meta = {
            id: taskId,
            format,
            source: framesData[taskId],
            isAborted: false,
            onProgress,
            resolve,
            reject,
            abort() {
              this.isAborted = true;
            }
          };
          logger.info("Converter add", taskId);
          queue.push(meta);
          while (active2.length < MAX_CONVERT && queue.length && !isStop) {
            doConvert(queue.shift());
          }
        });
      },
      async appendPixivEffect(taskId, format, illust, effect, onProgress) {
        return new Promise((resolve, reject) => {
          const meta = {
            id: taskId,
            format,
            source: {
              id: taskId,
              illust,
              data: effect
            },
            isAborted: false,
            onProgress,
            resolve,
            reject,
            abort() {
              this.isAborted = true;
            }
          };
          logger.info("Converter add", taskId);
          queue.push(meta);
          while (active2.length < MAX_CONVERT && queue.length && !isStop) {
            doConvert(queue.shift());
          }
        });
      }
    };
  }
  const converter = createConverter();
  const pixivHooks = {
    download: {
      singleArtworkProgressFactory(btn2, pageCount) {
        if (!btn2 || !pageCount) return;
        return function onSingleArtworkProgress(progress) {
          if (pageCount === 1) {
            btn2.setProgress(progress);
          }
        };
      },
      mulityArtworksProgressFactory(btn2, pageCount) {
        if (!btn2 || !pageCount) return;
        let pageComplete = 0;
        return function onMulityArtworksProgress() {
          if (pageCount < 2) return;
          const progress = Math.floor(++pageComplete / pageCount * 100);
          btn2.setProgress(progress);
        };
      }
    },
    bundle: {
      async beforeFileSave(imgBlob, config2) {
        const { taskId, source } = config2;
        compressor.add(taskId, source.filename, imgBlob);
        if (compressor.fileCount(taskId) === source.pageCount) {
          let comment;
          if ("ugoiraMeta" in config2.source) {
            const delays = config2.source.ugoiraMeta.frames.map((frames) => frames.delay);
            comment = JSON.stringify(delays);
          }
          const zipData = await compressor.bundle(taskId, comment);
          compressor.remove(taskId);
          return zipData;
        }
      },
      onError(err, config2) {
        compressor.remove(config2.taskId);
      },
      onAbort(config2) {
        compressor.remove(config2.taskId);
      }
    },
    convert: {
      convertProgressFactory(btn2) {
        return function onConvertProgress(progress) {
          if (progress > 0) {
            btn2.setProgress(progress, false);
          } else {
            btn2.setStatus(ThumbnailBtnStatus.Loading);
          }
        };
      },
      beforeFileSaveFactory(btn2) {
        const onProgress = btn2 ? this.convertProgressFactory(btn2) : void 0;
        return async function beforeFileSave(imgBlob, config2) {
          const { taskId, source } = config2;
          if (source.illustType === IllustType.ugoira) {
            converter.addFrame(
              taskId,
              imgBlob,
              source.ugoiraMeta.frames[source.order]["delay"],
              source.order
            );
            if (converter.framesCount(taskId) === source.pageCount) {
              return await converter.convert(taskId, source.extendName, onProgress);
            }
          }
        };
      },
      mixGlowEffect(btn2) {
        const onProgress = btn2 ? this.convertProgressFactory(btn2) : void 0;
        return async function beforeFileSave(imgBlob, pixivConfig) {
          const effectId = "pixivGlow2024";
          const url2 = "https://source.pixiv.net/special/seasonal-effect-tag/pixiv-glow-2024/effect.png";
          const { taskId } = pixivConfig;
          const effectData = await historyDb.getImageEffect(effectId);
          if (effectData && effectData.data[0] instanceof ArrayBuffer) {
            const { data, delays, width, height } = effectData;
            const { blob } = await converter.appendPixivEffect(
              taskId,
              pixivConfig.source.extendName,
              imgBlob,
              { frames: data, delays, width, height },
              onProgress
            );
            return blob;
          } else {
            const effctBlob = await new Promise((resolve, reject) => {
              _GM_xmlhttpRequest({
                url: url2,
                headers: {
                  referer: "https://www.pixiv.net"
                },
                responseType: "blob",
                onload(e) {
                  resolve(e.response);
                },
                onerror: reject,
                ontimeout: () => reject(new Error("Timeout"))
              });
            });
            const { blob, frames, delays, width, height } = await converter.appendPixivEffect(
              taskId,
              pixivConfig.source.extendName,
              imgBlob,
              effctBlob,
              onProgress
            );
            historyDb.addImageEffect({
              id: effectId,
              data: frames,
              delays,
              width,
              height
            });
            return blob;
          }
        };
      },
      onError(err, config2) {
        converter.del(config2.taskId);
      },
      onAbort(config2) {
        converter.del(config2.taskId);
      }
    }
  };
  const downloaderHooks = {
    getHooks(meta, downloadType, button) {
      switch (downloadType) {
        case "download":
          return {
            onProgress: pixivHooks.download.singleArtworkProgressFactory(button, meta.pageCount),
            onFileSaved: pixivHooks.download.mulityArtworksProgressFactory(button, meta.pageCount)
          };
        case "bundle":
          return {
            onXhrLoaded: pixivHooks.download.mulityArtworksProgressFactory(button, meta.pageCount),
            beforeFileSave: pixivHooks.bundle.beforeFileSave,
            onError: pixivHooks.bundle.onError
          };
        case "convert":
          return {
            onXhrLoaded: pixivHooks.download.mulityArtworksProgressFactory(button, meta.pageCount),
            beforeFileSave: pixivHooks.convert.beforeFileSaveFactory(button),
            onError: pixivHooks.convert.onError
          };
        case "mixEffect":
          return {
            onProgress: pixivHooks.download.singleArtworkProgressFactory(button, meta.pageCount),
            beforeFileSave: pixivHooks.convert.mixGlowEffect(button),
            onError: pixivHooks.convert.onError
          };
      }
    }
  };
  class PixivDownloadConfig extends DownloadConfigBuilder {
    constructor(meta) {
      super(meta);
      __publicField(this, "downloadAll", true);
      __publicField(this, "headers", {
        referer: "https://www.pixiv.net"
      });
      __publicField(this, "timeout", 6e4);
      __publicField(this, "getImgSrc", () => "");
      this.meta = meta;
      this.getImgSrc = this.meta.illustType === IllustType.ugoira ? (page) => this.meta.src.replace("ugoira0", "ugoira" + page) : (page) => this.meta.src.replace("_p0", "_p" + page);
    }
    getConvertFormat() {
      return config.get("ugoiraFormat");
    }
    getMixEffectFormat() {
      const format = this.getConvertFormat();
      if (format === "zip") return UgoiraFormat.WEBM;
      return format;
    }
    needConvert() {
      return this.meta.illustType === IllustType.ugoira && config.get("ugoiraFormat") !== "zip";
    }
    needBundle() {
      const { pageCount, illustType } = this.meta;
      return this.downloadAll && (illustType === IllustType.ugoira && this.getConvertFormat() === "zip" || pageCount > 1 && (illustType === IllustType.manga && config.get("bundleManga") || illustType === IllustType.illusts && config.get("bundleIllusts")));
    }
    useTranslatedTags() {
      return config.get("tagLang") !== "ja";
    }
    supportSubpath() {
      return this.isBrowserApi() || this.isFsaEnable();
    }
    buildPattern(pattern, page) {
      const { id, userId, artist, title, tags, tagsTranslated, createDate, pageCount } = this.meta;
      const currPage = page === void 0 ? pageCount : page;
      const useTags = this.useTranslatedTags() ? tagsTranslated : tags;
      const fArtist = this.normalizeString(artist) || userId;
      const fTitle = this.normalizeString(title) || id;
      const fTags = this.normalizeString(useTags.join("_"));
      const replaceDate = (match, p1) => {
        const format = p1 || "YYYY-MM-DD";
        return dayjs(createDate).format(format);
      };
      return pattern.replaceAll(/\{date\((.*?)\)\}|\{date\}/g, replaceDate).replaceAll("{artist}", fArtist).replaceAll("{artistID}", userId).replaceAll("{title}", fTitle).replaceAll("{tags}", fTags).replaceAll("{page}", String(currPage)).replaceAll("{id}", id);
    }
    getDownloadConfig(btn2) {
      const { illustType, src, id, pageCount, extendName } = this.meta;
      const pageAttr = btn2 == null ? void 0 : btn2.dataset.page;
      const downloadPage = pageAttr ? Number(pageAttr) : void 0;
      if (downloadPage && (downloadPage > pageCount - 1 || downloadPage < 0))
        throw new Error("Invalid downloadPage.");
      if (downloadPage !== void 0) this.downloadAll = false;
      const taskId = id + "_" + Math.random().toString(36).slice(2);
      const headers = this.headers;
      const supportSubPath = this.supportSubpath();
      const downloadConfigs = [];
      if ((pageCount === 1 || downloadPage !== void 0) && illustType !== IllustType.ugoira) {
        const imgSrc = downloadPage ? this.getImgSrc(downloadPage) : src;
        let path;
        let hooks;
        let source;
        if (config.get("mixEffect") && btn2) {
          const effectExt = this.getMixEffectFormat();
          const pathPatternNoExt = supportSubPath ? this.getFullpathPattern().slice(0, -4) : this.getFilenamePattern();
          const pathPattern = pathPatternNoExt + "." + effectExt;
          path = this.buildPattern(pathPattern, downloadPage ? downloadPage : 0);
          const filename = path.slice(path.lastIndexOf("/") + 1);
          hooks = downloaderHooks.getHooks({ ...this.meta, pageCount: 1 }, "mixEffect", btn2);
          source = {
            ...this.meta,
            pageCount: 1,
            extendName: effectExt,
            filename,
            order: downloadPage ?? 0
          };
        } else {
          const pathPattern = supportSubPath ? this.getFullpathPattern() : this.getFilenamePattern() + "." + extendName;
          path = this.buildPattern(pathPattern, downloadPage ? downloadPage : 0);
          const filename = path.slice(path.lastIndexOf("/") + 1);
          hooks = downloaderHooks.getHooks({ ...this.meta, pageCount: 1 }, "download", btn2);
          source = {
            ...this.meta,
            pageCount: 1,
            filename,
            order: downloadPage ?? 0
          };
        }
        const downloadConfig = {
          taskId,
          src: imgSrc,
          path,
          source,
          headers,
          timeout: this.timeout,
          ...hooks
        };
        downloadConfigs.push(downloadConfig);
      } else {
        const pathPatternNoExt = supportSubPath ? this.getFullpathPattern().slice(0, -4) : this.getFilenamePattern();
        if (this.needBundle()) {
          const pathPattern = pathPatternNoExt + ".zip";
          const filenamePattern = this.getFilenamePattern().includes("{page}") ? this.getFilenamePattern() + "." + extendName : this.getFilenamePattern() + "_{page}." + extendName;
          let path;
          let imgCount;
          if (illustType === IllustType.ugoira) {
            path = this.buildPattern(pathPattern, 0);
            imgCount = this.meta.ugoiraMeta.frames.length;
          } else {
            path = this.buildPattern(pathPattern);
            imgCount = pageCount;
          }
          const hooks = downloaderHooks.getHooks(
            { ...this.meta, pageCount: imgCount },
            "bundle",
            btn2
          );
          for (let page = 0; page < imgCount; page++) {
            const filename = this.buildPattern(filenamePattern, page);
            const imgSrc = this.getImgSrc(page);
            const source = {
              ...this.meta,
              pageCount: imgCount,
              extendName: "zip",
              filename,
              order: page
            };
            const downloadConfig = {
              taskId,
              src: imgSrc,
              path,
              source,
              headers,
              timeout: this.timeout,
              ...hooks
            };
            downloadConfigs.push(downloadConfig);
          }
        } else if (this.needConvert()) {
          const ext = this.getConvertFormat();
          const pathPattern = pathPatternNoExt + "." + ext;
          const path = this.buildPattern(pathPattern, 0);
          const filename = path.slice(path.lastIndexOf("/") + 1);
          const imgCount = this.meta.ugoiraMeta.frames.length;
          const hooks = downloaderHooks.getHooks(
            { ...this.meta, pageCount: imgCount },
            "convert",
            btn2
          );
          for (let page = 0; page < imgCount; page++) {
            const imgSrc = this.getImgSrc(page);
            const source = {
              ...this.meta,
              pageCount: imgCount,
              extendName: ext,
              filename,
              order: page
            };
            const downloadConfig = {
              taskId,
              src: imgSrc,
              path,
              source,
              headers,
              timeout: this.timeout,
              ...hooks
            };
            downloadConfigs.push(downloadConfig);
          }
        } else {
          const pathPattern = pathPatternNoExt + "." + extendName;
          const hooks = downloaderHooks.getHooks(this.meta, "download", btn2);
          for (let page = 0; page < pageCount; page++) {
            const path = this.buildPattern(pathPattern, page);
            const filename = path.slice(path.lastIndexOf("/") + 1);
            const imgSrc = this.getImgSrc(page);
            const source = {
              ...this.meta,
              filename,
              order: page
            };
            const downloadConfig = {
              taskId,
              src: imgSrc,
              path,
              source,
              headers,
              timeout: this.timeout,
              ...hooks
            };
            downloadConfigs.push(downloadConfig);
          }
        }
      }
      !this.downloadAll && (this.downloadAll = true);
      return downloadConfigs;
    }
  }
  async function downloadArtwork$1(btn2) {
    downloader.dirHandleCheck();
    const { id, page } = btn2.dataset;
    const pixivMeta = await pixivParser.parse(id);
    const { comment, bookmarkData, token, tags, artist, userId, title } = pixivMeta;
    if (!bookmarkData) {
      addBookmark(btn2, id, token, tags);
    }
    const downloadConfigs = new PixivDownloadConfig(pixivMeta).getDownloadConfig(btn2);
    await downloader.download(downloadConfigs);
    const historyData = {
      pid: Number(id),
      user: artist,
      userId: Number(userId),
      title,
      comment,
      tags
    };
    if (page !== void 0) {
      historyData.page = Number(page);
    }
    historyDb.add(historyData);
  }
  function createThumbnailBtn(nodes) {
    let isSelfBookmark = false;
    const inBookmarkPage = regexp.bookmarkPage.exec(location.pathname);
    inBookmarkPage && inBookmarkPage[1] === getSelfId() && (isSelfBookmark = true);
    nodes.forEach((e) => {
      let illustId;
      let type;
      if ((e.childElementCount !== 0 || e.className.includes("_history-item") || e.className.includes("_history-related-item")) && !e.querySelector("pdl-button") && (illustId = getIllustId(e))) {
        if (isSelfBookmark) {
          type = ThumbnailBtnType.PixivMyBookmark;
        } else if (e.className.includes("_history-related-item")) {
          e.style.position = "relative";
          type = ThumbnailBtnType.PixivHistory;
        } else if (e.className.includes("_history-item")) {
          type = ThumbnailBtnType.PixivHistory;
        }
        const btn2 = new ThumbnailButton({
          id: illustId,
          type,
          onClick: downloadArtwork$1
        });
        e.appendChild(btn2);
      }
    });
  }
  function fixPixivPreviewer(nodes) {
    const isPpSearchPage = regexp.searchPage.test(location.pathname);
    if (!isPpSearchPage) return;
    nodes.forEach((node) => {
      const pdlEle = node.querySelector("pdl-button");
      if (!pdlEle) return false;
      pdlEle.remove();
    });
  }
  class TagListButton extends HTMLElement {
    constructor(tagUrl, onClick) {
      super();
      __publicField(this, "btn");
      __publicField(this, "unsubscriber");
      this.tagUrl = tagUrl;
      this.onClick = onClick;
      this.dispatchDownload = this.dispatchDownload.bind(this);
      this.render();
      this.btn = this.shadowRoot.querySelector("button");
    }
    async render() {
      const shadowRoot = this.attachShadow({ mode: "open" });
      addStyleToShadow(shadowRoot);
      shadowRoot.innerHTML = ` 
  <div class=" flex items-center">    
    <hr class="!border-t-0 border-l h-6 ml-4 mr-2" />
    <button class=" h-[38px] w-[38px] btn-icon [&:not([disabled])]:hover:bg-slate-400/30 disabled:cursor-wait disabled:opacity-70">
      <i class="text-sm w-6 fill-current mx-2">
      ${downloadSvg}
      </i>
    </button>
  </div>
  `;
    }
    getTagProps() {
      const url2 = new URL(this.tagUrl);
      const { searchParams, pathname } = url2;
      const extractUrlMatch = regexp.userPageTags.exec(pathname);
      if (!extractUrlMatch) throw new Error(`Could not extract tag props from: ${pathname}`);
      const [, userId, urlCategory, tag] = extractUrlMatch;
      if (!tag) throw new Error(`Could not extract tag from: ${pathname}`);
      let category;
      if (urlCategory === "illustrations" || urlCategory === "artworks") {
        category = "illusts";
      } else {
        category = urlCategory;
      }
      return {
        userId,
        category,
        tag,
        rest: searchParams.get("rest") === "hide" ? "hide" : "show"
      };
    }
    dispatchDownload(evt) {
      evt == null ? void 0 : evt.preventDefault();
      const { userId, category, tag, rest } = this.getTagProps();
      const { batchDownload } = useBatchDownload();
      batchDownload("tagged_artwork", userId, category, tag, rest);
    }
    connectedCallback() {
      const { downloading } = useBatchDownload();
      this.unsubscriber = downloading.subscribe((val) => {
        if (val) {
          this.setAttribute("disabled", "");
        } else {
          this.removeAttribute("disabled");
        }
      });
      this.btn.addEventListener("click", this.dispatchDownload);
      this.onClick && this.btn.addEventListener("click", this.onClick);
    }
    disconnectedCallback() {
      this.unsubscriber();
      this.btn.removeEventListener("click", this.dispatchDownload);
      this.onClick && this.btn.removeEventListener("click", this.onClick);
    }
    static get observedAttributes() {
      return ["disabled"];
    }
    attributeChangedCallback(name, oldValue, newValue) {
      const btn2 = this.shadowRoot.querySelector("button");
      if (typeof newValue === "string") {
        btn2.setAttribute("disabled", "");
      } else {
        btn2.removeAttribute("disabled");
      }
    }
  }
  customElements.define("pdl-tag-list-button", TagListButton);
  function createTagListBtn() {
    var _a;
    const listContainer = document.querySelector('div[style*="position: relative"]');
    if (!listContainer) return;
    const modalRoot = listContainer == null ? void 0 : listContainer.closest('div[role="presentation"], div[class="charcoal-token"]');
    const closeBtn = (_a = modalRoot == null ? void 0 : modalRoot.querySelector("svg")) == null ? void 0 : _a.parentElement;
    const tagElements = listContainer.querySelectorAll(
      'div[style*="position: absolute"] a'
    );
    tagElements.forEach((ele) => {
      if (ele.querySelector("pdl-tag-list-button")) return;
      const btn2 = new TagListButton(ele.href, () => {
        closeBtn == null ? void 0 : closeBtn.click();
      });
      ele.appendChild(btn2);
    });
  }
  function createToolbarBtn(id) {
    const toolbar = document.querySelector("main section section");
    if (!toolbar || toolbar.querySelector("pdl-button")) return;
    const btn2 = new ThumbnailButton({
      id,
      type: ThumbnailBtnType.PixivToolbar,
      onClick: downloadArtwork$1
    });
    const pdlBtnWrap = toolbar.lastElementChild.cloneNode();
    pdlBtnWrap.appendChild(btn2);
    toolbar.appendChild(pdlBtnWrap);
  }
  function createWorkExpanedViewBtn(id) {
    const works = document.querySelectorAll(
      "figure a.gtm-expand-full-size-illust"
    );
    if (works.length < 2) return;
    const containers = Array.from(works).map(
      (node) => node.parentElement.parentElement
    );
    const elementToAppend = Array.from(containers).filter(
      (el) => !el.querySelector("pdl-artwork-button")
    );
    if (!elementToAppend.length) return;
    elementToAppend.forEach((node, idx) => {
      node.appendChild(
        new ArtworkButton({
          id,
          page: idx,
          onClick: downloadArtwork$1
        })
      );
    });
  }
  let observer;
  let btn;
  function createPresentationBtn(id) {
    const containers = document.querySelector("body > [role='presentation'] > div");
    if (!containers) {
      if (observer) {
        observer.disconnect();
        observer = null;
        btn = null;
      }
      return;
    }
    if (containers.querySelector("pdl-button")) return;
    const img = containers.querySelector("div > img");
    if (!img) return;
    const isOriginImg = regexp.originSrcPageNum.exec(img.src);
    if (!isOriginImg) return;
    const [pageNum] = isOriginImg;
    btn = new ThumbnailButton({
      id,
      type: ThumbnailBtnType.PixivPresentation,
      page: Number(pageNum),
      onClick: downloadArtwork$1
    });
    containers.appendChild(btn);
    observer = new MutationObserver((mutationList) => {
      const newImg = mutationList[1]["addedNodes"][0];
      const [pageNum2] = regexp.originSrcPageNum.exec(newImg.src) ?? [];
      if (!pageNum2) return logger.throw("Invalid image element.");
      btn == null ? void 0 : btn.remove();
      btn = new ThumbnailButton({
        id,
        type: ThumbnailBtnType.PixivPresentation,
        page: Number(pageNum2),
        onClick: downloadArtwork$1
      });
      containers.appendChild(btn);
    });
    observer.observe(img.parentElement, { childList: true, subtree: true });
  }
  function createPreviewModalBtn() {
    var _a;
    const illustModalBtn = document.querySelector(
      ".gtm-manga-viewer-preview-modal-open:not(.pdl-listened)"
    );
    const mangaModalBtn = document.querySelector(".gtm-manga-viewer-open-preview:not(.pdl-listened)");
    const mangaViewerModalBtn = (_a = document.querySelectorAll(
      ".gtm-manga-viewer-close-icon:not(.pdl-listened)"
    )) == null ? void 0 : _a[1];
    if (!illustModalBtn && !mangaModalBtn && !mangaViewerModalBtn) return;
    [illustModalBtn, mangaModalBtn, mangaViewerModalBtn].forEach((node) => {
      if (node) {
        node.classList.add("pdl-listened");
        node.addEventListener("click", handleModalClick);
      }
    });
  }
  function handleModalClick() {
    const timer = setInterval(() => {
      logger.info("Start to find modal.");
      const ulList = document.querySelectorAll("ul");
      const previewList = ulList[ulList.length - 1];
      if (getComputedStyle(previewList).display !== "grid") return;
      clearInterval(timer);
      const [, id] = regexp.artworksPage.exec(location.pathname) ?? [];
      previewList.childNodes.forEach((node, idx) => {
        node.style.position = "relative";
        node.appendChild(
          new ThumbnailButton({
            id,
            page: idx,
            onClick: downloadArtwork$1
          })
        );
      });
    }, 300);
  }
  function createMangaViewerBtn(id) {
    const mangaViewerBackBtn = document.querySelector(".gtm-manga-viewer-close-icon");
    if (!mangaViewerBackBtn) return;
    const container = mangaViewerBackBtn.parentElement;
    if (container.querySelector("pdl-button")) return;
    container.appendChild(
      new ThumbnailButton({
        id,
        type: ThumbnailBtnType.PixivMangaViewer,
        onClick: downloadArtwork$1
      })
    );
  }
  class ArtworkTagButton extends HTMLElement {
    constructor(tagElement) {
      super();
      __publicField(this, "ob");
      __publicField(this, "unsubscriber");
      this.tagElement = tagElement;
      this.dispatchDownload = this.dispatchDownload.bind(this);
      this.render();
      this.resetTagStyle();
      this.ob = new MutationObserver(() => {
        this.changeBtnColor();
      });
    }
    // 为了美观
    resetTagStyle() {
      this.tagElement.style.borderTopRightRadius = "0px";
      this.tagElement.style.borderBottomRightRadius = "0px";
    }
    changeBtnColor() {
      const { color, backgroundColor } = getComputedStyle(this.tagElement);
      const btn2 = this.shadowRoot.querySelector("button");
      btn2.style.color = color;
      btn2.style.backgroundColor = backgroundColor;
    }
    async render() {
      const shadowRoot = this.attachShadow({ mode: "open" });
      addStyleToShadow(shadowRoot);
      shadowRoot.innerHTML = `  <button class="flex h-full items-center pr-2 rounded-e-[4px] disabled:cursor-wait disabled:opacity-70">
    <hr class="!border-t-0 border-l h-6 pr-2" />
    <i class="text-sm w-6 fill-current">
      ${downloadSvg}
    </i>
  </button>`;
      this.changeBtnColor();
    }
    getTagProps() {
      const tagTitles = this.tagElement.querySelectorAll("div[title]");
      const tagStr = tagTitles[tagTitles.length - 1].getAttribute("title");
      const tag = tagStr.startsWith("#") ? tagStr.slice(1) : "未分類";
      const url2 = new URL(this.tagElement.href);
      const { searchParams, pathname } = url2;
      const extractUrlMatch = regexp.userPageTags.exec(pathname);
      if (!extractUrlMatch) throw new Error(`Could not extract tag props from: ${pathname}`);
      const [, userId, urlCategory] = extractUrlMatch;
      let category;
      if (urlCategory === "illustrations" || urlCategory === "artworks") {
        category = "illusts";
      } else {
        category = urlCategory;
      }
      return {
        userId,
        category,
        tag,
        rest: searchParams.get("rest") === "hide" ? "hide" : "show"
      };
    }
    dispatchDownload() {
      const { userId, category, tag, rest } = this.getTagProps();
      const { batchDownload } = useBatchDownload();
      batchDownload("tagged_artwork", userId, category, tag, rest);
    }
    connectedCallback() {
      const { downloading } = useBatchDownload();
      this.unsubscriber = downloading.subscribe((val) => {
        if (val) {
          this.setAttribute("disabled", "");
        } else {
          this.removeAttribute("disabled");
        }
      });
      this.addEventListener("click", this.dispatchDownload);
      this.ob.observe(this.tagElement, {
        attributes: true,
        attributeFilter: ["status"]
      });
    }
    disconnectedCallback() {
      this.unsubscriber();
      this.removeEventListener("click", this.dispatchDownload);
      this.ob.disconnect();
    }
    static get observedAttributes() {
      return ["disabled"];
    }
    attributeChangedCallback(name, oldValue, newValue) {
      const btn2 = this.shadowRoot.querySelector("button");
      if (typeof newValue === "string") {
        btn2.setAttribute("disabled", "");
      } else {
        btn2.removeAttribute("disabled");
      }
    }
  }
  customElements.define("pdl-artwork-tag", ArtworkTagButton);
  function createFrequentTagBtn() {
    const tagsEles = Array.from(document.querySelectorAll("a[status]"));
    if (!tagsEles.length) return;
    tagsEles.forEach((ele) => {
      var _a;
      if (((_a = ele.nextElementSibling) == null ? void 0 : _a.tagName) === "PDL-ARTWORK-TAG") return;
      const artworkTagBtn = new ArtworkTagButton(ele);
      ele.parentElement.appendChild(artworkTagBtn);
    });
  }
  function pageActions() {
    const pathname = location.pathname;
    let param;
    switch (true) {
      case !!(param = regexp.artworksPage.exec(pathname)): {
        const id = param[1];
        createToolbarBtn(id);
        createWorkExpanedViewBtn(id);
        createPresentationBtn(id);
        createPreviewModalBtn();
        createMangaViewerBtn(id);
        break;
      }
      case regexp.userPageTags.test(pathname): {
        createFrequentTagBtn();
        createTagListBtn();
        break;
      }
      case regexp.historyPage.test(pathname): {
        createThumbnailBtn(document.querySelectorAll("span[style]._history-item"));
        break;
      }
    }
  }
  let firstRunFlag = true;
  function observerCallback(records) {
    const addedNodes = [];
    records.forEach((record) => {
      if (!record.addedNodes.length) return;
      record.addedNodes.forEach((node) => {
        if (node.nodeType === Node.ELEMENT_NODE && node.tagName !== "PDL-BUTTON" && node.tagName !== "IMG") {
          addedNodes.push(node);
        }
      });
    });
    if (!addedNodes.length) return;
    if (firstRunFlag) {
      createThumbnailBtn(document.querySelectorAll("a"));
      firstRunFlag = false;
    } else {
      fixPixivPreviewer(addedNodes);
      const thumbnails = addedNodes.reduce((prev, current) => {
        return prev.concat(
          current instanceof HTMLAnchorElement ? [current] : Array.from(current.querySelectorAll("a"))
        );
      }, []);
      createThumbnailBtn(thumbnails);
    }
    pageActions();
  }
  class Pixiv extends SiteInject {
    static get hostname() {
      return "www.pixiv.net";
    }
    inject() {
      super.inject();
      new MutationObserver(observerCallback).observe(document.body, {
        childList: true,
        subtree: true
      });
    }
    getCustomConfig() {
      return {
        folderPattern: "pixiv/{artist}",
        filenamePattern: "{artist}_{title}_{id}_p{page}"
      };
    }
    observeColorScheme() {
      const onThemeChange = () => {
        const sitePreferDark = document.documentElement.getAttribute("data-theme");
        if (sitePreferDark === "dark") {
          this.setAppDarkMode();
        } else {
          this.setAppLightMode();
        }
      };
      onThemeChange();
      new MutationObserver(onThemeChange).observe(document.documentElement, {
        attributes: true,
        childList: false,
        subtree: false
      });
    }
    getBatchDownloadConfig() {
      return {
        async avatar(url2) {
          const userIdMatch = regexp.userPage.exec(url2);
          let userId;
          userIdMatch ? userId = userIdMatch[1] || userIdMatch[2] : userId = getSelfId() ?? "";
          if (!userId) return "";
          try {
            const userData = await api.getUserData(userId);
            return userData.imageBig;
          } catch (error) {
            logger.error(error);
            return "";
          }
        },
        filterOption: {
          filters: [
            {
              id: "exclude_downloaded",
              type: "exclude",
              name: t("downloader.category.filter.exclude_downloaded"),
              checked: false,
              fn(meta) {
                return !!meta.id && historyDb.has(meta.id);
              }
            },
            {
              id: "illust",
              type: "include",
              name: t("downloader.category.filter.pixiv_illust"),
              checked: true,
              fn(meta) {
                return meta.illustType === IllustType.illusts;
              }
            },
            {
              id: "manga",
              type: "include",
              name: t("downloader.category.filter.pixiv_manga"),
              checked: true,
              fn(meta) {
                return meta.illustType === IllustType.manga;
              }
            },
            {
              id: "ugoira",
              type: "include",
              name: t("downloader.category.filter.pixiv_ugoira"),
              checked: true,
              fn(meta) {
                return meta.illustType === IllustType.ugoira;
              }
            }
          ],
          enableTagFilter: true,
          filterWhenGenerateIngPage: true
        },
        pageMatch: [
          {
            name: "my_page",
            match(url2) {
              const userIdMatch = regexp.userPage.exec(url2);
              if (!userIdMatch) return false;
              const userId = userIdMatch[1] || userIdMatch[2];
              return userId === getSelfId();
            },
            genPageId: [
              {
                id: "self_bookmark_public",
                name: t("downloader.download_type.pixiv_bookmark_public"),
                fn: (...args) => {
                  return pixivParser.bookmarkGenerator(...args, getSelfId());
                }
              },
              {
                id: "self_bookmark_private",
                name: t("downloader.download_type.pixiv_bookmark_private"),
                fn: (...args) => {
                  return pixivParser.bookmarkGenerator(...args, getSelfId(), "hide");
                }
              }
            ]
          },
          {
            name: "user_page",
            match: regexp.userPage,
            genPageId: [
              {
                id: "works",
                name: t("downloader.download_type.pixiv_works"),
                fn: (...args) => {
                  const userIdMatch = regexp.userPage.exec(location.href);
                  const userId = userIdMatch[1] || userIdMatch[2];
                  return pixivParser.illustMangaGenerator(...args, userId);
                }
              },
              {
                id: "bookmark",
                name: t("downloader.download_type.pixiv_bookmark"),
                fn: (...args) => {
                  const userIdMatch = regexp.userPage.exec(location.href);
                  const userId = userIdMatch[1] || userIdMatch[2];
                  return pixivParser.bookmarkGenerator(...args, userId);
                }
              }
            ]
          },
          {
            name: "follow_latest",
            match: regexp.followLatest,
            genPageId: [
              {
                id: "follow_latest_all",
                name: t("downloader.download_type.pixiv_follow_latest_all"),
                fn: (...args) => {
                  return pixivParser.followLatestGenerator(...args, "all");
                }
              },
              {
                id: "follow_latest_r18",
                name: t("downloader.download_type.pixiv_follow_latest_r18"),
                fn: (...args) => {
                  return pixivParser.followLatestGenerator(...args, "r18");
                }
              }
            ]
          },
          {
            name: "download_specific_tag",
            match: () => false,
            // use for user tag download
            genPageId: [
              {
                id: "tagged_artwork",
                name: "tagged_artwork",
                fn: (pageRange, checkValidity, userId, category, tag, bookmarkRest = "show") => {
                  if (category === "bookmarks") {
                    return pixivParser.taggedArtworkGenerator(
                      pageRange,
                      checkValidity,
                      userId,
                      category,
                      tag,
                      bookmarkRest
                    );
                  } else {
                    return pixivParser.taggedArtworkGenerator(
                      pageRange,
                      checkValidity,
                      userId,
                      category,
                      tag
                    );
                  }
                }
              }
            ]
          }
        ],
        parseMetaByArtworkId(id) {
          return pixivParser.parse(id, true);
        },
        async downloadByArtworkId(meta, taskId) {
          downloader.dirHandleCheck();
          const downloadConfigs = new PixivDownloadConfig(meta).getDownloadConfig();
          downloadConfigs.forEach((config2) => {
            config2.taskId = taskId;
            config2.source.id = taskId;
          });
          await downloader.download(downloadConfigs);
          const { comment, id, tags, artist, userId, title } = meta;
          const historyData = {
            pid: Number(id),
            user: artist,
            userId: Number(userId),
            title,
            comment,
            tags
          };
          historyDb.add(historyData);
          return id;
        },
        onDownloadAbort(taskIds) {
          downloader.abort(taskIds);
        }
      };
    }
  }
  const yandeParser = {
    async parse(id) {
      const res = await fetch("/post/show/" + id);
      if (!res.ok) throw new RequestError(res.url, res.status);
      const html = await res.text();
      const matchImageData = html.match(new RegExp("(?<=Post\\.register_resp\\().+(?=\\);)"));
      if (!matchImageData) throw new Error("Can not parse image data.");
      const imageData = JSON.parse(matchImageData[0]);
      const postData = imageData.posts[0];
      const artists = [];
      const characters = [];
      const tags = [];
      for (const tag in imageData.tags) {
        const tagType = imageData.tags[tag];
        if (tagType === "artist") {
          artists.push(tag);
        } else if (tagType === "character") {
          characters.push(tag);
        }
        tags.push(tagType + ":" + tag);
      }
      postData.source && tags.push("source:" + postData.source);
      return {
        id,
        src: postData.file_url,
        extendName: postData.file_ext,
        artist: artists.join(",") || "UnknownArtist",
        character: characters.join(",") || "UnknownCharacter",
        title: postData.md5,
        tags,
        createDate: new Date(postData.created_at * 1e3).toISOString()
      };
    }
  };
  class YandeDownloadConfig extends Rule34DownloadConfig {
  }
  async function downloadArtwork(btn2) {
    downloader.dirHandleCheck();
    const id = btn2.dataset.id;
    const mediaMeta = await yandeParser.parse(id);
    const { tags, artist, title } = mediaMeta;
    const downloadConfigs = new YandeDownloadConfig(mediaMeta).getDownloadConfig(btn2);
    await downloader.download(downloadConfigs);
    const historyData = {
      pid: Number(id),
      user: artist,
      title,
      tags
    };
    historyDb.add(historyData);
  }
  class Yande extends SiteInject {
    static get hostname() {
      return "yande.re";
    }
    inject() {
      super.inject();
      this.pageAction();
    }
    createThumbnailBtn(containers) {
      if (!containers.length) return;
      containers.forEach((el) => {
        const idMathch = new RegExp("(?<=\\/post\\/show\\/)\\d+|(?<=\\/post\\/browse#)\\d+").exec(el.href);
        if (!idMathch) return;
        const id = idMathch[0];
        const oldBtn = el.querySelector("pdl-button");
        if (oldBtn) {
          if (oldBtn.dataset.id === id) return;
          oldBtn.remove();
        } else {
          if (el.href.includes("/post/show")) {
            el.style.height = "fit-content";
            if (!el.classList.contains("thumb")) {
              const image = el.querySelector("img");
              if (image.src.includes("blacklisted-preview.png")) {
                return;
              }
              image.onload = () => {
                if (image.src.includes("blacklisted-preview.png") && image.nextElementSibling) {
                  image.nextElementSibling.remove();
                }
              };
              el.style.marginBottom = "1em";
              image.style.marginBottom = "0px";
            }
          }
          el.parentElement.style.display = "flex";
          el.style.position = "relative";
        }
        el.appendChild(
          new ThumbnailButton({
            id,
            onClick: downloadArtwork
          })
        );
      });
    }
    createArtworkBtn(id) {
      const image = document.querySelector("#image");
      const btnContainer = image.closest("div");
      btnContainer.style.position = "relative";
      btnContainer.style.width = "max-content";
      btnContainer.appendChild(
        new ArtworkButton({
          id,
          site: "yande",
          onClick: downloadArtwork
        })
      );
    }
    createScrollerBtn() {
      const scrollerList = document.querySelector("ul.post-browser-posts");
      if (!scrollerList) return;
      const ob = new MutationObserver((records) => {
        const containers = [];
        records.forEach((record) => {
          if (!record.addedNodes.length) return;
          record.addedNodes.forEach((node) => {
            if (!(node instanceof HTMLElement)) return;
            const thumbs = node.querySelectorAll("a.thumb");
            if (thumbs.length) containers.push(...thumbs);
          });
        });
        this.createThumbnailBtn(containers);
      });
      ob.observe(scrollerList, { subtree: true, childList: true });
    }
    createImageBrowseBtn() {
      const postId = document.querySelector("span.post-id");
      if (!postId) return;
      function createBtn() {
        const oldBtn = document.querySelector("pdl-button[type]");
        if (oldBtn) oldBtn.remove();
        const id = postId.textContent;
        if (!id) return;
        document.body.appendChild(
          new ThumbnailButton({
            id,
            type: ThumbnailBtnType.YandeBrowse,
            onClick: downloadArtwork
          })
        );
      }
      createBtn();
      new MutationObserver(createBtn).observe(postId, { childList: true });
    }
    pageAction() {
      const pathname = location.pathname;
      const galleryMatch = pathname.match(new RegExp("(?<=\\/post\\/show\\/)\\d+"));
      if (galleryMatch) {
        this.createArtworkBtn(galleryMatch[0]);
      } else if (pathname === "/post/browse") {
        this.createScrollerBtn();
        this.createImageBrowseBtn();
      } else {
        const btnContainers = document.querySelectorAll(
          "a.thumb, div.post div.col1 a"
        );
        this.createThumbnailBtn(Array.from(btnContainers));
      }
    }
    getCustomConfig() {
      return {
        folderPattern: "yande/{artist}",
        filenamePattern: "{id}_{artist}_{character}"
      };
    }
    observeColorScheme() {
      const query = window.matchMedia("(prefers-color-scheme: dark)");
      if (query.matches) {
        this.setAppDarkMode();
      }
      query.addEventListener("change", (e) => {
        e.matches ? this.setAppDarkMode() : this.setAppLightMode();
      });
    }
    getBatchDownloadConfig() {
      return void 0;
    }
  }
  class ATFbooru extends Danbooru {
    static get hostname() {
      return "booru.allthefallen.moe";
    }
    getCustomConfig() {
      return {
        folderPattern: "ATFbooru/{artist}",
        filenamePattern: "{id}_{artist}_{character}"
      };
    }
  }
  function getSiteInjector() {
    const sitesAdapter = [Pixiv, Danbooru, Rule34, Yande, ATFbooru];
    for (let i = 0; i < sitesAdapter.length; i++) {
      if (location.hostname === sitesAdapter[i].hostname) {
        return sitesAdapter[i];
      }
    }
  }
  const siteInject = getSiteInjector();
  siteInject && new siteInject();

})(Dexie, dayjs, JSZip, GIF);