米库的神奇魔法棒

世界第一公主殿下赠予的魔法棒,给网页审查工具施加神奇魔法!

// ==UserScript==
// @name               米库的神奇魔法棒
// @name:en-US         Miku's Magic Wand
// @name:ja            ミクの魔法の杖
// @namespace          https://blog.adproqwq.top
// @version            2.14.2
// @author             Adpro
// @description        世界第一公主殿下赠予的魔法棒,给网页审查工具施加神奇魔法!
// @description:en-US  A magic wand gifted by Her Royal Highness, the First Princess of the World, to cast a magical spell on the GKD Inspect!
// @description:ja     世界で一番おひめさまがGKDインスペクトに魔法の呪文をかけるために贈った魔法の杖!
// @license            MIT
// @icon               data:image/png;base64,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
// @homepage           https://github.com/adproqwq/MikuMagicWand
// @supportURL         https://github.com/adproqwq/MikuMagicWand/issues
// @match              https://i.gkd.li/*
// @exclude            https://i.gkd.li/
// @exclude            https://i.gkd.li/device/
// @require            https://registry.npmmirror.com/vue/3.5.13/files/dist/vue.global.prod.js
// @grant              none
// ==/UserScript==

(r=>{if(typeof GM_addStyle=="function"){GM_addStyle(r);return}const o=document.createElement("style");o.textContent=r,document.head.append(o)})(' @font-face{font-family:Material Icons;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}:root{--mdui-breakpoint-xs:0px;--mdui-breakpoint-sm:600px;--mdui-breakpoint-md:840px;--mdui-breakpoint-lg:1080px;--mdui-breakpoint-xl:1440px;--mdui-breakpoint-xxl:1920px}:root{--mdui-color-primary-light:103,80,164;--mdui-color-primary-container-light:234,221,255;--mdui-color-on-primary-light:255,255,255;--mdui-color-on-primary-container-light:33,0,94;--mdui-color-inverse-primary-light:208,188,255;--mdui-color-secondary-light:98,91,113;--mdui-color-secondary-container-light:232,222,248;--mdui-color-on-secondary-light:255,255,255;--mdui-color-on-secondary-container-light:30,25,43;--mdui-color-tertiary-light:125,82,96;--mdui-color-tertiary-container-light:255,216,228;--mdui-color-on-tertiary-light:255,255,255;--mdui-color-on-tertiary-container-light:55,11,30;--mdui-color-surface-light:254,247,255;--mdui-color-surface-dim-light:222,216,225;--mdui-color-surface-bright-light:254,247,255;--mdui-color-surface-container-lowest-light:255,255,255;--mdui-color-surface-container-low-light:247,242,250;--mdui-color-surface-container-light:243,237,247;--mdui-color-surface-container-high-light:236,230,240;--mdui-color-surface-container-highest-light:230,224,233;--mdui-color-surface-variant-light:231,224,236;--mdui-color-on-surface-light:28,27,31;--mdui-color-on-surface-variant-light:73,69,78;--mdui-color-inverse-surface-light:49,48,51;--mdui-color-inverse-on-surface-light:244,239,244;--mdui-color-background-light:254,247,255;--mdui-color-on-background-light:28,27,31;--mdui-color-error-light:179,38,30;--mdui-color-error-container-light:249,222,220;--mdui-color-on-error-light:255,255,255;--mdui-color-on-error-container-light:65,14,11;--mdui-color-outline-light:121,116,126;--mdui-color-outline-variant-light:196,199,197;--mdui-color-shadow-light:0,0,0;--mdui-color-surface-tint-color-light:103,80,164;--mdui-color-scrim-light:0,0,0;--mdui-color-primary-dark:208,188,255;--mdui-color-primary-container-dark:79,55,139;--mdui-color-on-primary-dark:55,30,115;--mdui-color-on-primary-container-dark:234,221,255;--mdui-color-inverse-primary-dark:103,80,164;--mdui-color-secondary-dark:204,194,220;--mdui-color-secondary-container-dark:74,68,88;--mdui-color-on-secondary-dark:51,45,65;--mdui-color-on-secondary-container-dark:232,222,248;--mdui-color-tertiary-dark:239,184,200;--mdui-color-tertiary-container-dark:99,59,72;--mdui-color-on-tertiary-dark:73,37,50;--mdui-color-on-tertiary-container-dark:255,216,228;--mdui-color-surface-dark:20,18,24;--mdui-color-surface-dim-dark:20,18,24;--mdui-color-surface-bright-dark:59,56,62;--mdui-color-surface-container-lowest-dark:15,13,19;--mdui-color-surface-container-low-dark:29,27,32;--mdui-color-surface-container-dark:33,31,38;--mdui-color-surface-container-high-dark:43,41,48;--mdui-color-surface-container-highest-dark:54,52,59;--mdui-color-surface-variant-dark:73,69,79;--mdui-color-on-surface-dark:230,225,229;--mdui-color-on-surface-variant-dark:202,196,208;--mdui-color-inverse-surface-dark:230,225,229;--mdui-color-inverse-on-surface-dark:49,48,51;--mdui-color-background-dark:20,18,24;--mdui-color-on-background-dark:230,225,229;--mdui-color-error-dark:242,184,181;--mdui-color-error-container-dark:140,29,24;--mdui-color-on-error-dark:96,20,16;--mdui-color-on-error-container-dark:249,222,220;--mdui-color-outline-dark:147,143,153;--mdui-color-outline-variant-dark:68,71,70;--mdui-color-shadow-dark:0,0,0;--mdui-color-surface-tint-color-dark:208,188,255;--mdui-color-scrim-dark:0,0,0;font-size:16px}.mdui-theme-light,:root{color-scheme:light;--mdui-color-primary:var(--mdui-color-primary-light);--mdui-color-primary-container:var(--mdui-color-primary-container-light);--mdui-color-on-primary:var(--mdui-color-on-primary-light);--mdui-color-on-primary-container:var(--mdui-color-on-primary-container-light);--mdui-color-inverse-primary:var(--mdui-color-inverse-primary-light);--mdui-color-secondary:var(--mdui-color-secondary-light);--mdui-color-secondary-container:var(--mdui-color-secondary-container-light);--mdui-color-on-secondary:var(--mdui-color-on-secondary-light);--mdui-color-on-secondary-container:var(--mdui-color-on-secondary-container-light);--mdui-color-tertiary:var(--mdui-color-tertiary-light);--mdui-color-tertiary-container:var(--mdui-color-tertiary-container-light);--mdui-color-on-tertiary:var(--mdui-color-on-tertiary-light);--mdui-color-on-tertiary-container:var(--mdui-color-on-tertiary-container-light);--mdui-color-surface:var(--mdui-color-surface-light);--mdui-color-surface-dim:var(--mdui-color-surface-dim-light);--mdui-color-surface-bright:var(--mdui-color-surface-bright-light);--mdui-color-surface-container-lowest:var(--mdui-color-surface-container-lowest-light);--mdui-color-surface-container-low:var(--mdui-color-surface-container-low-light);--mdui-color-surface-container:var(--mdui-color-surface-container-light);--mdui-color-surface-container-high:var(--mdui-color-surface-container-high-light);--mdui-color-surface-container-highest:var(--mdui-color-surface-container-highest-light);--mdui-color-surface-variant:var(--mdui-color-surface-variant-light);--mdui-color-on-surface:var(--mdui-color-on-surface-light);--mdui-color-on-surface-variant:var(--mdui-color-on-surface-variant-light);--mdui-color-inverse-surface:var(--mdui-color-inverse-surface-light);--mdui-color-inverse-on-surface:var(--mdui-color-inverse-on-surface-light);--mdui-color-background:var(--mdui-color-background-light);--mdui-color-on-background:var(--mdui-color-on-background-light);--mdui-color-error:var(--mdui-color-error-light);--mdui-color-error-container:var(--mdui-color-error-container-light);--mdui-color-on-error:var(--mdui-color-on-error-light);--mdui-color-on-error-container:var(--mdui-color-on-error-container-light);--mdui-color-outline:var(--mdui-color-outline-light);--mdui-color-outline-variant:var(--mdui-color-outline-variant-light);--mdui-color-shadow:var(--mdui-color-shadow-light);--mdui-color-surface-tint-color:var(--mdui-color-surface-tint-color-light);--mdui-color-scrim:var(--mdui-color-scrim-light);color:rgb(var(--mdui-color-on-background));background-color:rgb(var(--mdui-color-background))}.mdui-theme-dark{color-scheme:dark;--mdui-color-primary:var(--mdui-color-primary-dark);--mdui-color-primary-container:var(--mdui-color-primary-container-dark);--mdui-color-on-primary:var(--mdui-color-on-primary-dark);--mdui-color-on-primary-container:var(--mdui-color-on-primary-container-dark);--mdui-color-inverse-primary:var(--mdui-color-inverse-primary-dark);--mdui-color-secondary:var(--mdui-color-secondary-dark);--mdui-color-secondary-container:var(--mdui-color-secondary-container-dark);--mdui-color-on-secondary:var(--mdui-color-on-secondary-dark);--mdui-color-on-secondary-container:var(--mdui-color-on-secondary-container-dark);--mdui-color-tertiary:var(--mdui-color-tertiary-dark);--mdui-color-tertiary-container:var(--mdui-color-tertiary-container-dark);--mdui-color-on-tertiary:var(--mdui-color-on-tertiary-dark);--mdui-color-on-tertiary-container:var(--mdui-color-on-tertiary-container-dark);--mdui-color-surface:var(--mdui-color-surface-dark);--mdui-color-surface-dim:var(--mdui-color-surface-dim-dark);--mdui-color-surface-bright:var(--mdui-color-surface-bright-dark);--mdui-color-surface-container-lowest:var(--mdui-color-surface-container-lowest-dark);--mdui-color-surface-container-low:var(--mdui-color-surface-container-low-dark);--mdui-color-surface-container:var(--mdui-color-surface-container-dark);--mdui-color-surface-container-high:var(--mdui-color-surface-container-high-dark);--mdui-color-surface-container-highest:var(--mdui-color-surface-container-highest-dark);--mdui-color-surface-variant:var(--mdui-color-surface-variant-dark);--mdui-color-on-surface:var(--mdui-color-on-surface-dark);--mdui-color-on-surface-variant:var(--mdui-color-on-surface-variant-dark);--mdui-color-inverse-surface:var(--mdui-color-inverse-surface-dark);--mdui-color-inverse-on-surface:var(--mdui-color-inverse-on-surface-dark);--mdui-color-background:var(--mdui-color-background-dark);--mdui-color-on-background:var(--mdui-color-on-background-dark);--mdui-color-error:var(--mdui-color-error-dark);--mdui-color-error-container:var(--mdui-color-error-container-dark);--mdui-color-on-error:var(--mdui-color-on-error-dark);--mdui-color-on-error-container:var(--mdui-color-on-error-container-dark);--mdui-color-outline:var(--mdui-color-outline-dark);--mdui-color-outline-variant:var(--mdui-color-outline-variant-dark);--mdui-color-shadow:var(--mdui-color-shadow-dark);--mdui-color-surface-tint-color:var(--mdui-color-surface-tint-color-dark);--mdui-color-scrim:var(--mdui-color-scrim-dark);color:rgb(var(--mdui-color-on-background));background-color:rgb(var(--mdui-color-background))}@media (prefers-color-scheme:dark){.mdui-theme-auto{color-scheme:dark;--mdui-color-primary:var(--mdui-color-primary-dark);--mdui-color-primary-container:var(--mdui-color-primary-container-dark);--mdui-color-on-primary:var(--mdui-color-on-primary-dark);--mdui-color-on-primary-container:var(--mdui-color-on-primary-container-dark);--mdui-color-inverse-primary:var(--mdui-color-inverse-primary-dark);--mdui-color-secondary:var(--mdui-color-secondary-dark);--mdui-color-secondary-container:var(--mdui-color-secondary-container-dark);--mdui-color-on-secondary:var(--mdui-color-on-secondary-dark);--mdui-color-on-secondary-container:var(--mdui-color-on-secondary-container-dark);--mdui-color-tertiary:var(--mdui-color-tertiary-dark);--mdui-color-tertiary-container:var(--mdui-color-tertiary-container-dark);--mdui-color-on-tertiary:var(--mdui-color-on-tertiary-dark);--mdui-color-on-tertiary-container:var(--mdui-color-on-tertiary-container-dark);--mdui-color-surface:var(--mdui-color-surface-dark);--mdui-color-surface-dim:var(--mdui-color-surface-dim-dark);--mdui-color-surface-bright:var(--mdui-color-surface-bright-dark);--mdui-color-surface-container-lowest:var(--mdui-color-surface-container-lowest-dark);--mdui-color-surface-container-low:var(--mdui-color-surface-container-low-dark);--mdui-color-surface-container:var(--mdui-color-surface-container-dark);--mdui-color-surface-container-high:var(--mdui-color-surface-container-high-dark);--mdui-color-surface-container-highest:var(--mdui-color-surface-container-highest-dark);--mdui-color-surface-variant:var(--mdui-color-surface-variant-dark);--mdui-color-on-surface:var(--mdui-color-on-surface-dark);--mdui-color-on-surface-variant:var(--mdui-color-on-surface-variant-dark);--mdui-color-inverse-surface:var(--mdui-color-inverse-surface-dark);--mdui-color-inverse-on-surface:var(--mdui-color-inverse-on-surface-dark);--mdui-color-background:var(--mdui-color-background-dark);--mdui-color-on-background:var(--mdui-color-on-background-dark);--mdui-color-error:var(--mdui-color-error-dark);--mdui-color-error-container:var(--mdui-color-error-container-dark);--mdui-color-on-error:var(--mdui-color-on-error-dark);--mdui-color-on-error-container:var(--mdui-color-on-error-container-dark);--mdui-color-outline:var(--mdui-color-outline-dark);--mdui-color-outline-variant:var(--mdui-color-outline-variant-dark);--mdui-color-shadow:var(--mdui-color-shadow-dark);--mdui-color-surface-tint-color:var(--mdui-color-surface-tint-color-dark);--mdui-color-scrim:var(--mdui-color-scrim-dark);color:rgb(var(--mdui-color-on-background));background-color:rgb(var(--mdui-color-background))}}:root{--mdui-elevation-level0:none;--mdui-elevation-level1:0 .5px 1.5px 0 rgba(var(--mdui-color-shadow), 19%),0 0 1px 0 rgba(var(--mdui-color-shadow), 3.9%);--mdui-elevation-level2:0 .85px 3px 0 rgba(var(--mdui-color-shadow), 19%),0 .25px 1px 0 rgba(var(--mdui-color-shadow), 3.9%);--mdui-elevation-level3:0 1.25px 5px 0 rgba(var(--mdui-color-shadow), 19%),0 .3333px 1.5px 0 rgba(var(--mdui-color-shadow), 3.9%);--mdui-elevation-level4:0 1.85px 6.25px 0 rgba(var(--mdui-color-shadow), 19%),0 .5px 1.75px 0 rgba(var(--mdui-color-shadow), 3.9%);--mdui-elevation-level5:0 2.75px 9px 0 rgba(var(--mdui-color-shadow), 19%),0 .25px 3px 0 rgba(var(--mdui-color-shadow), 3.9%)}:root{--mdui-motion-easing-linear:cubic-bezier(0, 0, 1, 1);--mdui-motion-easing-standard:cubic-bezier(.2, 0, 0, 1);--mdui-motion-easing-standard-accelerate:cubic-bezier(.3, 0, 1, 1);--mdui-motion-easing-standard-decelerate:cubic-bezier(0, 0, 0, 1);--mdui-motion-easing-emphasized:var(--mdui-motion-easing-standard);--mdui-motion-easing-emphasized-accelerate:cubic-bezier(.3, 0, .8, .15);--mdui-motion-easing-emphasized-decelerate:cubic-bezier(.05, .7, .1, 1);--mdui-motion-duration-short1:50ms;--mdui-motion-duration-short2:.1s;--mdui-motion-duration-short3:.15s;--mdui-motion-duration-short4:.2s;--mdui-motion-duration-medium1:.25s;--mdui-motion-duration-medium2:.3s;--mdui-motion-duration-medium3:.35s;--mdui-motion-duration-medium4:.4s;--mdui-motion-duration-long1:.45s;--mdui-motion-duration-long2:.5s;--mdui-motion-duration-long3:.55s;--mdui-motion-duration-long4:.6s;--mdui-motion-duration-extra-long1:.7s;--mdui-motion-duration-extra-long2:.8s;--mdui-motion-duration-extra-long3:.9s;--mdui-motion-duration-extra-long4:1s}.mdui-prose{line-height:1.75;word-wrap:break-word}.mdui-prose :first-child{margin-top:0}.mdui-prose :last-child{margin-bottom:0}.mdui-prose code,.mdui-prose kbd,.mdui-prose pre,.mdui-prose pre tt,.mdui-prose samp{font-family:Consolas,Courier,Courier New,monospace}.mdui-prose caption{text-align:left}.mdui-prose [draggable=true],.mdui-prose [draggable]{cursor:move}.mdui-prose [draggable=false]{cursor:inherit}.mdui-prose dl,.mdui-prose form,.mdui-prose ol,.mdui-prose p,.mdui-prose ul{margin-top:1.25em;margin-bottom:1.25em}.mdui-prose a{text-decoration:none;outline:0;color:rgb(var(--mdui-color-primary))}.mdui-prose a:focus,.mdui-prose a:hover{border-bottom:.0625rem solid rgb(var(--mdui-color-primary))}.mdui-prose small{font-size:.875em}.mdui-prose strong{font-weight:600}.mdui-prose blockquote{margin:1.6em 2em;padding-left:1em;border-left:.25rem solid rgb(var(--mdui-color-surface-variant))}@media only screen and (max-width:599.98px){.mdui-prose blockquote{margin:1.6em 0}}.mdui-prose blockquote footer{font-size:86%;color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose mark{color:inherit;background-color:rgb(var(--mdui-color-secondary-container));border-bottom:.0625rem solid rgb(var(--mdui-color-secondary));margin:0 .375rem;padding:.125rem}.mdui-prose h1,.mdui-prose h2,.mdui-prose h3,.mdui-prose h4,.mdui-prose h5,.mdui-prose h6{font-weight:400}.mdui-prose h1 small,.mdui-prose h2 small,.mdui-prose h3 small,.mdui-prose h4 small,.mdui-prose h5 small,.mdui-prose h6 small{font-weight:inherit;font-size:65%;color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose h1 strong,.mdui-prose h2 strong,.mdui-prose h3 strong,.mdui-prose h4 strong,.mdui-prose h5 strong,.mdui-prose h6 strong{font-weight:600}.mdui-prose h1{font-size:2.5em;margin-top:0;margin-bottom:1.25em;line-height:1.1111}.mdui-prose h2{font-size:1.875em;margin-top:2.25em;margin-bottom:1.125em;line-height:1.3333}.mdui-prose h3{font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.6}.mdui-prose h4{font-size:1.25em;margin-top:1.875em;margin-bottom:.875em;line-height:1.5}.mdui-prose h2+*,.mdui-prose h3+*,.mdui-prose h4+*,.mdui-prose hr+*{margin-top:0}.mdui-prose code,.mdui-prose kbd{font-size:.875em;color:rgb(var(--mdui-color-on-surface-container));background-color:rgba(var(--mdui-color-surface-variant),.28);padding:.125rem .375rem;border-radius:var(--mdui-shape-corner-extra-small)}.mdui-prose kbd{font-size:.9em}.mdui-prose abbr[title]{text-decoration:none;cursor:help;border-bottom:.0625rem dotted rgb(var(--mdui-color-on-surface-variant))}.mdui-prose ins,.mdui-prose u{text-decoration:none;border-bottom:.0625rem solid rgb(var(--mdui-color-on-surface-variant))}.mdui-prose del{text-decoration:line-through}.mdui-prose hr{margin-top:3em;margin-bottom:3em;border:none;border-bottom:.0625rem solid rgb(var(--mdui-color-surface-variant))}.mdui-prose pre{margin-top:1.7143em;margin-bottom:1.7143em}.mdui-prose pre code{padding:.8571em 1.1429em;overflow-x:auto;-webkit-overflow-scrolling:touch;background-color:rgb(var(--mdui-color-surface-container));color:rgb(var(--mdui-color-on-surface-container));border-radius:var(--mdui-shape-corner-extra-small)}.mdui-prose ol,.mdui-prose ul{padding-left:1.625em}.mdui-prose ul{list-style-type:disc}.mdui-prose ol{list-style-type:decimal}.mdui-prose ol[type=A]{list-style-type:upper-alpha}.mdui-prose ol[type=a]{list-style-type:lower-alpha}.mdui-prose ol[type=I]{list-style-type:upper-roman}.mdui-prose ol[type=i]{list-style-type:lower-roman}.mdui-prose ol[type="1"]{list-style-type:decimal}.mdui-prose li{margin-top:.5em;margin-bottom:.5em}.mdui-prose ol>li,.mdui-prose ul>li{padding-left:.375em}.mdui-prose ol>li>p,.mdui-prose ul>li>p{margin-top:.75em;margin-bottom:.75em}.mdui-prose ol>li>:first-child,.mdui-prose ul>li>:first-child{margin-top:1.25em}.mdui-prose ol>li>:last-child,.mdui-prose ul>li>:last-child{margin-bottom:1.25em}.mdui-prose ol>li::marker{font-weight:400;color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose ul>li::marker{color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose ol ol,.mdui-prose ol ul,.mdui-prose ul ol,.mdui-prose ul ul{margin-top:.75em;margin-bottom:.75em}.mdui-prose fieldset,.mdui-prose img{border:none}.mdui-prose figure,.mdui-prose img,.mdui-prose video{margin-top:2em;margin-bottom:2em;max-width:100%}.mdui-prose figure>*{margin-top:0;margin-bottom:0}.mdui-prose figcaption{font-size:.875em;line-height:1.4286;margin-top:.8571em;color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose figcaption:empty:before{z-index:-1;cursor:text;content:attr(placeholder);color:rgb(var(--mdui-color-on-surface-variant))}.mdui-prose table{margin-top:2em;margin-bottom:2em;border:.0625rem solid rgb(var(--mdui-color-surface-variant));border-radius:var(--mdui-shape-corner-large)}.mdui-table{width:100%;overflow-x:auto;margin-top:2em;margin-bottom:2em;border:.0625rem solid rgb(var(--mdui-color-surface-variant));border-radius:var(--mdui-shape-corner-large)}.mdui-table table{margin-top:0;margin-bottom:0;border:none;border-radius:0}.mdui-prose table,.mdui-table table{width:100%;text-align:left;border-collapse:collapse;border-spacing:0}.mdui-prose td,.mdui-prose th,.mdui-table td,.mdui-table th{border-top:.0625rem solid rgb(var(--mdui-color-surface-variant))}.mdui-prose td:not(:first-child),.mdui-prose th:not(:first-child),.mdui-table td:not(:first-child),.mdui-table th:not(:first-child){border-left:.0625rem solid rgb(var(--mdui-color-surface-variant))}.mdui-prose td:not(:last-child),.mdui-prose th:not(:last-child),.mdui-table td:not(:last-child),.mdui-table th:not(:last-child){border-right:.0625rem solid rgb(var(--mdui-color-surface-variant))}.mdui-prose tbody:first-child tr:first-child td,.mdui-prose thead:first-child tr:first-child th,.mdui-table tbody:first-child tr:first-child td,.mdui-table thead:first-child tr:first-child th{border-top:0}.mdui-prose tfoot td,.mdui-prose tfoot th,.mdui-prose thead td,.mdui-prose thead th,.mdui-table tfoot td,.mdui-table tfoot th,.mdui-table thead td,.mdui-table thead th{position:relative;vertical-align:middle;padding:1.125rem 1rem;font-weight:var(--mdui-typescale-title-medium-weight);letter-spacing:var(--mdui-typescale-title-medium-tracking);line-height:var(--mdui-typescale-title-medium-line-height);color:rgb(var(--mdui-color-on-surface-variant));box-shadow:var(--mdui-elevation-level1)}.mdui-prose tbody td,.mdui-prose tbody th,.mdui-table tbody td,.mdui-table tbody th{padding:.875rem 1rem}.mdui-prose tbody th,.mdui-table tbody th{vertical-align:middle;font-weight:inherit}.mdui-prose tbody td,.mdui-table tbody td{vertical-align:baseline}:root{--mdui-shape-corner-none:0;--mdui-shape-corner-extra-small:.25rem;--mdui-shape-corner-small:.5rem;--mdui-shape-corner-medium:.75rem;--mdui-shape-corner-large:1rem;--mdui-shape-corner-extra-large:1.75rem;--mdui-shape-corner-full:1000rem}:root{--mdui-state-layer-hover:.08;--mdui-state-layer-focus:.12;--mdui-state-layer-pressed:.12;--mdui-state-layer-dragged:.16}:root{--mdui-typescale-display-large-weight:400;--mdui-typescale-display-medium-weight:400;--mdui-typescale-display-small-weight:400;--mdui-typescale-display-large-line-height:4rem;--mdui-typescale-display-medium-line-height:3.25rem;--mdui-typescale-display-small-line-height:2.75rem;--mdui-typescale-display-large-size:3.5625rem;--mdui-typescale-display-medium-size:2.8125rem;--mdui-typescale-display-small-size:2.25rem;--mdui-typescale-display-large-tracking:0rem;--mdui-typescale-display-medium-tracking:0rem;--mdui-typescale-display-small-tracking:0rem;--mdui-typescale-headline-large-weight:400;--mdui-typescale-headline-medium-weight:400;--mdui-typescale-headline-small-weight:400;--mdui-typescale-headline-large-line-height:2.5rem;--mdui-typescale-headline-medium-line-height:2.25rem;--mdui-typescale-headline-small-line-height:2rem;--mdui-typescale-headline-large-size:2rem;--mdui-typescale-headline-medium-size:1.75rem;--mdui-typescale-headline-small-size:1.5rem;--mdui-typescale-headline-large-tracking:0rem;--mdui-typescale-headline-medium-tracking:0rem;--mdui-typescale-headline-small-tracking:0rem;--mdui-typescale-title-large-weight:400;--mdui-typescale-title-medium-weight:500;--mdui-typescale-title-small-weight:500;--mdui-typescale-title-large-line-height:1.75rem;--mdui-typescale-title-medium-line-height:1.5rem;--mdui-typescale-title-small-line-height:1.25rem;--mdui-typescale-title-large-size:1.375rem;--mdui-typescale-title-medium-size:1rem;--mdui-typescale-title-small-size:.875rem;--mdui-typescale-title-large-tracking:0rem;--mdui-typescale-title-medium-tracking:.009375rem;--mdui-typescale-title-small-tracking:.00625rem;--mdui-typescale-label-large-weight:500;--mdui-typescale-label-medium-weight:500;--mdui-typescale-label-small-weight:500;--mdui-typescale-label-large-line-height:1.25rem;--mdui-typescale-label-medium-line-height:1rem;--mdui-typescale-label-small-line-height:.375rem;--mdui-typescale-label-large-size:.875rem;--mdui-typescale-label-medium-size:.75rem;--mdui-typescale-label-small-size:.6875rem;--mdui-typescale-label-large-tracking:.00625rem;--mdui-typescale-label-medium-tracking:.03125rem;--mdui-typescale-label-small-tracking:.03125rem;--mdui-typescale-body-large-weight:400;--mdui-typescale-body-medium-weight:400;--mdui-typescale-body-small-weight:400;--mdui-typescale-body-large-line-height:1.5rem;--mdui-typescale-body-medium-line-height:1.25rem;--mdui-typescale-body-small-line-height:1rem;--mdui-typescale-body-large-size:1rem;--mdui-typescale-body-medium-size:.875rem;--mdui-typescale-body-small-size:.75rem;--mdui-typescale-body-large-tracking:.009375rem;--mdui-typescale-body-medium-tracking:.015625rem;--mdui-typescale-body-small-tracking:.025rem}.mdui-lock-screen{overflow:hidden!important}#categories{width:500px}input#localImport{display:none}.position{width:15%;height:var(--mdui-typescale-title-large-line-height)}mdui-dialog>*>span{display:flex;font-size:var(--mdui-typescale-body-large-size)}input#localImport,input#img{display:none}.introduction{color:rgb(var(--mdui-color-on-surface-variant));display:block;opacity:1;word-break:normal;white-space:pre-warp;word-wrap:break-word;transition:opacity var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height)} ');

(async function (vue) {
  'use strict';

  var _a;
  function isObject(obj) {
    return obj !== null && typeof obj === "object" && "constructor" in obj && obj.constructor === Object;
  }
  function extend$1(target = {}, src = {}) {
    Object.keys(src).forEach((key2) => {
      if (typeof target[key2] === "undefined")
        target[key2] = src[key2];
      else if (isObject(src[key2]) && isObject(target[key2]) && Object.keys(src[key2]).length > 0) {
        extend$1(target[key2], src[key2]);
      }
    });
  }
  const ssrDocument = {
    body: {},
    addEventListener() {
    },
    removeEventListener() {
    },
    activeElement: {
      blur() {
      },
      nodeName: ""
    },
    querySelector() {
      return null;
    },
    querySelectorAll() {
      return [];
    },
    getElementById() {
      return null;
    },
    createEvent() {
      return {
        initEvent() {
        }
      };
    },
    createElement() {
      return {
        children: [],
        childNodes: [],
        style: {},
        setAttribute() {
        },
        getElementsByTagName() {
          return [];
        }
      };
    },
    createElementNS() {
      return {};
    },
    importNode() {
      return null;
    },
    location: {
      hash: "",
      host: "",
      hostname: "",
      href: "",
      origin: "",
      pathname: "",
      protocol: "",
      search: ""
    }
  };
  function getDocument() {
    const doc = typeof document !== "undefined" ? document : {};
    extend$1(doc, ssrDocument);
    return doc;
  }
  const ssrWindow = {
    document: ssrDocument,
    navigator: {
      userAgent: ""
    },
    location: {
      hash: "",
      host: "",
      hostname: "",
      href: "",
      origin: "",
      pathname: "",
      protocol: "",
      search: ""
    },
    history: {
      replaceState() {
      },
      pushState() {
      },
      go() {
      },
      back() {
      }
    },
    CustomEvent: function CustomEvent2() {
      return this;
    },
    addEventListener() {
    },
    removeEventListener() {
    },
    getComputedStyle() {
      return {
        getPropertyValue() {
          return "";
        }
      };
    },
    Image() {
    },
    Date() {
    },
    screen: {},
    setTimeout() {
    },
    clearTimeout() {
    },
    matchMedia() {
      return {};
    },
    requestAnimationFrame(callback) {
      if (typeof setTimeout === "undefined") {
        callback();
        return null;
      }
      return setTimeout(callback, 0);
    },
    cancelAnimationFrame(id2) {
      if (typeof setTimeout === "undefined") {
        return;
      }
      clearTimeout(id2);
    }
  };
  function getWindow$1() {
    const win = typeof window !== "undefined" ? window : {};
    extend$1(win, ssrWindow);
    return win;
  }
  const getNodeName$1 = (element) => {
    return (element == null ? void 0 : element.nodeName.toLowerCase()) ?? "";
  };
  const isNodeName = (element, name) => {
    return (element == null ? void 0 : element.nodeName.toLowerCase()) === name.toLowerCase();
  };
  const isFunction = (target) => {
    return typeof target === "function";
  };
  const isString = (target) => {
    return typeof target === "string";
  };
  const isNumber = (target) => {
    return typeof target === "number";
  };
  const isBoolean = (target) => {
    return typeof target === "boolean";
  };
  const isUndefined = (target) => {
    return typeof target === "undefined";
  };
  const isNull = (target) => {
    return target === null;
  };
  const isWindow = (target) => {
    return typeof Window !== "undefined" && target instanceof Window;
  };
  const isDocument = (target) => {
    return typeof Document !== "undefined" && target instanceof Document;
  };
  const isElement = (target) => {
    return typeof Element !== "undefined" && target instanceof Element;
  };
  const isNode$1 = (target) => {
    return typeof Node !== "undefined" && target instanceof Node;
  };
  const isArrayLike = (target) => {
    return !isFunction(target) && !isWindow(target) && isNumber(target.length);
  };
  const isObjectLike = (target) => {
    return typeof target === "object" && target !== null;
  };
  const toElement = (target) => {
    return isDocument(target) ? target.documentElement : target;
  };
  const toCamelCase = (string) => {
    return string.replace(/-([a-z])/g, (_2, letter) => {
      return letter.toUpperCase();
    });
  };
  const toKebabCase = (string) => {
    if (!string) {
      return string;
    }
    return string.replace(/^./, string[0].toLowerCase()).replace(/[A-Z]/g, (replacer) => {
      return "-" + replacer.toLowerCase();
    });
  };
  const returnFalse = () => {
    return false;
  };
  const returnTrue = () => {
    return true;
  };
  const eachArray = (target, callback) => {
    for (let i3 = 0; i3 < target.length; i3 += 1) {
      if (callback.call(target[i3], target[i3], i3) === false) {
        return target;
      }
    }
    return target;
  };
  const eachObject = (target, callback) => {
    const keys = Object.keys(target);
    for (let i3 = 0; i3 < keys.length; i3 += 1) {
      const key2 = keys[i3];
      if (callback.call(target[key2], key2, target[key2]) === false) {
        return target;
      }
    }
    return target;
  };
  class JQ {
    constructor(arr) {
      this.length = 0;
      if (!arr) {
        return this;
      }
      eachArray(arr, (item, i3) => {
        this[i3] = item;
      });
      this.length = arr.length;
      return this;
    }
  }
  const isDomReady = (document2 = getDocument()) => {
    return /complete|interactive/.test(document2.readyState);
  };
  const createElement = (tagName) => {
    const document2 = getDocument();
    return document2.createElement(tagName);
  };
  const appendChild = (element, child) => {
    return element.appendChild(child);
  };
  const removeChild = (element) => {
    return element.parentNode ? element.parentNode.removeChild(element) : element;
  };
  const getChildNodesArray = (target, parent) => {
    const tempParent = createElement(parent);
    tempParent.innerHTML = target;
    return [].slice.call(tempParent.childNodes);
  };
  const get$ = () => {
    const $2 = function(selector) {
      if (!selector) {
        return new JQ();
      }
      if (selector instanceof JQ) {
        return selector;
      }
      if (isFunction(selector)) {
        const document2 = getDocument();
        if (isDomReady(document2)) {
          selector.call(document2, $2);
        } else {
          document2.addEventListener("DOMContentLoaded", () => selector.call(document2, $2), { once: true });
        }
        return new JQ([document2]);
      }
      if (isString(selector)) {
        const html = selector.trim();
        if (html.startsWith("<") && html.endsWith(">")) {
          let toCreate = "div";
          const tags = {
            li: "ul",
            tr: "tbody",
            td: "tr",
            th: "tr",
            tbody: "table",
            option: "select"
          };
          eachObject(tags, (childTag, parentTag) => {
            if (html.startsWith(`<${childTag}`)) {
              toCreate = parentTag;
              return false;
            }
            return;
          });
          return new JQ(getChildNodesArray(html, toCreate));
        }
        const document2 = getDocument();
        return new JQ(document2.querySelectorAll(selector));
      }
      if (isArrayLike(selector) && !isNode$1(selector)) {
        return new JQ(selector);
      }
      return new JQ([selector]);
    };
    $2.fn = JQ.prototype;
    return $2;
  };
  const $$1 = get$();
  const merge = (first, second) => {
    eachArray(second, (value) => {
      first.push(value);
    });
    return first;
  };
  const unique = (arr) => {
    return [...new Set(arr)];
  };
  $$1.fn.get = function(index) {
    return index === void 0 ? [].slice.call(this) : this[index >= 0 ? index : index + this.length];
  };
  $$1.fn.add = function(selector) {
    return new JQ(unique(merge(this.get(), $$1(selector).get())));
  };
  const getAttribute = (element, key2, defaultValue2) => {
    const value = element.getAttribute(key2);
    return isNull(value) ? defaultValue2 : value;
  };
  const removeAttribute = (element, key2) => {
    element.removeAttribute(key2);
  };
  const setAttribute = (element, key2, value) => {
    isNull(value) ? removeAttribute(element, key2) : element.setAttribute(key2, value);
  };
  $$1.fn.each = function(callback) {
    return eachArray(this, (value, index) => {
      return callback.call(value, index, value);
    });
  };
  eachArray(["add", "remove", "toggle"], (name) => {
    $$1.fn[`${name}Class`] = function(className2) {
      if (name === "remove" && !arguments.length) {
        return this.each((_2, element) => {
          setAttribute(element, "class", "");
        });
      }
      return this.each((i3, element) => {
        if (!isElement(element)) {
          return;
        }
        const classes = (isFunction(className2) ? className2.call(element, i3, getAttribute(element, "class", "")) : className2).split(" ").filter((name2) => name2);
        eachArray(classes, (cls) => {
          element.classList[name](cls);
        });
      });
    };
  });
  eachArray(["insertBefore", "insertAfter"], (name, nameIndex) => {
    $$1.fn[name] = function(target) {
      const $element = nameIndex ? $$1(this.get().reverse()) : this;
      const $target = $$1(target);
      const result = [];
      $target.each((index, target2) => {
        if (!target2.parentNode) {
          return;
        }
        $element.each((_2, element) => {
          const newItem = index ? element.cloneNode(true) : element;
          const existingItem = nameIndex ? target2.nextSibling : target2;
          result.push(newItem);
          target2.parentNode.insertBefore(newItem, existingItem);
        });
      });
      return $$1(nameIndex ? result.reverse() : result);
    };
  });
  const isPlainText = (target) => {
    return isString(target) && !(target.startsWith("<") && target.endsWith(">"));
  };
  eachArray(["before", "after"], (name, nameIndex) => {
    $$1.fn[name] = function(...args) {
      if (nameIndex === 1) {
        args = args.reverse();
      }
      return this.each((index, element) => {
        const targets = isFunction(args[0]) ? [args[0].call(element, index, element.innerHTML)] : args;
        eachArray(targets, (target) => {
          let $target;
          if (isPlainText(target)) {
            $target = $$1(getChildNodesArray(target, "div"));
          } else if (index && isElement(target)) {
            $target = $$1(target.cloneNode(true));
          } else {
            $target = $$1(target);
          }
          $target[nameIndex ? "insertAfter" : "insertBefore"](element);
        });
      });
    };
  });
  function each(target, callback) {
    return isArrayLike(target) ? eachArray(target, (value, index) => {
      return callback.call(value, index, value);
    }) : eachObject(target, callback);
  }
  function map(elements, callback) {
    const window2 = getWindow$1();
    let value;
    const ret = [];
    each(elements, (i3, element) => {
      value = callback.call(window2, element, i3);
      if (value != null) {
        ret.push(value);
      }
    });
    return [].concat(...ret);
  }
  $$1.fn.map = function(callback) {
    return new JQ(map(this, (element, i3) => {
      return callback.call(element, i3, element);
    }));
  };
  $$1.fn.clone = function() {
    return this.map(function() {
      return this.cloneNode(true);
    });
  };
  $$1.fn.is = function(selector) {
    let isMatched = false;
    if (isFunction(selector)) {
      this.each((index, element) => {
        if (selector.call(element, index, element)) {
          isMatched = true;
        }
      });
      return isMatched;
    }
    if (isString(selector)) {
      this.each((_2, element) => {
        if (isDocument(element) || isWindow(element)) {
          return;
        }
        if (element.matches.call(element, selector)) {
          isMatched = true;
        }
      });
      return isMatched;
    }
    const $compareWith = $$1(selector);
    this.each((_2, element) => {
      $compareWith.each((_3, compare) => {
        if (element === compare) {
          isMatched = true;
        }
      });
    });
    return isMatched;
  };
  $$1.fn.remove = function(selector) {
    return this.each((_2, element) => {
      if (!selector || $$1(element).is(selector)) {
        removeChild(element);
      }
    });
  };
  eachArray(["prepend", "append"], (name, nameIndex) => {
    $$1.fn[name] = function(...args) {
      return this.each((index, element) => {
        const childNodes = element.childNodes;
        const childLength = childNodes.length;
        const child = childLength ? childNodes[nameIndex ? childLength - 1 : 0] : createElement("div");
        if (!childLength) {
          appendChild(element, child);
        }
        let contents = isFunction(args[0]) ? [args[0].call(element, index, element.innerHTML)] : args;
        if (index) {
          contents = contents.map((content) => {
            return isString(content) ? content : $$1(content).clone();
          });
        }
        $$1(child)[nameIndex ? "after" : "before"](...contents);
        if (!childLength) {
          removeChild(child);
        }
      });
    };
  });
  eachArray(["appendTo", "prependTo"], (name, nameIndex) => {
    $$1.fn[name] = function(target) {
      const extraChilds = [];
      const $target = $$1(target).map((_2, element) => {
        const childNodes = element.childNodes;
        const childLength = childNodes.length;
        if (childLength) {
          return childNodes[nameIndex ? 0 : childLength - 1];
        }
        const child = createElement("div");
        appendChild(element, child);
        extraChilds.push(child);
        return child;
      });
      const $result = this[nameIndex ? "insertBefore" : "insertAfter"]($target);
      $$1(extraChilds).remove();
      return $result;
    };
  });
  const getComputedStyleValue = (element, name) => {
    const window2 = getWindow$1();
    return window2.getComputedStyle(element).getPropertyValue(toKebabCase(name));
  };
  const isBorderBox = (element) => {
    return getComputedStyleValue(element, "box-sizing") === "border-box";
  };
  const getExtraWidth = (element, direction, extra) => {
    const position = direction === "width" ? ["Left", "Right"] : ["Top", "Bottom"];
    return [0, 1].reduce((prev, _2, index) => {
      let prop = extra + position[index];
      if (extra === "border") {
        prop += "Width";
      }
      return prev + parseFloat(getComputedStyleValue(element, prop) || "0");
    }, 0);
  };
  const getStyle = (element, name) => {
    if (name === "width" || name === "height") {
      const valueNumber = element.getBoundingClientRect()[name];
      if (isBorderBox(element)) {
        return `${valueNumber}px`;
      }
      return `${valueNumber - getExtraWidth(element, name, "border") - getExtraWidth(element, name, "padding")}px`;
    }
    return getComputedStyleValue(element, name);
  };
  const cssNumber = [
    "animation-iteration-count",
    "column-count",
    "fill-opacity",
    "flex-grow",
    "flex-shrink",
    "font-weight",
    "grid-area",
    "grid-column",
    "grid-column-end",
    "grid-column-start",
    "grid-row",
    "grid-row-end",
    "grid-row-start",
    "line-height",
    "opacity",
    "order",
    "orphans",
    "widows",
    "z-index",
    "zoom"
  ];
  eachArray(["attr", "prop", "css"], (name, nameIndex) => {
    const set2 = (element, key2, value) => {
      if (isUndefined(value)) {
        return;
      }
      if (nameIndex === 0) {
        return setAttribute(element, key2, value);
      }
      if (nameIndex === 1) {
        element[key2] = value;
        return;
      }
      key2 = toKebabCase(key2);
      const getSuffix = () => key2.startsWith("--") || cssNumber.includes(key2) ? "" : "px";
      element.style.setProperty(key2, isNumber(value) ? `${value}${getSuffix()}` : value);
    };
    const get2 = (element, key2) => {
      if (nameIndex === 0) {
        return getAttribute(element, key2);
      }
      if (nameIndex === 1) {
        return element[key2];
      }
      return getStyle(element, key2);
    };
    $$1.fn[name] = function(key2, value) {
      if (isObjectLike(key2)) {
        eachObject(key2, (k2, v2) => {
          this[name](k2, v2);
        });
        return this;
      }
      if (arguments.length === 1) {
        const element = this[0];
        return isElement(element) ? get2(element, key2) : void 0;
      }
      return this.each((i3, element) => {
        set2(element, key2, isFunction(value) ? value.call(element, i3, get2(element, key2)) : value);
      });
    };
  });
  $$1.fn.children = function(selector) {
    const children = [];
    this.each((_2, element) => {
      eachArray(element.childNodes, (childNode) => {
        if (!isElement(childNode)) {
          return;
        }
        if (!selector || $$1(childNode).is(selector)) {
          children.push(childNode);
        }
      });
    });
    return new JQ(unique(children));
  };
  $$1.fn.slice = function(...args) {
    return new JQ([].slice.apply(this, args));
  };
  $$1.fn.eq = function(index) {
    const ret = index === -1 ? this.slice(index) : this.slice(index, +index + 1);
    return new JQ(ret);
  };
  const dir = ($elements, nameIndex, node, selector, filter) => {
    const ret = [];
    let target;
    $elements.each((_2, element) => {
      target = element[node];
      while (target && isElement(target)) {
        if (nameIndex === 2) {
          if (selector && $$1(target).is(selector)) {
            break;
          }
          if (!filter || $$1(target).is(filter)) {
            ret.push(target);
          }
        } else if (nameIndex === 0) {
          if (!selector || $$1(target).is(selector)) {
            ret.push(target);
          }
          break;
        } else {
          if (!selector || $$1(target).is(selector)) {
            ret.push(target);
          }
        }
        target = target[node];
      }
    });
    return new JQ(unique(ret));
  };
  eachArray(["", "s", "sUntil"], (name, nameIndex) => {
    $$1.fn[`parent${name}`] = function(selector, filter) {
      const $nodes = !nameIndex ? this : $$1(this.get().reverse());
      return dir($nodes, nameIndex, "parentNode", selector, filter);
    };
  });
  $$1.fn.closest = function(selector) {
    if (this.is(selector)) {
      return this;
    }
    const matched = [];
    this.parents().each((_2, element) => {
      if ($$1(element).is(selector)) {
        matched.push(element);
        return false;
      }
    });
    return new JQ(matched);
  };
  const weakMap$2 = /* @__PURE__ */ new WeakMap();
  const getAll = (element) => {
    return weakMap$2.get(element) ?? {};
  };
  const get$2 = (element, keyOriginal) => {
    const data2 = getAll(element);
    const key2 = toCamelCase(keyOriginal);
    return key2 in data2 ? data2[key2] : void 0;
  };
  const setAll = (element, object) => {
    const data2 = getAll(element);
    eachObject(object, (keyOriginal, value) => {
      data2[toCamelCase(keyOriginal)] = value;
    });
    weakMap$2.set(element, data2);
  };
  const set$2 = (element, keyOriginal, value) => {
    setAll(element, { [keyOriginal]: value });
  };
  const removeAll = (element) => {
    weakMap$2.delete(element);
  };
  const removeMultiple = (element, keysOriginal) => {
    const data2 = getAll(element);
    eachArray(keysOriginal, (keyOriginal) => {
      const key2 = toCamelCase(keyOriginal);
      delete data2[key2];
    });
    weakMap$2.set(element, data2);
  };
  const rbrace = /^(?:{[\w\W]*\}|\[[\w\W]*\])$/;
  const stringTransform = (value) => {
    if (value === "true") {
      return true;
    }
    if (value === "false") {
      return false;
    }
    if (value === "null") {
      return null;
    }
    if (value === +value + "") {
      return +value;
    }
    if (rbrace.test(value)) {
      return JSON.parse(value);
    }
    return value;
  };
  const dataAttr = (element, key2, value) => {
    if (isUndefined(value) && element.nodeType === 1) {
      value = element.dataset[key2];
      if (isString(value)) {
        try {
          value = stringTransform(value);
        } catch (e3) {
        }
      }
    }
    return value;
  };
  $$1.fn.data = function(key2, value) {
    if (isUndefined(key2)) {
      if (!this.length) {
        return void 0;
      }
      const element = this[0];
      const resultData = getAll(element);
      if (element.nodeType !== 1) {
        return resultData;
      }
      eachObject(element.dataset, (key3) => {
        resultData[key3] = dataAttr(element, key3, resultData[key3]);
      });
      return resultData;
    }
    if (isObjectLike(key2)) {
      return this.each(function() {
        setAll(this, key2);
      });
    }
    if (arguments.length === 2 && isUndefined(value)) {
      return this;
    }
    if (!isUndefined(value)) {
      return this.each(function() {
        set$2(this, key2, value);
      });
    }
    if (!this.length) {
      return void 0;
    }
    return dataAttr(this[0], toCamelCase(key2), get$2(this[0], key2));
  };
  $$1.fn.empty = function() {
    return this.each((_2, element) => {
      element.innerHTML = "";
    });
  };
  $$1.fn.extend = function(obj) {
    eachObject(obj, (prop, value) => {
      $$1.fn[prop] = value;
    });
    return this;
  };
  $$1.fn.filter = function(selector) {
    if (isFunction(selector)) {
      return this.map((index, element) => {
        return selector.call(element, index, element) ? element : void 0;
      });
    }
    if (isString(selector)) {
      return this.map((_2, element) => {
        return $$1(element).is(selector) ? element : void 0;
      });
    }
    const $selector = $$1(selector);
    return this.map((_2, element) => {
      return $selector.get().includes(element) ? element : void 0;
    });
  };
  $$1.fn.find = function(selector) {
    const foundElements = [];
    this.each((_2, element) => {
      merge(foundElements, $$1(element.querySelectorAll(selector)).get());
    });
    return new JQ(foundElements);
  };
  $$1.fn.first = function() {
    return this.eq(0);
  };
  const contains = (container2, contains2) => {
    return container2 !== contains2 && toElement(container2).contains(contains2);
  };
  $$1.fn.has = function(selector) {
    const $targets = isString(selector) ? this.find(selector) : $$1(selector);
    const { length } = $targets;
    return this.map(function() {
      for (let i3 = 0; i3 < length; i3 += 1) {
        if (contains(this, $targets[i3])) {
          return this;
        }
      }
      return;
    });
  };
  $$1.fn.hasClass = function(className2) {
    return this[0].classList.contains(className2);
  };
  const handleExtraWidth = (element, name, value, funcIndex, includeMargin, multiply) => {
    const getExtraWidthValue = (extra) => {
      return getExtraWidth(element, name.toLowerCase(), extra) * multiply;
    };
    if (funcIndex === 2 && includeMargin) {
      value += getExtraWidthValue("margin");
    }
    if (isBorderBox(element)) {
      if (funcIndex === 0) {
        value -= getExtraWidthValue("border");
      }
      if (funcIndex === 1) {
        value -= getExtraWidthValue("border");
        value -= getExtraWidthValue("padding");
      }
    } else {
      if (funcIndex === 0) {
        value += getExtraWidthValue("padding");
      }
      if (funcIndex === 2) {
        value += getExtraWidthValue("border");
        value += getExtraWidthValue("padding");
      }
    }
    return value;
  };
  const get$1 = (element, name, funcIndex, includeMargin) => {
    const document2 = getDocument();
    const clientProp = `client${name}`;
    const scrollProp = `scroll${name}`;
    const offsetProp = `offset${name}`;
    const innerProp = `inner${name}`;
    if (isWindow(element)) {
      return funcIndex === 2 ? element[innerProp] : toElement(document2)[clientProp];
    }
    if (isDocument(element)) {
      const doc = toElement(element);
      return Math.max(
        // @ts-ignore
        element.body[scrollProp],
        doc[scrollProp],
        // @ts-ignore
        element.body[offsetProp],
        doc[offsetProp],
        doc[clientProp]
      );
    }
    const value = parseFloat(getComputedStyleValue(element, name.toLowerCase()) || "0");
    return handleExtraWidth(element, name, value, funcIndex, includeMargin, 1);
  };
  const set$1 = (element, elementIndex, name, funcIndex, includeMargin, value) => {
    let computedValue = isFunction(value) ? value.call(element, elementIndex, get$1(element, name, funcIndex, includeMargin)) : value;
    if (computedValue == null) {
      return;
    }
    const $element = $$1(element);
    const dimension = name.toLowerCase();
    if (isString(computedValue) && ["auto", "inherit", ""].includes(computedValue)) {
      $element.css(dimension, computedValue);
      return;
    }
    const suffix = computedValue.toString().replace(/\b[0-9.]*/, "");
    const numerical = parseFloat(computedValue);
    computedValue = handleExtraWidth(element, name, numerical, funcIndex, includeMargin, -1) + (suffix || "px");
    $element.css(dimension, computedValue);
  };
  eachArray(["Width", "Height"], (name) => {
    eachArray([`inner${name}`, name.toLowerCase(), `outer${name}`], (funcName, funcIndex) => {
      $$1.fn[funcName] = function(margin, value) {
        const isSet = arguments.length && (funcIndex < 2 || !isBoolean(margin));
        const includeMargin = margin === true || value === true;
        if (!isSet) {
          return this.length ? get$1(this[0], name, funcIndex, includeMargin) : void 0;
        }
        return this.each((index, element) => {
          return set$1(element, index, name, funcIndex, includeMargin, margin);
        });
      };
    });
  });
  $$1.fn.hide = function() {
    return this.each((_2, element) => {
      element.style.display = "none";
    });
  };
  eachArray(["val", "html", "text"], (name, nameIndex) => {
    const props = ["value", "innerHTML", "textContent"];
    const propName = props[nameIndex];
    const get2 = ($elements) => {
      if (nameIndex === 2) {
        return map($elements, (element) => {
          return toElement(element)[propName];
        }).join("");
      }
      if (!$elements.length) {
        return void 0;
      }
      const firstElement = $elements[0];
      const $firstElement = $$1(firstElement);
      if (nameIndex === 0 && $firstElement.is("select[multiple]")) {
        return map($firstElement.find("option:checked"), (element) => element.value);
      }
      return firstElement[propName];
    };
    const set2 = (element, value) => {
      if (isUndefined(value)) {
        if (nameIndex !== 0) {
          return;
        }
        value = "";
      }
      if (nameIndex === 1 && isElement(value)) {
        value = value.outerHTML;
      }
      element[propName] = value;
    };
    $$1.fn[name] = function(value) {
      if (!arguments.length) {
        return get2(this);
      }
      return this.each((i3, element) => {
        const $element = $$1(element);
        const computedValue = isFunction(value) ? value.call(element, i3, get2($element)) : value;
        if (nameIndex === 0 && Array.isArray(computedValue)) {
          if ($element.is("select[multiple]")) {
            map($element.find("option"), (option) => {
              return option.selected = computedValue.includes(option.value);
            });
          } else {
            element.checked = computedValue.includes(element.value);
          }
        } else {
          set2(element, computedValue);
        }
      });
    };
  });
  $$1.fn.index = function(selector) {
    if (!arguments.length) {
      return this.eq(0).parent().children().get().indexOf(this[0]);
    }
    if (isString(selector)) {
      return $$1(selector).get().indexOf(this[0]);
    }
    return this.get().indexOf($$1(selector)[0]);
  };
  $$1.fn.last = function() {
    return this.eq(-1);
  };
  eachArray(["", "All", "Until"], (name, nameIndex) => {
    $$1.fn[`next${name}`] = function(selector, filter) {
      return dir(this, nameIndex, "nextElementSibling", selector, filter);
    };
  });
  $$1.fn.not = function(selector) {
    const $excludes = this.filter(selector);
    return this.map((_2, element) => {
      return $excludes.index(element) > -1 ? void 0 : element;
    });
  };
  const CustomEvent$1 = getWindow$1().CustomEvent;
  class MduiCustomEvent extends CustomEvent$1 {
    constructor(type, options) {
      super(type, options);
      this.data = options.data;
      this.namespace = options.namespace;
    }
  }
  const elementIdMap = /* @__PURE__ */ new WeakMap();
  let elementId = 1;
  const getElementId = (element) => {
    if (!elementIdMap.has(element)) {
      elementIdMap.set(element, ++elementId);
    }
    return elementIdMap.get(element);
  };
  const handlersMap = /* @__PURE__ */ new Map();
  const getHandlers = (element) => {
    const id2 = getElementId(element);
    return handlersMap.get(id2) || handlersMap.set(id2, []).get(id2);
  };
  const parse$1 = (type) => {
    const parts = type.split(".");
    return {
      type: parts[0],
      namespace: parts.slice(1).sort().join(" ")
    };
  };
  const matcherFor = (namespace) => {
    return new RegExp("(?:^| )" + namespace.replace(" ", " .* ?") + "(?: |$)");
  };
  const getMatchedHandlers = (element, type, func, selector) => {
    const event = parse$1(type);
    return getHandlers(element).filter((handler) => {
      return handler && (!event.type || handler.type === event.type) && (!event.namespace || matcherFor(event.namespace).test(handler.namespace)) && (!func || getElementId(handler.func) === getElementId(func)) && (!selector || handler.selector === selector);
    });
  };
  const add = (element, types, func, data2, selector) => {
    let useCapture = false;
    if (isObjectLike(data2) && data2.useCapture) {
      useCapture = true;
    }
    types.split(" ").forEach((type) => {
      if (!type) {
        return;
      }
      const event = parse$1(type);
      const callFn = (e3, elem) => {
        const result = func.apply(
          elem,
          // @ts-ignore
          e3.detail === null ? [e3] : [e3].concat(e3.detail)
        );
        if (result === false) {
          e3.preventDefault();
          e3.stopPropagation();
        }
      };
      const proxyFn = (e3) => {
        if (e3.namespace && !matcherFor(e3.namespace).test(event.namespace)) {
          return;
        }
        e3.data = data2;
        if (selector) {
          $$1(element).find(selector).get().reverse().forEach((elem) => {
            if (elem === e3.target || contains(elem, e3.target)) {
              callFn(e3, elem);
            }
          });
        } else {
          callFn(e3, element);
        }
      };
      const handler = {
        type: event.type,
        namespace: event.namespace,
        func,
        selector,
        id: getHandlers(element).length,
        proxy: proxyFn
      };
      getHandlers(element).push(handler);
      element.addEventListener(handler.type, proxyFn, useCapture);
    });
  };
  const remove$1 = (element, types, func, selector) => {
    const handlersInElement = getHandlers(element);
    const removeEvent = (handler) => {
      delete handlersInElement[handler.id];
      element.removeEventListener(handler.type, handler.proxy, false);
    };
    if (!types) {
      handlersInElement.forEach((handler) => {
        removeEvent(handler);
      });
    } else {
      types.split(" ").forEach((type) => {
        if (type) {
          getMatchedHandlers(element, type, func, selector).forEach((handler) => {
            removeEvent(handler);
          });
        }
      });
    }
  };
  $$1.fn.off = function(types, selector, callback) {
    if (isObjectLike(types)) {
      eachObject(types, (type, fn) => {
        this.off(type, selector, fn);
      });
      return this;
    }
    if (selector === false || isFunction(selector)) {
      callback = selector;
      selector = void 0;
    }
    if (callback === false) {
      callback = returnFalse;
    }
    return this.each(function() {
      remove$1(this, types, callback, selector);
    });
  };
  function extend(target, ...objectN) {
    eachArray(objectN, (object) => {
      eachObject(object, (prop, value) => {
        if (!isUndefined(value)) {
          target[prop] = value;
        }
      });
    });
    return target;
  }
  $$1.fn.offsetParent = function() {
    const document2 = getDocument();
    return this.map(function() {
      let offsetParent = this.offsetParent;
      while (offsetParent && $$1(offsetParent).css("position") === "static") {
        offsetParent = offsetParent.offsetParent;
      }
      return offsetParent || document2.documentElement;
    });
  };
  const floatStyle = ($element, name) => {
    return parseFloat($element.css(name));
  };
  $$1.fn.position = function() {
    if (!this.length) {
      return void 0;
    }
    const $element = this.eq(0);
    let currentOffset;
    let parentOffset = {
      left: 0,
      top: 0
    };
    if ($element.css("position") === "fixed") {
      currentOffset = $element[0].getBoundingClientRect();
    } else {
      currentOffset = $element.offset();
      const $offsetParent = $element.offsetParent();
      parentOffset = $offsetParent.offset();
      parentOffset.top += floatStyle($offsetParent, "border-top-width");
      parentOffset.left += floatStyle($offsetParent, "border-left-width");
    }
    return {
      top: currentOffset.top - parentOffset.top - floatStyle($element, "margin-top"),
      left: currentOffset.left - parentOffset.left - floatStyle($element, "margin-left")
    };
  };
  const get = (element) => {
    if (!element.getClientRects().length) {
      return { top: 0, left: 0 };
    }
    const { top, left } = element.getBoundingClientRect();
    const { pageYOffset, pageXOffset } = element.ownerDocument.defaultView;
    return {
      top: top + pageYOffset,
      left: left + pageXOffset
    };
  };
  const set = (element, value, index) => {
    const $element = $$1(element);
    const position = $element.css("position");
    if (position === "static") {
      $element.css("position", "relative");
    }
    const currentOffset = get(element);
    const currentTopString = $element.css("top");
    const currentLeftString = $element.css("left");
    let currentTop;
    let currentLeft;
    const calculatePosition = (position === "absolute" || position === "fixed") && (currentTopString + currentLeftString).includes("auto");
    if (calculatePosition) {
      const currentPosition = $element.position();
      currentTop = currentPosition.top;
      currentLeft = currentPosition.left;
    } else {
      currentTop = parseFloat(currentTopString);
      currentLeft = parseFloat(currentLeftString);
    }
    const computedValue = isFunction(value) ? value.call(element, index, extend({}, currentOffset)) : value;
    $element.css({
      top: computedValue.top != null ? computedValue.top - currentOffset.top + currentTop : void 0,
      left: computedValue.left != null ? computedValue.left - currentOffset.left + currentLeft : void 0
    });
  };
  $$1.fn.offset = function(value) {
    if (!arguments.length) {
      if (!this.length) {
        return void 0;
      }
      return get(this[0]);
    }
    return this.each(function(index) {
      set(this, value, index);
    });
  };
  $$1.fn.on = function(types, selector, data2, callback, one) {
    if (isObjectLike(types)) {
      if (!isString(selector)) {
        data2 = data2 || selector;
        selector = void 0;
      }
      eachObject(types, (type, fn) => {
        this.on(type, selector, data2, fn, one);
      });
      return this;
    }
    if (data2 == null && callback == null) {
      callback = selector;
      data2 = selector = void 0;
    } else if (callback == null) {
      if (isString(selector)) {
        callback = data2;
        data2 = void 0;
      } else {
        callback = data2;
        data2 = selector;
        selector = void 0;
      }
    }
    if (callback === false) {
      callback = returnFalse;
    } else if (!callback) {
      return this;
    }
    if (one) {
      const _this = this;
      const origCallback = callback;
      callback = function(event, ...dataN) {
        _this.off(event.type, selector, callback);
        return origCallback.call(this, event, ...dataN);
      };
    }
    return this.each(function() {
      add(this, types, callback, data2, selector);
    });
  };
  $$1.fn.one = function(types, selector, data2, callback) {
    return this.on(types, selector, data2, callback, true);
  };
  eachArray(["", "All", "Until"], (name, nameIndex) => {
    $$1.fn[`prev${name}`] = function(selector, filter) {
      const $nodes = !nameIndex ? this : $$1(this.get().reverse());
      return dir($nodes, nameIndex, "previousElementSibling", selector, filter);
    };
  });
  $$1.fn.removeAttr = function(attributeName) {
    const names = attributeName.split(" ").filter((name) => name);
    return this.each(function() {
      eachArray(names, (name) => {
        removeAttribute(this, name);
      });
    });
  };
  const removeData = (element, name) => {
    if (isUndefined(name)) {
      return removeAll(element);
    }
    const keys = isString(name) ? name.split(" ").filter((nameItem) => nameItem) : name;
    removeMultiple(element, keys);
  };
  $$1.fn.removeData = function(name) {
    return this.each((_2, element) => {
      removeData(element, name);
    });
  };
  $$1.fn.removeProp = function(name) {
    return this.each((_2, element) => {
      try {
        delete element[name];
      } catch (e3) {
      }
    });
  };
  $$1.fn.replaceWith = function(newContent) {
    this.each((index, element) => {
      let content = newContent;
      if (isFunction(content)) {
        content = content.call(element, index, element.innerHTML);
      } else if (index && !isString(content)) {
        content = $$1(content).clone();
      }
      $$1(element).before(content);
    });
    return this.remove();
  };
  $$1.fn.replaceAll = function(target) {
    return $$1(target).map((index, element) => {
      $$1(element).replaceWith(index ? this.clone() : this);
      return this.get();
    });
  };
  const param = (obj) => {
    if (!isObjectLike(obj) && !Array.isArray(obj)) {
      return "";
    }
    const args = [];
    const destructure = (key2, value) => {
      let keyTmp;
      if (isObjectLike(value)) {
        eachObject(value, (i3, v2) => {
          keyTmp = Array.isArray(value) && !isObjectLike(v2) ? "" : i3;
          destructure(`${key2}[${keyTmp}]`, v2);
        });
      } else {
        keyTmp = value == null || value === "" ? "=" : `=${encodeURIComponent(value)}`;
        args.push(encodeURIComponent(key2) + keyTmp);
      }
    };
    if (Array.isArray(obj)) {
      eachArray(obj, ({ name, value }) => {
        return destructure(name, value);
      });
    } else {
      eachObject(obj, destructure);
    }
    return args.join("&");
  };
  const formCollections = /* @__PURE__ */ new WeakMap();
  const getFormControls = (form) => {
    const nativeFormControls = [...form.elements];
    const formControls = formCollections.get(form) || [];
    const comparePosition = (a2, b2) => {
      const position = a2.compareDocumentPosition(b2);
      return position & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;
    };
    return [...nativeFormControls, ...formControls].sort(comparePosition);
  };
  const getFormControlsValue = ($elements) => {
    const result = [];
    $elements.each((_2, element) => {
      const elements = element instanceof HTMLFormElement ? getFormControls(element) : [element];
      $$1(elements).each((_3, element2) => {
        const $element = $$1(element2);
        const type = element2.type;
        const nodeName = element2.nodeName.toLowerCase();
        if (nodeName !== "fieldset" && element2.name && !element2.disabled && [
          "input",
          "select",
          "textarea",
          "keygen",
          "mdui-checkbox",
          "mdui-radio-group",
          "mdui-switch",
          "mdui-text-field",
          "mdui-select",
          "mdui-slider",
          "mdui-range-slider",
          "mdui-segmented-button-group"
        ].includes(nodeName) && !["submit", "button", "image", "reset", "file"].includes(type) && (!["radio", "checkbox"].includes(type) || element2.checked) && (!["mdui-checkbox", "mdui-switch"].includes(nodeName) || element2.checked)) {
          result.push({
            name: element2.name,
            value: $element.val()
          });
        }
      });
    });
    return result;
  };
  $$1.fn.serializeArray = function() {
    return getFormControlsValue(this).map((element) => {
      if (!Array.isArray(element.value)) {
        return element;
      }
      return element.value.map((value) => ({
        name: element.name,
        value
      }));
    }).flat();
  };
  $$1.fn.serialize = function() {
    return param(this.serializeArray());
  };
  $$1.fn.serializeObject = function() {
    const result = {};
    getFormControlsValue(this).forEach((element) => {
      const { name, value } = element;
      if (!result.hasOwnProperty(name)) {
        result[name] = value;
      } else {
        const originalValue = result[name];
        if (!Array.isArray(originalValue)) {
          result[name] = [originalValue];
        }
        if (Array.isArray(value)) {
          result[name].push(...value);
        } else {
          result[name].push(value);
        }
      }
    });
    return result;
  };
  const elementDisplay = {};
  const defaultDisplay = (nodeName) => {
    const document2 = getDocument();
    let element;
    let display;
    if (!elementDisplay[nodeName]) {
      element = createElement(nodeName);
      appendChild(document2.body, element);
      display = getStyle(element, "display");
      removeChild(element);
      if (display === "none") {
        display = "block";
      }
      elementDisplay[nodeName] = display;
    }
    return elementDisplay[nodeName];
  };
  $$1.fn.show = function() {
    return this.each((_2, element) => {
      if (element.style.display === "none") {
        element.style.display = "";
      }
      if (getStyle(element, "display") === "none") {
        element.style.display = defaultDisplay(element.nodeName);
      }
    });
  };
  $$1.fn.siblings = function(selector) {
    return this.prevAll(selector).add(this.nextAll(selector));
  };
  $$1.fn.toggle = function() {
    return this.each((_2, element) => {
      getStyle(element, "display") === "none" ? $$1(element).show() : $$1(element).hide();
    });
  };
  $$1.fn.trigger = function(name, detail = null, options) {
    const { type, namespace } = parse$1(name);
    const event = new MduiCustomEvent(type, {
      detail,
      data: null,
      namespace,
      bubbles: true,
      cancelable: false,
      composed: true,
      ...options
    });
    return this.each((_2, element) => {
      element.dispatchEvent(event);
    });
  };
  const ajaxStart = "ajaxStart";
  const ajaxSuccess = "ajaxSuccess";
  const ajaxError = "ajaxError";
  const ajaxComplete = "ajaxComplete";
  const globalOptions = {};
  const isQueryStringData = (method) => {
    return ["GET", "HEAD"].includes(method);
  };
  const appendQuery = (url, query) => {
    return `${url}&${query}`.replace(/[&?]{1,2}/, "?");
  };
  const isCrossDomain = (url) => {
    const window2 = getWindow$1();
    return /^([\w-]+:)?\/\/([^/]+)/.test(url) && RegExp.$2 !== window2.location.host;
  };
  const isHttpStatusSuccess = (status) => {
    return status >= 200 && status < 300 || [0, 304].includes(status);
  };
  const mergeOptions = (options) => {
    const defaults = {
      url: "",
      method: "GET",
      data: "",
      processData: true,
      async: true,
      cache: true,
      username: "",
      password: "",
      headers: {},
      xhrFields: {},
      statusCode: {},
      dataType: "",
      contentType: "application/x-www-form-urlencoded",
      timeout: 0,
      global: true
    };
    eachObject(globalOptions, (key2, value) => {
      const callbacks = [
        "beforeSend",
        "success",
        "error",
        "complete",
        "statusCode"
      ];
      if (!callbacks.includes(key2) && !isUndefined(value)) {
        defaults[key2] = value;
      }
    });
    return extend({}, defaults, options);
  };
  const ajax = (options) => {
    const document2 = getDocument();
    const window2 = getWindow$1();
    let isCanceled = false;
    const eventParams = {};
    const successEventParams = {};
    const mergedOptions = mergeOptions(options);
    const method = mergedOptions.method.toUpperCase();
    let { data: data2, url } = mergedOptions;
    url = url || window2.location.toString();
    const { processData, async, cache, username, password, headers, xhrFields, statusCode, dataType, contentType, timeout, global: global2 } = mergedOptions;
    const isMethodQueryString = isQueryStringData(method);
    if (data2 && (isMethodQueryString || processData) && !isString(data2) && !(data2 instanceof ArrayBuffer) && !(data2 instanceof Blob) && !(data2 instanceof Document) && !(data2 instanceof FormData)) {
      data2 = param(data2);
    }
    if (data2 && isMethodQueryString) {
      url = appendQuery(url, data2);
      data2 = null;
    }
    const trigger = (event, callback, ...args) => {
      if (global2) {
        $$1(document2).trigger(event, callback === "success" ? successEventParams : eventParams);
      }
      let resultGlobal;
      let resultCustom;
      if (callback in globalOptions) {
        resultGlobal = globalOptions[callback](...args);
      }
      if (mergedOptions[callback]) {
        resultCustom = mergedOptions[callback](...args);
      }
      if (callback === "beforeSend" && [resultGlobal, resultCustom].includes(false)) {
        isCanceled = true;
      }
    };
    const XHR = () => {
      let textStatus;
      return new Promise((resolve, reject) => {
        const doReject = (reason) => {
          return reject(new Error(reason));
        };
        if (isMethodQueryString && !cache) {
          url = appendQuery(url, `_=${Date.now()}`);
        }
        const xhr = new XMLHttpRequest();
        xhr.open(method, url, async, username, password);
        if (contentType || data2 && !isMethodQueryString && contentType !== false) {
          xhr.setRequestHeader("Content-Type", contentType);
        }
        if (dataType === "json") {
          xhr.setRequestHeader("Accept", "application/json, text/javascript");
        }
        eachObject(headers, (key2, value) => {
          if (!isUndefined(value)) {
            xhr.setRequestHeader(key2, value + "");
          }
        });
        if (!isCrossDomain(url)) {
          xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        }
        eachObject(xhrFields, (key2, value) => {
          xhr[key2] = value;
        });
        eventParams.xhr = successEventParams.xhr = xhr;
        eventParams.options = successEventParams.options = mergedOptions;
        let xhrTimeout;
        xhr.onload = () => {
          if (xhrTimeout) {
            clearTimeout(xhrTimeout);
          }
          const isSuccess = isHttpStatusSuccess(xhr.status);
          let responseData = void 0;
          if (isSuccess) {
            textStatus = xhr.status === 204 || method === "HEAD" ? "nocontent" : xhr.status === 304 ? "notmodified" : "success";
            if (dataType === "json" || !dataType && (xhr.getResponseHeader("content-type") || "").includes("json")) {
              try {
                responseData = method === "HEAD" ? void 0 : JSON.parse(xhr.responseText);
                successEventParams.response = responseData;
              } catch (err) {
                textStatus = "parsererror";
                trigger(ajaxError, "error", xhr, textStatus);
                doReject(textStatus);
              }
              if (textStatus !== "parsererror") {
                trigger(ajaxSuccess, "success", responseData, textStatus, xhr);
                resolve(responseData);
              }
            } else {
              responseData = method === "HEAD" ? void 0 : xhr.responseType === "text" || xhr.responseType === "" ? xhr.responseText : xhr.response;
              successEventParams.response = responseData;
              trigger(ajaxSuccess, "success", responseData, textStatus, xhr);
              resolve(responseData);
            }
          } else {
            textStatus = "error";
            trigger(ajaxError, "error", xhr, textStatus);
            doReject(textStatus);
          }
          eachArray([globalOptions.statusCode ?? {}, statusCode], (func) => {
            if (func[xhr.status]) {
              if (isSuccess) {
                func[xhr.status](responseData, textStatus, xhr);
              } else {
                func[xhr.status](xhr, textStatus);
              }
            }
          });
          trigger(ajaxComplete, "complete", xhr, textStatus);
        };
        xhr.onerror = () => {
          if (xhrTimeout) {
            clearTimeout(xhrTimeout);
          }
          trigger(ajaxError, "error", xhr, xhr.statusText);
          trigger(ajaxComplete, "complete", xhr, "error");
          doReject(xhr.statusText);
        };
        xhr.onabort = () => {
          let statusText = "abort";
          if (xhrTimeout) {
            statusText = "timeout";
            clearTimeout(xhrTimeout);
          }
          trigger(ajaxError, "error", xhr, statusText);
          trigger(ajaxComplete, "complete", xhr, statusText);
          doReject(statusText);
        };
        trigger(ajaxStart, "beforeSend", xhr, mergedOptions);
        if (isCanceled) {
          return doReject("cancel");
        }
        if (timeout > 0) {
          xhrTimeout = window2.setTimeout(() => xhr.abort(), timeout);
        }
        xhr.send(data2);
      });
    };
    return XHR();
  };
  $$1.ajax = ajax;
  const ajaxSetup = (options) => {
    return extend(globalOptions, options);
  };
  $$1.ajaxSetup = ajaxSetup;
  $$1.contains = contains;
  function data(element, key2, value) {
    if (isObjectLike(key2)) {
      setAll(element, key2);
      return key2;
    }
    if (!isUndefined(value)) {
      set$2(element, key2, value);
      return value;
    }
    if (isUndefined(key2)) {
      return getAll(element);
    }
    return get$2(element, key2);
  }
  $$1.data = data;
  $$1.each = each;
  $$1.extend = function(target, ...objectN) {
    if (!objectN.length) {
      eachObject(target, (prop, value) => {
        this[prop] = value;
      });
      return this;
    }
    return extend(target, ...objectN);
  };
  $$1.map = map;
  $$1.merge = merge;
  $$1.param = param;
  $$1.removeData = removeData;
  $$1.unique = unique;
  function __decorate(decorators, target, key2, desc) {
    var c3 = arguments.length, r3 = c3 < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key2) : desc, d2;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r3 = Reflect.decorate(decorators, target, key2, desc);
    else for (var i3 = decorators.length - 1; i3 >= 0; i3--) if (d2 = decorators[i3]) r3 = (c3 < 3 ? d2(r3) : c3 > 3 ? d2(target, key2, r3) : d2(target, key2)) || r3;
    return c3 > 3 && r3 && Object.defineProperty(target, key2, r3), r3;
  }
  typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
    var e3 = new Error(message);
    return e3.name = "SuppressedError", e3.error = error, e3.suppressed = suppressed, e3;
  };
  /**
   * @license
   * Copyright 2019 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const t$4 = globalThis, e$7 = t$4.ShadowRoot && (void 0 === t$4.ShadyCSS || t$4.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, s$3 = Symbol(), o$a = /* @__PURE__ */ new WeakMap();
  let n$8 = class n {
    constructor(t2, e3, o2) {
      if (this._$cssResult$ = true, o2 !== s$3) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
      this.cssText = t2, this.t = e3;
    }
    get styleSheet() {
      let t2 = this.o;
      const s2 = this.t;
      if (e$7 && void 0 === t2) {
        const e3 = void 0 !== s2 && 1 === s2.length;
        e3 && (t2 = o$a.get(s2)), void 0 === t2 && ((this.o = t2 = new CSSStyleSheet()).replaceSync(this.cssText), e3 && o$a.set(s2, t2));
      }
      return t2;
    }
    toString() {
      return this.cssText;
    }
  };
  const r$6 = (t2) => new n$8("string" == typeof t2 ? t2 : t2 + "", void 0, s$3), i$7 = (t2, ...e3) => {
    const o2 = 1 === t2.length ? t2[0] : e3.reduce((e4, s2, o3) => e4 + ((t3) => {
      if (true === t3._$cssResult$) return t3.cssText;
      if ("number" == typeof t3) return t3;
      throw Error("Value passed to 'css' function must be a 'css' function result: " + t3 + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
    })(s2) + t2[o3 + 1], t2[0]);
    return new n$8(o2, t2, s$3);
  }, S$1 = (s2, o2) => {
    if (e$7) s2.adoptedStyleSheets = o2.map((t2) => t2 instanceof CSSStyleSheet ? t2 : t2.styleSheet);
    else for (const e3 of o2) {
      const o3 = document.createElement("style"), n3 = t$4.litNonce;
      void 0 !== n3 && o3.setAttribute("nonce", n3), o3.textContent = e3.cssText, s2.appendChild(o3);
    }
  }, c$5 = e$7 ? (t2) => t2 : (t2) => t2 instanceof CSSStyleSheet ? ((t3) => {
    let e3 = "";
    for (const s2 of t3.cssRules) e3 += s2.cssText;
    return r$6(e3);
  })(t2) : t2;
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const { is: i$6, defineProperty: e$6, getOwnPropertyDescriptor: r$5, getOwnPropertyNames: h$4, getOwnPropertySymbols: o$9, getPrototypeOf: n$7 } = Object, a$1 = globalThis, c$4 = a$1.trustedTypes, l$2 = c$4 ? c$4.emptyScript : "", p$1 = a$1.reactiveElementPolyfillSupport, d$1 = (t2, s2) => t2, u$2 = { toAttribute(t2, s2) {
    switch (s2) {
      case Boolean:
        t2 = t2 ? l$2 : null;
        break;
      case Object:
      case Array:
        t2 = null == t2 ? t2 : JSON.stringify(t2);
    }
    return t2;
  }, fromAttribute(t2, s2) {
    let i3 = t2;
    switch (s2) {
      case Boolean:
        i3 = null !== t2;
        break;
      case Number:
        i3 = null === t2 ? null : Number(t2);
        break;
      case Object:
      case Array:
        try {
          i3 = JSON.parse(t2);
        } catch (t3) {
          i3 = null;
        }
    }
    return i3;
  } }, f$3 = (t2, s2) => !i$6(t2, s2), y$1 = { attribute: true, type: String, converter: u$2, reflect: false, hasChanged: f$3 };
  Symbol.metadata ?? (Symbol.metadata = Symbol("metadata")), a$1.litPropertyMetadata ?? (a$1.litPropertyMetadata = /* @__PURE__ */ new WeakMap());
  class b extends HTMLElement {
    static addInitializer(t2) {
      this._$Ei(), (this.l ?? (this.l = [])).push(t2);
    }
    static get observedAttributes() {
      return this.finalize(), this._$Eh && [...this._$Eh.keys()];
    }
    static createProperty(t2, s2 = y$1) {
      if (s2.state && (s2.attribute = false), this._$Ei(), this.elementProperties.set(t2, s2), !s2.noAccessor) {
        const i3 = Symbol(), r3 = this.getPropertyDescriptor(t2, i3, s2);
        void 0 !== r3 && e$6(this.prototype, t2, r3);
      }
    }
    static getPropertyDescriptor(t2, s2, i3) {
      const { get: e3, set: h2 } = r$5(this.prototype, t2) ?? { get() {
        return this[s2];
      }, set(t3) {
        this[s2] = t3;
      } };
      return { get() {
        return e3 == null ? void 0 : e3.call(this);
      }, set(s3) {
        const r3 = e3 == null ? void 0 : e3.call(this);
        h2.call(this, s3), this.requestUpdate(t2, r3, i3);
      }, configurable: true, enumerable: true };
    }
    static getPropertyOptions(t2) {
      return this.elementProperties.get(t2) ?? y$1;
    }
    static _$Ei() {
      if (this.hasOwnProperty(d$1("elementProperties"))) return;
      const t2 = n$7(this);
      t2.finalize(), void 0 !== t2.l && (this.l = [...t2.l]), this.elementProperties = new Map(t2.elementProperties);
    }
    static finalize() {
      if (this.hasOwnProperty(d$1("finalized"))) return;
      if (this.finalized = true, this._$Ei(), this.hasOwnProperty(d$1("properties"))) {
        const t3 = this.properties, s2 = [...h$4(t3), ...o$9(t3)];
        for (const i3 of s2) this.createProperty(i3, t3[i3]);
      }
      const t2 = this[Symbol.metadata];
      if (null !== t2) {
        const s2 = litPropertyMetadata.get(t2);
        if (void 0 !== s2) for (const [t3, i3] of s2) this.elementProperties.set(t3, i3);
      }
      this._$Eh = /* @__PURE__ */ new Map();
      for (const [t3, s2] of this.elementProperties) {
        const i3 = this._$Eu(t3, s2);
        void 0 !== i3 && this._$Eh.set(i3, t3);
      }
      this.elementStyles = this.finalizeStyles(this.styles);
    }
    static finalizeStyles(s2) {
      const i3 = [];
      if (Array.isArray(s2)) {
        const e3 = new Set(s2.flat(1 / 0).reverse());
        for (const s3 of e3) i3.unshift(c$5(s3));
      } else void 0 !== s2 && i3.push(c$5(s2));
      return i3;
    }
    static _$Eu(t2, s2) {
      const i3 = s2.attribute;
      return false === i3 ? void 0 : "string" == typeof i3 ? i3 : "string" == typeof t2 ? t2.toLowerCase() : void 0;
    }
    constructor() {
      super(), this._$Ep = void 0, this.isUpdatePending = false, this.hasUpdated = false, this._$Em = null, this._$Ev();
    }
    _$Ev() {
      var _a2;
      this._$ES = new Promise((t2) => this.enableUpdating = t2), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), (_a2 = this.constructor.l) == null ? void 0 : _a2.forEach((t2) => t2(this));
    }
    addController(t2) {
      var _a2;
      (this._$EO ?? (this._$EO = /* @__PURE__ */ new Set())).add(t2), void 0 !== this.renderRoot && this.isConnected && ((_a2 = t2.hostConnected) == null ? void 0 : _a2.call(t2));
    }
    removeController(t2) {
      var _a2;
      (_a2 = this._$EO) == null ? void 0 : _a2.delete(t2);
    }
    _$E_() {
      const t2 = /* @__PURE__ */ new Map(), s2 = this.constructor.elementProperties;
      for (const i3 of s2.keys()) this.hasOwnProperty(i3) && (t2.set(i3, this[i3]), delete this[i3]);
      t2.size > 0 && (this._$Ep = t2);
    }
    createRenderRoot() {
      const t2 = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);
      return S$1(t2, this.constructor.elementStyles), t2;
    }
    connectedCallback() {
      var _a2;
      this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this.enableUpdating(true), (_a2 = this._$EO) == null ? void 0 : _a2.forEach((t2) => {
        var _a3;
        return (_a3 = t2.hostConnected) == null ? void 0 : _a3.call(t2);
      });
    }
    enableUpdating(t2) {
    }
    disconnectedCallback() {
      var _a2;
      (_a2 = this._$EO) == null ? void 0 : _a2.forEach((t2) => {
        var _a3;
        return (_a3 = t2.hostDisconnected) == null ? void 0 : _a3.call(t2);
      });
    }
    attributeChangedCallback(t2, s2, i3) {
      this._$AK(t2, i3);
    }
    _$EC(t2, s2) {
      var _a2;
      const i3 = this.constructor.elementProperties.get(t2), e3 = this.constructor._$Eu(t2, i3);
      if (void 0 !== e3 && true === i3.reflect) {
        const r3 = (void 0 !== ((_a2 = i3.converter) == null ? void 0 : _a2.toAttribute) ? i3.converter : u$2).toAttribute(s2, i3.type);
        this._$Em = t2, null == r3 ? this.removeAttribute(e3) : this.setAttribute(e3, r3), this._$Em = null;
      }
    }
    _$AK(t2, s2) {
      var _a2;
      const i3 = this.constructor, e3 = i3._$Eh.get(t2);
      if (void 0 !== e3 && this._$Em !== e3) {
        const t3 = i3.getPropertyOptions(e3), r3 = "function" == typeof t3.converter ? { fromAttribute: t3.converter } : void 0 !== ((_a2 = t3.converter) == null ? void 0 : _a2.fromAttribute) ? t3.converter : u$2;
        this._$Em = e3, this[e3] = r3.fromAttribute(s2, t3.type), this._$Em = null;
      }
    }
    requestUpdate(t2, s2, i3) {
      if (void 0 !== t2) {
        if (i3 ?? (i3 = this.constructor.getPropertyOptions(t2)), !(i3.hasChanged ?? f$3)(this[t2], s2)) return;
        this.P(t2, s2, i3);
      }
      false === this.isUpdatePending && (this._$ES = this._$ET());
    }
    P(t2, s2, i3) {
      this._$AL.has(t2) || this._$AL.set(t2, s2), true === i3.reflect && this._$Em !== t2 && (this._$Ej ?? (this._$Ej = /* @__PURE__ */ new Set())).add(t2);
    }
    async _$ET() {
      this.isUpdatePending = true;
      try {
        await this._$ES;
      } catch (t3) {
        Promise.reject(t3);
      }
      const t2 = this.scheduleUpdate();
      return null != t2 && await t2, !this.isUpdatePending;
    }
    scheduleUpdate() {
      return this.performUpdate();
    }
    performUpdate() {
      var _a2;
      if (!this.isUpdatePending) return;
      if (!this.hasUpdated) {
        if (this.renderRoot ?? (this.renderRoot = this.createRenderRoot()), this._$Ep) {
          for (const [t4, s3] of this._$Ep) this[t4] = s3;
          this._$Ep = void 0;
        }
        const t3 = this.constructor.elementProperties;
        if (t3.size > 0) for (const [s3, i3] of t3) true !== i3.wrapped || this._$AL.has(s3) || void 0 === this[s3] || this.P(s3, this[s3], i3);
      }
      let t2 = false;
      const s2 = this._$AL;
      try {
        t2 = this.shouldUpdate(s2), t2 ? (this.willUpdate(s2), (_a2 = this._$EO) == null ? void 0 : _a2.forEach((t3) => {
          var _a3;
          return (_a3 = t3.hostUpdate) == null ? void 0 : _a3.call(t3);
        }), this.update(s2)) : this._$EU();
      } catch (s3) {
        throw t2 = false, this._$EU(), s3;
      }
      t2 && this._$AE(s2);
    }
    willUpdate(t2) {
    }
    _$AE(t2) {
      var _a2;
      (_a2 = this._$EO) == null ? void 0 : _a2.forEach((t3) => {
        var _a3;
        return (_a3 = t3.hostUpdated) == null ? void 0 : _a3.call(t3);
      }), this.hasUpdated || (this.hasUpdated = true, this.firstUpdated(t2)), this.updated(t2);
    }
    _$EU() {
      this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = false;
    }
    get updateComplete() {
      return this.getUpdateComplete();
    }
    getUpdateComplete() {
      return this._$ES;
    }
    shouldUpdate(t2) {
      return true;
    }
    update(t2) {
      this._$Ej && (this._$Ej = this._$Ej.forEach((t3) => this._$EC(t3, this[t3]))), this._$EU();
    }
    updated(t2) {
    }
    firstUpdated(t2) {
    }
  }
  b.elementStyles = [], b.shadowRootOptions = { mode: "open" }, b[d$1("elementProperties")] = /* @__PURE__ */ new Map(), b[d$1("finalized")] = /* @__PURE__ */ new Map(), p$1 == null ? void 0 : p$1({ ReactiveElement: b }), (a$1.reactiveElementVersions ?? (a$1.reactiveElementVersions = [])).push("2.0.4");
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const t$3 = globalThis, i$5 = t$3.trustedTypes, s$2 = i$5 ? i$5.createPolicy("lit-html", { createHTML: (t2) => t2 }) : void 0, e$5 = "$lit$", h$3 = `lit$${Math.random().toFixed(9).slice(2)}$`, o$8 = "?" + h$3, n$6 = `<${o$8}>`, r$4 = document, l$1 = () => r$4.createComment(""), c$3 = (t2) => null === t2 || "object" != typeof t2 && "function" != typeof t2, a = Array.isArray, u$1 = (t2) => a(t2) || "function" == typeof (t2 == null ? void 0 : t2[Symbol.iterator]), d = "[ 	\n\f\r]", f$2 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, v = /-->/g, _ = />/g, m$2 = RegExp(`>|${d}(?:([^\\s"'>=/]+)(${d}*=${d}*(?:[^ 	
\f\r"'\`<>=]|("|')|))|$)`, "g"), p = /'/g, g = /"/g, $ = /^(?:script|style|textarea|title)$/i, y = (t2) => (i3, ...s2) => ({ _$litType$: t2, strings: i3, values: s2 }), x = y(1), T = Symbol.for("lit-noChange"), E = Symbol.for("lit-nothing"), A = /* @__PURE__ */ new WeakMap(), C = r$4.createTreeWalker(r$4, 129);
  function P(t2, i3) {
    if (!a(t2) || !t2.hasOwnProperty("raw")) throw Error("invalid template strings array");
    return void 0 !== s$2 ? s$2.createHTML(i3) : i3;
  }
  const V = (t2, i3) => {
    const s2 = t2.length - 1, o2 = [];
    let r3, l2 = 2 === i3 ? "<svg>" : 3 === i3 ? "<math>" : "", c3 = f$2;
    for (let i4 = 0; i4 < s2; i4++) {
      const s3 = t2[i4];
      let a2, u2, d2 = -1, y2 = 0;
      for (; y2 < s3.length && (c3.lastIndex = y2, u2 = c3.exec(s3), null !== u2); ) y2 = c3.lastIndex, c3 === f$2 ? "!--" === u2[1] ? c3 = v : void 0 !== u2[1] ? c3 = _ : void 0 !== u2[2] ? ($.test(u2[2]) && (r3 = RegExp("</" + u2[2], "g")), c3 = m$2) : void 0 !== u2[3] && (c3 = m$2) : c3 === m$2 ? ">" === u2[0] ? (c3 = r3 ?? f$2, d2 = -1) : void 0 === u2[1] ? d2 = -2 : (d2 = c3.lastIndex - u2[2].length, a2 = u2[1], c3 = void 0 === u2[3] ? m$2 : '"' === u2[3] ? g : p) : c3 === g || c3 === p ? c3 = m$2 : c3 === v || c3 === _ ? c3 = f$2 : (c3 = m$2, r3 = void 0);
      const x2 = c3 === m$2 && t2[i4 + 1].startsWith("/>") ? " " : "";
      l2 += c3 === f$2 ? s3 + n$6 : d2 >= 0 ? (o2.push(a2), s3.slice(0, d2) + e$5 + s3.slice(d2) + h$3 + x2) : s3 + h$3 + (-2 === d2 ? i4 : x2);
    }
    return [P(t2, l2 + (t2[s2] || "<?>") + (2 === i3 ? "</svg>" : 3 === i3 ? "</math>" : "")), o2];
  };
  class N {
    constructor({ strings: t2, _$litType$: s2 }, n3) {
      let r3;
      this.parts = [];
      let c3 = 0, a2 = 0;
      const u2 = t2.length - 1, d2 = this.parts, [f2, v2] = V(t2, s2);
      if (this.el = N.createElement(f2, n3), C.currentNode = this.el.content, 2 === s2 || 3 === s2) {
        const t3 = this.el.content.firstChild;
        t3.replaceWith(...t3.childNodes);
      }
      for (; null !== (r3 = C.nextNode()) && d2.length < u2; ) {
        if (1 === r3.nodeType) {
          if (r3.hasAttributes()) for (const t3 of r3.getAttributeNames()) if (t3.endsWith(e$5)) {
            const i3 = v2[a2++], s3 = r3.getAttribute(t3).split(h$3), e3 = /([.?@])?(.*)/.exec(i3);
            d2.push({ type: 1, index: c3, name: e3[2], strings: s3, ctor: "." === e3[1] ? H : "?" === e3[1] ? I : "@" === e3[1] ? L : k }), r3.removeAttribute(t3);
          } else t3.startsWith(h$3) && (d2.push({ type: 6, index: c3 }), r3.removeAttribute(t3));
          if ($.test(r3.tagName)) {
            const t3 = r3.textContent.split(h$3), s3 = t3.length - 1;
            if (s3 > 0) {
              r3.textContent = i$5 ? i$5.emptyScript : "";
              for (let i3 = 0; i3 < s3; i3++) r3.append(t3[i3], l$1()), C.nextNode(), d2.push({ type: 2, index: ++c3 });
              r3.append(t3[s3], l$1());
            }
          }
        } else if (8 === r3.nodeType) if (r3.data === o$8) d2.push({ type: 2, index: c3 });
        else {
          let t3 = -1;
          for (; -1 !== (t3 = r3.data.indexOf(h$3, t3 + 1)); ) d2.push({ type: 7, index: c3 }), t3 += h$3.length - 1;
        }
        c3++;
      }
    }
    static createElement(t2, i3) {
      const s2 = r$4.createElement("template");
      return s2.innerHTML = t2, s2;
    }
  }
  function S(t2, i3, s2 = t2, e3) {
    var _a2, _b;
    if (i3 === T) return i3;
    let h2 = void 0 !== e3 ? (_a2 = s2._$Co) == null ? void 0 : _a2[e3] : s2._$Cl;
    const o2 = c$3(i3) ? void 0 : i3._$litDirective$;
    return (h2 == null ? void 0 : h2.constructor) !== o2 && ((_b = h2 == null ? void 0 : h2._$AO) == null ? void 0 : _b.call(h2, false), void 0 === o2 ? h2 = void 0 : (h2 = new o2(t2), h2._$AT(t2, s2, e3)), void 0 !== e3 ? (s2._$Co ?? (s2._$Co = []))[e3] = h2 : s2._$Cl = h2), void 0 !== h2 && (i3 = S(t2, h2._$AS(t2, i3.values), h2, e3)), i3;
  }
  class M {
    constructor(t2, i3) {
      this._$AV = [], this._$AN = void 0, this._$AD = t2, this._$AM = i3;
    }
    get parentNode() {
      return this._$AM.parentNode;
    }
    get _$AU() {
      return this._$AM._$AU;
    }
    u(t2) {
      const { el: { content: i3 }, parts: s2 } = this._$AD, e3 = ((t2 == null ? void 0 : t2.creationScope) ?? r$4).importNode(i3, true);
      C.currentNode = e3;
      let h2 = C.nextNode(), o2 = 0, n3 = 0, l2 = s2[0];
      for (; void 0 !== l2; ) {
        if (o2 === l2.index) {
          let i4;
          2 === l2.type ? i4 = new R(h2, h2.nextSibling, this, t2) : 1 === l2.type ? i4 = new l2.ctor(h2, l2.name, l2.strings, this, t2) : 6 === l2.type && (i4 = new z$1(h2, this, t2)), this._$AV.push(i4), l2 = s2[++n3];
        }
        o2 !== (l2 == null ? void 0 : l2.index) && (h2 = C.nextNode(), o2++);
      }
      return C.currentNode = r$4, e3;
    }
    p(t2) {
      let i3 = 0;
      for (const s2 of this._$AV) void 0 !== s2 && (void 0 !== s2.strings ? (s2._$AI(t2, s2, i3), i3 += s2.strings.length - 2) : s2._$AI(t2[i3])), i3++;
    }
  }
  class R {
    get _$AU() {
      var _a2;
      return ((_a2 = this._$AM) == null ? void 0 : _a2._$AU) ?? this._$Cv;
    }
    constructor(t2, i3, s2, e3) {
      this.type = 2, this._$AH = E, this._$AN = void 0, this._$AA = t2, this._$AB = i3, this._$AM = s2, this.options = e3, this._$Cv = (e3 == null ? void 0 : e3.isConnected) ?? true;
    }
    get parentNode() {
      let t2 = this._$AA.parentNode;
      const i3 = this._$AM;
      return void 0 !== i3 && 11 === (t2 == null ? void 0 : t2.nodeType) && (t2 = i3.parentNode), t2;
    }
    get startNode() {
      return this._$AA;
    }
    get endNode() {
      return this._$AB;
    }
    _$AI(t2, i3 = this) {
      t2 = S(this, t2, i3), c$3(t2) ? t2 === E || null == t2 || "" === t2 ? (this._$AH !== E && this._$AR(), this._$AH = E) : t2 !== this._$AH && t2 !== T && this._(t2) : void 0 !== t2._$litType$ ? this.$(t2) : void 0 !== t2.nodeType ? this.T(t2) : u$1(t2) ? this.k(t2) : this._(t2);
    }
    O(t2) {
      return this._$AA.parentNode.insertBefore(t2, this._$AB);
    }
    T(t2) {
      this._$AH !== t2 && (this._$AR(), this._$AH = this.O(t2));
    }
    _(t2) {
      this._$AH !== E && c$3(this._$AH) ? this._$AA.nextSibling.data = t2 : this.T(r$4.createTextNode(t2)), this._$AH = t2;
    }
    $(t2) {
      var _a2;
      const { values: i3, _$litType$: s2 } = t2, e3 = "number" == typeof s2 ? this._$AC(t2) : (void 0 === s2.el && (s2.el = N.createElement(P(s2.h, s2.h[0]), this.options)), s2);
      if (((_a2 = this._$AH) == null ? void 0 : _a2._$AD) === e3) this._$AH.p(i3);
      else {
        const t3 = new M(e3, this), s3 = t3.u(this.options);
        t3.p(i3), this.T(s3), this._$AH = t3;
      }
    }
    _$AC(t2) {
      let i3 = A.get(t2.strings);
      return void 0 === i3 && A.set(t2.strings, i3 = new N(t2)), i3;
    }
    k(t2) {
      a(this._$AH) || (this._$AH = [], this._$AR());
      const i3 = this._$AH;
      let s2, e3 = 0;
      for (const h2 of t2) e3 === i3.length ? i3.push(s2 = new R(this.O(l$1()), this.O(l$1()), this, this.options)) : s2 = i3[e3], s2._$AI(h2), e3++;
      e3 < i3.length && (this._$AR(s2 && s2._$AB.nextSibling, e3), i3.length = e3);
    }
    _$AR(t2 = this._$AA.nextSibling, i3) {
      var _a2;
      for ((_a2 = this._$AP) == null ? void 0 : _a2.call(this, false, true, i3); t2 && t2 !== this._$AB; ) {
        const i4 = t2.nextSibling;
        t2.remove(), t2 = i4;
      }
    }
    setConnected(t2) {
      var _a2;
      void 0 === this._$AM && (this._$Cv = t2, (_a2 = this._$AP) == null ? void 0 : _a2.call(this, t2));
    }
  }
  class k {
    get tagName() {
      return this.element.tagName;
    }
    get _$AU() {
      return this._$AM._$AU;
    }
    constructor(t2, i3, s2, e3, h2) {
      this.type = 1, this._$AH = E, this._$AN = void 0, this.element = t2, this.name = i3, this._$AM = e3, this.options = h2, s2.length > 2 || "" !== s2[0] || "" !== s2[1] ? (this._$AH = Array(s2.length - 1).fill(new String()), this.strings = s2) : this._$AH = E;
    }
    _$AI(t2, i3 = this, s2, e3) {
      const h2 = this.strings;
      let o2 = false;
      if (void 0 === h2) t2 = S(this, t2, i3, 0), o2 = !c$3(t2) || t2 !== this._$AH && t2 !== T, o2 && (this._$AH = t2);
      else {
        const e4 = t2;
        let n3, r3;
        for (t2 = h2[0], n3 = 0; n3 < h2.length - 1; n3++) r3 = S(this, e4[s2 + n3], i3, n3), r3 === T && (r3 = this._$AH[n3]), o2 || (o2 = !c$3(r3) || r3 !== this._$AH[n3]), r3 === E ? t2 = E : t2 !== E && (t2 += (r3 ?? "") + h2[n3 + 1]), this._$AH[n3] = r3;
      }
      o2 && !e3 && this.j(t2);
    }
    j(t2) {
      t2 === E ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t2 ?? "");
    }
  }
  class H extends k {
    constructor() {
      super(...arguments), this.type = 3;
    }
    j(t2) {
      this.element[this.name] = t2 === E ? void 0 : t2;
    }
  }
  class I extends k {
    constructor() {
      super(...arguments), this.type = 4;
    }
    j(t2) {
      this.element.toggleAttribute(this.name, !!t2 && t2 !== E);
    }
  }
  class L extends k {
    constructor(t2, i3, s2, e3, h2) {
      super(t2, i3, s2, e3, h2), this.type = 5;
    }
    _$AI(t2, i3 = this) {
      if ((t2 = S(this, t2, i3, 0) ?? E) === T) return;
      const s2 = this._$AH, e3 = t2 === E && s2 !== E || t2.capture !== s2.capture || t2.once !== s2.once || t2.passive !== s2.passive, h2 = t2 !== E && (s2 === E || e3);
      e3 && this.element.removeEventListener(this.name, this, s2), h2 && this.element.addEventListener(this.name, this, t2), this._$AH = t2;
    }
    handleEvent(t2) {
      var _a2;
      "function" == typeof this._$AH ? this._$AH.call(((_a2 = this.options) == null ? void 0 : _a2.host) ?? this.element, t2) : this._$AH.handleEvent(t2);
    }
  }
  let z$1 = class z {
    constructor(t2, i3, s2) {
      this.element = t2, this.type = 6, this._$AN = void 0, this._$AM = i3, this.options = s2;
    }
    get _$AU() {
      return this._$AM._$AU;
    }
    _$AI(t2) {
      S(this, t2);
    }
  };
  const j = t$3.litHtmlPolyfillSupport;
  j == null ? void 0 : j(N, R), (t$3.litHtmlVersions ?? (t$3.litHtmlVersions = [])).push("3.2.1");
  const B = (t2, i3, s2) => {
    const e3 = (s2 == null ? void 0 : s2.renderBefore) ?? i3;
    let h2 = e3._$litPart$;
    if (void 0 === h2) {
      const t3 = (s2 == null ? void 0 : s2.renderBefore) ?? null;
      e3._$litPart$ = h2 = new R(i3.insertBefore(l$1(), t3), t3, void 0, s2 ?? {});
    }
    return h2._$AI(t2), h2;
  };
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  let r$3 = class r extends b {
    constructor() {
      super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
    }
    createRenderRoot() {
      var _a2;
      const t2 = super.createRenderRoot();
      return (_a2 = this.renderOptions).renderBefore ?? (_a2.renderBefore = t2.firstChild), t2;
    }
    update(t2) {
      const s2 = this.render();
      this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t2), this._$Do = B(s2, this.renderRoot, this.renderOptions);
    }
    connectedCallback() {
      var _a2;
      super.connectedCallback(), (_a2 = this._$Do) == null ? void 0 : _a2.setConnected(true);
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback(), (_a2 = this._$Do) == null ? void 0 : _a2.setConnected(false);
    }
    render() {
      return T;
    }
  };
  r$3._$litElement$ = true, r$3["finalized"] = true, (_a = globalThis.litElementHydrateSupport) == null ? void 0 : _a.call(globalThis, { LitElement: r$3 });
  const i$4 = globalThis.litElementPolyfillSupport;
  i$4 == null ? void 0 : i$4({ LitElement: r$3 });
  (globalThis.litElementVersions ?? (globalThis.litElementVersions = [])).push("4.1.1");
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const t$2 = (t2) => (e3, o2) => {
    void 0 !== o2 ? o2.addInitializer(() => {
      customElements.define(t2, e3);
    }) : customElements.define(t2, e3);
  };
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const o$7 = { attribute: true, type: String, converter: u$2, reflect: false, hasChanged: f$3 }, r$2 = (t2 = o$7, e3, r3) => {
    const { kind: n3, metadata: i3 } = r3;
    let s2 = globalThis.litPropertyMetadata.get(i3);
    if (void 0 === s2 && globalThis.litPropertyMetadata.set(i3, s2 = /* @__PURE__ */ new Map()), s2.set(r3.name, t2), "accessor" === n3) {
      const { name: o2 } = r3;
      return { set(r4) {
        const n4 = e3.get.call(this);
        e3.set.call(this, r4), this.requestUpdate(o2, n4, t2);
      }, init(e4) {
        return void 0 !== e4 && this.P(o2, void 0, t2), e4;
      } };
    }
    if ("setter" === n3) {
      const { name: o2 } = r3;
      return function(r4) {
        const n4 = this[o2];
        e3.call(this, r4), this.requestUpdate(o2, n4, t2);
      };
    }
    throw Error("Unsupported decorator location: " + n3);
  };
  function n$5(t2) {
    return (e3, o2) => "object" == typeof o2 ? r$2(t2, e3, o2) : ((t3, e4, o3) => {
      const r3 = e4.hasOwnProperty(o3);
      return e4.constructor.createProperty(o3, r3 ? { ...t3, wrapped: true } : t3), r3 ? Object.getOwnPropertyDescriptor(e4, o3) : void 0;
    })(t2, e3, o2);
  }
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  function r$1(r3) {
    return n$5({ ...r3, state: true, attribute: false });
  }
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const e$4 = (e3, t2, c3) => (c3.configurable = true, c3.enumerable = true, Reflect.decorate && "object" != typeof t2 && Object.defineProperty(e3, t2, c3), c3);
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  function o$6(o2) {
    return (e3, n3) => {
      const { slot: r3, selector: s2 } = o2 ?? {}, c3 = "slot" + (r3 ? `[name=${r3}]` : ":not([name])");
      return e$4(e3, n3, { get() {
        var _a2;
        const t2 = (_a2 = this.renderRoot) == null ? void 0 : _a2.querySelector(c3), e4 = (t2 == null ? void 0 : t2.assignedElements(o2)) ?? [];
        return void 0 === s2 ? e4 : e4.filter((t3) => t3.matches(s2));
      } });
    };
  }
  /**
   * @license
   * Copyright 2018 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const o$5 = (o2) => o2 ?? E;
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const t$1 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4 }, e$3 = (t2) => (...e3) => ({ _$litDirective$: t2, values: e3 });
  let i$3 = class i {
    constructor(t2) {
    }
    get _$AU() {
      return this._$AM._$AU;
    }
    _$AT(t2, e3, i3) {
      this._$Ct = t2, this._$AM = e3, this._$Ci = i3;
    }
    _$AS(t2, e3) {
      return this.update(t2, e3);
    }
    update(t2, e3) {
      return this.render(...e3);
    }
  };
  /**
   * @license
   * Copyright 2018 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const n$4 = "important", i$2 = " !" + n$4, o$4 = e$3(class extends i$3 {
    constructor(t2) {
      var _a2;
      if (super(t2), t2.type !== t$1.ATTRIBUTE || "style" !== t2.name || ((_a2 = t2.strings) == null ? void 0 : _a2.length) > 2) throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.");
    }
    render(t2) {
      return Object.keys(t2).reduce((e3, r3) => {
        const s2 = t2[r3];
        return null == s2 ? e3 : e3 + `${r3 = r3.includes("-") ? r3 : r3.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, "-$&").toLowerCase()}:${s2};`;
      }, "");
    }
    update(e3, [r3]) {
      const { style: s2 } = e3.element;
      if (void 0 === this.ft) return this.ft = new Set(Object.keys(r3)), this.render(r3);
      for (const t2 of this.ft) null == r3[t2] && (this.ft.delete(t2), t2.includes("-") ? s2.removeProperty(t2) : s2[t2] = null);
      for (const t2 in r3) {
        const e4 = r3[t2];
        if (null != e4) {
          this.ft.add(t2);
          const r4 = "string" == typeof e4 && e4.endsWith(i$2);
          t2.includes("-") || r4 ? s2.setProperty(t2, r4 ? e4.slice(0, -11) : e4, r4 ? n$4 : "") : s2[t2] = e4;
        }
      }
      return T;
    }
  });
  class MduiElement extends r$3 {
    /**
     * 触发自定义事件。若返回 false,表示事件被取消
     * @param type
     * @param options 通常只用到 cancelable 和 detail;bubbles、composed 统一不用
     */
    emit(type, options) {
      const event = new CustomEvent(type, Object.assign({
        bubbles: true,
        cancelable: false,
        composed: true,
        detail: {}
      }, options));
      return this.dispatchEvent(event);
    }
  }
  class HasSlotController {
    constructor(host, ...slotNames) {
      this.slotNames = [];
      (this.host = host).addController(this);
      this.slotNames = slotNames;
      this.onSlotChange = this.onSlotChange.bind(this);
    }
    hostConnected() {
      this.host.shadowRoot.addEventListener("slotchange", this.onSlotChange);
      if (!isDomReady()) {
        $$1(() => {
          this.host.requestUpdate();
        });
      }
    }
    hostDisconnected() {
      this.host.shadowRoot.removeEventListener("slotchange", this.onSlotChange);
    }
    test(slotName) {
      return slotName === "[default]" ? this.hasDefaultSlot() : this.hasNamedSlot(slotName);
    }
    hasDefaultSlot() {
      return [...this.host.childNodes].some((node) => {
        if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== "") {
          return true;
        }
        if (node.nodeType === node.ELEMENT_NODE) {
          const el = node;
          if (!el.hasAttribute("slot")) {
            return true;
          }
        }
        return false;
      });
    }
    hasNamedSlot(name) {
      return this.host.querySelector(`:scope > [slot="${name}"]`) !== null;
    }
    onSlotChange(event) {
      const slot = event.target;
      if (this.slotNames.includes("[default]") && !slot.name || slot.name && this.slotNames.includes(slot.name)) {
        this.host.requestUpdate();
      }
    }
  }
  const nothingTemplate = x`${E}`;
  const componentStyle = i$7`:host{box-sizing:border-box}:host *,:host ::after,:host ::before{box-sizing:inherit}:host :focus,:host :focus-visible,:host(:focus),:host(:focus-visible){outline:0}[hidden]{display:none!important}`;
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  let e$2 = class e extends i$3 {
    constructor(i3) {
      if (super(i3), this.it = E, i3.type !== t$1.CHILD) throw Error(this.constructor.directiveName + "() can only be used in child bindings");
    }
    render(r3) {
      if (r3 === E || null == r3) return this._t = void 0, this.it = r3;
      if (r3 === T) return r3;
      if ("string" != typeof r3) throw Error(this.constructor.directiveName + "() called with a non-string value");
      if (r3 === this.it) return this._t;
      this.it = r3;
      const s2 = [r3];
      return s2.raw = s2, this._t = { _$litType$: this.constructor.resultType, strings: s2, values: [] };
    }
  };
  e$2.directiveName = "unsafeHTML", e$2.resultType = 1;
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  class t extends e$2 {
  }
  t.directiveName = "unsafeSVG", t.resultType = 2;
  const o$3 = e$3(t);
  /**
   * @license
   * Copyright 2020 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const i$1 = (o2) => null === o2 || "object" != typeof o2 && "function" != typeof o2, f$1 = (o2) => void 0 === o2.strings, u = {}, m$1 = (o2, t2 = u) => o2._$AH = t2;
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const s$1 = (i3, t2) => {
    var _a2;
    const e3 = i3._$AN;
    if (void 0 === e3) return false;
    for (const i4 of e3) (_a2 = i4._$AO) == null ? void 0 : _a2.call(i4, t2, false), s$1(i4, t2);
    return true;
  }, o$2 = (i3) => {
    let t2, e3;
    do {
      if (void 0 === (t2 = i3._$AM)) break;
      e3 = t2._$AN, e3.delete(i3), i3 = t2;
    } while (0 === (e3 == null ? void 0 : e3.size));
  }, r2 = (i3) => {
    for (let t2; t2 = i3._$AM; i3 = t2) {
      let e3 = t2._$AN;
      if (void 0 === e3) t2._$AN = e3 = /* @__PURE__ */ new Set();
      else if (e3.has(i3)) break;
      e3.add(i3), c$2(t2);
    }
  };
  function h$2(i3) {
    void 0 !== this._$AN ? (o$2(this), this._$AM = i3, r2(this)) : this._$AM = i3;
  }
  function n$3(i3, t2 = false, e3 = 0) {
    const r3 = this._$AH, h2 = this._$AN;
    if (void 0 !== h2 && 0 !== h2.size) if (t2) if (Array.isArray(r3)) for (let i4 = e3; i4 < r3.length; i4++) s$1(r3[i4], false), o$2(r3[i4]);
    else null != r3 && (s$1(r3, false), o$2(r3));
    else s$1(this, i3);
  }
  const c$2 = (i3) => {
    i3.type == t$1.CHILD && (i3._$AP ?? (i3._$AP = n$3), i3._$AQ ?? (i3._$AQ = h$2));
  };
  class f extends i$3 {
    constructor() {
      super(...arguments), this._$AN = void 0;
    }
    _$AT(i3, t2, e3) {
      super._$AT(i3, t2, e3), r2(this), this.isConnected = i3._$AU;
    }
    _$AO(i3, t2 = true) {
      var _a2, _b;
      i3 !== this.isConnected && (this.isConnected = i3, i3 ? (_a2 = this.reconnected) == null ? void 0 : _a2.call(this) : (_b = this.disconnected) == null ? void 0 : _b.call(this)), t2 && (s$1(this, i3), o$2(this));
    }
    setValue(t2) {
      if (f$1(this._$Ct)) this._$Ct._$AI(t2, this);
      else {
        const i3 = [...this._$Ct._$AH];
        i3[this._$Ci] = t2, this._$Ct._$AI(i3, this, 0);
      }
    }
    disconnected() {
    }
    reconnected() {
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  class s {
    constructor(t2) {
      this.Y = t2;
    }
    disconnect() {
      this.Y = void 0;
    }
    reconnect(t2) {
      this.Y = t2;
    }
    deref() {
      return this.Y;
    }
  }
  class i2 {
    constructor() {
      this.Z = void 0, this.q = void 0;
    }
    get() {
      return this.Z;
    }
    pause() {
      this.Z ?? (this.Z = new Promise((t2) => this.q = t2));
    }
    resume() {
      var _a2;
      (_a2 = this.q) == null ? void 0 : _a2.call(this), this.Z = this.q = void 0;
    }
  }
  /**
   * @license
   * Copyright 2017 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const n$2 = (t2) => !i$1(t2) && "function" == typeof t2.then, h$1 = 1073741823;
  let c$1 = class c extends f {
    constructor() {
      super(...arguments), this._$Cwt = h$1, this._$Cbt = [], this._$CK = new s(this), this._$CX = new i2();
    }
    render(...s2) {
      return s2.find((t2) => !n$2(t2)) ?? T;
    }
    update(s2, i3) {
      const e3 = this._$Cbt;
      let r3 = e3.length;
      this._$Cbt = i3;
      const o2 = this._$CK, c3 = this._$CX;
      this.isConnected || this.disconnected();
      for (let t2 = 0; t2 < i3.length && !(t2 > this._$Cwt); t2++) {
        const s3 = i3[t2];
        if (!n$2(s3)) return this._$Cwt = t2, s3;
        t2 < r3 && s3 === e3[t2] || (this._$Cwt = h$1, r3 = 0, Promise.resolve(s3).then(async (t3) => {
          for (; c3.get(); ) await c3.get();
          const i4 = o2.deref();
          if (void 0 !== i4) {
            const e4 = i4._$Cbt.indexOf(s3);
            e4 > -1 && e4 < i4._$Cwt && (i4._$Cwt = e4, i4.setValue(t3));
          }
        }));
      }
      return T;
    }
    disconnected() {
      this._$CK.disconnect(), this._$CX.pause();
    }
    reconnected() {
      this._$CK.reconnect(this), this._$CX.resume();
    }
  };
  const m = e$3(c$1);
  const style$n = i$7`:host{display:inline-block;width:1em;height:1em;font-weight:400;font-family:'Material Icons';font-display:block;font-style:normal;line-height:1;direction:ltr;letter-spacing:normal;white-space:nowrap;text-transform:none;word-wrap:normal;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-moz-osx-font-smoothing:grayscale;font-size:1.5rem}::slotted(svg),svg{width:100%;height:100%;fill:currentcolor}`;
  let Icon = class Icon2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.hasSlotController = new HasSlotController(this, "[default]");
    }
    render() {
      const renderDefault = () => {
        if (this.name) {
          const [name, variant] = this.name.split("--");
          const familyMap = /* @__PURE__ */ new Map([
            ["outlined", "Material Icons Outlined"],
            ["filled", "Material Icons"],
            ["rounded", "Material Icons Round"],
            ["sharp", "Material Icons Sharp"],
            ["two-tone", "Material Icons Two Tone"]
          ]);
          return x`<span style="${o$4({ fontFamily: familyMap.get(variant) })}">${name}</span>`;
        }
        if (this.src) {
          return x`${m(ajax({ url: this.src }).then(o$3))}`;
        }
        return x``;
      };
      return this.hasSlotController.test("[default]") ? x`<slot></slot>` : renderDefault();
    }
  };
  Icon.styles = [componentStyle, style$n];
  __decorate([
    n$5({ reflect: true })
  ], Icon.prototype, "name", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Icon.prototype, "src", void 0);
  Icon = __decorate([
    t$2("mdui-icon")
  ], Icon);
  const style$m = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;white-space:nowrap;vertical-align:middle;border-radius:var(--shape-corner);-webkit-user-select:none;user-select:none;width:2.5rem;height:2.5rem;background-color:rgb(var(--mdui-color-primary-container));color:rgb(var(--mdui-color-on-primary-container));font-size:var(--mdui-typescale-title-medium-size);font-weight:var(--mdui-typescale-title-medium-weight);letter-spacing:var(--mdui-typescale-title-medium-tracking);line-height:var(--mdui-typescale-title-medium-line-height)}img{width:100%;height:100%}::slotted(mdui-icon),mdui-icon{font-size:1.5em}`;
  let Avatar = class Avatar2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.hasSlotController = new HasSlotController(this, "[default]");
    }
    render() {
      return this.hasSlotController.test("[default]") ? x`<slot></slot>` : this.src ? x`<img part="image" alt="${o$5(this.label)}" src="${this.src}" style="${o$4({ objectFit: this.fit })}">` : this.icon ? x`<mdui-icon part="icon" name="${this.icon}"></mdui-icon>` : nothingTemplate;
    }
  };
  Avatar.styles = [componentStyle, style$m];
  __decorate([
    n$5({ reflect: true })
  ], Avatar.prototype, "src", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Avatar.prototype, "fit", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Avatar.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Avatar.prototype, "label", void 0);
  Avatar = __decorate([
    t$2("mdui-avatar")
  ], Avatar);
  const style$l = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:var(--shape-corner);padding-left:.25rem;padding-right:.25rem;color:rgb(var(--mdui-color-on-error));background-color:rgb(var(--mdui-color-error));height:1rem;min-width:1rem;font-size:var(--mdui-typescale-label-small-size);font-weight:var(--mdui-typescale-label-small-weight);letter-spacing:var(--mdui-typescale-label-small-tracking);line-height:var(--mdui-typescale-label-small-line-height)}:host([variant=small]){min-width:0;padding:0;width:.375rem;height:.375rem}`;
  let Badge = class Badge2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.variant = "large";
    }
    render() {
      if (this.variant === "small") {
        return nothingTemplate;
      }
      return x`<slot></slot>`;
    }
  };
  Badge.styles = [componentStyle, style$l];
  __decorate([
    n$5({ reflect: true })
  ], Badge.prototype, "variant", void 0);
  Badge = __decorate([
    t$2("mdui-badge")
  ], Badge);
  const booleanConverter = (value) => {
    return value !== null && value.toLowerCase() !== "false";
  };
  class DefinedController {
    constructor(host, options) {
      this.defined = false;
      (this.host = host).addController(this);
      this.relatedElements = options.relatedElements;
      this.needDomReady = options.needDomReady || !!options.relatedElements;
      this.onSlotChange = this.onSlotChange.bind(this);
    }
    hostConnected() {
      this.host.shadowRoot.addEventListener("slotchange", this.onSlotChange);
    }
    hostDisconnected() {
      this.host.shadowRoot.removeEventListener("slotchange", this.onSlotChange);
    }
    /**
     * 判断组件是否定义完成
     */
    isDefined() {
      if (this.defined) {
        return true;
      }
      this.defined = (!this.needDomReady || isDomReady()) && !this.getUndefinedLocalNames().length;
      return this.defined;
    }
    /**
     * 在组件定义完成后,promise 被 resolve
     */
    async whenDefined() {
      if (this.defined) {
        return Promise.resolve();
      }
      const document2 = getDocument();
      if (this.needDomReady && !isDomReady(document2)) {
        await new Promise((resolve) => {
          document2.addEventListener("DOMContentLoaded", () => resolve(), {
            once: true
          });
        });
      }
      const undefinedLocalNames = this.getUndefinedLocalNames();
      if (undefinedLocalNames.length) {
        const promises = [];
        undefinedLocalNames.forEach((localName) => {
          promises.push(customElements.whenDefined(localName));
        });
        await Promise.all(promises);
      }
      this.defined = true;
      return;
    }
    /**
     * slot 中的未完成定义的相关 Web components 组件的 CSS 选择器
     */
    getScopeLocalNameSelector() {
      const localNames = this.relatedElements;
      if (!localNames) {
        return null;
      }
      if (Array.isArray(localNames)) {
        return localNames.map((localName) => `${localName}:not(:defined)`).join(",");
      }
      return Object.keys(localNames).filter((localName) => !localNames[localName]).map((localName) => `${localName}:not(:defined)`).join(",");
    }
    /**
     * 整个页面中的未完成定义的相关 Web components 组件的 CSS 选择器
     */
    getGlobalLocalNameSelector() {
      const localNames = this.relatedElements;
      if (!localNames || Array.isArray(localNames)) {
        return null;
      }
      return Object.keys(localNames).filter((localName) => localNames[localName]).map((localName) => `${localName}:not(:defined)`).join(",");
    }
    /**
     * 获取未完成定义的相关 Web components 组件名
     */
    getUndefinedLocalNames() {
      const scopeSelector = this.getScopeLocalNameSelector();
      const globalSelector = this.getGlobalLocalNameSelector();
      const undefinedScopeElements = scopeSelector ? [...this.host.querySelectorAll(scopeSelector)] : [];
      const undefinedGlobalElements = globalSelector ? [...getDocument().querySelectorAll(globalSelector)] : [];
      const localNames = [
        ...undefinedScopeElements,
        ...undefinedGlobalElements
      ].map((element) => element.localName);
      return unique(localNames);
    }
    /**
     * slot 变更时,若 slot 中包含未完成定义的相关 Web components 组件,则组件未定义完成
     */
    onSlotChange() {
      const selector = this.getScopeLocalNameSelector();
      if (selector) {
        const undefinedElements = this.host.querySelectorAll(selector);
        if (undefinedElements.length) {
          this.defined = false;
        }
      }
    }
  }
  function watch(propName, waitUntilFirstUpdate = false) {
    return (proto, functionName) => {
      const { update } = proto;
      if (propName in proto) {
        proto.update = function(changedProperties) {
          if (changedProperties.has(propName)) {
            const oldValue = changedProperties.get(propName);
            const newValue = this[propName];
            if (oldValue !== newValue) {
              if (!waitUntilFirstUpdate || this.hasUpdated) {
                this[functionName](oldValue, newValue);
              }
            }
          }
          update.call(this, changedProperties);
        };
      }
    };
  }
  const weakMap$1 = /* @__PURE__ */ new WeakMap();
  const ScrollBehaviorMixin = (superclass) => {
    class ScrollBehaviorMixinClass extends superclass {
      // eslint-disable-next-line @typescript-eslint/no-explicit-any
      constructor(...args) {
        super(...args);
        this.scrollBehaviorDefinedController = new DefinedController(this, {
          needDomReady: true
        });
        this.lastScrollTopThreshold = 0;
        this.lastScrollTopNoThreshold = 0;
        this.isParentLayout = false;
        this.onListeningScroll = this.onListeningScroll.bind(this);
      }
      /**
       * 滚动时,如果需要给 container 添加 padding,添加在顶部还是底部
       */
      get scrollPaddingPosition() {
        throw new Error("Must implement scrollPaddingPosition getter");
      }
      async onScrollTargetChange(oldValue, newValue) {
        const hasUpdated = this.hasUpdated;
        await this.scrollBehaviorDefinedController.whenDefined();
        if (hasUpdated) {
          this.setContainerPadding("remove", oldValue);
          this.setContainerPadding("add", newValue);
        }
        if (!this.scrollBehavior) {
          return;
        }
        const oldListening = this.getListening(oldValue);
        if (oldListening) {
          oldListening.removeEventListener("scroll", this.onListeningScroll);
        }
        const newListening = this.getListening(newValue);
        if (newListening) {
          this.updateScrollTop(newListening);
          newListening.addEventListener("scroll", this.onListeningScroll);
        }
      }
      async onScrollBehaviorChange() {
        await this.scrollBehaviorDefinedController.whenDefined();
        const listening = this.getListening(this.scrollTarget);
        if (!listening) {
          return;
        }
        if (this.scrollBehavior) {
          this.updateScrollTop(listening);
          listening.addEventListener("scroll", this.onListeningScroll);
        } else {
          listening.removeEventListener("scroll", this.onListeningScroll);
        }
      }
      connectedCallback() {
        super.connectedCallback();
        this.scrollBehaviorDefinedController.whenDefined().then(() => {
          this.isParentLayout = isNodeName(this.parentElement, "mdui-layout");
          this.setContainerPadding("add", this.scrollTarget);
        });
      }
      disconnectedCallback() {
        super.disconnectedCallback();
        this.scrollBehaviorDefinedController.whenDefined().then(() => {
          this.setContainerPadding("remove", this.scrollTarget);
        });
      }
      /**
       * scrollBehavior 包含多个滚动行为,用空格分割
       * 用该方法判断指定滚动行为是否在 scrollBehavior 中
       * @param behavior 为数组时,只要其中一个行为在 scrollBehavior 中,即返回 `true`
       */
      hasScrollBehavior(behavior) {
        var _a2;
        const behaviors = ((_a2 = this.scrollBehavior) == null ? void 0 : _a2.split(" ")) ?? [];
        if (Array.isArray(behavior)) {
          return !!behaviors.filter((v2) => behavior.includes(v2)).length;
        } else {
          return behaviors.includes(behavior);
        }
      }
      /**
       * 执行滚动事件,在滚动距离超过 scrollThreshold 时才会执行
       * Note: 父类可以按需实现该方法
       * @param isScrollingUp 是否向上滚动
       * @param scrollTop 距离 scrollTarget 顶部的距离
       */
      // eslint-disable-next-line @typescript-eslint/no-unused-vars
      runScrollThreshold(isScrollingUp, scrollTop) {
        return;
      }
      /**
       * 执行滚动事件,会无视 scrollThreshold,始终会执行
       * @param isScrollingUp 是否向上滚动
       * @param scrollTop 距离 scrollTarget 顶部的距离
       */
      // eslint-disable-next-line @typescript-eslint/no-unused-vars
      runScrollNoThreshold(isScrollingUp, scrollTop) {
        return;
      }
      /**
       * 更新滚动容器的 padding,避免内容被 navigation-bar 覆盖
       * @param action 新增、更新、移除 padding
       * @param scrollTarget 在该元素上添加、更新或移除 padding
       */
      setContainerPadding(action, scrollTarget) {
        const container2 = this.getContainer(scrollTarget);
        if (!container2 || this.isParentLayout) {
          return;
        }
        const position = this.scrollPaddingPosition;
        const propName = position === "top" ? "paddingTop" : "paddingBottom";
        if (action === "add" || action === "update") {
          const propValue = ["fixed", "absolute"].includes($$1(this).css("position")) ? this.offsetHeight : null;
          $$1(container2).css({ [propName]: propValue });
          if (action === "add" && propValue !== null) {
            const options = weakMap$1.get(container2) ?? { top: [], bottom: [] };
            options[position].push(this);
            weakMap$1.set(container2, options);
          }
        }
        if (action === "remove") {
          const options = weakMap$1.get(container2);
          if (!options) {
            return;
          }
          const index = options[position].indexOf(this);
          if (index > -1) {
            options[position].splice(index, 1);
            weakMap$1.set(container2, options);
          }
          if (!options[position].length) {
            $$1(container2).css({ [propName]: null });
          }
        }
      }
      onListeningScroll() {
        const listening = this.getListening(this.scrollTarget);
        window.requestAnimationFrame(() => this.onScroll(listening));
      }
      /**
       * 滚动事件,这里过滤掉不符合条件的滚动
       */
      onScroll(listening) {
        const scrollTop = listening.scrollY ?? listening.scrollTop;
        if (this.lastScrollTopNoThreshold !== scrollTop) {
          this.runScrollNoThreshold(scrollTop < this.lastScrollTopNoThreshold, scrollTop);
          this.lastScrollTopNoThreshold = scrollTop;
        }
        if (Math.abs(scrollTop - this.lastScrollTopThreshold) > (this.scrollThreshold || 0)) {
          this.runScrollThreshold(scrollTop < this.lastScrollTopThreshold, scrollTop);
          this.lastScrollTopThreshold = scrollTop;
        }
      }
      /**
       * 重新更新 lastScrollTopThreshold、lastScrollTopNoThreshold 的值
       * 用于在 scrollTarget、scrollBehavior 变更时,重新设置 lastScrollTopThreshold、lastScrollTopNoThreshold 的初始值
       */
      updateScrollTop(listening) {
        this.lastScrollTopThreshold = this.lastScrollTopNoThreshold = listening.scrollY ?? listening.scrollTop;
      }
      /**
       * 获取组件需要监听哪个元素的滚动状态
       */
      getListening(target) {
        return target ? $$1(target)[0] : window;
      }
      /**
       * 获取组件在哪个容器内滚动
       */
      getContainer(target) {
        return target ? $$1(target)[0] : document.body;
      }
    }
    __decorate([
      n$5({ attribute: "scroll-target" })
    ], ScrollBehaviorMixinClass.prototype, "scrollTarget", void 0);
    __decorate([
      n$5({ reflect: true, attribute: "scroll-behavior" })
    ], ScrollBehaviorMixinClass.prototype, "scrollBehavior", void 0);
    __decorate([
      n$5({ type: Number, reflect: true, attribute: "scroll-threshold" })
    ], ScrollBehaviorMixinClass.prototype, "scrollThreshold", void 0);
    __decorate([
      watch("scrollTarget")
    ], ScrollBehaviorMixinClass.prototype, "onScrollTargetChange", null);
    __decorate([
      watch("scrollBehavior")
    ], ScrollBehaviorMixinClass.prototype, "onScrollBehaviorChange", null);
    return ScrollBehaviorMixinClass;
  };
  let id = 0;
  const uniqueId = () => {
    return ++id;
  };
  let weakMap;
  let observer;
  const observeResize = (target, callback) => {
    const $target = $$1(target);
    const key2 = uniqueId();
    const result = {
      unobserve: () => {
        $target.each((_2, target2) => {
          const options = weakMap.get(target2);
          const index = options.coArr.findIndex((co) => co.key === key2);
          if (index !== -1) {
            options.coArr.splice(index, 1);
          }
          if (!options.coArr.length) {
            observer.unobserve(target2);
            weakMap.delete(target2);
          } else {
            weakMap.set(target2, options);
          }
        });
      }
    };
    if (!weakMap) {
      weakMap = /* @__PURE__ */ new WeakMap();
      observer = new ResizeObserver((entries) => {
        entries.forEach((entry) => {
          const target2 = entry.target;
          const options = weakMap.get(target2);
          options.entry = entry;
          options.coArr.forEach((co) => {
            co.callback.call(result, entry, result);
          });
        });
      });
    }
    $target.each((_2, target2) => {
      const options = weakMap.get(target2) ?? { coArr: [] };
      if (options.coArr.length && options.entry) {
        callback.call(result, options.entry, result);
      }
      options.coArr.push({ callback, key: key2 });
      weakMap.set(target2, options);
      observer.observe(target2);
    });
    return result;
  };
  class LayoutManager {
    constructor() {
      this.states = [];
    }
    /**
     * 注册 `<mdui-layout-main>`
     */
    registerMain(element) {
      this.$main = $$1(element);
    }
    /**
     * 取消注册 `<mdui-layout-main>`
     */
    unregisterMain() {
      this.$main = void 0;
    }
    /**
     * 注册新的 `<mdui-layout-item>`
     */
    registerItem(element) {
      const state = { element };
      this.states.push(state);
      state.observeResize = observeResize(state.element, () => {
        this.updateLayout(state.element, {
          width: this.isNoWidth(state) ? 0 : void 0
        });
      });
      this.items = void 0;
      this.resort();
      this.updateLayout();
    }
    /**
     * 取消注册 `<mdui-layout-item>`
     */
    unregisterItem(element) {
      var _a2;
      const index = this.states.findIndex((item2) => item2.element === element);
      if (index < 0) {
        return;
      }
      const item = this.states[index];
      (_a2 = item.observeResize) == null ? void 0 : _a2.unobserve();
      this.items = void 0;
      this.states.splice(index, 1);
      if (this.states[index]) {
        this.updateLayout(this.states[index].element);
      }
    }
    /**
     * 获取所有 `<mdui-layout-item>` 元素(按在 DOM 中的顺序)
     */
    getItems() {
      if (!this.items) {
        const items = this.states.map((state) => state.element);
        this.items = items.sort((a2, b2) => {
          const position = a2.compareDocumentPosition(b2);
          if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
            return -1;
          } else if (position & Node.DOCUMENT_POSITION_PRECEDING) {
            return 1;
          } else {
            return 0;
          }
        });
      }
      return this.items;
    }
    /**
     * 获取 `<mdui-layout-main>` 元素
     */
    getMain() {
      return this.$main ? this.$main[0] : void 0;
    }
    /**
     * 获取 `<mdui-layout-item>` 及 `<mdui-layout-main>` 元素
     */
    getItemsAndMain() {
      return [...this.getItems(), this.getMain()].filter((i3) => i3);
    }
    /**
     * 更新 `order` 值,更新完后重新计算布局
     */
    updateOrder() {
      this.resort();
      this.updateLayout();
    }
    /**
     * 重新计算布局
     * @param element 从哪一个元素开始更新;若未传入参数,则将更新所有元素
     * @param size 此次更新中,元素的宽高(仅在此次更新中使用)。若不传则自动计算
     */
    updateLayout(element, size) {
      const state = element ? {
        element,
        width: size == null ? void 0 : size.width,
        height: size == null ? void 0 : size.height
      } : void 0;
      const index = state ? this.states.findIndex((v2) => v2.element === state.element) : 0;
      if (index < 0) {
        return;
      }
      Object.assign(this.states[index], state);
      this.states.forEach((currState, currIndex) => {
        if (currIndex < index) {
          return;
        }
        const placement = currState.element.layoutPlacement;
        const prevState = currIndex > 0 ? this.states[currIndex - 1] : void 0;
        const top = (prevState == null ? void 0 : prevState.top) ?? 0;
        const right = (prevState == null ? void 0 : prevState.right) ?? 0;
        const bottom = (prevState == null ? void 0 : prevState.bottom) ?? 0;
        const left = (prevState == null ? void 0 : prevState.left) ?? 0;
        Object.assign(currState, { top, right, bottom, left });
        switch (placement) {
          case "top":
          case "bottom":
            currState[placement] += currState.height ?? currState.element.offsetHeight;
            break;
          case "right":
          case "left":
            currState[placement] += (this.isNoWidth(currState) ? 0 : currState.width) ?? currState.element.offsetWidth;
            break;
        }
        currState.height = currState.width = void 0;
        $$1(currState.element).css({
          position: "absolute",
          top: placement === "bottom" ? null : top,
          right: placement === "left" ? null : right,
          bottom: placement === "top" ? null : bottom,
          left: placement === "right" ? null : left
        });
      });
      const lastState = this.states[this.states.length - 1];
      if (this.$main) {
        this.$main.css({
          paddingTop: lastState.top,
          paddingRight: lastState.right,
          paddingBottom: lastState.bottom,
          paddingLeft: lastState.left
        });
      }
    }
    /**
     * 按 order 排序,order 相同时,按在 DOM 中的顺序排序
     */
    resort() {
      const items = this.getItems();
      this.states.sort((a2, b2) => {
        const aOrder = a2.element.order ?? 0;
        const bOrder = b2.element.order ?? 0;
        if (aOrder > bOrder) {
          return 1;
        }
        if (aOrder < bOrder) {
          return -1;
        }
        if (items.indexOf(a2.element) > items.indexOf(b2.element)) {
          return 1;
        }
        if (items.indexOf(a2.element) < items.indexOf(b2.element)) {
          return -1;
        }
        return 0;
      });
    }
    /**
     * 组件宽度是否为 0
     * mdui-navigation-drawer 较为特殊,在为模态化时,占据的宽度为 0
     */
    isNoWidth(state) {
      return isNodeName(state.element, "mdui-navigation-drawer") && // @ts-ignore
      state.element.isModal;
    }
  }
  const layoutManagerMap = /* @__PURE__ */ new WeakMap();
  const getLayout = (element) => {
    if (!layoutManagerMap.has(element)) {
      layoutManagerMap.set(element, new LayoutManager());
    }
    return layoutManagerMap.get(element);
  };
  class LayoutItemBase extends MduiElement {
    constructor() {
      super(...arguments);
      this.isParentLayout = false;
    }
    /**
     * 当前布局组件所处的位置,父类必须实现该 getter
     */
    get layoutPlacement() {
      throw new Error("Must implement placement getter!");
    }
    // order 变更时,需要重新调整布局
    onOrderChange() {
      var _a2;
      (_a2 = this.layoutManager) == null ? void 0 : _a2.updateOrder();
    }
    connectedCallback() {
      super.connectedCallback();
      const parentElement = this.parentElement;
      this.isParentLayout = isNodeName(parentElement, "mdui-layout");
      if (this.isParentLayout) {
        this.layoutManager = getLayout(parentElement);
        this.layoutManager.registerItem(this);
      }
    }
    disconnectedCallback() {
      super.disconnectedCallback();
      if (this.layoutManager) {
        this.layoutManager.unregisterItem(this);
      }
    }
  }
  __decorate([
    n$5({ type: Number, reflect: true })
  ], LayoutItemBase.prototype, "order", void 0);
  __decorate([
    watch("order", true)
  ], LayoutItemBase.prototype, "onOrderChange", null);
  const style$k = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);--z-index:2000;position:fixed;right:0;bottom:0;left:0;display:flex;flex:0 0 auto;align-items:center;justify-content:flex-start;border-radius:var(--shape-corner) var(--shape-corner) 0 0;z-index:var(--z-index);transition:bottom var(--mdui-motion-duration-long2) var(--mdui-motion-easing-emphasized);padding:0 1rem;height:5rem;background-color:rgb(var(--mdui-color-surface-container));box-shadow:var(--mdui-elevation-level2)}:host([scroll-target]:not([scroll-target=''])){position:absolute}:host([hide]:not([hide=false i])){transition-duration:var(--mdui-motion-duration-short4);bottom:-5.625rem}::slotted(:not(:first-child)){margin-left:.5rem}::slotted(mdui-fab){box-shadow:var(--mdui-elevation-level0)}:host([fab-detach]:not([fab-detach=false i])) ::slotted(mdui-fab){position:absolute;transition:bottom var(--mdui-motion-duration-long2) var(--mdui-motion-easing-standard);right:1rem;bottom:.75rem}:host([fab-detach][hide][scroll-behavior~=hide]:not([hide=false i],[fab-detach=false i])) ::slotted(mdui-fab){transition-duration:var(--mdui-motion-duration-short4);bottom:1rem;box-shadow:var(--mdui-elevation-level2)}:host([fab-detach][hide][scroll-behavior~=hide][scroll-target]:not([fab-detach=false i],[hide=false i],[scroll-target=''])) ::slotted(mdui-fab){bottom:6.625rem}:host([hide]:not([hide=false i])) ::slotted(:not(mdui-fab)),:host([hide]:not([hide=false i],[fab-detach])) ::slotted(mdui-fab),:host([hide][fab-detach=false i]:not([hide=false i])) ::slotted(mdui-fab){transform:translateY(8.75rem);transition:transform var(--mdui-motion-duration-0) var(--mdui-motion-easing-emphasized-accelerate) var(--mdui-motion-duration-short4)}::slotted(:first-child){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-short1)}::slotted(:nth-child(2)){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-short3)}::slotted(:nth-child(3)){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-short4)}::slotted(:nth-child(4)){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-medium1)}::slotted(:nth-child(5)){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-medium2)}::slotted(:nth-child(6)){transition:transform var(--mdui-motion-duration-short3) var(--mdui-motion-easing-emphasized-decelerate) var(--mdui-motion-duration-medium3)}`;
  let BottomAppBar = class BottomAppBar2 extends ScrollBehaviorMixin(LayoutItemBase) {
    constructor() {
      super(...arguments);
      this.hide = false;
      this.fabDetach = false;
    }
    get scrollPaddingPosition() {
      return "bottom";
    }
    get layoutPlacement() {
      return "bottom";
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("transitionend", (event) => {
        if (event.target === this) {
          this.emit(this.hide ? "hidden" : "shown");
        }
      });
    }
    render() {
      return x`<slot></slot>`;
    }
    /**
     * 滚动行为
     * 当前仅支持 hide 这一个行为,所以不做行为类型判断
     */
    runScrollThreshold(isScrollingUp) {
      if (!isScrollingUp && !this.hide) {
        const eventProceeded = this.emit("hide", { cancelable: true });
        if (eventProceeded) {
          this.hide = true;
        }
      }
      if (isScrollingUp && this.hide) {
        const eventProceeded = this.emit("show", { cancelable: true });
        if (eventProceeded) {
          this.hide = false;
        }
      }
    }
  };
  BottomAppBar.styles = [componentStyle, style$k];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], BottomAppBar.prototype, "hide", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "fab-detach"
    })
  ], BottomAppBar.prototype, "fabDetach", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "scroll-behavior" })
  ], BottomAppBar.prototype, "scrollBehavior", void 0);
  BottomAppBar = __decorate([
    t$2("mdui-bottom-app-bar")
  ], BottomAppBar);
  /**
   * @license
   * Copyright 2020 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const e$1 = () => new h();
  class h {
  }
  const o$1 = /* @__PURE__ */ new WeakMap(), n$1 = e$3(class extends f {
    render(i3) {
      return E;
    }
    update(i3, [s2]) {
      var _a2;
      const e3 = s2 !== this.Y;
      return e3 && void 0 !== this.Y && this.rt(void 0), (e3 || this.lt !== this.ct) && (this.Y = s2, this.ht = (_a2 = i3.options) == null ? void 0 : _a2.host, this.rt(this.ct = i3.element)), E;
    }
    rt(t2) {
      if (this.isConnected || (t2 = void 0), "function" == typeof this.Y) {
        const i3 = this.ht ?? globalThis;
        let s2 = o$1.get(i3);
        void 0 === s2 && (s2 = /* @__PURE__ */ new WeakMap(), o$1.set(i3, s2)), void 0 !== s2.get(this.Y) && this.Y.call(this.ht, void 0), s2.set(this.Y, t2), void 0 !== t2 && this.Y.call(this.ht, t2);
      } else this.Y.value = t2;
    }
    get lt() {
      var _a2, _b;
      return "function" == typeof this.Y ? (_a2 = o$1.get(this.ht ?? globalThis)) == null ? void 0 : _a2.get(this.Y) : (_b = this.Y) == null ? void 0 : _b.value;
    }
    disconnected() {
      this.lt === this.ct && this.rt(void 0);
    }
    reconnected() {
      this.rt(this.ct);
    }
  });
  function cc(names) {
    if (typeof names === "string" || typeof names === "number") return "" + names;
    let out = "";
    if (Array.isArray(names)) {
      for (let i3 = 0, tmp; i3 < names.length; i3++) {
        if ((tmp = cc(names[i3])) !== "") {
          out += (out && " ") + tmp;
        }
      }
    } else {
      for (let k2 in names) {
        if (names[k2]) out += (out && " ") + k2;
      }
    }
    return out;
  }
  const reportValidityOverloads = /* @__PURE__ */ new WeakMap();
  const formResets = /* @__PURE__ */ new WeakMap();
  class FormController {
    constructor(host, options) {
      (this.host = host).addController(this);
      this.definedController = new DefinedController(host, {
        needDomReady: true
      });
      this.options = {
        form: (control) => {
          const formId = $$1(control).attr("form");
          if (formId) {
            const root2 = control.getRootNode();
            return root2.getElementById(formId);
          }
          return control.closest("form");
        },
        name: (control) => control.name,
        value: (control) => control.value,
        defaultValue: (control) => control.defaultValue,
        setValue: (control, value) => control.value = value,
        disabled: (control) => control.disabled,
        reportValidity: (control) => isFunction(control.reportValidity) ? control.reportValidity() : true,
        ...options
      };
      this.onFormData = this.onFormData.bind(this);
      this.onFormSubmit = this.onFormSubmit.bind(this);
      this.onFormReset = this.onFormReset.bind(this);
      this.reportFormValidity = this.reportFormValidity.bind(this);
    }
    hostConnected() {
      this.definedController.whenDefined().then(() => {
        this.form = this.options.form(this.host);
        if (this.form) {
          this.attachForm(this.form);
        }
      });
    }
    hostDisconnected() {
      this.detachForm();
    }
    hostUpdated() {
      this.definedController.whenDefined().then(() => {
        const form = this.options.form(this.host);
        if (!form) {
          this.detachForm();
        }
        if (form && this.form !== form) {
          this.detachForm();
          this.attachForm(form);
        }
      });
    }
    /**
     * 获取当前表单控件关联的 `<form>` 元素
     */
    getForm() {
      return this.form ?? null;
    }
    /**
     * 重置整个表单,所有表单控件恢复成默认值
     */
    reset(invoker) {
      this.doAction("reset", invoker);
    }
    /**
     * 提交整个表单
     */
    submit(invoker) {
      this.doAction("submit", invoker);
    }
    attachForm(form) {
      if (!form) {
        this.form = void 0;
        return;
      }
      this.form = form;
      if (formCollections.has(this.form)) {
        formCollections.get(this.form).add(this.host);
      } else {
        formCollections.set(this.form, /* @__PURE__ */ new Set([this.host]));
      }
      this.form.addEventListener("formdata", this.onFormData);
      this.form.addEventListener("submit", this.onFormSubmit);
      this.form.addEventListener("reset", this.onFormReset);
      if (!reportValidityOverloads.has(this.form)) {
        reportValidityOverloads.set(this.form, this.form.reportValidity);
        this.form.reportValidity = () => this.reportFormValidity();
      }
    }
    detachForm() {
      if (this.form) {
        formCollections.get(this.form).delete(this.host);
        this.form.removeEventListener("formdata", this.onFormData);
        this.form.removeEventListener("submit", this.onFormSubmit);
        this.form.removeEventListener("reset", this.onFormReset);
        if (reportValidityOverloads.has(this.form) && !formCollections.get(this.form).size) {
          this.form.reportValidity = reportValidityOverloads.get(this.form);
          reportValidityOverloads.delete(this.form);
        }
      }
    }
    doAction(type, invoker) {
      if (!this.form) {
        return;
      }
      const $button = $$1(`<button type="${type}">`).css({
        position: "absolute",
        width: 0,
        height: 0,
        clipPath: "inset(50%)",
        overflow: "hidden",
        whiteSpace: "nowrap"
      });
      const button = $button[0];
      if (invoker) {
        button.name = invoker.name;
        button.value = invoker.value;
        [
          "formaction",
          "formenctype",
          "formmethod",
          "formnovalidate",
          "formtarget"
        ].forEach((attr) => {
          $button.attr(attr, $$1(invoker).attr(attr));
        });
      }
      this.form.append(button);
      button.click();
      button.remove();
    }
    onFormData(event) {
      const disabled = this.options.disabled(this.host);
      const name = this.options.name(this.host);
      const value = this.options.value(this.host);
      const isButton = [
        "mdui-button",
        "mdui-button-icon",
        "mdui-chip",
        "mdui-fab",
        "mdui-segmented-button"
      ].includes(this.host.tagName.toLowerCase());
      if (!disabled && !isButton && isString(name) && name && !isUndefined(value)) {
        if (Array.isArray(value)) {
          value.forEach((val) => {
            event.formData.append(name, val.toString());
          });
        } else {
          event.formData.append(name, value.toString());
        }
      }
    }
    // todo: 当前组件进行验证的顺序,取决于组件的注册顺序,而不会按在 DOM 中的顺序从上到下验证。如何按 DOM 顺序验证?
    onFormSubmit(event) {
      const disabled = this.options.disabled(this.host);
      const reportValidity = this.options.reportValidity;
      if (this.form && !this.form.noValidate && !disabled && !reportValidity(this.host)) {
        event.preventDefault();
        event.stopImmediatePropagation();
      }
    }
    onFormReset() {
      if (this.form) {
        this.options.setValue(this.host, this.options.defaultValue(this.host));
        this.host.invalid = false;
        if (formResets.has(this.form)) {
          formResets.get(this.form).add(this.host);
        } else {
          formResets.set(this.form, /* @__PURE__ */ new Set([this.host]));
        }
      }
    }
    reportFormValidity() {
      if (this.form && !this.form.noValidate) {
        const elements = getFormControls(this.form);
        for (const element of elements) {
          if (isFunction(element.reportValidity) && !element.reportValidity()) {
            return false;
          }
        }
      }
      return true;
    }
  }
  const AnchorMixin = (superclass) => {
    class AnchorMixinClass extends superclass {
      renderAnchor({ id: id2, className: className2, part, content = x`<slot></slot>`, refDirective, tabIndex }) {
        return x`<a ${refDirective} id="${o$5(id2)}" class="_a ${className2 ? className2 : ""}" part="${o$5(part)}" href="${o$5(this.href)}" download="${o$5(this.download)}" target="${o$5(this.target)}" rel="${o$5(this.rel)}" tabindex="${o$5(tabIndex)}">${content}</a>`;
      }
    }
    __decorate([
      n$5({ reflect: true })
    ], AnchorMixinClass.prototype, "href", void 0);
    __decorate([
      n$5({ reflect: true })
    ], AnchorMixinClass.prototype, "download", void 0);
    __decorate([
      n$5({ reflect: true })
    ], AnchorMixinClass.prototype, "target", void 0);
    __decorate([
      n$5({ reflect: true })
    ], AnchorMixinClass.prototype, "rel", void 0);
    return AnchorMixinClass;
  };
  let isClick = true;
  const document$1 = getDocument();
  document$1.addEventListener("pointerdown", () => {
    isClick = true;
  });
  document$1.addEventListener("keydown", () => {
    isClick = false;
  });
  const FocusableMixin = (superclass) => {
    class FocusableMixinClass extends superclass {
      constructor() {
        super(...arguments);
        this.autofocus = false;
        this.focused = false;
        this.focusVisible = false;
        this.focusableDefinedController = new DefinedController(this, { relatedElements: [""] });
        this._manipulatingTabindex = false;
        this._tabIndex = 0;
      }
      /**
       * 元素在使用 Tab 键切换焦点时的顺序
       */
      get tabIndex() {
        const $this = $$1(this);
        if (this.focusElement === this) {
          return Number($this.attr("tabindex") || -1);
        }
        const tabIndexAttribute = Number($this.attr("tabindex") || 0);
        if (this.focusDisabled || tabIndexAttribute < 0) {
          return -1;
        }
        if (!this.focusElement) {
          return tabIndexAttribute;
        }
        return this.focusElement.tabIndex;
      }
      set tabIndex(tabIndex) {
        if (this._manipulatingTabindex) {
          this._manipulatingTabindex = false;
          return;
        }
        const $this = $$1(this);
        if (this.focusElement === this) {
          if (tabIndex !== null) {
            this._tabIndex = tabIndex;
          }
          $this.attr("tabindex", this.focusDisabled ? null : tabIndex);
          return;
        }
        const onPointerDown = () => {
          if (this.tabIndex === -1) {
            this.tabIndex = 0;
            this.focus({ preventScroll: true });
          }
        };
        if (tabIndex === -1) {
          this.addEventListener("pointerdown", onPointerDown);
        } else {
          this._manipulatingTabindex = true;
          this.removeEventListener("pointerdown", onPointerDown);
        }
        if (tabIndex === -1 || this.focusDisabled) {
          $this.attr("tabindex", -1);
          if (tabIndex !== -1) {
            this.manageFocusElementTabindex(tabIndex);
          }
          return;
        }
        if (!this.hasAttribute("tabindex")) {
          this._manipulatingTabindex = false;
        }
        this.manageFocusElementTabindex(tabIndex);
      }
      /**
       * 父类要实现该属性,表示是否禁用 focus 状态
       */
      get focusDisabled() {
        throw new Error("Must implement focusDisabled getter!");
      }
      /**
       * 最终获得焦点的元素
       */
      get focusElement() {
        throw new Error("Must implement focusElement getter!");
      }
      connectedCallback() {
        super.connectedCallback();
        this.updateComplete.then(() => {
          requestAnimationFrame(() => {
            this.manageAutoFocus();
          });
        });
      }
      /**
       * 模拟鼠标点击元素
       */
      click() {
        if (this.focusDisabled) {
          return;
        }
        if (this.focusElement !== this) {
          this.focusElement.click();
        } else {
          HTMLElement.prototype.click.apply(this);
        }
      }
      /**
       * 将焦点设置到当前元素。
       *
       * 可以传入一个对象作为参数,该对象的属性包括:
       *
       * * `preventScroll`:默认情况下,元素获取焦点后,页面会滚动以将该元素滚动到视图中。如果不希望页面滚动,可以将此属性设置为 `true`。
       */
      focus(options) {
        if (this.focusDisabled || !this.focusElement) {
          return;
        }
        if (this.focusElement !== this) {
          this.focusElement.focus(options);
        } else {
          HTMLElement.prototype.focus.apply(this, [options]);
        }
      }
      /**
       * 移除当前元素的焦点
       */
      blur() {
        if (this.focusElement !== this) {
          this.focusElement.blur();
        } else {
          HTMLElement.prototype.blur.apply(this);
        }
      }
      firstUpdated(changedProperties) {
        super.firstUpdated(changedProperties);
        this.focusElement.addEventListener("focus", () => {
          this.focused = true;
          this.focusVisible = !isClick;
        });
        this.focusElement.addEventListener("blur", () => {
          this.focused = false;
          this.focusVisible = false;
        });
      }
      update(changedProperties) {
        if (this._lastFocusDisabled === void 0 || this._lastFocusDisabled !== this.focusDisabled) {
          this._lastFocusDisabled = this.focusDisabled;
          const $this = $$1(this);
          if (this.focusDisabled) {
            $this.removeAttr("tabindex");
          } else {
            if (this.focusElement === this) {
              this._manipulatingTabindex = true;
              $this.attr("tabindex", this._tabIndex);
            } else if (this.tabIndex > -1) {
              $this.removeAttr("tabindex");
            }
          }
        }
        super.update(changedProperties);
      }
      updated(changedProperties) {
        super.updated(changedProperties);
        if (this.focused && this.focusDisabled) {
          this.blur();
        }
      }
      async manageFocusElementTabindex(tabIndex) {
        if (!this.focusElement) {
          await this.updateComplete;
        }
        if (tabIndex === null) {
          this.focusElement.removeAttribute("tabindex");
        } else {
          this.focusElement.tabIndex = tabIndex;
        }
      }
      manageAutoFocus() {
        if (this.autofocus) {
          this.dispatchEvent(new KeyboardEvent("keydown", {
            code: "Tab"
          }));
          this.focusElement.focus();
        }
      }
    }
    __decorate([
      n$5({
        type: Boolean,
        /**
         * 哪些属性需要 reflect: true?
         * 一般所有属性都需要 reflect,但以下情况除外:
         * 1. 会频繁变更的属性
         * 2. 属性同步会造成较大性能开销的属性
         * 3. 复杂类型属性(数组、对象等,仅提供 property,不提供 attribute)
         */
        reflect: true,
        converter: booleanConverter
      })
    ], FocusableMixinClass.prototype, "autofocus", void 0);
    __decorate([
      n$5({
        type: Boolean,
        reflect: true,
        converter: booleanConverter
      })
    ], FocusableMixinClass.prototype, "focused", void 0);
    __decorate([
      n$5({
        type: Boolean,
        reflect: true,
        converter: booleanConverter,
        attribute: "focus-visible"
      })
    ], FocusableMixinClass.prototype, "focusVisible", void 0);
    __decorate([
      n$5({ type: Number, attribute: "tabindex" })
    ], FocusableMixinClass.prototype, "tabIndex", null);
    return FocusableMixinClass;
  };
  /**
   * @license
   * Copyright 2018 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const e2 = e$3(class extends i$3 {
    constructor(t2) {
      var _a2;
      if (super(t2), t2.type !== t$1.ATTRIBUTE || "class" !== t2.name || ((_a2 = t2.strings) == null ? void 0 : _a2.length) > 2) throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.");
    }
    render(t2) {
      return " " + Object.keys(t2).filter((s2) => t2[s2]).join(" ") + " ";
    }
    update(s2, [i3]) {
      var _a2, _b;
      if (void 0 === this.st) {
        this.st = /* @__PURE__ */ new Set(), void 0 !== s2.strings && (this.nt = new Set(s2.strings.join(" ").split(/\s/).filter((t2) => "" !== t2)));
        for (const t2 in i3) i3[t2] && !((_a2 = this.nt) == null ? void 0 : _a2.has(t2)) && this.st.add(t2);
        return this.render(i3);
      }
      const r3 = s2.element.classList;
      for (const t2 of this.st) t2 in i3 || (r3.remove(t2), this.st.delete(t2));
      for (const t2 in i3) {
        const s3 = !!i3[t2];
        s3 === this.st.has(t2) || ((_b = this.nt) == null ? void 0 : _b.has(t2)) || (s3 ? (r3.add(t2), this.st.add(t2)) : (r3.remove(t2), this.st.delete(t2)));
      }
      return T;
    }
  });
  const style$j = i$7`:host{position:relative;display:inline-block;flex-shrink:0;width:2.5rem;height:2.5rem;stroke:rgb(var(--mdui-color-primary))}.progress{position:relative;display:inline-block;width:100%;height:100%;text-align:left;transition:opacity var(--mdui-motion-duration-medium1) var(--mdui-motion-easing-linear)}.determinate svg{transform:rotate(-90deg);fill:transparent}.determinate .track{stroke:transparent}.determinate .circle{stroke:inherit;transition:stroke-dashoffset var(--mdui-motion-duration-long2) var(--mdui-motion-easing-standard)}.indeterminate{font-size:0;letter-spacing:0;white-space:nowrap;animation:mdui-comp-circular-progress-rotate 1568ms var(--mdui-motion-easing-linear) infinite}.indeterminate .circle,.indeterminate .layer{position:absolute;width:100%;height:100%}.indeterminate .layer{animation:mdui-comp-circular-progress-layer-rotate 5332ms var(--mdui-motion-easing-standard) infinite both}.indeterminate .circle{fill:transparent;stroke:inherit}.indeterminate .gap-patch{position:absolute;top:0;left:47.5%;width:5%;height:100%;overflow:hidden}.indeterminate .gap-patch .circle{left:-900%;width:2000%;transform:rotate(180deg)}.indeterminate .clipper{position:relative;display:inline-block;width:50%;height:100%;overflow:hidden}.indeterminate .clipper .circle{width:200%}.indeterminate .clipper.left .circle{animation:mdui-comp-circular-progress-left-spin 1333ms var(--mdui-motion-easing-standard) infinite both}.indeterminate .clipper.right .circle{left:-100%;animation:mdui-comp-circular-progress-right-spin 1333ms var(--mdui-motion-easing-standard) infinite both}@keyframes mdui-comp-circular-progress-rotate{to{transform:rotate(360deg)}}@keyframes mdui-comp-circular-progress-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdui-comp-circular-progress-left-spin{0%{transform:rotate(265deg)}50%{transform:rotate(130deg)}100%{transform:rotate(265deg)}}@keyframes mdui-comp-circular-progress-right-spin{0%{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}100%{transform:rotate(-265deg)}}`;
  let CircularProgress = class CircularProgress2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.max = 1;
    }
    render() {
      const isDeterminate = !isUndefined(this.value);
      return x`<div class="progress ${e2({
      determinate: isDeterminate,
      indeterminate: !isDeterminate
    })}">${isDeterminate ? this.renderDeterminate() : this.renderInDeterminate()}</div>`;
    }
    renderDeterminate() {
      const value = this.value;
      const strokeWidth = 4;
      const circleRadius = 18;
      const π = 3.1415926;
      const center = circleRadius + strokeWidth / 2;
      const circumference = 2 * π * circleRadius;
      const determinateStrokeDashOffset = (1 - value / Math.max(this.max ?? value, value)) * circumference;
      return x`<svg viewBox="0 0 ${center * 2} ${center * 2}"><circle class="track" cx="${center}" cy="${center}" r="${circleRadius}" stroke-width="${strokeWidth}"></circle><circle class="circle" cx="${center}" cy="${center}" r="${circleRadius}" stroke-dasharray="${2 * π * circleRadius}" stroke-dashoffset="${determinateStrokeDashOffset}" stroke-width="${strokeWidth}"></circle></svg>`;
    }
    renderInDeterminate() {
      const strokeWidth = 4;
      const circleRadius = 18;
      const π = 3.1415926;
      const center = circleRadius + strokeWidth / 2;
      const circumference = 2 * π * circleRadius;
      const halfCircumference = 0.5 * circumference;
      const circle = (thisStrokeWidth) => x`<svg class="circle" viewBox="0 0 ${center * 2} ${center * 2}"><circle cx="${center}" cy="${center}" r="${circleRadius}" stroke-dasharray="${circumference}" stroke-dashoffset="${halfCircumference}" stroke-width="${thisStrokeWidth}"></circle></svg>`;
      return x`<div class="layer"><div class="clipper left">${circle(strokeWidth)}</div><div class="gap-patch">${circle(strokeWidth * 0.8)}</div><div class="clipper right">${circle(strokeWidth)}</div></div>`;
    }
  };
  CircularProgress.styles = [componentStyle, style$j];
  __decorate([
    n$5({ type: Number, reflect: true })
  ], CircularProgress.prototype, "max", void 0);
  __decorate([
    n$5({ type: Number })
  ], CircularProgress.prototype, "value", void 0);
  CircularProgress = __decorate([
    t$2("mdui-circular-progress")
  ], CircularProgress);
  const style$i = i$7`:host{position:absolute;top:0;left:0;display:block;width:100%;height:100%;overflow:hidden;pointer-events:none}.surface{position:absolute;top:0;left:0;width:100%;height:100%;transition-duration:280ms;transition-property:background-color;pointer-events:none;transition-timing-function:var(--mdui-motion-easing-standard)}.hover{background-color:rgba(var(--mdui-comp-ripple-state-layer-color,var(--mdui-color-on-surface)),var(--mdui-state-layer-hover))}:host-context([focus-visible]) .focused{background-color:rgba(var(--mdui-comp-ripple-state-layer-color,var(--mdui-color-on-surface)),var(--mdui-state-layer-focus))}.dragged{background-color:rgba(var(--mdui-comp-ripple-state-layer-color,var(--mdui-color-on-surface)),var(--mdui-state-layer-dragged))}.wave{position:absolute;z-index:1;background-color:rgb(var(--mdui-comp-ripple-state-layer-color,var(--mdui-color-on-surface)));border-radius:50%;transform:translate3d(0,0,0) scale(.4);opacity:0;animation:225ms ease 0s 1 normal forwards running mdui-comp-ripple-radius-in,75ms ease 0s 1 normal forwards running mdui-comp-ripple-opacity-in;pointer-events:none}.out{transform:translate3d(var(--mdui-comp-ripple-transition-x,0),var(--mdui-comp-ripple-transition-y,0),0) scale(1);animation:150ms ease 0s 1 normal none running mdui-comp-ripple-opacity-out}@keyframes mdui-comp-ripple-radius-in{from{transform:translate3d(0,0,0) scale(.4);animation-timing-function:var(--mdui-motion-easing-standard)}to{transform:translate3d(var(--mdui-comp-ripple-transition-x,0),var(--mdui-comp-ripple-transition-y,0),0) scale(1)}}@keyframes mdui-comp-ripple-opacity-in{from{opacity:0;animation-timing-function:linear}to{opacity:var(--mdui-state-layer-pressed)}}@keyframes mdui-comp-ripple-opacity-out{from{animation-timing-function:linear;opacity:var(--mdui-state-layer-pressed)}to{opacity:0}}`;
  let Ripple = class Ripple2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.noRipple = false;
      this.hover = false;
      this.focused = false;
      this.dragged = false;
      this.surfaceRef = e$1();
    }
    startPress(event) {
      if (this.noRipple) {
        return;
      }
      const $surface = $$1(this.surfaceRef.value);
      const surfaceHeight = $surface.innerHeight();
      const surfaceWidth = $surface.innerWidth();
      let touchStartX;
      let touchStartY;
      if (!event) {
        touchStartX = surfaceWidth / 2;
        touchStartY = surfaceHeight / 2;
      } else {
        const touchPosition = typeof TouchEvent !== "undefined" && event instanceof TouchEvent && event.touches.length ? event.touches[0] : event;
        const offset = $surface.offset();
        if (touchPosition.pageX < offset.left || touchPosition.pageX > offset.left + surfaceWidth || touchPosition.pageY < offset.top || touchPosition.pageY > offset.top + surfaceHeight) {
          return;
        }
        touchStartX = touchPosition.pageX - offset.left;
        touchStartY = touchPosition.pageY - offset.top;
      }
      const diameter = Math.max(Math.pow(Math.pow(surfaceHeight, 2) + Math.pow(surfaceWidth, 2), 0.5), 48);
      const translateX = `${-touchStartX + surfaceWidth / 2}px`;
      const translateY = `${-touchStartY + surfaceHeight / 2}px`;
      const translate = `translate3d(${translateX}, ${translateY}, 0) scale(1)`;
      $$1('<div class="wave"></div>').css({
        width: diameter,
        height: diameter,
        marginTop: -diameter / 2,
        marginLeft: -diameter / 2,
        left: touchStartX,
        top: touchStartY
      }).each((_2, wave) => {
        wave.style.setProperty("--mdui-comp-ripple-transition-x", translateX);
        wave.style.setProperty("--mdui-comp-ripple-transition-y", translateY);
      }).prependTo(this.surfaceRef.value).each((_2, wave) => wave.clientLeft).css("transform", translate).on("animationend", function(e3) {
        const event2 = e3;
        if (event2.animationName === "mdui-comp-ripple-radius-in") {
          $$1(this).data("filled", true);
        }
      });
    }
    endPress() {
      const $waves = $$1(this.surfaceRef.value).children().filter((_2, wave) => !$$1(wave).data("removing")).data("removing", true);
      const hideAndRemove = ($waves2) => {
        $waves2.addClass("out").each((_2, wave) => wave.clientLeft).on("animationend", function() {
          $$1(this).remove();
        });
      };
      $waves.filter((_2, wave) => !$$1(wave).data("filled")).on("animationend", function(e3) {
        const event = e3;
        if (event.animationName === "mdui-comp-ripple-radius-in") {
          hideAndRemove($$1(this));
        }
      });
      hideAndRemove($waves.filter((_2, wave) => !!$$1(wave).data("filled")));
    }
    startHover() {
      this.hover = true;
    }
    endHover() {
      this.hover = false;
    }
    startFocus() {
      this.focused = true;
    }
    endFocus() {
      this.focused = false;
    }
    startDrag() {
      this.dragged = true;
    }
    endDrag() {
      this.dragged = false;
    }
    render() {
      return x`<div ${n$1(this.surfaceRef)} class="surface ${e2({
      hover: this.hover,
      focused: this.focused,
      dragged: this.dragged
    })}"></div>`;
    }
  };
  Ripple.styles = [componentStyle, style$i];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "no-ripple"
    })
  ], Ripple.prototype, "noRipple", void 0);
  __decorate([
    r$1()
  ], Ripple.prototype, "hover", void 0);
  __decorate([
    r$1()
  ], Ripple.prototype, "focused", void 0);
  __decorate([
    r$1()
  ], Ripple.prototype, "dragged", void 0);
  Ripple = __decorate([
    t$2("mdui-ripple")
  ], Ripple);
  const RippleMixin = (superclass) => {
    class Mixin extends superclass {
      constructor() {
        super(...arguments);
        this.noRipple = false;
        this.rippleIndex = void 0;
        this.getRippleIndex = () => this.rippleIndex;
      }
      /**
       * 子类要添加该属性,指向 <mdui-ripple> 元素
       * 如果一个组件中包含多个 <mdui-ripple> 元素,则这里可以是一个数组或 NodeList
       */
      get rippleElement() {
        throw new Error("Must implement rippleElement getter!");
      }
      /**
       * 子类要实现该属性,表示是否禁用 ripple
       * 如果一个组件中包含多个 <mdui-ripple> 元素,则这里可以是一个数组;也可以是单个值,同时控制多个 <mdui-ripple> 元素
       */
      get rippleDisabled() {
        throw new Error("Must implement rippleDisabled getter!");
      }
      /**
       * 当前 <mdui-ripple> 元素相对于哪个元素存在,即 hover、pressed、dragged 属性要添加到哪个元素上,默认为 :host
       * 如果需要修改该属性,则子类可以实现该属性
       * 如果一个组件中包含多个 <mdui-ripple> 元素,则这里可以是一个数组;也可以是单个值,同时控制多个 <mdui-ripple> 元素
       */
      get rippleTarget() {
        return this;
      }
      firstUpdated(changedProperties) {
        super.firstUpdated(changedProperties);
        const $rippleTarget = $$1(this.rippleTarget);
        const setRippleIndex = (event) => {
          if (isArrayLike(this.rippleTarget)) {
            this.rippleIndex = $rippleTarget.index(event.target);
          }
        };
        const rippleTargetArr = isArrayLike(this.rippleTarget) ? this.rippleTarget : [this.rippleTarget];
        rippleTargetArr.forEach((rippleTarget) => {
          rippleTarget.addEventListener("pointerdown", (event) => {
            setRippleIndex(event);
            this.startPress(event);
          });
          rippleTarget.addEventListener("pointerenter", (event) => {
            setRippleIndex(event);
            this.startHover(event);
          });
          rippleTarget.addEventListener("pointerleave", (event) => {
            setRippleIndex(event);
            this.endHover(event);
          });
          rippleTarget.addEventListener("focus", (event) => {
            setRippleIndex(event);
            this.startFocus();
          });
          rippleTarget.addEventListener("blur", (event) => {
            setRippleIndex(event);
            this.endFocus();
          });
        });
      }
      /**
       * 若存在多个 <mdui-ripple>,但 rippleTarget 为同一个,则 hover 状态无法在多个 <mdui-ripple> 之间切换
       * 所以把 startHover 和 endHover 设置为 protected,供子类调用
       * 子类中,在 getRippleIndex() 的返回值变更前调用 endHover(event),变更后调用 startHover(event)
       */
      startHover(event) {
        if (event.pointerType !== "mouse" || this.isRippleDisabled()) {
          return;
        }
        this.getRippleTarget().setAttribute("hover", "");
        this.getRippleElement().startHover();
      }
      endHover(event) {
        if (event.pointerType !== "mouse" || this.isRippleDisabled()) {
          return;
        }
        this.getRippleTarget().removeAttribute("hover");
        this.getRippleElement().endHover();
      }
      /**
       * 当前激活的 <mdui-ripple> 元素是否被禁用
       */
      isRippleDisabled() {
        const disabled = this.rippleDisabled;
        if (!Array.isArray(disabled)) {
          return disabled;
        }
        const rippleIndex = this.getRippleIndex();
        if (rippleIndex !== void 0) {
          return disabled[rippleIndex];
        }
        return disabled.length ? disabled[0] : false;
      }
      /**
       * 获取当前激活的 <mdui-ripple> 元素实例
       */
      getRippleElement() {
        const ripple = this.rippleElement;
        if (!isArrayLike(ripple)) {
          return ripple;
        }
        const rippleIndex = this.getRippleIndex();
        if (rippleIndex !== void 0) {
          return ripple[rippleIndex];
        }
        return ripple[0];
      }
      /**
       * 获取当前激活的 <mdui-ripple> 元素相对于哪个元素存在
       */
      getRippleTarget() {
        const target = this.rippleTarget;
        if (!isArrayLike(target)) {
          return target;
        }
        const rippleIndex = this.getRippleIndex();
        if (rippleIndex !== void 0) {
          return target[rippleIndex];
        }
        return target[0];
      }
      startFocus() {
        if (this.isRippleDisabled()) {
          return;
        }
        this.getRippleElement().startFocus();
      }
      endFocus() {
        if (this.isRippleDisabled()) {
          return;
        }
        this.getRippleElement().endFocus();
      }
      startPress(event) {
        if (this.isRippleDisabled() || event.button) {
          return;
        }
        const target = this.getRippleTarget();
        target.setAttribute("pressed", "");
        if (["touch", "pen"].includes(event.pointerType)) {
          let hidden = false;
          let timer = setTimeout(() => {
            timer = 0;
            this.getRippleElement().startPress(event);
          }, 70);
          const hideRipple = () => {
            if (timer) {
              clearTimeout(timer);
              timer = 0;
              this.getRippleElement().startPress(event);
            }
            if (!hidden) {
              hidden = true;
              this.endPress();
            }
            target.removeEventListener("pointerup", hideRipple);
            target.removeEventListener("pointercancel", hideRipple);
          };
          const touchMove = () => {
            if (timer) {
              clearTimeout(timer);
              timer = 0;
            }
            target.removeEventListener("touchmove", touchMove);
          };
          target.addEventListener("touchmove", touchMove);
          target.addEventListener("pointerup", hideRipple);
          target.addEventListener("pointercancel", hideRipple);
        }
        if (event.pointerType === "mouse" && event.button === 0) {
          const hideRipple = () => {
            this.endPress();
            target.removeEventListener("pointerup", hideRipple);
            target.removeEventListener("pointercancel", hideRipple);
            target.removeEventListener("pointerleave", hideRipple);
          };
          this.getRippleElement().startPress(event);
          target.addEventListener("pointerup", hideRipple);
          target.addEventListener("pointercancel", hideRipple);
          target.addEventListener("pointerleave", hideRipple);
        }
      }
      endPress() {
        if (this.isRippleDisabled()) {
          return;
        }
        this.getRippleTarget().removeAttribute("pressed");
        this.getRippleElement().endPress();
      }
      startDrag() {
        if (this.isRippleDisabled()) {
          return;
        }
        this.getRippleElement().startDrag();
      }
      endDrag() {
        if (this.isRippleDisabled()) {
          return;
        }
        this.getRippleElement().endDrag();
      }
    }
    __decorate([
      n$5({
        type: Boolean,
        reflect: true,
        converter: booleanConverter,
        attribute: "no-ripple"
      })
    ], Mixin.prototype, "noRipple", void 0);
    return Mixin;
  };
  const buttonBaseStyle = i$7`.button{position:relative;display:inline-flex;align-items:center;justify-content:center;height:100%;padding:0;overflow:hidden;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;letter-spacing:inherit;white-space:nowrap;text-align:center;text-decoration:none;vertical-align:middle;background:0 0;border:none;outline:0;cursor:inherit;-webkit-user-select:none;user-select:none;touch-action:manipulation;zoom:1;-webkit-user-drag:none}`;
  class ButtonBase extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.loading = false;
      this.name = "";
      this.value = "";
      this.type = "button";
      this.formNoValidate = false;
      this.formController = new FormController(this);
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      if (this.isButton()) {
        return this.focusElement.validity;
      }
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      if (this.isButton()) {
        return this.focusElement.validationMessage;
      }
    }
    get rippleDisabled() {
      return this.disabled || this.loading;
    }
    get focusElement() {
      var _a2, _b;
      return this.isButton() ? (_a2 = this.renderRoot) == null ? void 0 : _a2.querySelector("._button") : !this.focusDisabled ? (_b = this.renderRoot) == null ? void 0 : _b.querySelector("._a") : this;
    }
    get focusDisabled() {
      return this.disabled || this.loading;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      if (this.isButton()) {
        const valid = this.focusElement.checkValidity();
        if (!valid) {
          this.emit("invalid", {
            bubbles: false,
            cancelable: true,
            composed: false
          });
        }
        return valid;
      }
      return true;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      if (this.isButton()) {
        const invalid = !this.focusElement.reportValidity();
        if (invalid) {
          this.emit("invalid", {
            bubbles: false,
            cancelable: true,
            composed: false
          });
        }
        return !invalid;
      }
      return true;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      if (this.isButton()) {
        this.focusElement.setCustomValidity(message);
      }
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("click", () => {
        if (this.type === "submit") {
          this.formController.submit(this);
        }
        if (this.type === "reset") {
          this.formController.reset(this);
        }
      });
    }
    renderLoading() {
      return this.loading ? x`<mdui-circular-progress part="loading"></mdui-circular-progress>` : nothingTemplate;
    }
    renderButton({ id: id2, className: className2, part, content = x`<slot></slot>` }) {
      return x`<button id="${o$5(id2)}" class="${cc(["_button", className2])}" part="${o$5(part)}" ?disabled="${this.rippleDisabled || this.focusDisabled}">${content}</button>`;
    }
    isButton() {
      return !this.href;
    }
  }
  ButtonBase.styles = [
    componentStyle,
    buttonBaseStyle
  ];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ButtonBase.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ButtonBase.prototype, "loading", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ButtonBase.prototype, "name", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ButtonBase.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ButtonBase.prototype, "type", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ButtonBase.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "formaction" })
  ], ButtonBase.prototype, "formAction", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "formenctype" })
  ], ButtonBase.prototype, "formEnctype", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "formmethod" })
  ], ButtonBase.prototype, "formMethod", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "formnovalidate"
    })
  ], ButtonBase.prototype, "formNoValidate", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "formtarget" })
  ], ButtonBase.prototype, "formTarget", void 0);
  const style$h = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);position:relative;display:inline-block;flex-shrink:0;overflow:hidden;text-align:center;border-radius:var(--shape-corner);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:box-shadow var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);min-width:3rem;height:2.5rem;color:rgb(var(--mdui-color-primary));font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height)}.button{width:100%;padding:0 1rem}:host([full-width]:not([full-width=false i])){display:block}:host([variant=elevated]){box-shadow:var(--mdui-elevation-level1);background-color:rgb(var(--mdui-color-surface-container-low));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=filled]){color:rgb(var(--mdui-color-on-primary));background-color:rgb(var(--mdui-color-primary));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-primary)}:host([variant=tonal]){color:rgb(var(--mdui-color-on-secondary-container));background-color:rgb(var(--mdui-color-secondary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([variant=outlined]){border:.0625rem solid rgb(var(--mdui-color-outline));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=text]){--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=outlined][focus-visible]){border-color:rgb(var(--mdui-color-primary))}:host([variant=elevated][hover]){box-shadow:var(--mdui-elevation-level2)}:host([variant=filled][hover]),:host([variant=tonal][hover]){box-shadow:var(--mdui-elevation-level1)}:host([disabled]:not([disabled=false i])),:host([loading]:not([loading=false i])){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])){color:rgba(var(--mdui-color-on-surface),38%);box-shadow:var(--mdui-elevation-level0)}:host([variant=elevated][disabled]:not([disabled=false i])),:host([variant=filled][disabled]:not([disabled=false i])),:host([variant=tonal][disabled]:not([disabled=false i])){background-color:rgba(var(--mdui-color-on-surface),12%)}:host([variant=outlined][disabled]:not([disabled=false i])){border-color:rgba(var(--mdui-color-on-surface),12%)}.label{display:inline-flex;padding-right:.5rem;padding-left:.5rem}.end-icon,.icon{display:inline-flex;font-size:1.28571429em}.end-icon mdui-icon,.icon mdui-icon,::slotted([slot=end-icon]),::slotted([slot=icon]){font-size:inherit}mdui-circular-progress{display:inline-flex;width:1.125rem;height:1.125rem}:host([variant=filled]) mdui-circular-progress{stroke:rgb(var(--mdui-color-on-primary))}:host([variant=tonal]) mdui-circular-progress{stroke:rgb(var(--mdui-color-on-secondary-container))}:host([disabled]:not([disabled=false i])) mdui-circular-progress{stroke:rgba(var(--mdui-color-on-surface),38%)}`;
  let Button = class Button2 extends ButtonBase {
    constructor() {
      super(...arguments);
      this.variant = "filled";
      this.fullWidth = false;
      this.rippleRef = e$1();
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    render() {
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.isButton() ? this.renderButton({
      className: "button",
      part: "button",
      content: this.renderInner()
    }) : this.disabled || this.loading ? x`<span part="button" class="button _a">${this.renderInner()}</span>` : this.renderAnchor({
      className: "button",
      part: "button",
      content: this.renderInner()
    })}`;
    }
    renderIcon() {
      if (this.loading) {
        return this.renderLoading();
      }
      return x`<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderLabel() {
      return x`<slot part="label" class="label"></slot>`;
    }
    renderEndIcon() {
      return x`<slot name="end-icon" part="end-icon" class="end-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderInner() {
      return [this.renderIcon(), this.renderLabel(), this.renderEndIcon()];
    }
  };
  Button.styles = [ButtonBase.styles, style$h];
  __decorate([
    n$5({ reflect: true })
  ], Button.prototype, "variant", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "full-width"
    })
  ], Button.prototype, "fullWidth", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Button.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], Button.prototype, "endIcon", void 0);
  Button = __decorate([
    t$2("mdui-button")
  ], Button);
  const style$g = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);position:relative;display:inline-block;flex-shrink:0;overflow:hidden;text-align:center;border-radius:var(--shape-corner);cursor:pointer;-webkit-tap-highlight-color:transparent;font-size:1.5rem;width:2.5rem;height:2.5rem}:host([variant=standard]){color:rgb(var(--mdui-color-on-surface-variant));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}:host([variant=filled]){color:rgb(var(--mdui-color-primary));background-color:rgb(var(--mdui-color-surface-container-highest));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=tonal]){color:rgb(var(--mdui-color-on-surface-variant));background-color:rgb(var(--mdui-color-surface-container-highest));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}:host([variant=outlined]){border:.0625rem solid rgb(var(--mdui-color-outline));color:rgb(var(--mdui-color-on-surface-variant));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}:host([variant=outlined][pressed]){color:rgb(var(--mdui-color-on-surface));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([variant=standard][selected]:not([selected=false i])){color:rgb(var(--mdui-color-primary));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=filled]:not([selectable])),:host([variant=filled][selectable=false i]),:host([variant=filled][selected]:not([selected=false i])){color:rgb(var(--mdui-color-on-primary));background-color:rgb(var(--mdui-color-primary));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-primary)}:host([variant=tonal]:not([selectable])),:host([variant=tonal][selectable=false i]),:host([variant=tonal][selected]:not([selected=false i])){color:rgb(var(--mdui-color-on-secondary-container));background-color:rgb(var(--mdui-color-secondary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([variant=outlined][selected]:not([selected=false i])){border:none;color:rgb(var(--mdui-color-inverse-on-surface));background-color:rgb(var(--mdui-color-inverse-surface));--mdui-comp-ripple-state-layer-color:var(--mdui-color-inverse-on-surface)}:host([variant=filled][disabled]:not([disabled=false i])),:host([variant=outlined][disabled]:not([disabled=false i])),:host([variant=tonal][disabled]:not([disabled=false i])){background-color:rgba(var(--mdui-color-on-surface),.12);border-color:rgba(var(--mdui-color-on-surface),.12)}:host([disabled]:not([disabled=false i])),:host([loading]:not([loading=false i])){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])){color:rgba(var(--mdui-color-on-surface),.38)!important}:host([loading]:not([loading=false i])) .button,:host([loading]:not([loading=false i])) mdui-ripple{opacity:0}.button{float:left;width:100%}.icon,.selected-icon mdui-icon,::slotted(*){font-size:inherit}mdui-circular-progress{display:flex;position:absolute;top:calc(50% - 1.5rem / 2);left:calc(50% - 1.5rem / 2);width:1.5rem;height:1.5rem}:host([variant=filled]:not([disabled])) mdui-circular-progress,:host([variant=filled][disabled=false i]) mdui-circular-progress{stroke:rgb(var(--mdui-color-on-primary))}:host([disabled]:not([disabled=false i])) mdui-circular-progress{stroke:rgba(var(--mdui-color-on-surface),38%)}`;
  let ButtonIcon = class ButtonIcon2 extends ButtonBase {
    constructor() {
      super(...arguments);
      this.variant = "standard";
      this.selectable = false;
      this.selected = false;
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "[default]", "selected-icon");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    onSelectedChange() {
      this.emit("change");
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.addEventListener("click", () => {
        if (!this.selectable || this.disabled) {
          return;
        }
        this.selected = !this.selected;
      });
    }
    render() {
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.isButton() ? this.renderButton({
      className: "button",
      part: "button",
      content: this.renderIcon()
    }) : this.disabled || this.loading ? x`<span part="button" class="button _a">${this.renderIcon()}</span>` : this.renderAnchor({
      className: "button",
      part: "button",
      content: this.renderIcon()
    })} ${this.renderLoading()}`;
    }
    renderIcon() {
      const icon = () => this.hasSlotController.test("[default]") ? x`<slot></slot>` : this.icon ? x`<mdui-icon part="icon" class="icon" name="${this.icon}"></mdui-icon>` : nothingTemplate;
      const selectedIcon = () => this.hasSlotController.test("selected-icon") || this.selectedIcon ? x`<slot name="selected-icon" part="selected-icon" class="selected-icon"><mdui-icon name="${this.selectedIcon}"></mdui-icon></slot>` : icon();
      return this.selected ? selectedIcon() : icon();
    }
  };
  ButtonIcon.styles = [ButtonBase.styles, style$g];
  __decorate([
    n$5({ reflect: true })
  ], ButtonIcon.prototype, "variant", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ButtonIcon.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "selected-icon" })
  ], ButtonIcon.prototype, "selectedIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ButtonIcon.prototype, "selectable", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ButtonIcon.prototype, "selected", void 0);
  __decorate([
    watch("selected", true)
  ], ButtonIcon.prototype, "onSelectedChange", null);
  ButtonIcon = __decorate([
    t$2("mdui-button-icon")
  ], ButtonIcon);
  const style$f = i$7`:host{--shape-corner:var(--mdui-shape-corner-medium);position:relative;display:inline-block;overflow:hidden;border-radius:var(--shape-corner);-webkit-tap-highlight-color:transparent;transition:box-shadow var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([clickable]:not([clickable=false i])){cursor:pointer}:host([variant=elevated]){background-color:rgb(var(--mdui-color-surface-container-low));box-shadow:var(--mdui-elevation-level1)}:host([variant=filled]){background-color:rgb(var(--mdui-color-surface-container-highest))}:host([variant=outlined]){background-color:rgb(var(--mdui-color-surface));border:.0625rem solid rgb(var(--mdui-color-outline))}:host([variant=elevated][hover]){box-shadow:var(--mdui-elevation-level2)}:host([variant=filled][hover]),:host([variant=outlined][hover]){box-shadow:var(--mdui-elevation-level1)}:host([variant=elevated][dragged]),:host([variant=filled][dragged]),:host([variant=outlined][dragged]){box-shadow:var(--mdui-elevation-level3)}:host([disabled]:not([disabled=false i])){opacity:.38;cursor:default;-webkit-user-select:none;user-select:none}:host([variant=elevated][disabled]:not([disabled=false i])){background-color:rgb(var(--mdui-color-surface-variant));box-shadow:var(--mdui-elevation-level0)}:host([variant=filled][disabled]:not([disabled=false i])){background-color:rgb(var(--mdui-color-surface));box-shadow:var(--mdui-elevation-level1)}:host([variant=outlined][disabled]:not([disabled=false i])){box-shadow:var(--mdui-elevation-level0);border-color:rgba(var(--mdui-color-outline),.32)}.link{position:relative;display:inline-block;width:100%;height:100%;color:inherit;font-size:inherit;letter-spacing:inherit;text-decoration:none;touch-action:manipulation;-webkit-user-drag:none}`;
  let Card = class Card2 extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super(...arguments);
      this.variant = "elevated";
      this.clickable = false;
      this.disabled = false;
      this.rippleRef = e$1();
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.disabled || !this.href && !this.clickable;
    }
    get focusElement() {
      return this.href && !this.disabled ? this.renderRoot.querySelector("._a") : this;
    }
    get focusDisabled() {
      return this.rippleDisabled;
    }
    render() {
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.href && !this.disabled ? this.renderAnchor({
      className: "link",
      content: x`<slot></slot>`
    }) : x`<slot></slot>`}`;
    }
  };
  Card.styles = [componentStyle, style$f];
  __decorate([
    n$5({ reflect: true })
  ], Card.prototype, "variant", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Card.prototype, "clickable", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Card.prototype, "disabled", void 0);
  Card = __decorate([
    t$2("mdui-card")
  ], Card);
  /**
   * @license
   * Copyright 2020 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const l = e$3(class extends i$3 {
    constructor(r3) {
      if (super(r3), r3.type !== t$1.PROPERTY && r3.type !== t$1.ATTRIBUTE && r3.type !== t$1.BOOLEAN_ATTRIBUTE) throw Error("The `live` directive is not allowed on child or event bindings");
      if (!f$1(r3)) throw Error("`live` bindings can only contain a single expression");
    }
    render(r3) {
      return r3;
    }
    update(i3, [t2]) {
      if (t2 === T || t2 === E) return t2;
      const o2 = i3.element, l2 = i3.name;
      if (i3.type === t$1.PROPERTY) {
        if (t2 === o2[l2]) return T;
      } else if (i3.type === t$1.BOOLEAN_ATTRIBUTE) {
        if (!!t2 === o2.hasAttribute(l2)) return T;
      } else if (i3.type === t$1.ATTRIBUTE && o2.getAttribute(l2) === t2 + "") return T;
      return m$1(i3), t2;
    }
  });
  function defaultValue(propertyName = "value") {
    return (proto, key2) => {
      const constructor = proto.constructor;
      const attributeChangedCallback = constructor.prototype.attributeChangedCallback;
      constructor.prototype.attributeChangedCallback = function(name, old, value) {
        const options = constructor.getPropertyOptions(propertyName);
        const attributeName = isString(options.attribute) ? options.attribute : propertyName;
        if (name === attributeName) {
          const converter = options.converter || u$2;
          const fromAttribute = isFunction(converter) ? converter : (converter == null ? void 0 : converter.fromAttribute) ?? u$2.fromAttribute;
          const newValue = fromAttribute(value, options.type);
          if (this[propertyName] !== newValue) {
            this[key2] = newValue;
          }
        }
        attributeChangedCallback.call(this, name, old, value);
      };
    };
  }
  const style$e = i$7`:host{display:inline-block;width:1em;height:1em;line-height:1;font-size:1.5rem}`;
  const svgTag = (svgPaths) => x`<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="currentColor">${o$3(svgPaths)}</svg>`;
  let IconCheckBoxOutlineBlank = class IconCheckBoxOutlineBlank2 extends r$3 {
    render() {
      return svgTag('<path d="M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"/>');
    }
  };
  IconCheckBoxOutlineBlank.styles = style$e;
  IconCheckBoxOutlineBlank = __decorate([
    t$2("mdui-icon-check-box-outline-blank")
  ], IconCheckBoxOutlineBlank);
  let IconCheckBox = class IconCheckBox2 extends r$3 {
    render() {
      return svgTag('<path d="M19 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm-9 14-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/>');
    }
  };
  IconCheckBox.styles = style$e;
  IconCheckBox = __decorate([
    t$2("mdui-icon-check-box")
  ], IconCheckBox);
  let IconIndeterminateCheckBox = class IconIndeterminateCheckBox2 extends r$3 {
    render() {
      return svgTag('<path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"/>');
    }
  };
  IconIndeterminateCheckBox.styles = style$e;
  IconIndeterminateCheckBox = __decorate([
    t$2("mdui-icon-indeterminate-check-box")
  ], IconIndeterminateCheckBox);
  const style$d = i$7`:host{position:relative;display:inline-flex;cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:.125rem;font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height)}label{display:inline-flex;align-items:center;width:100%;cursor:inherit;-webkit-user-select:none;user-select:none;touch-action:manipulation;zoom:1;-webkit-user-drag:none}input{position:absolute;padding:0;opacity:0;pointer-events:none;width:1.125rem;height:1.125rem;margin:0 0 0 .6875rem}.icon{display:flex;position:absolute;opacity:1;transform:scale(1);color:rgb(var(--mdui-color-on-surface));font-size:1.5rem;transition:color var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}.checked-icon,.indeterminate-icon{opacity:0;transform:scale(.5);transition-property:color,opacity,transform;transition-duration:var(--mdui-motion-duration-short4);transition-timing-function:var(--mdui-motion-easing-standard)}.icon .i,::slotted([slot=checked-icon]),::slotted([slot=indeterminate-icon]),::slotted([slot=unchecked-icon]){color:inherit;font-size:inherit}i{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;border-radius:50%;width:2.5rem;height:2.5rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}.label{display:flex;width:100%;padding-top:.625rem;padding-bottom:.625rem;color:rgb(var(--mdui-color-on-surface));transition:color var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}:host([checked]:not([checked=false i])) i{--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([checked]:not([checked=false i])) .icon{color:rgb(var(--mdui-color-primary))}:host([checked]:not([checked=false i])) .indeterminate-icon{opacity:0;transform:scale(.5)}:host([checked]:not([checked=false i])) .checked-icon{opacity:1;transform:scale(1)}:host([indeterminate]:not([indeterminate=false i])) i{--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([indeterminate]:not([indeterminate=false i])) .icon{color:rgb(var(--mdui-color-primary))}:host([indeterminate]:not([indeterminate=false i])) .checked-icon{opacity:0;transform:scale(.5)}:host([indeterminate]:not([indeterminate=false i])) .indeterminate-icon{opacity:1;transform:scale(1)}.invalid i{--mdui-comp-ripple-state-layer-color:var(--mdui-color-error)}.invalid .icon{color:rgb(var(--mdui-color-error))}.invalid .label{color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])) .icon{color:rgba(var(--mdui-color-on-surface),38%)}:host([disabled]:not([disabled=false i])) .label{color:rgba(var(--mdui-color-on-surface),38%)}:host([disabled][checked]:not([disabled=false i],[checked=false i])) .unchecked-icon,:host([disabled][indeterminate]:not([disabled=false i],[indeterminate=false i])) .unchecked-icon{opacity:0}`;
  let Checkbox = class Checkbox2 extends RippleMixin(FocusableMixin(MduiElement)) {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.checked = false;
      this.defaultChecked = false;
      this.indeterminate = false;
      this.required = false;
      this.name = "";
      this.value = "on";
      this.invalid = false;
      this.inputRef = e$1();
      this.rippleRef = e$1();
      this.formController = new FormController(this, {
        value: (control) => control.checked ? control.value : void 0,
        defaultValue: (control) => control.defaultChecked,
        setValue: (control, checked) => control.checked = checked
      });
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get focusElement() {
      return this.inputRef.value;
    }
    get focusDisabled() {
      return this.disabled;
    }
    async onDisabledChange() {
      await this.updateComplete;
      this.invalid = !this.inputRef.value.checkValidity();
    }
    async onCheckedChange() {
      var _a2;
      await this.updateComplete;
      const form = this.formController.getForm();
      if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
        this.invalid = false;
        formResets.get(form).delete(this);
      } else {
        this.invalid = !this.inputRef.value.checkValidity();
      }
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        const eventProceeded = this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        if (!eventProceeded) {
          this.blur();
          this.focus();
        }
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
    }
    render() {
      return x`<label class="${e2({ invalid: this.invalid })}"><input ${n$1(this.inputRef)} type="checkbox" name="${o$5(this.name)}" value="${o$5(this.value)}" .indeterminate="${l(this.indeterminate)}" .disabled="${this.disabled}" .checked="${l(this.checked)}" .required="${this.required}" @change="${this.onChange}"> <i part="control"><mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple><slot name="unchecked-icon" part="unchecked-icon" class="icon unchecked-icon">${this.uncheckedIcon ? x`<mdui-icon name="${this.uncheckedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-check-box-outline-blank class="i"></mdui-icon-check-box-outline-blank>`}</slot><slot name="checked-icon" part="checked-icon" class="icon checked-icon">${this.checkedIcon ? x`<mdui-icon name="${this.checkedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-check-box class="i"></mdui-icon-check-box>`}</slot><slot name="indeterminate-icon" part="indeterminate-icon" class="icon indeterminate-icon">${this.indeterminateIcon ? x`<mdui-icon name="${this.indeterminateIcon}" class="i"></mdui-icon>` : x`<mdui-icon-indeterminate-check-box class="i"></mdui-icon-indeterminate-check-box>`}</slot></i><slot part="label" class="label"></slot></label>`;
    }
    /**
     * input[type="checkbox"] 的 change 事件无法冒泡越过 shadow dom
     */
    onChange() {
      this.checked = this.inputRef.value.checked;
      this.indeterminate = false;
      this.emit("change");
    }
  };
  Checkbox.styles = [componentStyle, style$d];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Checkbox.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Checkbox.prototype, "checked", void 0);
  __decorate([
    defaultValue("checked")
  ], Checkbox.prototype, "defaultChecked", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Checkbox.prototype, "indeterminate", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Checkbox.prototype, "required", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Checkbox.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Checkbox.prototype, "name", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Checkbox.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "unchecked-icon" })
  ], Checkbox.prototype, "uncheckedIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "checked-icon" })
  ], Checkbox.prototype, "checkedIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "indeterminate-icon" })
  ], Checkbox.prototype, "indeterminateIcon", void 0);
  __decorate([
    r$1()
  ], Checkbox.prototype, "invalid", void 0);
  __decorate([
    watch("disabled", true),
    watch("indeterminate", true),
    watch("required", true)
  ], Checkbox.prototype, "onDisabledChange", null);
  __decorate([
    watch("checked", true)
  ], Checkbox.prototype, "onCheckedChange", null);
  Checkbox = __decorate([
    t$2("mdui-checkbox")
  ], Checkbox);
  let IconCheck = class IconCheck2 extends r$3 {
    render() {
      return svgTag('<path d="M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>');
    }
  };
  IconCheck.styles = style$e;
  IconCheck = __decorate([
    t$2("mdui-icon-check")
  ], IconCheck);
  let IconClear = class IconClear2 extends r$3 {
    render() {
      return svgTag('<path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>');
    }
  };
  IconClear.styles = style$e;
  IconClear = __decorate([
    t$2("mdui-icon-clear")
  ], IconClear);
  const style$c = i$7`:host{--shape-corner:var(--mdui-shape-corner-small);position:relative;display:inline-block;flex-shrink:0;overflow:hidden;border-radius:var(--shape-corner);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:box-shadow var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);height:2rem;background-color:rgb(var(--mdui-color-surface));border:.0625rem solid rgb(var(--mdui-color-outline));color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height);--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}.button{padding-right:.4375rem;padding-left:.4375rem}:host([variant=input]) .button{padding-right:.1875rem;padding-left:.1875rem}:host([selected]:not([selected=false i])) .button{padding-right:.5rem;padding-left:.5rem}:host([selected][variant=input]:not([selected=false i])) .button{padding-right:.25rem;padding-left:.25rem}:host([elevated]:not([elevated=false i])) .button{padding-right:.5rem;padding-left:.5rem}:host([variant=assist]){color:rgb(var(--mdui-color-on-surface));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([elevated]:not([elevated=false i])){border-width:0;background-color:rgb(var(--mdui-color-surface-container-low));box-shadow:var(--mdui-elevation-level1)}:host([selected]:not([selected=false i])){color:rgb(var(--mdui-color-on-secondary-container));background-color:rgb(var(--mdui-color-secondary-container));border-width:0;--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([disabled]:not([disabled=false i])),:host([loading]:not([loading=false i])){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])){border-color:rgba(var(--mdui-color-on-surface),12%);color:rgba(var(--mdui-color-on-surface),38%);box-shadow:var(--mdui-elevation-level0)}:host([disabled][elevated]:not([disabled=false i],[elevated=false i])),:host([disabled][selected]:not([disabled=false i],[selected=false i])){background-color:rgba(var(--mdui-color-on-surface),12%)}:host([selected][hover]:not([selected=false i])){box-shadow:var(--mdui-elevation-level1)}:host([elevated][hover]:not([elevated=false i])){color:rgb(var(--mdui-color-on-secondary-container));box-shadow:var(--mdui-elevation-level2)}:host([variant=filter][hover]),:host([variant=input][hover]),:host([variant=suggestion][hover]){color:rgb(var(--mdui-color-on-surface-variant))}:host([variant=filter][focus-visible]),:host([variant=input][focus-visible]),:host([variant=suggestion][focus-visible]){border-color:rgb(var(--mdui-color-on-surface-variant))}:host([dragged]),:host([dragged][hover]){box-shadow:var(--mdui-elevation-level4)}.button{overflow:visible}.label{display:inline-flex;padding-right:.5rem;padding-left:.5rem}.end-icon,.icon,.selected-icon{display:inline-flex;font-size:1.28571429em;color:rgb(var(--mdui-color-on-surface-variant))}:host([variant=assist]) .end-icon,:host([variant=assist]) .icon,:host([variant=assist]) .selected-icon{color:rgb(var(--mdui-color-primary))}:host([selected]:not([selected=false i])) .end-icon,:host([selected]:not([selected=false i])) .icon,:host([selected]:not([selected=false i])) .selected-icon{color:rgb(var(--mdui-color-on-secondary-container))}:host([disabled]:not([disabled=false i])) .end-icon,:host([disabled]:not([disabled=false i])) .icon,:host([disabled]:not([disabled=false i])) .selected-icon{opacity:.38;color:rgb(var(--mdui-color-on-surface))}.end-icon .i,.icon .i,.selected-icon .i,::slotted([slot=end-icon]),::slotted([slot=icon]),::slotted([slot=selected-icon]){font-size:inherit}:host([variant=input]) .has-icon .icon,:host([variant=input]) .has-icon .selected-icon,:host([variant=input]) .has-icon mdui-circular-progress{margin-left:.25rem}:host([variant=input]) .has-end-icon .end-icon{margin-right:.25rem}mdui-circular-progress{display:inline-flex;width:1.125rem;height:1.125rem}:host([disabled]:not([disabled=false i])) mdui-circular-progress{stroke:rgba(var(--mdui-color-on-surface),38%)}::slotted(mdui-avatar[slot=end-icon]),::slotted(mdui-avatar[slot=icon]),::slotted(mdui-avatar[slot=selected-icon]){width:1.5rem;height:1.5rem}:host([disabled]:not([disabled=false i])) ::slotted(mdui-avatar[slot=end-icon]),:host([disabled]:not([disabled=false i])) ::slotted(mdui-avatar[slot=icon]),:host([disabled]:not([disabled=false i])) ::slotted(mdui-avatar[slot=selected-icon]){opacity:.38}::slotted(mdui-avatar[slot=icon]),::slotted(mdui-avatar[slot=selected-icon]){margin-left:-.25rem;margin-right:-.125rem}::slotted(mdui-avatar[slot=end-icon]){margin-right:-.25rem;margin-left:-.125rem}.delete-icon{display:inline-flex;font-size:1.28571429em;transition:background-color var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);border-radius:var(--mdui-shape-corner-full);margin-right:-.25rem;margin-left:-.25rem;padding:.25rem;color:rgb(var(--mdui-color-on-surface-variant))}.delete-icon:hover{background-color:rgba(var(--mdui-color-on-surface-variant),12%)}.has-end-icon .delete-icon{margin-left:.25rem}:host([variant=assiat]) .delete-icon{color:rgb(var(--mdui-color-primary))}:host([variant=input]) .delete-icon{margin-right:.0625rem}:host([disabled]:not([disabled=false i])) .delete-icon{color:rgba(var(--mdui-color-on-surface),38%)}.delete-icon .i,::slotted([slot=delete-icon]){font-size:inherit}::slotted(mdui-avatar[slot=delete-icon]){width:1.125rem;height:1.125rem}`;
  let Chip = class Chip2 extends ButtonBase {
    constructor() {
      super();
      this.variant = "assist";
      this.elevated = false;
      this.selectable = false;
      this.selected = false;
      this.deletable = false;
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "icon", "selected-icon", "end-icon");
      this.onClick = this.onClick.bind(this);
      this.onKeyDown = this.onKeyDown.bind(this);
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    onSelectedChange() {
      this.emit("change");
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.addEventListener("click", this.onClick);
      this.addEventListener("keydown", this.onKeyDown);
    }
    render() {
      const hasIcon = this.icon || this.hasSlotController.test("icon");
      const hasEndIcon = this.endIcon || this.hasSlotController.test("end-icon");
      const hasSelectedIcon = this.selectedIcon || ["assist", "filter"].includes(this.variant) || hasIcon || this.hasSlotController.test("selected-icon");
      const className2 = cc({
        button: true,
        "has-icon": this.loading || !this.selected && hasIcon || this.selected && hasSelectedIcon,
        "has-end-icon": hasEndIcon
      });
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.isButton() ? this.renderButton({
      className: className2,
      part: "button",
      content: this.renderInner()
    }) : this.disabled || this.loading ? x`<span part="button" class="${className2} _a">${this.renderInner()}</span>` : this.renderAnchor({
      className: className2,
      part: "button",
      content: this.renderInner()
    })}`;
    }
    onClick() {
      if (this.disabled || this.loading) {
        return;
      }
      if (this.selectable) {
        this.selected = !this.selected;
      }
    }
    onKeyDown(event) {
      if (this.disabled || this.loading) {
        return;
      }
      if (this.selectable && event.key === " ") {
        event.preventDefault();
        this.selected = !this.selected;
      }
      if (this.deletable && ["Delete", "Backspace"].includes(event.key)) {
        this.emit("delete");
      }
    }
    /**
     * 点击删除按钮
     */
    onDelete(event) {
      event.stopPropagation();
      this.emit("delete");
    }
    renderIcon() {
      if (this.loading) {
        return this.renderLoading();
      }
      const icon = () => {
        return this.icon ? x`<mdui-icon name="${this.icon}" class="i"></mdui-icon>` : nothingTemplate;
      };
      const selectedIcon = () => {
        if (this.selectedIcon) {
          return x`<mdui-icon name="${this.selectedIcon}" class="i"></mdui-icon>`;
        }
        if (this.variant === "assist" || this.variant === "filter") {
          return x`<mdui-icon-check class="i"></mdui-icon-check>`;
        }
        return icon();
      };
      return !this.selected ? x`<slot name="icon" part="icon" class="icon">${icon()}</slot>` : x`<slot name="selected-icon" part="selected-icon" class="selected-icon">${selectedIcon()}</slot>`;
    }
    renderLabel() {
      return x`<slot part="label" class="label"></slot>`;
    }
    renderEndIcon() {
      return x`<slot name="end-icon" part="end-icon" class="end-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}" class="i"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderDeleteIcon() {
      if (!this.deletable) {
        return nothingTemplate;
      }
      return x`<slot name="delete-icon" part="delete-icon" class="delete-icon" @click="${this.onDelete}">${this.deleteIcon ? x`<mdui-icon name="${this.deleteIcon}" class="i"></mdui-icon>` : x`<mdui-icon-clear class="i"></mdui-icon-clear>`}</slot>`;
    }
    renderInner() {
      return [
        this.renderIcon(),
        this.renderLabel(),
        this.renderEndIcon(),
        this.renderDeleteIcon()
      ];
    }
  };
  Chip.styles = [ButtonBase.styles, style$c];
  __decorate([
    n$5({ reflect: true })
  ], Chip.prototype, "variant", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Chip.prototype, "elevated", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Chip.prototype, "selectable", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Chip.prototype, "selected", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Chip.prototype, "deletable", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Chip.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "selected-icon" })
  ], Chip.prototype, "selectedIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], Chip.prototype, "endIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "delete-icon" })
  ], Chip.prototype, "deleteIcon", void 0);
  __decorate([
    watch("selected", true)
  ], Chip.prototype, "onSelectedChange", null);
  Chip = __decorate([
    t$2("mdui-chip")
  ], Chip);
  const arraysEqualIgnoreOrder = (a2, b2) => {
    if (a2.length !== b2.length) {
      return false;
    }
    const sortedA = [...a2].sort();
    const sortedB = [...b2].sort();
    return sortedA.every((value, index) => value === sortedB[index]);
  };
  const collapseStyle = i$7`:host{display:block}`;
  let Collapse = class Collapse2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.accordion = false;
      this.disabled = false;
      this.activeKeys = [];
      this.isInitial = true;
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-collapse-item"]
      });
    }
    async onActiveKeysChange() {
      var _a2;
      await this.definedController.whenDefined();
      const value = this.accordion ? (_a2 = this.items.find((item) => this.activeKeys.includes(item.key))) == null ? void 0 : _a2.value : this.items.filter((item) => this.activeKeys.includes(item.key)).map((item) => item.value);
      this.setValue(value);
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      if (this.accordion) {
        const value = this.value;
        if (!value) {
          this.setActiveKeys([]);
        } else {
          const item = this.items.find((item2) => item2.value === value);
          this.setActiveKeys(item ? [item.key] : []);
        }
      } else {
        const value = this.value;
        if (!value.length) {
          this.setActiveKeys([]);
        } else {
          const activeKeys = this.items.filter((item) => value.includes(item.value)).map((item) => item.key);
          this.setActiveKeys(activeKeys);
        }
      }
      this.updateItems();
    }
    render() {
      return x`<slot @slotchange="${this.onSlotChange}" @click="${this.onClick}"></slot>`;
    }
    setActiveKeys(activeKeys) {
      if (!arraysEqualIgnoreOrder(this.activeKeys, activeKeys)) {
        this.activeKeys = activeKeys;
      }
    }
    setValue(value) {
      if (this.accordion || isUndefined(this.value) || isUndefined(value)) {
        this.value = value;
      } else if (!arraysEqualIgnoreOrder(this.value, value)) {
        this.value = value;
      }
    }
    onClick(event) {
      if (this.disabled) {
        return;
      }
      if (event.button) {
        return;
      }
      const target = event.target;
      const item = target.closest("mdui-collapse-item");
      if (!item || item.disabled) {
        return;
      }
      const path = event.composedPath();
      if (item.trigger && !path.find((element) => isElement(element) && $$1(element).is(item.trigger))) {
        return;
      }
      if (!path.find((element) => isElement(element) && element.part.contains("header"))) {
        return;
      }
      if (this.accordion) {
        if (this.activeKeys.includes(item.key)) {
          this.setActiveKeys([]);
        } else {
          this.setActiveKeys([item.key]);
        }
      } else {
        const activeKeys = [...this.activeKeys];
        if (activeKeys.includes(item.key)) {
          activeKeys.splice(activeKeys.indexOf(item.key), 1);
        } else {
          activeKeys.push(item.key);
        }
        this.setActiveKeys(activeKeys);
      }
      this.isInitial = false;
      this.updateItems();
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
    // 更新 <mdui-collapse-item> 的状态
    updateItems() {
      this.items.forEach((item) => {
        item.active = this.activeKeys.includes(item.key);
        item.isInitial = this.isInitial;
      });
    }
  };
  Collapse.styles = [
    componentStyle,
    collapseStyle
  ];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Collapse.prototype, "accordion", void 0);
  __decorate([
    n$5()
  ], Collapse.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Collapse.prototype, "disabled", void 0);
  __decorate([
    r$1()
  ], Collapse.prototype, "activeKeys", void 0);
  __decorate([
    o$6({ selector: "mdui-collapse-item", flatten: true })
  ], Collapse.prototype, "items", void 0);
  __decorate([
    watch("activeKeys", true)
  ], Collapse.prototype, "onActiveKeysChange", null);
  __decorate([
    watch("value")
  ], Collapse.prototype, "onValueChange", null);
  Collapse = __decorate([
    t$2("mdui-collapse")
  ], Collapse);
  const collapseItemStyle = i$7`:host{display:flex;flex-direction:column}.header{display:block}.body{display:block;overflow:hidden;transition:height var(--mdui-motion-duration-short4) var(--mdui-motion-easing-emphasized)}.body.opened{overflow:visible}.body.active{transition-duration:var(--mdui-motion-duration-medium4)}`;
  let CollapseItem = class CollapseItem2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.active = false;
      this.state = "closed";
      this.isInitial = true;
      this.key = uniqueId();
      this.bodyRef = e$1();
    }
    onActiveChange() {
      if (this.isInitial) {
        this.state = this.active ? "opened" : "closed";
        if (this.hasUpdated) {
          this.updateBodyHeight();
        }
      } else {
        this.state = this.active ? "open" : "close";
        this.emit(this.state);
        this.updateBodyHeight();
      }
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.updateBodyHeight();
    }
    render() {
      return x`<slot name="header" part="header" class="header">${this.header}</slot><slot part="body" class="body ${e2({
      opened: this.state === "opened",
      active: this.active
    })}" ${n$1(this.bodyRef)} @transitionend="${this.onTransitionEnd}"></slot>`;
    }
    onTransitionEnd(event) {
      if (event.target === this.bodyRef.value) {
        this.state = this.active ? "opened" : "closed";
        this.emit(this.state);
        this.updateBodyHeight();
      }
    }
    updateBodyHeight() {
      const scrollHeight = this.bodyRef.value.scrollHeight;
      if (this.state === "close") {
        $$1(this.bodyRef.value).height(scrollHeight);
        this.bodyRef.value.clientLeft;
      }
      $$1(this.bodyRef.value).height(this.state === "opened" ? "auto" : this.state === "open" ? scrollHeight : 0);
    }
  };
  CollapseItem.styles = [
    componentStyle,
    collapseItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], CollapseItem.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true })
  ], CollapseItem.prototype, "header", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], CollapseItem.prototype, "disabled", void 0);
  __decorate([
    n$5()
  ], CollapseItem.prototype, "trigger", void 0);
  __decorate([
    r$1()
  ], CollapseItem.prototype, "active", void 0);
  __decorate([
    r$1()
  ], CollapseItem.prototype, "state", void 0);
  __decorate([
    watch("active")
  ], CollapseItem.prototype, "onActiveChange", null);
  CollapseItem = __decorate([
    t$2("mdui-collapse-item")
  ], CollapseItem);
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  function n2(n3, r3, t2) {
    return n3 ? r3(n3) : t2 == null ? void 0 : t2(n3);
  }
  function animateTo(el, keyframes, options) {
    if (!el) {
      return Promise.resolve();
    }
    return new Promise((resolve) => {
      if (options.duration === Infinity) {
        throw new Error("Promise-based animations must be finite.");
      }
      if (isNumber(options.duration) && isNaN(options.duration)) {
        options.duration = 0;
      }
      if (options.easing === "") {
        options.easing = "linear";
      }
      const animation = el.animate(keyframes, options);
      animation.addEventListener("cancel", resolve, { once: true });
      animation.addEventListener("finish", resolve, { once: true });
    });
  }
  function stopAnimations(el) {
    if (!el) {
      return Promise.resolve();
    }
    return Promise.all(el.getAnimations().map((animation) => {
      return new Promise((resolve) => {
        const handleAnimationEvent = requestAnimationFrame(resolve);
        animation.addEventListener("cancel", () => handleAnimationEvent, {
          once: true
        });
        animation.addEventListener("finish", () => handleAnimationEvent, {
          once: true
        });
        animation.cancel();
      });
    }));
  }
  function isTabbable(el) {
    const window2 = getWindow$1();
    const localName = el.localName;
    if (el.getAttribute("tabindex") === "-1") {
      return false;
    }
    if (el.hasAttribute("disabled")) {
      return false;
    }
    if (el.hasAttribute("aria-disabled") && el.getAttribute("aria-disabled") !== "false") {
      return false;
    }
    if (localName === "input" && el.getAttribute("type") === "radio" && !el.hasAttribute("checked")) {
      return false;
    }
    if (el.offsetParent === null) {
      return false;
    }
    if (window2.getComputedStyle(el).visibility === "hidden") {
      return false;
    }
    if ((localName === "audio" || localName === "video") && el.hasAttribute("controls")) {
      return true;
    }
    if (el.hasAttribute("tabindex")) {
      return true;
    }
    if (el.hasAttribute("contenteditable") && el.getAttribute("contenteditable") !== "false") {
      return true;
    }
    return [
      "button",
      "input",
      "select",
      "textarea",
      "a",
      "audio",
      "video",
      "summary"
    ].includes(localName);
  }
  function getTabbableBoundary(root2) {
    const allElements = [];
    function walk(el) {
      if (el instanceof HTMLElement) {
        allElements.push(el);
        if (el.shadowRoot !== null && el.shadowRoot.mode === "open") {
          walk(el.shadowRoot);
        }
      }
      const children = el.children;
      [...children].forEach((e3) => walk(e3));
    }
    walk(root2);
    const start = allElements.find((el) => isTabbable(el)) ?? null;
    const end = allElements.reverse().find((el) => isTabbable(el)) ?? null;
    return { start, end };
  }
  let activeModals = [];
  class Modal {
    constructor(element) {
      this.tabDirection = "forward";
      this.element = element;
      this.handleFocusIn = this.handleFocusIn.bind(this);
      this.handleKeyDown = this.handleKeyDown.bind(this);
      this.handleKeyUp = this.handleKeyUp.bind(this);
    }
    activate() {
      activeModals.push(this.element);
      document.addEventListener("focusin", this.handleFocusIn);
      document.addEventListener("keydown", this.handleKeyDown);
      document.addEventListener("keyup", this.handleKeyUp);
    }
    deactivate() {
      activeModals = activeModals.filter((modal) => modal !== this.element);
      document.removeEventListener("focusin", this.handleFocusIn);
      document.removeEventListener("keydown", this.handleKeyDown);
      document.removeEventListener("keyup", this.handleKeyUp);
    }
    isActive() {
      return activeModals[activeModals.length - 1] === this.element;
    }
    checkFocus() {
      if (this.isActive()) {
        if (!this.element.matches(":focus-within")) {
          const { start, end } = getTabbableBoundary(this.element);
          const target = this.tabDirection === "forward" ? start : end;
          if (typeof (target == null ? void 0 : target.focus) === "function") {
            target.focus({ preventScroll: true });
          }
        }
      }
    }
    handleFocusIn() {
      this.checkFocus();
    }
    handleKeyDown(event) {
      if (event.key === "Tab" && event.shiftKey) {
        this.tabDirection = "backward";
      }
      requestAnimationFrame(() => this.checkFocus());
    }
    handleKeyUp() {
      this.tabDirection = "forward";
    }
  }
  const getEasing = (element, name) => {
    const cssVariableName = `--mdui-motion-easing-${name}`;
    return $$1(element).css(cssVariableName).trim();
  };
  const getDuration = (element, name) => {
    const cssVariableName = `--mdui-motion-duration-${name}`;
    const cssValue = $$1(element).css(cssVariableName).trim().toLowerCase();
    if (cssValue.endsWith("ms")) {
      return parseFloat(cssValue);
    } else {
      return parseFloat(cssValue) * 1e3;
    }
  };
  let scrollBarSizeCached;
  const getScrollBarSize = (fresh) => {
    if (isUndefined(document)) {
      return 0;
    }
    if (scrollBarSizeCached === void 0) {
      const $inner = $$1("<div>").css({
        width: "100%",
        height: "200px"
      });
      const $outer = $$1("<div>").css({
        position: "absolute",
        top: "0",
        left: "0",
        pointerEvents: "none",
        visibility: "hidden",
        width: "200px",
        height: "150px",
        overflow: "hidden"
      }).append($inner).appendTo(document.body);
      const widthContained = $inner[0].offsetWidth;
      $outer.css("overflow", "scroll");
      let widthScroll = $inner[0].offsetWidth;
      if (widthContained === widthScroll) {
        widthScroll = $outer[0].clientWidth;
      }
      $outer.remove();
      scrollBarSizeCached = widthContained - widthScroll;
    }
    return scrollBarSizeCached;
  };
  const hasScrollbar = (target) => {
    return target.scrollHeight > target.clientHeight;
  };
  const lockMap = /* @__PURE__ */ new WeakMap();
  const className = "mdui-lock-screen";
  const lockScreen = (source2, target) => {
    const document2 = getDocument();
    target ?? (target = document2.documentElement);
    if (!lockMap.has(target)) {
      lockMap.set(target, /* @__PURE__ */ new Set());
    }
    const lock = lockMap.get(target);
    lock.add(source2);
    const $target = $$1(target);
    if (hasScrollbar(target)) {
      $target.css("width", `calc(100% - ${getScrollBarSize()}px)`);
    }
    $target.addClass(className);
  };
  const unlockScreen = (source2, target) => {
    const document2 = getDocument();
    target ?? (target = document2.documentElement);
    const lock = lockMap.get(target);
    if (!lock) {
      return;
    }
    lock.delete(source2);
    if (lock.size === 0) {
      lockMap.delete(target);
      $$1(target).removeClass(className).width("");
    }
  };
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const LOCALE_STATUS_EVENT = "lit-localize-status";
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const isStrTagged = (val) => typeof val !== "string" && "strTag" in val;
  const joinStringsAndValues = (strings, values, valueOrder) => {
    let concat = strings[0];
    for (let i3 = 1; i3 < strings.length; i3++) {
      concat += values[i3 - 1];
      concat += strings[i3];
    }
    return concat;
  };
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  const defaultMsg = (template) => isStrTagged(template) ? joinStringsAndValues(template.strings, template.values) : template;
  let msg = defaultMsg;
  /**
   * @license
   * Copyright 2020 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  class Deferred {
    constructor() {
      this.settled = false;
      this.promise = new Promise((resolve, reject) => {
        this._resolve = resolve;
        this._reject = reject;
      });
    }
    resolve(value) {
      this.settled = true;
      this._resolve(value);
    }
    reject(error) {
      this.settled = true;
      this._reject(error);
    }
  }
  /**
   * @license
   * Copyright 2014 Travis Webb
   * SPDX-License-Identifier: MIT
   */
  for (let i3 = 0; i3 < 256; i3++) {
    (i3 >> 4 & 15).toString(16) + (i3 & 15).toString(16);
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  let loading = new Deferred();
  loading.resolve();
  let listeningLitLocalizeStatus = false;
  const localeReadyCallbacksMap = /* @__PURE__ */ new Map();
  const onLocaleReady = (target, callback) => {
    if (!listeningLitLocalizeStatus) {
      listeningLitLocalizeStatus = true;
      const window2 = getWindow$1();
      window2.addEventListener(LOCALE_STATUS_EVENT, (event) => {
        if (event.detail.status === "ready") {
          localeReadyCallbacksMap.forEach((callbacks2) => {
            callbacks2.forEach((cb) => cb());
          });
        }
      });
    }
    const callbacks = localeReadyCallbacksMap.get(target) || [];
    callbacks.push(callback);
    localeReadyCallbacksMap.set(target, callbacks);
  };
  const offLocaleReady = (target) => {
    localeReadyCallbacksMap.delete(target);
  };
  const style$b = i$7`:host{--shape-corner:var(--mdui-shape-corner-extra-large);--z-index:2300;position:fixed;z-index:var(--z-index);display:none;align-items:center;justify-content:center;inset:0;padding:3rem}::slotted(mdui-top-app-bar[slot=header]){position:absolute;border-top-left-radius:var(--mdui-shape-corner-extra-large);border-top-right-radius:var(--mdui-shape-corner-extra-large);background-color:rgb(var(--mdui-color-surface-container-high))}:host([fullscreen]:not([fullscreen=false i])){--shape-corner:var(--mdui-shape-corner-none);padding:0}:host([fullscreen]:not([fullscreen=false i])) ::slotted(mdui-top-app-bar[slot=header]){border-top-left-radius:var(--mdui-shape-corner-none);border-top-right-radius:var(--mdui-shape-corner-none)}.overlay{position:fixed;inset:0;background-color:rgba(var(--mdui-color-scrim),.4)}.panel{--mdui-color-background:var(--mdui-color-surface-container-high);position:relative;display:flex;flex-direction:column;max-height:100%;border-radius:var(--shape-corner);outline:0;transform-origin:top;min-width:17.5rem;max-width:35rem;padding:1.5rem;background-color:rgb(var(--mdui-color-surface-container-high));box-shadow:var(--mdui-elevation-level3)}:host([fullscreen]:not([fullscreen=false i])) .panel{width:100%;max-width:100%;height:100%;max-height:100%;box-shadow:var(--mdui-elevation-level0)}.header{display:flex;flex-direction:column}.has-icon .header{align-items:center}.icon{display:flex;color:rgb(var(--mdui-color-secondary));font-size:1.5rem}.icon mdui-icon,::slotted([slot=icon]){font-size:inherit}.headline{display:flex;color:rgb(var(--mdui-color-on-surface));font-size:var(--mdui-typescale-headline-small-size);font-weight:var(--mdui-typescale-headline-small-weight);letter-spacing:var(--mdui-typescale-headline-small-tracking);line-height:var(--mdui-typescale-headline-small-line-height)}.icon+.headline{padding-top:1rem}.body{overflow:auto}.header+.body{margin-top:1rem}.description{display:flex;color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-body-medium-size);font-weight:var(--mdui-typescale-body-medium-weight);letter-spacing:var(--mdui-typescale-body-medium-tracking);line-height:var(--mdui-typescale-body-medium-line-height)}:host([fullscreen]:not([fullscreen=false i])) .description{color:rgb(var(--mdui-color-on-surface))}.has-description.has-default .description{margin-bottom:1rem}.action{display:flex;justify-content:flex-end;padding-top:1.5rem}.action::slotted(:not(:first-child)){margin-left:.5rem}:host([stacked-actions]:not([stacked-actions=false i])) .action{flex-direction:column;align-items:end}:host([stacked-actions]:not([stacked-actions=false i])) .action::slotted(:not(:first-child)){margin-left:0;margin-top:.5rem}`;
  let Dialog = class Dialog2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.open = false;
      this.fullscreen = false;
      this.closeOnEsc = false;
      this.closeOnOverlayClick = false;
      this.stackedActions = false;
      this.overlayRef = e$1();
      this.panelRef = e$1();
      this.bodyRef = e$1();
      this.hasSlotController = new HasSlotController(this, "header", "icon", "headline", "description", "action", "[default]");
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-top-app-bar"]
      });
    }
    async onOpenChange() {
      const hasUpdated = this.hasUpdated;
      if (!this.open && !hasUpdated) {
        return;
      }
      await this.definedController.whenDefined();
      if (!hasUpdated) {
        await this.updateComplete;
      }
      const children = Array.from(this.panelRef.value.querySelectorAll(".header, .body, .actions"));
      const easingLinear = getEasing(this, "linear");
      const easingEmphasizedDecelerate = getEasing(this, "emphasized-decelerate");
      const easingEmphasizedAccelerate = getEasing(this, "emphasized-accelerate");
      const stopAnimation = () => Promise.all([
        stopAnimations(this.overlayRef.value),
        stopAnimations(this.panelRef.value),
        ...children.map((child) => stopAnimations(child))
      ]);
      if (this.open) {
        if (hasUpdated) {
          const eventProceeded = this.emit("open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        this.style.display = "flex";
        const topAppBarElements = this.topAppBarElements ?? [];
        if (topAppBarElements.length) {
          const topAppBarElement = topAppBarElements[0];
          if (!topAppBarElement.scrollTarget) {
            topAppBarElement.scrollTarget = this.bodyRef.value;
          }
          this.bodyRef.value.style.marginTop = "0";
        }
        this.originalTrigger = document.activeElement;
        this.modalHelper.activate();
        lockScreen(this);
        await stopAnimation();
        requestAnimationFrame(() => {
          const autoFocusTarget = this.querySelector("[autofocus]");
          if (autoFocusTarget) {
            autoFocusTarget.focus({ preventScroll: true });
          } else {
            this.panelRef.value.focus({ preventScroll: true });
          }
        });
        const duration = getDuration(this, "medium4");
        await Promise.all([
          animateTo(this.overlayRef.value, [{ opacity: 0 }, { opacity: 1, offset: 0.3 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          }),
          animateTo(this.panelRef.value, [
            { transform: "translateY(-1.875rem) scaleY(0)" },
            { transform: "translateY(0) scaleY(1)" }
          ], {
            duration: hasUpdated ? duration : 0,
            easing: easingEmphasizedDecelerate
          }),
          animateTo(this.panelRef.value, [{ opacity: 0 }, { opacity: 1, offset: 0.1 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          }),
          ...children.map((child) => animateTo(child, [
            { opacity: 0 },
            { opacity: 0, offset: 0.2 },
            { opacity: 1, offset: 0.8 },
            { opacity: 1 }
          ], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          }))
        ]);
        if (hasUpdated) {
          this.emit("opened");
        }
      } else {
        const eventProceeded = this.emit("close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        this.modalHelper.deactivate();
        await stopAnimation();
        const duration = getDuration(this, "short4");
        await Promise.all([
          animateTo(this.overlayRef.value, [{ opacity: 1 }, { opacity: 0 }], {
            duration,
            easing: easingLinear
          }),
          animateTo(this.panelRef.value, [
            { transform: "translateY(0) scaleY(1)" },
            { transform: "translateY(-1.875rem) scaleY(0.6)" }
          ], { duration, easing: easingEmphasizedAccelerate }),
          animateTo(this.panelRef.value, [{ opacity: 1 }, { opacity: 1, offset: 0.75 }, { opacity: 0 }], { duration, easing: easingLinear }),
          ...children.map((child) => animateTo(child, [{ opacity: 1 }, { opacity: 0, offset: 0.75 }, { opacity: 0 }], { duration, easing: easingLinear }))
        ]);
        this.style.display = "none";
        unlockScreen(this);
        const trigger = this.originalTrigger;
        if (typeof (trigger == null ? void 0 : trigger.focus) === "function") {
          setTimeout(() => trigger.focus());
        }
        this.emit("closed");
      }
    }
    disconnectedCallback() {
      super.disconnectedCallback();
      unlockScreen(this);
      offLocaleReady(this);
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.modalHelper = new Modal(this);
      this.addEventListener("keydown", (event) => {
        if (this.open && this.closeOnEsc && event.key === "Escape") {
          event.stopPropagation();
          this.open = false;
        }
      });
    }
    render() {
      const hasActionSlot = this.hasSlotController.test("action");
      const hasDefaultSlot = this.hasSlotController.test("[default]");
      const hasIcon = !!this.icon || this.hasSlotController.test("icon");
      const hasHeadline = !!this.headline || this.hasSlotController.test("headline");
      const hasDescription = !!this.description || this.hasSlotController.test("description");
      const hasHeader = hasIcon || hasHeadline || this.hasSlotController.test("header");
      const hasBody = hasDescription || hasDefaultSlot;
      return x`<div ${n$1(this.overlayRef)} part="overlay" class="overlay" @click="${this.onOverlayClick}" tabindex="-1"></div><div ${n$1(this.panelRef)} part="panel" class="panel ${e2({
      "has-icon": hasIcon,
      "has-description": hasDescription,
      "has-default": hasDefaultSlot
    })}" tabindex="0">${n2(hasHeader, () => x`<slot name="header" part="header" class="header">${n2(hasIcon, () => this.renderIcon())} ${n2(hasHeadline, () => this.renderHeadline())}</slot>`)} ${n2(hasBody, () => x`<div ${n$1(this.bodyRef)} part="body" class="body">${n2(hasDescription, () => this.renderDescription())}<slot></slot></div>`)} ${n2(hasActionSlot, () => x`<slot name="action" part="action" class="action"></slot>`)}</div>`;
    }
    onOverlayClick() {
      this.emit("overlay-click");
      if (!this.closeOnOverlayClick) {
        return;
      }
      this.open = false;
    }
    renderIcon() {
      return x`<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderHeadline() {
      return x`<slot name="headline" part="headline" class="headline">${this.headline}</slot>`;
    }
    renderDescription() {
      return x`<slot name="description" part="description" class="description">${this.description}</slot>`;
    }
  };
  Dialog.styles = [componentStyle, style$b];
  __decorate([
    n$5({ reflect: true })
  ], Dialog.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Dialog.prototype, "headline", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Dialog.prototype, "description", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Dialog.prototype, "open", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Dialog.prototype, "fullscreen", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "close-on-esc"
    })
  ], Dialog.prototype, "closeOnEsc", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "close-on-overlay-click"
    })
  ], Dialog.prototype, "closeOnOverlayClick", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "stacked-actions"
    })
  ], Dialog.prototype, "stackedActions", void 0);
  __decorate([
    o$6({
      slot: "header",
      selector: "mdui-top-app-bar",
      flatten: true
    })
  ], Dialog.prototype, "topAppBarElements", void 0);
  __decorate([
    watch("open")
  ], Dialog.prototype, "onOpenChange", null);
  Dialog = __decorate([
    t$2("mdui-dialog")
  ], Dialog);
  const style$a = i$7`:host{display:block;height:.0625rem;background-color:rgb(var(--mdui-color-surface-variant))}:host([inset]:not([inset=false i])){margin-left:1rem}:host([middle]:not([middle=false i])){margin-left:1rem;margin-right:1rem}:host([vertical]:not([vertical=false i])){height:100%;width:.0625rem}`;
  let Divider = class Divider2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.vertical = false;
      this.inset = false;
      this.middle = false;
    }
    render() {
      return x``;
    }
  };
  Divider.styles = [componentStyle, style$a];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Divider.prototype, "vertical", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Divider.prototype, "inset", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Divider.prototype, "middle", void 0);
  Divider = __decorate([
    t$2("mdui-divider")
  ], Divider);
  function hasWindow() {
    return typeof window !== "undefined";
  }
  function getNodeName(node) {
    if (isNode(node)) {
      return (node.nodeName || "").toLowerCase();
    }
    return "#document";
  }
  function getWindow(node) {
    var _node$ownerDocument;
    return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;
  }
  function getDocumentElement(node) {
    var _ref;
    return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;
  }
  function isNode(value) {
    if (!hasWindow()) {
      return false;
    }
    return value instanceof Node || value instanceof getWindow(value).Node;
  }
  function isHTMLElement(value) {
    if (!hasWindow()) {
      return false;
    }
    return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;
  }
  function isShadowRoot(value) {
    if (!hasWindow() || typeof ShadowRoot === "undefined") {
      return false;
    }
    return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
  }
  function isOverflowElement(element) {
    const {
      overflow,
      overflowX,
      overflowY,
      display
    } = getComputedStyle(element);
    return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display);
  }
  function isLastTraversableNode(node) {
    return ["html", "body", "#document"].includes(getNodeName(node));
  }
  function getComputedStyle(element) {
    return getWindow(element).getComputedStyle(element);
  }
  function getParentNode(node) {
    if (getNodeName(node) === "html") {
      return node;
    }
    const result = (
      // Step into the shadow DOM of the parent of a slotted node.
      node.assignedSlot || // DOM Element detected.
      node.parentNode || // ShadowRoot detected.
      isShadowRoot(node) && node.host || // Fallback.
      getDocumentElement(node)
    );
    return isShadowRoot(result) ? result.host : result;
  }
  function getNearestOverflowAncestor(node) {
    const parentNode = getParentNode(node);
    if (isLastTraversableNode(parentNode)) {
      return node.ownerDocument ? node.ownerDocument.body : node.body;
    }
    if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {
      return parentNode;
    }
    return getNearestOverflowAncestor(parentNode);
  }
  function getOverflowAncestors(node, list, traverseIframes) {
    var _node$ownerDocument2;
    if (list === void 0) {
      list = [];
    }
    if (traverseIframes === void 0) {
      traverseIframes = true;
    }
    const scrollableAncestor = getNearestOverflowAncestor(node);
    const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);
    const win = getWindow(scrollableAncestor);
    if (isBody) {
      const frameElement = getFrameElement(win);
      return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);
    }
    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));
  }
  function getFrameElement(win) {
    return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;
  }
  const style$9 = i$7`:host{--z-index:2100;display:contents}.panel{display:block;position:fixed;z-index:var(--z-index)}`;
  let Dropdown = class Dropdown2 extends MduiElement {
    constructor() {
      super();
      this.open = false;
      this.disabled = false;
      this.trigger = "click";
      this.placement = "auto";
      this.stayOpenOnClick = false;
      this.openDelay = 150;
      this.closeDelay = 150;
      this.openOnPointer = false;
      this.panelRef = e$1();
      this.definedController = new DefinedController(this, {
        relatedElements: [""]
      });
      this.onDocumentClick = this.onDocumentClick.bind(this);
      this.onDocumentKeydown = this.onDocumentKeydown.bind(this);
      this.onWindowScroll = this.onWindowScroll.bind(this);
      this.onMouseLeave = this.onMouseLeave.bind(this);
      this.onFocus = this.onFocus.bind(this);
      this.onClick = this.onClick.bind(this);
      this.onContextMenu = this.onContextMenu.bind(this);
      this.onMouseEnter = this.onMouseEnter.bind(this);
      this.onPanelClick = this.onPanelClick.bind(this);
    }
    get triggerElement() {
      return this.triggerElements[0];
    }
    // 这些属性变更时,需要更新样式
    async onPositionChange() {
      if (this.open) {
        await this.definedController.whenDefined();
        this.updatePositioner();
      }
    }
    async onOpenChange() {
      var _a2, _b;
      const hasUpdated = this.hasUpdated;
      if (!this.open && !hasUpdated) {
        return;
      }
      await this.definedController.whenDefined();
      if (!hasUpdated) {
        await this.updateComplete;
      }
      const easingLinear = getEasing(this, "linear");
      const easingEmphasizedDecelerate = getEasing(this, "emphasized-decelerate");
      const easingEmphasizedAccelerate = getEasing(this, "emphasized-accelerate");
      if (this.open) {
        if (hasUpdated) {
          const eventProceeded = this.emit("open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        const focusablePanel = this.panelElements.find((panel) => isFunction(panel.focus));
        setTimeout(() => {
          focusablePanel == null ? void 0 : focusablePanel.focus();
        });
        const duration = getDuration(this, "medium4");
        await stopAnimations(this.panelRef.value);
        this.panelRef.value.hidden = false;
        this.updatePositioner();
        await Promise.all([
          animateTo(this.panelRef.value, [
            { transform: `${this.getCssScaleName()}(0.45)` },
            { transform: `${this.getCssScaleName()}(1)` }
          ], {
            duration: hasUpdated ? duration : 0,
            easing: easingEmphasizedDecelerate
          }),
          animateTo(this.panelRef.value, [{ opacity: 0 }, { opacity: 1, offset: 0.125 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          })
        ]);
        if (hasUpdated) {
          this.emit("opened");
        }
      } else {
        const eventProceeded = this.emit("close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        if (!this.hasTrigger("focus") && isFunction((_a2 = this.triggerElement) == null ? void 0 : _a2.focus) && (this.contains(document.activeElement) || this.contains(((_b = document.activeElement) == null ? void 0 : _b.assignedSlot) ?? null))) {
          this.triggerElement.focus();
        }
        const duration = getDuration(this, "short4");
        await stopAnimations(this.panelRef.value);
        await Promise.all([
          animateTo(this.panelRef.value, [
            { transform: `${this.getCssScaleName()}(1)` },
            { transform: `${this.getCssScaleName()}(0.45)` }
          ], { duration, easing: easingEmphasizedAccelerate }),
          animateTo(this.panelRef.value, [{ opacity: 1 }, { opacity: 1, offset: 0.875 }, { opacity: 0 }], { duration, easing: easingLinear })
        ]);
        if (this.panelRef.value) {
          this.panelRef.value.hidden = true;
        }
        this.emit("closed");
      }
    }
    connectedCallback() {
      super.connectedCallback();
      this.definedController.whenDefined().then(() => {
        document.addEventListener("pointerdown", this.onDocumentClick);
        document.addEventListener("keydown", this.onDocumentKeydown);
        this.overflowAncestors = getOverflowAncestors(this.triggerElement);
        this.overflowAncestors.forEach((ancestor) => {
          ancestor.addEventListener("scroll", this.onWindowScroll);
        });
        this.observeResize = observeResize(this.triggerElement, () => {
          this.updatePositioner();
        });
      });
    }
    disconnectedCallback() {
      var _a2, _b;
      if (!this.open && this.panelRef.value) {
        this.panelRef.value.hidden = true;
      }
      super.disconnectedCallback();
      document.removeEventListener("pointerdown", this.onDocumentClick);
      document.removeEventListener("keydown", this.onDocumentKeydown);
      (_a2 = this.overflowAncestors) == null ? void 0 : _a2.forEach((ancestor) => {
        ancestor.removeEventListener("scroll", this.onWindowScroll);
      });
      (_b = this.observeResize) == null ? void 0 : _b.unobserve();
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.addEventListener("mouseleave", this.onMouseLeave);
      this.definedController.whenDefined().then(() => {
        this.triggerElement.addEventListener("focus", this.onFocus);
        this.triggerElement.addEventListener("click", this.onClick);
        this.triggerElement.addEventListener("contextmenu", this.onContextMenu);
        this.triggerElement.addEventListener("mouseenter", this.onMouseEnter);
      });
    }
    render() {
      return x`<slot name="trigger" part="trigger" class="trigger"></slot><slot ${n$1(this.panelRef)} part="panel" class="panel" hidden @click="${this.onPanelClick}"></slot>`;
    }
    /**
     * 获取 dropdown 打开、关闭动画的 CSS scaleX 或 scaleY
     */
    getCssScaleName() {
      return this.animateDirection === "horizontal" ? "scaleX" : "scaleY";
    }
    /**
     * 在 document 上点击时,根据条件判断是否要关闭 dropdown
     */
    onDocumentClick(e3) {
      if (this.disabled || !this.open) {
        return;
      }
      const path = e3.composedPath();
      if (!path.includes(this)) {
        this.open = false;
      }
      if (this.hasTrigger("contextmenu") && !this.hasTrigger("click") && path.includes(this.triggerElement)) {
        this.open = false;
      }
    }
    /**
     * 在 document 上按下按键时,根据条件判断是否要关闭 dropdown
     */
    onDocumentKeydown(event) {
      var _a2;
      if (this.disabled || !this.open) {
        return;
      }
      if (event.key === "Escape") {
        this.open = false;
        return;
      }
      if (event.key === "Tab") {
        if (!this.hasTrigger("focus") && isFunction((_a2 = this.triggerElement) == null ? void 0 : _a2.focus)) {
          event.preventDefault();
        }
        this.open = false;
      }
    }
    onWindowScroll() {
      window.requestAnimationFrame(() => this.onPositionChange());
    }
    hasTrigger(trigger) {
      const triggers = this.trigger.split(" ");
      return triggers.includes(trigger);
    }
    onFocus() {
      if (this.disabled || this.open || !this.hasTrigger("focus")) {
        return;
      }
      this.open = true;
    }
    onClick(e3) {
      if (this.disabled || e3.button || !this.hasTrigger("click")) {
        return;
      }
      if (this.open && (this.hasTrigger("hover") || this.hasTrigger("focus"))) {
        return;
      }
      this.pointerOffsetX = e3.offsetX;
      this.pointerOffsetY = e3.offsetY;
      this.open = !this.open;
    }
    onPanelClick(e3) {
      if (!this.disabled && !this.stayOpenOnClick && $$1(e3.target).is("mdui-menu-item")) {
        this.open = false;
      }
    }
    onContextMenu(e3) {
      if (this.disabled || !this.hasTrigger("contextmenu")) {
        return;
      }
      e3.preventDefault();
      this.pointerOffsetX = e3.offsetX;
      this.pointerOffsetY = e3.offsetY;
      this.open = true;
    }
    onMouseEnter() {
      if (this.disabled || !this.hasTrigger("hover")) {
        return;
      }
      window.clearTimeout(this.closeTimeout);
      if (this.openDelay) {
        this.openTimeout = window.setTimeout(() => {
          this.open = true;
        }, this.openDelay);
      } else {
        this.open = true;
      }
    }
    onMouseLeave() {
      if (this.disabled || !this.hasTrigger("hover")) {
        return;
      }
      window.clearTimeout(this.openTimeout);
      this.closeTimeout = window.setTimeout(() => {
        this.open = false;
      }, this.closeDelay || 50);
    }
    // 更新 panel 的位置
    updatePositioner() {
      const $panel = $$1(this.panelRef.value);
      const $window = $$1(window);
      const panelElements = this.panelElements;
      const panelRect = {
        width: Math.max(...(panelElements == null ? void 0 : panelElements.map((panel) => panel.offsetWidth)) ?? []),
        height: panelElements == null ? void 0 : panelElements.map((panel) => panel.offsetHeight).reduce((total, height) => total + height, 0)
      };
      const triggerClientRect = this.triggerElement.getBoundingClientRect();
      const triggerRect = this.openOnPointer ? {
        top: this.pointerOffsetY + triggerClientRect.top,
        left: this.pointerOffsetX + triggerClientRect.left,
        width: 0,
        height: 0
      } : triggerClientRect;
      const screenMargin = 8;
      let transformOriginX;
      let transformOriginY;
      let top;
      let left;
      let placement = this.placement;
      if (placement === "auto") {
        const windowWidth = $window.width();
        const windowHeight = $window.height();
        let position2;
        let alignment2;
        if (windowHeight - triggerRect.top - triggerRect.height > panelRect.height + screenMargin) {
          position2 = "bottom";
        } else if (triggerRect.top > panelRect.height + screenMargin) {
          position2 = "top";
        } else if (windowWidth - triggerRect.left - triggerRect.width > panelRect.width + screenMargin) {
          position2 = "right";
        } else if (triggerRect.left > panelRect.width + screenMargin) {
          position2 = "left";
        } else {
          position2 = "bottom";
        }
        if (["top", "bottom"].includes(position2)) {
          if (windowWidth - triggerRect.left > panelRect.width + screenMargin) {
            alignment2 = "start";
          } else if (triggerRect.left + triggerRect.width / 2 > panelRect.width / 2 + screenMargin && windowWidth - triggerRect.left - triggerRect.width / 2 > panelRect.width / 2 + screenMargin) {
            alignment2 = void 0;
          } else if (triggerRect.left + triggerRect.width > panelRect.width + screenMargin) {
            alignment2 = "end";
          } else {
            alignment2 = "start";
          }
        } else {
          if (windowHeight - triggerRect.top > panelRect.height + screenMargin) {
            alignment2 = "start";
          } else if (triggerRect.top + triggerRect.height / 2 > panelRect.height / 2 + screenMargin && windowHeight - triggerRect.top - triggerRect.height / 2 > panelRect.height / 2 + screenMargin) {
            alignment2 = void 0;
          } else if (triggerRect.top + triggerRect.height > panelRect.height + screenMargin) {
            alignment2 = "end";
          } else {
            alignment2 = "start";
          }
        }
        placement = alignment2 ? [position2, alignment2].join("-") : position2;
      }
      const [position, alignment] = placement.split("-");
      this.animateDirection = ["top", "bottom"].includes(position) ? "vertical" : "horizontal";
      switch (position) {
        case "top":
          transformOriginY = "bottom";
          top = triggerRect.top - panelRect.height;
          break;
        case "bottom":
          transformOriginY = "top";
          top = triggerRect.top + triggerRect.height;
          break;
        default:
          transformOriginY = "center";
          switch (alignment) {
            case "start":
              top = triggerRect.top;
              break;
            case "end":
              top = triggerRect.top + triggerRect.height - panelRect.height;
              break;
            default:
              top = triggerRect.top + triggerRect.height / 2 - panelRect.height / 2;
              break;
          }
          break;
      }
      switch (position) {
        case "left":
          transformOriginX = "right";
          left = triggerRect.left - panelRect.width;
          break;
        case "right":
          transformOriginX = "left";
          left = triggerRect.left + triggerRect.width;
          break;
        default:
          transformOriginX = "center";
          switch (alignment) {
            case "start":
              left = triggerRect.left;
              break;
            case "end":
              left = triggerRect.left + triggerRect.width - panelRect.width;
              break;
            default:
              left = triggerRect.left + triggerRect.width / 2 - panelRect.width / 2;
              break;
          }
          break;
      }
      $panel.css({
        top,
        left,
        transformOrigin: [transformOriginX, transformOriginY].join(" ")
      });
    }
  };
  Dropdown.styles = [componentStyle, style$9];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Dropdown.prototype, "open", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Dropdown.prototype, "disabled", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Dropdown.prototype, "trigger", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Dropdown.prototype, "placement", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "stay-open-on-click"
    })
  ], Dropdown.prototype, "stayOpenOnClick", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "open-delay" })
  ], Dropdown.prototype, "openDelay", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "close-delay" })
  ], Dropdown.prototype, "closeDelay", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "open-on-pointer"
    })
  ], Dropdown.prototype, "openOnPointer", void 0);
  __decorate([
    o$6({ slot: "trigger", flatten: true })
  ], Dropdown.prototype, "triggerElements", void 0);
  __decorate([
    o$6({ flatten: true })
  ], Dropdown.prototype, "panelElements", void 0);
  __decorate([
    watch("placement", true),
    watch("openOnPointer", true)
  ], Dropdown.prototype, "onPositionChange", null);
  __decorate([
    watch("open")
  ], Dropdown.prototype, "onOpenChange", null);
  Dropdown = __decorate([
    t$2("mdui-dropdown")
  ], Dropdown);
  const delay = (duration = 0) => {
    return new Promise((resolve) => setTimeout(resolve, duration));
  };
  const style$8 = i$7`:host{--shape-corner-small:var(--mdui-shape-corner-small);--shape-corner-normal:var(--mdui-shape-corner-large);--shape-corner-large:var(--mdui-shape-corner-extra-large);position:relative;display:inline-block;flex-shrink:0;overflow:hidden;text-align:center;border-radius:var(--shape-corner-normal);cursor:pointer;-webkit-tap-highlight-color:transparent;transition-property:box-shadow;transition-timing-function:var(--mdui-motion-easing-emphasized);transition-duration:var(--mdui-motion-duration-medium4);width:3.5rem;height:3.5rem;box-shadow:var(--mdui-elevation-level3);font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height)}.button{padding:0 1rem}:host([size=small]) .button{padding:0 .5rem}:host([size=large]) .button{padding:0 1.875rem}:host([lowered]){box-shadow:var(--mdui-elevation-level1)}:host([focus-visible]){box-shadow:var(--mdui-elevation-level3)}:host([lowered][focus-visible]){box-shadow:var(--mdui-elevation-level1)}:host([pressed]){box-shadow:var(--mdui-elevation-level3)}:host([lowered][pressed]){box-shadow:var(--mdui-elevation-level1)}:host([hover]){box-shadow:var(--mdui-elevation-level4)}:host([lowered][hover]){box-shadow:var(--mdui-elevation-level2)}:host([variant=primary]){color:rgb(var(--mdui-color-on-primary-container));background-color:rgb(var(--mdui-color-primary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-primary-container
    )}:host([variant=surface]){color:rgb(var(--mdui-color-primary));background-color:rgb(var(--mdui-color-surface-container-high));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([variant=surface][lowered]){background-color:rgb(var(--mdui-color-surface-container-low))}:host([variant=secondary]){color:rgb(var(--mdui-color-on-secondary-container));background-color:rgb(var(--mdui-color-secondary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([variant=tertiary]){color:rgb(var(--mdui-color-on-tertiary-container));background-color:rgb(var(--mdui-color-tertiary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-tertiary-container
    )}:host([size=small]){border-radius:var(--shape-corner-small);width:2.5rem;height:2.5rem}:host([size=large]){border-radius:var(--shape-corner-large);width:6rem;height:6rem}:host([disabled]:not([disabled=false i])),:host([loading]:not([loading=false i])){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])){color:rgba(var(--mdui-color-on-surface),38%);background-color:rgba(var(--mdui-color-on-surface),12%);box-shadow:var(--mdui-elevation-level0)}:host([extended]:not([extended=false i])){width:auto}.label{display:inline-flex;transition:opacity var(--mdui-motion-duration-short2) var(--mdui-motion-easing-linear) var(--mdui-motion-duration-short2);padding-left:.25rem;padding-right:.25rem}.has-icon .label{margin-left:.5rem}:host([size=small]) .has-icon .label{margin-left:.25rem}:host([size=large]) .has-icon .label{margin-left:1rem}:host(:not([extended])) .label,:host([extended=false i]) .label{opacity:0;transition-delay:0s;transition-duration:var(--mdui-motion-duration-short1)}:host([size=large]) .label{font-size:1.5em}.icon{display:inline-flex;font-size:1.71428571em}:host([size=large]) .icon{font-size:2.57142857em}.icon mdui-icon,::slotted([slot=icon]){font-size:inherit}mdui-circular-progress{display:inline-flex;width:1.5rem;height:1.5rem}:host([size=large]) mdui-circular-progress{width:2.25rem;height:2.25rem}:host([disabled]:not([disabled=false i])) mdui-circular-progress{stroke:rgba(var(--mdui-color-on-surface),38%)}`;
  let Fab = class Fab2 extends ButtonBase {
    constructor() {
      super(...arguments);
      this.variant = "primary";
      this.size = "normal";
      this.extended = false;
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "icon");
      this.definedController = new DefinedController(this, {
        relatedElements: [""]
      });
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    /**
     * extended 变更时,设置动画
     */
    async onExtendedChange() {
      const hasUpdated = this.hasUpdated;
      if (this.extended) {
        this.style.width = `${this.scrollWidth}px`;
      } else {
        this.style.width = "";
      }
      await this.definedController.whenDefined();
      await this.updateComplete;
      if (this.extended && !hasUpdated) {
        this.style.width = `${this.scrollWidth}px`;
      }
      if (!hasUpdated) {
        await delay();
        this.style.transitionProperty = "box-shadow, width, bottom, transform";
      }
    }
    render() {
      const className2 = cc({
        button: true,
        "has-icon": this.icon || this.hasSlotController.test("icon")
      });
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.isButton() ? this.renderButton({
      className: className2,
      part: "button",
      content: this.renderInner()
    }) : this.disabled || this.loading ? x`<span part="button" class="_a ${className2}">${this.renderInner()}</span>` : this.renderAnchor({
      className: className2,
      part: "button",
      content: this.renderInner()
    })}`;
    }
    renderLabel() {
      return x`<slot part="label" class="label"></slot>`;
    }
    renderIcon() {
      if (this.loading) {
        return this.renderLoading();
      }
      return x`<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderInner() {
      return [this.renderIcon(), this.renderLabel()];
    }
  };
  Fab.styles = [ButtonBase.styles, style$8];
  __decorate([
    n$5({ reflect: true })
  ], Fab.prototype, "variant", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Fab.prototype, "size", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Fab.prototype, "icon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Fab.prototype, "extended", void 0);
  __decorate([
    watch("extended")
  ], Fab.prototype, "onExtendedChange", null);
  Fab = __decorate([
    t$2("mdui-fab")
  ], Fab);
  const layoutStyle = i$7`:host{position:relative;display:flex;flex:1 1 auto;overflow:hidden}:host([full-height]:not([full-height=false i])){height:100%}`;
  let Layout = class Layout2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.fullHeight = false;
    }
    render() {
      return x`<slot></slot>`;
    }
  };
  Layout.styles = [componentStyle, layoutStyle];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "full-height"
    })
  ], Layout.prototype, "fullHeight", void 0);
  Layout = __decorate([
    t$2("mdui-layout")
  ], Layout);
  const layoutItemStyle = i$7`:host{display:flex;z-index:1}`;
  let LayoutItem = class LayoutItem2 extends LayoutItemBase {
    constructor() {
      super(...arguments);
      this.placement = "top";
    }
    get layoutPlacement() {
      return this.placement;
    }
    // placement 变更时,需要重新调整布局
    onPlacementChange() {
      var _a2;
      (_a2 = this.layoutManager) == null ? void 0 : _a2.updateLayout(this);
    }
    render() {
      return x`<slot></slot>`;
    }
  };
  LayoutItem.styles = [
    componentStyle,
    layoutItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], LayoutItem.prototype, "placement", void 0);
  __decorate([
    watch("placement", true)
  ], LayoutItem.prototype, "onPlacementChange", null);
  LayoutItem = __decorate([
    t$2("mdui-layout-item")
  ], LayoutItem);
  const layoutMainStyle = i$7`:host{flex:1 0 auto;max-width:100%;overflow:auto}`;
  let LayoutMain = class LayoutMain2 extends MduiElement {
    connectedCallback() {
      super.connectedCallback();
      const parentElement = this.parentElement;
      if (isNodeName(parentElement, "mdui-layout")) {
        this.layoutManager = getLayout(parentElement);
        this.layoutManager.registerMain(this);
      }
    }
    disconnectedCallback() {
      super.disconnectedCallback();
      if (this.layoutManager) {
        this.layoutManager.unregisterMain();
      }
    }
    render() {
      return x`<slot></slot>`;
    }
  };
  LayoutMain.styles = [
    componentStyle,
    layoutMainStyle
  ];
  LayoutMain = __decorate([
    t$2("mdui-layout-main")
  ], LayoutMain);
  const style$7 = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);position:relative;display:inline-block;width:100%;overflow:hidden;border-radius:var(--shape-corner);background-color:rgb(var(--mdui-color-surface-container-highest));height:.25rem}.determinate,.indeterminate{background-color:rgb(var(--mdui-color-primary))}.determinate{height:100%;transition:width var(--mdui-motion-duration-long2) var(--mdui-motion-easing-standard)}.indeterminate::before{position:absolute;top:0;bottom:0;left:0;background-color:inherit;animation:mdui-comp-progress-indeterminate 2s var(--mdui-motion-easing-linear) infinite;content:' '}.indeterminate::after{position:absolute;top:0;bottom:0;left:0;background-color:inherit;animation:mdui-comp-progress-indeterminate-short 2s var(--mdui-motion-easing-linear) infinite;content:' '}@keyframes mdui-comp-progress-indeterminate{0%{left:0;width:0}50%{left:30%;width:70%}75%{left:100%;width:0}}@keyframes mdui-comp-progress-indeterminate-short{0%{left:0;width:0}50%{left:0;width:0}75%{left:0;width:25%}100%{left:100%;width:0}}`;
  let LinearProgress = class LinearProgress2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.max = 1;
    }
    render() {
      const isDeterminate = !isUndefined(this.value);
      if (isDeterminate) {
        const value = this.value;
        return x`<div part="indicator" class="determinate" style="${o$4({
        width: `${value / Math.max(this.max ?? value, value) * 100}%`
      })}"></div>`;
      }
      return x`<div part="indicator" class="indeterminate"></div>`;
    }
  };
  LinearProgress.styles = [componentStyle, style$7];
  __decorate([
    n$5({ type: Number, reflect: true })
  ], LinearProgress.prototype, "max", void 0);
  __decorate([
    n$5({ type: Number })
  ], LinearProgress.prototype, "value", void 0);
  LinearProgress = __decorate([
    t$2("mdui-linear-progress")
  ], LinearProgress);
  const listItemStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);--shape-corner-rounded:var(--mdui-shape-corner-extra-large);position:relative;display:block;border-radius:var(--shape-corner);--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([rounded]:not([rounded=false i])),:host([rounded]:not([rounded=false i])) mdui-ripple{border-radius:var(--shape-corner-rounded)}:host([active]:not([active=false i])){background-color:rgb(var(--mdui-color-secondary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([disabled]:not([disabled=false i])){pointer-events:none}.container{cursor:pointer;-webkit-user-select:none;user-select:none;text-decoration:none;color:inherit;-webkit-tap-highlight-color:transparent}:host([disabled]:not([disabled=false i])) .container{cursor:default;opacity:.38}:host([nonclickable]:not([href],[nonclickable=false i])) .container{cursor:auto;-webkit-user-select:auto;user-select:auto}.preset{display:flex;align-items:center;padding:.5rem 1.5rem .5rem 1rem;min-height:3.5rem}:host([alignment=start]) .preset{align-items:flex-start}:host([alignment=end]) .preset{align-items:flex-end}.body{display:flex;flex:1 1 100%;flex-direction:column;justify-content:center;min-width:0}.headline{display:block;color:rgb(var(--mdui-color-on-surface));font-size:var(--mdui-typescale-body-large-size);font-weight:var(--mdui-typescale-body-large-weight);letter-spacing:var(--mdui-typescale-body-large-tracking);line-height:var(--mdui-typescale-body-large-line-height)}:host([active]:not([active=false i])) .headline{color:rgb(var(--mdui-color-on-secondary-container))}.description{display:none;color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-body-medium-size);font-weight:var(--mdui-typescale-body-medium-weight);letter-spacing:var(--mdui-typescale-body-medium-tracking);line-height:var(--mdui-typescale-body-medium-line-height)}:host([disabled]:not([disabled=false i])) .description,:host([focused]) .description,:host([hover]) .description,:host([pressed]) .description{color:rgb(var(--mdui-color-on-surface))}.has-description .description{display:block}:host([description-line='1']) .description,:host([headline-line='1']) .headline{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host([description-line='2']) .description,:host([description-line='3']) .description,:host([headline-line='2']) .headline,:host([headline-line='3']) .headline{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}:host([description-line='2']) .description,:host([headline-line='2']) .headline{-webkit-line-clamp:2}:host([description-line='3']) .description,:host([headline-line='3']) .headline{-webkit-line-clamp:3}.end-icon,.icon{display:flex;flex:0 0 auto;font-size:var(--mdui-typescale-label-small-size);font-weight:var(--mdui-typescale-label-small-weight);letter-spacing:var(--mdui-typescale-label-small-tracking);line-height:var(--mdui-typescale-label-small-line-height);color:rgb(var(--mdui-color-on-surface-variant))}:host([disabled]:not([disabled=false i])) .end-icon,:host([disabled]:not([disabled=false i])) .icon,:host([focused]) .end-icon,:host([focused]) .icon,:host([hover]) .end-icon,:host([hover]) .icon,:host([pressed]) .end-icon,:host([pressed]) .icon{color:rgb(var(--mdui-color-on-surface))}:host([active]:not([active=false i])) .end-icon,:host([active]:not([active=false i])) .icon{color:rgb(var(--mdui-color-on-secondary-container))}.end-icon mdui-icon,.icon mdui-icon,.is-end-icon ::slotted([slot=end-icon]),.is-icon ::slotted([slot=icon]){font-size:1.5rem}.has-icon .icon{margin-right:1rem}.has-icon ::slotted(mdui-checkbox[slot=icon]),.has-icon ::slotted(mdui-radio[slot=icon]){margin-left:-.5rem}.has-end-icon .end-icon{margin-left:1rem}.has-end-icon ::slotted(mdui-checkbox[slot=end-icon]),.has-end-icon ::slotted(mdui-radio[slot=end-icon]){margin-right:-.5rem}`;
  let ListItem = class ListItem2 extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.active = false;
      this.nonclickable = false;
      this.rounded = false;
      this.alignment = "center";
      this.rippleRef = e$1();
      this.itemRef = e$1();
      this.hasSlotController = new HasSlotController(this, "[default]", "description", "icon", "end-icon", "custom");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.focusDisabled;
    }
    get focusElement() {
      return this.href && !this.disabled ? this.itemRef.value : this;
    }
    get focusDisabled() {
      return this.href ? this.disabled : this.disabled || this.nonclickable;
    }
    render() {
      const preset = !this.hasSlotController.test("custom");
      const hasIcon = this.icon || this.hasSlotController.test("icon");
      const hasEndIcon = this.endIcon || this.hasSlotController.test("end-icon");
      const hasDescription = this.description || this.hasSlotController.test("description");
      const className2 = cc({
        container: true,
        preset,
        "has-icon": hasIcon,
        "has-end-icon": hasEndIcon,
        "has-description": hasDescription,
        // icon slot 中的元素是否为 mdui-icon 或 mdui-icon-* 组件
        "is-icon": isNodeName(this.iconElements[0], "mdui-icon"),
        // end-icon slot 中的元素是否为 mdui-icon 或 mdui-icon-* 组件
        "is-end-icon": getNodeName$1(this.endIconElements[0]).startsWith("mdui-icon-")
      });
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.href && !this.disabled ? this.renderAnchor({
      className: className2,
      content: this.renderInner(),
      part: "container",
      refDirective: n$1(this.itemRef)
    }) : x`<div part="container" class="${className2}" ${n$1(this.itemRef)}>${this.renderInner()}</div>`}`;
    }
    renderInner() {
      const hasDefaultSlot = this.hasSlotController.test("[default]");
      return x`<slot name="custom"><slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot><div part="body" class="body">${hasDefaultSlot ? x`<slot part="headline" class="headline"></slot>` : x`<div part="headline" class="headline">${this.headline}</div>`}<slot name="description" part="description" class="description">${this.description}</slot></div><slot name="end-icon" part="end-icon" class="end-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}"></mdui-icon>` : nothingTemplate}</slot></slot>`;
    }
  };
  ListItem.styles = [
    componentStyle,
    listItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], ListItem.prototype, "headline", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "headline-line" })
  ], ListItem.prototype, "headlineLine", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ListItem.prototype, "description", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "description-line" })
  ], ListItem.prototype, "descriptionLine", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ListItem.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], ListItem.prototype, "endIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ListItem.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ListItem.prototype, "active", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ListItem.prototype, "nonclickable", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], ListItem.prototype, "rounded", void 0);
  __decorate([
    n$5({ reflect: true })
  ], ListItem.prototype, "alignment", void 0);
  __decorate([
    o$6({ slot: "icon", flatten: true })
  ], ListItem.prototype, "iconElements", void 0);
  __decorate([
    o$6({ slot: "end-icon", flatten: true })
  ], ListItem.prototype, "endIconElements", void 0);
  ListItem = __decorate([
    t$2("mdui-list-item")
  ], ListItem);
  const listSubheaderStyle = i$7`:host{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;cursor:default;color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-label-small-size);font-weight:var(--mdui-typescale-label-small-weight);letter-spacing:var(--mdui-typescale-label-small-tracking);line-height:var(--mdui-typescale-label-small-line-height);padding-left:1rem;padding-right:1.5rem;height:3.5rem;line-height:3.5rem}`;
  let ListSubheader = class ListSubheader2 extends MduiElement {
    render() {
      return x`<slot></slot>`;
    }
  };
  ListSubheader.styles = [
    componentStyle,
    listSubheaderStyle
  ];
  ListSubheader = __decorate([
    t$2("mdui-list-subheader")
  ], ListSubheader);
  const listStyle = i$7`:host{display:block;padding:.5rem 0}::slotted(mdui-divider[middle]){margin-left:1rem;margin-right:1.5rem}`;
  let List = class List2 extends MduiElement {
    render() {
      return x`<slot></slot>`;
    }
  };
  List.styles = [componentStyle, listStyle];
  List = __decorate([
    t$2("mdui-list")
  ], List);
  let IconArrowRight = class IconArrowRight2 extends r$3 {
    render() {
      return svgTag('<path d="m10 17 5-5-5-5v10z"/>');
    }
  };
  IconArrowRight.styles = style$e;
  IconArrowRight = __decorate([
    t$2("mdui-icon-arrow-right")
  ], IconArrowRight);
  const menuItemStyle = i$7`:host{position:relative;display:block}:host([selected]){background-color:rgba(var(--mdui-color-primary),12%)}:host([disabled]:not([disabled=false i])){pointer-events:none}.container{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}:host([disabled]:not([disabled=false i])) .container{cursor:default;opacity:.38}.preset{display:flex;align-items:center;text-decoration:none;height:3rem;padding:0 .75rem}.preset.dense{height:2rem}.label-container{flex:1 1 100%;min-width:0}.label{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:rgb(var(--mdui-color-on-surface));font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking)}.end-icon,.end-text,.icon,.selected-icon{display:none;flex:0 0 auto;color:rgb(var(--mdui-color-on-surface-variant))}.has-end-icon .end-icon,.has-end-text .end-text,.has-icon .icon,.has-icon .selected-icon{display:flex}.end-icon,.icon,.selected-icon{font-size:1.5rem}.end-icon::slotted(mdui-avatar),.icon::slotted(mdui-avatar),.selected-icon::slotted(mdui-avatar){width:1.5rem;height:1.5rem}.dense .end-icon,.dense .icon,.dense .selected-icon{font-size:1.125rem}.dense .end-icon::slotted(mdui-avatar),.dense .icon::slotted(mdui-avatar),.dense .selected-icon::slotted(mdui-avatar){width:1.125rem;height:1.125rem}.end-icon .i,.icon .i,.selected-icon .i,::slotted([slot=end-icon]),::slotted([slot=icon]),::slotted([slot=selected-icon]){font-size:inherit}.end-text{font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height)}.icon,.selected-icon{margin-right:.75rem}.end-icon,.end-text{margin-left:.75rem}.arrow-right{color:rgb(var(--mdui-color-on-surface))}.submenu{--shape-corner:var(--mdui-shape-corner-extra-small);display:block;position:absolute;z-index:1;border-radius:var(--shape-corner);background-color:rgb(var(--mdui-color-surface-container));box-shadow:var(--mdui-elevation-level2);min-width:7rem;max-width:17.5rem;padding-top:.5rem;padding-bottom:.5rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}.submenu::slotted(mdui-divider){margin-top:.5rem;margin-bottom:.5rem}`;
  let MenuItem = class MenuItem2 extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super();
      this.disabled = false;
      this.submenuOpen = false;
      this.selected = false;
      this.dense = false;
      this.focusable = false;
      this.key = uniqueId();
      this.rippleRef = e$1();
      this.containerRef = e$1();
      this.submenuRef = e$1();
      this.hasSlotController = new HasSlotController(this, "[default]", "icon", "end-icon", "end-text", "submenu", "custom");
      this.definedController = new DefinedController(this, {
        relatedElements: [""]
      });
      this.onOuterClick = this.onOuterClick.bind(this);
      this.onFocus = this.onFocus.bind(this);
      this.onBlur = this.onBlur.bind(this);
      this.onClick = this.onClick.bind(this);
      this.onKeydown = this.onKeydown.bind(this);
      this.onMouseEnter = this.onMouseEnter.bind(this);
      this.onMouseLeave = this.onMouseLeave.bind(this);
    }
    get focusDisabled() {
      return this.disabled || !this.focusable;
    }
    get focusElement() {
      return this.href && !this.disabled ? this.containerRef.value : this;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get hasSubmenu() {
      return this.hasSlotController.test("submenu");
    }
    async onOpenChange() {
      const hasUpdated = this.hasUpdated;
      if (!this.submenuOpen && !hasUpdated) {
        return;
      }
      await this.definedController.whenDefined();
      if (!hasUpdated) {
        await this.updateComplete;
      }
      const easingLinear = getEasing(this, "linear");
      const easingEmphasizedDecelerate = getEasing(this, "emphasized-decelerate");
      const easingEmphasizedAccelerate = getEasing(this, "emphasized-accelerate");
      if (this.submenuOpen) {
        if (hasUpdated) {
          const eventProceeded = this.emit("submenu-open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        const duration = getDuration(this, "medium4");
        await stopAnimations(this.submenuRef.value);
        this.submenuRef.value.hidden = false;
        this.updateSubmenuPositioner();
        await Promise.all([
          animateTo(this.submenuRef.value, [{ transform: "scaleY(0.45)" }, { transform: "scaleY(1)" }], {
            duration: hasUpdated ? duration : 0,
            easing: easingEmphasizedDecelerate
          }),
          animateTo(this.submenuRef.value, [{ opacity: 0 }, { opacity: 1, offset: 0.125 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          })
        ]);
        if (hasUpdated) {
          this.emit("submenu-opened");
        }
      } else {
        const eventProceeded = this.emit("submenu-close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        const duration = getDuration(this, "short4");
        await stopAnimations(this.submenuRef.value);
        await Promise.all([
          animateTo(this.submenuRef.value, [{ transform: "scaleY(1)" }, { transform: "scaleY(0.45)" }], { duration, easing: easingEmphasizedAccelerate }),
          animateTo(this.submenuRef.value, [{ opacity: 1 }, { opacity: 1, offset: 0.875 }, { opacity: 0 }], { duration, easing: easingLinear })
        ]);
        if (this.submenuRef.value) {
          this.submenuRef.value.hidden = true;
        }
        this.emit("submenu-closed");
      }
    }
    connectedCallback() {
      super.connectedCallback();
      this.definedController.whenDefined().then(() => {
        document.addEventListener("pointerdown", this.onOuterClick);
      });
    }
    disconnectedCallback() {
      super.disconnectedCallback();
      document.removeEventListener("pointerdown", this.onOuterClick);
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.definedController.whenDefined().then(() => {
        this.addEventListener("focus", this.onFocus);
        this.addEventListener("blur", this.onBlur);
        this.addEventListener("click", this.onClick);
        this.addEventListener("keydown", this.onKeydown);
        this.addEventListener("mouseenter", this.onMouseEnter);
        this.addEventListener("mouseleave", this.onMouseLeave);
      });
    }
    render() {
      const hasSubmenu = this.hasSubmenu;
      const hasCustomSlot = this.hasSlotController.test("custom");
      const hasEndIconSlot = this.hasSlotController.test("end-icon");
      const useDefaultEndIcon = !this.endIcon && hasSubmenu && !hasEndIconSlot;
      const hasEndIcon = this.endIcon || hasSubmenu || hasEndIconSlot;
      const hasIcon = !isUndefined(this.icon) || this.selects === "single" || this.selects === "multiple" || this.hasSlotController.test("icon");
      const hasEndText = !!this.endText || this.hasSlotController.test("end-text");
      const className2 = cc({
        container: true,
        dense: this.dense,
        preset: !hasCustomSlot,
        "has-icon": hasIcon,
        "has-end-text": hasEndText,
        "has-end-icon": hasEndIcon
      });
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.href && !this.disabled ? this.renderAnchor({
      part: "container",
      className: className2,
      content: this.renderInner(useDefaultEndIcon, hasIcon),
      refDirective: n$1(this.containerRef),
      tabIndex: this.focusable ? 0 : -1
    }) : x`<div part="container" ${n$1(this.containerRef)} class="${className2}">${this.renderInner(useDefaultEndIcon, hasIcon)}</div>`} ${n2(hasSubmenu, () => x`<slot name="submenu" ${n$1(this.submenuRef)} part="submenu" class="submenu" hidden></slot>`)}`;
    }
    /**
     * 点击子菜单外面的区域,关闭子菜单
     */
    onOuterClick(event) {
      if (!this.disabled && this.submenuOpen && this !== event.target && !$$1.contains(this, event.target)) {
        this.submenuOpen = false;
      }
    }
    hasTrigger(trigger) {
      return this.submenuTrigger ? this.submenuTrigger.split(" ").includes(trigger) : false;
    }
    onFocus() {
      if (this.disabled || this.submenuOpen || !this.hasTrigger("focus") || !this.hasSubmenu) {
        return;
      }
      this.submenuOpen = true;
    }
    onBlur() {
      if (this.disabled || !this.submenuOpen || !this.hasTrigger("focus") || !this.hasSubmenu) {
        return;
      }
      this.submenuOpen = false;
    }
    onClick(event) {
      if (this.disabled || event.button) {
        return;
      }
      if (!this.hasTrigger("click") || event.target !== this || !this.hasSubmenu) {
        return;
      }
      if (this.submenuOpen && (this.hasTrigger("hover") || this.hasTrigger("focus"))) {
        return;
      }
      this.submenuOpen = !this.submenuOpen;
    }
    onKeydown(event) {
      if (this.disabled || !this.hasSubmenu) {
        return;
      }
      if (!this.submenuOpen && event.key === "Enter") {
        event.stopPropagation();
        this.submenuOpen = true;
      }
      if (this.submenuOpen && event.key === "Escape") {
        event.stopPropagation();
        this.submenuOpen = false;
      }
    }
    onMouseEnter() {
      if (this.disabled || !this.hasTrigger("hover") || !this.hasSubmenu) {
        return;
      }
      window.clearTimeout(this.submenuCloseTimeout);
      if (this.submenuOpenDelay) {
        this.submenuOpenTimeout = window.setTimeout(() => {
          this.submenuOpen = true;
        }, this.submenuOpenDelay);
      } else {
        this.submenuOpen = true;
      }
    }
    onMouseLeave() {
      if (this.disabled || !this.hasTrigger("hover") || !this.hasSubmenu) {
        return;
      }
      window.clearTimeout(this.submenuOpenTimeout);
      this.submenuCloseTimeout = window.setTimeout(() => {
        this.submenuOpen = false;
      }, this.submenuCloseDelay || 50);
    }
    // 更新子菜单的位置
    updateSubmenuPositioner() {
      const $window = $$1(window);
      const $submenu = $$1(this.submenuRef.value);
      const itemRect = this.getBoundingClientRect();
      const submenuWidth = $submenu.innerWidth();
      const submenuHeight = $submenu.innerHeight();
      const screenMargin = 8;
      let placementX = "bottom";
      let placementY = "right";
      if ($window.height() - itemRect.top > submenuHeight + screenMargin) {
        placementX = "bottom";
      } else if (itemRect.top + itemRect.height > submenuHeight + screenMargin) {
        placementX = "top";
      }
      if ($window.width() - itemRect.left - itemRect.width > submenuWidth + screenMargin) {
        placementY = "right";
      } else if (itemRect.left > submenuWidth + screenMargin) {
        placementY = "left";
      }
      $$1(this.submenuRef.value).css({
        top: placementX === "bottom" ? 0 : itemRect.height - submenuHeight,
        left: placementY === "right" ? itemRect.width : -submenuWidth,
        transformOrigin: [
          placementY === "right" ? 0 : "100%",
          placementX === "bottom" ? 0 : "100%"
        ].join(" ")
      });
    }
    renderInner(useDefaultEndIcon, hasIcon) {
      return x`<slot name="custom">${this.selected ? x`<slot name="selected-icon" part="selected-icon" class="selected-icon">${this.selectedIcon ? x`<mdui-icon name="${this.selectedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-check class="i"></mdui-icon-check>`}</slot>` : x`<slot name="icon" part="icon" class="icon">${hasIcon ? x`<mdui-icon name="${this.icon}" class="i"></mdui-icon>` : nothingTemplate}</slot>`}<div class="label-container"><slot part="label" class="label"></slot></div><slot name="end-text" part="end-text" class="end-text">${this.endText}</slot>${useDefaultEndIcon ? x`<mdui-icon-arrow-right part="end-icon" class="end-icon arrow-right"></mdui-icon-arrow-right>` : x`<slot name="end-icon" part="end-icon" class="end-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}"></mdui-icon>` : nothingTemplate}</slot>`}</slot>`;
    }
  };
  MenuItem.styles = [
    componentStyle,
    menuItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], MenuItem.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], MenuItem.prototype, "disabled", void 0);
  __decorate([
    n$5({ reflect: true })
  ], MenuItem.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], MenuItem.prototype, "endIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-text" })
  ], MenuItem.prototype, "endText", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "selected-icon" })
  ], MenuItem.prototype, "selectedIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "submenu-open"
    })
  ], MenuItem.prototype, "submenuOpen", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], MenuItem.prototype, "selected", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "dense", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "selects", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "submenuTrigger", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "submenuOpenDelay", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "submenuCloseDelay", void 0);
  __decorate([
    r$1()
  ], MenuItem.prototype, "focusable", void 0);
  __decorate([
    watch("submenuOpen")
  ], MenuItem.prototype, "onOpenChange", null);
  MenuItem = __decorate([
    t$2("mdui-menu-item")
  ], MenuItem);
  const menuStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-extra-small);position:relative;display:block;border-radius:var(--shape-corner);background-color:rgb(var(--mdui-color-surface-container));box-shadow:var(--mdui-elevation-level2);min-width:7rem;max-width:17.5rem;padding-top:.5rem;padding-bottom:.5rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}::slotted(mdui-divider){margin-top:.5rem;margin-bottom:.5rem}`;
  let Menu = class Menu2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.dense = false;
      this.submenuTrigger = "click hover";
      this.submenuOpenDelay = 200;
      this.submenuCloseDelay = 200;
      this.selectedKeys = [];
      this.isInitial = true;
      this.lastActiveItems = [];
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-menu-item"]
      });
    }
    // 菜单项元素(包含子菜单中的菜单项)
    get items() {
      return $$1(this.childrenItems).find("mdui-menu-item").add(this.childrenItems).get();
    }
    // 菜单项元素(不包含已禁用的,包含子菜单中的菜单项)
    get itemsEnabled() {
      return this.items.filter((item) => !item.disabled);
    }
    // 当前菜单是否为单选
    get isSingle() {
      return this.selects === "single";
    }
    // 当前菜单是否为多选
    get isMultiple() {
      return this.selects === "multiple";
    }
    // 当前菜单是否可选择
    get isSelectable() {
      return this.isSingle || this.isMultiple;
    }
    // 当前菜单是否为子菜单
    get isSubmenu() {
      return !$$1(this).parent().length;
    }
    // 最深层级的子菜单中,最后交互过的 menu-item
    get lastActiveItem() {
      const index = this.lastActiveItems.length ? this.lastActiveItems.length - 1 : 0;
      return this.lastActiveItems[index];
    }
    set lastActiveItem(item) {
      const index = this.lastActiveItems.length ? this.lastActiveItems.length - 1 : 0;
      this.lastActiveItems[index] = item;
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.items.forEach((item) => {
        item.dense = this.dense;
        item.selects = this.selects;
        item.submenuTrigger = this.submenuTrigger;
        item.submenuOpenDelay = this.submenuOpenDelay;
        item.submenuCloseDelay = this.submenuCloseDelay;
      });
    }
    async onSelectsChange() {
      if (!this.isSelectable) {
        this.setSelectedKeys([]);
      } else if (this.isSingle) {
        this.setSelectedKeys(this.selectedKeys.slice(0, 1));
      }
      await this.onSelectedKeysChange();
    }
    async onSelectedKeysChange() {
      await this.definedController.whenDefined();
      const values = this.itemsEnabled.filter((item) => this.selectedKeys.includes(item.key)).map((item) => item.value);
      const value = this.isMultiple ? values : values[0] || void 0;
      this.setValue(value);
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      if (!this.isSelectable) {
        this.updateSelected();
        return;
      }
      const values = (this.isSingle ? [this.value] : (
        // 多选时,传入的值可能是字符串(通过 attribute 属性设置);或字符串数组(通过 property 属性设置)
        isString(this.value) ? [this.value] : this.value
      )).filter((i3) => i3);
      if (!values.length) {
        this.setSelectedKeys([]);
      } else if (this.isSingle) {
        const firstItem = this.itemsEnabled.find((item) => item.value === values[0]);
        this.setSelectedKeys(firstItem ? [firstItem.key] : []);
      } else if (this.isMultiple) {
        this.setSelectedKeys(this.itemsEnabled.filter((item) => values.includes(item.value)).map((item) => item.key));
      }
      this.updateSelected();
      this.updateFocusable();
    }
    /**
     * 将焦点设置在当前元素上
     */
    focus(options) {
      if (this.lastActiveItem) {
        this.focusOne(this.lastActiveItem, options);
      }
    }
    /**
     * 从当前元素中移除焦点
     */
    blur() {
      if (this.lastActiveItem) {
        this.lastActiveItem.blur();
      }
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.definedController.whenDefined().then(() => {
        this.updateFocusable();
        this.lastActiveItem = this.items.find((item) => item.focusable);
      });
      this.addEventListener("submenu-open", (e3) => {
        const $parentItem = $$1(e3.target);
        const submenuItemsEnabled = $parentItem.children("mdui-menu-item:not([disabled])").get();
        const submenuLevel = $parentItem.parents("mdui-menu-item").length + 1;
        if (submenuItemsEnabled.length) {
          this.lastActiveItems[submenuLevel] = submenuItemsEnabled[0];
          this.updateFocusable();
          this.focusOne(this.lastActiveItems[submenuLevel]);
        }
      });
      this.addEventListener("submenu-close", (e3) => {
        const $parentItem = $$1(e3.target);
        const submenuLevel = $parentItem.parents("mdui-menu-item").length + 1;
        if (this.lastActiveItems.length - 1 === submenuLevel) {
          this.lastActiveItems.pop();
          this.updateFocusable();
          if (this.lastActiveItems[submenuLevel - 1]) {
            this.focusOne(this.lastActiveItems[submenuLevel - 1]);
          }
        }
      });
    }
    render() {
      return x`<slot @slotchange="${this.onSlotChange}" @click="${this.onClick}" @keydown="${this.onKeyDown}"></slot>`;
    }
    setSelectedKeys(selectedKeys) {
      if (!arraysEqualIgnoreOrder(this.selectedKeys, selectedKeys)) {
        this.selectedKeys = selectedKeys;
      }
    }
    setValue(value) {
      if (this.isSingle || isUndefined(this.value) || isUndefined(value)) {
        this.value = value;
      } else if (!arraysEqualIgnoreOrder(this.value, value)) {
        this.value = value;
      }
    }
    // 获取和指定菜单项同级的所有菜单项
    getSiblingsItems(item, onlyEnabled = false) {
      return $$1(item).parent().children(`mdui-menu-item${onlyEnabled ? ":not([disabled])" : ""}`).get();
    }
    // 更新 menu-item 的可聚焦状态
    updateFocusable() {
      if (this.lastActiveItem) {
        this.items.forEach((item) => {
          item.focusable = item.key === this.lastActiveItem.key;
        });
        return;
      }
      if (!this.selectedKeys.length) {
        this.itemsEnabled.forEach((item, index) => {
          item.focusable = !index;
        });
        return;
      }
      if (this.isSingle) {
        this.items.forEach((item) => {
          item.focusable = this.selectedKeys.includes(item.key);
        });
        return;
      }
      if (this.isMultiple) {
        const focusableItem = this.items.find((item) => item.focusable);
        if (!(focusableItem == null ? void 0 : focusableItem.key) || !this.selectedKeys.includes(focusableItem.key)) {
          this.itemsEnabled.filter((item) => this.selectedKeys.includes(item.key)).forEach((item, index) => item.focusable = !index);
        }
      }
    }
    updateSelected() {
      this.items.forEach((item) => {
        item.selected = this.selectedKeys.includes(item.key);
      });
    }
    // 切换一个菜单项的选中状态
    selectOne(item) {
      if (this.isMultiple) {
        const selectedKeys = [...this.selectedKeys];
        if (selectedKeys.includes(item.key)) {
          selectedKeys.splice(selectedKeys.indexOf(item.key), 1);
        } else {
          selectedKeys.push(item.key);
        }
        this.setSelectedKeys(selectedKeys);
      }
      if (this.isSingle) {
        if (this.selectedKeys.includes(item.key)) {
          this.setSelectedKeys([]);
        } else {
          this.setSelectedKeys([item.key]);
        }
      }
      this.isInitial = false;
      this.updateSelected();
    }
    // 使一个 menu-item 可聚焦
    async focusableOne(item) {
      this.items.forEach((_item) => _item.focusable = _item.key === item.key);
      await delay();
    }
    // 聚焦一个 menu-item
    focusOne(item, options) {
      item.focus(options);
    }
    async onClick(event) {
      if (!this.definedController.isDefined()) {
        return;
      }
      if (this.isSubmenu) {
        return;
      }
      if (event.button) {
        return;
      }
      const target = event.target;
      const item = target.closest("mdui-menu-item");
      if (!item || item.disabled) {
        return;
      }
      this.lastActiveItem = item;
      if (this.isSelectable && item.value) {
        this.selectOne(item);
      }
      await this.focusableOne(item);
      this.focusOne(item);
    }
    async onKeyDown(event) {
      if (!this.definedController.isDefined()) {
        return;
      }
      if (this.isSubmenu) {
        return;
      }
      const item = event.target;
      if (event.key === "Enter") {
        event.preventDefault();
        item.click();
      }
      if (event.key === " ") {
        event.preventDefault();
        if (this.isSelectable && item.value) {
          this.selectOne(item);
          await this.focusableOne(item);
          this.focusOne(item);
        }
      }
      if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) {
        const items = this.getSiblingsItems(item, true);
        const activeItem = items.find((item2) => item2.focusable);
        let index = activeItem ? items.indexOf(activeItem) : 0;
        if (items.length > 0) {
          event.preventDefault();
          if (event.key === "ArrowDown") {
            index++;
          } else if (event.key === "ArrowUp") {
            index--;
          } else if (event.key === "Home") {
            index = 0;
          } else if (event.key === "End") {
            index = items.length - 1;
          }
          if (index < 0) {
            index = items.length - 1;
          }
          if (index > items.length - 1) {
            index = 0;
          }
          this.lastActiveItem = items[index];
          await this.focusableOne(items[index]);
          this.focusOne(items[index]);
          return;
        }
      }
    }
  };
  Menu.styles = [componentStyle, menuStyle];
  __decorate([
    n$5({ reflect: true })
    // eslint-disable-next-line prettier/prettier
  ], Menu.prototype, "selects", void 0);
  __decorate([
    n$5()
  ], Menu.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Menu.prototype, "dense", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "submenu-trigger" })
  ], Menu.prototype, "submenuTrigger", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "submenu-open-delay" })
  ], Menu.prototype, "submenuOpenDelay", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "submenu-close-delay" })
  ], Menu.prototype, "submenuCloseDelay", void 0);
  __decorate([
    r$1()
  ], Menu.prototype, "selectedKeys", void 0);
  __decorate([
    o$6({ flatten: true, selector: "mdui-menu-item" })
  ], Menu.prototype, "childrenItems", void 0);
  __decorate([
    watch("dense"),
    watch("selects"),
    watch("submenuTrigger"),
    watch("submenuOpenDelay"),
    watch("submenuCloseDelay")
  ], Menu.prototype, "onSlotChange", null);
  __decorate([
    watch("selects", true)
  ], Menu.prototype, "onSelectsChange", null);
  __decorate([
    watch("selectedKeys", true)
  ], Menu.prototype, "onSelectedKeysChange", null);
  __decorate([
    watch("value")
  ], Menu.prototype, "onValueChange", null);
  Menu = __decorate([
    t$2("mdui-menu")
  ], Menu);
  const navigationBarItemStyle = i$7`:host{--shape-corner-indicator:var(--mdui-shape-corner-full);position:relative;z-index:0;flex:1;overflow:hidden;min-width:3rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}.container{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;padding-top:.75rem;padding-bottom:.75rem}.container:not(.initial){transition:padding var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}mdui-ripple{z-index:1;left:50%;transform:translateX(-50%);width:4rem;height:2rem;margin-top:.75rem;border-radius:var(--mdui-shape-corner-full)}mdui-ripple:not(.initial){transition:margin-top var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}.indicator{position:relative;display:flex;align-items:center;justify-content:center;background-color:transparent;border-radius:var(--shape-corner-indicator);height:2rem;width:2rem}:not(.initial) .indicator{transition:background-color var(--mdui-motion-duration-short1) var(--mdui-motion-easing-standard),width var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}::slotted([slot=badge]){position:absolute;transform:translate(50%,-50%)}::slotted([slot=badge][variant=small]){transform:translate(.5625rem,-.5625rem)}.active-icon,.icon{color:rgb(var(--mdui-color-on-surface-variant));font-size:1.5rem}.active-icon mdui-icon,.icon mdui-icon,::slotted([slot=active]),::slotted([slot=icon]){font-size:inherit}.icon{display:flex}.active-icon{display:none}.label{display:flex;align-items:center;height:1rem;color:rgb(var(--mdui-color-on-surface-variant));margin-top:.25rem;margin-bottom:.25rem;font-size:var(--mdui-typescale-label-medium-size);font-weight:var(--mdui-typescale-label-medium-weight);letter-spacing:var(--mdui-typescale-label-medium-tracking);line-height:var(--mdui-typescale-label-medium-line-height)}:not(.initial) .label{transition:opacity var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear)}:host(:not([active])) mdui-ripple.label-visibility-selected,mdui-ripple.label-visibility-unlabeled{margin-top:1.5rem}.container.label-visibility-unlabeled,:host(:not([active])) .container.label-visibility-selected{padding-top:1.5rem;padding-bottom:0}.container.label-visibility-unlabeled .label,:host(:not([active])) .container.label-visibility-selected .label{opacity:0}:host([active]){--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([active]) .indicator{width:4rem;background-color:rgb(var(--mdui-color-secondary-container))}:host([active]) .active-icon,:host([active]) .icon{color:rgb(var(--mdui-color-on-secondary-container))}:host([active]) .has-active-icon .active-icon{display:flex}:host([active]) .has-active-icon .icon{display:none}:host([active]) .label{color:rgb(var(--mdui-color-on-surface))}`;
  let NavigationBarItem = class NavigationBarItem2 extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super(...arguments);
      this.isInitial = true;
      this.active = false;
      this.disabled = false;
      this.key = uniqueId();
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "active-icon");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get focusElement() {
      var _a2;
      return this.href ? (_a2 = this.renderRoot) == null ? void 0 : _a2.querySelector("._a") : this;
    }
    get focusDisabled() {
      return this.disabled;
    }
    render() {
      const labelVisibilityClassName = cc({
        "label-visibility-selected": this.labelVisibility === "selected",
        "label-visibility-labeled": this.labelVisibility === "labeled",
        "label-visibility-unlabeled": this.labelVisibility === "unlabeled",
        initial: this.isInitial
      });
      const className2 = cc([
        {
          container: true,
          "has-active-icon": this.activeIcon || this.hasSlotController.test("active-icon")
        },
        labelVisibilityClassName
      ]);
      return x`<mdui-ripple .noRipple="${!this.active || this.noRipple}" class="${labelVisibilityClassName}" ${n$1(this.rippleRef)}></mdui-ripple>${this.href ? this.renderAnchor({
      part: "container",
      className: className2,
      content: this.renderInner()
    }) : x`<div part="container" class="${className2}">${this.renderInner()}</div>`}`;
    }
    renderInner() {
      return x`<div part="indicator" class="indicator"><slot name="badge" part="badge" class="badge"></slot><slot name="active-icon" part="active-icon" class="active-icon">${this.activeIcon ? x`<mdui-icon name="${this.activeIcon}"></mdui-icon>` : nothingTemplate}</slot><slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot></div><slot part="label" class="label"></slot>`;
    }
  };
  NavigationBarItem.styles = [
    componentStyle,
    navigationBarItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], NavigationBarItem.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "active-icon" })
  ], NavigationBarItem.prototype, "activeIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], NavigationBarItem.prototype, "value", void 0);
  __decorate([
    r$1()
  ], NavigationBarItem.prototype, "labelVisibility", void 0);
  __decorate([
    r$1()
  ], NavigationBarItem.prototype, "isInitial", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationBarItem.prototype, "active", void 0);
  __decorate([
    r$1()
  ], NavigationBarItem.prototype, "disabled", void 0);
  NavigationBarItem = __decorate([
    t$2("mdui-navigation-bar-item")
  ], NavigationBarItem);
  const navigationBarStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);--z-index:2000;position:fixed;right:0;bottom:0;left:0;display:flex;flex:0 0 auto;overflow:hidden;border-radius:var(--shape-corner) var(--shape-corner) 0 0;z-index:var(--z-index);transition-property:transform;transition-duration:var(--mdui-motion-duration-long2);transition-timing-function:var(--mdui-motion-easing-emphasized);height:5rem;background-color:rgb(var(--mdui-color-surface));box-shadow:var(--mdui-elevation-level2)}:host([scroll-target]:not([scroll-target=''])){position:absolute}:host([hide]:not([hide=false i])){transform:translateY(5.625rem);transition-duration:var(--mdui-motion-duration-short4)}`;
  let NavigationBar = class NavigationBar2 extends ScrollBehaviorMixin(LayoutItemBase) {
    constructor() {
      super(...arguments);
      this.hide = false;
      this.labelVisibility = "auto";
      this.activeKey = 0;
      this.isInitial = true;
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-navigation-bar-item"]
      });
    }
    get scrollPaddingPosition() {
      return "bottom";
    }
    get layoutPlacement() {
      return "bottom";
    }
    async onActiveKeyChange() {
      await this.definedController.whenDefined();
      const item = this.items.find((item2) => item2.key === this.activeKey);
      this.value = item == null ? void 0 : item.value;
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      const item = this.items.find((item2) => item2.value === this.value);
      this.activeKey = (item == null ? void 0 : item.key) ?? 0;
      this.updateItems();
    }
    async onLabelVisibilityChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("transitionend", (event) => {
        if (event.target === this) {
          this.emit(this.hide ? "hidden" : "shown");
        }
      });
    }
    render() {
      return x`<slot @slotchange="${this.onSlotChange}" @click="${this.onClick}"></slot>`;
    }
    /**
     * 滚动行为
     * 当前仅支持 hide 这一个行为,所以不做行为类型判断
     */
    runScrollThreshold(isScrollingUp) {
      if (!isScrollingUp && !this.hide) {
        const eventProceeded = this.emit("hide", { cancelable: true });
        if (eventProceeded) {
          this.hide = true;
        }
      }
      if (isScrollingUp && this.hide) {
        const eventProceeded = this.emit("show", { cancelable: true });
        if (eventProceeded) {
          this.hide = false;
        }
      }
    }
    onClick(event) {
      if (event.button) {
        return;
      }
      const target = event.target;
      const item = target.closest("mdui-navigation-bar-item");
      if (!item) {
        return;
      }
      this.activeKey = item.key;
      this.isInitial = false;
      this.updateItems();
    }
    // 更新 <mdui-navigation-bar-item> 的状态
    updateItems() {
      const items = this.items;
      const labelVisibility = this.labelVisibility === "auto" ? items.length <= 3 ? "labeled" : "selected" : this.labelVisibility;
      items.forEach((item) => {
        item.active = this.activeKey === item.key;
        item.labelVisibility = labelVisibility;
        item.isInitial = this.isInitial;
      });
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
  };
  NavigationBar.styles = [
    componentStyle,
    navigationBarStyle
  ];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationBar.prototype, "hide", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "label-visibility" })
  ], NavigationBar.prototype, "labelVisibility", void 0);
  __decorate([
    n$5({ reflect: true })
  ], NavigationBar.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "scroll-behavior" })
  ], NavigationBar.prototype, "scrollBehavior", void 0);
  __decorate([
    r$1()
  ], NavigationBar.prototype, "activeKey", void 0);
  __decorate([
    o$6({
      selector: "mdui-navigation-bar-item",
      flatten: true
    })
  ], NavigationBar.prototype, "items", void 0);
  __decorate([
    watch("activeKey", true)
  ], NavigationBar.prototype, "onActiveKeyChange", null);
  __decorate([
    watch("value")
  ], NavigationBar.prototype, "onValueChange", null);
  __decorate([
    watch("labelVisibility", true)
  ], NavigationBar.prototype, "onLabelVisibilityChange", null);
  NavigationBar = __decorate([
    t$2("mdui-navigation-bar")
  ], NavigationBar);
  const breakpoint = (width) => {
    const window2 = getWindow$1();
    const document2 = getDocument();
    const computedStyle = window2.getComputedStyle(document2.documentElement);
    const containerWidth = isElement(width) ? $$1(width).innerWidth() : isNumber(width) ? width : $$1(window2).innerWidth();
    const getBreakpointValue = (breakpoint2) => {
      const width2 = computedStyle.getPropertyValue(`--mdui-breakpoint-${breakpoint2}`).toLowerCase();
      return parseFloat(width2);
    };
    const getNextBreakpoint = (breakpoint2) => {
      switch (breakpoint2) {
        case "xs":
          return "sm";
        case "sm":
          return "md";
        case "md":
          return "lg";
        case "lg":
          return "xl";
        case "xl":
          return "xxl";
      }
    };
    return {
      /**
       * 当前宽度是否大于指定断点值
       * @param breakpoint
       */
      up(breakpoint2) {
        return containerWidth >= getBreakpointValue(breakpoint2);
      },
      /**
       * 当前宽度是否小于指定断点值
       * @param breakpoint
       */
      down(breakpoint2) {
        return containerWidth < getBreakpointValue(breakpoint2);
      },
      /**
       * 当前宽度是否在指定断点值内
       * @param breakpoint
       */
      only(breakpoint2) {
        if (breakpoint2 === "xxl") {
          return this.up(breakpoint2);
        } else {
          return this.up(breakpoint2) && this.down(getNextBreakpoint(breakpoint2));
        }
      },
      /**
       * 当前宽度是否不在指定断点值内
       * @param breakpoint
       */
      not(breakpoint2) {
        return !this.only(breakpoint2);
      },
      /**
       * 当前宽度是否在指定断点值之间
       * @param startBreakpoint
       * @param endBreakpoint
       * @returns
       */
      between(startBreakpoint, endBreakpoint) {
        return this.up(startBreakpoint) && this.down(endBreakpoint);
      }
    };
  };
  const style$6 = i$7`:host{--shape-corner:var(--mdui-shape-corner-large);--z-index:2200;display:none;position:fixed;top:0;bottom:0;left:0;z-index:1;width:22.5rem}:host([placement=right]){left:initial;right:0}:host([mobile]),:host([modal]:not([modal=false i])){top:0!important;right:0;bottom:0!important;width:initial;z-index:var(--z-index)}:host([placement=right][mobile]),:host([placement=right][modal]:not([modal=false i])){left:0}:host([contained]:not([contained=false i])){position:absolute}.overlay{position:absolute;inset:0;z-index:inherit;background-color:rgba(var(--mdui-color-scrim),.4)}.panel{display:block;position:absolute;top:0;bottom:0;left:0;width:100%;overflow:auto;z-index:inherit;background-color:rgb(var(--mdui-color-surface));box-shadow:var(--mdui-elevation-level0)}:host([mobile]) .panel,:host([modal]:not([modal=false i])) .panel{border-radius:0 var(--shape-corner) var(--shape-corner) 0;max-width:80%;width:22.5rem;background-color:rgb(var(--mdui-color-surface-container-low));box-shadow:var(--mdui-elevation-level1)}:host([placement=right]) .panel{left:initial;right:0}:host([placement=right][mobile]) .panel,:host([placement=right][modal]:not([modal=false i])) .panel{border-radius:var(--shape-corner) 0 0 var(--shape-corner)}`;
  let NavigationDrawer = class NavigationDrawer2 extends LayoutItemBase {
    constructor() {
      super(...arguments);
      this.open = false;
      this.modal = false;
      this.closeOnEsc = false;
      this.closeOnOverlayClick = false;
      this.placement = "left";
      this.contained = false;
      this.mobile = false;
      this.overlayRef = e$1();
      this.panelRef = e$1();
      this.definedController = new DefinedController(this, {
        needDomReady: true
      });
    }
    get layoutPlacement() {
      return this.placement;
    }
    get lockTarget() {
      return this.contained || this.isParentLayout ? this.parentElement : document.documentElement;
    }
    get isModal() {
      return this.mobile || this.modal;
    }
    // contained 变更后,修改监听尺寸变化的元素。为 true 时,监听父元素;为 false 时,监听 body
    async onContainedChange() {
      var _a2;
      await this.definedController.whenDefined();
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
      this.setObserveResize();
    }
    onPlacementChange() {
      if (this.isParentLayout) {
        this.layoutManager.updateLayout(this);
      }
    }
    async onMobileChange() {
      if (!this.open || this.isParentLayout || this.contained) {
        return;
      }
      await this.definedController.whenDefined();
      if (this.isModal) {
        lockScreen(this, this.lockTarget);
        await this.getLockTargetAnimate(false, 0);
      } else {
        unlockScreen(this, this.lockTarget);
        await this.getLockTargetAnimate(true, 0);
      }
    }
    async onOpenChange() {
      let panel = this.panelRef.value;
      let overlay = this.overlayRef.value;
      const isRight = this.placement === "right";
      const easingLinear = getEasing(this, "linear");
      const easingEmphasized = getEasing(this, "emphasized");
      const setLayoutTransition = (duration, easing) => {
        $$1(this.layoutManager.getItemsAndMain()).css("transition", isNull(duration) ? null : `all ${duration}ms ${easing}`);
      };
      const stopOldAnimations = async () => {
        const elements = [];
        if (this.isModal) {
          elements.push(overlay, panel);
        } else if (!this.isParentLayout) {
          elements.push(this.lockTarget);
        }
        if (this.isParentLayout) {
          const layoutItems = this.layoutManager.getItemsAndMain();
          const layoutIndex = layoutItems.indexOf(this);
          elements.push(...layoutItems.slice(layoutIndex));
        }
        if (!this.isModal && !elements.includes(this)) {
          elements.push(this);
        }
        await Promise.all(elements.map((element) => stopAnimations(element)));
      };
      if (this.open) {
        const hasUpdated = this.hasUpdated;
        if (!hasUpdated) {
          await this.updateComplete;
          panel = this.panelRef.value;
          overlay = this.overlayRef.value;
        }
        if (hasUpdated) {
          const eventProceeded = this.emit("open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        await this.definedController.whenDefined();
        this.style.display = "block";
        this.originalTrigger = document.activeElement;
        if (this.isModal) {
          this.modalHelper.activate();
          if (!this.contained) {
            lockScreen(this, this.lockTarget);
          }
        }
        await stopOldAnimations();
        requestAnimationFrame(() => {
          const autoFocusTarget = this.querySelector("[autofocus]");
          if (autoFocusTarget) {
            autoFocusTarget.focus({ preventScroll: true });
          } else {
            panel.focus({ preventScroll: true });
          }
        });
        const duration = getDuration(this, "long2");
        const animations = [];
        if (this.isModal) {
          animations.push(animateTo(overlay, [{ opacity: 0 }, { opacity: 1, offset: 0.3 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          }));
        } else if (!this.isParentLayout) {
          animations.push(this.getLockTargetAnimate(true, hasUpdated ? duration : 0));
        }
        if (this.isParentLayout && hasUpdated) {
          setLayoutTransition(duration, easingEmphasized);
          this.layoutManager.updateLayout(this);
        }
        animations.push(animateTo(this.isModal ? panel : this, [
          { transform: `translateX(${isRight ? "" : "-"}100%)` },
          { transform: "translateX(0)" }
        ], {
          duration: hasUpdated ? duration : 0,
          easing: easingEmphasized
        }));
        await Promise.all(animations);
        if (!this.open) {
          return;
        }
        if (this.isParentLayout && hasUpdated) {
          setLayoutTransition(null);
        }
        if (hasUpdated) {
          this.emit("opened");
        }
      } else if (this.hasUpdated) {
        const eventProceeded = this.emit("close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        await this.definedController.whenDefined();
        if (this.isModal) {
          this.modalHelper.deactivate();
        }
        await stopOldAnimations();
        const duration = getDuration(this, "short4");
        const animations = [];
        if (this.isModal) {
          animations.push(animateTo(overlay, [{ opacity: 1 }, { opacity: 0 }], {
            duration,
            easing: easingLinear
          }));
        } else if (!this.isParentLayout) {
          animations.push(this.getLockTargetAnimate(false, duration));
        }
        if (this.isParentLayout) {
          setLayoutTransition(duration, easingEmphasized);
          this.layoutManager.updateLayout(this, { width: 0 });
        }
        animations.push(animateTo(this.isModal ? panel : this, [
          { transform: "translateX(0)" },
          { transform: `translateX(${isRight ? "" : "-"}100%)` }
        ], { duration, easing: easingEmphasized }));
        await Promise.all(animations);
        if (this.open) {
          return;
        }
        if (this.isParentLayout) {
          setLayoutTransition(null);
        }
        this.style.display = "none";
        if (this.isModal && !this.contained) {
          unlockScreen(this, this.lockTarget);
        }
        const trigger = this.originalTrigger;
        if (isFunction(trigger == null ? void 0 : trigger.focus)) {
          setTimeout(() => trigger.focus());
        }
        this.emit("closed");
      }
    }
    connectedCallback() {
      super.connectedCallback();
      this.modalHelper = new Modal(this);
      this.definedController.whenDefined().then(() => {
        this.setObserveResize();
      });
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback();
      unlockScreen(this, this.lockTarget);
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("keydown", (event) => {
        if (this.open && this.closeOnEsc && event.key === "Escape" && this.isModal) {
          event.stopPropagation();
          this.open = false;
        }
      });
    }
    render() {
      return x`${n2(this.isModal, () => x`<div ${n$1(this.overlayRef)} part="overlay" class="overlay" @click="${this.onOverlayClick}"></div>`)}<slot ${n$1(this.panelRef)} part="panel" class="panel" tabindex="0"></slot>`;
    }
    setObserveResize() {
      this.observeResize = observeResize(this.contained ? this.parentElement : document.documentElement, () => {
        const target = this.contained ? this.parentElement : void 0;
        this.mobile = breakpoint(target).down("md");
        if (this.isParentLayout) {
          this.layoutManager.updateLayout(this, {
            width: this.isModal ? 0 : void 0
          });
        }
      });
    }
    onOverlayClick() {
      this.emit("overlay-click");
      if (this.closeOnOverlayClick) {
        this.open = false;
      }
    }
    getLockTargetAnimate(open2, duration) {
      const paddingName = this.placement === "right" ? "paddingRight" : "paddingLeft";
      const panelWidth = $$1(this.panelRef.value).innerWidth() + "px";
      return animateTo(this.lockTarget, [
        { [paddingName]: open2 ? 0 : panelWidth },
        { [paddingName]: open2 ? panelWidth : 0 }
      ], {
        duration,
        easing: getEasing(this, "emphasized"),
        fill: "forwards"
      });
    }
  };
  NavigationDrawer.styles = [componentStyle, style$6];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationDrawer.prototype, "open", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationDrawer.prototype, "modal", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "close-on-esc"
    })
  ], NavigationDrawer.prototype, "closeOnEsc", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "close-on-overlay-click"
    })
  ], NavigationDrawer.prototype, "closeOnOverlayClick", void 0);
  __decorate([
    n$5({ reflect: true })
    // eslint-disable-next-line prettier/prettier
  ], NavigationDrawer.prototype, "placement", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationDrawer.prototype, "contained", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationDrawer.prototype, "mobile", void 0);
  __decorate([
    watch("contained", true)
  ], NavigationDrawer.prototype, "onContainedChange", null);
  __decorate([
    watch("placement", true)
  ], NavigationDrawer.prototype, "onPlacementChange", null);
  __decorate([
    watch("mobile", true),
    watch("modal", true)
  ], NavigationDrawer.prototype, "onMobileChange", null);
  __decorate([
    watch("open")
  ], NavigationDrawer.prototype, "onOpenChange", null);
  NavigationDrawer = __decorate([
    t$2("mdui-navigation-drawer")
  ], NavigationDrawer);
  const navigationRailStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);--z-index:2000;position:fixed;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;border-radius:0 var(--shape-corner) var(--shape-corner) 0;z-index:var(--z-index);width:5rem;background-color:rgb(var(--mdui-color-surface));padding:.375rem .75rem}:host([contained]:not([contained=false i])){position:absolute}:host([divider]:not([divider=false i])){border-right:.0625rem solid rgb(var(--mdui-color-surface-variant));width:5.0625rem}:host([placement=right]){left:initial;right:0;border-radius:var(--shape-corner) 0 0 var(--shape-corner)}:host([placement=right][divider]:not([divider=false i])){border-right:none;border-left:.0625rem solid rgb(var(--mdui-color-surface-variant))}.bottom,.items,.top{display:flex;flex-direction:column;align-items:center;width:100%}.top{margin-bottom:1.75rem}.bottom{margin-top:1.75rem}::slotted([slot=bottom]),::slotted([slot=top]),::slotted(mdui-navigation-rail-item){margin-top:.375rem;margin-bottom:.375rem}:host([alignment=start]) .top-spacer{flex-grow:0}:host([alignment=start]) .bottom-spacer{flex-grow:1}:host([alignment=end]) .top-spacer{flex-grow:1}:host([alignment=end]) .bottom-spacer{flex-grow:0}:host([alignment=center]){justify-content:center}:host([alignment=center]) .bottom,:host([alignment=center]) .top{position:absolute}:host([alignment=center]) .top{top:.375rem}:host([alignment=center]) .bottom{bottom:.375rem}`;
  let NavigationRail = class NavigationRail2 extends LayoutItemBase {
    constructor() {
      super(...arguments);
      this.placement = "left";
      this.alignment = "start";
      this.contained = false;
      this.divider = false;
      this.activeKey = 0;
      this.hasSlotController = new HasSlotController(this, "top", "bottom");
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-navigation-rail-item"]
      });
      this.isInitial = true;
    }
    get layoutPlacement() {
      return this.placement;
    }
    get parentTarget() {
      return this.contained || this.isParentLayout ? this.parentElement : document.body;
    }
    get isRight() {
      return this.placement === "right";
    }
    get paddingValue() {
      return ["fixed", "absolute"].includes($$1(this).css("position")) ? this.offsetWidth : void 0;
    }
    async onActiveKeyChange() {
      await this.definedController.whenDefined();
      const item = this.items.find((item2) => item2.key === this.activeKey);
      this.value = item == null ? void 0 : item.value;
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      const item = this.items.find((item2) => item2.value === this.value);
      this.activeKey = (item == null ? void 0 : item.key) ?? 0;
      this.updateItems();
    }
    async onContainedChange() {
      if (this.isParentLayout) {
        return;
      }
      await this.definedController.whenDefined();
      $$1(document.body).css({
        paddingLeft: this.contained || this.isRight ? null : this.paddingValue,
        paddingRight: this.contained || !this.isRight ? null : this.paddingValue
      });
      $$1(this.parentElement).css({
        paddingLeft: this.contained && !this.isRight ? this.paddingValue : null,
        paddingRight: this.contained && this.isRight ? this.paddingValue : null
      });
    }
    async onPlacementChange() {
      var _a2;
      await this.definedController.whenDefined();
      (_a2 = this.layoutManager) == null ? void 0 : _a2.updateLayout(this);
      this.items.forEach((item) => {
        item.placement = this.placement;
      });
      if (!this.isParentLayout) {
        $$1(this.parentTarget).css({
          paddingLeft: this.isRight ? null : this.paddingValue,
          paddingRight: this.isRight ? this.paddingValue : null
        });
      }
    }
    connectedCallback() {
      super.connectedCallback();
      if (!this.isParentLayout) {
        this.definedController.whenDefined().then(() => {
          $$1(this.parentTarget).css({
            paddingLeft: this.isRight ? null : this.paddingValue,
            paddingRight: this.isRight ? this.paddingValue : null
          });
        });
      }
    }
    disconnectedCallback() {
      super.disconnectedCallback();
      if (!this.isParentLayout && this.definedController.isDefined()) {
        $$1(this.parentTarget).css({
          paddingLeft: this.isRight ? void 0 : null,
          paddingRight: this.isRight ? null : void 0
        });
      }
    }
    render() {
      const hasTopSlot = this.hasSlotController.test("top");
      const hasBottomSlot = this.hasSlotController.test("bottom");
      return x`${n2(hasTopSlot, () => x`<slot name="top" part="top" class="top"></slot>`)} <span class="top-spacer"></span><slot part="items" class="items" @slotchange="${this.onSlotChange}" @click="${this.onClick}"></slot><span class="bottom-spacer"></span> ${n2(hasBottomSlot, () => x`<slot name="bottom" part="bottom" class="bottom"></slot>`)}`;
    }
    onClick(event) {
      if (event.button) {
        return;
      }
      const target = event.target;
      const item = target.closest("mdui-navigation-rail-item");
      if (!item) {
        return;
      }
      this.activeKey = item.key;
      this.isInitial = false;
      this.updateItems();
    }
    updateItems() {
      this.items.forEach((item) => {
        item.active = this.activeKey === item.key;
        item.placement = this.placement;
        item.isInitial = this.isInitial;
      });
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
  };
  NavigationRail.styles = [
    componentStyle,
    navigationRailStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], NavigationRail.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true })
    // eslint-disable-next-line prettier/prettier
  ], NavigationRail.prototype, "placement", void 0);
  __decorate([
    n$5({ reflect: true })
  ], NavigationRail.prototype, "alignment", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationRail.prototype, "contained", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationRail.prototype, "divider", void 0);
  __decorate([
    r$1()
  ], NavigationRail.prototype, "activeKey", void 0);
  __decorate([
    o$6({
      selector: "mdui-navigation-rail-item",
      flatten: true
    })
  ], NavigationRail.prototype, "items", void 0);
  __decorate([
    watch("activeKey", true)
  ], NavigationRail.prototype, "onActiveKeyChange", null);
  __decorate([
    watch("value")
  ], NavigationRail.prototype, "onValueChange", null);
  __decorate([
    watch("contained", true)
  ], NavigationRail.prototype, "onContainedChange", null);
  __decorate([
    watch("placement", true)
  ], NavigationRail.prototype, "onPlacementChange", null);
  NavigationRail = __decorate([
    t$2("mdui-navigation-rail")
  ], NavigationRail);
  const navigationRailItemStyle = i$7`:host{--shape-corner-indicator:var(--mdui-shape-corner-full);position:relative;z-index:0;width:100%;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface-variant)}.container{display:flex;flex-direction:column;align-items:center;justify-content:center;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;height:3.5rem}.container:not(.initial){transition:padding var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}mdui-ripple{z-index:1;width:3.5rem;height:2rem;border-radius:var(--mdui-shape-corner-full)}.container:not(.has-label)+mdui-ripple{height:3.5rem}.indicator{position:relative;display:flex;align-items:center;justify-content:center;background-color:transparent;border-radius:var(--shape-corner-indicator);height:2rem;width:2rem}:not(.initial) .indicator{transition:background-color var(--mdui-motion-duration-short1) var(--mdui-motion-easing-standard),width var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard),height var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}::slotted([slot=badge]){position:absolute;transform:translate(50%,-50%)}.placement-right::slotted([slot=badge]){transform:translate(-50%,-50%)}::slotted([slot=badge][variant=small]){transform:translate(.5625rem,-.5625rem)}.placement-right::slotted([slot=badge][variant=small]){transform:translate(-.5625rem,-.5625rem)}.active-icon,.icon{color:rgb(var(--mdui-color-on-surface-variant));font-size:1.5rem}.active-icon mdui-icon,.icon mdui-icon,::slotted([slot=active-icon]),::slotted([slot=icon]){font-size:inherit}.icon{display:flex}.active-icon{display:none}.label{display:flex;align-items:center;height:1rem;color:rgb(var(--mdui-color-on-surface-variant));margin-top:.25rem;margin-bottom:.25rem;font-size:var(--mdui-typescale-label-medium-size);font-weight:var(--mdui-typescale-label-medium-weight);letter-spacing:var(--mdui-typescale-label-medium-tracking);line-height:var(--mdui-typescale-label-medium-line-height)}:not(.initial) .label{transition:opacity var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear)}:host([active]){--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([active]) .indicator{width:3.5rem;background-color:rgb(var(--mdui-color-secondary-container))}:host([active]) :not(.has-label) .indicator{height:3.5rem}:host([active]) .active-icon,:host([active]) .icon{color:rgb(var(--mdui-color-on-secondary-container))}:host([active]) .has-active-icon .active-icon{display:flex}:host([active]) .has-active-icon .icon{display:none}:host([active]) .label{color:rgb(var(--mdui-color-on-surface))}`;
  let NavigationRailItem = class NavigationRailItem2 extends AnchorMixin(RippleMixin(FocusableMixin(MduiElement))) {
    constructor() {
      super(...arguments);
      this.active = false;
      this.isInitial = true;
      this.placement = "left";
      this.disabled = false;
      this.key = uniqueId();
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "[default]", "active-icon");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get focusElement() {
      var _a2;
      return this.href ? (_a2 = this.renderRoot) == null ? void 0 : _a2.querySelector("._a") : this;
    }
    get focusDisabled() {
      return this.disabled;
    }
    render() {
      const hasDefaultSlot = this.hasSlotController.test("[default]");
      const className2 = cc({
        container: true,
        "has-label": hasDefaultSlot,
        "has-active-icon": this.activeIcon || this.hasSlotController.test("active-icon"),
        initial: this.isInitial
      });
      return x`${this.href ? this.renderAnchor({
      part: "container",
      className: className2,
      content: this.renderInner(hasDefaultSlot)
    }) : x`<div part="container" class="${className2}">${this.renderInner(hasDefaultSlot)}</div>`}<mdui-ripple .noRipple="${!this.active || this.noRipple}" ${n$1(this.rippleRef)}></mdui-ripple>`;
    }
    renderInner(hasDefaultSlot) {
      return x`<div part="indicator" class="indicator"><slot name="badge" part="badge" class="${e2({
      badge: true,
      "placement-right": this.placement === "right"
    })}"></slot><slot name="active-icon" part="active-icon" class="active-icon">${this.activeIcon ? x`<mdui-icon name="${this.activeIcon}"></mdui-icon>` : nothingTemplate}</slot><slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot></div>${hasDefaultSlot ? x`<slot part="label" class="label"></slot>` : E}`;
    }
  };
  NavigationRailItem.styles = [
    componentStyle,
    navigationRailItemStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], NavigationRailItem.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "active-icon" })
  ], NavigationRailItem.prototype, "activeIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], NavigationRailItem.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], NavigationRailItem.prototype, "active", void 0);
  __decorate([
    r$1()
  ], NavigationRailItem.prototype, "isInitial", void 0);
  __decorate([
    r$1()
  ], NavigationRailItem.prototype, "placement", void 0);
  __decorate([
    r$1()
  ], NavigationRailItem.prototype, "disabled", void 0);
  NavigationRailItem = __decorate([
    t$2("mdui-navigation-rail-item")
  ], NavigationRailItem);
  let IconCircle = class IconCircle2 extends r$3 {
    render() {
      return svgTag('<path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2z"/>');
    }
  };
  IconCircle.styles = style$e;
  IconCircle = __decorate([
    t$2("mdui-icon-circle")
  ], IconCircle);
  let IconRadioButtonUnchecked = class IconRadioButtonUnchecked2 extends r$3 {
    render() {
      return svgTag('<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"/>');
    }
  };
  IconRadioButtonUnchecked.styles = style$e;
  IconRadioButtonUnchecked = __decorate([
    t$2("mdui-icon-radio-button-unchecked")
  ], IconRadioButtonUnchecked);
  const radioStyle = i$7`:host{position:relative;display:inline-flex;align-items:center;cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;touch-action:manipulation;zoom:1;-webkit-user-drag:none;border-radius:.125rem;font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height)}.icon{display:flex;position:absolute;font-size:1.5rem}:not(.initial) .icon{transition-duration:var(--mdui-motion-duration-short4);transition-timing-function:var(--mdui-motion-easing-standard)}.unchecked-icon{transition-property:color;color:rgb(var(--mdui-color-on-surface-variant))}:host([focused]) .unchecked-icon,:host([hover]) .unchecked-icon,:host([pressed]) .unchecked-icon{color:rgb(var(--mdui-color-on-surface))}.checked-icon{opacity:0;transform:scale(.2);transition-property:color,opacity,transform;color:rgb(var(--mdui-color-primary))}.icon .i,::slotted([slot=checked-icon]),::slotted([slot=unchecked-icon]){color:inherit;font-size:inherit}i{position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;overflow:hidden;border-radius:50%;width:2.5rem;height:2.5rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}.label{display:flex;width:100%;padding-top:.625rem;padding-bottom:.625rem;color:rgb(var(--mdui-color-on-surface))}.label:not(.initial){transition:color var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}:host([checked]:not([checked=false i])) i{--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([checked]:not([checked=false i])) .icon{color:rgb(var(--mdui-color-primary))}:host([checked]:not([checked=false i])) .checked-icon{opacity:1;transform:scale(.5)}i.invalid{--mdui-comp-ripple-state-layer-color:var(--mdui-color-error)}i.invalid .icon{color:rgb(var(--mdui-color-error))}.label.invalid{color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])),:host([group-disabled]){cursor:default;pointer-events:none}:host([disabled]:not([disabled=false i])) .icon,:host([group-disabled]) .icon{color:rgba(var(--mdui-color-on-surface),38%)}:host([disabled]:not([disabled=false i])) .label,:host([group-disabled]) .label{color:rgba(var(--mdui-color-on-surface),38%)}`;
  let Radio = class Radio2 extends RippleMixin(FocusableMixin(MduiElement)) {
    constructor() {
      super(...arguments);
      this.value = "";
      this.disabled = false;
      this.checked = false;
      this.invalid = false;
      this.groupDisabled = false;
      this.focusable = true;
      this.isInitial = true;
      this.rippleRef = e$1();
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.isDisabled();
    }
    get focusElement() {
      return this;
    }
    get focusDisabled() {
      return this.isDisabled() || !this.focusable;
    }
    onCheckedChange() {
      this.emit("change");
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("click", () => {
        if (!this.isDisabled()) {
          this.checked = true;
        }
      });
    }
    render() {
      const className2 = e2({
        invalid: this.invalid,
        initial: this.isInitial
      });
      return x`<i part="control" class="${className2}"><mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple><slot name="unchecked-icon" part="unchecked-icon" class="icon unchecked-icon">${this.uncheckedIcon ? x`<mdui-icon name="${this.uncheckedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-radio-button-unchecked class="i"></mdui-icon-radio-button-unchecked>`}</slot><slot name="checked-icon" part="checked-icon" class="icon checked-icon">${this.checkedIcon ? x`<mdui-icon name="${this.checkedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-circle class="i"></mdui-icon-circle>`}</slot></i><slot part="label" class="label ${className2}"></slot>`;
    }
    isDisabled() {
      return this.disabled || this.groupDisabled;
    }
  };
  Radio.styles = [componentStyle, radioStyle];
  __decorate([
    n$5({ reflect: true })
  ], Radio.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Radio.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Radio.prototype, "checked", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "unchecked-icon" })
  ], Radio.prototype, "uncheckedIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "checked-icon" })
  ], Radio.prototype, "checkedIcon", void 0);
  __decorate([
    r$1()
  ], Radio.prototype, "invalid", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "group-disabled"
    })
  ], Radio.prototype, "groupDisabled", void 0);
  __decorate([
    r$1()
  ], Radio.prototype, "focusable", void 0);
  __decorate([
    r$1()
  ], Radio.prototype, "isInitial", void 0);
  __decorate([
    watch("checked", true)
  ], Radio.prototype, "onCheckedChange", null);
  Radio = __decorate([
    t$2("mdui-radio")
  ], Radio);
  const radioGroupStyle = i$7`:host{display:inline-block}fieldset{border:none;padding:0;margin:0;min-width:0}input{position:absolute;padding:0;opacity:0;pointer-events:none;width:1.25rem;height:1.25rem;margin:0 0 0 .625rem}`;
  let RadioGroup = class RadioGroup2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.name = "";
      this.value = "";
      this.defaultValue = "";
      this.required = false;
      this.invalid = false;
      this.isInitial = true;
      this.inputRef = e$1();
      this.formController = new FormController(this);
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-radio"]
      });
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    // 为了使 <mdui-radio> 可以不是该组件的直接子元素,这里不用 @queryAssignedElements()
    get items() {
      return $$1(this).find("mdui-radio").get();
    }
    get itemsEnabled() {
      return $$1(this).find("mdui-radio:not([disabled])").get();
    }
    async onValueChange() {
      var _a2;
      this.isInitial = false;
      await this.definedController.whenDefined();
      this.emit("input");
      this.emit("change");
      this.updateItems();
      this.updateRadioFocusable();
      await this.updateComplete;
      const form = this.formController.getForm();
      if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
        this.invalid = false;
        formResets.get(form).delete(this);
      } else {
        this.invalid = !this.inputRef.value.checkValidity();
      }
    }
    async onInvalidChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        const eventProceeded = this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        if (!eventProceeded) {
          this.inputRef.value.blur();
          this.inputRef.value.focus();
        }
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
    }
    render() {
      return x`<fieldset><input ${n$1(this.inputRef)} type="radio" class="input" name="${o$5(this.name)}" value="${o$5(this.value)}" .checked="${!!this.value}" .required="${this.required}" tabindex="-1" @keydown="${this.onKeyDown}"><slot @click="${this.onClick}" @keydown="${this.onKeyDown}" @slotchange="${this.onSlotChange}" @change="${this.onCheckedChange}"></slot></fieldset>`;
    }
    // 更新 mdui-radio 的 checked 后,需要更新可聚焦状态
    // 同一个 mdui-radio-group 中的多个 mdui-radio,仅有一个可聚焦
    // 若有已选中的,则已选中的可聚焦;若没有已选中的,则第一个可聚焦
    updateRadioFocusable() {
      const items = this.items;
      const itemChecked = items.find((item) => item.checked);
      if (itemChecked) {
        items.forEach((item) => {
          item.focusable = item === itemChecked;
        });
      } else {
        this.itemsEnabled.forEach((item, index) => {
          item.focusable = !index;
        });
      }
    }
    async onClick(event) {
      await this.definedController.whenDefined();
      const target = event.target;
      const item = target.closest("mdui-radio");
      if (!item || item.disabled) {
        return;
      }
      this.value = item.value;
      await this.updateComplete;
      item.focus();
    }
    /**
     * 在内部的 `<mdui-radio>` 上按下按键时,在 `<mdui-radio>` 之间切换焦点
     */
    async onKeyDown(event) {
      if (!["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", " "].includes(event.key)) {
        return;
      }
      event.preventDefault();
      await this.definedController.whenDefined();
      const items = this.itemsEnabled;
      const itemChecked = items.find((item) => item.checked) ?? items[0];
      const incr = event.key === " " ? 0 : ["ArrowUp", "ArrowLeft"].includes(event.key) ? -1 : 1;
      let index = items.indexOf(itemChecked) + incr;
      if (index < 0) {
        index = items.length - 1;
      }
      if (index > items.length - 1) {
        index = 0;
      }
      this.value = items[index].value;
      await this.updateComplete;
      items[index].focus();
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateItems();
      this.updateRadioFocusable();
    }
    /**
     * slot 中的 mdui-radio 的 checked 变更时触发的事件
     */
    onCheckedChange(event) {
      event.stopPropagation();
    }
    // 更新 <mdui-radio> 的状态
    updateItems() {
      this.items.forEach((item) => {
        item.checked = item.value === this.value;
        item.invalid = this.invalid;
        item.groupDisabled = this.disabled;
        item.isInitial = this.isInitial;
      });
    }
  };
  RadioGroup.styles = [
    componentStyle,
    radioGroupStyle
  ];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], RadioGroup.prototype, "disabled", void 0);
  __decorate([
    n$5({ reflect: true })
  ], RadioGroup.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true })
  ], RadioGroup.prototype, "name", void 0);
  __decorate([
    n$5({ reflect: true })
  ], RadioGroup.prototype, "value", void 0);
  __decorate([
    defaultValue()
  ], RadioGroup.prototype, "defaultValue", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], RadioGroup.prototype, "required", void 0);
  __decorate([
    r$1()
  ], RadioGroup.prototype, "invalid", void 0);
  __decorate([
    watch("value", true)
  ], RadioGroup.prototype, "onValueChange", null);
  __decorate([
    watch("invalid", true),
    watch("disabled")
  ], RadioGroup.prototype, "onInvalidChange", null);
  RadioGroup = __decorate([
    t$2("mdui-radio-group")
  ], RadioGroup);
  /**
   * @license
   * Copyright 2021 Google LLC
   * SPDX-License-Identifier: BSD-3-Clause
   */
  function* o(o2, f2) {
    if (void 0 !== o2) {
      let i3 = 0;
      for (const t2 of o2) yield f2(t2, i3++);
    }
  }
  const sliderBaseStyle = i$7`:host{position:relative;display:block;width:100%;-webkit-tap-highlight-color:transparent;height:2.5rem;padding:0 1.25rem}label{position:relative;display:block;width:100%;height:100%}input[type=range]{position:absolute;inset:0;z-index:4;height:100%;cursor:pointer;opacity:0;appearance:none;width:calc(100% + 20rem * 2 / 16);margin:0 -1.25rem;padding:0 .75rem}:host([disabled]:not([disabled=false i])) input[type=range]{cursor:not-allowed}.track-active,.track-inactive{position:absolute;top:50%;height:.25rem;margin-top:-.125rem}.track-inactive{left:-.125rem;right:-.125rem;border-radius:var(--mdui-shape-corner-full);background-color:rgb(var(--mdui-color-surface-container-highest))}.invalid .track-inactive{background-color:rgba(var(--mdui-color-error),.12)}:host([disabled]:not([disabled=false i])) .track-inactive{background-color:rgba(var(--mdui-color-on-surface),.12)}.track-active{background-color:rgb(var(--mdui-color-primary))}.invalid .track-active{background-color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])) .track-active{background-color:rgba(var(--mdui-color-on-surface),.38)}.handle{position:absolute;top:50%;transform:translate(-50%);cursor:pointer;z-index:2;width:2.5rem;height:2.5rem;margin-top:-1.25rem;--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}.invalid .handle{--mdui-comp-ripple-state-layer-color:var(--mdui-color-error)}.handle .elevation,.handle::before{position:absolute;display:block;content:' ';left:.625rem;top:.625rem;width:1.25rem;height:1.25rem;border-radius:var(--mdui-shape-corner-full)}.handle .elevation{background-color:rgb(var(--mdui-color-primary));box-shadow:var(--mdui-elevation-level1)}.invalid .handle .elevation{background-color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])) .handle .elevation{background-color:rgba(var(--mdui-color-on-surface),.38);box-shadow:var(--mdui-elevation-level0)}.handle::before{background-color:rgb(var(--mdui-color-background))}.handle mdui-ripple{border-radius:var(--mdui-shape-corner-full)}.label{position:absolute;left:50%;transform:translateX(-50%) scale(0);transform-origin:center bottom;display:flex;align-items:center;justify-content:center;cursor:default;white-space:nowrap;-webkit-user-select:none;user-select:none;pointer-events:none;transition:transform var(--mdui-motion-duration-short2) var(--mdui-motion-easing-standard);bottom:2.5rem;min-width:1.75rem;height:1.75rem;padding:.375rem .5rem;border-radius:var(--mdui-shape-corner-full);color:rgb(var(--mdui-color-on-primary));font-size:var(--mdui-typescale-label-medium-size);font-weight:var(--mdui-typescale-label-medium-weight);letter-spacing:var(--mdui-typescale-label-medium-tracking);line-height:var(--mdui-typescale-label-medium-line-height);background-color:rgb(var(--mdui-color-primary))}.invalid .label{color:rgb(var(--mdui-color-on-error));background-color:rgb(var(--mdui-color-error))}.label::after{content:' ';position:absolute;z-index:-1;transform:rotate(45deg);width:.875rem;height:.875rem;bottom:-.125rem;background-color:rgb(var(--mdui-color-primary))}.invalid .label::after{background-color:rgb(var(--mdui-color-error))}.label-visible{transform:translateX(-50%) scale(1);transition:transform var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}.tickmark{position:absolute;top:50%;transform:translate(-50%);width:.125rem;height:.125rem;margin-top:-.0625rem;border-radius:var(--mdui-shape-corner-full);background-color:rgba(var(--mdui-color-on-surface-variant),.38)}.invalid .tickmark{background-color:rgba(var(--mdui-color-error),.38)}.tickmark.active{background-color:rgba(var(--mdui-color-on-primary),.38)}.invalid .tickmark.active{background-color:rgba(var(--mdui-color-on-error),.38)}:host([disabled]:not([disabled=false i])) .tickmark{background-color:rgba(var(--mdui-color-on-surface),.38)}`;
  class SliderBase extends RippleMixin(FocusableMixin(MduiElement)) {
    constructor() {
      super(...arguments);
      this.min = 0;
      this.max = 100;
      this.step = 1;
      this.tickmarks = false;
      this.nolabel = false;
      this.disabled = false;
      this.name = "";
      this.invalid = false;
      this.labelVisible = false;
      this.inputRef = e$1();
      this.trackActiveRef = e$1();
      this.labelFormatter = (value) => value.toString();
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get focusElement() {
      return this.inputRef.value;
    }
    get focusDisabled() {
      return this.disabled;
    }
    onDisabledChange() {
      this.invalid = !this.inputRef.value.checkValidity();
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        const eventProceeded = this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        if (!eventProceeded) {
          this.blur();
          this.focus();
        }
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
    }
    /**
     * value 不在 min、max 或 step 的限制范围内时,修正 value 的值
     */
    fixValue(value) {
      const { min, max, step } = this;
      value = Math.min(Math.max(value, min), max);
      const steps = Math.round((value - min) / step);
      let fixedValue = min + steps * step;
      if (fixedValue > max) {
        fixedValue -= step;
      }
      return fixedValue;
    }
    /**
     * 获取候选值组成的数组
     */
    getCandidateValues() {
      return Array.from({ length: this.max - this.min + 1 }, (_2, index) => index + this.min).filter((value) => !((value - this.min) % this.step));
    }
    /**
     * 渲染浮动标签
     */
    renderLabel(value) {
      return n2(!this.nolabel, () => x`<div part="label" class="label ${e2({ "label-visible": this.labelVisible })}">${this.labelFormatter(value)}</div>`);
    }
    onChange() {
      this.emit("change");
    }
  }
  SliderBase.styles = [
    componentStyle,
    sliderBaseStyle
  ];
  __decorate([
    n$5({ type: Number, reflect: true })
  ], SliderBase.prototype, "min", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], SliderBase.prototype, "max", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], SliderBase.prototype, "step", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SliderBase.prototype, "tickmarks", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SliderBase.prototype, "nolabel", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SliderBase.prototype, "disabled", void 0);
  __decorate([
    n$5({ reflect: true })
  ], SliderBase.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true })
  ], SliderBase.prototype, "name", void 0);
  __decorate([
    r$1()
  ], SliderBase.prototype, "invalid", void 0);
  __decorate([
    r$1()
  ], SliderBase.prototype, "labelVisible", void 0);
  __decorate([
    n$5({ attribute: false })
  ], SliderBase.prototype, "labelFormatter", void 0);
  __decorate([
    watch("disabled", true)
  ], SliderBase.prototype, "onDisabledChange", null);
  let RangeSlider = class RangeSlider2 extends SliderBase {
    constructor() {
      super(...arguments);
      this.defaultValue = [];
      this.currentHandle = "start";
      this.rippleStartRef = e$1();
      this.rippleEndRef = e$1();
      this.handleStartRef = e$1();
      this.handleEndRef = e$1();
      this.formController = new FormController(this);
      this._value = [];
      this.getRippleIndex = () => {
        if (this.hoverHandle) {
          return this.hoverHandle === "start" ? 0 : 1;
        }
        return this.currentHandle === "start" ? 0 : 1;
      };
    }
    /**
     * 滑块的值,为数组格式,将于表单数据一起提交。
     *
     * **NOTE**:该属性无法通过 HTML 属性设置初始值,如果要修改该值,只能通过修改 JavaScript 属性值实现。
     */
    get value() {
      return this._value;
    }
    set value(_value) {
      const oldValue = [...this._value];
      this._value = [this.fixValue(_value[0]), this.fixValue(_value[1])];
      this.requestUpdate("value", oldValue);
      this.updateComplete.then(() => {
        var _a2;
        this.updateStyle();
        const form = this.formController.getForm();
        if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
          this.invalid = false;
          formResets.get(form).delete(this);
        } else {
          this.invalid = !this.inputRef.value.checkValidity();
        }
      });
    }
    get rippleElement() {
      return [this.rippleStartRef.value, this.rippleEndRef.value];
    }
    connectedCallback() {
      super.connectedCallback();
      if (!this.value.length) {
        this.value = [this.min, this.max];
      }
      this.value[0] = this.fixValue(this.value[0]);
      this.value[1] = this.fixValue(this.value[1]);
      if (!this.defaultValue.length) {
        this.defaultValue = [...this.value];
      }
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      const getCurrentHandle = (event) => {
        const $this = $$1(this);
        const paddingLeft = parseFloat($this.css("padding-left"));
        const paddingRight = parseFloat($this.css("padding-right"));
        const percent = (event.offsetX - paddingLeft) / (this.clientWidth - paddingLeft - paddingRight);
        const pointerValue = (this.max - this.min) * percent + this.min;
        const middleValue = (this.value[1] - this.value[0]) / 2 + this.value[0];
        return pointerValue > middleValue ? "end" : "start";
      };
      const onTouchStart = () => {
        if (!this.disabled) {
          this.labelVisible = true;
        }
      };
      const onTouchEnd = () => {
        if (!this.disabled) {
          this.labelVisible = false;
        }
      };
      this.addEventListener("touchstart", onTouchStart);
      this.addEventListener("mousedown", onTouchStart);
      this.addEventListener("touchend", onTouchEnd);
      this.addEventListener("mouseup", onTouchEnd);
      this.addEventListener("pointerdown", (event) => {
        this.currentHandle = getCurrentHandle(event);
      });
      this.addEventListener("pointermove", (event) => {
        const currentHandle = getCurrentHandle(event);
        if (this.hoverHandle !== currentHandle) {
          this.endHover(event);
          this.hoverHandle = currentHandle;
          this.startHover(event);
        }
      });
      this.updateStyle();
    }
    /**
     * <input /> 用于提供拖拽操作
     * <input class="invalid" /> 用于提供 html5 自带的表单错误提示
     */
    render() {
      return x`<label class="${e2({ invalid: this.invalid })}"><input ${n$1(this.inputRef)} type="range" step="${this.step}" min="${this.min}" max="${this.max}" ?disabled="${this.disabled}" @input="${this.onInput}" @change="${this.onChange}"><div part="track-inactive" class="track-inactive"></div><div ${n$1(this.trackActiveRef)} part="track-active" class="track-active"></div><div ${n$1(this.handleStartRef)} part="handle" class="handle start" style="${o$4({
      "z-index": this.currentHandle === "start" ? "2" : "1"
    })}"><div class="elevation"></div><mdui-ripple ${n$1(this.rippleStartRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.renderLabel(this.value[0])}</div><div ${n$1(this.handleEndRef)} part="handle" class="handle end" style="${o$4({
      "z-index": this.currentHandle === "end" ? "2" : "1"
    })}"><div class="elevation"></div><mdui-ripple ${n$1(this.rippleEndRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.renderLabel(this.value[1])}</div>${n2(this.tickmarks, () => o(this.getCandidateValues(), (value) => x`<div part="tickmark" class="tickmark ${e2({
      active: value > this.value[0] && value < this.value[1]
    })}" style="${o$4({
      left: `${(value - this.min) / this.max * 100}%`,
      display: value === this.value[0] || value === this.value[1] ? "none" : "block"
    })}"></div>`))}</label>`;
    }
    updateStyle() {
      const getPercent = (value) => (value - this.min) / (this.max - this.min) * 100;
      const startPercent = getPercent(this.value[0]);
      const endPercent = getPercent(this.value[1]);
      this.trackActiveRef.value.style.width = `${endPercent - startPercent}%`;
      this.trackActiveRef.value.style.left = `${startPercent}%`;
      this.handleStartRef.value.style.left = `${startPercent}%`;
      this.handleEndRef.value.style.left = `${endPercent}%`;
    }
    onInput() {
      const isStart = this.currentHandle === "start";
      const value = parseFloat(this.inputRef.value.value);
      const startValue = this.value[0];
      const endValue = this.value[1];
      const doInput = () => {
        this.updateStyle();
      };
      if (isStart) {
        if (value <= endValue) {
          this.value = [value, endValue];
          doInput();
        } else if (startValue !== endValue) {
          this.value = [endValue, endValue];
          doInput();
        }
      } else {
        if (value >= startValue) {
          this.value = [startValue, value];
          doInput();
        } else if (startValue !== endValue) {
          this.value = [startValue, startValue];
          doInput();
        }
      }
    }
  };
  RangeSlider.styles = [SliderBase.styles];
  __decorate([
    defaultValue()
  ], RangeSlider.prototype, "defaultValue", void 0);
  __decorate([
    r$1()
  ], RangeSlider.prototype, "currentHandle", void 0);
  __decorate([
    n$5({ type: Array, attribute: false })
  ], RangeSlider.prototype, "value", null);
  RangeSlider = __decorate([
    t$2("mdui-range-slider")
  ], RangeSlider);
  const segmentedButtonStyle = i$7`:host{position:relative;display:inline-flex;flex-grow:1;flex-shrink:0;float:left;height:100%;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;border:.0625rem solid rgb(var(--mdui-color-outline))}.button{width:100%;padding:0 .75rem}:host([invalid]){color:rgb(var(--mdui-color-error));border-color:rgb(var(--mdui-color-error))}:host([invalid]) .button{background-color:rgb(var(--mdui-color-error-container))}:host([selected]){color:rgb(var(--mdui-color-on-secondary-container));background-color:rgb(var(--mdui-color-secondary-container));--mdui-comp-ripple-state-layer-color:var(
      --mdui-color-on-secondary-container
    )}:host([disabled]:not([disabled=false i])),:host([group-disabled]){cursor:default;pointer-events:none;color:rgba(var(--mdui-color-on-surface),38%);border-color:rgba(var(--mdui-color-on-surface),12%)}:host([loading]:not([loading=false i])){cursor:default;pointer-events:none}:host(:not(.mdui-segmented-button-first)){margin-left:-.0625rem}:host(.mdui-segmented-button-first){border-radius:var(--shape-corner) 0 0 var(--shape-corner)}:host(.mdui-segmented-button-last){border-radius:0 var(--shape-corner) var(--shape-corner) 0}.end-icon,.icon,.selected-icon{display:inline-flex;font-size:1.28571429em}.end-icon .i,.icon .i,.selected-icon .i,::slotted([slot=end-icon]),::slotted([slot=icon]),::slotted([slot=selected-icon]){font-size:inherit}mdui-circular-progress{width:1.125rem;height:1.125rem}:host([disabled]:not([disabled=false i])) mdui-circular-progress{opacity:.38}.label{display:inline-flex}.has-icon .label{padding-left:.5rem}.has-end-icon .label{padding-right:.5rem}`;
  let SegmentedButton = class SegmentedButton2 extends ButtonBase {
    constructor() {
      super(...arguments);
      this.selected = false;
      this.invalid = false;
      this.groupDisabled = false;
      this.key = uniqueId();
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "[default]", "icon", "end-icon");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.isDisabled() || this.loading;
    }
    get focusDisabled() {
      return this.isDisabled() || this.loading;
    }
    render() {
      const className2 = cc({
        button: true,
        "has-icon": this.icon || this.selected || this.loading || this.hasSlotController.test("icon"),
        "has-end-icon": this.endIcon || this.hasSlotController.test("end-icon")
      });
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.isButton() ? this.renderButton({
      className: className2,
      part: "button",
      content: this.renderInner()
    }) : this.isDisabled() || this.loading ? x`<span part="button" class="_a ${className2}">${this.renderInner()}</span>` : this.renderAnchor({
      className: className2,
      part: "button",
      content: this.renderInner()
    })}`;
    }
    isDisabled() {
      return this.disabled || this.groupDisabled;
    }
    renderIcon() {
      if (this.loading) {
        return this.renderLoading();
      }
      if (this.selected) {
        return x`<slot name="selected-icon" part="selected-icon" class="selected-icon">${this.selectedIcon ? x`<mdui-icon name="${this.selectedIcon}" class="i"></mdui-icon>` : x`<mdui-icon-check class="i"></mdui-icon-check>`}</slot>`;
      }
      return x`<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}" class="i"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderLabel() {
      const hasLabel = this.hasSlotController.test("[default]");
      if (!hasLabel) {
        return nothingTemplate;
      }
      return x`<slot part="label" class="label"></slot>`;
    }
    renderEndIcon() {
      return x`<slot name="end-icon" part="end-icon" class="end-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}" class="i"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderInner() {
      return [this.renderIcon(), this.renderLabel(), this.renderEndIcon()];
    }
  };
  SegmentedButton.styles = [
    ButtonBase.styles,
    segmentedButtonStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], SegmentedButton.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], SegmentedButton.prototype, "endIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "selected-icon" })
  ], SegmentedButton.prototype, "selectedIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SegmentedButton.prototype, "selected", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SegmentedButton.prototype, "invalid", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "group-disabled"
    })
  ], SegmentedButton.prototype, "groupDisabled", void 0);
  SegmentedButton = __decorate([
    t$2("mdui-segmented-button")
  ], SegmentedButton);
  const segmentedButtonGroupStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);position:relative;display:inline-flex;vertical-align:middle;height:2.5rem;font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking);line-height:var(--mdui-typescale-label-large-line-height);color:rgb(var(--mdui-color-on-surface));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([full-width]:not([full-width=false i])){display:flex;flex-wrap:nowrap}input,select{position:absolute;width:100%;height:100%;padding:0;opacity:0;pointer-events:none}`;
  let SegmentedButtonGroup = class SegmentedButtonGroup2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.fullWidth = false;
      this.disabled = false;
      this.required = false;
      this.name = "";
      this.value = "";
      this.defaultValue = "";
      this.selectedKeys = [];
      this.invalid = false;
      this.isInitial = true;
      this.inputRef = e$1();
      this.formController = new FormController(this);
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-segmented-button"]
      });
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    // 为了使 <mdui-segmented-button> 可以不是该组件的直接子元素,这里不用 @queryAssignedElements()
    get items() {
      return $$1(this).find("mdui-segmented-button").get();
    }
    // 所有的子项元素(不包含已禁用的)
    get itemsEnabled() {
      return $$1(this).find("mdui-segmented-button:not([disabled])").get();
    }
    // 是否为单选
    get isSingle() {
      return this.selects === "single";
    }
    // 是否为多选
    get isMultiple() {
      return this.selects === "multiple";
    }
    // 是否可选择
    get isSelectable() {
      return this.isSingle || this.isMultiple;
    }
    async onSelectsChange() {
      if (!this.isSelectable) {
        this.setSelectedKeys([]);
      } else if (this.isSingle) {
        this.setSelectedKeys(this.selectedKeys.slice(0, 1));
      }
      await this.onSelectedKeysChange();
    }
    async onSelectedKeysChange() {
      await this.definedController.whenDefined();
      const values = this.itemsEnabled.filter((item) => this.selectedKeys.includes(item.key)).map((item) => item.value);
      const value = this.isMultiple ? values : values[0] || "";
      this.setValue(value);
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      var _a2;
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      if (!this.isSelectable) {
        this.updateItems();
        return;
      }
      const values = (this.isSingle ? [this.value] : (
        // 多选时,传入的值可能是字符串(通过 attribute 属性设置);或字符串数组(通过 property 属性设置)
        isString(this.value) ? [this.value] : this.value
      )).filter((i3) => i3);
      if (!values.length) {
        this.setSelectedKeys([]);
      } else if (this.isSingle) {
        const firstItem = this.itemsEnabled.find((item) => item.value === values[0]);
        this.setSelectedKeys(firstItem ? [firstItem.key] : []);
      } else if (this.isMultiple) {
        this.setSelectedKeys(this.itemsEnabled.filter((item) => values.includes(item.value)).map((item) => item.key));
      }
      this.updateItems();
      if (!this.isInitial) {
        const form = this.formController.getForm();
        if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
          this.invalid = false;
          formResets.get(form).delete(this);
        } else {
          this.invalid = !this.inputRef.value.checkValidity();
        }
      }
    }
    async onInvalidChange() {
      await this.definedController.whenDefined();
      this.updateItems();
    }
    connectedCallback() {
      super.connectedCallback();
      this.value = this.isMultiple && isString(this.value) ? this.value ? [this.value] : [] : this.value;
      this.defaultValue = this.selects === "multiple" ? [] : "";
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        const eventProceeded = this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        if (!eventProceeded) {
          this.inputRef.value.blur();
          this.inputRef.value.focus();
        }
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
    }
    render() {
      return x`${n2(this.isSelectable && this.isSingle, () => x`<input ${n$1(this.inputRef)} type="radio" name="${o$5(this.name)}" value="1" .disabled="${this.disabled}" .required="${this.required}" .checked="${!!this.value}" tabindex="-1" @keydown="${this.onInputKeyDown}">`)}${n2(this.isSelectable && this.isMultiple, () => x`<select ${n$1(this.inputRef)} name="${o$5(this.name)}" .disabled="${this.disabled}" .required="${this.required}" multiple="multiple" tabindex="-1" @keydown="${this.onInputKeyDown}">${o(this.value, (value) => x`<option selected="selected" value="${value}"></option>`)}</select>`)}<slot @slotchange="${this.onSlotChange}" @click="${this.onClick}"></slot>`;
    }
    // 切换一个元素的选中状态
    selectOne(item) {
      if (this.isMultiple) {
        const selectedKeys = [...this.selectedKeys];
        if (selectedKeys.includes(item.key)) {
          selectedKeys.splice(selectedKeys.indexOf(item.key), 1);
        } else {
          selectedKeys.push(item.key);
        }
        this.setSelectedKeys(selectedKeys);
      }
      if (this.isSingle) {
        if (this.selectedKeys.includes(item.key)) {
          this.setSelectedKeys([]);
        } else {
          this.setSelectedKeys([item.key]);
        }
      }
      this.isInitial = false;
      this.updateItems();
    }
    async onClick(event) {
      if (event.button) {
        return;
      }
      await this.definedController.whenDefined();
      const target = event.target;
      const item = target.closest("mdui-segmented-button");
      if (!item || item.disabled) {
        return;
      }
      if (this.isSelectable && item.value) {
        this.selectOne(item);
      }
    }
    /**
     * 在隐藏的 `<input>` 或 `<select>` 上按下按键时,切换选中状态
     * 通常为验证不通过时,默认聚焦到 `<input>` 或 `<select>` 上,此时按下按键,切换第一个元素的选中状态
     */
    async onInputKeyDown(event) {
      if (!["Enter", " "].includes(event.key)) {
        return;
      }
      event.preventDefault();
      await this.definedController.whenDefined();
      if (this.isSingle) {
        const input = event.target;
        input.checked = !input.checked;
        this.selectOne(this.itemsEnabled[0]);
        this.itemsEnabled[0].focus();
      }
      if (this.isMultiple) {
        this.selectOne(this.itemsEnabled[0]);
        this.itemsEnabled[0].focus();
      }
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateItems(true);
    }
    setSelectedKeys(selectedKeys) {
      if (!arraysEqualIgnoreOrder(this.selectedKeys, selectedKeys)) {
        this.selectedKeys = selectedKeys;
      }
    }
    setValue(value) {
      if (this.isSingle) {
        this.value = value;
      } else if (!arraysEqualIgnoreOrder(this.value, value)) {
        this.value = value;
      }
    }
    updateItems(slotChange = false) {
      const items = this.items;
      items.forEach((item, index) => {
        item.invalid = this.invalid;
        item.groupDisabled = this.disabled;
        item.selected = this.selectedKeys.includes(item.key);
        if (slotChange) {
          item.classList.toggle("mdui-segmented-button-first", index === 0);
          item.classList.toggle("mdui-segmented-button-last", index === items.length - 1);
        }
      });
    }
  };
  SegmentedButtonGroup.styles = [
    componentStyle,
    segmentedButtonGroupStyle
  ];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "full-width"
    })
  ], SegmentedButtonGroup.prototype, "fullWidth", void 0);
  __decorate([
    n$5({ reflect: true })
    // eslint-disable-next-line prettier/prettier
  ], SegmentedButtonGroup.prototype, "selects", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SegmentedButtonGroup.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], SegmentedButtonGroup.prototype, "required", void 0);
  __decorate([
    n$5({ reflect: true })
  ], SegmentedButtonGroup.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true })
  ], SegmentedButtonGroup.prototype, "name", void 0);
  __decorate([
    n$5()
  ], SegmentedButtonGroup.prototype, "value", void 0);
  __decorate([
    defaultValue()
  ], SegmentedButtonGroup.prototype, "defaultValue", void 0);
  __decorate([
    r$1()
  ], SegmentedButtonGroup.prototype, "selectedKeys", void 0);
  __decorate([
    r$1()
  ], SegmentedButtonGroup.prototype, "invalid", void 0);
  __decorate([
    watch("selects", true)
  ], SegmentedButtonGroup.prototype, "onSelectsChange", null);
  __decorate([
    watch("selectedKeys", true)
  ], SegmentedButtonGroup.prototype, "onSelectedKeysChange", null);
  __decorate([
    watch("value")
  ], SegmentedButtonGroup.prototype, "onValueChange", null);
  __decorate([
    watch("invalid", true),
    watch("disabled")
  ], SegmentedButtonGroup.prototype, "onInvalidChange", null);
  SegmentedButtonGroup = __decorate([
    t$2("mdui-segmented-button-group")
  ], SegmentedButtonGroup);
  let IconCancel_Outlined = class IconCancel_Outlined2 extends r$3 {
    render() {
      return svgTag('<path d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"/>');
    }
  };
  IconCancel_Outlined.styles = style$e;
  IconCancel_Outlined = __decorate([
    t$2("mdui-icon-cancel--outlined")
  ], IconCancel_Outlined);
  let IconError = class IconError2 extends r$3 {
    render() {
      return svgTag('<path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/>');
    }
  };
  IconError.styles = style$e;
  IconError = __decorate([
    t$2("mdui-icon-error")
  ], IconError);
  let IconVisibilityOff = class IconVisibilityOff2 extends r$3 {
    render() {
      return svgTag('<path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46A11.804 11.804 0 0 0 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/>');
    }
  };
  IconVisibilityOff.styles = style$e;
  IconVisibilityOff = __decorate([
    t$2("mdui-icon-visibility-off")
  ], IconVisibilityOff);
  let IconVisibility = class IconVisibility2 extends r$3 {
    render() {
      return svgTag('<path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>');
    }
  };
  IconVisibility.styles = style$e;
  IconVisibility = __decorate([
    t$2("mdui-icon-visibility")
  ], IconVisibility);
  const style$5 = i$7`:host{display:inline-block;width:100%}:host([disabled]:not([disabled=false i])){pointer-events:none}:host([type=hidden]){display:none}.container{position:relative;display:flex;align-items:center;height:100%;padding:.125rem .125rem .125rem 1rem;transition:box-shadow var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard)}.container.has-icon{padding-left:.75rem}.container.has-action,.container.has-right-icon,.container.has-suffix{padding-right:.75rem}:host([variant=filled]) .container{box-shadow:inset 0 -.0625rem 0 0 rgb(var(--mdui-color-on-surface-variant));background-color:rgb(var(--mdui-color-surface-container-highest));border-radius:var(--mdui-shape-corner-extra-small) var(--mdui-shape-corner-extra-small) 0 0}:host([variant=filled]) .container.invalid,:host([variant=filled]) .container.invalid-style{box-shadow:inset 0 -.0625rem 0 0 rgb(var(--mdui-color-error))}:host([variant=filled]:hover) .container{box-shadow:inset 0 -.0625rem 0 0 rgb(var(--mdui-color-on-surface))}:host([variant=filled]:hover) .container.invalid,:host([variant=filled]:hover) .container.invalid-style{box-shadow:inset 0 -.0625rem 0 0 rgb(var(--mdui-color-on-error-container))}:host([variant=filled][focused-style]) .container,:host([variant=filled][focused]) .container{box-shadow:inset 0 -.125rem 0 0 rgb(var(--mdui-color-primary))}:host([variant=filled][focused-style]) .container.invalid,:host([variant=filled][focused-style]) .container.invalid-style,:host([variant=filled][focused]) .container.invalid,:host([variant=filled][focused]) .container.invalid-style{box-shadow:inset 0 -.125rem 0 0 rgb(var(--mdui-color-error))}:host([variant=filled][disabled]:not([disabled=false i])) .container{box-shadow:inset 0 -.0625rem 0 0 rgba(var(--mdui-color-on-surface),38%);background-color:rgba(var(--mdui-color-on-surface),4%)}:host([variant=outlined]) .container{box-shadow:inset 0 0 0 .0625rem rgb(var(--mdui-color-outline));border-radius:var(--mdui-shape-corner-extra-small)}:host([variant=outlined]) .container.invalid,:host([variant=outlined]) .container.invalid-style{box-shadow:inset 0 0 0 .0625rem rgb(var(--mdui-color-error))}:host([variant=outlined]:hover) .container{box-shadow:inset 0 0 0 .0625rem rgb(var(--mdui-color-on-surface))}:host([variant=outlined]:hover) .container.invalid,:host([variant=outlined]:hover) .container.invalid-style{box-shadow:inset 0 0 0 .0625rem rgb(var(--mdui-color-on-error-container))}:host([variant=outlined][focused-style]) .container,:host([variant=outlined][focused]) .container{box-shadow:inset 0 0 0 .125rem rgb(var(--mdui-color-primary))}:host([variant=outlined][focused-style]) .container.invalid,:host([variant=outlined][focused-style]) .container.invalid-style,:host([variant=outlined][focused]) .container.invalid,:host([variant=outlined][focused]) .container.invalid-style{box-shadow:inset 0 0 0 .125rem rgb(var(--mdui-color-error))}:host([variant=outlined][disabled]:not([disabled=false i])) .container{box-shadow:inset 0 0 0 .125rem rgba(var(--mdui-color-on-surface),12%)}.action,.icon,.prefix,.right-icon,.suffix{display:flex;-webkit-user-select:none;user-select:none;color:rgb(var(--mdui-color-on-surface-variant))}:host([disabled]:not([disabled=false i])) .action,:host([disabled]:not([disabled=false i])) .icon,:host([disabled]:not([disabled=false i])) .prefix,:host([disabled]:not([disabled=false i])) .right-icon,:host([disabled]:not([disabled=false i])) .suffix{color:rgba(var(--mdui-color-on-surface),38%)}.invalid .right-icon,.invalid-style .right-icon{color:rgb(var(--mdui-color-error))}:host(:hover) .invalid .right-icon,:host(:hover) .invalid-style .right-icon{color:rgb(var(--mdui-color-on-error-container))}:host([focused-style]) .invalid .right-icon,:host([focused-style]) .invalid-style .right-icon,:host([focused]) .invalid .right-icon,:host([focused]) .invalid-style .right-icon{color:rgb(var(--mdui-color-error))}.action,.icon,.right-icon{font-size:1.5rem}.action mdui-button-icon,.icon mdui-button-icon,.right-icon mdui-button-icon,::slotted(mdui-button-icon[slot]){margin-left:-.5rem;margin-right:-.5rem}.action .i,.icon .i,.right-icon .i,::slotted([slot$=icon]){font-size:inherit}.has-icon .icon{margin-right:1rem}.has-prefix .prefix{padding-right:.125rem}.has-action .action{margin-left:.75rem}.has-suffix .suffix{padding-right:.25rem;padding-left:.125rem}.has-right-icon .right-icon{margin-left:.75rem}.prefix,.suffix{display:none;font-size:var(--mdui-typescale-body-large-size);font-weight:var(--mdui-typescale-body-large-weight);letter-spacing:var(--mdui-typescale-body-large-tracking);line-height:var(--mdui-typescale-body-large-line-height)}:host([variant=filled][label]) .prefix,:host([variant=filled][label]) .suffix{padding-top:1rem}.has-value .prefix,.has-value .suffix,:host([focused-style]) .prefix,:host([focused-style]) .suffix,:host([focused]) .prefix,:host([focused]) .suffix{display:flex}.input-container{display:flex;width:100%;height:100%}.label{position:absolute;pointer-events:none;max-width:calc(100% - 1rem);display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1;transition:all var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard);top:1rem;color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-body-large-size);font-weight:var(--mdui-typescale-body-large-weight);letter-spacing:var(--mdui-typescale-body-large-tracking);line-height:var(--mdui-typescale-body-large-line-height)}.invalid .label,.invalid-style .label{color:rgb(var(--mdui-color-error))}:host([variant=outlined]) .label{padding:0 .25rem;margin:0 -.25rem}:host([variant=outlined]:hover) .label{color:rgb(var(--mdui-color-on-surface))}:host([variant=filled]:hover) .invalid .label,:host([variant=filled]:hover) .invalid-style .label,:host([variant=outlined]:hover) .invalid .label,:host([variant=outlined]:hover) .invalid-style .label{color:rgb(var(--mdui-color-on-error-container))}:host([variant=filled][focused-style]) .label,:host([variant=filled][focused]) .label,:host([variant=outlined][focused-style]) .label,:host([variant=outlined][focused]) .label{color:rgb(var(--mdui-color-primary))}:host([variant=filled]) .has-value .label,:host([variant=filled][focused-style]) .label,:host([variant=filled][focused]) .label,:host([variant=filled][type=date]) .label,:host([variant=filled][type=datetime-local]) .label,:host([variant=filled][type=month]) .label,:host([variant=filled][type=time]) .label,:host([variant=filled][type=week]) .label{font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height);top:.25rem}:host([variant=outlined]) .has-value .label,:host([variant=outlined][focused-style]) .label,:host([variant=outlined][focused]) .label,:host([variant=outlined][type=date]) .label,:host([variant=outlined][type=datetime-local]) .label,:host([variant=outlined][type=month]) .label,:host([variant=outlined][type=time]) .label,:host([variant=outlined][type=week]) .label{font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height);top:-.5rem;left:.75rem;background-color:rgb(var(--mdui-color-background))}:host([variant=filled][focused-style]) .invalid .label,:host([variant=filled][focused-style]) .invalid-style .label,:host([variant=filled][focused]) .invalid .label,:host([variant=filled][focused]) .invalid-style .label,:host([variant=outlined][focused-style]) .invalid .label,:host([variant=outlined][focused-style]) .invalid-style .label,:host([variant=outlined][focused]) .invalid .label,:host([variant=outlined][focused]) .invalid-style .label{color:rgb(var(--mdui-color-error))}:host([variant=filled][disabled]:not([disabled=false i])) .label,:host([variant=outlined][disabled]:not([disabled=false i])) .label{color:rgba(var(--mdui-color-on-surface),38%)}.input{display:block;width:100%;border:none;outline:0;background:0 0;appearance:none;resize:none;cursor:inherit;font-family:inherit;padding:.875rem .875rem .875rem 0;font-size:var(--mdui-typescale-body-large-size);font-weight:var(--mdui-typescale-body-large-weight);letter-spacing:var(--mdui-typescale-body-large-tracking);line-height:var(--mdui-typescale-body-large-line-height);color:rgb(var(--mdui-color-on-surface));caret-color:rgb(var(--mdui-color-primary))}.has-action .input,.has-right-icon .input{padding-right:.25rem}.has-suffix .input{padding-right:0}.input.hide-input{opacity:0;height:0;min-height:0;width:0;padding:0!important;overflow:hidden}.input::placeholder{color:rgb(var(--mdui-color-on-surface-variant))}.invalid .input,.invalid-style .input{caret-color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])) .input{color:rgba(var(--mdui-color-on-surface),38%)}:host([end-aligned]:not([end-aligned=false i])) .input{text-align:right}textarea.input{padding-top:0;margin-top:.875rem}:host([variant=filled]) .label+.input{padding-top:1.375rem;padding-bottom:.375rem}:host([variant=filled]) .label+textarea.input{padding-top:0;margin-top:1.375rem}.supporting{display:flex;justify-content:space-between;padding:.25rem 1rem;color:rgb(var(--mdui-color-on-surface-variant))}.supporting.invalid,.supporting.invalid-style{color:rgb(var(--mdui-color-error))}.helper{display:block;opacity:1;transition:opacity var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height)}:host([disabled]:not([disabled=false i])) .helper{color:rgba(var(--mdui-color-on-surface),38%)}:host([helper-on-focus]:not([helper-on-focus=false i])) .helper{opacity:0}:host([helper-on-focus][focused-style]:not([helper-on-focus=false i])) .helper,:host([helper-on-focus][focused]:not([helper-on-focus=false i])) .helper{opacity:1}.error{font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height)}.counter{flex-wrap:nowrap;padding-left:1rem;font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height)}::-ms-reveal{display:none}.input[type=number]::-webkit-inner-spin-button,.input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;display:none}.input[type=number]{-moz-appearance:textfield}.input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}`;
  let TextField = class TextField2 extends FocusableMixin(MduiElement) {
    constructor() {
      super(...arguments);
      this.variant = "filled";
      this.type = "text";
      this.name = "";
      this.value = "";
      this.defaultValue = "";
      this.helperOnFocus = false;
      this.clearable = false;
      this.endAligned = false;
      this.readonly = false;
      this.disabled = false;
      this.required = false;
      this.autosize = false;
      this.counter = false;
      this.togglePassword = false;
      this.spellcheck = false;
      this.invalid = false;
      this.invalidStyle = false;
      this.focusedStyle = false;
      this.isPasswordVisible = false;
      this.hasValue = false;
      this.error = "";
      this.inputRef = e$1();
      this.formController = new FormController(this);
      this.hasSlotController = new HasSlotController(this, "icon", "end-icon", "helper", "input");
      this.readonlyButClearable = false;
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    /**
     * 获取当前值,并转换为 `number` 类型;或设置一个 `number` 类型的值。
     * 如果值无法被转换为 `number` 类型,则会返回 `NaN`。
     */
    get valueAsNumber() {
      var _a2;
      return ((_a2 = this.inputRef.value) == null ? void 0 : _a2.valueAsNumber) ?? parseFloat(this.value);
    }
    set valueAsNumber(newValue) {
      const input = document.createElement("input");
      input.type = "number";
      input.valueAsNumber = newValue;
      this.value = input.value;
    }
    get focusElement() {
      return this.inputRef.value;
    }
    get focusDisabled() {
      return this.disabled;
    }
    /**
     * 是否显示聚焦状态样式
     */
    get isFocusedStyle() {
      return this.focused || this.focusedStyle;
    }
    /**
     * 是否渲染为 textarea。为 false 时渲染为 input
     */
    get isTextarea() {
      return this.rows && this.rows > 1 || this.autosize;
    }
    onDisabledChange() {
      this.inputRef.value.disabled = this.disabled;
      this.invalid = !this.inputRef.value.checkValidity();
    }
    async onValueChange() {
      var _a2;
      this.hasValue = !["", null].includes(this.value);
      if (this.hasUpdated) {
        await this.updateComplete;
        this.setTextareaHeight();
        const form = this.formController.getForm();
        if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
          this.invalid = false;
          formResets.get(form).delete(this);
        } else {
          this.invalid = !this.inputRef.value.checkValidity();
        }
      }
    }
    onRowsChange() {
      this.setTextareaHeight();
    }
    async onMaxRowsChange() {
      if (!this.autosize) {
        return;
      }
      if (!this.hasUpdated) {
        await this.updateComplete;
      }
      const $input = $$1(this.inputRef.value);
      $input.css("max-height", parseFloat($input.css("line-height")) * (this.maxRows ?? 1) + parseFloat($input.css("padding-top")) + parseFloat($input.css("padding-bottom")));
    }
    async onMinRowsChange() {
      if (!this.autosize) {
        return;
      }
      if (!this.hasUpdated) {
        await this.updateComplete;
      }
      const $input = $$1(this.inputRef.value);
      $input.css("min-height", parseFloat($input.css("line-height")) * (this.minRows ?? 1) + parseFloat($input.css("padding-top")) + parseFloat($input.css("padding-bottom")));
    }
    connectedCallback() {
      super.connectedCallback();
      this.updateComplete.then(() => {
        this.setTextareaHeight();
        this.observeResize = observeResize(this.inputRef.value, () => this.setTextareaHeight());
      });
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback();
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
      offLocaleReady(this);
    }
    /**
     * 选中文本框中的文本
     */
    select() {
      this.inputRef.value.select();
    }
    /**
     * 选中文本框中特定范围的内容
     *
     * @param start 被选中的第一个字符的位置索引,从 `0` 开始。如果这个值比元素的 `value` 长度还大,则会被看作 `value` 最后一个位置的索引
     * @param end 被选中的最后一个字符的*下一个*位置索引。如果这个值比元素的 `value` 长度还大,则会被看作 `value` 最后一个位置的索引
     * @param direction 一个表示选择方向的字符串,可能的值有:`forward`、`backward`、`none`
     */
    setSelectionRange(start, end, direction = "none") {
      this.inputRef.value.setSelectionRange(start, end, direction);
    }
    /**
     * 将文本框中特定范围的文本替换为新的文本
     * @param replacement 要插入的字符串
     * @param start 要替换的字符的起止位置的索引。默认为当前用户选中的字符的起始位置的索引
     * @param end 要替换的字符的结束位置的索引。默认为当前用户选中的字符的结束位置的索引
     * @param selectMode 文本被替换后,选取的状态。可选值为:
     * * `select`:选择新插入的文本
     * * `start`:将光标移动到新插入的文本的起始位置
     * * `end`:将光标移动到新插入的文本的结束位置
     * * `preserve`:默认值。尝试保留选取
     */
    setRangeText(replacement, start, end, selectMode = "preserve") {
      this.inputRef.value.setRangeText(replacement, start, end, selectMode);
      if (this.value !== this.inputRef.value.value) {
        this.value = this.inputRef.value.value;
        this.setTextareaHeight();
        this.emit("input");
        this.emit("change");
      }
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        this.focus();
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.setCustomValidityInternal(message);
      offLocaleReady(this);
    }
    render() {
      const hasIcon = !!this.icon || this.hasSlotController.test("icon");
      const hasEndIcon = !!this.endIcon || this.hasSlotController.test("end-icon");
      const hasErrorIcon = this.invalid || this.invalidStyle;
      const hasTogglePasswordButton = this.type === "password" && this.togglePassword && !this.disabled;
      const hasClearButton = this.clearable && !this.disabled && (!this.readonly || this.readonlyButClearable) && (typeof this.value === "number" || this.value.length > 0);
      const hasPrefix = !!this.prefix || this.hasSlotController.test("prefix");
      const hasSuffix = !!this.suffix || this.hasSlotController.test("suffix");
      const hasHelper = !!this.helper || this.hasSlotController.test("helper");
      const hasError = hasErrorIcon && !!(this.error || this.inputRef.value.validationMessage);
      const hasCounter = this.counter && !!this.maxlength;
      const hasInputSlot = this.hasSlotController.test("input");
      const invalidClassNameObj = {
        invalid: this.invalid,
        "invalid-style": this.invalidStyle
      };
      const className2 = e2({
        container: true,
        "has-value": this.hasValue,
        "has-icon": hasIcon,
        "has-right-icon": hasEndIcon || hasErrorIcon,
        "has-action": hasClearButton || hasTogglePasswordButton,
        "has-prefix": hasPrefix,
        "has-suffix": hasSuffix,
        "is-firefox": navigator.userAgent.includes("Firefox"),
        ...invalidClassNameObj
      });
      return x`<div part="container" class="${className2}">${this.renderPrefix()}<div class="input-container">${this.renderLabel()} ${this.isTextarea ? this.renderTextArea(hasInputSlot) : this.renderInput(hasInputSlot)} ${n2(hasInputSlot, () => x`<slot name="input" class="input"></slot>`)}</div>${this.renderSuffix()}${this.renderClearButton(hasClearButton)} ${this.renderTogglePasswordButton(hasTogglePasswordButton)} ${this.renderRightIcon(hasErrorIcon)}</div>${n2(hasError || hasHelper || hasCounter, () => x`<div part="supporting" class="${e2({ supporting: true, ...invalidClassNameObj })}">${this.renderHelper(hasError, hasHelper)} ${this.renderCounter(hasCounter)}</div>`)}`;
    }
    setCustomValidityInternal(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
      this.requestUpdate();
    }
    onChange() {
      this.value = this.inputRef.value.value;
      if (this.isTextarea) {
        this.setTextareaHeight();
      }
      this.emit("change");
    }
    onClear(event) {
      this.value = "";
      this.emit("clear");
      this.emit("input");
      this.emit("change");
      this.focus();
      event.stopPropagation();
    }
    onInput(event) {
      event.stopPropagation();
      this.value = this.inputRef.value.value;
      if (this.isTextarea) {
        this.setTextareaHeight();
      }
      this.emit("input");
    }
    onInvalid(event) {
      event.preventDefault();
    }
    onKeyDown(event) {
      const hasModifier = event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;
      if (event.key === "Enter" && !hasModifier) {
        setTimeout(() => {
          if (!event.defaultPrevented) {
            this.formController.submit();
          }
        });
      }
    }
    /**
     * textarea 不支持 pattern 属性,所以在 keyup 时执行验证
     */
    onTextAreaKeyUp() {
      if (this.pattern) {
        const patternRegex = new RegExp(this.pattern);
        const hasError = this.value && !this.value.match(patternRegex);
        if (hasError) {
          this.setCustomValidityInternal(this.getPatternErrorMsg());
          onLocaleReady(this, () => {
            this.setCustomValidityInternal(this.getPatternErrorMsg());
          });
        } else {
          this.setCustomValidityInternal("");
          offLocaleReady(this);
        }
      }
    }
    onTogglePassword() {
      this.isPasswordVisible = !this.isPasswordVisible;
    }
    getPatternErrorMsg() {
      return msg("Please match the requested format.");
    }
    setTextareaHeight() {
      if (this.autosize) {
        this.inputRef.value.style.height = "auto";
        this.inputRef.value.style.height = `${this.inputRef.value.scrollHeight}px`;
      } else {
        this.inputRef.value.style.height = void 0;
      }
    }
    renderLabel() {
      return this.label ? x`<label part="label" class="label">${this.label}</label>` : nothingTemplate;
    }
    renderPrefix() {
      return x`<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}" class="i"></mdui-icon>` : nothingTemplate}</slot><slot name="prefix" part="prefix" class="prefix">${this.prefix}</slot>`;
    }
    renderSuffix() {
      return x`<slot name="suffix" part="suffix" class="suffix">${this.suffix}</slot>`;
    }
    renderRightIcon(hasErrorIcon) {
      return hasErrorIcon ? x`<slot name="error-icon" part="error-icon" class="right-icon">${this.errorIcon ? x`<mdui-icon name="${this.errorIcon}" class="i"></mdui-icon>` : x`<mdui-icon-error class="i"></mdui-icon-error>`}</slot>` : x`<slot name="end-icon" part="end-icon" class="end-icon right-icon">${this.endIcon ? x`<mdui-icon name="${this.endIcon}" class="i"></mdui-icon>` : nothingTemplate}</slot>`;
    }
    renderClearButton(hasClearButton) {
      return n2(hasClearButton, () => x`<slot name="clear-button" part="clear-button" class="action" @click="${this.onClear}"><mdui-button-icon tabindex="-1"><slot name="clear-icon" part="clear-icon">${this.clearIcon ? x`<mdui-icon name="${this.clearIcon}" class="i"></mdui-icon>` : x`<mdui-icon-cancel--outlined class="i"></mdui-icon-cancel--outlined>`}</slot></mdui-button-icon></slot>`);
    }
    renderTogglePasswordButton(hasTogglePasswordButton) {
      return n2(hasTogglePasswordButton, () => x`<slot name="toggle-password-button" part="toggle-password-button" class="action" @click="${this.onTogglePassword}"><mdui-button-icon tabindex="-1">${this.isPasswordVisible ? x`<slot name="show-password-icon" part="show-password-icon">${this.showPasswordIcon ? x`<mdui-icon name="${this.showPasswordIcon}" class="i"></mdui-icon>` : x`<mdui-icon-visibility-off class="i"></mdui-icon-visibility-off>`}</slot>` : x`<slot name="hide-password-icon" part="hide-password-icon">${this.hidePasswordIcon ? x`<mdui-icon name="${this.hidePasswordIcon}" class="i"></mdui-icon>` : x`<mdui-icon-visibility class="i"></mdui-icon-visibility>`}</slot>`}</mdui-button-icon></slot>`);
    }
    renderInput(hasInputSlot) {
      return x`<input ${n$1(this.inputRef)} part="input" class="input ${e2({ "hide-input": hasInputSlot })}" type="${this.type === "password" && this.isPasswordVisible ? "text" : this.type}" name="${o$5(this.name)}" .value="${l(this.value)}" placeholder="${o$5(
      // @ts-ignore
      !this.label || this.isFocusedStyle || this.hasValue ? this.placeholder : void 0
    )}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" ?required="${this.required}" minlength="${o$5(this.minlength)}" maxlength="${o$5(this.maxlength)}" min="${o$5(this.min)}" max="${o$5(this.max)}" step="${o$5(this.step)}" autocapitalize="${o$5(this.type === "password" ? "off" : this.autocapitalize)}" autocomplete="${this.autocomplete}" autocorrect="${o$5(this.type === "password" ? "off" : this.autocorrect)}" spellcheck="${o$5(this.spellcheck)}" pattern="${o$5(this.pattern)}" enterkeyhint="${o$5(this.enterkeyhint)}" inputmode="${o$5(this.inputmode)}" @change="${this.onChange}" @input="${this.onInput}" @invalid="${this.onInvalid}" @keydown="${this.onKeyDown}">`;
    }
    renderTextArea(hasInputSlot) {
      return x`<textarea ${n$1(this.inputRef)} part="input" class="input ${e2({ "hide-input": hasInputSlot })}" name="${o$5(this.name)}" .value="${l(this.value)}" placeholder="${o$5(
      // @ts-ignore
      !this.label || this.isFocusedStyle || this.hasValue ? this.placeholder : void 0
    )}" ?readonly="${this.readonly}" ?disabled="${this.disabled}" ?required="${this.required}" minlength="${o$5(this.minlength)}" maxlength="${o$5(this.maxlength)}" rows="${this.rows ?? 1}" autocapitalize="${o$5(this.autocapitalize)}" autocorrect="${o$5(this.autocorrect)}" spellcheck="${o$5(this.spellcheck)}" enterkeyhint="${o$5(this.enterkeyhint)}" inputmode="${o$5(this.inputmode)}" @change="${this.onChange}" @input="${this.onInput}" @invalid="${this.onInvalid}" @keydown="${this.onKeyDown}" @keyup="${this.onTextAreaKeyUp}"></textarea>`;
    }
    /**
     * @param hasError 是否包含错误提示
     * @param hasHelper 是否含 helper 属性或 helper slot
     */
    renderHelper(hasError, hasHelper) {
      return hasError ? x`<div part="error" class="error">${this.error || this.inputRef.value.validationMessage}</div>` : hasHelper ? x`<slot name="helper" part="helper" class="helper">${this.helper}</slot>` : (
        // 右边有 counter,需要占位
        x`<span></span>`
      );
    }
    renderCounter(hasCounter) {
      return hasCounter ? x`<div part="counter" class="counter">${this.value.length}/${this.maxlength}</div>` : nothingTemplate;
    }
  };
  TextField.styles = [componentStyle, style$5];
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "variant", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "type", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "name", void 0);
  __decorate([
    n$5()
  ], TextField.prototype, "value", void 0);
  __decorate([
    defaultValue()
  ], TextField.prototype, "defaultValue", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "label", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "placeholder", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "helper", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "helper-on-focus"
    })
  ], TextField.prototype, "helperOnFocus", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "clearable", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "clear-icon" })
  ], TextField.prototype, "clearIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "end-aligned"
    })
  ], TextField.prototype, "endAligned", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "prefix", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "suffix", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], TextField.prototype, "endIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "error-icon" })
  ], TextField.prototype, "errorIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "form", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "readonly", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "required", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "rows", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "autosize", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "min-rows" })
  ], TextField.prototype, "minRows", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "max-rows" })
  ], TextField.prototype, "maxRows", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "minlength", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "maxlength", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TextField.prototype, "counter", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "min", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "max", void 0);
  __decorate([
    n$5({ type: Number, reflect: true })
  ], TextField.prototype, "step", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "pattern", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "toggle-password"
    })
  ], TextField.prototype, "togglePassword", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "show-password-icon" })
  ], TextField.prototype, "showPasswordIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "hide-password-icon" })
  ], TextField.prototype, "hidePasswordIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "autocapitalize", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "autocorrect", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "autocomplete", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "enterkeyhint", void 0);
  __decorate([
    n$5({ type: Boolean, reflect: true, converter: booleanConverter })
  ], TextField.prototype, "spellcheck", void 0);
  __decorate([
    n$5({ reflect: true })
  ], TextField.prototype, "inputmode", void 0);
  __decorate([
    r$1()
  ], TextField.prototype, "invalid", void 0);
  __decorate([
    r$1()
  ], TextField.prototype, "invalidStyle", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "focused-style"
    })
  ], TextField.prototype, "focusedStyle", void 0);
  __decorate([
    r$1()
  ], TextField.prototype, "isPasswordVisible", void 0);
  __decorate([
    r$1()
  ], TextField.prototype, "hasValue", void 0);
  __decorate([
    r$1()
  ], TextField.prototype, "error", void 0);
  __decorate([
    watch("disabled", true)
  ], TextField.prototype, "onDisabledChange", null);
  __decorate([
    watch("value")
  ], TextField.prototype, "onValueChange", null);
  __decorate([
    watch("rows", true)
  ], TextField.prototype, "onRowsChange", null);
  __decorate([
    watch("maxRows")
  ], TextField.prototype, "onMaxRowsChange", null);
  __decorate([
    watch("minRows")
  ], TextField.prototype, "onMinRowsChange", null);
  TextField = __decorate([
    t$2("mdui-text-field")
  ], TextField);
  const style$4 = i$7`:host{display:inline-block;width:100%}.hidden-input{display:none}.text-field{cursor:pointer}.chips{display:flex;flex-wrap:wrap;margin:-.5rem -.25rem;min-height:2.5rem}:host([variant=filled][label]) .chips{margin:0 -.25rem -1rem -.25rem}.chip{margin:.25rem}mdui-menu{max-width:none}`;
  let Select = class Select2 extends FocusableMixin(MduiElement) {
    constructor() {
      super(...arguments);
      this.variant = "filled";
      this.multiple = false;
      this.name = "";
      this.value = "";
      this.defaultValue = "";
      this.clearable = false;
      this.placement = "auto";
      this.endAligned = false;
      this.readonly = false;
      this.disabled = false;
      this.required = false;
      this.invalid = false;
      this.menuRef = e$1();
      this.textFieldRef = e$1();
      this.hiddenInputRef = e$1();
      this.formController = new FormController(this);
      this.hasSlotController = new HasSlotController(this, "icon", "end-icon", "error-icon", "prefix", "suffix", "clear-button", "clear-icon", "helper");
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-menu-item"]
      });
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.hiddenInputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.hiddenInputRef.value.validationMessage;
    }
    get focusElement() {
      return this.textFieldRef.value;
    }
    get focusDisabled() {
      return this.disabled;
    }
    connectedCallback() {
      super.connectedCallback();
      this.value = this.multiple && isString(this.value) ? this.value ? [this.value] : [] : this.value;
      this.defaultValue = this.multiple ? [] : "";
      this.definedController.whenDefined().then(() => {
        this.requestUpdate();
      });
      this.updateComplete.then(() => {
        this.observeResize = observeResize(this.textFieldRef.value, () => this.resizeMenu());
      });
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback();
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.hiddenInputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.hiddenInputRef.value.reportValidity();
      if (this.invalid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        this.focus();
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.hiddenInputRef.value.setCustomValidity(message);
      this.invalid = !this.hiddenInputRef.value.checkValidity();
    }
    render() {
      var _a2;
      const hasSelection = this.multiple ? !!this.value.length : !!this.value;
      return x`${this.multiple ? x`<select ${n$1(this.hiddenInputRef)} class="hidden-input" name="${o$5(this.name)}" value="${o$5(this.value)}" .required="${this.required}" .disabled="${this.disabled}" multiple="multiple" tabindex="-1">${o(this.value, (value) => x`<option selected="selected" value="${value}"></option>`)}</select>` : x`<input ${n$1(this.hiddenInputRef)} type="radio" class="hidden-input" name="${o$5(this.name)}" value="${o$5(this.value)}" .required="${this.required}" .disabled="${this.disabled}" .checked="${hasSelection}" tabindex="-1">`}<mdui-dropdown .stayOpenOnClick="${this.multiple}" .disabled="${this.readonly || this.disabled}" .placement="${this.placement === "top" ? "top-start" : this.placement === "bottom" ? "bottom-start" : "auto"}" @open="${this.onDropdownOpen}" @close="${this.onDropdownClose}"><mdui-text-field ${n$1(this.textFieldRef)} slot="trigger" part="text-field" class="text-field" exportparts="${[
      "container",
      "icon",
      "end-icon",
      "error-icon",
      "prefix",
      "suffix",
      "label",
      "input",
      "clear-button",
      "clear-icon",
      "supporting",
      "helper",
      "error"
    ].map((v2) => `${v2}:text-field__${v2}`).join(",")}" readonly="readonly" .readonlyButClearable="${true}" .variant="${this.variant}" .name="${this.name}" .value="${this.multiple ? this.value.length ? " " : "" : this.getMenuItemLabelByValue(this.value)}" .label="${this.label}" .placeholder="${this.placeholder}" .helper="${this.helper}" .error="${(_a2 = this.hiddenInputRef.value) == null ? void 0 : _a2.validationMessage}" .clearable="${this.clearable}" .clearIcon="${this.clearIcon}" .endAligned="${this.endAligned}" .prefix="${this.prefix}" .suffix="${this.suffix}" .icon="${this.icon}" .endIcon="${this.endIcon}" .errorIcon="${this.errorIcon}" .form="${this.form}" .disabled="${this.disabled}" .required="${this.required}" .invalidStyle="${this.invalid}" @clear="${this.onClear}" @change="${(e3) => e3.stopPropagation()}" @keydown="${this.onTextFieldKeyDown}">${o([
      "icon",
      "end-icon",
      "error-icon",
      "prefix",
      "suffix",
      "clear-button",
      "clear-icon",
      "helper"
    ], (slotName) => this.hasSlotController.test(slotName) ? x`<slot name="${slotName}" slot="${slotName}"></slot>` : E)} ${n2(this.multiple && this.value.length, () => x`<div slot="input" class="chips" part="chips">${o(this.value, (valueItem) => x`<mdui-chip class="chip" part="chip" exportparts="${["button", "label", "delete-icon"].map((v2) => `${v2}:chip__${v2}`).join(",")}" variant="input" deletable tabindex="-1" @delete="${() => this.onDeleteOneValue(valueItem)}">${this.getMenuItemLabelByValue(valueItem)}</mdui-chip>`)}</div>`)}</mdui-text-field><mdui-menu ${n$1(this.menuRef)} part="menu" .selects="${this.multiple ? "multiple" : "single"}" .value="${this.value}" @change="${this.onValueChange}"><slot></slot></mdui-menu></mdui-dropdown>`;
    }
    getMenuItemLabelByValue(valueItem) {
      var _a2, _b;
      if (!this.menuItems.length) {
        return valueItem;
      }
      return ((_b = (_a2 = this.menuItems.find((item) => item.value === valueItem)) == null ? void 0 : _a2.textContent) == null ? void 0 : _b.trim()) || valueItem;
    }
    resizeMenu() {
      this.menuRef.value.style.width = `${this.textFieldRef.value.clientWidth}px`;
    }
    async onDropdownOpen() {
      this.textFieldRef.value.focusedStyle = true;
    }
    onDropdownClose() {
      var _a2;
      this.textFieldRef.value.focusedStyle = false;
      if (this.contains(document.activeElement) || this.contains(((_a2 = document.activeElement) == null ? void 0 : _a2.assignedSlot) ?? null)) {
        setTimeout(() => {
          this.focus();
        });
      }
    }
    async onValueChange(e3) {
      var _a2;
      const menu = e3.target;
      this.value = this.multiple ? menu.value.map((v2) => v2 ?? "") : menu.value ?? "";
      await this.updateComplete;
      const form = this.formController.getForm();
      if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
        this.invalid = false;
        formResets.get(form).delete(this);
      } else {
        this.invalid = !this.hiddenInputRef.value.checkValidity();
      }
    }
    /**
     * multiple 为 true 时,点 chip 的删除按钮,删除其中一个值
     */
    onDeleteOneValue(valueItem) {
      const value = [...this.value];
      if (value.includes(valueItem)) {
        value.splice(value.indexOf(valueItem), 1);
      }
      this.value = value;
    }
    onClear() {
      this.value = this.multiple ? [] : "";
    }
    /**
     * 焦点在 text-field 上时,按下回车键,打开下拉选项
     */
    onTextFieldKeyDown(event) {
      if (event.key === "Enter") {
        event.preventDefault();
        this.textFieldRef.value.click();
      }
    }
  };
  Select.styles = [componentStyle, style$4];
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "variant", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Select.prototype, "multiple", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "name", void 0);
  __decorate([
    n$5()
  ], Select.prototype, "value", void 0);
  __decorate([
    defaultValue()
  ], Select.prototype, "defaultValue", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "label", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "placeholder", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "helper", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Select.prototype, "clearable", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "clear-icon" })
  ], Select.prototype, "clearIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "placement", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "end-aligned"
    })
  ], Select.prototype, "endAligned", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "prefix", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "suffix", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "icon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "end-icon" })
  ], Select.prototype, "endIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "error-icon" })
  ], Select.prototype, "errorIcon", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Select.prototype, "form", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Select.prototype, "readonly", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Select.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Select.prototype, "required", void 0);
  __decorate([
    r$1()
  ], Select.prototype, "invalid", void 0);
  __decorate([
    o$6({ flatten: true, selector: "mdui-menu-item" })
  ], Select.prototype, "menuItems", void 0);
  Select = __decorate([
    t$2("mdui-select")
  ], Select);
  const style$3 = i$7`.track-active{left:-.125rem;border-radius:var(--mdui-shape-corner-full) 0 0 var(--mdui-shape-corner-full)}`;
  let Slider = class Slider2 extends SliderBase {
    constructor() {
      super(...arguments);
      this.value = 0;
      this.defaultValue = 0;
      this.rippleRef = e$1();
      this.handleRef = e$1();
      this.formController = new FormController(this);
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    async onValueChange() {
      var _a2;
      this.value = this.fixValue(this.value);
      const form = this.formController.getForm();
      if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
        this.invalid = false;
        formResets.get(form).delete(this);
      } else {
        await this.updateComplete;
        this.invalid = !this.inputRef.value.checkValidity();
      }
      this.updateStyle();
    }
    connectedCallback() {
      super.connectedCallback();
      this.value = this.fixValue(this.value);
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      const onTouchStart = () => {
        if (!this.disabled) {
          this.labelVisible = true;
        }
      };
      const onTouchEnd = () => {
        if (!this.disabled) {
          this.labelVisible = false;
        }
      };
      this.addEventListener("touchstart", onTouchStart);
      this.addEventListener("mousedown", onTouchStart);
      this.addEventListener("touchend", onTouchEnd);
      this.addEventListener("mouseup", onTouchEnd);
      this.updateStyle();
    }
    /**
     * <input /> 用于提供拖拽操作
     * <input class="invalid" /> 用于提供 html5 自带的表单错误提示
     */
    render() {
      return x`<label class="${e2({ invalid: this.invalid })}"><input ${n$1(this.inputRef)} type="range" step="${this.step}" min="${this.min}" max="${this.max}" ?disabled="${this.disabled}" .value="${l(this.value.toString())}" @input="${this.onInput}" @change="${this.onChange}"><div part="track-inactive" class="track-inactive"></div><div ${n$1(this.trackActiveRef)} part="track-active" class="track-active"></div><div ${n$1(this.handleRef)} part="handle" class="handle"><div class="elevation"></div><mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple>${this.renderLabel(this.value)}</div>${n2(this.tickmarks, () => o(this.getCandidateValues(), (value) => x`<div part="tickmark" class="tickmark ${e2({ active: value < this.value })}" style="${o$4({
      left: `${(value - this.min) / this.max * 100}%`,
      display: value === this.value ? "none" : "block"
    })}"></div>`))}</label>`;
    }
    updateStyle() {
      const percent = (this.value - this.min) / (this.max - this.min) * 100;
      this.trackActiveRef.value.style.width = `${percent}%`;
      this.handleRef.value.style.left = `${percent}%`;
    }
    onInput() {
      this.value = parseFloat(this.inputRef.value.value);
      this.updateStyle();
    }
  };
  Slider.styles = [SliderBase.styles, style$3];
  __decorate([
    n$5({ type: Number })
  ], Slider.prototype, "value", void 0);
  __decorate([
    defaultValue()
  ], Slider.prototype, "defaultValue", void 0);
  __decorate([
    watch("value", true)
  ], Slider.prototype, "onValueChange", null);
  Slider = __decorate([
    t$2("mdui-slider")
  ], Slider);
  const style$2 = i$7`:host{--shape-corner:var(--mdui-shape-corner-extra-small);--z-index:2400;position:fixed;z-index:var(--z-index);display:none;align-items:center;flex-wrap:wrap;border-radius:var(--shape-corner);transform:scaleY(0);transition:transform 0s var(--mdui-motion-easing-linear) var(--mdui-motion-duration-short4);min-width:20rem;max-width:36rem;padding:.25rem 0;box-shadow:var(--mdui-elevation-level3);background-color:rgb(var(--mdui-color-inverse-surface));color:rgb(var(--mdui-color-inverse-on-surface));font-size:var(--mdui-typescale-body-medium-size);font-weight:var(--mdui-typescale-body-medium-weight);letter-spacing:var(--mdui-typescale-body-medium-tracking);line-height:var(--mdui-typescale-body-medium-line-height)}:host([placement^=top]){transform-origin:top}:host([placement^=bottom]){transform-origin:bottom}:host([placement=bottom-start]:not([mobile])),:host([placement=top-start]:not([mobile])){left:1rem}:host([placement=bottom-end]:not([mobile])),:host([placement=top-end]:not([mobile])){right:1rem}:host([placement=bottom]:not([mobile])),:host([placement=top]:not([mobile])){left:50%;transform:scaleY(0) translateX(-50%)}:host([mobile]){min-width:0;left:1rem;right:1rem}:host([open]){transform:scaleY(1);transition:top var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard),bottom var(--mdui-motion-duration-short4) var(--mdui-motion-easing-standard),transform var(--mdui-motion-duration-medium4) var(--mdui-motion-easing-emphasized-decelerate)}:host([placement=bottom][open]:not([mobile])),:host([placement=top][open]:not([mobile])){transform:scaleY(1) translateX(-50%)}.message{display:block;margin:.625rem 1rem}:host([message-line='1']) .message{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:host([message-line='2']) .message{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:2}.action-group{display:flex;align-items:center;margin-left:auto;padding-right:.5rem}.action,.close-button{display:inline-flex;align-items:center;justify-content:center}.action{color:rgb(var(--mdui-color-inverse-primary));font-size:var(--mdui-typescale-label-large-size);font-weight:var(--mdui-typescale-label-large-weight);letter-spacing:var(--mdui-typescale-label-large-tracking)}.action mdui-button,::slotted(mdui-button[slot=action][variant=outlined]),::slotted(mdui-button[slot=action][variant=text]){color:inherit;font-size:inherit;font-weight:inherit;letter-spacing:inherit;--mdui-comp-ripple-state-layer-color:var(--mdui-color-inverse-primary)}.action mdui-button::part(button){padding:0 .5rem}.close-button{margin:0 -.25rem 0 .25rem;font-size:1.5rem;color:rgb(var(--mdui-color-inverse-on-surface))}.close-button mdui-button-icon,::slotted(mdui-button-icon[slot=close-button][variant=outlined]),::slotted(mdui-button-icon[slot=close-button][variant=standard]){font-size:inherit;color:inherit;--mdui-comp-ripple-state-layer-color:var(--mdui-color-inverse-on-surface)}.close-button .i,::slotted([slot=close-icon]){font-size:inherit}`;
  const stacks = [];
  let reordering = false;
  let Snackbar = class Snackbar2 extends MduiElement {
    constructor() {
      super();
      this.open = false;
      this.placement = "bottom";
      this.actionLoading = false;
      this.closeable = false;
      this.autoCloseDelay = 5e3;
      this.closeOnOutsideClick = false;
      this.mobile = false;
      this.onDocumentClick = this.onDocumentClick.bind(this);
    }
    async onOpenChange() {
      const easingLinear = getEasing(this, "linear");
      const children = Array.from(this.renderRoot.querySelectorAll(".message, .action-group"));
      if (this.open) {
        const hasUpdated = this.hasUpdated;
        if (!hasUpdated) {
          await this.updateComplete;
        }
        if (hasUpdated) {
          const eventProceeded = this.emit("open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        window.clearTimeout(this.closeTimeout);
        if (this.autoCloseDelay) {
          this.closeTimeout = window.setTimeout(() => {
            this.open = false;
          }, this.autoCloseDelay);
        }
        this.style.display = "flex";
        await Promise.all([
          stopAnimations(this),
          ...children.map((child) => stopAnimations(child))
        ]);
        stacks.push({
          height: this.clientHeight,
          snackbar: this
        });
        await this.reorderStack(this);
        const duration = getDuration(this, "medium4");
        await Promise.all([
          animateTo(this, [{ opacity: 0 }, { opacity: 1, offset: 0.5 }, { opacity: 1 }], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear,
            fill: "forwards"
          }),
          ...children.map((child) => animateTo(child, [
            { opacity: 0 },
            { opacity: 0, offset: 0.2 },
            { opacity: 1, offset: 0.8 },
            { opacity: 1 }
          ], {
            duration: hasUpdated ? duration : 0,
            easing: easingLinear
          }))
        ]);
        if (hasUpdated) {
          this.emit("opened");
        }
        return;
      }
      if (!this.open && this.hasUpdated) {
        const eventProceeded = this.emit("close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        window.clearTimeout(this.closeTimeout);
        await Promise.all([
          stopAnimations(this),
          ...children.map((child) => stopAnimations(child))
        ]);
        const duration = getDuration(this, "short4");
        await Promise.all([
          animateTo(this, [{ opacity: 1 }, { opacity: 0 }], {
            duration,
            easing: easingLinear,
            fill: "forwards"
          }),
          ...children.map((child) => animateTo(child, [{ opacity: 1 }, { opacity: 0, offset: 0.75 }, { opacity: 0 }], {
            duration,
            easing: easingLinear
          }))
        ]);
        this.style.display = "none";
        this.emit("closed");
        const stackIndex = stacks.findIndex((stack2) => stack2.snackbar === this);
        stacks.splice(stackIndex, 1);
        if (stacks[stackIndex]) {
          await this.reorderStack(stacks[stackIndex].snackbar);
        }
        return;
      }
    }
    /**
     * 这两个属性变更时,需要重新排序该组件后面的 snackbar
     */
    async onStackChange() {
      await this.reorderStack(this);
    }
    connectedCallback() {
      super.connectedCallback();
      document.addEventListener("pointerdown", this.onDocumentClick);
      this.mobile = breakpoint().down("sm");
      this.observeResize = observeResize(document.documentElement, async () => {
        const mobile = breakpoint().down("sm");
        if (this.mobile !== mobile) {
          this.mobile = mobile;
          if (!reordering) {
            reordering = true;
            await this.reorderStack();
            reordering = false;
          }
        }
      });
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback();
      document.removeEventListener("pointerdown", this.onDocumentClick);
      window.clearTimeout(this.closeTimeout);
      if (this.open) {
        this.open = false;
      }
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
    }
    render() {
      return x`<slot part="message" class="message"></slot><div class="action-group"><slot name="action" part="action" class="action" @click="${this.onActionClick}">${this.action ? x`<mdui-button variant="text" loading="${this.actionLoading}">${this.action}</mdui-button>` : nothingTemplate}</slot>${n2(this.closeable, () => x`<slot name="close-button" part="close-button" class="close-button" @click="${this.onCloseClick}"><mdui-button-icon><slot name="close-icon" part="close-icon">${this.closeIcon ? x`<mdui-icon name="${this.closeIcon}" class="i"></mdui-icon>` : x`<mdui-icon-clear class="i"></mdui-icon-clear>`}</slot></mdui-button-icon></slot>`)}</div>`;
    }
    /**
     * 重新排序 snackbar 堆叠
     * @param startSnackbar 从哪个 snackbar 开始重新排列,默认从第一个开始
     * @private
     */
    async reorderStack(startSnackbar) {
      const stackIndex = startSnackbar ? stacks.findIndex((stack2) => stack2.snackbar === startSnackbar) : 0;
      for (let i3 = stackIndex; i3 < stacks.length; i3++) {
        const stack2 = stacks[i3];
        const snackbar2 = stack2.snackbar;
        if (this.mobile) {
          ["top", "bottom"].forEach((placement) => {
            if (snackbar2.placement.startsWith(placement)) {
              const prevStacks = stacks.filter((stack3, index) => {
                return index < i3 && stack3.snackbar.placement.startsWith(placement);
              });
              const prevHeight = prevStacks.reduce((prev, current) => prev + current.height, 0);
              snackbar2.style[placement] = `calc(${prevHeight}px + ${prevStacks.length + 1}rem)`;
              snackbar2.style[placement === "top" ? "bottom" : "top"] = "auto";
            }
          });
        } else {
          [
            "top",
            "top-start",
            "top-end",
            "bottom",
            "bottom-start",
            "bottom-end"
          ].forEach((placement) => {
            if (snackbar2.placement === placement) {
              const prevStacks = stacks.filter((stack3, index) => {
                return index < i3 && stack3.snackbar.placement === placement;
              });
              const prevHeight = prevStacks.reduce((prev, current) => prev + current.height, 0);
              snackbar2.style[placement.startsWith("top") ? "top" : "bottom"] = `calc(${prevHeight}px + ${prevStacks.length + 1}rem)`;
              snackbar2.style[placement.startsWith("top") ? "bottom" : "top"] = "auto";
            }
          });
        }
      }
    }
    /**
     * 在 document 上点击时,根据条件判断是否要关闭 snackbar
     */
    onDocumentClick(e3) {
      if (!this.open || !this.closeOnOutsideClick) {
        return;
      }
      const target = e3.target;
      if (!this.contains(target) && this !== target) {
        this.open = false;
      }
    }
    onActionClick(event) {
      event.stopPropagation();
      this.emit("action-click");
    }
    onCloseClick() {
      this.open = false;
    }
  };
  Snackbar.styles = [componentStyle, style$2];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Snackbar.prototype, "open", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Snackbar.prototype, "placement", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "action" })
  ], Snackbar.prototype, "action", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "action-loading"
    })
  ], Snackbar.prototype, "actionLoading", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Snackbar.prototype, "closeable", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "close-icon" })
  ], Snackbar.prototype, "closeIcon", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "message-line" })
    // eslint-disable-next-line prettier/prettier
  ], Snackbar.prototype, "messageLine", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "auto-close-delay" })
  ], Snackbar.prototype, "autoCloseDelay", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      attribute: "close-on-outside-click",
      converter: booleanConverter
    })
  ], Snackbar.prototype, "closeOnOutsideClick", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Snackbar.prototype, "mobile", void 0);
  __decorate([
    watch("open")
  ], Snackbar.prototype, "onOpenChange", null);
  __decorate([
    watch("placement", true),
    watch("messageLine", true)
  ], Snackbar.prototype, "onStackChange", null);
  Snackbar = __decorate([
    t$2("mdui-snackbar")
  ], Snackbar);
  const style$1 = i$7`:host{--shape-corner:var(--mdui-shape-corner-full);--shape-corner-thumb:var(--mdui-shape-corner-full);position:relative;display:inline-block;cursor:pointer;-webkit-tap-highlight-color:transparent;height:2.5rem}:host([disabled]:not([disabled=false i])){cursor:default;pointer-events:none}label{display:inline-flex;align-items:center;width:100%;height:100%;white-space:nowrap;cursor:inherit;-webkit-user-select:none;user-select:none;touch-action:manipulation;zoom:1;-webkit-user-drag:none}.track{position:relative;display:flex;align-items:center;border-radius:var(--shape-corner);transition-property:background-color,border-width;transition-duration:var(--mdui-motion-duration-short4);transition-timing-function:var(--mdui-motion-easing-standard);height:2rem;width:3.25rem;border:.125rem solid rgb(var(--mdui-color-outline));background-color:rgb(var(--mdui-color-surface-container-highest))}:host([checked]:not([checked=false i])) .track{background-color:rgb(var(--mdui-color-primary));border-width:0}.invalid .track{background-color:rgb(var(--mdui-color-error-container));border-color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])) .track{background-color:rgba(var(--mdui-color-surface-container-highest),.12);border-color:rgba(var(--mdui-color-on-surface),.12)}:host([disabled][checked]:not([disabled=false i],[checked=false i])) .track{background-color:rgba(var(--mdui-color-on-surface),.12)}input{position:absolute;padding:0;opacity:0;pointer-events:none;width:1.25rem;height:1.25rem;margin:0 0 0 .625rem}mdui-ripple{border-radius:50%;transition-property:left,top;transition-duration:var(--mdui-motion-duration-short4);transition-timing-function:var(--mdui-motion-easing-standard);width:2.5rem;height:2.5rem}.thumb{position:absolute;display:flex;align-items:center;justify-content:center;border-radius:var(--shape-corner-thumb);transition-property:width,height,left,background-color;transition-duration:var(--mdui-motion-duration-short4);transition-timing-function:var(--mdui-motion-easing-standard);height:1rem;width:1rem;left:.375rem;background-color:rgb(var(--mdui-color-outline));--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}.thumb mdui-ripple{left:-.75rem;top:-.75rem}.has-unchecked-icon .thumb{height:1.5rem;width:1.5rem;left:.125rem}.has-unchecked-icon .thumb mdui-ripple{left:-.5rem;top:-.5rem}:host([focus-visible]) .thumb,:host([hover]) .thumb,:host([pressed]) .thumb{background-color:rgb(var(--mdui-color-on-surface-variant))}:host([checked]:not([checked=false i])) .thumb{height:1.5rem;width:1.5rem;left:1.5rem;background-color:rgb(var(--mdui-color-on-primary));--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}:host([checked]:not([checked=false i])) .thumb mdui-ripple{left:-.5rem;top:-.5rem}:host([pressed]) .thumb{height:1.75rem;width:1.75rem;left:0}:host([pressed]) .thumb mdui-ripple{left:-.375rem;top:-.375rem}:host([pressed][checked]:not([checked=false i])) .thumb{left:1.375rem}:host([focus-visible][checked]:not([checked=false i])) .thumb,:host([hover][checked]:not([checked=false i])) .thumb,:host([pressed][checked]:not([checked=false i])) .thumb{background-color:rgb(var(--mdui-color-primary-container))}.invalid .thumb{background-color:rgb(var(--mdui-color-error));--mdui-comp-ripple-state-layer-color:var(--mdui-color-error)}:host([focus-visible]) .invalid .thumb,:host([hover]) .invalid .thumb,:host([pressed]) .invalid .thumb{background-color:rgb(var(--mdui-color-error))}:host([disabled]:not([disabled=false i])) .thumb{background-color:rgba(var(--mdui-color-on-surface),.38)}:host([disabled][checked]:not([disabled=false i],[checked=false i])) .thumb{background-color:rgb(var(--mdui-color-surface))}.checked-icon,.unchecked-icon{display:flex;position:absolute;transition-property:opacity,transform;font-size:1rem}.unchecked-icon{opacity:1;transform:scale(1);transition-delay:var(--mdui-motion-duration-short1);transition-duration:var(--mdui-motion-duration-short3);transition-timing-function:var(--mdui-motion-easing-linear);color:rgb(var(--mdui-color-surface-container-highest))}:host([checked]:not([checked=false i])) .unchecked-icon{opacity:0;transform:scale(.92);transition-delay:0s;transition-duration:var(--mdui-motion-duration-short1)}:host([disabled]:not([disabled=false i])) .unchecked-icon{color:rgba(var(--mdui-color-surface-container-highest),.38)}.checked-icon{opacity:0;transform:scale(.92);transition-delay:0s;transition-duration:var(--mdui-motion-duration-short1);transition-timing-function:var(--mdui-motion-easing-linear);color:rgb(var(--mdui-color-on-primary-container))}:host([checked]:not([checked=false i])) .checked-icon{opacity:1;transform:scale(1);transition-delay:var(--mdui-motion-duration-short1);transition-duration:var(--mdui-motion-duration-short3)}.invalid .checked-icon{color:rgb(var(--mdui-color-error-container))}:host([disabled]:not([disabled=false i])) .checked-icon{color:rgba(var(--mdui-color-on-surface),.38)}.checked-icon .i,.unchecked-icon .i,::slotted([slot=checked-icon]),::slotted([slot=unchecked-icon]){font-size:inherit;color:inherit}`;
  let Switch = class Switch2 extends RippleMixin(FocusableMixin(MduiElement)) {
    constructor() {
      super(...arguments);
      this.disabled = false;
      this.checked = false;
      this.defaultChecked = false;
      this.required = false;
      this.name = "";
      this.value = "on";
      this.invalid = false;
      this.rippleRef = e$1();
      this.inputRef = e$1();
      this.formController = new FormController(this, {
        value: (control) => control.checked ? control.value : void 0,
        defaultValue: (control) => control.defaultChecked,
        setValue: (control, checked) => control.checked = checked
      });
      this.hasSlotController = new HasSlotController(this, "unchecked-icon");
    }
    /**
     * 表单验证状态对象,具体参见 [`ValidityState`](https://developer.mozilla.org/zh-CN/docs/Web/API/ValidityState)
     */
    get validity() {
      return this.inputRef.value.validity;
    }
    /**
     * 如果表单验证未通过,此属性将包含提示信息。如果验证通过,此属性将为空字符串
     */
    get validationMessage() {
      return this.inputRef.value.validationMessage;
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return this.disabled;
    }
    get focusElement() {
      return this.inputRef.value;
    }
    get focusDisabled() {
      return this.disabled;
    }
    async onDisabledChange() {
      await this.updateComplete;
      this.invalid = !this.inputRef.value.checkValidity();
    }
    async onCheckedChange() {
      var _a2;
      await this.updateComplete;
      const form = this.formController.getForm();
      if (form && ((_a2 = formResets.get(form)) == null ? void 0 : _a2.has(this))) {
        this.invalid = false;
        formResets.get(form).delete(this);
      } else {
        this.invalid = !this.inputRef.value.checkValidity();
      }
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`
     */
    checkValidity() {
      const valid = this.inputRef.value.checkValidity();
      if (!valid) {
        this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
      }
      return valid;
    }
    /**
     * 检查表单字段是否通过验证。如果未通过,返回 `false` 并触发 `invalid` 事件;如果通过,返回 `true`。
     *
     * 如果验证未通过,还会在组件上显示验证失败的提示。
     */
    reportValidity() {
      this.invalid = !this.inputRef.value.reportValidity();
      if (this.invalid) {
        const eventProceeded = this.emit("invalid", {
          bubbles: false,
          cancelable: true,
          composed: false
        });
        if (!eventProceeded) {
          this.blur();
          this.focus();
        }
      }
      return !this.invalid;
    }
    /**
     * 设置自定义的错误提示文本。只要这个文本不为空,就表示字段未通过验证
     *
     * @param message 自定义的错误提示文本
     */
    setCustomValidity(message) {
      this.inputRef.value.setCustomValidity(message);
      this.invalid = !this.inputRef.value.checkValidity();
    }
    render() {
      return x`<label class="${e2({
      invalid: this.invalid,
      "has-unchecked-icon": this.uncheckedIcon || this.hasSlotController.test("unchecked-icon")
    })}"><input ${n$1(this.inputRef)} type="checkbox" name="${o$5(this.name)}" value="${o$5(this.value)}" .disabled="${this.disabled}" .checked="${l(this.checked)}" .required="${this.required}" @change="${this.onChange}"><div part="track" class="track"><div part="thumb" class="thumb"><mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple><slot name="checked-icon" part="checked-icon" class="checked-icon">${this.checkedIcon ? x`<mdui-icon name="${this.checkedIcon}" class="i"></mdui-icon>` : this.checkedIcon === "" ? nothingTemplate : x`<mdui-icon-check class="i"></mdui-icon-check>`}</slot><slot name="unchecked-icon" part="unchecked-icon" class="unchecked-icon">${this.uncheckedIcon ? x`<mdui-icon name="${this.uncheckedIcon}" class="i"></mdui-icon>` : nothingTemplate}</slot></div></div></label>`;
    }
    /**
     * input[type="checkbox"] 的 change 事件无法冒泡越过 shadow dom
     */
    onChange() {
      this.checked = this.inputRef.value.checked;
      this.emit("change");
    }
  };
  Switch.styles = [componentStyle, style$1];
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Switch.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Switch.prototype, "checked", void 0);
  __decorate([
    defaultValue("checked")
  ], Switch.prototype, "defaultChecked", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "unchecked-icon" })
  ], Switch.prototype, "uncheckedIcon", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "checked-icon" })
  ], Switch.prototype, "checkedIcon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Switch.prototype, "required", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Switch.prototype, "form", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Switch.prototype, "name", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Switch.prototype, "value", void 0);
  __decorate([
    r$1()
  ], Switch.prototype, "invalid", void 0);
  __decorate([
    watch("disabled", true),
    watch("required", true)
  ], Switch.prototype, "onDisabledChange", null);
  __decorate([
    watch("checked", true)
  ], Switch.prototype, "onCheckedChange", null);
  Switch = __decorate([
    t$2("mdui-switch")
  ], Switch);
  const tabStyle = i$7`:host{position:relative;--mdui-comp-ripple-state-layer-color:var(--mdui-color-on-surface)}:host([active]){--mdui-comp-ripple-state-layer-color:var(--mdui-color-primary)}.container{display:flex;justify-content:center;align-items:center;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;height:100%}.preset{flex-direction:column;min-height:3rem;padding:.625rem 1rem}:host([inline]:not([inline=false i])) .preset{flex-direction:row}.icon-container,.label-container{position:relative;display:flex;align-items:center;justify-content:center}.icon-container ::slotted([slot=badge]){position:absolute;transform:translate(50%,-50%)}.icon-container ::slotted([slot=badge][variant=small]){transform:translate(.5625rem,-.5625rem)}.label-container ::slotted([slot=badge]){position:absolute;left:100%;bottom:100%;transform:translate(-.75rem,.625rem)}.label-container ::slotted([slot=badge][variant=small]){transform:translate(-.375rem,.375rem)}.icon,.label{display:flex;color:rgb(var(--mdui-color-on-surface-variant))}:host([focused]) .icon,:host([focused]) .label,:host([hover]) .icon,:host([hover]) .label,:host([pressed]) .icon,:host([pressed]) .label{color:rgb(var(--mdui-color-on-surface))}:host([active]) .icon,:host([active]) .label{color:rgb(var(--mdui-color-primary))}:host([active]) .variant-secondary .icon,:host([active]) .variant-secondary .label{color:rgb(var(--mdui-color-on-surface))}.icon{font-size:1.5rem}.label{font-size:var(--mdui-typescale-title-small-size);font-weight:var(--mdui-typescale-title-small-weight);letter-spacing:var(--mdui-typescale-title-small-tracking);line-height:var(--mdui-typescale-title-small-line-height)}.icon mdui-icon,::slotted([slot=icon]){font-size:inherit;color:inherit}`;
  let Tab = class Tab2 extends RippleMixin(FocusableMixin(MduiElement)) {
    constructor() {
      super(...arguments);
      this.inline = false;
      this.active = false;
      this.variant = "primary";
      this.key = uniqueId();
      this.rippleRef = e$1();
      this.hasSlotController = new HasSlotController(this, "icon", "custom");
    }
    get rippleElement() {
      return this.rippleRef.value;
    }
    get rippleDisabled() {
      return false;
    }
    get focusElement() {
      return this;
    }
    get focusDisabled() {
      return false;
    }
    render() {
      const hasIcon = this.icon || this.hasSlotController.test("icon");
      const hasCustomSlot = this.hasSlotController.test("custom");
      const renderBadge = () => x`<slot name="badge"></slot>`;
      return x`<mdui-ripple ${n$1(this.rippleRef)} .noRipple="${this.noRipple}"></mdui-ripple><div part="container" class="${e2({
      container: true,
      preset: !hasCustomSlot,
      "variant-secondary": this.variant === "secondary"
    })}"><slot name="custom"><div class="icon-container">${n2(hasIcon || this.icon, renderBadge)}<slot name="icon" part="icon" class="icon">${this.icon ? x`<mdui-icon name="${this.icon}"></mdui-icon>` : nothingTemplate}</slot></div><div class="label-container">${n2(!hasIcon, renderBadge)}<slot part="label" class="label"></slot></div></slot></div>`;
    }
  };
  Tab.styles = [componentStyle, tabStyle];
  __decorate([
    n$5({ reflect: true })
  ], Tab.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tab.prototype, "icon", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Tab.prototype, "inline", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Tab.prototype, "active", void 0);
  __decorate([
    r$1()
  ], Tab.prototype, "variant", void 0);
  Tab = __decorate([
    t$2("mdui-tab")
  ], Tab);
  const tabPanelStyle = i$7`:host{display:block;overflow-y:auto;flex:1 1 auto}:host(:not([active])){display:none}`;
  let TabPanel = class TabPanel2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.active = false;
    }
    render() {
      return x`<slot></slot>`;
    }
  };
  TabPanel.styles = [
    componentStyle,
    tabPanelStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], TabPanel.prototype, "value", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TabPanel.prototype, "active", void 0);
  TabPanel = __decorate([
    t$2("mdui-tab-panel")
  ], TabPanel);
  const tabsStyle = i$7`:host{position:relative;display:flex}:host([placement^=top]){flex-direction:column}:host([placement^=bottom]){flex-direction:column-reverse}:host([placement^=left]){flex-direction:row}:host([placement^=right]){flex-direction:row-reverse}.container{position:relative;display:flex;flex:0 0 auto;overflow-x:auto;background-color:rgb(var(--mdui-color-surface))}:host([placement^=bottom]) .container,:host([placement^=top]) .container{flex-direction:row}:host([placement^=left]) .container,:host([placement^=right]) .container{flex-direction:column}:host([placement$='-start']) .container{justify-content:flex-start}:host([placement=bottom]) .container,:host([placement=left]) .container,:host([placement=right]) .container,:host([placement=top]) .container{justify-content:center}:host([placement$='-end']) .container{justify-content:flex-end}.container::after{content:' ';position:absolute;background-color:rgb(var(--mdui-color-surface-variant))}:host([placement^=bottom]) .container::after,:host([placement^=top]) .container::after{left:0;width:100%;height:.0625rem}:host([placement^=top]) .container::after{bottom:0}:host([placement^=bottom]) .container::after{top:0}:host([placement^=left]) .container::after,:host([placement^=right]) .container::after{top:0;height:100%;width:.0625rem}:host([placement^=left]) .container::after{right:0}:host([placement^=right]) .container::after{left:0}.indicator{position:absolute;z-index:1;background-color:rgb(var(--mdui-color-primary))}.container:not(.initial) .indicator{transition-duration:var(--mdui-motion-duration-medium2);transition-timing-function:var(--mdui-motion-easing-standard-decelerate)}:host([placement^=bottom]) .indicator,:host([placement^=top]) .indicator{transition-property:transform,left,width}:host([placement^=left]) .indicator,:host([placement^=right]) .indicator{transition-property:transform,top,height}:host([placement^=top]) .indicator{bottom:0}:host([placement^=bottom]) .indicator{top:0}:host([placement^=left]) .indicator{right:0}:host([placement^=right]) .indicator{left:0}:host([placement^=bottom][variant=primary]) .indicator,:host([placement^=top][variant=primary]) .indicator{height:.1875rem}:host([placement^=bottom][variant=secondary]) .indicator,:host([placement^=top][variant=secondary]) .indicator{height:.125rem}:host([placement^=left][variant=primary]) .indicator,:host([placement^=right][variant=primary]) .indicator{width:.1875rem}:host([placement^=left][variant=secondary]) .indicator,:host([placement^=right][variant=secondary]) .indicator{width:.125rem}:host([placement^=top][variant=primary]) .indicator{border-top-left-radius:.1875rem;border-top-right-radius:.1875rem}:host([placement^=bottom][variant=primary]) .indicator{border-bottom-right-radius:.1875rem;border-bottom-left-radius:.1875rem}:host([placement^=left][variant=primary]) .indicator{border-top-left-radius:.1875rem;border-bottom-left-radius:.1875rem}:host([placement^=right][variant=primary]) .indicator{border-top-right-radius:.1875rem;border-bottom-right-radius:.1875rem}:host([full-width]:not([full-width=false i])) ::slotted(mdui-tab){flex:1}`;
  let Tabs = class Tabs2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.variant = "primary";
      this.placement = "top-start";
      this.fullWidth = false;
      this.activeKey = 0;
      this.isInitial = true;
      this.containerRef = e$1();
      this.indicatorRef = e$1();
      this.definedController = new DefinedController(this, {
        relatedElements: ["mdui-tab", "mdui-tab-panel"]
      });
    }
    async onActiveKeyChange() {
      var _a2;
      await this.definedController.whenDefined();
      this.value = (_a2 = this.tabs.find((tab) => tab.key === this.activeKey)) == null ? void 0 : _a2.value;
      this.updateActive();
      if (!this.isInitial) {
        this.emit("change");
      }
    }
    async onValueChange() {
      this.isInitial = !this.hasUpdated;
      await this.definedController.whenDefined();
      const tab = this.tabs.find((tab2) => tab2.value === this.value);
      this.activeKey = (tab == null ? void 0 : tab.key) ?? 0;
    }
    async onIndicatorChange() {
      await this.updateComplete;
      this.updateIndicator();
    }
    connectedCallback() {
      super.connectedCallback();
      this.updateComplete.then(() => {
        this.observeResize = observeResize(this.containerRef.value, () => this.updateIndicator());
      });
    }
    disconnectedCallback() {
      var _a2;
      super.disconnectedCallback();
      (_a2 = this.observeResize) == null ? void 0 : _a2.unobserve();
    }
    render() {
      return x`<div ${n$1(this.containerRef)} part="container" class="container ${e2({ initial: this.isInitial })}"><slot @slotchange="${this.onSlotChange}" @click="${this.onClick}"></slot><div ${n$1(this.indicatorRef)} part="indicator" class="indicator"></div></div><slot name="panel" @slotchange="${this.onSlotChange}"></slot>`;
    }
    async onSlotChange() {
      await this.definedController.whenDefined();
      this.updateActive();
    }
    async onClick(event) {
      if (event.button) {
        return;
      }
      await this.definedController.whenDefined();
      const target = event.target;
      const tab = target.closest("mdui-tab");
      if (!tab) {
        return;
      }
      this.activeKey = tab.key;
      this.isInitial = false;
      this.updateActive();
    }
    updateActive() {
      this.activeTab = this.tabs.map((tab) => {
        tab.active = this.activeKey === tab.key;
        return tab;
      }).find((tab) => tab.active);
      this.panels.forEach((panel) => {
        var _a2;
        return panel.active = panel.value === ((_a2 = this.activeTab) == null ? void 0 : _a2.value);
      });
      this.updateIndicator();
    }
    updateIndicator() {
      const activeTab = this.activeTab;
      const $indicator = $$1(this.indicatorRef.value);
      const isVertical = this.placement.startsWith("left") || this.placement.startsWith("right");
      if (!activeTab) {
        $indicator.css({
          transform: isVertical ? "scaleY(0)" : "scaleX(0)"
        });
        return;
      }
      const $activeTab = $$1(activeTab);
      const offsetTop = activeTab.offsetTop;
      const offsetLeft = activeTab.offsetLeft;
      const commonStyle = isVertical ? { transform: "scaleY(1)", width: "", left: "" } : { transform: "scaleX(1)", height: "", top: "" };
      let shownStyle = {};
      if (this.variant === "primary") {
        const $customSlots = $activeTab.find(':scope > [slot="custom"]');
        const children = $customSlots.length ? $customSlots.get() : $$1(activeTab.renderRoot).find('slot[name="custom"]').children().get();
        if (isVertical) {
          const top = Math.min(...children.map((child) => child.offsetTop)) + offsetTop;
          const bottom = Math.max(...children.map((child) => child.offsetTop + child.offsetHeight)) + offsetTop;
          shownStyle = { top, height: bottom - top };
        } else {
          const left = Math.min(...children.map((child) => child.offsetLeft)) + offsetLeft;
          const right = Math.max(...children.map((child) => child.offsetLeft + child.offsetWidth)) + offsetLeft;
          shownStyle = { left, width: right - left };
        }
      }
      if (this.variant === "secondary") {
        shownStyle = isVertical ? { top: offsetTop, height: activeTab.offsetHeight } : { left: offsetLeft, width: activeTab.offsetWidth };
      }
      $indicator.css({ ...commonStyle, ...shownStyle });
    }
  };
  Tabs.styles = [componentStyle, tabsStyle];
  __decorate([
    n$5({ reflect: true })
  ], Tabs.prototype, "variant", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tabs.prototype, "value", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tabs.prototype, "placement", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter,
      attribute: "full-width"
    })
  ], Tabs.prototype, "fullWidth", void 0);
  __decorate([
    r$1()
  ], Tabs.prototype, "activeKey", void 0);
  __decorate([
    r$1()
  ], Tabs.prototype, "isInitial", void 0);
  __decorate([
    o$6({ selector: "mdui-tab", flatten: true })
  ], Tabs.prototype, "tabs", void 0);
  __decorate([
    o$6({
      selector: "mdui-tab-panel",
      slot: "panel",
      flatten: true
    })
  ], Tabs.prototype, "panels", void 0);
  __decorate([
    watch("activeKey", true)
  ], Tabs.prototype, "onActiveKeyChange", null);
  __decorate([
    watch("value")
  ], Tabs.prototype, "onValueChange", null);
  __decorate([
    watch("variant", true),
    watch("placement", true),
    watch("fullWidth", true)
  ], Tabs.prototype, "onIndicatorChange", null);
  Tabs = __decorate([
    t$2("mdui-tabs")
  ], Tabs);
  class HoverController {
    /**
     * @param host
     * @param elementRef 检查鼠标是否放在该元素上
     */
    constructor(host, elementRef) {
      this.isHover = false;
      this.uniqueID = uniqueId();
      this.enterEventName = `mouseenter.${this.uniqueID}.hoverController`;
      this.leaveEventName = `mouseleave.${this.uniqueID}.hoverController`;
      this.mouseEnterItems = [];
      this.mouseLeaveItems = [];
      (this.host = host).addController(this);
      this.elementRef = elementRef;
    }
    hostConnected() {
      this.host.updateComplete.then(() => {
        $$1(this.elementRef.value).on(this.enterEventName, () => {
          this.isHover = true;
          for (let i3 = this.mouseEnterItems.length - 1; i3 >= 0; i3--) {
            const item = this.mouseEnterItems[i3];
            item.callback();
            if (item.one) {
              this.mouseEnterItems.splice(i3, 1);
            }
          }
        }).on(this.leaveEventName, () => {
          this.isHover = false;
          for (let i3 = this.mouseLeaveItems.length - 1; i3 >= 0; i3--) {
            const item = this.mouseLeaveItems[i3];
            item.callback();
            if (item.one) {
              this.mouseLeaveItems.splice(i3, 1);
            }
          }
        });
      });
    }
    hostDisconnected() {
      $$1(this.elementRef.value).off(this.enterEventName).off(this.leaveEventName);
    }
    /**
     * 指定鼠标移入时的回调函数
     * @param callback 要执行的回调函数
     * @param one 是否仅执行一次
     */
    onMouseEnter(callback, one = false) {
      this.mouseEnterItems.push({ callback, one });
    }
    /**
     * 指定鼠标移出时的回调函数
     * @param callback 要执行的回调函数
     * @param one 是否仅执行一次
     */
    onMouseLeave(callback, one = false) {
      this.mouseLeaveItems.push({ callback, one });
    }
  }
  const style = i$7`:host{--shape-corner-plain:var(--mdui-shape-corner-extra-small);--shape-corner-rich:var(--mdui-shape-corner-medium);--z-index:2500;display:contents}.popup{position:fixed;display:flex;flex-direction:column;z-index:var(--z-index);border-radius:var(--shape-corner-plain);background-color:rgb(var(--mdui-color-inverse-surface));padding:0 .5rem;min-width:1.75rem;max-width:20rem}:host([variant=rich]) .popup{border-radius:var(--shape-corner-rich);background-color:rgb(var(--mdui-color-surface-container));box-shadow:var(--mdui-elevation-level2);padding:.75rem 1rem .5rem 1rem}.headline{display:flex;color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-title-small-size);font-weight:var(--mdui-typescale-title-small-weight);letter-spacing:var(--mdui-typescale-title-small-tracking);line-height:var(--mdui-typescale-title-small-line-height)}.content{display:flex;padding:.25rem 0;color:rgb(var(--mdui-color-inverse-on-surface));font-size:var(--mdui-typescale-body-small-size);font-weight:var(--mdui-typescale-body-small-weight);letter-spacing:var(--mdui-typescale-body-small-tracking);line-height:var(--mdui-typescale-body-small-line-height)}:host([variant=rich]) .content{color:rgb(var(--mdui-color-on-surface-variant));font-size:var(--mdui-typescale-body-medium-size);font-weight:var(--mdui-typescale-body-medium-weight);letter-spacing:var(--mdui-typescale-body-medium-tracking);line-height:var(--mdui-typescale-body-medium-line-height)}.action{display:flex;justify-content:flex-start;padding-top:.5rem}.action ::slotted(:not(:last-child)){margin-right:.5rem}`;
  let Tooltip = class Tooltip2 extends MduiElement {
    constructor() {
      super();
      this.variant = "plain";
      this.placement = "auto";
      this.openDelay = 150;
      this.closeDelay = 150;
      this.trigger = "hover focus";
      this.disabled = false;
      this.open = false;
      this.popupRef = e$1();
      this.hasSlotController = new HasSlotController(this, "headline", "action");
      this.hoverController = new HoverController(this, this.popupRef);
      this.definedController = new DefinedController(this, {
        needDomReady: true
      });
      this.onDocumentClick = this.onDocumentClick.bind(this);
      this.onWindowScroll = this.onWindowScroll.bind(this);
      this.onFocus = this.onFocus.bind(this);
      this.onBlur = this.onBlur.bind(this);
      this.onClick = this.onClick.bind(this);
      this.onKeydown = this.onKeydown.bind(this);
      this.onMouseEnter = this.onMouseEnter.bind(this);
      this.onMouseLeave = this.onMouseLeave.bind(this);
    }
    /**
     * 获取第一个非 <style> 和 content slot 的子元素,作为 tooltip 的目标元素
     */
    get target() {
      return [...this.children].find((el) => el.tagName.toLowerCase() !== "style" && el.getAttribute("slot") !== "content");
    }
    async onPositionChange() {
      if (this.open) {
        await this.definedController.whenDefined();
        this.updatePositioner();
      }
    }
    async onOpenChange() {
      const hasUpdated = this.hasUpdated;
      const duration = getDuration(this, "short4");
      const easing = getEasing(this, "standard");
      if (this.open) {
        await this.definedController.whenDefined();
        $$1(`mdui-tooltip[variant="${this.variant}"]`).filter((_2, element) => element !== this).prop("open", false);
        if (!hasUpdated) {
          await this.updateComplete;
        }
        if (hasUpdated) {
          const eventProceeded = this.emit("open", { cancelable: true });
          if (!eventProceeded) {
            return;
          }
        }
        await stopAnimations(this.popupRef.value);
        this.popupRef.value.hidden = false;
        this.updatePositioner();
        await animateTo(this.popupRef.value, [{ transform: "scale(0)" }, { transform: "scale(1)" }], {
          duration: hasUpdated ? duration : 0,
          easing
        });
        if (hasUpdated) {
          this.emit("opened");
        }
        return;
      }
      if (!this.open && hasUpdated) {
        const eventProceeded = this.emit("close", { cancelable: true });
        if (!eventProceeded) {
          return;
        }
        await stopAnimations(this.popupRef.value);
        await animateTo(this.popupRef.value, [{ transform: "scale(1)" }, { transform: "scale(0)" }], { duration, easing });
        this.popupRef.value.hidden = true;
        this.emit("closed");
      }
    }
    connectedCallback() {
      super.connectedCallback();
      document.addEventListener("pointerdown", this.onDocumentClick);
      this.overflowAncestors = getOverflowAncestors(this.target);
      this.overflowAncestors.forEach((ancestor) => {
        ancestor.addEventListener("scroll", this.onWindowScroll);
      });
      this.definedController.whenDefined().then(() => {
        this.observeResize = observeResize(this.target, () => {
          this.updatePositioner();
        });
      });
    }
    disconnectedCallback() {
      var _a2, _b;
      super.disconnectedCallback();
      document.removeEventListener("pointerdown", this.onDocumentClick);
      (_a2 = this.overflowAncestors) == null ? void 0 : _a2.forEach((ancestor) => {
        ancestor.removeEventListener("scroll", this.onWindowScroll);
      });
      (_b = this.observeResize) == null ? void 0 : _b.unobserve();
    }
    firstUpdated(changedProperties) {
      super.firstUpdated(changedProperties);
      this.definedController.whenDefined().then(() => {
        const target = this.target;
        target.addEventListener("focus", this.onFocus);
        target.addEventListener("blur", this.onBlur);
        target.addEventListener("pointerdown", this.onClick);
        target.addEventListener("keydown", this.onKeydown);
        target.addEventListener("mouseenter", this.onMouseEnter);
        target.addEventListener("mouseleave", this.onMouseLeave);
      });
    }
    render() {
      const hasHeadline = this.isRich() && (this.headline || this.hasSlotController.test("headline"));
      const hasAction = this.isRich() && this.hasSlotController.test("action");
      return x`<slot></slot><div ${n$1(this.popupRef)} part="popup" class="popup" hidden>${n2(hasHeadline, () => x`<slot name="headline" part="headline" class="headline">${this.headline}</slot>`)}<slot name="content" part="content" class="content">${this.content}</slot>${n2(hasAction, () => x`<slot name="action" part="action" class="action"></slot>`)}</div>`;
    }
    isRich() {
      return this.variant === "rich";
    }
    /**
     * 请求关闭 tooltip。鼠标未悬浮在 tooltip 上时,直接关闭;否则等鼠标移走再关闭
     */
    requestClose() {
      if (!this.hoverController.isHover) {
        this.open = false;
        return;
      }
      this.hoverController.onMouseLeave(() => {
        if (this.hasTrigger("hover")) {
          this.hoverTimeout = window.setTimeout(() => {
            this.open = false;
          }, this.closeDelay || 50);
        } else {
          this.open = false;
        }
      }, true);
    }
    hasTrigger(trigger) {
      const triggers = this.trigger.split(" ");
      return triggers.includes(trigger);
    }
    onFocus() {
      if (this.disabled || this.open || !this.hasTrigger("focus")) {
        return;
      }
      this.open = true;
    }
    onBlur() {
      if (this.disabled || !this.open || !this.hasTrigger("focus")) {
        return;
      }
      this.requestClose();
    }
    onClick(e3) {
      if (this.disabled || e3.button || !this.hasTrigger("click")) {
        return;
      }
      if (this.open && (this.hasTrigger("hover") || this.hasTrigger("focus"))) {
        return;
      }
      this.open = !this.open;
    }
    onKeydown(e3) {
      if (this.disabled || !this.open || e3.key !== "Escape") {
        return;
      }
      e3.stopPropagation();
      this.requestClose();
    }
    onMouseEnter() {
      if (this.disabled || this.open || !this.hasTrigger("hover")) {
        return;
      }
      if (this.openDelay) {
        window.clearTimeout(this.hoverTimeout);
        this.hoverTimeout = window.setTimeout(() => {
          this.open = true;
        }, this.openDelay);
      } else {
        this.open = true;
      }
    }
    onMouseLeave() {
      window.clearTimeout(this.hoverTimeout);
      if (this.disabled || !this.open || !this.hasTrigger("hover")) {
        return;
      }
      this.hoverTimeout = window.setTimeout(() => {
        this.requestClose();
      }, this.closeDelay || 50);
    }
    /**
     * 在 document 上点击时,根据条件判断是否关闭 tooltip
     */
    onDocumentClick(e3) {
      if (this.disabled || !this.open) {
        return;
      }
      const path = e3.composedPath();
      if (!path.includes(this)) {
        this.requestClose();
      }
    }
    onWindowScroll() {
      window.requestAnimationFrame(() => this.updatePositioner());
    }
    updatePositioner() {
      const $popup = $$1(this.popupRef.value);
      const targetMargin = this.isRich() ? 0 : 4;
      const popupMargin = 4;
      const targetRect = this.target.getBoundingClientRect();
      const targetTop = targetRect.top;
      const targetLeft = targetRect.left;
      const targetHeight = targetRect.height;
      const targetWidth = targetRect.width;
      const popupHeight = this.popupRef.value.offsetHeight;
      const popupWidth = this.popupRef.value.offsetWidth;
      const popupXSpace = popupWidth + targetMargin + popupMargin;
      const popupYSpace = popupHeight + targetMargin + popupMargin;
      let transformOriginX;
      let transformOriginY;
      let top;
      let left;
      let placement = this.placement;
      if (placement === "auto") {
        const $window = $$1(window);
        const hasTopSpace = targetTop > popupYSpace;
        const hasBottomSpace = $window.height() - targetTop - targetHeight > popupYSpace;
        const hasLeftSpace = targetLeft > popupXSpace;
        const hasRightSpace = $window.width() - targetLeft - targetWidth > popupXSpace;
        if (this.isRich()) {
          placement = "bottom-right";
          if (hasBottomSpace && hasRightSpace) {
            placement = "bottom-right";
          } else if (hasBottomSpace && hasLeftSpace) {
            placement = "bottom-left";
          } else if (hasTopSpace && hasRightSpace) {
            placement = "top-right";
          } else if (hasTopSpace && hasLeftSpace) {
            placement = "top-left";
          } else if (hasBottomSpace) {
            placement = "bottom";
          } else if (hasTopSpace) {
            placement = "top";
          } else if (hasRightSpace) {
            placement = "right";
          } else if (hasLeftSpace) {
            placement = "left";
          }
        } else {
          placement = "top";
          if (hasTopSpace) {
            placement = "top";
          } else if (hasBottomSpace) {
            placement = "bottom";
          } else if (hasLeftSpace) {
            placement = "left";
          } else if (hasRightSpace) {
            placement = "right";
          }
        }
      }
      const [position, alignment] = placement.split("-");
      switch (position) {
        case "top":
          transformOriginY = "bottom";
          top = targetTop - popupHeight - targetMargin;
          break;
        case "bottom":
          transformOriginY = "top";
          top = targetTop + targetHeight + targetMargin;
          break;
        default:
          transformOriginY = "center";
          switch (alignment) {
            case "start":
              top = targetTop;
              break;
            case "end":
              top = targetTop + targetHeight - popupHeight;
              break;
            default:
              top = targetTop + targetHeight / 2 - popupHeight / 2;
              break;
          }
          break;
      }
      switch (position) {
        case "left":
          transformOriginX = "right";
          left = targetLeft - popupWidth - targetMargin;
          break;
        case "right":
          transformOriginX = "left";
          left = targetLeft + targetWidth + targetMargin;
          break;
        default:
          transformOriginX = "center";
          switch (alignment) {
            case "start":
              left = targetLeft;
              break;
            case "end":
              left = targetLeft + targetWidth - popupWidth;
              break;
            case "left":
              transformOriginX = "right";
              left = targetLeft - popupWidth - targetMargin;
              break;
            case "right":
              transformOriginX = "left";
              left = targetLeft + targetWidth + targetMargin;
              break;
            default:
              left = targetLeft + targetWidth / 2 - popupWidth / 2;
              break;
          }
          break;
      }
      $popup.css({
        top,
        left,
        transformOrigin: [transformOriginX, transformOriginY].join(" ")
      });
    }
  };
  Tooltip.styles = [componentStyle, style];
  __decorate([
    n$5({ reflect: true })
  ], Tooltip.prototype, "variant", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tooltip.prototype, "placement", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "open-delay" })
  ], Tooltip.prototype, "openDelay", void 0);
  __decorate([
    n$5({ type: Number, reflect: true, attribute: "close-delay" })
  ], Tooltip.prototype, "closeDelay", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tooltip.prototype, "headline", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tooltip.prototype, "content", void 0);
  __decorate([
    n$5({ reflect: true })
  ], Tooltip.prototype, "trigger", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Tooltip.prototype, "disabled", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], Tooltip.prototype, "open", void 0);
  __decorate([
    watch("placement", true),
    watch("content", true)
  ], Tooltip.prototype, "onPositionChange", null);
  __decorate([
    watch("open")
  ], Tooltip.prototype, "onOpenChange", null);
  Tooltip = __decorate([
    t$2("mdui-tooltip")
  ], Tooltip);
  const getInnerHtmlFromSlot = (slot) => {
    const nodes = slot.assignedNodes({ flatten: true });
    let html = "";
    [...nodes].forEach((node) => {
      if (node.nodeType === Node.ELEMENT_NODE) {
        html += node.outerHTML;
      }
      if (node.nodeType === Node.TEXT_NODE) {
        html += node.textContent;
      }
    });
    return html;
  };
  const topAppBarTitleStyle = i$7`:host{display:block;width:100%;flex-shrink:initial!important;overflow:hidden;color:rgb(var(--mdui-color-on-surface));font-size:var(--mdui-typescale-title-large-size);font-weight:var(--mdui-typescale-title-large-weight);letter-spacing:var(--mdui-typescale-title-large-tracking);line-height:var(--mdui-typescale-title-large-line-height);line-height:2.5rem}.label{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:1;transition:opacity var(--mdui-motion-duration-short2) var(--mdui-motion-easing-linear)}.label.variant-center-aligned{text-align:center}.label.variant-large:not(.shrink),.label.variant-medium:not(.shrink){opacity:0}.label.variant-large.shrink,.label.variant-medium.shrink{transition-delay:var(--mdui-motion-duration-short2)}.label-large{display:none;position:absolute;width:100%;left:0;margin-right:0;padding:0 1rem;transition:opacity var(--mdui-motion-duration-short2) var(--mdui-motion-easing-linear)}.label-large.variant-large,.label-large.variant-medium{display:block}.label-large.variant-medium{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;bottom:.75rem;font-size:var(--mdui-typescale-headline-small-size);font-weight:var(--mdui-typescale-headline-small-weight);letter-spacing:var(--mdui-typescale-headline-small-tracking);line-height:var(--mdui-typescale-headline-small-line-height)}.label-large.variant-large{display:-webkit-box;overflow:hidden;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2;bottom:1.25rem;font-size:var(--mdui-typescale-headline-medium-size);font-weight:var(--mdui-typescale-headline-medium-weight);letter-spacing:var(--mdui-typescale-headline-medium-tracking);line-height:var(--mdui-typescale-headline-medium-line-height)}.label-large.variant-large:not(.shrink),.label-large.variant-medium:not(.shrink){opacity:1;transition-delay:var(--mdui-motion-duration-short2)}.label-large.variant-large.shrink,.label-large.variant-medium.shrink{opacity:0;z-index:-1}`;
  let TopAppBarTitle = class TopAppBarTitle2 extends MduiElement {
    constructor() {
      super(...arguments);
      this.variant = "small";
      this.shrink = false;
      this.hasSlotController = new HasSlotController(this, "label-large");
      this.labelLargeRef = e$1();
      this.defaultSlotRef = e$1();
    }
    render() {
      const hasLabelLargeSlot = this.hasSlotController.test("label-large");
      const className2 = e2({
        shrink: this.shrink,
        "variant-center-aligned": this.variant === "center-aligned",
        "variant-small": this.variant === "small",
        "variant-medium": this.variant === "medium",
        "variant-large": this.variant === "large"
      });
      return x`<slot part="label" class="label ${className2}" ${n$1(this.defaultSlotRef)} @slotchange="${() => this.onSlotChange(hasLabelLargeSlot)}"></slot>${hasLabelLargeSlot ? x`<slot name="label-large" part="label-large" class="label-large ${className2}"></slot>` : x`<div ${n$1(this.labelLargeRef)} part="label-large" class="label-large ${className2}"></div>`}`;
    }
    /**
     * default slot 变化时,同步到 label-large 中
     * @param hasLabelLargeSlot
     * @private
     */
    onSlotChange(hasLabelLargeSlot) {
      if (!hasLabelLargeSlot) {
        this.labelLargeRef.value.innerHTML = getInnerHtmlFromSlot(this.defaultSlotRef.value);
      }
    }
  };
  TopAppBarTitle.styles = [
    componentStyle,
    topAppBarTitleStyle
  ];
  __decorate([
    r$1()
  ], TopAppBarTitle.prototype, "variant", void 0);
  __decorate([
    r$1()
  ], TopAppBarTitle.prototype, "shrink", void 0);
  TopAppBarTitle = __decorate([
    t$2("mdui-top-app-bar-title")
  ], TopAppBarTitle);
  const topAppBarStyle = i$7`:host{--shape-corner:var(--mdui-shape-corner-none);--z-index:2000;position:fixed;top:0;right:0;left:0;display:flex;flex:0 0 auto;align-items:flex-start;justify-content:flex-start;border-bottom-left-radius:var(--shape-corner);border-bottom-right-radius:var(--shape-corner);z-index:var(--z-index);transition:top var(--mdui-motion-duration-long2) var(--mdui-motion-easing-standard),height var(--mdui-motion-duration-long2) var(--mdui-motion-easing-standard),box-shadow var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear),background-color var(--mdui-motion-duration-short4) var(--mdui-motion-easing-linear);padding:.75rem .5rem;height:4rem;background-color:rgb(var(--mdui-color-surface))}:host([scroll-target]:not([scroll-target=''])){position:absolute}:host([scroll-behavior~=shrink]){transition-duration:var(--mdui-motion-duration-short4)}:host([scrolling]){background-color:rgb(var(--mdui-color-surface-container));box-shadow:var(--mdui-elevation-level2)}::slotted(mdui-button-icon){color:rgb(var(--mdui-color-on-surface-variant));font-size:1.5rem}::slotted(mdui-button-icon:first-child){color:rgb(var(--mdui-color-on-surface))}::slotted(mdui-avatar){width:1.875rem;height:1.875rem;margin-top:.3125rem;margin-bottom:.3125rem}::slotted(*){flex-shrink:0}::slotted(:not(:last-child)){margin-right:.5rem}:host([variant=medium]){height:7rem}:host([variant=large]){height:9.5rem}:host([hide]:not([hide=false i])){transition-duration:var(--mdui-motion-duration-short4);top:-4.625rem}:host([hide][variant=medium]:not([hide=false i])){top:-7.625rem}:host([hide][variant=large]:not([hide=false i])){top:-10.125rem}:host([shrink][variant=large]:not([shrink=false i])),:host([shrink][variant=medium]:not([shrink=false i])){transition-duration:var(--mdui-motion-duration-short4);height:4rem}`;
  let TopAppBar = class TopAppBar2 extends ScrollBehaviorMixin(LayoutItemBase) {
    constructor() {
      super(...arguments);
      this.variant = "small";
      this.hide = false;
      this.shrink = false;
      this.scrolling = false;
    }
    get scrollPaddingPosition() {
      return "top";
    }
    get layoutPlacement() {
      return "top";
    }
    async onVariantChange() {
      if (this.hasUpdated) {
        this.addEventListener("transitionend", async () => {
          await this.scrollBehaviorDefinedController.whenDefined();
          this.setContainerPadding("update", this.scrollTarget);
        }, { once: true });
      } else {
        await this.updateComplete;
      }
      this.titleElements.forEach((titleElement) => {
        titleElement.variant = this.variant;
      });
    }
    async onShrinkChange() {
      if (!this.hasUpdated) {
        await this.updateComplete;
      }
      this.titleElements.forEach((titleElement) => {
        titleElement.shrink = this.shrink;
      });
    }
    firstUpdated(_changedProperties) {
      super.firstUpdated(_changedProperties);
      this.addEventListener("transitionend", (e3) => {
        if (e3.target === this) {
          this.emit(this.hide ? "hidden" : "shown");
        }
      });
    }
    render() {
      return x`<slot></slot>`;
    }
    runScrollNoThreshold(isScrollingUp, scrollTop) {
      if (this.hasScrollBehavior("shrink")) {
        if (isScrollingUp && scrollTop < 8) {
          this.shrink = false;
        }
      }
    }
    runScrollThreshold(isScrollingUp, scrollTop) {
      if (this.hasScrollBehavior("elevate")) {
        this.scrolling = !!scrollTop;
      }
      if (this.hasScrollBehavior("shrink")) {
        if (!isScrollingUp) {
          this.shrink = true;
        }
      }
      if (this.hasScrollBehavior("hide")) {
        if (!isScrollingUp && !this.hide) {
          const eventProceeded = this.emit("hide", { cancelable: true });
          if (eventProceeded) {
            this.hide = true;
          }
        }
        if (isScrollingUp && this.hide) {
          const eventProceeded = this.emit("show", { cancelable: true });
          if (eventProceeded) {
            this.hide = false;
          }
        }
      }
    }
  };
  TopAppBar.styles = [
    componentStyle,
    topAppBarStyle
  ];
  __decorate([
    n$5({ reflect: true })
  ], TopAppBar.prototype, "variant", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TopAppBar.prototype, "hide", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TopAppBar.prototype, "shrink", void 0);
  __decorate([
    n$5({ reflect: true, attribute: "scroll-behavior" })
  ], TopAppBar.prototype, "scrollBehavior", void 0);
  __decorate([
    n$5({
      type: Boolean,
      reflect: true,
      converter: booleanConverter
    })
  ], TopAppBar.prototype, "scrolling", void 0);
  __decorate([
    o$6({ selector: "mdui-top-app-bar-title", flatten: true })
  ], TopAppBar.prototype, "titleElements", void 0);
  __decorate([
    watch("variant")
  ], TopAppBar.prototype, "onVariantChange", null);
  __decorate([
    watch("shrink")
  ], TopAppBar.prototype, "onShrinkChange", null);
  TopAppBar = __decorate([
    t$2("mdui-top-app-bar")
  ], TopAppBar);
  function isPromise(obj) {
    return !!obj && (typeof obj === "object" || typeof obj === "function") && typeof obj.then === "function";
  }
  const container = {};
  function queue(name, func) {
    if (isUndefined(container[name])) {
      container[name] = [];
    }
    if (isUndefined(func)) {
      return container[name];
    }
    container[name].push(func);
  }
  function dequeue(name) {
    if (isUndefined(container[name])) {
      return;
    }
    if (!container[name].length) {
      return;
    }
    const func = container[name].shift();
    func();
  }
  const defaultAction = {
    onClick: returnTrue
  };
  const queueName$1 = "mdui.functions.dialog.";
  let currentDialog = void 0;
  const dialog = (options) => {
    const dialog2 = new Dialog();
    const $dialog = $$1(dialog2);
    const properties = [
      "headline",
      "description",
      "icon",
      "closeOnEsc",
      "closeOnOverlayClick",
      "stackedActions"
    ];
    const callbacks = ["onOpen", "onOpened", "onClose", "onClosed", "onOverlayClick"];
    Object.entries(options).forEach(([key2, value]) => {
      if (properties.includes(key2)) {
        dialog2[key2] = value;
      } else if (callbacks.includes(key2)) {
        const eventName = toKebabCase(key2.slice(2));
        $dialog.on(eventName, (e3) => {
          if (e3.target === dialog2) {
            value.call(dialog2, dialog2);
          }
        });
      }
    });
    if (options.body) {
      $dialog.append(options.body);
    }
    if (options.actions) {
      options.actions.forEach((action) => {
        const mergedAction = Object.assign({}, defaultAction, action);
        $$1(`<mdui-button
        slot="action"
        variant="text"
      >${mergedAction.text}</mdui-button>`).appendTo($dialog).on("click", function() {
          const clickResult = mergedAction.onClick.call(dialog2, dialog2);
          if (isPromise(clickResult)) {
            this.loading = true;
            clickResult.then(() => {
              dialog2.open = false;
            }).finally(() => {
              this.loading = false;
            });
          } else if (clickResult !== false) {
            dialog2.open = false;
          }
        });
      });
    }
    $dialog.appendTo("body").on("closed", (e3) => {
      if (e3.target !== dialog2) {
        return;
      }
      $dialog.remove();
      if (options.queue) {
        currentDialog = void 0;
        dequeue(queueName$1 + options.queue);
      }
    });
    if (!options.queue) {
      setTimeout(() => {
        dialog2.open = true;
      });
    } else if (currentDialog) {
      queue(queueName$1 + options.queue, () => {
        dialog2.open = true;
        currentDialog = dialog2;
      });
    } else {
      setTimeout(() => {
        dialog2.open = true;
      });
      currentDialog = dialog2;
    }
    return dialog2;
  };
  const getConfirmText$1 = () => {
    return msg("OK");
  };
  const getCancelText$1 = () => {
    return msg("Cancel");
  };
  const confirm = (options) => {
    const mergedOptions = Object.assign({}, {
      confirmText: getConfirmText$1(),
      cancelText: getCancelText$1(),
      onConfirm: returnTrue,
      onCancel: returnTrue
    }, options);
    const properties = [
      "headline",
      "description",
      "icon",
      "closeOnEsc",
      "closeOnOverlayClick",
      "stackedActions",
      "queue",
      "onOpen",
      "onOpened",
      "onClose",
      "onClosed",
      "onOverlayClick"
    ];
    return new Promise((resolve, reject) => {
      let isResolve = false;
      const dialog$1 = dialog({
        ...Object.fromEntries(properties.filter((key2) => !isUndefined(mergedOptions[key2])).map((key2) => [key2, mergedOptions[key2]])),
        actions: [
          {
            text: mergedOptions.cancelText,
            onClick: (dialog2) => {
              return mergedOptions.onCancel.call(dialog2, dialog2);
            }
          },
          {
            text: mergedOptions.confirmText,
            onClick: (dialog2) => {
              const clickResult = mergedOptions.onConfirm.call(dialog2, dialog2);
              if (isPromise(clickResult)) {
                clickResult.then(() => {
                  isResolve = true;
                });
              } else if (clickResult !== false) {
                isResolve = true;
              }
              return clickResult;
            }
          }
        ]
      });
      if (!options.confirmText) {
        onLocaleReady(dialog$1, () => {
          $$1(dialog$1).find('[slot="action"]').last().text(getConfirmText$1());
        });
      }
      if (!options.cancelText) {
        onLocaleReady(dialog$1, () => {
          $$1(dialog$1).find('[slot="action"]').first().text(getCancelText$1());
        });
      }
      $$1(dialog$1).on("close", (e3) => {
        if (e3.target === dialog$1) {
          isResolve ? resolve() : reject();
          offLocaleReady(dialog$1);
        }
      });
    });
  };
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  function signum(num) {
    if (num < 0) {
      return -1;
    } else if (num === 0) {
      return 0;
    } else {
      return 1;
    }
  }
  function lerp(start, stop, amount) {
    return (1 - amount) * start + amount * stop;
  }
  function clampInt(min, max, input) {
    if (input < min) {
      return min;
    } else if (input > max) {
      return max;
    }
    return input;
  }
  function clampDouble(min, max, input) {
    if (input < min) {
      return min;
    } else if (input > max) {
      return max;
    }
    return input;
  }
  function sanitizeDegreesDouble(degrees) {
    degrees = degrees % 360;
    if (degrees < 0) {
      degrees = degrees + 360;
    }
    return degrees;
  }
  function rotationDirection(from, to) {
    const increasingDifference = sanitizeDegreesDouble(to - from);
    return increasingDifference <= 180 ? 1 : -1;
  }
  function differenceDegrees(a2, b2) {
    return 180 - Math.abs(Math.abs(a2 - b2) - 180);
  }
  function matrixMultiply(row, matrix) {
    const a2 = row[0] * matrix[0][0] + row[1] * matrix[0][1] + row[2] * matrix[0][2];
    const b2 = row[0] * matrix[1][0] + row[1] * matrix[1][1] + row[2] * matrix[1][2];
    const c3 = row[0] * matrix[2][0] + row[1] * matrix[2][1] + row[2] * matrix[2][2];
    return [a2, b2, c3];
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  const SRGB_TO_XYZ = [
    [0.41233895, 0.35762064, 0.18051042],
    [0.2126, 0.7152, 0.0722],
    [0.01932141, 0.11916382, 0.95034478]
  ];
  const XYZ_TO_SRGB = [
    [
      3.2413774792388685,
      -1.5376652402851851,
      -0.49885366846268053
    ],
    [
      -0.9691452513005321,
      1.8758853451067872,
      0.04156585616912061
    ],
    [
      0.05562093689691305,
      -0.20395524564742123,
      1.0571799111220335
    ]
  ];
  const WHITE_POINT_D65 = [95.047, 100, 108.883];
  function argbFromRgb(red, green, blue) {
    return (255 << 24 | (red & 255) << 16 | (green & 255) << 8 | blue & 255) >>> 0;
  }
  function argbFromLinrgb(linrgb) {
    const r3 = delinearized(linrgb[0]);
    const g2 = delinearized(linrgb[1]);
    const b2 = delinearized(linrgb[2]);
    return argbFromRgb(r3, g2, b2);
  }
  function redFromArgb(argb) {
    return argb >> 16 & 255;
  }
  function greenFromArgb(argb) {
    return argb >> 8 & 255;
  }
  function blueFromArgb(argb) {
    return argb & 255;
  }
  function argbFromXyz(x2, y2, z3) {
    const matrix = XYZ_TO_SRGB;
    const linearR = matrix[0][0] * x2 + matrix[0][1] * y2 + matrix[0][2] * z3;
    const linearG = matrix[1][0] * x2 + matrix[1][1] * y2 + matrix[1][2] * z3;
    const linearB = matrix[2][0] * x2 + matrix[2][1] * y2 + matrix[2][2] * z3;
    const r3 = delinearized(linearR);
    const g2 = delinearized(linearG);
    const b2 = delinearized(linearB);
    return argbFromRgb(r3, g2, b2);
  }
  function xyzFromArgb(argb) {
    const r3 = linearized(redFromArgb(argb));
    const g2 = linearized(greenFromArgb(argb));
    const b2 = linearized(blueFromArgb(argb));
    return matrixMultiply([r3, g2, b2], SRGB_TO_XYZ);
  }
  function argbFromLstar(lstar) {
    const y2 = yFromLstar(lstar);
    const component = delinearized(y2);
    return argbFromRgb(component, component, component);
  }
  function lstarFromArgb(argb) {
    const y2 = xyzFromArgb(argb)[1];
    return 116 * labF(y2 / 100) - 16;
  }
  function yFromLstar(lstar) {
    return 100 * labInvf((lstar + 16) / 116);
  }
  function lstarFromY(y2) {
    return labF(y2 / 100) * 116 - 16;
  }
  function linearized(rgbComponent) {
    const normalized = rgbComponent / 255;
    if (normalized <= 0.040449936) {
      return normalized / 12.92 * 100;
    } else {
      return Math.pow((normalized + 0.055) / 1.055, 2.4) * 100;
    }
  }
  function delinearized(rgbComponent) {
    const normalized = rgbComponent / 100;
    let delinearized2 = 0;
    if (normalized <= 31308e-7) {
      delinearized2 = normalized * 12.92;
    } else {
      delinearized2 = 1.055 * Math.pow(normalized, 1 / 2.4) - 0.055;
    }
    return clampInt(0, 255, Math.round(delinearized2 * 255));
  }
  function whitePointD65() {
    return WHITE_POINT_D65;
  }
  function labF(t2) {
    const e3 = 216 / 24389;
    const kappa = 24389 / 27;
    if (t2 > e3) {
      return Math.pow(t2, 1 / 3);
    } else {
      return (kappa * t2 + 16) / 116;
    }
  }
  function labInvf(ft) {
    const e3 = 216 / 24389;
    const kappa = 24389 / 27;
    const ft3 = ft * ft * ft;
    if (ft3 > e3) {
      return ft3;
    } else {
      return (116 * ft - 16) / kappa;
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class ViewingConditions {
    /**
     * Create ViewingConditions from a simple, physically relevant, set of
     * parameters.
     *
     * @param whitePoint White point, measured in the XYZ color space.
     *     default = D65, or sunny day afternoon
     * @param adaptingLuminance The luminance of the adapting field. Informally,
     *     how bright it is in the room where the color is viewed. Can be
     *     calculated from lux by multiplying lux by 0.0586. default = 11.72,
     *     or 200 lux.
     * @param backgroundLstar The lightness of the area surrounding the color.
     *     measured by L* in L*a*b*. default = 50.0
     * @param surround A general description of the lighting surrounding the
     *     color. 0 is pitch dark, like watching a movie in a theater. 1.0 is a
     *     dimly light room, like watching TV at home at night. 2.0 means there
     *     is no difference between the lighting on the color and around it.
     *     default = 2.0
     * @param discountingIlluminant Whether the eye accounts for the tint of the
     *     ambient lighting, such as knowing an apple is still red in green light.
     *     default = false, the eye does not perform this process on
     *       self-luminous objects like displays.
     */
    static make(whitePoint = whitePointD65(), adaptingLuminance = 200 / Math.PI * yFromLstar(50) / 100, backgroundLstar = 50, surround = 2, discountingIlluminant = false) {
      const xyz = whitePoint;
      const rW = xyz[0] * 0.401288 + xyz[1] * 0.650173 + xyz[2] * -0.051461;
      const gW = xyz[0] * -0.250268 + xyz[1] * 1.204414 + xyz[2] * 0.045854;
      const bW = xyz[0] * -2079e-6 + xyz[1] * 0.048952 + xyz[2] * 0.953127;
      const f2 = 0.8 + surround / 10;
      const c3 = f2 >= 0.9 ? lerp(0.59, 0.69, (f2 - 0.9) * 10) : lerp(0.525, 0.59, (f2 - 0.8) * 10);
      let d2 = discountingIlluminant ? 1 : f2 * (1 - 1 / 3.6 * Math.exp((-adaptingLuminance - 42) / 92));
      d2 = d2 > 1 ? 1 : d2 < 0 ? 0 : d2;
      const nc = f2;
      const rgbD = [
        d2 * (100 / rW) + 1 - d2,
        d2 * (100 / gW) + 1 - d2,
        d2 * (100 / bW) + 1 - d2
      ];
      const k2 = 1 / (5 * adaptingLuminance + 1);
      const k4 = k2 * k2 * k2 * k2;
      const k4F = 1 - k4;
      const fl = k4 * adaptingLuminance + 0.1 * k4F * k4F * Math.cbrt(5 * adaptingLuminance);
      const n3 = yFromLstar(backgroundLstar) / whitePoint[1];
      const z3 = 1.48 + Math.sqrt(n3);
      const nbb = 0.725 / Math.pow(n3, 0.2);
      const ncb = nbb;
      const rgbAFactors = [
        Math.pow(fl * rgbD[0] * rW / 100, 0.42),
        Math.pow(fl * rgbD[1] * gW / 100, 0.42),
        Math.pow(fl * rgbD[2] * bW / 100, 0.42)
      ];
      const rgbA = [
        400 * rgbAFactors[0] / (rgbAFactors[0] + 27.13),
        400 * rgbAFactors[1] / (rgbAFactors[1] + 27.13),
        400 * rgbAFactors[2] / (rgbAFactors[2] + 27.13)
      ];
      const aw = (2 * rgbA[0] + rgbA[1] + 0.05 * rgbA[2]) * nbb;
      return new ViewingConditions(n3, aw, nbb, ncb, c3, nc, rgbD, fl, Math.pow(fl, 0.25), z3);
    }
    /**
     * Parameters are intermediate values of the CAM16 conversion process. Their
     * names are shorthand for technical color science terminology, this class
     * would not benefit from documenting them individually. A brief overview
     * is available in the CAM16 specification, and a complete overview requires
     * a color science textbook, such as Fairchild's Color Appearance Models.
     */
    constructor(n3, aw, nbb, ncb, c3, nc, rgbD, fl, fLRoot, z3) {
      this.n = n3;
      this.aw = aw;
      this.nbb = nbb;
      this.ncb = ncb;
      this.c = c3;
      this.nc = nc;
      this.rgbD = rgbD;
      this.fl = fl;
      this.fLRoot = fLRoot;
      this.z = z3;
    }
  }
  ViewingConditions.DEFAULT = ViewingConditions.make();
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class Cam16 {
    /**
     * All of the CAM16 dimensions can be calculated from 3 of the dimensions, in
     * the following combinations:
     *      -  {j or q} and {c, m, or s} and hue
     *      - jstar, astar, bstar
     * Prefer using a static method that constructs from 3 of those dimensions.
     * This constructor is intended for those methods to use to return all
     * possible dimensions.
     *
     * @param hue
     * @param chroma informally, colorfulness / color intensity. like saturation
     *     in HSL, except perceptually accurate.
     * @param j lightness
     * @param q brightness; ratio of lightness to white point's lightness
     * @param m colorfulness
     * @param s saturation; ratio of chroma to white point's chroma
     * @param jstar CAM16-UCS J coordinate
     * @param astar CAM16-UCS a coordinate
     * @param bstar CAM16-UCS b coordinate
     */
    constructor(hue, chroma, j2, q, m2, s2, jstar, astar, bstar) {
      this.hue = hue;
      this.chroma = chroma;
      this.j = j2;
      this.q = q;
      this.m = m2;
      this.s = s2;
      this.jstar = jstar;
      this.astar = astar;
      this.bstar = bstar;
    }
    /**
     * CAM16 instances also have coordinates in the CAM16-UCS space, called J*,
     * a*, b*, or jstar, astar, bstar in code. CAM16-UCS is included in the CAM16
     * specification, and is used to measure distances between colors.
     */
    distance(other) {
      const dJ = this.jstar - other.jstar;
      const dA = this.astar - other.astar;
      const dB = this.bstar - other.bstar;
      const dEPrime = Math.sqrt(dJ * dJ + dA * dA + dB * dB);
      const dE = 1.41 * Math.pow(dEPrime, 0.63);
      return dE;
    }
    /**
     * @param argb ARGB representation of a color.
     * @return CAM16 color, assuming the color was viewed in default viewing
     *     conditions.
     */
    static fromInt(argb) {
      return Cam16.fromIntInViewingConditions(argb, ViewingConditions.DEFAULT);
    }
    /**
     * @param argb ARGB representation of a color.
     * @param viewingConditions Information about the environment where the color
     *     was observed.
     * @return CAM16 color.
     */
    static fromIntInViewingConditions(argb, viewingConditions) {
      const red = (argb & 16711680) >> 16;
      const green = (argb & 65280) >> 8;
      const blue = argb & 255;
      const redL = linearized(red);
      const greenL = linearized(green);
      const blueL = linearized(blue);
      const x2 = 0.41233895 * redL + 0.35762064 * greenL + 0.18051042 * blueL;
      const y2 = 0.2126 * redL + 0.7152 * greenL + 0.0722 * blueL;
      const z3 = 0.01932141 * redL + 0.11916382 * greenL + 0.95034478 * blueL;
      const rC = 0.401288 * x2 + 0.650173 * y2 - 0.051461 * z3;
      const gC = -0.250268 * x2 + 1.204414 * y2 + 0.045854 * z3;
      const bC = -2079e-6 * x2 + 0.048952 * y2 + 0.953127 * z3;
      const rD = viewingConditions.rgbD[0] * rC;
      const gD = viewingConditions.rgbD[1] * gC;
      const bD = viewingConditions.rgbD[2] * bC;
      const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100, 0.42);
      const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100, 0.42);
      const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100, 0.42);
      const rA = signum(rD) * 400 * rAF / (rAF + 27.13);
      const gA = signum(gD) * 400 * gAF / (gAF + 27.13);
      const bA = signum(bD) * 400 * bAF / (bAF + 27.13);
      const a2 = (11 * rA + -12 * gA + bA) / 11;
      const b2 = (rA + gA - 2 * bA) / 9;
      const u2 = (20 * rA + 20 * gA + 21 * bA) / 20;
      const p2 = (40 * rA + 20 * gA + bA) / 20;
      const atan2 = Math.atan2(b2, a2);
      const atanDegrees = atan2 * 180 / Math.PI;
      const hue = atanDegrees < 0 ? atanDegrees + 360 : atanDegrees >= 360 ? atanDegrees - 360 : atanDegrees;
      const hueRadians = hue * Math.PI / 180;
      const ac = p2 * viewingConditions.nbb;
      const j2 = 100 * Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);
      const q = 4 / viewingConditions.c * Math.sqrt(j2 / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot;
      const huePrime = hue < 20.14 ? hue + 360 : hue;
      const eHue = 0.25 * (Math.cos(huePrime * Math.PI / 180 + 2) + 3.8);
      const p1 = 5e4 / 13 * eHue * viewingConditions.nc * viewingConditions.ncb;
      const t2 = p1 * Math.sqrt(a2 * a2 + b2 * b2) / (u2 + 0.305);
      const alpha = Math.pow(t2, 0.9) * Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);
      const c3 = alpha * Math.sqrt(j2 / 100);
      const m2 = c3 * viewingConditions.fLRoot;
      const s2 = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4));
      const jstar = (1 + 100 * 7e-3) * j2 / (1 + 7e-3 * j2);
      const mstar = 1 / 0.0228 * Math.log(1 + 0.0228 * m2);
      const astar = mstar * Math.cos(hueRadians);
      const bstar = mstar * Math.sin(hueRadians);
      return new Cam16(hue, c3, j2, q, m2, s2, jstar, astar, bstar);
    }
    /**
     * @param j CAM16 lightness
     * @param c CAM16 chroma
     * @param h CAM16 hue
     */
    static fromJch(j2, c3, h2) {
      return Cam16.fromJchInViewingConditions(j2, c3, h2, ViewingConditions.DEFAULT);
    }
    /**
     * @param j CAM16 lightness
     * @param c CAM16 chroma
     * @param h CAM16 hue
     * @param viewingConditions Information about the environment where the color
     *     was observed.
     */
    static fromJchInViewingConditions(j2, c3, h2, viewingConditions) {
      const q = 4 / viewingConditions.c * Math.sqrt(j2 / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot;
      const m2 = c3 * viewingConditions.fLRoot;
      const alpha = c3 / Math.sqrt(j2 / 100);
      const s2 = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4));
      const hueRadians = h2 * Math.PI / 180;
      const jstar = (1 + 100 * 7e-3) * j2 / (1 + 7e-3 * j2);
      const mstar = 1 / 0.0228 * Math.log(1 + 0.0228 * m2);
      const astar = mstar * Math.cos(hueRadians);
      const bstar = mstar * Math.sin(hueRadians);
      return new Cam16(h2, c3, j2, q, m2, s2, jstar, astar, bstar);
    }
    /**
     * @param jstar CAM16-UCS lightness.
     * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian
     *     coordinate on the Y axis.
     * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian
     *     coordinate on the X axis.
     */
    static fromUcs(jstar, astar, bstar) {
      return Cam16.fromUcsInViewingConditions(jstar, astar, bstar, ViewingConditions.DEFAULT);
    }
    /**
     * @param jstar CAM16-UCS lightness.
     * @param astar CAM16-UCS a dimension. Like a* in L*a*b*, it is a Cartesian
     *     coordinate on the Y axis.
     * @param bstar CAM16-UCS b dimension. Like a* in L*a*b*, it is a Cartesian
     *     coordinate on the X axis.
     * @param viewingConditions Information about the environment where the color
     *     was observed.
     */
    static fromUcsInViewingConditions(jstar, astar, bstar, viewingConditions) {
      const a2 = astar;
      const b2 = bstar;
      const m2 = Math.sqrt(a2 * a2 + b2 * b2);
      const M2 = (Math.exp(m2 * 0.0228) - 1) / 0.0228;
      const c3 = M2 / viewingConditions.fLRoot;
      let h2 = Math.atan2(b2, a2) * (180 / Math.PI);
      if (h2 < 0) {
        h2 += 360;
      }
      const j2 = jstar / (1 - (jstar - 100) * 7e-3);
      return Cam16.fromJchInViewingConditions(j2, c3, h2, viewingConditions);
    }
    /**
     *  @return ARGB representation of color, assuming the color was viewed in
     *     default viewing conditions, which are near-identical to the default
     *     viewing conditions for sRGB.
     */
    toInt() {
      return this.viewed(ViewingConditions.DEFAULT);
    }
    /**
     * @param viewingConditions Information about the environment where the color
     *     will be viewed.
     * @return ARGB representation of color
     */
    viewed(viewingConditions) {
      const alpha = this.chroma === 0 || this.j === 0 ? 0 : this.chroma / Math.sqrt(this.j / 100);
      const t2 = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1 / 0.9);
      const hRad = this.hue * Math.PI / 180;
      const eHue = 0.25 * (Math.cos(hRad + 2) + 3.8);
      const ac = viewingConditions.aw * Math.pow(this.j / 100, 1 / viewingConditions.c / viewingConditions.z);
      const p1 = eHue * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb;
      const p2 = ac / viewingConditions.nbb;
      const hSin = Math.sin(hRad);
      const hCos = Math.cos(hRad);
      const gamma = 23 * (p2 + 0.305) * t2 / (23 * p1 + 11 * t2 * hCos + 108 * t2 * hSin);
      const a2 = gamma * hCos;
      const b2 = gamma * hSin;
      const rA = (460 * p2 + 451 * a2 + 288 * b2) / 1403;
      const gA = (460 * p2 - 891 * a2 - 261 * b2) / 1403;
      const bA = (460 * p2 - 220 * a2 - 6300 * b2) / 1403;
      const rCBase = Math.max(0, 27.13 * Math.abs(rA) / (400 - Math.abs(rA)));
      const rC = signum(rA) * (100 / viewingConditions.fl) * Math.pow(rCBase, 1 / 0.42);
      const gCBase = Math.max(0, 27.13 * Math.abs(gA) / (400 - Math.abs(gA)));
      const gC = signum(gA) * (100 / viewingConditions.fl) * Math.pow(gCBase, 1 / 0.42);
      const bCBase = Math.max(0, 27.13 * Math.abs(bA) / (400 - Math.abs(bA)));
      const bC = signum(bA) * (100 / viewingConditions.fl) * Math.pow(bCBase, 1 / 0.42);
      const rF = rC / viewingConditions.rgbD[0];
      const gF = gC / viewingConditions.rgbD[1];
      const bF = bC / viewingConditions.rgbD[2];
      const x2 = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;
      const y2 = 0.38752654 * rF + 0.62144744 * gF - 897398e-8 * bF;
      const z3 = -0.0158415 * rF - 0.03412294 * gF + 1.04996444 * bF;
      const argb = argbFromXyz(x2, y2, z3);
      return argb;
    }
    /// Given color expressed in XYZ and viewed in [viewingConditions], convert to
    /// CAM16.
    static fromXyzInViewingConditions(x2, y2, z3, viewingConditions) {
      const rC = 0.401288 * x2 + 0.650173 * y2 - 0.051461 * z3;
      const gC = -0.250268 * x2 + 1.204414 * y2 + 0.045854 * z3;
      const bC = -2079e-6 * x2 + 0.048952 * y2 + 0.953127 * z3;
      const rD = viewingConditions.rgbD[0] * rC;
      const gD = viewingConditions.rgbD[1] * gC;
      const bD = viewingConditions.rgbD[2] * bC;
      const rAF = Math.pow(viewingConditions.fl * Math.abs(rD) / 100, 0.42);
      const gAF = Math.pow(viewingConditions.fl * Math.abs(gD) / 100, 0.42);
      const bAF = Math.pow(viewingConditions.fl * Math.abs(bD) / 100, 0.42);
      const rA = signum(rD) * 400 * rAF / (rAF + 27.13);
      const gA = signum(gD) * 400 * gAF / (gAF + 27.13);
      const bA = signum(bD) * 400 * bAF / (bAF + 27.13);
      const a2 = (11 * rA + -12 * gA + bA) / 11;
      const b2 = (rA + gA - 2 * bA) / 9;
      const u2 = (20 * rA + 20 * gA + 21 * bA) / 20;
      const p2 = (40 * rA + 20 * gA + bA) / 20;
      const atan2 = Math.atan2(b2, a2);
      const atanDegrees = atan2 * 180 / Math.PI;
      const hue = atanDegrees < 0 ? atanDegrees + 360 : atanDegrees >= 360 ? atanDegrees - 360 : atanDegrees;
      const hueRadians = hue * Math.PI / 180;
      const ac = p2 * viewingConditions.nbb;
      const J = 100 * Math.pow(ac / viewingConditions.aw, viewingConditions.c * viewingConditions.z);
      const Q = 4 / viewingConditions.c * Math.sqrt(J / 100) * (viewingConditions.aw + 4) * viewingConditions.fLRoot;
      const huePrime = hue < 20.14 ? hue + 360 : hue;
      const eHue = 1 / 4 * (Math.cos(huePrime * Math.PI / 180 + 2) + 3.8);
      const p1 = 5e4 / 13 * eHue * viewingConditions.nc * viewingConditions.ncb;
      const t2 = p1 * Math.sqrt(a2 * a2 + b2 * b2) / (u2 + 0.305);
      const alpha = Math.pow(t2, 0.9) * Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);
      const C2 = alpha * Math.sqrt(J / 100);
      const M2 = C2 * viewingConditions.fLRoot;
      const s2 = 50 * Math.sqrt(alpha * viewingConditions.c / (viewingConditions.aw + 4));
      const jstar = (1 + 100 * 7e-3) * J / (1 + 7e-3 * J);
      const mstar = Math.log(1 + 0.0228 * M2) / 0.0228;
      const astar = mstar * Math.cos(hueRadians);
      const bstar = mstar * Math.sin(hueRadians);
      return new Cam16(hue, C2, J, Q, M2, s2, jstar, astar, bstar);
    }
    /// XYZ representation of CAM16 seen in [viewingConditions].
    xyzInViewingConditions(viewingConditions) {
      const alpha = this.chroma === 0 || this.j === 0 ? 0 : this.chroma / Math.sqrt(this.j / 100);
      const t2 = Math.pow(alpha / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73), 1 / 0.9);
      const hRad = this.hue * Math.PI / 180;
      const eHue = 0.25 * (Math.cos(hRad + 2) + 3.8);
      const ac = viewingConditions.aw * Math.pow(this.j / 100, 1 / viewingConditions.c / viewingConditions.z);
      const p1 = eHue * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb;
      const p2 = ac / viewingConditions.nbb;
      const hSin = Math.sin(hRad);
      const hCos = Math.cos(hRad);
      const gamma = 23 * (p2 + 0.305) * t2 / (23 * p1 + 11 * t2 * hCos + 108 * t2 * hSin);
      const a2 = gamma * hCos;
      const b2 = gamma * hSin;
      const rA = (460 * p2 + 451 * a2 + 288 * b2) / 1403;
      const gA = (460 * p2 - 891 * a2 - 261 * b2) / 1403;
      const bA = (460 * p2 - 220 * a2 - 6300 * b2) / 1403;
      const rCBase = Math.max(0, 27.13 * Math.abs(rA) / (400 - Math.abs(rA)));
      const rC = signum(rA) * (100 / viewingConditions.fl) * Math.pow(rCBase, 1 / 0.42);
      const gCBase = Math.max(0, 27.13 * Math.abs(gA) / (400 - Math.abs(gA)));
      const gC = signum(gA) * (100 / viewingConditions.fl) * Math.pow(gCBase, 1 / 0.42);
      const bCBase = Math.max(0, 27.13 * Math.abs(bA) / (400 - Math.abs(bA)));
      const bC = signum(bA) * (100 / viewingConditions.fl) * Math.pow(bCBase, 1 / 0.42);
      const rF = rC / viewingConditions.rgbD[0];
      const gF = gC / viewingConditions.rgbD[1];
      const bF = bC / viewingConditions.rgbD[2];
      const x2 = 1.86206786 * rF - 1.01125463 * gF + 0.14918677 * bF;
      const y2 = 0.38752654 * rF + 0.62144744 * gF - 897398e-8 * bF;
      const z3 = -0.0158415 * rF - 0.03412294 * gF + 1.04996444 * bF;
      return [x2, y2, z3];
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class HctSolver {
    /**
     * Sanitizes a small enough angle in radians.
     *
     * @param angle An angle in radians; must not deviate too much
     * from 0.
     * @return A coterminal angle between 0 and 2pi.
     */
    static sanitizeRadians(angle) {
      return (angle + Math.PI * 8) % (Math.PI * 2);
    }
    /**
     * Delinearizes an RGB component, returning a floating-point
     * number.
     *
     * @param rgbComponent 0.0 <= rgb_component <= 100.0, represents
     * linear R/G/B channel
     * @return 0.0 <= output <= 255.0, color channel converted to
     * regular RGB space
     */
    static trueDelinearized(rgbComponent) {
      const normalized = rgbComponent / 100;
      let delinearized2 = 0;
      if (normalized <= 31308e-7) {
        delinearized2 = normalized * 12.92;
      } else {
        delinearized2 = 1.055 * Math.pow(normalized, 1 / 2.4) - 0.055;
      }
      return delinearized2 * 255;
    }
    static chromaticAdaptation(component) {
      const af = Math.pow(Math.abs(component), 0.42);
      return signum(component) * 400 * af / (af + 27.13);
    }
    /**
     * Returns the hue of a linear RGB color in CAM16.
     *
     * @param linrgb The linear RGB coordinates of a color.
     * @return The hue of the color in CAM16, in radians.
     */
    static hueOf(linrgb) {
      const scaledDiscount = matrixMultiply(linrgb, HctSolver.SCALED_DISCOUNT_FROM_LINRGB);
      const rA = HctSolver.chromaticAdaptation(scaledDiscount[0]);
      const gA = HctSolver.chromaticAdaptation(scaledDiscount[1]);
      const bA = HctSolver.chromaticAdaptation(scaledDiscount[2]);
      const a2 = (11 * rA + -12 * gA + bA) / 11;
      const b2 = (rA + gA - 2 * bA) / 9;
      return Math.atan2(b2, a2);
    }
    static areInCyclicOrder(a2, b2, c3) {
      const deltaAB = HctSolver.sanitizeRadians(b2 - a2);
      const deltaAC = HctSolver.sanitizeRadians(c3 - a2);
      return deltaAB < deltaAC;
    }
    /**
     * Solves the lerp equation.
     *
     * @param source The starting number.
     * @param mid The number in the middle.
     * @param target The ending number.
     * @return A number t such that lerp(source, target, t) = mid.
     */
    static intercept(source2, mid, target) {
      return (mid - source2) / (target - source2);
    }
    static lerpPoint(source2, t2, target) {
      return [
        source2[0] + (target[0] - source2[0]) * t2,
        source2[1] + (target[1] - source2[1]) * t2,
        source2[2] + (target[2] - source2[2]) * t2
      ];
    }
    /**
     * Intersects a segment with a plane.
     *
     * @param source The coordinates of point A.
     * @param coordinate The R-, G-, or B-coordinate of the plane.
     * @param target The coordinates of point B.
     * @param axis The axis the plane is perpendicular with. (0: R, 1:
     * G, 2: B)
     * @return The intersection point of the segment AB with the plane
     * R=coordinate, G=coordinate, or B=coordinate
     */
    static setCoordinate(source2, coordinate, target, axis) {
      const t2 = HctSolver.intercept(source2[axis], coordinate, target[axis]);
      return HctSolver.lerpPoint(source2, t2, target);
    }
    static isBounded(x2) {
      return 0 <= x2 && x2 <= 100;
    }
    /**
     * Returns the nth possible vertex of the polygonal intersection.
     *
     * @param y The Y value of the plane.
     * @param n The zero-based index of the point. 0 <= n <= 11.
     * @return The nth possible vertex of the polygonal intersection
     * of the y plane and the RGB cube, in linear RGB coordinates, if
     * it exists. If this possible vertex lies outside of the cube,
     * [-1.0, -1.0, -1.0] is returned.
     */
    static nthVertex(y2, n3) {
      const kR = HctSolver.Y_FROM_LINRGB[0];
      const kG = HctSolver.Y_FROM_LINRGB[1];
      const kB = HctSolver.Y_FROM_LINRGB[2];
      const coordA = n3 % 4 <= 1 ? 0 : 100;
      const coordB = n3 % 2 === 0 ? 0 : 100;
      if (n3 < 4) {
        const g2 = coordA;
        const b2 = coordB;
        const r3 = (y2 - g2 * kG - b2 * kB) / kR;
        if (HctSolver.isBounded(r3)) {
          return [r3, g2, b2];
        } else {
          return [-1, -1, -1];
        }
      } else if (n3 < 8) {
        const b2 = coordA;
        const r3 = coordB;
        const g2 = (y2 - r3 * kR - b2 * kB) / kG;
        if (HctSolver.isBounded(g2)) {
          return [r3, g2, b2];
        } else {
          return [-1, -1, -1];
        }
      } else {
        const r3 = coordA;
        const g2 = coordB;
        const b2 = (y2 - r3 * kR - g2 * kG) / kB;
        if (HctSolver.isBounded(b2)) {
          return [r3, g2, b2];
        } else {
          return [-1, -1, -1];
        }
      }
    }
    /**
     * Finds the segment containing the desired color.
     *
     * @param y The Y value of the color.
     * @param targetHue The hue of the color.
     * @return A list of two sets of linear RGB coordinates, each
     * corresponding to an endpoint of the segment containing the
     * desired color.
     */
    static bisectToSegment(y2, targetHue) {
      let left = [-1, -1, -1];
      let right = left;
      let leftHue = 0;
      let rightHue = 0;
      let initialized = false;
      let uncut = true;
      for (let n3 = 0; n3 < 12; n3++) {
        const mid = HctSolver.nthVertex(y2, n3);
        if (mid[0] < 0) {
          continue;
        }
        const midHue = HctSolver.hueOf(mid);
        if (!initialized) {
          left = mid;
          right = mid;
          leftHue = midHue;
          rightHue = midHue;
          initialized = true;
          continue;
        }
        if (uncut || HctSolver.areInCyclicOrder(leftHue, midHue, rightHue)) {
          uncut = false;
          if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {
            right = mid;
            rightHue = midHue;
          } else {
            left = mid;
            leftHue = midHue;
          }
        }
      }
      return [left, right];
    }
    static midpoint(a2, b2) {
      return [
        (a2[0] + b2[0]) / 2,
        (a2[1] + b2[1]) / 2,
        (a2[2] + b2[2]) / 2
      ];
    }
    static criticalPlaneBelow(x2) {
      return Math.floor(x2 - 0.5);
    }
    static criticalPlaneAbove(x2) {
      return Math.ceil(x2 - 0.5);
    }
    /**
     * Finds a color with the given Y and hue on the boundary of the
     * cube.
     *
     * @param y The Y value of the color.
     * @param targetHue The hue of the color.
     * @return The desired color, in linear RGB coordinates.
     */
    static bisectToLimit(y2, targetHue) {
      const segment = HctSolver.bisectToSegment(y2, targetHue);
      let left = segment[0];
      let leftHue = HctSolver.hueOf(left);
      let right = segment[1];
      for (let axis = 0; axis < 3; axis++) {
        if (left[axis] !== right[axis]) {
          let lPlane = -1;
          let rPlane = 255;
          if (left[axis] < right[axis]) {
            lPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(left[axis]));
            rPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(right[axis]));
          } else {
            lPlane = HctSolver.criticalPlaneAbove(HctSolver.trueDelinearized(left[axis]));
            rPlane = HctSolver.criticalPlaneBelow(HctSolver.trueDelinearized(right[axis]));
          }
          for (let i3 = 0; i3 < 8; i3++) {
            if (Math.abs(rPlane - lPlane) <= 1) {
              break;
            } else {
              const mPlane = Math.floor((lPlane + rPlane) / 2);
              const midPlaneCoordinate = HctSolver.CRITICAL_PLANES[mPlane];
              const mid = HctSolver.setCoordinate(left, midPlaneCoordinate, right, axis);
              const midHue = HctSolver.hueOf(mid);
              if (HctSolver.areInCyclicOrder(leftHue, targetHue, midHue)) {
                right = mid;
                rPlane = mPlane;
              } else {
                left = mid;
                leftHue = midHue;
                lPlane = mPlane;
              }
            }
          }
        }
      }
      return HctSolver.midpoint(left, right);
    }
    static inverseChromaticAdaptation(adapted) {
      const adaptedAbs = Math.abs(adapted);
      const base = Math.max(0, 27.13 * adaptedAbs / (400 - adaptedAbs));
      return signum(adapted) * Math.pow(base, 1 / 0.42);
    }
    /**
     * Finds a color with the given hue, chroma, and Y.
     *
     * @param hueRadians The desired hue in radians.
     * @param chroma The desired chroma.
     * @param y The desired Y.
     * @return The desired color as a hexadecimal integer, if found; 0
     * otherwise.
     */
    static findResultByJ(hueRadians, chroma, y2) {
      let j2 = Math.sqrt(y2) * 11;
      const viewingConditions = ViewingConditions.DEFAULT;
      const tInnerCoeff = 1 / Math.pow(1.64 - Math.pow(0.29, viewingConditions.n), 0.73);
      const eHue = 0.25 * (Math.cos(hueRadians + 2) + 3.8);
      const p1 = eHue * (5e4 / 13) * viewingConditions.nc * viewingConditions.ncb;
      const hSin = Math.sin(hueRadians);
      const hCos = Math.cos(hueRadians);
      for (let iterationRound = 0; iterationRound < 5; iterationRound++) {
        const jNormalized = j2 / 100;
        const alpha = chroma === 0 || j2 === 0 ? 0 : chroma / Math.sqrt(jNormalized);
        const t2 = Math.pow(alpha * tInnerCoeff, 1 / 0.9);
        const ac = viewingConditions.aw * Math.pow(jNormalized, 1 / viewingConditions.c / viewingConditions.z);
        const p2 = ac / viewingConditions.nbb;
        const gamma = 23 * (p2 + 0.305) * t2 / (23 * p1 + 11 * t2 * hCos + 108 * t2 * hSin);
        const a2 = gamma * hCos;
        const b2 = gamma * hSin;
        const rA = (460 * p2 + 451 * a2 + 288 * b2) / 1403;
        const gA = (460 * p2 - 891 * a2 - 261 * b2) / 1403;
        const bA = (460 * p2 - 220 * a2 - 6300 * b2) / 1403;
        const rCScaled = HctSolver.inverseChromaticAdaptation(rA);
        const gCScaled = HctSolver.inverseChromaticAdaptation(gA);
        const bCScaled = HctSolver.inverseChromaticAdaptation(bA);
        const linrgb = matrixMultiply([rCScaled, gCScaled, bCScaled], HctSolver.LINRGB_FROM_SCALED_DISCOUNT);
        if (linrgb[0] < 0 || linrgb[1] < 0 || linrgb[2] < 0) {
          return 0;
        }
        const kR = HctSolver.Y_FROM_LINRGB[0];
        const kG = HctSolver.Y_FROM_LINRGB[1];
        const kB = HctSolver.Y_FROM_LINRGB[2];
        const fnj = kR * linrgb[0] + kG * linrgb[1] + kB * linrgb[2];
        if (fnj <= 0) {
          return 0;
        }
        if (iterationRound === 4 || Math.abs(fnj - y2) < 2e-3) {
          if (linrgb[0] > 100.01 || linrgb[1] > 100.01 || linrgb[2] > 100.01) {
            return 0;
          }
          return argbFromLinrgb(linrgb);
        }
        j2 = j2 - (fnj - y2) * j2 / (2 * fnj);
      }
      return 0;
    }
    /**
     * Finds an sRGB color with the given hue, chroma, and L*, if
     * possible.
     *
     * @param hueDegrees The desired hue, in degrees.
     * @param chroma The desired chroma.
     * @param lstar The desired L*.
     * @return A hexadecimal representing the sRGB color. The color
     * has sufficiently close hue, chroma, and L* to the desired
     * values, if possible; otherwise, the hue and L* will be
     * sufficiently close, and chroma will be maximized.
     */
    static solveToInt(hueDegrees, chroma, lstar) {
      if (chroma < 1e-4 || lstar < 1e-4 || lstar > 99.9999) {
        return argbFromLstar(lstar);
      }
      hueDegrees = sanitizeDegreesDouble(hueDegrees);
      const hueRadians = hueDegrees / 180 * Math.PI;
      const y2 = yFromLstar(lstar);
      const exactAnswer = HctSolver.findResultByJ(hueRadians, chroma, y2);
      if (exactAnswer !== 0) {
        return exactAnswer;
      }
      const linrgb = HctSolver.bisectToLimit(y2, hueRadians);
      return argbFromLinrgb(linrgb);
    }
    /**
     * Finds an sRGB color with the given hue, chroma, and L*, if
     * possible.
     *
     * @param hueDegrees The desired hue, in degrees.
     * @param chroma The desired chroma.
     * @param lstar The desired L*.
     * @return An CAM16 object representing the sRGB color. The color
     * has sufficiently close hue, chroma, and L* to the desired
     * values, if possible; otherwise, the hue and L* will be
     * sufficiently close, and chroma will be maximized.
     */
    static solveToCam(hueDegrees, chroma, lstar) {
      return Cam16.fromInt(HctSolver.solveToInt(hueDegrees, chroma, lstar));
    }
  }
  HctSolver.SCALED_DISCOUNT_FROM_LINRGB = [
    [
      0.001200833568784504,
      0.002389694492170889,
      2795742885861124e-19
    ],
    [
      5891086651375999e-19,
      0.0029785502573438758,
      3270666104008398e-19
    ],
    [
      10146692491640572e-20,
      5364214359186694e-19,
      0.0032979401770712076
    ]
  ];
  HctSolver.LINRGB_FROM_SCALED_DISCOUNT = [
    [
      1373.2198709594231,
      -1100.4251190754821,
      -7.278681089101213
    ],
    [
      -271.815969077903,
      559.6580465940733,
      -32.46047482791194
    ],
    [
      1.9622899599665666,
      -57.173814538844006,
      308.7233197812385
    ]
  ];
  HctSolver.Y_FROM_LINRGB = [0.2126, 0.7152, 0.0722];
  HctSolver.CRITICAL_PLANES = [
    0.015176349177441876,
    0.045529047532325624,
    0.07588174588720938,
    0.10623444424209313,
    0.13658714259697685,
    0.16693984095186062,
    0.19729253930674434,
    0.2276452376616281,
    0.2579979360165119,
    0.28835063437139563,
    0.3188300904430532,
    0.350925934958123,
    0.3848314933096426,
    0.42057480301049466,
    0.458183274052838,
    0.4976837250274023,
    0.5391024159806381,
    0.5824650784040898,
    0.6277969426914107,
    0.6751227633498623,
    0.7244668422128921,
    0.775853049866786,
    0.829304845476233,
    0.8848452951698498,
    0.942497089126609,
    1.0022825574869039,
    1.0642236851973577,
    1.1283421258858297,
    1.1946592148522128,
    1.2631959812511864,
    1.3339731595349034,
    1.407011200216447,
    1.4823302800086415,
    1.5599503113873272,
    1.6398909516233677,
    1.7221716113234105,
    1.8068114625156377,
    1.8938294463134073,
    1.9832442801866852,
    2.075074464868551,
    2.1693382909216234,
    2.2660538449872063,
    2.36523901573795,
    2.4669114995532007,
    2.5710888059345764,
    2.6777882626779785,
    2.7870270208169257,
    2.898822059350997,
    3.0131901897720907,
    3.1301480604002863,
    3.2497121605402226,
    3.3718988244681087,
    3.4967242352587946,
    3.624204428461639,
    3.754355295633311,
    3.887192587735158,
    4.022731918402185,
    4.160988767090289,
    4.301978482107941,
    4.445716283538092,
    4.592217266055746,
    4.741496401646282,
    4.893568542229298,
    5.048448422192488,
    5.20615066083972,
    5.3666897647573375,
    5.5300801301023865,
    5.696336044816294,
    5.865471690767354,
    6.037501145825082,
    6.212438385869475,
    6.390297286737924,
    6.571091626112461,
    6.7548350853498045,
    6.941541251256611,
    7.131223617812143,
    7.323895587840543,
    7.5195704746346665,
    7.7182615035334345,
    7.919981813454504,
    8.124744458384042,
    8.332562408825165,
    8.543448553206703,
    8.757415699253682,
    8.974476575321063,
    9.194643831691977,
    9.417930041841839,
    9.644347703669503,
    9.873909240696694,
    10.106627003236781,
    10.342513269534024,
    10.58158024687427,
    10.8238400726681,
    11.069304815507364,
    11.317986476196008,
    11.569896988756009,
    11.825048221409341,
    12.083451977536606,
    12.345119996613247,
    12.610063955123938,
    12.878295467455942,
    13.149826086772048,
    13.42466730586372,
    13.702830557985108,
    13.984327217668513,
    14.269168601521828,
    14.55736596900856,
    14.848930523210871,
    15.143873411576273,
    15.44220572664832,
    15.743938506781891,
    16.04908273684337,
    16.35764934889634,
    16.66964922287304,
    16.985093187232053,
    17.30399201960269,
    17.62635644741625,
    17.95219714852476,
    18.281524751807332,
    18.614349837764564,
    18.95068293910138,
    19.290534541298456,
    19.633915083172692,
    19.98083495742689,
    20.331304511189067,
    20.685334046541502,
    21.042933821039977,
    21.404114048223256,
    21.76888489811322,
    22.137256497705877,
    22.50923893145328,
    22.884842241736916,
    23.264076429332462,
    23.6469514538663,
    24.033477234264016,
    24.42366364919083,
    24.817520537484558,
    25.21505769858089,
    25.61628489293138,
    26.021211842414342,
    26.429848230738664,
    26.842203703840827,
    27.258287870275353,
    27.678110301598522,
    28.10168053274597,
    28.529008062403893,
    28.96010235337422,
    29.39497283293396,
    29.83362889318845,
    30.276079891419332,
    30.722335150426627,
    31.172403958865512,
    31.62629557157785,
    32.08401920991837,
    32.54558406207592,
    33.010999283389665,
    33.4802739966603,
    33.953417292456834,
    34.430438229418264,
    34.911345834551085,
    35.39614910352207,
    35.88485700094671,
    36.37747846067349,
    36.87402238606382,
    37.37449765026789,
    37.87891309649659,
    38.38727753828926,
    38.89959975977785,
    39.41588851594697,
    39.93615253289054,
    40.460400508064545,
    40.98864111053629,
    41.520882981230194,
    42.05713473317016,
    42.597404951718396,
    43.141702194811224,
    43.6900349931913,
    44.24241185063697,
    44.798841244188324,
    45.35933162437017,
    45.92389141541209,
    46.49252901546552,
    47.065252796817916,
    47.64207110610409,
    48.22299226451468,
    48.808024568002054,
    49.3971762874833,
    49.9904556690408,
    50.587870934119984,
    51.189430279724725,
    51.79514187861014,
    52.40501387947288,
    53.0190544071392,
    53.637271562750364,
    54.259673423945976,
    54.88626804504493,
    55.517063457223934,
    56.15206766869424,
    56.79128866487574,
    57.43473440856916,
    58.08241284012621,
    58.734331877617365,
    59.39049941699807,
    60.05092333227251,
    60.715611475655585,
    61.38457167773311,
    62.057811747619894,
    62.7353394731159,
    63.417162620860914,
    64.10328893648692,
    64.79372614476921,
    65.48848194977529,
    66.18756403501224,
    66.89098006357258,
    67.59873767827808,
    68.31084450182222,
    69.02730813691093,
    69.74813616640164,
    70.47333615344107,
    71.20291564160104,
    71.93688215501312,
    72.67524319850172,
    73.41800625771542,
    74.16517879925733,
    74.9167682708136,
    75.67278210128072,
    76.43322770089146,
    77.1981124613393,
    77.96744375590167,
    78.74122893956174,
    79.51947534912904,
    80.30219030335869,
    81.08938110306934,
    81.88105503125999,
    82.67721935322541,
    83.4778813166706,
    84.28304815182372,
    85.09272707154808,
    85.90692527145302,
    86.72564993000343,
    87.54890820862819,
    88.3767072518277,
    89.2090541872801,
    90.04595612594655,
    90.88742016217518,
    91.73345337380438,
    92.58406282226491,
    93.43925555268066,
    94.29903859396902,
    95.16341895893969,
    96.03240364439274,
    96.9059996312159,
    97.78421388448044,
    98.6670533535366,
    99.55452497210776
  ];
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class Hct {
    static from(hue, chroma, tone) {
      return new Hct(HctSolver.solveToInt(hue, chroma, tone));
    }
    /**
     * @param argb ARGB representation of a color.
     * @return HCT representation of a color in default viewing conditions
     */
    static fromInt(argb) {
      return new Hct(argb);
    }
    toInt() {
      return this.argb;
    }
    /**
     * A number, in degrees, representing ex. red, orange, yellow, etc.
     * Ranges from 0 <= hue < 360.
     */
    get hue() {
      return this.internalHue;
    }
    /**
     * @param newHue 0 <= newHue < 360; invalid values are corrected.
     * Chroma may decrease because chroma has a different maximum for any given
     * hue and tone.
     */
    set hue(newHue) {
      this.setInternalState(HctSolver.solveToInt(newHue, this.internalChroma, this.internalTone));
    }
    get chroma() {
      return this.internalChroma;
    }
    /**
     * @param newChroma 0 <= newChroma < ?
     * Chroma may decrease because chroma has a different maximum for any given
     * hue and tone.
     */
    set chroma(newChroma) {
      this.setInternalState(HctSolver.solveToInt(this.internalHue, newChroma, this.internalTone));
    }
    /** Lightness. Ranges from 0 to 100. */
    get tone() {
      return this.internalTone;
    }
    /**
     * @param newTone 0 <= newTone <= 100; invalid valids are corrected.
     * Chroma may decrease because chroma has a different maximum for any given
     * hue and tone.
     */
    set tone(newTone) {
      this.setInternalState(HctSolver.solveToInt(this.internalHue, this.internalChroma, newTone));
    }
    constructor(argb) {
      this.argb = argb;
      const cam = Cam16.fromInt(argb);
      this.internalHue = cam.hue;
      this.internalChroma = cam.chroma;
      this.internalTone = lstarFromArgb(argb);
      this.argb = argb;
    }
    setInternalState(argb) {
      const cam = Cam16.fromInt(argb);
      this.internalHue = cam.hue;
      this.internalChroma = cam.chroma;
      this.internalTone = lstarFromArgb(argb);
      this.argb = argb;
    }
    /**
     * Translates a color into different [ViewingConditions].
     *
     * Colors change appearance. They look different with lights on versus off,
     * the same color, as in hex code, on white looks different when on black.
     * This is called color relativity, most famously explicated by Josef Albers
     * in Interaction of Color.
     *
     * In color science, color appearance models can account for this and
     * calculate the appearance of a color in different settings. HCT is based on
     * CAM16, a color appearance model, and uses it to make these calculations.
     *
     * See [ViewingConditions.make] for parameters affecting color appearance.
     */
    inViewingConditions(vc) {
      const cam = Cam16.fromInt(this.toInt());
      const viewedInVc = cam.xyzInViewingConditions(vc);
      const recastInVc = Cam16.fromXyzInViewingConditions(viewedInVc[0], viewedInVc[1], viewedInVc[2], ViewingConditions.make());
      const recastHct = Hct.from(recastInVc.hue, recastInVc.chroma, lstarFromY(viewedInVc[1]));
      return recastHct;
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class Blend {
    /**
     * Blend the design color's HCT hue towards the key color's HCT
     * hue, in a way that leaves the original color recognizable and
     * recognizably shifted towards the key color.
     *
     * @param designColor ARGB representation of an arbitrary color.
     * @param sourceColor ARGB representation of the main theme color.
     * @return The design color with a hue shifted towards the
     * system's color, a slightly warmer/cooler variant of the design
     * color's hue.
     */
    static harmonize(designColor, sourceColor) {
      const fromHct = Hct.fromInt(designColor);
      const toHct = Hct.fromInt(sourceColor);
      const differenceDegrees$1 = differenceDegrees(fromHct.hue, toHct.hue);
      const rotationDegrees = Math.min(differenceDegrees$1 * 0.5, 15);
      const outputHue = sanitizeDegreesDouble(fromHct.hue + rotationDegrees * rotationDirection(fromHct.hue, toHct.hue));
      return Hct.from(outputHue, fromHct.chroma, fromHct.tone).toInt();
    }
    /**
     * Blends hue from one color into another. The chroma and tone of
     * the original color are maintained.
     *
     * @param from ARGB representation of color
     * @param to ARGB representation of color
     * @param amount how much blending to perform; 0.0 >= and <= 1.0
     * @return from, with a hue blended towards to. Chroma and tone
     * are constant.
     */
    static hctHue(from, to, amount) {
      const ucs = Blend.cam16Ucs(from, to, amount);
      const ucsCam = Cam16.fromInt(ucs);
      const fromCam = Cam16.fromInt(from);
      const blended = Hct.from(ucsCam.hue, fromCam.chroma, lstarFromArgb(from));
      return blended.toInt();
    }
    /**
     * Blend in CAM16-UCS space.
     *
     * @param from ARGB representation of color
     * @param to ARGB representation of color
     * @param amount how much blending to perform; 0.0 >= and <= 1.0
     * @return from, blended towards to. Hue, chroma, and tone will
     * change.
     */
    static cam16Ucs(from, to, amount) {
      const fromCam = Cam16.fromInt(from);
      const toCam = Cam16.fromInt(to);
      const fromJ = fromCam.jstar;
      const fromA = fromCam.astar;
      const fromB = fromCam.bstar;
      const toJ = toCam.jstar;
      const toA = toCam.astar;
      const toB = toCam.bstar;
      const jstar = fromJ + (toJ - fromJ) * amount;
      const astar = fromA + (toA - fromA) * amount;
      const bstar = fromB + (toB - fromB) * amount;
      return Cam16.fromUcs(jstar, astar, bstar).toInt();
    }
  }
  /**
   * @license
   * Copyright 2022 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class Contrast {
    /**
     * Returns a contrast ratio, which ranges from 1 to 21.
     *
     * @param toneA Tone between 0 and 100. Values outside will be clamped.
     * @param toneB Tone between 0 and 100. Values outside will be clamped.
     */
    static ratioOfTones(toneA, toneB) {
      toneA = clampDouble(0, 100, toneA);
      toneB = clampDouble(0, 100, toneB);
      return Contrast.ratioOfYs(yFromLstar(toneA), yFromLstar(toneB));
    }
    static ratioOfYs(y1, y2) {
      const lighter = y1 > y2 ? y1 : y2;
      const darker = lighter === y2 ? y1 : y2;
      return (lighter + 5) / (darker + 5);
    }
    /**
     * Returns a tone >= tone parameter that ensures ratio parameter.
     * Return value is between 0 and 100.
     * Returns -1 if ratio cannot be achieved with tone parameter.
     *
     * @param tone Tone return value must contrast with.
     * Range is 0 to 100. Invalid values will result in -1 being returned.
     * @param ratio Contrast ratio of return value and tone.
     * Range is 1 to 21, invalid values have undefined behavior.
     */
    static lighter(tone, ratio) {
      if (tone < 0 || tone > 100) {
        return -1;
      }
      const darkY = yFromLstar(tone);
      const lightY = ratio * (darkY + 5) - 5;
      const realContrast = Contrast.ratioOfYs(lightY, darkY);
      const delta = Math.abs(realContrast - ratio);
      if (realContrast < ratio && delta > 0.04) {
        return -1;
      }
      const returnValue = lstarFromY(lightY) + 0.4;
      if (returnValue < 0 || returnValue > 100) {
        return -1;
      }
      return returnValue;
    }
    /**
     * Returns a tone <= tone parameter that ensures ratio parameter.
     * Return value is between 0 and 100.
     * Returns -1 if ratio cannot be achieved with tone parameter.
     *
     * @param tone Tone return value must contrast with.
     * Range is 0 to 100. Invalid values will result in -1 being returned.
     * @param ratio Contrast ratio of return value and tone.
     * Range is 1 to 21, invalid values have undefined behavior.
     */
    static darker(tone, ratio) {
      if (tone < 0 || tone > 100) {
        return -1;
      }
      const lightY = yFromLstar(tone);
      const darkY = (lightY + 5) / ratio - 5;
      const realContrast = Contrast.ratioOfYs(lightY, darkY);
      const delta = Math.abs(realContrast - ratio);
      if (realContrast < ratio && delta > 0.04) {
        return -1;
      }
      const returnValue = lstarFromY(darkY) - 0.4;
      if (returnValue < 0 || returnValue > 100) {
        return -1;
      }
      return returnValue;
    }
    /**
     * Returns a tone >= tone parameter that ensures ratio parameter.
     * Return value is between 0 and 100.
     * Returns 100 if ratio cannot be achieved with tone parameter.
     *
     * This method is unsafe because the returned value is guaranteed to be in
     * bounds for tone, i.e. between 0 and 100. However, that value may not reach
     * the ratio with tone. For example, there is no color lighter than T100.
     *
     * @param tone Tone return value must contrast with.
     * Range is 0 to 100. Invalid values will result in 100 being returned.
     * @param ratio Desired contrast ratio of return value and tone parameter.
     * Range is 1 to 21, invalid values have undefined behavior.
     */
    static lighterUnsafe(tone, ratio) {
      const lighterSafe = Contrast.lighter(tone, ratio);
      return lighterSafe < 0 ? 100 : lighterSafe;
    }
    /**
     * Returns a tone >= tone parameter that ensures ratio parameter.
     * Return value is between 0 and 100.
     * Returns 100 if ratio cannot be achieved with tone parameter.
     *
     * This method is unsafe because the returned value is guaranteed to be in
     * bounds for tone, i.e. between 0 and 100. However, that value may not reach
     * the [ratio with [tone]. For example, there is no color darker than T0.
     *
     * @param tone Tone return value must contrast with.
     * Range is 0 to 100. Invalid values will result in 0 being returned.
     * @param ratio Desired contrast ratio of return value and tone parameter.
     * Range is 1 to 21, invalid values have undefined behavior.
     */
    static darkerUnsafe(tone, ratio) {
      const darkerSafe = Contrast.darker(tone, ratio);
      return darkerSafe < 0 ? 0 : darkerSafe;
    }
  }
  /**
   * @license
   * Copyright 2023 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class DislikeAnalyzer {
    /**
     * Returns true if a color is disliked.
     *
     * @param hct A color to be judged.
     * @return Whether the color is disliked.
     *
     * Disliked is defined as a dark yellow-green that is not neutral.
     */
    static isDisliked(hct) {
      const huePasses = Math.round(hct.hue) >= 90 && Math.round(hct.hue) <= 111;
      const chromaPasses = Math.round(hct.chroma) > 16;
      const tonePasses = Math.round(hct.tone) < 65;
      return huePasses && chromaPasses && tonePasses;
    }
    /**
     * If a color is disliked, lighten it to make it likable.
     *
     * @param hct A color to be judged.
     * @return A new color if the original color is disliked, or the original
     *   color if it is acceptable.
     */
    static fixIfDisliked(hct) {
      if (DislikeAnalyzer.isDisliked(hct)) {
        return Hct.from(hct.hue, hct.chroma, 70);
      }
      return hct;
    }
  }
  /**
   * @license
   * Copyright 2022 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class DynamicColor {
    /**
     * Create a DynamicColor defined by a TonalPalette and HCT tone.
     *
     * @param args Functions with DynamicScheme as input. Must provide a palette
     * and tone. May provide a background DynamicColor and ToneDeltaConstraint.
     */
    static fromPalette(args) {
      return new DynamicColor(args.name ?? "", args.palette, args.tone, args.isBackground ?? false, args.background, args.secondBackground, args.contrastCurve, args.toneDeltaPair);
    }
    /**
     * The base constructor for DynamicColor.
     *
     * _Strongly_ prefer using one of the convenience constructors. This class is
     * arguably too flexible to ensure it can support any scenario. Functional
     * arguments allow  overriding without risks that come with subclasses.
     *
     * For example, the default behavior of adjust tone at max contrast
     * to be at a 7.0 ratio with its background is principled and
     * matches accessibility guidance. That does not mean it's the desired
     * approach for _every_ design system, and every color pairing,
     * always, in every case.
     *
     * @param name The name of the dynamic color. Defaults to empty.
     * @param palette Function that provides a TonalPalette given
     * DynamicScheme. A TonalPalette is defined by a hue and chroma, so this
     * replaces the need to specify hue/chroma. By providing a tonal palette, when
     * contrast adjustments are made, intended chroma can be preserved.
     * @param tone Function that provides a tone, given a DynamicScheme.
     * @param isBackground Whether this dynamic color is a background, with
     * some other color as the foreground. Defaults to false.
     * @param background The background of the dynamic color (as a function of a
     *     `DynamicScheme`), if it exists.
     * @param secondBackground A second background of the dynamic color (as a
     *     function of a `DynamicScheme`), if it
     * exists.
     * @param contrastCurve A `ContrastCurve` object specifying how its contrast
     * against its background should behave in various contrast levels options.
     * @param toneDeltaPair A `ToneDeltaPair` object specifying a tone delta
     * constraint between two colors. One of them must be the color being
     * constructed.
     */
    constructor(name, palette, tone, isBackground, background, secondBackground, contrastCurve, toneDeltaPair) {
      this.name = name;
      this.palette = palette;
      this.tone = tone;
      this.isBackground = isBackground;
      this.background = background;
      this.secondBackground = secondBackground;
      this.contrastCurve = contrastCurve;
      this.toneDeltaPair = toneDeltaPair;
      this.hctCache = /* @__PURE__ */ new Map();
      if (!background && secondBackground) {
        throw new Error(`Color ${name} has secondBackgrounddefined, but background is not defined.`);
      }
      if (!background && contrastCurve) {
        throw new Error(`Color ${name} has contrastCurvedefined, but background is not defined.`);
      }
      if (background && !contrastCurve) {
        throw new Error(`Color ${name} has backgrounddefined, but contrastCurve is not defined.`);
      }
    }
    /**
     * Return a ARGB integer (i.e. a hex code).
     *
     * @param scheme Defines the conditions of the user interface, for example,
     * whether or not it is dark mode or light mode, and what the desired
     * contrast level is.
     */
    getArgb(scheme) {
      return this.getHct(scheme).toInt();
    }
    /**
     * Return a color, expressed in the HCT color space, that this
     * DynamicColor is under the conditions in scheme.
     *
     * @param scheme Defines the conditions of the user interface, for example,
     * whether or not it is dark mode or light mode, and what the desired
     * contrast level is.
     */
    getHct(scheme) {
      const cachedAnswer = this.hctCache.get(scheme);
      if (cachedAnswer != null) {
        return cachedAnswer;
      }
      const tone = this.getTone(scheme);
      const answer = this.palette(scheme).getHct(tone);
      if (this.hctCache.size > 4) {
        this.hctCache.clear();
      }
      this.hctCache.set(scheme, answer);
      return answer;
    }
    /**
     * Return a tone, T in the HCT color space, that this DynamicColor is under
     * the conditions in scheme.
     *
     * @param scheme Defines the conditions of the user interface, for example,
     * whether or not it is dark mode or light mode, and what the desired
     * contrast level is.
     */
    getTone(scheme) {
      const decreasingContrast = scheme.contrastLevel < 0;
      if (this.toneDeltaPair) {
        const toneDeltaPair = this.toneDeltaPair(scheme);
        const roleA = toneDeltaPair.roleA;
        const roleB = toneDeltaPair.roleB;
        const delta = toneDeltaPair.delta;
        const polarity = toneDeltaPair.polarity;
        const stayTogether = toneDeltaPair.stayTogether;
        const bg = this.background(scheme);
        const bgTone = bg.getTone(scheme);
        const aIsNearer = polarity === "nearer" || polarity === "lighter" && !scheme.isDark || polarity === "darker" && scheme.isDark;
        const nearer = aIsNearer ? roleA : roleB;
        const farther = aIsNearer ? roleB : roleA;
        const amNearer = this.name === nearer.name;
        const expansionDir = scheme.isDark ? 1 : -1;
        const nContrast = nearer.contrastCurve.get(scheme.contrastLevel);
        const fContrast = farther.contrastCurve.get(scheme.contrastLevel);
        const nInitialTone = nearer.tone(scheme);
        let nTone = Contrast.ratioOfTones(bgTone, nInitialTone) >= nContrast ? nInitialTone : DynamicColor.foregroundTone(bgTone, nContrast);
        const fInitialTone = farther.tone(scheme);
        let fTone = Contrast.ratioOfTones(bgTone, fInitialTone) >= fContrast ? fInitialTone : DynamicColor.foregroundTone(bgTone, fContrast);
        if (decreasingContrast) {
          nTone = DynamicColor.foregroundTone(bgTone, nContrast);
          fTone = DynamicColor.foregroundTone(bgTone, fContrast);
        }
        if ((fTone - nTone) * expansionDir >= delta) ;
        else {
          fTone = clampDouble(0, 100, nTone + delta * expansionDir);
          if ((fTone - nTone) * expansionDir >= delta) ;
          else {
            nTone = clampDouble(0, 100, fTone - delta * expansionDir);
          }
        }
        if (50 <= nTone && nTone < 60) {
          if (expansionDir > 0) {
            nTone = 60;
            fTone = Math.max(fTone, nTone + delta * expansionDir);
          } else {
            nTone = 49;
            fTone = Math.min(fTone, nTone + delta * expansionDir);
          }
        } else if (50 <= fTone && fTone < 60) {
          if (stayTogether) {
            if (expansionDir > 0) {
              nTone = 60;
              fTone = Math.max(fTone, nTone + delta * expansionDir);
            } else {
              nTone = 49;
              fTone = Math.min(fTone, nTone + delta * expansionDir);
            }
          } else {
            if (expansionDir > 0) {
              fTone = 60;
            } else {
              fTone = 49;
            }
          }
        }
        return amNearer ? nTone : fTone;
      } else {
        let answer = this.tone(scheme);
        if (this.background == null) {
          return answer;
        }
        const bgTone = this.background(scheme).getTone(scheme);
        const desiredRatio = this.contrastCurve.get(scheme.contrastLevel);
        if (Contrast.ratioOfTones(bgTone, answer) >= desiredRatio) ;
        else {
          answer = DynamicColor.foregroundTone(bgTone, desiredRatio);
        }
        if (decreasingContrast) {
          answer = DynamicColor.foregroundTone(bgTone, desiredRatio);
        }
        if (this.isBackground && 50 <= answer && answer < 60) {
          if (Contrast.ratioOfTones(49, bgTone) >= desiredRatio) {
            answer = 49;
          } else {
            answer = 60;
          }
        }
        if (this.secondBackground) {
          const [bg1, bg2] = [this.background, this.secondBackground];
          const [bgTone1, bgTone2] = [bg1(scheme).getTone(scheme), bg2(scheme).getTone(scheme)];
          const [upper, lower] = [Math.max(bgTone1, bgTone2), Math.min(bgTone1, bgTone2)];
          if (Contrast.ratioOfTones(upper, answer) >= desiredRatio && Contrast.ratioOfTones(lower, answer) >= desiredRatio) {
            return answer;
          }
          const lightOption = Contrast.lighter(upper, desiredRatio);
          const darkOption = Contrast.darker(lower, desiredRatio);
          const availables = [];
          if (lightOption !== -1)
            availables.push(lightOption);
          if (darkOption !== -1)
            availables.push(darkOption);
          const prefersLight = DynamicColor.tonePrefersLightForeground(bgTone1) || DynamicColor.tonePrefersLightForeground(bgTone2);
          if (prefersLight) {
            return lightOption < 0 ? 100 : lightOption;
          }
          if (availables.length === 1) {
            return availables[0];
          }
          return darkOption < 0 ? 0 : darkOption;
        }
        return answer;
      }
    }
    /**
     * Given a background tone, find a foreground tone, while ensuring they reach
     * a contrast ratio that is as close to [ratio] as possible.
     *
     * @param bgTone Tone in HCT. Range is 0 to 100, undefined behavior when it
     *     falls outside that range.
     * @param ratio The contrast ratio desired between bgTone and the return
     *     value.
     */
    static foregroundTone(bgTone, ratio) {
      const lighterTone = Contrast.lighterUnsafe(bgTone, ratio);
      const darkerTone = Contrast.darkerUnsafe(bgTone, ratio);
      const lighterRatio = Contrast.ratioOfTones(lighterTone, bgTone);
      const darkerRatio = Contrast.ratioOfTones(darkerTone, bgTone);
      const preferLighter = DynamicColor.tonePrefersLightForeground(bgTone);
      if (preferLighter) {
        const negligibleDifference = Math.abs(lighterRatio - darkerRatio) < 0.1 && lighterRatio < ratio && darkerRatio < ratio;
        return lighterRatio >= ratio || lighterRatio >= darkerRatio || negligibleDifference ? lighterTone : darkerTone;
      } else {
        return darkerRatio >= ratio || darkerRatio >= lighterRatio ? darkerTone : lighterTone;
      }
    }
    /**
     * Returns whether [tone] prefers a light foreground.
     *
     * People prefer white foregrounds on ~T60-70. Observed over time, and also
     * by Andrew Somers during research for APCA.
     *
     * T60 used as to create the smallest discontinuity possible when skipping
     * down to T49 in order to ensure light foregrounds.
     * Since `tertiaryContainer` in dark monochrome scheme requires a tone of
     * 60, it should not be adjusted. Therefore, 60 is excluded here.
     */
    static tonePrefersLightForeground(tone) {
      return Math.round(tone) < 60;
    }
    /**
     * Returns whether [tone] can reach a contrast ratio of 4.5 with a lighter
     * color.
     */
    static toneAllowsLightForeground(tone) {
      return Math.round(tone) <= 49;
    }
    /**
     * Adjust a tone such that white has 4.5 contrast, if the tone is
     * reasonably close to supporting it.
     */
    static enableLightForeground(tone) {
      if (DynamicColor.tonePrefersLightForeground(tone) && !DynamicColor.toneAllowsLightForeground(tone)) {
        return 49;
      }
      return tone;
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class TonalPalette {
    /**
     * @param argb ARGB representation of a color
     * @return Tones matching that color's hue and chroma.
     */
    static fromInt(argb) {
      const hct = Hct.fromInt(argb);
      return TonalPalette.fromHct(hct);
    }
    /**
     * @param hct Hct
     * @return Tones matching that color's hue and chroma.
     */
    static fromHct(hct) {
      return new TonalPalette(hct.hue, hct.chroma, hct);
    }
    /**
     * @param hue HCT hue
     * @param chroma HCT chroma
     * @return Tones matching hue and chroma.
     */
    static fromHueAndChroma(hue, chroma) {
      const keyColor = new KeyColor(hue, chroma).create();
      return new TonalPalette(hue, chroma, keyColor);
    }
    constructor(hue, chroma, keyColor) {
      this.hue = hue;
      this.chroma = chroma;
      this.keyColor = keyColor;
      this.cache = /* @__PURE__ */ new Map();
    }
    /**
     * @param tone HCT tone, measured from 0 to 100.
     * @return ARGB representation of a color with that tone.
     */
    tone(tone) {
      let argb = this.cache.get(tone);
      if (argb === void 0) {
        argb = Hct.from(this.hue, this.chroma, tone).toInt();
        this.cache.set(tone, argb);
      }
      return argb;
    }
    /**
     * @param tone HCT tone.
     * @return HCT representation of a color with that tone.
     */
    getHct(tone) {
      return Hct.fromInt(this.tone(tone));
    }
  }
  class KeyColor {
    constructor(hue, requestedChroma) {
      this.hue = hue;
      this.requestedChroma = requestedChroma;
      this.chromaCache = /* @__PURE__ */ new Map();
      this.maxChromaValue = 200;
    }
    /**
     * Creates a key color from a [hue] and a [chroma].
     * The key color is the first tone, starting from T50, matching the given hue
     * and chroma.
     *
     * @return Key color [Hct]
     */
    create() {
      const pivotTone = 50;
      const toneStepSize = 1;
      const epsilon = 0.01;
      let lowerTone = 0;
      let upperTone = 100;
      while (lowerTone < upperTone) {
        const midTone = Math.floor((lowerTone + upperTone) / 2);
        const isAscending = this.maxChroma(midTone) < this.maxChroma(midTone + toneStepSize);
        const sufficientChroma = this.maxChroma(midTone) >= this.requestedChroma - epsilon;
        if (sufficientChroma) {
          if (Math.abs(lowerTone - pivotTone) < Math.abs(upperTone - pivotTone)) {
            upperTone = midTone;
          } else {
            if (lowerTone === midTone) {
              return Hct.from(this.hue, this.requestedChroma, lowerTone);
            }
            lowerTone = midTone;
          }
        } else {
          if (isAscending) {
            lowerTone = midTone + toneStepSize;
          } else {
            upperTone = midTone;
          }
        }
      }
      return Hct.from(this.hue, this.requestedChroma, lowerTone);
    }
    // Find the maximum chroma for a given tone
    maxChroma(tone) {
      if (this.chromaCache.has(tone)) {
        return this.chromaCache.get(tone);
      }
      const chroma = Hct.from(this.hue, this.maxChromaValue, tone).chroma;
      this.chromaCache.set(tone, chroma);
      return chroma;
    }
  }
  /**
   * @license
   * Copyright 2023 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class ContrastCurve {
    /**
     * Creates a `ContrastCurve` object.
     *
     * @param low Value for contrast level -1.0
     * @param normal Value for contrast level 0.0
     * @param medium Value for contrast level 0.5
     * @param high Value for contrast level 1.0
     */
    constructor(low, normal, medium, high) {
      this.low = low;
      this.normal = normal;
      this.medium = medium;
      this.high = high;
    }
    /**
     * Returns the value at a given contrast level.
     *
     * @param contrastLevel The contrast level. 0.0 is the default (normal); -1.0
     *     is the lowest; 1.0 is the highest.
     * @return The value. For contrast ratios, a number between 1.0 and 21.0.
     */
    get(contrastLevel) {
      if (contrastLevel <= -1) {
        return this.low;
      } else if (contrastLevel < 0) {
        return lerp(this.low, this.normal, (contrastLevel - -1) / 1);
      } else if (contrastLevel < 0.5) {
        return lerp(this.normal, this.medium, (contrastLevel - 0) / 0.5);
      } else if (contrastLevel < 1) {
        return lerp(this.medium, this.high, (contrastLevel - 0.5) / 0.5);
      } else {
        return this.high;
      }
    }
  }
  /**
   * @license
   * Copyright 2023 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class ToneDeltaPair {
    /**
     * Documents a constraint in tone distance between two DynamicColors.
     *
     * The polarity is an adjective that describes "A", compared to "B".
     *
     * For instance, ToneDeltaPair(A, B, 15, 'darker', stayTogether) states that
     * A's tone should be at least 15 darker than B's.
     *
     * 'nearer' and 'farther' describes closeness to the surface roles. For
     * instance, ToneDeltaPair(A, B, 10, 'nearer', stayTogether) states that A
     * should be 10 lighter than B in light mode, and 10 darker than B in dark
     * mode.
     *
     * @param roleA The first role in a pair.
     * @param roleB The second role in a pair.
     * @param delta Required difference between tones. Absolute value, negative
     * values have undefined behavior.
     * @param polarity The relative relation between tones of roleA and roleB,
     * as described above.
     * @param stayTogether Whether these two roles should stay on the same side of
     * the "awkward zone" (T50-59). This is necessary for certain cases where
     * one role has two backgrounds.
     */
    constructor(roleA, roleB, delta, polarity, stayTogether) {
      this.roleA = roleA;
      this.roleB = roleB;
      this.delta = delta;
      this.polarity = polarity;
      this.stayTogether = stayTogether;
    }
  }
  /**
   * @license
   * Copyright 2022 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  var Variant;
  (function(Variant2) {
    Variant2[Variant2["MONOCHROME"] = 0] = "MONOCHROME";
    Variant2[Variant2["NEUTRAL"] = 1] = "NEUTRAL";
    Variant2[Variant2["TONAL_SPOT"] = 2] = "TONAL_SPOT";
    Variant2[Variant2["VIBRANT"] = 3] = "VIBRANT";
    Variant2[Variant2["EXPRESSIVE"] = 4] = "EXPRESSIVE";
    Variant2[Variant2["FIDELITY"] = 5] = "FIDELITY";
    Variant2[Variant2["CONTENT"] = 6] = "CONTENT";
    Variant2[Variant2["RAINBOW"] = 7] = "RAINBOW";
    Variant2[Variant2["FRUIT_SALAD"] = 8] = "FRUIT_SALAD";
  })(Variant || (Variant = {}));
  /**
   * @license
   * Copyright 2022 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  function isFidelity(scheme) {
    return scheme.variant === Variant.FIDELITY || scheme.variant === Variant.CONTENT;
  }
  function isMonochrome(scheme) {
    return scheme.variant === Variant.MONOCHROME;
  }
  function findDesiredChromaByTone(hue, chroma, tone, byDecreasingTone) {
    let answer = tone;
    let closestToChroma = Hct.from(hue, chroma, tone);
    if (closestToChroma.chroma < chroma) {
      let chromaPeak = closestToChroma.chroma;
      while (closestToChroma.chroma < chroma) {
        answer += byDecreasingTone ? -1 : 1;
        const potentialSolution = Hct.from(hue, chroma, answer);
        if (chromaPeak > potentialSolution.chroma) {
          break;
        }
        if (Math.abs(potentialSolution.chroma - chroma) < 0.4) {
          break;
        }
        const potentialDelta = Math.abs(potentialSolution.chroma - chroma);
        const currentDelta = Math.abs(closestToChroma.chroma - chroma);
        if (potentialDelta < currentDelta) {
          closestToChroma = potentialSolution;
        }
        chromaPeak = Math.max(chromaPeak, potentialSolution.chroma);
      }
    }
    return answer;
  }
  class MaterialDynamicColors {
    static highestSurface(s2) {
      return s2.isDark ? MaterialDynamicColors.surfaceBright : MaterialDynamicColors.surfaceDim;
    }
  }
  MaterialDynamicColors.contentAccentToneDelta = 15;
  MaterialDynamicColors.primaryPaletteKeyColor = DynamicColor.fromPalette({
    name: "primary_palette_key_color",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => s2.primaryPalette.keyColor.tone
  });
  MaterialDynamicColors.secondaryPaletteKeyColor = DynamicColor.fromPalette({
    name: "secondary_palette_key_color",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => s2.secondaryPalette.keyColor.tone
  });
  MaterialDynamicColors.tertiaryPaletteKeyColor = DynamicColor.fromPalette({
    name: "tertiary_palette_key_color",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => s2.tertiaryPalette.keyColor.tone
  });
  MaterialDynamicColors.neutralPaletteKeyColor = DynamicColor.fromPalette({
    name: "neutral_palette_key_color",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.neutralPalette.keyColor.tone
  });
  MaterialDynamicColors.neutralVariantPaletteKeyColor = DynamicColor.fromPalette({
    name: "neutral_variant_palette_key_color",
    palette: (s2) => s2.neutralVariantPalette,
    tone: (s2) => s2.neutralVariantPalette.keyColor.tone
  });
  MaterialDynamicColors.background = DynamicColor.fromPalette({
    name: "background",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 6 : 98,
    isBackground: true
  });
  MaterialDynamicColors.onBackground = DynamicColor.fromPalette({
    name: "on_background",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 90 : 10,
    background: (s2) => MaterialDynamicColors.background,
    contrastCurve: new ContrastCurve(3, 3, 4.5, 7)
  });
  MaterialDynamicColors.surface = DynamicColor.fromPalette({
    name: "surface",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 6 : 98,
    isBackground: true
  });
  MaterialDynamicColors.surfaceDim = DynamicColor.fromPalette({
    name: "surface_dim",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 6 : new ContrastCurve(87, 87, 80, 75).get(s2.contrastLevel),
    isBackground: true
  });
  MaterialDynamicColors.surfaceBright = DynamicColor.fromPalette({
    name: "surface_bright",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(24, 24, 29, 34).get(s2.contrastLevel) : 98,
    isBackground: true
  });
  MaterialDynamicColors.surfaceContainerLowest = DynamicColor.fromPalette({
    name: "surface_container_lowest",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(4, 4, 2, 0).get(s2.contrastLevel) : 100,
    isBackground: true
  });
  MaterialDynamicColors.surfaceContainerLow = DynamicColor.fromPalette({
    name: "surface_container_low",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(10, 10, 11, 12).get(s2.contrastLevel) : new ContrastCurve(96, 96, 96, 95).get(s2.contrastLevel),
    isBackground: true
  });
  MaterialDynamicColors.surfaceContainer = DynamicColor.fromPalette({
    name: "surface_container",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(12, 12, 16, 20).get(s2.contrastLevel) : new ContrastCurve(94, 94, 92, 90).get(s2.contrastLevel),
    isBackground: true
  });
  MaterialDynamicColors.surfaceContainerHigh = DynamicColor.fromPalette({
    name: "surface_container_high",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(17, 17, 21, 25).get(s2.contrastLevel) : new ContrastCurve(92, 92, 88, 85).get(s2.contrastLevel),
    isBackground: true
  });
  MaterialDynamicColors.surfaceContainerHighest = DynamicColor.fromPalette({
    name: "surface_container_highest",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? new ContrastCurve(22, 22, 26, 30).get(s2.contrastLevel) : new ContrastCurve(90, 90, 84, 80).get(s2.contrastLevel),
    isBackground: true
  });
  MaterialDynamicColors.onSurface = DynamicColor.fromPalette({
    name: "on_surface",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 90 : 10,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.surfaceVariant = DynamicColor.fromPalette({
    name: "surface_variant",
    palette: (s2) => s2.neutralVariantPalette,
    tone: (s2) => s2.isDark ? 30 : 90,
    isBackground: true
  });
  MaterialDynamicColors.onSurfaceVariant = DynamicColor.fromPalette({
    name: "on_surface_variant",
    palette: (s2) => s2.neutralVariantPalette,
    tone: (s2) => s2.isDark ? 80 : 30,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.inverseSurface = DynamicColor.fromPalette({
    name: "inverse_surface",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 90 : 20
  });
  MaterialDynamicColors.inverseOnSurface = DynamicColor.fromPalette({
    name: "inverse_on_surface",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => s2.isDark ? 20 : 95,
    background: (s2) => MaterialDynamicColors.inverseSurface,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.outline = DynamicColor.fromPalette({
    name: "outline",
    palette: (s2) => s2.neutralVariantPalette,
    tone: (s2) => s2.isDark ? 60 : 50,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1.5, 3, 4.5, 7)
  });
  MaterialDynamicColors.outlineVariant = DynamicColor.fromPalette({
    name: "outline_variant",
    palette: (s2) => s2.neutralVariantPalette,
    tone: (s2) => s2.isDark ? 30 : 80,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5)
  });
  MaterialDynamicColors.shadow = DynamicColor.fromPalette({
    name: "shadow",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => 0
  });
  MaterialDynamicColors.scrim = DynamicColor.fromPalette({
    name: "scrim",
    palette: (s2) => s2.neutralPalette,
    tone: (s2) => 0
  });
  MaterialDynamicColors.surfaceTint = DynamicColor.fromPalette({
    name: "surface_tint",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => s2.isDark ? 80 : 40,
    isBackground: true
  });
  MaterialDynamicColors.primary = DynamicColor.fromPalette({
    name: "primary",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 100 : 0;
      }
      return s2.isDark ? 80 : 40;
    },
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(3, 4.5, 7, 7),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, "nearer", false)
  });
  MaterialDynamicColors.onPrimary = DynamicColor.fromPalette({
    name: "on_primary",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 10 : 90;
      }
      return s2.isDark ? 20 : 100;
    },
    background: (s2) => MaterialDynamicColors.primary,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.primaryContainer = DynamicColor.fromPalette({
    name: "primary_container",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => {
      if (isFidelity(s2)) {
        return s2.sourceColorHct.tone;
      }
      if (isMonochrome(s2)) {
        return s2.isDark ? 85 : 25;
      }
      return s2.isDark ? 30 : 90;
    },
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.primaryContainer, MaterialDynamicColors.primary, 10, "nearer", false)
  });
  MaterialDynamicColors.onPrimaryContainer = DynamicColor.fromPalette({
    name: "on_primary_container",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => {
      if (isFidelity(s2)) {
        return DynamicColor.foregroundTone(MaterialDynamicColors.primaryContainer.tone(s2), 4.5);
      }
      if (isMonochrome(s2)) {
        return s2.isDark ? 0 : 100;
      }
      return s2.isDark ? 90 : 30;
    },
    background: (s2) => MaterialDynamicColors.primaryContainer,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.inversePrimary = DynamicColor.fromPalette({
    name: "inverse_primary",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => s2.isDark ? 40 : 80,
    background: (s2) => MaterialDynamicColors.inverseSurface,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 7)
  });
  MaterialDynamicColors.secondary = DynamicColor.fromPalette({
    name: "secondary",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => s2.isDark ? 80 : 40,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(3, 4.5, 7, 7),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, "nearer", false)
  });
  MaterialDynamicColors.onSecondary = DynamicColor.fromPalette({
    name: "on_secondary",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 10 : 100;
      } else {
        return s2.isDark ? 20 : 100;
      }
    },
    background: (s2) => MaterialDynamicColors.secondary,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.secondaryContainer = DynamicColor.fromPalette({
    name: "secondary_container",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => {
      const initialTone = s2.isDark ? 30 : 90;
      if (isMonochrome(s2)) {
        return s2.isDark ? 30 : 85;
      }
      if (!isFidelity(s2)) {
        return initialTone;
      }
      return findDesiredChromaByTone(s2.secondaryPalette.hue, s2.secondaryPalette.chroma, initialTone, s2.isDark ? false : true);
    },
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.secondaryContainer, MaterialDynamicColors.secondary, 10, "nearer", false)
  });
  MaterialDynamicColors.onSecondaryContainer = DynamicColor.fromPalette({
    name: "on_secondary_container",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 90 : 10;
      }
      if (!isFidelity(s2)) {
        return s2.isDark ? 90 : 30;
      }
      return DynamicColor.foregroundTone(MaterialDynamicColors.secondaryContainer.tone(s2), 4.5);
    },
    background: (s2) => MaterialDynamicColors.secondaryContainer,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.tertiary = DynamicColor.fromPalette({
    name: "tertiary",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 90 : 25;
      }
      return s2.isDark ? 80 : 40;
    },
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(3, 4.5, 7, 7),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, "nearer", false)
  });
  MaterialDynamicColors.onTertiary = DynamicColor.fromPalette({
    name: "on_tertiary",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 10 : 90;
      }
      return s2.isDark ? 20 : 100;
    },
    background: (s2) => MaterialDynamicColors.tertiary,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.tertiaryContainer = DynamicColor.fromPalette({
    name: "tertiary_container",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 60 : 49;
      }
      if (!isFidelity(s2)) {
        return s2.isDark ? 30 : 90;
      }
      const proposedHct = s2.tertiaryPalette.getHct(s2.sourceColorHct.tone);
      return DislikeAnalyzer.fixIfDisliked(proposedHct).tone;
    },
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.tertiaryContainer, MaterialDynamicColors.tertiary, 10, "nearer", false)
  });
  MaterialDynamicColors.onTertiaryContainer = DynamicColor.fromPalette({
    name: "on_tertiary_container",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 0 : 100;
      }
      if (!isFidelity(s2)) {
        return s2.isDark ? 90 : 30;
      }
      return DynamicColor.foregroundTone(MaterialDynamicColors.tertiaryContainer.tone(s2), 4.5);
    },
    background: (s2) => MaterialDynamicColors.tertiaryContainer,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.error = DynamicColor.fromPalette({
    name: "error",
    palette: (s2) => s2.errorPalette,
    tone: (s2) => s2.isDark ? 80 : 40,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(3, 4.5, 7, 7),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, "nearer", false)
  });
  MaterialDynamicColors.onError = DynamicColor.fromPalette({
    name: "on_error",
    palette: (s2) => s2.errorPalette,
    tone: (s2) => s2.isDark ? 20 : 100,
    background: (s2) => MaterialDynamicColors.error,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.errorContainer = DynamicColor.fromPalette({
    name: "error_container",
    palette: (s2) => s2.errorPalette,
    tone: (s2) => s2.isDark ? 30 : 90,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.errorContainer, MaterialDynamicColors.error, 10, "nearer", false)
  });
  MaterialDynamicColors.onErrorContainer = DynamicColor.fromPalette({
    name: "on_error_container",
    palette: (s2) => s2.errorPalette,
    tone: (s2) => {
      if (isMonochrome(s2)) {
        return s2.isDark ? 90 : 10;
      }
      return s2.isDark ? 90 : 30;
    },
    background: (s2) => MaterialDynamicColors.errorContainer,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.primaryFixed = DynamicColor.fromPalette({
    name: "primary_fixed",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => isMonochrome(s2) ? 40 : 90,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.primaryFixedDim = DynamicColor.fromPalette({
    name: "primary_fixed_dim",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => isMonochrome(s2) ? 30 : 80,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.primaryFixed, MaterialDynamicColors.primaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.onPrimaryFixed = DynamicColor.fromPalette({
    name: "on_primary_fixed",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => isMonochrome(s2) ? 100 : 10,
    background: (s2) => MaterialDynamicColors.primaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.primaryFixed,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.onPrimaryFixedVariant = DynamicColor.fromPalette({
    name: "on_primary_fixed_variant",
    palette: (s2) => s2.primaryPalette,
    tone: (s2) => isMonochrome(s2) ? 90 : 30,
    background: (s2) => MaterialDynamicColors.primaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.primaryFixed,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.secondaryFixed = DynamicColor.fromPalette({
    name: "secondary_fixed",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => isMonochrome(s2) ? 80 : 90,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.secondaryFixedDim = DynamicColor.fromPalette({
    name: "secondary_fixed_dim",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => isMonochrome(s2) ? 70 : 80,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.secondaryFixed, MaterialDynamicColors.secondaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.onSecondaryFixed = DynamicColor.fromPalette({
    name: "on_secondary_fixed",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => 10,
    background: (s2) => MaterialDynamicColors.secondaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.secondaryFixed,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.onSecondaryFixedVariant = DynamicColor.fromPalette({
    name: "on_secondary_fixed_variant",
    palette: (s2) => s2.secondaryPalette,
    tone: (s2) => isMonochrome(s2) ? 25 : 30,
    background: (s2) => MaterialDynamicColors.secondaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.secondaryFixed,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  MaterialDynamicColors.tertiaryFixed = DynamicColor.fromPalette({
    name: "tertiary_fixed",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => isMonochrome(s2) ? 40 : 90,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.tertiaryFixedDim = DynamicColor.fromPalette({
    name: "tertiary_fixed_dim",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => isMonochrome(s2) ? 30 : 80,
    isBackground: true,
    background: (s2) => MaterialDynamicColors.highestSurface(s2),
    contrastCurve: new ContrastCurve(1, 1, 3, 4.5),
    toneDeltaPair: (s2) => new ToneDeltaPair(MaterialDynamicColors.tertiaryFixed, MaterialDynamicColors.tertiaryFixedDim, 10, "lighter", true)
  });
  MaterialDynamicColors.onTertiaryFixed = DynamicColor.fromPalette({
    name: "on_tertiary_fixed",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => isMonochrome(s2) ? 100 : 10,
    background: (s2) => MaterialDynamicColors.tertiaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.tertiaryFixed,
    contrastCurve: new ContrastCurve(4.5, 7, 11, 21)
  });
  MaterialDynamicColors.onTertiaryFixedVariant = DynamicColor.fromPalette({
    name: "on_tertiary_fixed_variant",
    palette: (s2) => s2.tertiaryPalette,
    tone: (s2) => isMonochrome(s2) ? 90 : 30,
    background: (s2) => MaterialDynamicColors.tertiaryFixedDim,
    secondBackground: (s2) => MaterialDynamicColors.tertiaryFixed,
    contrastCurve: new ContrastCurve(3, 4.5, 7, 11)
  });
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class CorePalette {
    /**
     * @param argb ARGB representation of a color
     */
    static of(argb) {
      return new CorePalette(argb, false);
    }
    /**
     * @param argb ARGB representation of a color
     */
    static contentOf(argb) {
      return new CorePalette(argb, true);
    }
    /**
     * Create a [CorePalette] from a set of colors
     */
    static fromColors(colors) {
      return CorePalette.createPaletteFromColors(false, colors);
    }
    /**
     * Create a content [CorePalette] from a set of colors
     */
    static contentFromColors(colors) {
      return CorePalette.createPaletteFromColors(true, colors);
    }
    static createPaletteFromColors(content, colors) {
      const palette = new CorePalette(colors.primary, content);
      if (colors.secondary) {
        const p2 = new CorePalette(colors.secondary, content);
        palette.a2 = p2.a1;
      }
      if (colors.tertiary) {
        const p2 = new CorePalette(colors.tertiary, content);
        palette.a3 = p2.a1;
      }
      if (colors.error) {
        const p2 = new CorePalette(colors.error, content);
        palette.error = p2.a1;
      }
      if (colors.neutral) {
        const p2 = new CorePalette(colors.neutral, content);
        palette.n1 = p2.n1;
      }
      if (colors.neutralVariant) {
        const p2 = new CorePalette(colors.neutralVariant, content);
        palette.n2 = p2.n2;
      }
      return palette;
    }
    constructor(argb, isContent) {
      const hct = Hct.fromInt(argb);
      const hue = hct.hue;
      const chroma = hct.chroma;
      if (isContent) {
        this.a1 = TonalPalette.fromHueAndChroma(hue, chroma);
        this.a2 = TonalPalette.fromHueAndChroma(hue, chroma / 3);
        this.a3 = TonalPalette.fromHueAndChroma(hue + 60, chroma / 2);
        this.n1 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 12, 4));
        this.n2 = TonalPalette.fromHueAndChroma(hue, Math.min(chroma / 6, 8));
      } else {
        this.a1 = TonalPalette.fromHueAndChroma(hue, Math.max(48, chroma));
        this.a2 = TonalPalette.fromHueAndChroma(hue, 16);
        this.a3 = TonalPalette.fromHueAndChroma(hue + 60, 24);
        this.n1 = TonalPalette.fromHueAndChroma(hue, 4);
        this.n2 = TonalPalette.fromHueAndChroma(hue, 8);
      }
      this.error = TonalPalette.fromHueAndChroma(25, 84);
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  class Scheme {
    get primary() {
      return this.props.primary;
    }
    get onPrimary() {
      return this.props.onPrimary;
    }
    get primaryContainer() {
      return this.props.primaryContainer;
    }
    get onPrimaryContainer() {
      return this.props.onPrimaryContainer;
    }
    get secondary() {
      return this.props.secondary;
    }
    get onSecondary() {
      return this.props.onSecondary;
    }
    get secondaryContainer() {
      return this.props.secondaryContainer;
    }
    get onSecondaryContainer() {
      return this.props.onSecondaryContainer;
    }
    get tertiary() {
      return this.props.tertiary;
    }
    get onTertiary() {
      return this.props.onTertiary;
    }
    get tertiaryContainer() {
      return this.props.tertiaryContainer;
    }
    get onTertiaryContainer() {
      return this.props.onTertiaryContainer;
    }
    get error() {
      return this.props.error;
    }
    get onError() {
      return this.props.onError;
    }
    get errorContainer() {
      return this.props.errorContainer;
    }
    get onErrorContainer() {
      return this.props.onErrorContainer;
    }
    get background() {
      return this.props.background;
    }
    get onBackground() {
      return this.props.onBackground;
    }
    get surface() {
      return this.props.surface;
    }
    get onSurface() {
      return this.props.onSurface;
    }
    get surfaceVariant() {
      return this.props.surfaceVariant;
    }
    get onSurfaceVariant() {
      return this.props.onSurfaceVariant;
    }
    get outline() {
      return this.props.outline;
    }
    get outlineVariant() {
      return this.props.outlineVariant;
    }
    get shadow() {
      return this.props.shadow;
    }
    get scrim() {
      return this.props.scrim;
    }
    get inverseSurface() {
      return this.props.inverseSurface;
    }
    get inverseOnSurface() {
      return this.props.inverseOnSurface;
    }
    get inversePrimary() {
      return this.props.inversePrimary;
    }
    /**
     * @param argb ARGB representation of a color.
     * @return Light Material color scheme, based on the color's hue.
     */
    static light(argb) {
      return Scheme.lightFromCorePalette(CorePalette.of(argb));
    }
    /**
     * @param argb ARGB representation of a color.
     * @return Dark Material color scheme, based on the color's hue.
     */
    static dark(argb) {
      return Scheme.darkFromCorePalette(CorePalette.of(argb));
    }
    /**
     * @param argb ARGB representation of a color.
     * @return Light Material content color scheme, based on the color's hue.
     */
    static lightContent(argb) {
      return Scheme.lightFromCorePalette(CorePalette.contentOf(argb));
    }
    /**
     * @param argb ARGB representation of a color.
     * @return Dark Material content color scheme, based on the color's hue.
     */
    static darkContent(argb) {
      return Scheme.darkFromCorePalette(CorePalette.contentOf(argb));
    }
    /**
     * Light scheme from core palette
     */
    static lightFromCorePalette(core) {
      return new Scheme({
        primary: core.a1.tone(40),
        onPrimary: core.a1.tone(100),
        primaryContainer: core.a1.tone(90),
        onPrimaryContainer: core.a1.tone(10),
        secondary: core.a2.tone(40),
        onSecondary: core.a2.tone(100),
        secondaryContainer: core.a2.tone(90),
        onSecondaryContainer: core.a2.tone(10),
        tertiary: core.a3.tone(40),
        onTertiary: core.a3.tone(100),
        tertiaryContainer: core.a3.tone(90),
        onTertiaryContainer: core.a3.tone(10),
        error: core.error.tone(40),
        onError: core.error.tone(100),
        errorContainer: core.error.tone(90),
        onErrorContainer: core.error.tone(10),
        background: core.n1.tone(99),
        onBackground: core.n1.tone(10),
        surface: core.n1.tone(99),
        onSurface: core.n1.tone(10),
        surfaceVariant: core.n2.tone(90),
        onSurfaceVariant: core.n2.tone(30),
        outline: core.n2.tone(50),
        outlineVariant: core.n2.tone(80),
        shadow: core.n1.tone(0),
        scrim: core.n1.tone(0),
        inverseSurface: core.n1.tone(20),
        inverseOnSurface: core.n1.tone(95),
        inversePrimary: core.a1.tone(80)
      });
    }
    /**
     * Dark scheme from core palette
     */
    static darkFromCorePalette(core) {
      return new Scheme({
        primary: core.a1.tone(80),
        onPrimary: core.a1.tone(20),
        primaryContainer: core.a1.tone(30),
        onPrimaryContainer: core.a1.tone(90),
        secondary: core.a2.tone(80),
        onSecondary: core.a2.tone(20),
        secondaryContainer: core.a2.tone(30),
        onSecondaryContainer: core.a2.tone(90),
        tertiary: core.a3.tone(80),
        onTertiary: core.a3.tone(20),
        tertiaryContainer: core.a3.tone(30),
        onTertiaryContainer: core.a3.tone(90),
        error: core.error.tone(80),
        onError: core.error.tone(20),
        errorContainer: core.error.tone(30),
        onErrorContainer: core.error.tone(80),
        background: core.n1.tone(10),
        onBackground: core.n1.tone(90),
        surface: core.n1.tone(10),
        onSurface: core.n1.tone(90),
        surfaceVariant: core.n2.tone(30),
        onSurfaceVariant: core.n2.tone(80),
        outline: core.n2.tone(60),
        outlineVariant: core.n2.tone(30),
        shadow: core.n1.tone(0),
        scrim: core.n1.tone(0),
        inverseSurface: core.n1.tone(90),
        inverseOnSurface: core.n1.tone(20),
        inversePrimary: core.a1.tone(40)
      });
    }
    constructor(props) {
      this.props = props;
    }
    toJSON() {
      return {
        ...this.props
      };
    }
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  function argbFromHex(hex) {
    hex = hex.replace("#", "");
    const isThree = hex.length === 3;
    const isSix = hex.length === 6;
    const isEight = hex.length === 8;
    if (!isThree && !isSix && !isEight) {
      throw new Error("unexpected hex " + hex);
    }
    let r3 = 0;
    let g2 = 0;
    let b2 = 0;
    if (isThree) {
      r3 = parseIntHex(hex.slice(0, 1).repeat(2));
      g2 = parseIntHex(hex.slice(1, 2).repeat(2));
      b2 = parseIntHex(hex.slice(2, 3).repeat(2));
    } else if (isSix) {
      r3 = parseIntHex(hex.slice(0, 2));
      g2 = parseIntHex(hex.slice(2, 4));
      b2 = parseIntHex(hex.slice(4, 6));
    } else if (isEight) {
      r3 = parseIntHex(hex.slice(2, 4));
      g2 = parseIntHex(hex.slice(4, 6));
      b2 = parseIntHex(hex.slice(6, 8));
    }
    return (255 << 24 | (r3 & 255) << 16 | (g2 & 255) << 8 | b2 & 255) >>> 0;
  }
  function parseIntHex(value) {
    return parseInt(value, 16);
  }
  /**
   * @license
   * Copyright 2021 Google LLC
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  function customColor(source2, color) {
    let value = color.value;
    const from = value;
    const to = source2;
    {
      value = Blend.harmonize(from, to);
    }
    const palette = CorePalette.of(value);
    const tones = palette.a1;
    return {
      color,
      value,
      light: {
        color: tones.tone(40),
        onColor: tones.tone(100),
        colorContainer: tones.tone(90),
        onColorContainer: tones.tone(10)
      },
      dark: {
        color: tones.tone(80),
        onColor: tones.tone(20),
        colorContainer: tones.tone(30),
        onColorContainer: tones.tone(90)
      }
    };
  }
  const getConfirmText = () => {
    return msg("OK");
  };
  const getCancelText = () => {
    return msg("Cancel");
  };
  const prompt = (options) => {
    const mergedOptions = Object.assign({}, {
      confirmText: getConfirmText(),
      cancelText: getCancelText(),
      onConfirm: returnTrue,
      onCancel: returnTrue,
      validator: returnTrue,
      textFieldOptions: {}
    }, options);
    const properties = [
      "headline",
      "description",
      "icon",
      "closeOnEsc",
      "closeOnOverlayClick",
      "stackedActions",
      "queue",
      "onOpen",
      "onOpened",
      "onClose",
      "onClosed",
      "onOverlayClick"
    ];
    const textField = new TextField();
    Object.entries(mergedOptions.textFieldOptions).forEach(([key2, value]) => {
      textField[key2] = value;
    });
    return new Promise((resolve, reject) => {
      let isResolve = false;
      const dialog$1 = dialog({
        ...Object.fromEntries(properties.filter((key2) => !isUndefined(mergedOptions[key2])).map((key2) => [key2, mergedOptions[key2]])),
        body: textField,
        actions: [
          {
            text: mergedOptions.cancelText,
            onClick: (dialog2) => {
              return mergedOptions.onCancel.call(dialog2, textField.value, dialog2);
            }
          },
          {
            text: mergedOptions.confirmText,
            onClick: (dialog2) => {
              const onConfirm = () => {
                const clickResult = mergedOptions.onConfirm.call(dialog2, textField.value, dialog2);
                if (isPromise(clickResult)) {
                  clickResult.then(() => {
                    isResolve = true;
                  });
                } else if (clickResult !== false) {
                  isResolve = true;
                }
                return clickResult;
              };
              textField.setCustomValidity("");
              if (!textField.reportValidity()) {
                return false;
              }
              const validateResult = mergedOptions.validator.call(textField, textField.value);
              if (isBoolean(validateResult) && !validateResult) {
                textField.setCustomValidity(" ");
                return false;
              }
              if (isString(validateResult)) {
                textField.setCustomValidity(validateResult);
                return false;
              }
              if (isPromise(validateResult)) {
                return new Promise((resolve2, reject2) => {
                  validateResult.then(resolve2).catch((reason) => {
                    textField.setCustomValidity(reason);
                    reject2(reason);
                  });
                });
              }
              return onConfirm();
            }
          }
        ]
      });
      if (!options.confirmText) {
        onLocaleReady(dialog$1, () => {
          $$1(dialog$1).find('[slot="action"]').last().text(getConfirmText());
        });
      }
      if (!options.cancelText) {
        onLocaleReady(dialog$1, () => {
          $$1(dialog$1).find('[slot="action"]').first().text(getCancelText());
        });
      }
      $$1(dialog$1).on("close", (e3) => {
        if (e3.target === dialog$1) {
          isResolve ? resolve(textField.value) : reject();
          offLocaleReady(dialog$1);
        }
      });
    });
  };
  const themeArr = ["light", "dark"];
  const prefix = "mdui-custom-color-scheme-";
  let themeIndex = 0;
  const rgbFromArgb = (source2) => {
    const red = redFromArgb(source2);
    const green = greenFromArgb(source2);
    const blue = blueFromArgb(source2);
    return [red, green, blue].join(", ");
  };
  const remove = (target) => {
    const $target = $$1(target);
    let classNames = $target.get().map((element) => Array.from(element.classList)).flat();
    classNames = unique(classNames).filter((className2) => className2.startsWith(prefix));
    $target.removeClass(classNames.join(" "));
    const unusedClassNames = classNames.filter((className2) => $$1(`.${className2}`).length === 0);
    $$1(unusedClassNames.map((i3) => `#${i3}`).join(",")).remove();
  };
  const setFromSource = (source2, options) => {
    const document2 = getDocument();
    const $target = $$1(document2.documentElement);
    const schemes = {
      light: Scheme.light(source2).toJSON(),
      dark: Scheme.dark(source2).toJSON()
    };
    const palette = CorePalette.of(source2);
    Object.assign(schemes.light, {
      "surface-dim": palette.n1.tone(87),
      "surface-bright": palette.n1.tone(98),
      "surface-container-lowest": palette.n1.tone(100),
      "surface-container-low": palette.n1.tone(96),
      "surface-container": palette.n1.tone(94),
      "surface-container-high": palette.n1.tone(92),
      "surface-container-highest": palette.n1.tone(90),
      "surface-tint-color": schemes.light.primary
    });
    Object.assign(schemes.dark, {
      "surface-dim": palette.n1.tone(6),
      "surface-bright": palette.n1.tone(24),
      "surface-container-lowest": palette.n1.tone(4),
      "surface-container-low": palette.n1.tone(10),
      "surface-container": palette.n1.tone(12),
      "surface-container-high": palette.n1.tone(17),
      "surface-container-highest": palette.n1.tone(22),
      "surface-tint-color": schemes.dark.primary
    });
    [].map((color) => {
      const name = toKebabCase(color.name);
      const custom2 = customColor(source2, {
        name,
        value: argbFromHex(color.value),
        blend: true
      });
      themeArr.forEach((theme) => {
        schemes[theme][name] = custom2[theme].color;
        schemes[theme][`on-${name}`] = custom2[theme].onColor;
        schemes[theme][`${name}-container`] = custom2[theme].colorContainer;
        schemes[theme][`on-${name}-container`] = custom2[theme].onColorContainer;
      });
    });
    const colorVar = (theme, callback) => {
      return Object.entries(schemes[theme]).map(([key2, value]) => callback(toKebabCase(key2), rgbFromArgb(value))).join("");
    };
    const className2 = prefix + `${source2}-${themeIndex++}`;
    const cssText = `.${className2} {
  ${colorVar("light", (token2, rgb) => `--mdui-color-${token2}-light: ${rgb};`)}
  ${colorVar("dark", (token2, rgb) => `--mdui-color-${token2}-dark: ${rgb};`)}
  ${colorVar("light", (token2) => `--mdui-color-${token2}: var(--mdui-color-${token2}-light);`)}

  color: rgb(var(--mdui-color-on-background));
  background-color: rgb(var(--mdui-color-background));
}

.mdui-theme-dark .${className2},
.mdui-theme-dark.${className2} {
  ${colorVar("dark", (token2) => `--mdui-color-${token2}: var(--mdui-color-${token2}-dark);`)}
}

@media (prefers-color-scheme: dark) {
  .mdui-theme-auto .${className2},
  .mdui-theme-auto.${className2} {
    ${colorVar("dark", (token2) => `--mdui-color-${token2}: var(--mdui-color-${token2}-dark);`)}
  }
}`;
    remove($target);
    $$1(document2.head).append(`<style id="${className2}">${cssText}</style>`);
    $target.addClass(className2);
  };
  const setColorScheme = (hex, options) => {
    const source2 = argbFromHex(hex);
    setFromSource(source2);
  };
  const queueName = "mdui.functions.snackbar.";
  let currentSnackbar = void 0;
  const snackbar = (options) => {
    const snackbar2 = new Snackbar();
    const $snackbar = $$1(snackbar2);
    Object.entries(options).forEach(([key2, value]) => {
      if (key2 === "message") {
        snackbar2.innerHTML = value;
      } else if ([
        "onClick",
        "onActionClick",
        "onOpen",
        "onOpened",
        "onClose",
        "onClosed"
      ].includes(key2)) {
        const eventName = toKebabCase(key2.slice(2));
        $snackbar.on(eventName, (e3) => {
          if (e3.target !== snackbar2) {
            return;
          }
          if (key2 === "onActionClick") {
            const actionClick = (options.onActionClick ?? returnTrue).call(snackbar2, snackbar2);
            if (isPromise(actionClick)) {
              snackbar2.actionLoading = true;
              actionClick.then(() => {
                snackbar2.open = false;
              }).finally(() => {
                snackbar2.actionLoading = false;
              });
            } else if (actionClick !== false) {
              snackbar2.open = false;
            }
          } else {
            value.call(snackbar2, snackbar2);
          }
        });
      } else {
        snackbar2[key2] = value;
      }
    });
    $snackbar.appendTo("body").on("closed", (e3) => {
      if (e3.target !== snackbar2) {
        return;
      }
      $snackbar.remove();
      if (options.queue) {
        currentSnackbar = void 0;
        dequeue(queueName + options.queue);
      }
    });
    if (!options.queue) {
      setTimeout(() => {
        snackbar2.open = true;
      });
    } else if (currentSnackbar) {
      queue(queueName + options.queue, () => {
        snackbar2.open = true;
        currentSnackbar = snackbar2;
      });
    } else {
      setTimeout(() => {
        snackbar2.open = true;
      });
      currentSnackbar = snackbar2;
    }
    return snackbar2;
  };
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
  function getDefaultExportFromCjs(x2) {
    return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
  }
  function commonjsRequire(path) {
    throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
  }
  var localforage$1 = { exports: {} };
  /*!
      localForage -- Offline Storage, Improved
      Version 1.10.0
      https://localforage.github.io/localForage
      (c) 2013-2017 Mozilla, Apache License 2.0
  */
  var hasRequiredLocalforage;
  function requireLocalforage() {
    if (hasRequiredLocalforage) return localforage$1.exports;
    hasRequiredLocalforage = 1;
    (function(module, exports) {
      (function(f2) {
        {
          module.exports = f2();
        }
      })(function() {
        return function e3(t2, n3, r3) {
          function s2(o3, u2) {
            if (!n3[o3]) {
              if (!t2[o3]) {
                var a2 = typeof commonjsRequire == "function" && commonjsRequire;
                if (!u2 && a2) return a2(o3, true);
                if (i3) return i3(o3, true);
                var f2 = new Error("Cannot find module '" + o3 + "'");
                throw f2.code = "MODULE_NOT_FOUND", f2;
              }
              var l2 = n3[o3] = { exports: {} };
              t2[o3][0].call(l2.exports, function(e4) {
                var n4 = t2[o3][1][e4];
                return s2(n4 ? n4 : e4);
              }, l2, l2.exports, e3, t2, n3, r3);
            }
            return n3[o3].exports;
          }
          var i3 = typeof commonjsRequire == "function" && commonjsRequire;
          for (var o2 = 0; o2 < r3.length; o2++) s2(r3[o2]);
          return s2;
        }({ 1: [function(_dereq_, module2, exports2) {
          (function(global2) {
            var Mutation = global2.MutationObserver || global2.WebKitMutationObserver;
            var scheduleDrain;
            {
              if (Mutation) {
                var called = 0;
                var observer2 = new Mutation(nextTick);
                var element = global2.document.createTextNode("");
                observer2.observe(element, {
                  characterData: true
                });
                scheduleDrain = function() {
                  element.data = called = ++called % 2;
                };
              } else if (!global2.setImmediate && typeof global2.MessageChannel !== "undefined") {
                var channel = new global2.MessageChannel();
                channel.port1.onmessage = nextTick;
                scheduleDrain = function() {
                  channel.port2.postMessage(0);
                };
              } else if ("document" in global2 && "onreadystatechange" in global2.document.createElement("script")) {
                scheduleDrain = function() {
                  var scriptEl = global2.document.createElement("script");
                  scriptEl.onreadystatechange = function() {
                    nextTick();
                    scriptEl.onreadystatechange = null;
                    scriptEl.parentNode.removeChild(scriptEl);
                    scriptEl = null;
                  };
                  global2.document.documentElement.appendChild(scriptEl);
                };
              } else {
                scheduleDrain = function() {
                  setTimeout(nextTick, 0);
                };
              }
            }
            var draining;
            var queue2 = [];
            function nextTick() {
              draining = true;
              var i3, oldQueue;
              var len = queue2.length;
              while (len) {
                oldQueue = queue2;
                queue2 = [];
                i3 = -1;
                while (++i3 < len) {
                  oldQueue[i3]();
                }
                len = queue2.length;
              }
              draining = false;
            }
            module2.exports = immediate;
            function immediate(task) {
              if (queue2.push(task) === 1 && !draining) {
                scheduleDrain();
              }
            }
          }).call(this, typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {});
        }, {}], 2: [function(_dereq_, module2, exports2) {
          var immediate = _dereq_(1);
          function INTERNAL() {
          }
          var handlers = {};
          var REJECTED = ["REJECTED"];
          var FULFILLED = ["FULFILLED"];
          var PENDING = ["PENDING"];
          module2.exports = Promise2;
          function Promise2(resolver) {
            if (typeof resolver !== "function") {
              throw new TypeError("resolver must be a function");
            }
            this.state = PENDING;
            this.queue = [];
            this.outcome = void 0;
            if (resolver !== INTERNAL) {
              safelyResolveThenable(this, resolver);
            }
          }
          Promise2.prototype["catch"] = function(onRejected) {
            return this.then(null, onRejected);
          };
          Promise2.prototype.then = function(onFulfilled, onRejected) {
            if (typeof onFulfilled !== "function" && this.state === FULFILLED || typeof onRejected !== "function" && this.state === REJECTED) {
              return this;
            }
            var promise = new this.constructor(INTERNAL);
            if (this.state !== PENDING) {
              var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
              unwrap(promise, resolver, this.outcome);
            } else {
              this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
            }
            return promise;
          };
          function QueueItem(promise, onFulfilled, onRejected) {
            this.promise = promise;
            if (typeof onFulfilled === "function") {
              this.onFulfilled = onFulfilled;
              this.callFulfilled = this.otherCallFulfilled;
            }
            if (typeof onRejected === "function") {
              this.onRejected = onRejected;
              this.callRejected = this.otherCallRejected;
            }
          }
          QueueItem.prototype.callFulfilled = function(value) {
            handlers.resolve(this.promise, value);
          };
          QueueItem.prototype.otherCallFulfilled = function(value) {
            unwrap(this.promise, this.onFulfilled, value);
          };
          QueueItem.prototype.callRejected = function(value) {
            handlers.reject(this.promise, value);
          };
          QueueItem.prototype.otherCallRejected = function(value) {
            unwrap(this.promise, this.onRejected, value);
          };
          function unwrap(promise, func, value) {
            immediate(function() {
              var returnValue;
              try {
                returnValue = func(value);
              } catch (e3) {
                return handlers.reject(promise, e3);
              }
              if (returnValue === promise) {
                handlers.reject(promise, new TypeError("Cannot resolve promise with itself"));
              } else {
                handlers.resolve(promise, returnValue);
              }
            });
          }
          handlers.resolve = function(self2, value) {
            var result = tryCatch(getThen, value);
            if (result.status === "error") {
              return handlers.reject(self2, result.value);
            }
            var thenable = result.value;
            if (thenable) {
              safelyResolveThenable(self2, thenable);
            } else {
              self2.state = FULFILLED;
              self2.outcome = value;
              var i3 = -1;
              var len = self2.queue.length;
              while (++i3 < len) {
                self2.queue[i3].callFulfilled(value);
              }
            }
            return self2;
          };
          handlers.reject = function(self2, error) {
            self2.state = REJECTED;
            self2.outcome = error;
            var i3 = -1;
            var len = self2.queue.length;
            while (++i3 < len) {
              self2.queue[i3].callRejected(error);
            }
            return self2;
          };
          function getThen(obj) {
            var then = obj && obj.then;
            if (obj && (typeof obj === "object" || typeof obj === "function") && typeof then === "function") {
              return function appyThen() {
                then.apply(obj, arguments);
              };
            }
          }
          function safelyResolveThenable(self2, thenable) {
            var called = false;
            function onError(value) {
              if (called) {
                return;
              }
              called = true;
              handlers.reject(self2, value);
            }
            function onSuccess(value) {
              if (called) {
                return;
              }
              called = true;
              handlers.resolve(self2, value);
            }
            function tryToUnwrap() {
              thenable(onSuccess, onError);
            }
            var result = tryCatch(tryToUnwrap);
            if (result.status === "error") {
              onError(result.value);
            }
          }
          function tryCatch(func, value) {
            var out = {};
            try {
              out.value = func(value);
              out.status = "success";
            } catch (e3) {
              out.status = "error";
              out.value = e3;
            }
            return out;
          }
          Promise2.resolve = resolve;
          function resolve(value) {
            if (value instanceof this) {
              return value;
            }
            return handlers.resolve(new this(INTERNAL), value);
          }
          Promise2.reject = reject;
          function reject(reason) {
            var promise = new this(INTERNAL);
            return handlers.reject(promise, reason);
          }
          Promise2.all = all;
          function all(iterable) {
            var self2 = this;
            if (Object.prototype.toString.call(iterable) !== "[object Array]") {
              return this.reject(new TypeError("must be an array"));
            }
            var len = iterable.length;
            var called = false;
            if (!len) {
              return this.resolve([]);
            }
            var values = new Array(len);
            var resolved = 0;
            var i3 = -1;
            var promise = new this(INTERNAL);
            while (++i3 < len) {
              allResolver(iterable[i3], i3);
            }
            return promise;
            function allResolver(value, i4) {
              self2.resolve(value).then(resolveFromAll, function(error) {
                if (!called) {
                  called = true;
                  handlers.reject(promise, error);
                }
              });
              function resolveFromAll(outValue) {
                values[i4] = outValue;
                if (++resolved === len && !called) {
                  called = true;
                  handlers.resolve(promise, values);
                }
              }
            }
          }
          Promise2.race = race;
          function race(iterable) {
            var self2 = this;
            if (Object.prototype.toString.call(iterable) !== "[object Array]") {
              return this.reject(new TypeError("must be an array"));
            }
            var len = iterable.length;
            var called = false;
            if (!len) {
              return this.resolve([]);
            }
            var i3 = -1;
            var promise = new this(INTERNAL);
            while (++i3 < len) {
              resolver(iterable[i3]);
            }
            return promise;
            function resolver(value) {
              self2.resolve(value).then(function(response) {
                if (!called) {
                  called = true;
                  handlers.resolve(promise, response);
                }
              }, function(error) {
                if (!called) {
                  called = true;
                  handlers.reject(promise, error);
                }
              });
            }
          }
        }, { "1": 1 }], 3: [function(_dereq_, module2, exports2) {
          (function(global2) {
            if (typeof global2.Promise !== "function") {
              global2.Promise = _dereq_(2);
            }
          }).call(this, typeof commonjsGlobal !== "undefined" ? commonjsGlobal : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {});
        }, { "2": 2 }], 4: [function(_dereq_, module2, exports2) {
          var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) {
            return typeof obj;
          } : function(obj) {
            return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
          };
          function _classCallCheck(instance, Constructor) {
            if (!(instance instanceof Constructor)) {
              throw new TypeError("Cannot call a class as a function");
            }
          }
          function getIDB() {
            try {
              if (typeof indexedDB !== "undefined") {
                return indexedDB;
              }
              if (typeof webkitIndexedDB !== "undefined") {
                return webkitIndexedDB;
              }
              if (typeof mozIndexedDB !== "undefined") {
                return mozIndexedDB;
              }
              if (typeof OIndexedDB !== "undefined") {
                return OIndexedDB;
              }
              if (typeof msIndexedDB !== "undefined") {
                return msIndexedDB;
              }
            } catch (e3) {
              return;
            }
          }
          var idb = getIDB();
          function isIndexedDBValid() {
            try {
              if (!idb || !idb.open) {
                return false;
              }
              var isSafari = typeof openDatabase !== "undefined" && /(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent) && !/BlackBerry/.test(navigator.platform);
              var hasFetch = typeof fetch === "function" && fetch.toString().indexOf("[native code") !== -1;
              return (!isSafari || hasFetch) && typeof indexedDB !== "undefined" && // some outdated implementations of IDB that appear on Samsung
              // and HTC Android devices <4.4 are missing IDBKeyRange
              // See: https://github.com/mozilla/localForage/issues/128
              // See: https://github.com/mozilla/localForage/issues/272
              typeof IDBKeyRange !== "undefined";
            } catch (e3) {
              return false;
            }
          }
          function createBlob(parts, properties) {
            parts = parts || [];
            properties = properties || {};
            try {
              return new Blob(parts, properties);
            } catch (e3) {
              if (e3.name !== "TypeError") {
                throw e3;
              }
              var Builder = typeof BlobBuilder !== "undefined" ? BlobBuilder : typeof MSBlobBuilder !== "undefined" ? MSBlobBuilder : typeof MozBlobBuilder !== "undefined" ? MozBlobBuilder : WebKitBlobBuilder;
              var builder = new Builder();
              for (var i3 = 0; i3 < parts.length; i3 += 1) {
                builder.append(parts[i3]);
              }
              return builder.getBlob(properties.type);
            }
          }
          if (typeof Promise === "undefined") {
            _dereq_(3);
          }
          var Promise$1 = Promise;
          function executeCallback(promise, callback) {
            if (callback) {
              promise.then(function(result) {
                callback(null, result);
              }, function(error) {
                callback(error);
              });
            }
          }
          function executeTwoCallbacks(promise, callback, errorCallback) {
            if (typeof callback === "function") {
              promise.then(callback);
            }
            if (typeof errorCallback === "function") {
              promise["catch"](errorCallback);
            }
          }
          function normalizeKey(key3) {
            if (typeof key3 !== "string") {
              console.warn(key3 + " used as a key, but it is not a string.");
              key3 = String(key3);
            }
            return key3;
          }
          function getCallback() {
            if (arguments.length && typeof arguments[arguments.length - 1] === "function") {
              return arguments[arguments.length - 1];
            }
          }
          var DETECT_BLOB_SUPPORT_STORE = "local-forage-detect-blob-support";
          var supportsBlobs = void 0;
          var dbContexts = {};
          var toString = Object.prototype.toString;
          var READ_ONLY = "readonly";
          var READ_WRITE = "readwrite";
          function _binStringToArrayBuffer(bin) {
            var length2 = bin.length;
            var buf = new ArrayBuffer(length2);
            var arr = new Uint8Array(buf);
            for (var i3 = 0; i3 < length2; i3++) {
              arr[i3] = bin.charCodeAt(i3);
            }
            return buf;
          }
          function _checkBlobSupportWithoutCaching(idb2) {
            return new Promise$1(function(resolve) {
              var txn = idb2.transaction(DETECT_BLOB_SUPPORT_STORE, READ_WRITE);
              var blob = createBlob([""]);
              txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob, "key");
              txn.onabort = function(e3) {
                e3.preventDefault();
                e3.stopPropagation();
                resolve(false);
              };
              txn.oncomplete = function() {
                var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/);
                var matchedEdge = navigator.userAgent.match(/Edge\//);
                resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);
              };
            })["catch"](function() {
              return false;
            });
          }
          function _checkBlobSupport(idb2) {
            if (typeof supportsBlobs === "boolean") {
              return Promise$1.resolve(supportsBlobs);
            }
            return _checkBlobSupportWithoutCaching(idb2).then(function(value) {
              supportsBlobs = value;
              return supportsBlobs;
            });
          }
          function _deferReadiness(dbInfo) {
            var dbContext = dbContexts[dbInfo.name];
            var deferredOperation = {};
            deferredOperation.promise = new Promise$1(function(resolve, reject) {
              deferredOperation.resolve = resolve;
              deferredOperation.reject = reject;
            });
            dbContext.deferredOperations.push(deferredOperation);
            if (!dbContext.dbReady) {
              dbContext.dbReady = deferredOperation.promise;
            } else {
              dbContext.dbReady = dbContext.dbReady.then(function() {
                return deferredOperation.promise;
              });
            }
          }
          function _advanceReadiness(dbInfo) {
            var dbContext = dbContexts[dbInfo.name];
            var deferredOperation = dbContext.deferredOperations.pop();
            if (deferredOperation) {
              deferredOperation.resolve();
              return deferredOperation.promise;
            }
          }
          function _rejectReadiness(dbInfo, err) {
            var dbContext = dbContexts[dbInfo.name];
            var deferredOperation = dbContext.deferredOperations.pop();
            if (deferredOperation) {
              deferredOperation.reject(err);
              return deferredOperation.promise;
            }
          }
          function _getConnection(dbInfo, upgradeNeeded) {
            return new Promise$1(function(resolve, reject) {
              dbContexts[dbInfo.name] = dbContexts[dbInfo.name] || createDbContext();
              if (dbInfo.db) {
                if (upgradeNeeded) {
                  _deferReadiness(dbInfo);
                  dbInfo.db.close();
                } else {
                  return resolve(dbInfo.db);
                }
              }
              var dbArgs = [dbInfo.name];
              if (upgradeNeeded) {
                dbArgs.push(dbInfo.version);
              }
              var openreq = idb.open.apply(idb, dbArgs);
              if (upgradeNeeded) {
                openreq.onupgradeneeded = function(e3) {
                  var db = openreq.result;
                  try {
                    db.createObjectStore(dbInfo.storeName);
                    if (e3.oldVersion <= 1) {
                      db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);
                    }
                  } catch (ex) {
                    if (ex.name === "ConstraintError") {
                      console.warn('The database "' + dbInfo.name + '" has been upgraded from version ' + e3.oldVersion + " to version " + e3.newVersion + ', but the storage "' + dbInfo.storeName + '" already exists.');
                    } else {
                      throw ex;
                    }
                  }
                };
              }
              openreq.onerror = function(e3) {
                e3.preventDefault();
                reject(openreq.error);
              };
              openreq.onsuccess = function() {
                var db = openreq.result;
                db.onversionchange = function(e3) {
                  e3.target.close();
                };
                resolve(db);
                _advanceReadiness(dbInfo);
              };
            });
          }
          function _getOriginalConnection(dbInfo) {
            return _getConnection(dbInfo, false);
          }
          function _getUpgradedConnection(dbInfo) {
            return _getConnection(dbInfo, true);
          }
          function _isUpgradeNeeded(dbInfo, defaultVersion) {
            if (!dbInfo.db) {
              return true;
            }
            var isNewStore = !dbInfo.db.objectStoreNames.contains(dbInfo.storeName);
            var isDowngrade = dbInfo.version < dbInfo.db.version;
            var isUpgrade = dbInfo.version > dbInfo.db.version;
            if (isDowngrade) {
              if (dbInfo.version !== defaultVersion) {
                console.warn('The database "' + dbInfo.name + `" can't be downgraded from version ` + dbInfo.db.version + " to version " + dbInfo.version + ".");
              }
              dbInfo.version = dbInfo.db.version;
            }
            if (isUpgrade || isNewStore) {
              if (isNewStore) {
                var incVersion = dbInfo.db.version + 1;
                if (incVersion > dbInfo.version) {
                  dbInfo.version = incVersion;
                }
              }
              return true;
            }
            return false;
          }
          function _encodeBlob(blob) {
            return new Promise$1(function(resolve, reject) {
              var reader = new FileReader();
              reader.onerror = reject;
              reader.onloadend = function(e3) {
                var base64 = btoa(e3.target.result || "");
                resolve({
                  __local_forage_encoded_blob: true,
                  data: base64,
                  type: blob.type
                });
              };
              reader.readAsBinaryString(blob);
            });
          }
          function _decodeBlob(encodedBlob) {
            var arrayBuff = _binStringToArrayBuffer(atob(encodedBlob.data));
            return createBlob([arrayBuff], { type: encodedBlob.type });
          }
          function _isEncodedBlob(value) {
            return value && value.__local_forage_encoded_blob;
          }
          function _fullyReady(callback) {
            var self2 = this;
            var promise = self2._initReady().then(function() {
              var dbContext = dbContexts[self2._dbInfo.name];
              if (dbContext && dbContext.dbReady) {
                return dbContext.dbReady;
              }
            });
            executeTwoCallbacks(promise, callback, callback);
            return promise;
          }
          function _tryReconnect(dbInfo) {
            _deferReadiness(dbInfo);
            var dbContext = dbContexts[dbInfo.name];
            var forages = dbContext.forages;
            for (var i3 = 0; i3 < forages.length; i3++) {
              var forage = forages[i3];
              if (forage._dbInfo.db) {
                forage._dbInfo.db.close();
                forage._dbInfo.db = null;
              }
            }
            dbInfo.db = null;
            return _getOriginalConnection(dbInfo).then(function(db) {
              dbInfo.db = db;
              if (_isUpgradeNeeded(dbInfo)) {
                return _getUpgradedConnection(dbInfo);
              }
              return db;
            }).then(function(db) {
              dbInfo.db = dbContext.db = db;
              for (var i4 = 0; i4 < forages.length; i4++) {
                forages[i4]._dbInfo.db = db;
              }
            })["catch"](function(err) {
              _rejectReadiness(dbInfo, err);
              throw err;
            });
          }
          function createTransaction(dbInfo, mode, callback, retries) {
            if (retries === void 0) {
              retries = 1;
            }
            try {
              var tx = dbInfo.db.transaction(dbInfo.storeName, mode);
              callback(null, tx);
            } catch (err) {
              if (retries > 0 && (!dbInfo.db || err.name === "InvalidStateError" || err.name === "NotFoundError")) {
                return Promise$1.resolve().then(function() {
                  if (!dbInfo.db || err.name === "NotFoundError" && !dbInfo.db.objectStoreNames.contains(dbInfo.storeName) && dbInfo.version <= dbInfo.db.version) {
                    if (dbInfo.db) {
                      dbInfo.version = dbInfo.db.version + 1;
                    }
                    return _getUpgradedConnection(dbInfo);
                  }
                }).then(function() {
                  return _tryReconnect(dbInfo).then(function() {
                    createTransaction(dbInfo, mode, callback, retries - 1);
                  });
                })["catch"](callback);
              }
              callback(err);
            }
          }
          function createDbContext() {
            return {
              // Running localForages sharing a database.
              forages: [],
              // Shared database.
              db: null,
              // Database readiness (promise).
              dbReady: null,
              // Deferred operations on the database.
              deferredOperations: []
            };
          }
          function _initStorage(options) {
            var self2 = this;
            var dbInfo = {
              db: null
            };
            if (options) {
              for (var i3 in options) {
                dbInfo[i3] = options[i3];
              }
            }
            var dbContext = dbContexts[dbInfo.name];
            if (!dbContext) {
              dbContext = createDbContext();
              dbContexts[dbInfo.name] = dbContext;
            }
            dbContext.forages.push(self2);
            if (!self2._initReady) {
              self2._initReady = self2.ready;
              self2.ready = _fullyReady;
            }
            var initPromises = [];
            function ignoreErrors() {
              return Promise$1.resolve();
            }
            for (var j2 = 0; j2 < dbContext.forages.length; j2++) {
              var forage = dbContext.forages[j2];
              if (forage !== self2) {
                initPromises.push(forage._initReady()["catch"](ignoreErrors));
              }
            }
            var forages = dbContext.forages.slice(0);
            return Promise$1.all(initPromises).then(function() {
              dbInfo.db = dbContext.db;
              return _getOriginalConnection(dbInfo);
            }).then(function(db) {
              dbInfo.db = db;
              if (_isUpgradeNeeded(dbInfo, self2._defaultConfig.version)) {
                return _getUpgradedConnection(dbInfo);
              }
              return db;
            }).then(function(db) {
              dbInfo.db = dbContext.db = db;
              self2._dbInfo = dbInfo;
              for (var k2 = 0; k2 < forages.length; k2++) {
                var forage2 = forages[k2];
                if (forage2 !== self2) {
                  forage2._dbInfo.db = dbInfo.db;
                  forage2._dbInfo.version = dbInfo.version;
                }
              }
            });
          }
          function getItem(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store.get(key3);
                    req.onsuccess = function() {
                      var value = req.result;
                      if (value === void 0) {
                        value = null;
                      }
                      if (_isEncodedBlob(value)) {
                        value = _decodeBlob(value);
                      }
                      resolve(value);
                    };
                    req.onerror = function() {
                      reject(req.error);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function iterate(iterator, callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store.openCursor();
                    var iterationNumber = 1;
                    req.onsuccess = function() {
                      var cursor = req.result;
                      if (cursor) {
                        var value = cursor.value;
                        if (_isEncodedBlob(value)) {
                          value = _decodeBlob(value);
                        }
                        var result = iterator(value, cursor.key, iterationNumber++);
                        if (result !== void 0) {
                          resolve(result);
                        } else {
                          cursor["continue"]();
                        }
                      } else {
                        resolve();
                      }
                    };
                    req.onerror = function() {
                      reject(req.error);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function setItem(key3, value, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              var dbInfo;
              self2.ready().then(function() {
                dbInfo = self2._dbInfo;
                if (toString.call(value) === "[object Blob]") {
                  return _checkBlobSupport(dbInfo.db).then(function(blobSupport) {
                    if (blobSupport) {
                      return value;
                    }
                    return _encodeBlob(value);
                  });
                }
                return value;
              }).then(function(value2) {
                createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    if (value2 === null) {
                      value2 = void 0;
                    }
                    var req = store.put(value2, key3);
                    transaction.oncomplete = function() {
                      if (value2 === void 0) {
                        value2 = null;
                      }
                      resolve(value2);
                    };
                    transaction.onabort = transaction.onerror = function() {
                      var err2 = req.error ? req.error : req.transaction.error;
                      reject(err2);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function removeItem(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store["delete"](key3);
                    transaction.oncomplete = function() {
                      resolve();
                    };
                    transaction.onerror = function() {
                      reject(req.error);
                    };
                    transaction.onabort = function() {
                      var err2 = req.error ? req.error : req.transaction.error;
                      reject(err2);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function clear(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_WRITE, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store.clear();
                    transaction.oncomplete = function() {
                      resolve();
                    };
                    transaction.onabort = transaction.onerror = function() {
                      var err2 = req.error ? req.error : req.transaction.error;
                      reject(err2);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function length(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store.count();
                    req.onsuccess = function() {
                      resolve(req.result);
                    };
                    req.onerror = function() {
                      reject(req.error);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function key2(n3, callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              if (n3 < 0) {
                resolve(null);
                return;
              }
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var advanced = false;
                    var req = store.openKeyCursor();
                    req.onsuccess = function() {
                      var cursor = req.result;
                      if (!cursor) {
                        resolve(null);
                        return;
                      }
                      if (n3 === 0) {
                        resolve(cursor.key);
                      } else {
                        if (!advanced) {
                          advanced = true;
                          cursor.advance(n3);
                        } else {
                          resolve(cursor.key);
                        }
                      }
                    };
                    req.onerror = function() {
                      reject(req.error);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function keys(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                createTransaction(self2._dbInfo, READ_ONLY, function(err, transaction) {
                  if (err) {
                    return reject(err);
                  }
                  try {
                    var store = transaction.objectStore(self2._dbInfo.storeName);
                    var req = store.openKeyCursor();
                    var keys2 = [];
                    req.onsuccess = function() {
                      var cursor = req.result;
                      if (!cursor) {
                        resolve(keys2);
                        return;
                      }
                      keys2.push(cursor.key);
                      cursor["continue"]();
                    };
                    req.onerror = function() {
                      reject(req.error);
                    };
                  } catch (e3) {
                    reject(e3);
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function dropInstance(options, callback) {
            callback = getCallback.apply(this, arguments);
            var currentConfig = this.config();
            options = typeof options !== "function" && options || {};
            if (!options.name) {
              options.name = options.name || currentConfig.name;
              options.storeName = options.storeName || currentConfig.storeName;
            }
            var self2 = this;
            var promise;
            if (!options.name) {
              promise = Promise$1.reject("Invalid arguments");
            } else {
              var isCurrentDb = options.name === currentConfig.name && self2._dbInfo.db;
              var dbPromise = isCurrentDb ? Promise$1.resolve(self2._dbInfo.db) : _getOriginalConnection(options).then(function(db) {
                var dbContext = dbContexts[options.name];
                var forages = dbContext.forages;
                dbContext.db = db;
                for (var i3 = 0; i3 < forages.length; i3++) {
                  forages[i3]._dbInfo.db = db;
                }
                return db;
              });
              if (!options.storeName) {
                promise = dbPromise.then(function(db) {
                  _deferReadiness(options);
                  var dbContext = dbContexts[options.name];
                  var forages = dbContext.forages;
                  db.close();
                  for (var i3 = 0; i3 < forages.length; i3++) {
                    var forage = forages[i3];
                    forage._dbInfo.db = null;
                  }
                  var dropDBPromise = new Promise$1(function(resolve, reject) {
                    var req = idb.deleteDatabase(options.name);
                    req.onerror = function() {
                      var db2 = req.result;
                      if (db2) {
                        db2.close();
                      }
                      reject(req.error);
                    };
                    req.onblocked = function() {
                      console.warn('dropInstance blocked for database "' + options.name + '" until all open connections are closed');
                    };
                    req.onsuccess = function() {
                      var db2 = req.result;
                      if (db2) {
                        db2.close();
                      }
                      resolve(db2);
                    };
                  });
                  return dropDBPromise.then(function(db2) {
                    dbContext.db = db2;
                    for (var i4 = 0; i4 < forages.length; i4++) {
                      var _forage = forages[i4];
                      _advanceReadiness(_forage._dbInfo);
                    }
                  })["catch"](function(err) {
                    (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function() {
                    });
                    throw err;
                  });
                });
              } else {
                promise = dbPromise.then(function(db) {
                  if (!db.objectStoreNames.contains(options.storeName)) {
                    return;
                  }
                  var newVersion = db.version + 1;
                  _deferReadiness(options);
                  var dbContext = dbContexts[options.name];
                  var forages = dbContext.forages;
                  db.close();
                  for (var i3 = 0; i3 < forages.length; i3++) {
                    var forage = forages[i3];
                    forage._dbInfo.db = null;
                    forage._dbInfo.version = newVersion;
                  }
                  var dropObjectPromise = new Promise$1(function(resolve, reject) {
                    var req = idb.open(options.name, newVersion);
                    req.onerror = function(err) {
                      var db2 = req.result;
                      db2.close();
                      reject(err);
                    };
                    req.onupgradeneeded = function() {
                      var db2 = req.result;
                      db2.deleteObjectStore(options.storeName);
                    };
                    req.onsuccess = function() {
                      var db2 = req.result;
                      db2.close();
                      resolve(db2);
                    };
                  });
                  return dropObjectPromise.then(function(db2) {
                    dbContext.db = db2;
                    for (var j2 = 0; j2 < forages.length; j2++) {
                      var _forage2 = forages[j2];
                      _forage2._dbInfo.db = db2;
                      _advanceReadiness(_forage2._dbInfo);
                    }
                  })["catch"](function(err) {
                    (_rejectReadiness(options, err) || Promise$1.resolve())["catch"](function() {
                    });
                    throw err;
                  });
                });
              }
            }
            executeCallback(promise, callback);
            return promise;
          }
          var asyncStorage = {
            _driver: "asyncStorage",
            _initStorage,
            _support: isIndexedDBValid(),
            iterate,
            getItem,
            setItem,
            removeItem,
            clear,
            length,
            key: key2,
            keys,
            dropInstance
          };
          function isWebSQLValid() {
            return typeof openDatabase === "function";
          }
          var BASE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
          var BLOB_TYPE_PREFIX = "~~local_forage_type~";
          var BLOB_TYPE_PREFIX_REGEX = /^~~local_forage_type~([^~]+)~/;
          var SERIALIZED_MARKER = "__lfsc__:";
          var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;
          var TYPE_ARRAYBUFFER = "arbf";
          var TYPE_BLOB = "blob";
          var TYPE_INT8ARRAY = "si08";
          var TYPE_UINT8ARRAY = "ui08";
          var TYPE_UINT8CLAMPEDARRAY = "uic8";
          var TYPE_INT16ARRAY = "si16";
          var TYPE_INT32ARRAY = "si32";
          var TYPE_UINT16ARRAY = "ur16";
          var TYPE_UINT32ARRAY = "ui32";
          var TYPE_FLOAT32ARRAY = "fl32";
          var TYPE_FLOAT64ARRAY = "fl64";
          var TYPE_SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER_LENGTH + TYPE_ARRAYBUFFER.length;
          var toString$1 = Object.prototype.toString;
          function stringToBuffer(serializedString) {
            var bufferLength = serializedString.length * 0.75;
            var len = serializedString.length;
            var i3;
            var p2 = 0;
            var encoded1, encoded2, encoded3, encoded4;
            if (serializedString[serializedString.length - 1] === "=") {
              bufferLength--;
              if (serializedString[serializedString.length - 2] === "=") {
                bufferLength--;
              }
            }
            var buffer2 = new ArrayBuffer(bufferLength);
            var bytes = new Uint8Array(buffer2);
            for (i3 = 0; i3 < len; i3 += 4) {
              encoded1 = BASE_CHARS.indexOf(serializedString[i3]);
              encoded2 = BASE_CHARS.indexOf(serializedString[i3 + 1]);
              encoded3 = BASE_CHARS.indexOf(serializedString[i3 + 2]);
              encoded4 = BASE_CHARS.indexOf(serializedString[i3 + 3]);
              bytes[p2++] = encoded1 << 2 | encoded2 >> 4;
              bytes[p2++] = (encoded2 & 15) << 4 | encoded3 >> 2;
              bytes[p2++] = (encoded3 & 3) << 6 | encoded4 & 63;
            }
            return buffer2;
          }
          function bufferToString(buffer2) {
            var bytes = new Uint8Array(buffer2);
            var base64String = "";
            var i3;
            for (i3 = 0; i3 < bytes.length; i3 += 3) {
              base64String += BASE_CHARS[bytes[i3] >> 2];
              base64String += BASE_CHARS[(bytes[i3] & 3) << 4 | bytes[i3 + 1] >> 4];
              base64String += BASE_CHARS[(bytes[i3 + 1] & 15) << 2 | bytes[i3 + 2] >> 6];
              base64String += BASE_CHARS[bytes[i3 + 2] & 63];
            }
            if (bytes.length % 3 === 2) {
              base64String = base64String.substring(0, base64String.length - 1) + "=";
            } else if (bytes.length % 3 === 1) {
              base64String = base64String.substring(0, base64String.length - 2) + "==";
            }
            return base64String;
          }
          function serialize(value, callback) {
            var valueType = "";
            if (value) {
              valueType = toString$1.call(value);
            }
            if (value && (valueType === "[object ArrayBuffer]" || value.buffer && toString$1.call(value.buffer) === "[object ArrayBuffer]")) {
              var buffer2;
              var marker = SERIALIZED_MARKER;
              if (value instanceof ArrayBuffer) {
                buffer2 = value;
                marker += TYPE_ARRAYBUFFER;
              } else {
                buffer2 = value.buffer;
                if (valueType === "[object Int8Array]") {
                  marker += TYPE_INT8ARRAY;
                } else if (valueType === "[object Uint8Array]") {
                  marker += TYPE_UINT8ARRAY;
                } else if (valueType === "[object Uint8ClampedArray]") {
                  marker += TYPE_UINT8CLAMPEDARRAY;
                } else if (valueType === "[object Int16Array]") {
                  marker += TYPE_INT16ARRAY;
                } else if (valueType === "[object Uint16Array]") {
                  marker += TYPE_UINT16ARRAY;
                } else if (valueType === "[object Int32Array]") {
                  marker += TYPE_INT32ARRAY;
                } else if (valueType === "[object Uint32Array]") {
                  marker += TYPE_UINT32ARRAY;
                } else if (valueType === "[object Float32Array]") {
                  marker += TYPE_FLOAT32ARRAY;
                } else if (valueType === "[object Float64Array]") {
                  marker += TYPE_FLOAT64ARRAY;
                } else {
                  callback(new Error("Failed to get type for BinaryArray"));
                }
              }
              callback(marker + bufferToString(buffer2));
            } else if (valueType === "[object Blob]") {
              var fileReader = new FileReader();
              fileReader.onload = function() {
                var str = BLOB_TYPE_PREFIX + value.type + "~" + bufferToString(this.result);
                callback(SERIALIZED_MARKER + TYPE_BLOB + str);
              };
              fileReader.readAsArrayBuffer(value);
            } else {
              try {
                callback(JSON.stringify(value));
              } catch (e3) {
                console.error("Couldn't convert value into a JSON string: ", value);
                callback(null, e3);
              }
            }
          }
          function deserialize(value) {
            if (value.substring(0, SERIALIZED_MARKER_LENGTH) !== SERIALIZED_MARKER) {
              return JSON.parse(value);
            }
            var serializedString = value.substring(TYPE_SERIALIZED_MARKER_LENGTH);
            var type = value.substring(SERIALIZED_MARKER_LENGTH, TYPE_SERIALIZED_MARKER_LENGTH);
            var blobType;
            if (type === TYPE_BLOB && BLOB_TYPE_PREFIX_REGEX.test(serializedString)) {
              var matcher = serializedString.match(BLOB_TYPE_PREFIX_REGEX);
              blobType = matcher[1];
              serializedString = serializedString.substring(matcher[0].length);
            }
            var buffer2 = stringToBuffer(serializedString);
            switch (type) {
              case TYPE_ARRAYBUFFER:
                return buffer2;
              case TYPE_BLOB:
                return createBlob([buffer2], { type: blobType });
              case TYPE_INT8ARRAY:
                return new Int8Array(buffer2);
              case TYPE_UINT8ARRAY:
                return new Uint8Array(buffer2);
              case TYPE_UINT8CLAMPEDARRAY:
                return new Uint8ClampedArray(buffer2);
              case TYPE_INT16ARRAY:
                return new Int16Array(buffer2);
              case TYPE_UINT16ARRAY:
                return new Uint16Array(buffer2);
              case TYPE_INT32ARRAY:
                return new Int32Array(buffer2);
              case TYPE_UINT32ARRAY:
                return new Uint32Array(buffer2);
              case TYPE_FLOAT32ARRAY:
                return new Float32Array(buffer2);
              case TYPE_FLOAT64ARRAY:
                return new Float64Array(buffer2);
              default:
                throw new Error("Unkown type: " + type);
            }
          }
          var localforageSerializer = {
            serialize,
            deserialize,
            stringToBuffer,
            bufferToString
          };
          function createDbTable(t2, dbInfo, callback, errorCallback) {
            t2.executeSql("CREATE TABLE IF NOT EXISTS " + dbInfo.storeName + " (id INTEGER PRIMARY KEY, key unique, value)", [], callback, errorCallback);
          }
          function _initStorage$1(options) {
            var self2 = this;
            var dbInfo = {
              db: null
            };
            if (options) {
              for (var i3 in options) {
                dbInfo[i3] = typeof options[i3] !== "string" ? options[i3].toString() : options[i3];
              }
            }
            var dbInfoPromise = new Promise$1(function(resolve, reject) {
              try {
                dbInfo.db = openDatabase(dbInfo.name, String(dbInfo.version), dbInfo.description, dbInfo.size);
              } catch (e3) {
                return reject(e3);
              }
              dbInfo.db.transaction(function(t2) {
                createDbTable(t2, dbInfo, function() {
                  self2._dbInfo = dbInfo;
                  resolve();
                }, function(t3, error) {
                  reject(error);
                });
              }, reject);
            });
            dbInfo.serializer = localforageSerializer;
            return dbInfoPromise;
          }
          function tryExecuteSql(t2, dbInfo, sqlStatement, args, callback, errorCallback) {
            t2.executeSql(sqlStatement, args, callback, function(t3, error) {
              if (error.code === error.SYNTAX_ERR) {
                t3.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?", [dbInfo.storeName], function(t4, results) {
                  if (!results.rows.length) {
                    createDbTable(t4, dbInfo, function() {
                      t4.executeSql(sqlStatement, args, callback, errorCallback);
                    }, errorCallback);
                  } else {
                    errorCallback(t4, error);
                  }
                }, errorCallback);
              } else {
                errorCallback(t3, error);
              }
            }, errorCallback);
          }
          function getItem$1(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "SELECT * FROM " + dbInfo.storeName + " WHERE key = ? LIMIT 1", [key3], function(t3, results) {
                    var result = results.rows.length ? results.rows.item(0).value : null;
                    if (result) {
                      result = dbInfo.serializer.deserialize(result);
                    }
                    resolve(result);
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function iterate$1(iterator, callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "SELECT * FROM " + dbInfo.storeName, [], function(t3, results) {
                    var rows = results.rows;
                    var length2 = rows.length;
                    for (var i3 = 0; i3 < length2; i3++) {
                      var item = rows.item(i3);
                      var result = item.value;
                      if (result) {
                        result = dbInfo.serializer.deserialize(result);
                      }
                      result = iterator(result, item.key, i3 + 1);
                      if (result !== void 0) {
                        resolve(result);
                        return;
                      }
                    }
                    resolve();
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function _setItem(key3, value, callback, retriesLeft) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                if (value === void 0) {
                  value = null;
                }
                var originalValue = value;
                var dbInfo = self2._dbInfo;
                dbInfo.serializer.serialize(value, function(value2, error) {
                  if (error) {
                    reject(error);
                  } else {
                    dbInfo.db.transaction(function(t2) {
                      tryExecuteSql(t2, dbInfo, "INSERT OR REPLACE INTO " + dbInfo.storeName + " (key, value) VALUES (?, ?)", [key3, value2], function() {
                        resolve(originalValue);
                      }, function(t3, error2) {
                        reject(error2);
                      });
                    }, function(sqlError) {
                      if (sqlError.code === sqlError.QUOTA_ERR) {
                        if (retriesLeft > 0) {
                          resolve(_setItem.apply(self2, [key3, originalValue, callback, retriesLeft - 1]));
                          return;
                        }
                        reject(sqlError);
                      }
                    });
                  }
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function setItem$1(key3, value, callback) {
            return _setItem.apply(this, [key3, value, callback, 1]);
          }
          function removeItem$1(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "DELETE FROM " + dbInfo.storeName + " WHERE key = ?", [key3], function() {
                    resolve();
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function clear$1(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "DELETE FROM " + dbInfo.storeName, [], function() {
                    resolve();
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function length$1(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "SELECT COUNT(key) as c FROM " + dbInfo.storeName, [], function(t3, results) {
                    var result = results.rows.item(0).c;
                    resolve(result);
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function key$12(n3, callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "SELECT key FROM " + dbInfo.storeName + " WHERE id = ? LIMIT 1", [n3 + 1], function(t3, results) {
                    var result = results.rows.length ? results.rows.item(0).key : null;
                    resolve(result);
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function keys$1(callback) {
            var self2 = this;
            var promise = new Promise$1(function(resolve, reject) {
              self2.ready().then(function() {
                var dbInfo = self2._dbInfo;
                dbInfo.db.transaction(function(t2) {
                  tryExecuteSql(t2, dbInfo, "SELECT key FROM " + dbInfo.storeName, [], function(t3, results) {
                    var keys2 = [];
                    for (var i3 = 0; i3 < results.rows.length; i3++) {
                      keys2.push(results.rows.item(i3).key);
                    }
                    resolve(keys2);
                  }, function(t3, error) {
                    reject(error);
                  });
                });
              })["catch"](reject);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function getAllStoreNames(db) {
            return new Promise$1(function(resolve, reject) {
              db.transaction(function(t2) {
                t2.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'", [], function(t3, results) {
                  var storeNames = [];
                  for (var i3 = 0; i3 < results.rows.length; i3++) {
                    storeNames.push(results.rows.item(i3).name);
                  }
                  resolve({
                    db,
                    storeNames
                  });
                }, function(t3, error) {
                  reject(error);
                });
              }, function(sqlError) {
                reject(sqlError);
              });
            });
          }
          function dropInstance$1(options, callback) {
            callback = getCallback.apply(this, arguments);
            var currentConfig = this.config();
            options = typeof options !== "function" && options || {};
            if (!options.name) {
              options.name = options.name || currentConfig.name;
              options.storeName = options.storeName || currentConfig.storeName;
            }
            var self2 = this;
            var promise;
            if (!options.name) {
              promise = Promise$1.reject("Invalid arguments");
            } else {
              promise = new Promise$1(function(resolve) {
                var db;
                if (options.name === currentConfig.name) {
                  db = self2._dbInfo.db;
                } else {
                  db = openDatabase(options.name, "", "", 0);
                }
                if (!options.storeName) {
                  resolve(getAllStoreNames(db));
                } else {
                  resolve({
                    db,
                    storeNames: [options.storeName]
                  });
                }
              }).then(function(operationInfo) {
                return new Promise$1(function(resolve, reject) {
                  operationInfo.db.transaction(function(t2) {
                    function dropTable(storeName) {
                      return new Promise$1(function(resolve2, reject2) {
                        t2.executeSql("DROP TABLE IF EXISTS " + storeName, [], function() {
                          resolve2();
                        }, function(t3, error) {
                          reject2(error);
                        });
                      });
                    }
                    var operations = [];
                    for (var i3 = 0, len = operationInfo.storeNames.length; i3 < len; i3++) {
                      operations.push(dropTable(operationInfo.storeNames[i3]));
                    }
                    Promise$1.all(operations).then(function() {
                      resolve();
                    })["catch"](function(e3) {
                      reject(e3);
                    });
                  }, function(sqlError) {
                    reject(sqlError);
                  });
                });
              });
            }
            executeCallback(promise, callback);
            return promise;
          }
          var webSQLStorage = {
            _driver: "webSQLStorage",
            _initStorage: _initStorage$1,
            _support: isWebSQLValid(),
            iterate: iterate$1,
            getItem: getItem$1,
            setItem: setItem$1,
            removeItem: removeItem$1,
            clear: clear$1,
            length: length$1,
            key: key$12,
            keys: keys$1,
            dropInstance: dropInstance$1
          };
          function isLocalStorageValid() {
            try {
              return typeof localStorage !== "undefined" && "setItem" in localStorage && // in IE8 typeof localStorage.setItem === 'object'
              !!localStorage.setItem;
            } catch (e3) {
              return false;
            }
          }
          function _getKeyPrefix(options, defaultConfig) {
            var keyPrefix = options.name + "/";
            if (options.storeName !== defaultConfig.storeName) {
              keyPrefix += options.storeName + "/";
            }
            return keyPrefix;
          }
          function checkIfLocalStorageThrows() {
            var localStorageTestKey = "_localforage_support_test";
            try {
              localStorage.setItem(localStorageTestKey, true);
              localStorage.removeItem(localStorageTestKey);
              return false;
            } catch (e3) {
              return true;
            }
          }
          function _isLocalStorageUsable() {
            return !checkIfLocalStorageThrows() || localStorage.length > 0;
          }
          function _initStorage$2(options) {
            var self2 = this;
            var dbInfo = {};
            if (options) {
              for (var i3 in options) {
                dbInfo[i3] = options[i3];
              }
            }
            dbInfo.keyPrefix = _getKeyPrefix(options, self2._defaultConfig);
            if (!_isLocalStorageUsable()) {
              return Promise$1.reject();
            }
            self2._dbInfo = dbInfo;
            dbInfo.serializer = localforageSerializer;
            return Promise$1.resolve();
          }
          function clear$2(callback) {
            var self2 = this;
            var promise = self2.ready().then(function() {
              var keyPrefix = self2._dbInfo.keyPrefix;
              for (var i3 = localStorage.length - 1; i3 >= 0; i3--) {
                var key3 = localStorage.key(i3);
                if (key3.indexOf(keyPrefix) === 0) {
                  localStorage.removeItem(key3);
                }
              }
            });
            executeCallback(promise, callback);
            return promise;
          }
          function getItem$2(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = self2.ready().then(function() {
              var dbInfo = self2._dbInfo;
              var result = localStorage.getItem(dbInfo.keyPrefix + key3);
              if (result) {
                result = dbInfo.serializer.deserialize(result);
              }
              return result;
            });
            executeCallback(promise, callback);
            return promise;
          }
          function iterate$2(iterator, callback) {
            var self2 = this;
            var promise = self2.ready().then(function() {
              var dbInfo = self2._dbInfo;
              var keyPrefix = dbInfo.keyPrefix;
              var keyPrefixLength = keyPrefix.length;
              var length2 = localStorage.length;
              var iterationNumber = 1;
              for (var i3 = 0; i3 < length2; i3++) {
                var key3 = localStorage.key(i3);
                if (key3.indexOf(keyPrefix) !== 0) {
                  continue;
                }
                var value = localStorage.getItem(key3);
                if (value) {
                  value = dbInfo.serializer.deserialize(value);
                }
                value = iterator(value, key3.substring(keyPrefixLength), iterationNumber++);
                if (value !== void 0) {
                  return value;
                }
              }
            });
            executeCallback(promise, callback);
            return promise;
          }
          function key$2(n3, callback) {
            var self2 = this;
            var promise = self2.ready().then(function() {
              var dbInfo = self2._dbInfo;
              var result;
              try {
                result = localStorage.key(n3);
              } catch (error) {
                result = null;
              }
              if (result) {
                result = result.substring(dbInfo.keyPrefix.length);
              }
              return result;
            });
            executeCallback(promise, callback);
            return promise;
          }
          function keys$2(callback) {
            var self2 = this;
            var promise = self2.ready().then(function() {
              var dbInfo = self2._dbInfo;
              var length2 = localStorage.length;
              var keys2 = [];
              for (var i3 = 0; i3 < length2; i3++) {
                var itemKey = localStorage.key(i3);
                if (itemKey.indexOf(dbInfo.keyPrefix) === 0) {
                  keys2.push(itemKey.substring(dbInfo.keyPrefix.length));
                }
              }
              return keys2;
            });
            executeCallback(promise, callback);
            return promise;
          }
          function length$2(callback) {
            var self2 = this;
            var promise = self2.keys().then(function(keys2) {
              return keys2.length;
            });
            executeCallback(promise, callback);
            return promise;
          }
          function removeItem$2(key3, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = self2.ready().then(function() {
              var dbInfo = self2._dbInfo;
              localStorage.removeItem(dbInfo.keyPrefix + key3);
            });
            executeCallback(promise, callback);
            return promise;
          }
          function setItem$2(key3, value, callback) {
            var self2 = this;
            key3 = normalizeKey(key3);
            var promise = self2.ready().then(function() {
              if (value === void 0) {
                value = null;
              }
              var originalValue = value;
              return new Promise$1(function(resolve, reject) {
                var dbInfo = self2._dbInfo;
                dbInfo.serializer.serialize(value, function(value2, error) {
                  if (error) {
                    reject(error);
                  } else {
                    try {
                      localStorage.setItem(dbInfo.keyPrefix + key3, value2);
                      resolve(originalValue);
                    } catch (e3) {
                      if (e3.name === "QuotaExceededError" || e3.name === "NS_ERROR_DOM_QUOTA_REACHED") {
                        reject(e3);
                      }
                      reject(e3);
                    }
                  }
                });
              });
            });
            executeCallback(promise, callback);
            return promise;
          }
          function dropInstance$2(options, callback) {
            callback = getCallback.apply(this, arguments);
            options = typeof options !== "function" && options || {};
            if (!options.name) {
              var currentConfig = this.config();
              options.name = options.name || currentConfig.name;
              options.storeName = options.storeName || currentConfig.storeName;
            }
            var self2 = this;
            var promise;
            if (!options.name) {
              promise = Promise$1.reject("Invalid arguments");
            } else {
              promise = new Promise$1(function(resolve) {
                if (!options.storeName) {
                  resolve(options.name + "/");
                } else {
                  resolve(_getKeyPrefix(options, self2._defaultConfig));
                }
              }).then(function(keyPrefix) {
                for (var i3 = localStorage.length - 1; i3 >= 0; i3--) {
                  var key3 = localStorage.key(i3);
                  if (key3.indexOf(keyPrefix) === 0) {
                    localStorage.removeItem(key3);
                  }
                }
              });
            }
            executeCallback(promise, callback);
            return promise;
          }
          var localStorageWrapper = {
            _driver: "localStorageWrapper",
            _initStorage: _initStorage$2,
            _support: isLocalStorageValid(),
            iterate: iterate$2,
            getItem: getItem$2,
            setItem: setItem$2,
            removeItem: removeItem$2,
            clear: clear$2,
            length: length$2,
            key: key$2,
            keys: keys$2,
            dropInstance: dropInstance$2
          };
          var sameValue = function sameValue2(x2, y2) {
            return x2 === y2 || typeof x2 === "number" && typeof y2 === "number" && isNaN(x2) && isNaN(y2);
          };
          var includes = function includes2(array, searchElement) {
            var len = array.length;
            var i3 = 0;
            while (i3 < len) {
              if (sameValue(array[i3], searchElement)) {
                return true;
              }
              i3++;
            }
            return false;
          };
          var isArray = Array.isArray || function(arg) {
            return Object.prototype.toString.call(arg) === "[object Array]";
          };
          var DefinedDrivers = {};
          var DriverSupport = {};
          var DefaultDrivers = {
            INDEXEDDB: asyncStorage,
            WEBSQL: webSQLStorage,
            LOCALSTORAGE: localStorageWrapper
          };
          var DefaultDriverOrder = [DefaultDrivers.INDEXEDDB._driver, DefaultDrivers.WEBSQL._driver, DefaultDrivers.LOCALSTORAGE._driver];
          var OptionalDriverMethods = ["dropInstance"];
          var LibraryMethods = ["clear", "getItem", "iterate", "key", "keys", "length", "removeItem", "setItem"].concat(OptionalDriverMethods);
          var DefaultConfig = {
            description: "",
            driver: DefaultDriverOrder.slice(),
            name: "localforage",
            // Default DB size is _JUST UNDER_ 5MB, as it's the highest size
            // we can use without a prompt.
            size: 4980736,
            storeName: "keyvaluepairs",
            version: 1
          };
          function callWhenReady(localForageInstance, libraryMethod) {
            localForageInstance[libraryMethod] = function() {
              var _args = arguments;
              return localForageInstance.ready().then(function() {
                return localForageInstance[libraryMethod].apply(localForageInstance, _args);
              });
            };
          }
          function extend2() {
            for (var i3 = 1; i3 < arguments.length; i3++) {
              var arg = arguments[i3];
              if (arg) {
                for (var _key in arg) {
                  if (arg.hasOwnProperty(_key)) {
                    if (isArray(arg[_key])) {
                      arguments[0][_key] = arg[_key].slice();
                    } else {
                      arguments[0][_key] = arg[_key];
                    }
                  }
                }
              }
            }
            return arguments[0];
          }
          var LocalForage = function() {
            function LocalForage2(options) {
              _classCallCheck(this, LocalForage2);
              for (var driverTypeKey in DefaultDrivers) {
                if (DefaultDrivers.hasOwnProperty(driverTypeKey)) {
                  var driver = DefaultDrivers[driverTypeKey];
                  var driverName = driver._driver;
                  this[driverTypeKey] = driverName;
                  if (!DefinedDrivers[driverName]) {
                    this.defineDriver(driver);
                  }
                }
              }
              this._defaultConfig = extend2({}, DefaultConfig);
              this._config = extend2({}, this._defaultConfig, options);
              this._driverSet = null;
              this._initDriver = null;
              this._ready = false;
              this._dbInfo = null;
              this._wrapLibraryMethodsWithReady();
              this.setDriver(this._config.driver)["catch"](function() {
              });
            }
            LocalForage2.prototype.config = function config(options) {
              if ((typeof options === "undefined" ? "undefined" : _typeof(options)) === "object") {
                if (this._ready) {
                  return new Error("Can't call config() after localforage has been used.");
                }
                for (var i3 in options) {
                  if (i3 === "storeName") {
                    options[i3] = options[i3].replace(/\W/g, "_");
                  }
                  if (i3 === "version" && typeof options[i3] !== "number") {
                    return new Error("Database version must be a number.");
                  }
                  this._config[i3] = options[i3];
                }
                if ("driver" in options && options.driver) {
                  return this.setDriver(this._config.driver);
                }
                return true;
              } else if (typeof options === "string") {
                return this._config[options];
              } else {
                return this._config;
              }
            };
            LocalForage2.prototype.defineDriver = function defineDriver(driverObject, callback, errorCallback) {
              var promise = new Promise$1(function(resolve, reject) {
                try {
                  var driverName = driverObject._driver;
                  var complianceError = new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");
                  if (!driverObject._driver) {
                    reject(complianceError);
                    return;
                  }
                  var driverMethods = LibraryMethods.concat("_initStorage");
                  for (var i3 = 0, len = driverMethods.length; i3 < len; i3++) {
                    var driverMethodName = driverMethods[i3];
                    var isRequired = !includes(OptionalDriverMethods, driverMethodName);
                    if ((isRequired || driverObject[driverMethodName]) && typeof driverObject[driverMethodName] !== "function") {
                      reject(complianceError);
                      return;
                    }
                  }
                  var configureMissingMethods = function configureMissingMethods2() {
                    var methodNotImplementedFactory = function methodNotImplementedFactory2(methodName) {
                      return function() {
                        var error = new Error("Method " + methodName + " is not implemented by the current driver");
                        var promise2 = Promise$1.reject(error);
                        executeCallback(promise2, arguments[arguments.length - 1]);
                        return promise2;
                      };
                    };
                    for (var _i = 0, _len = OptionalDriverMethods.length; _i < _len; _i++) {
                      var optionalDriverMethod = OptionalDriverMethods[_i];
                      if (!driverObject[optionalDriverMethod]) {
                        driverObject[optionalDriverMethod] = methodNotImplementedFactory(optionalDriverMethod);
                      }
                    }
                  };
                  configureMissingMethods();
                  var setDriverSupport = function setDriverSupport2(support) {
                    if (DefinedDrivers[driverName]) {
                      console.info("Redefining LocalForage driver: " + driverName);
                    }
                    DefinedDrivers[driverName] = driverObject;
                    DriverSupport[driverName] = support;
                    resolve();
                  };
                  if ("_support" in driverObject) {
                    if (driverObject._support && typeof driverObject._support === "function") {
                      driverObject._support().then(setDriverSupport, reject);
                    } else {
                      setDriverSupport(!!driverObject._support);
                    }
                  } else {
                    setDriverSupport(true);
                  }
                } catch (e3) {
                  reject(e3);
                }
              });
              executeTwoCallbacks(promise, callback, errorCallback);
              return promise;
            };
            LocalForage2.prototype.driver = function driver() {
              return this._driver || null;
            };
            LocalForage2.prototype.getDriver = function getDriver(driverName, callback, errorCallback) {
              var getDriverPromise = DefinedDrivers[driverName] ? Promise$1.resolve(DefinedDrivers[driverName]) : Promise$1.reject(new Error("Driver not found."));
              executeTwoCallbacks(getDriverPromise, callback, errorCallback);
              return getDriverPromise;
            };
            LocalForage2.prototype.getSerializer = function getSerializer(callback) {
              var serializerPromise = Promise$1.resolve(localforageSerializer);
              executeTwoCallbacks(serializerPromise, callback);
              return serializerPromise;
            };
            LocalForage2.prototype.ready = function ready(callback) {
              var self2 = this;
              var promise = self2._driverSet.then(function() {
                if (self2._ready === null) {
                  self2._ready = self2._initDriver();
                }
                return self2._ready;
              });
              executeTwoCallbacks(promise, callback, callback);
              return promise;
            };
            LocalForage2.prototype.setDriver = function setDriver(drivers, callback, errorCallback) {
              var self2 = this;
              if (!isArray(drivers)) {
                drivers = [drivers];
              }
              var supportedDrivers = this._getSupportedDrivers(drivers);
              function setDriverToConfig() {
                self2._config.driver = self2.driver();
              }
              function extendSelfWithDriver(driver) {
                self2._extend(driver);
                setDriverToConfig();
                self2._ready = self2._initStorage(self2._config);
                return self2._ready;
              }
              function initDriver(supportedDrivers2) {
                return function() {
                  var currentDriverIndex = 0;
                  function driverPromiseLoop() {
                    while (currentDriverIndex < supportedDrivers2.length) {
                      var driverName = supportedDrivers2[currentDriverIndex];
                      currentDriverIndex++;
                      self2._dbInfo = null;
                      self2._ready = null;
                      return self2.getDriver(driverName).then(extendSelfWithDriver)["catch"](driverPromiseLoop);
                    }
                    setDriverToConfig();
                    var error = new Error("No available storage method found.");
                    self2._driverSet = Promise$1.reject(error);
                    return self2._driverSet;
                  }
                  return driverPromiseLoop();
                };
              }
              var oldDriverSetDone = this._driverSet !== null ? this._driverSet["catch"](function() {
                return Promise$1.resolve();
              }) : Promise$1.resolve();
              this._driverSet = oldDriverSetDone.then(function() {
                var driverName = supportedDrivers[0];
                self2._dbInfo = null;
                self2._ready = null;
                return self2.getDriver(driverName).then(function(driver) {
                  self2._driver = driver._driver;
                  setDriverToConfig();
                  self2._wrapLibraryMethodsWithReady();
                  self2._initDriver = initDriver(supportedDrivers);
                });
              })["catch"](function() {
                setDriverToConfig();
                var error = new Error("No available storage method found.");
                self2._driverSet = Promise$1.reject(error);
                return self2._driverSet;
              });
              executeTwoCallbacks(this._driverSet, callback, errorCallback);
              return this._driverSet;
            };
            LocalForage2.prototype.supports = function supports(driverName) {
              return !!DriverSupport[driverName];
            };
            LocalForage2.prototype._extend = function _extend(libraryMethodsAndProperties) {
              extend2(this, libraryMethodsAndProperties);
            };
            LocalForage2.prototype._getSupportedDrivers = function _getSupportedDrivers(drivers) {
              var supportedDrivers = [];
              for (var i3 = 0, len = drivers.length; i3 < len; i3++) {
                var driverName = drivers[i3];
                if (this.supports(driverName)) {
                  supportedDrivers.push(driverName);
                }
              }
              return supportedDrivers;
            };
            LocalForage2.prototype._wrapLibraryMethodsWithReady = function _wrapLibraryMethodsWithReady() {
              for (var i3 = 0, len = LibraryMethods.length; i3 < len; i3++) {
                callWhenReady(this, LibraryMethods[i3]);
              }
            };
            LocalForage2.prototype.createInstance = function createInstance(options) {
              return new LocalForage2(options);
            };
            return LocalForage2;
          }();
          var localforage_js = new LocalForage();
          module2.exports = localforage_js;
        }, { "3": 3 }] }, {}, [4])(4);
      });
    })(localforage$1);
    return localforage$1.exports;
  }
  var localforageExports = requireLocalforage();
  const localforage = /* @__PURE__ */ getDefaultExportFromCjs(localforageExports);
  var jszip_min = { exports: {} };
  /*!

  JSZip v3.10.1 - A JavaScript class for generating and reading zip files
  <http://stuartk.com/jszip>

  (c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
  Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.

  JSZip uses the library pako released under the MIT license :
  https://github.com/nodeca/pako/blob/main/LICENSE
  */
  var hasRequiredJszip_min;
  function requireJszip_min() {
    if (hasRequiredJszip_min) return jszip_min.exports;
    hasRequiredJszip_min = 1;
    (function(module, exports) {
      !function(e3) {
        module.exports = e3();
      }(function() {
        return function s2(a2, o2, h2) {
          function u2(r3, e4) {
            if (!o2[r3]) {
              if (!a2[r3]) {
                var t2 = "function" == typeof commonjsRequire && commonjsRequire;
                if (!e4 && t2) return t2(r3, true);
                if (l2) return l2(r3, true);
                var n3 = new Error("Cannot find module '" + r3 + "'");
                throw n3.code = "MODULE_NOT_FOUND", n3;
              }
              var i3 = o2[r3] = { exports: {} };
              a2[r3][0].call(i3.exports, function(e5) {
                var t3 = a2[r3][1][e5];
                return u2(t3 || e5);
              }, i3, i3.exports, s2, a2, o2, h2);
            }
            return o2[r3].exports;
          }
          for (var l2 = "function" == typeof commonjsRequire && commonjsRequire, e3 = 0; e3 < h2.length; e3++) u2(h2[e3]);
          return u2;
        }({ 1: [function(e3, t2, r3) {
          var d2 = e3("./utils"), c3 = e3("./support"), p2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
          r3.encode = function(e4) {
            for (var t3, r4, n3, i3, s2, a2, o2, h2 = [], u2 = 0, l2 = e4.length, f2 = l2, c4 = "string" !== d2.getTypeOf(e4); u2 < e4.length; ) f2 = l2 - u2, n3 = c4 ? (t3 = e4[u2++], r4 = u2 < l2 ? e4[u2++] : 0, u2 < l2 ? e4[u2++] : 0) : (t3 = e4.charCodeAt(u2++), r4 = u2 < l2 ? e4.charCodeAt(u2++) : 0, u2 < l2 ? e4.charCodeAt(u2++) : 0), i3 = t3 >> 2, s2 = (3 & t3) << 4 | r4 >> 4, a2 = 1 < f2 ? (15 & r4) << 2 | n3 >> 6 : 64, o2 = 2 < f2 ? 63 & n3 : 64, h2.push(p2.charAt(i3) + p2.charAt(s2) + p2.charAt(a2) + p2.charAt(o2));
            return h2.join("");
          }, r3.decode = function(e4) {
            var t3, r4, n3, i3, s2, a2, o2 = 0, h2 = 0, u2 = "data:";
            if (e4.substr(0, u2.length) === u2) throw new Error("Invalid base64 input, it looks like a data url.");
            var l2, f2 = 3 * (e4 = e4.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4;
            if (e4.charAt(e4.length - 1) === p2.charAt(64) && f2--, e4.charAt(e4.length - 2) === p2.charAt(64) && f2--, f2 % 1 != 0) throw new Error("Invalid base64 input, bad content length.");
            for (l2 = c3.uint8array ? new Uint8Array(0 | f2) : new Array(0 | f2); o2 < e4.length; ) t3 = p2.indexOf(e4.charAt(o2++)) << 2 | (i3 = p2.indexOf(e4.charAt(o2++))) >> 4, r4 = (15 & i3) << 4 | (s2 = p2.indexOf(e4.charAt(o2++))) >> 2, n3 = (3 & s2) << 6 | (a2 = p2.indexOf(e4.charAt(o2++))), l2[h2++] = t3, 64 !== s2 && (l2[h2++] = r4), 64 !== a2 && (l2[h2++] = n3);
            return l2;
          };
        }, { "./support": 30, "./utils": 32 }], 2: [function(e3, t2, r3) {
          var n3 = e3("./external"), i3 = e3("./stream/DataWorker"), s2 = e3("./stream/Crc32Probe"), a2 = e3("./stream/DataLengthProbe");
          function o2(e4, t3, r4, n4, i4) {
            this.compressedSize = e4, this.uncompressedSize = t3, this.crc32 = r4, this.compression = n4, this.compressedContent = i4;
          }
          o2.prototype = { getContentWorker: function() {
            var e4 = new i3(n3.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a2("data_length")), t3 = this;
            return e4.on("end", function() {
              if (this.streamInfo.data_length !== t3.uncompressedSize) throw new Error("Bug : uncompressed data size mismatch");
            }), e4;
          }, getCompressedWorker: function() {
            return new i3(n3.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression);
          } }, o2.createWorkerFrom = function(e4, t3, r4) {
            return e4.pipe(new s2()).pipe(new a2("uncompressedSize")).pipe(t3.compressWorker(r4)).pipe(new a2("compressedSize")).withStreamInfo("compression", t3);
          }, t2.exports = o2;
        }, { "./external": 6, "./stream/Crc32Probe": 25, "./stream/DataLengthProbe": 26, "./stream/DataWorker": 27 }], 3: [function(e3, t2, r3) {
          var n3 = e3("./stream/GenericWorker");
          r3.STORE = { magic: "\0\0", compressWorker: function() {
            return new n3("STORE compression");
          }, uncompressWorker: function() {
            return new n3("STORE decompression");
          } }, r3.DEFLATE = e3("./flate");
        }, { "./flate": 7, "./stream/GenericWorker": 28 }], 4: [function(e3, t2, r3) {
          var n3 = e3("./utils");
          var o2 = function() {
            for (var e4, t3 = [], r4 = 0; r4 < 256; r4++) {
              e4 = r4;
              for (var n4 = 0; n4 < 8; n4++) e4 = 1 & e4 ? 3988292384 ^ e4 >>> 1 : e4 >>> 1;
              t3[r4] = e4;
            }
            return t3;
          }();
          t2.exports = function(e4, t3) {
            return void 0 !== e4 && e4.length ? "string" !== n3.getTypeOf(e4) ? function(e5, t4, r4, n4) {
              var i3 = o2, s2 = n4 + r4;
              e5 ^= -1;
              for (var a2 = n4; a2 < s2; a2++) e5 = e5 >>> 8 ^ i3[255 & (e5 ^ t4[a2])];
              return -1 ^ e5;
            }(0 | t3, e4, e4.length, 0) : function(e5, t4, r4, n4) {
              var i3 = o2, s2 = n4 + r4;
              e5 ^= -1;
              for (var a2 = n4; a2 < s2; a2++) e5 = e5 >>> 8 ^ i3[255 & (e5 ^ t4.charCodeAt(a2))];
              return -1 ^ e5;
            }(0 | t3, e4, e4.length, 0) : 0;
          };
        }, { "./utils": 32 }], 5: [function(e3, t2, r3) {
          r3.base64 = false, r3.binary = false, r3.dir = false, r3.createFolders = true, r3.date = null, r3.compression = null, r3.compressionOptions = null, r3.comment = null, r3.unixPermissions = null, r3.dosPermissions = null;
        }, {}], 6: [function(e3, t2, r3) {
          var n3 = null;
          n3 = "undefined" != typeof Promise ? Promise : e3("lie"), t2.exports = { Promise: n3 };
        }, { lie: 37 }], 7: [function(e3, t2, r3) {
          var n3 = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, i3 = e3("pako"), s2 = e3("./utils"), a2 = e3("./stream/GenericWorker"), o2 = n3 ? "uint8array" : "array";
          function h2(e4, t3) {
            a2.call(this, "FlateWorker/" + e4), this._pako = null, this._pakoAction = e4, this._pakoOptions = t3, this.meta = {};
          }
          r3.magic = "\b\0", s2.inherits(h2, a2), h2.prototype.processChunk = function(e4) {
            this.meta = e4.meta, null === this._pako && this._createPako(), this._pako.push(s2.transformTo(o2, e4.data), false);
          }, h2.prototype.flush = function() {
            a2.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], true);
          }, h2.prototype.cleanUp = function() {
            a2.prototype.cleanUp.call(this), this._pako = null;
          }, h2.prototype._createPako = function() {
            this._pako = new i3[this._pakoAction]({ raw: true, level: this._pakoOptions.level || -1 });
            var t3 = this;
            this._pako.onData = function(e4) {
              t3.push({ data: e4, meta: t3.meta });
            };
          }, r3.compressWorker = function(e4) {
            return new h2("Deflate", e4);
          }, r3.uncompressWorker = function() {
            return new h2("Inflate", {});
          };
        }, { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 }], 8: [function(e3, t2, r3) {
          function A2(e4, t3) {
            var r4, n4 = "";
            for (r4 = 0; r4 < t3; r4++) n4 += String.fromCharCode(255 & e4), e4 >>>= 8;
            return n4;
          }
          function n3(e4, t3, r4, n4, i4, s3) {
            var a2, o2, h2 = e4.file, u2 = e4.compression, l2 = s3 !== O.utf8encode, f2 = I2.transformTo("string", s3(h2.name)), c3 = I2.transformTo("string", O.utf8encode(h2.name)), d2 = h2.comment, p2 = I2.transformTo("string", s3(d2)), m2 = I2.transformTo("string", O.utf8encode(d2)), _2 = c3.length !== h2.name.length, g2 = m2.length !== d2.length, b2 = "", v2 = "", y2 = "", w = h2.dir, k2 = h2.date, x2 = { crc32: 0, compressedSize: 0, uncompressedSize: 0 };
            t3 && !r4 || (x2.crc32 = e4.crc32, x2.compressedSize = e4.compressedSize, x2.uncompressedSize = e4.uncompressedSize);
            var S2 = 0;
            t3 && (S2 |= 8), l2 || !_2 && !g2 || (S2 |= 2048);
            var z3 = 0, C2 = 0;
            w && (z3 |= 16), "UNIX" === i4 ? (C2 = 798, z3 |= function(e5, t4) {
              var r5 = e5;
              return e5 || (r5 = t4 ? 16893 : 33204), (65535 & r5) << 16;
            }(h2.unixPermissions, w)) : (C2 = 20, z3 |= function(e5) {
              return 63 & (e5 || 0);
            }(h2.dosPermissions)), a2 = k2.getUTCHours(), a2 <<= 6, a2 |= k2.getUTCMinutes(), a2 <<= 5, a2 |= k2.getUTCSeconds() / 2, o2 = k2.getUTCFullYear() - 1980, o2 <<= 4, o2 |= k2.getUTCMonth() + 1, o2 <<= 5, o2 |= k2.getUTCDate(), _2 && (v2 = A2(1, 1) + A2(B2(f2), 4) + c3, b2 += "up" + A2(v2.length, 2) + v2), g2 && (y2 = A2(1, 1) + A2(B2(p2), 4) + m2, b2 += "uc" + A2(y2.length, 2) + y2);
            var E2 = "";
            return E2 += "\n\0", E2 += A2(S2, 2), E2 += u2.magic, E2 += A2(a2, 2), E2 += A2(o2, 2), E2 += A2(x2.crc32, 4), E2 += A2(x2.compressedSize, 4), E2 += A2(x2.uncompressedSize, 4), E2 += A2(f2.length, 2), E2 += A2(b2.length, 2), { fileRecord: R2.LOCAL_FILE_HEADER + E2 + f2 + b2, dirRecord: R2.CENTRAL_FILE_HEADER + A2(C2, 2) + E2 + A2(p2.length, 2) + "\0\0\0\0" + A2(z3, 4) + A2(n4, 4) + f2 + b2 + p2 };
          }
          var I2 = e3("../utils"), i3 = e3("../stream/GenericWorker"), O = e3("../utf8"), B2 = e3("../crc32"), R2 = e3("../signature");
          function s2(e4, t3, r4, n4) {
            i3.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = t3, this.zipPlatform = r4, this.encodeFileName = n4, this.streamFiles = e4, this.accumulate = false, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = [];
          }
          I2.inherits(s2, i3), s2.prototype.push = function(e4) {
            var t3 = e4.meta.percent || 0, r4 = this.entriesCount, n4 = this._sources.length;
            this.accumulate ? this.contentBuffer.push(e4) : (this.bytesWritten += e4.data.length, i3.prototype.push.call(this, { data: e4.data, meta: { currentFile: this.currentFile, percent: r4 ? (t3 + 100 * (r4 - n4 - 1)) / r4 : 100 } }));
          }, s2.prototype.openedSource = function(e4) {
            this.currentSourceOffset = this.bytesWritten, this.currentFile = e4.file.name;
            var t3 = this.streamFiles && !e4.file.dir;
            if (t3) {
              var r4 = n3(e4, t3, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
              this.push({ data: r4.fileRecord, meta: { percent: 0 } });
            } else this.accumulate = true;
          }, s2.prototype.closedSource = function(e4) {
            this.accumulate = false;
            var t3 = this.streamFiles && !e4.file.dir, r4 = n3(e4, t3, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
            if (this.dirRecords.push(r4.dirRecord), t3) this.push({ data: function(e5) {
              return R2.DATA_DESCRIPTOR + A2(e5.crc32, 4) + A2(e5.compressedSize, 4) + A2(e5.uncompressedSize, 4);
            }(e4), meta: { percent: 100 } });
            else for (this.push({ data: r4.fileRecord, meta: { percent: 0 } }); this.contentBuffer.length; ) this.push(this.contentBuffer.shift());
            this.currentFile = null;
          }, s2.prototype.flush = function() {
            for (var e4 = this.bytesWritten, t3 = 0; t3 < this.dirRecords.length; t3++) this.push({ data: this.dirRecords[t3], meta: { percent: 100 } });
            var r4 = this.bytesWritten - e4, n4 = function(e5, t4, r5, n5, i4) {
              var s3 = I2.transformTo("string", i4(n5));
              return R2.CENTRAL_DIRECTORY_END + "\0\0\0\0" + A2(e5, 2) + A2(e5, 2) + A2(t4, 4) + A2(r5, 4) + A2(s3.length, 2) + s3;
            }(this.dirRecords.length, r4, e4, this.zipComment, this.encodeFileName);
            this.push({ data: n4, meta: { percent: 100 } });
          }, s2.prototype.prepareNextSource = function() {
            this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume();
          }, s2.prototype.registerPrevious = function(e4) {
            this._sources.push(e4);
            var t3 = this;
            return e4.on("data", function(e5) {
              t3.processChunk(e5);
            }), e4.on("end", function() {
              t3.closedSource(t3.previous.streamInfo), t3._sources.length ? t3.prepareNextSource() : t3.end();
            }), e4.on("error", function(e5) {
              t3.error(e5);
            }), this;
          }, s2.prototype.resume = function() {
            return !!i3.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), true) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), true));
          }, s2.prototype.error = function(e4) {
            var t3 = this._sources;
            if (!i3.prototype.error.call(this, e4)) return false;
            for (var r4 = 0; r4 < t3.length; r4++) try {
              t3[r4].error(e4);
            } catch (e5) {
            }
            return true;
          }, s2.prototype.lock = function() {
            i3.prototype.lock.call(this);
            for (var e4 = this._sources, t3 = 0; t3 < e4.length; t3++) e4[t3].lock();
          }, t2.exports = s2;
        }, { "../crc32": 4, "../signature": 23, "../stream/GenericWorker": 28, "../utf8": 31, "../utils": 32 }], 9: [function(e3, t2, r3) {
          var u2 = e3("../compressions"), n3 = e3("./ZipFileWorker");
          r3.generateWorker = function(e4, a2, t3) {
            var o2 = new n3(a2.streamFiles, t3, a2.platform, a2.encodeFileName), h2 = 0;
            try {
              e4.forEach(function(e5, t4) {
                h2++;
                var r4 = function(e6, t5) {
                  var r5 = e6 || t5, n5 = u2[r5];
                  if (!n5) throw new Error(r5 + " is not a valid compression method !");
                  return n5;
                }(t4.options.compression, a2.compression), n4 = t4.options.compressionOptions || a2.compressionOptions || {}, i3 = t4.dir, s2 = t4.date;
                t4._compressWorker(r4, n4).withStreamInfo("file", { name: e5, dir: i3, date: s2, comment: t4.comment || "", unixPermissions: t4.unixPermissions, dosPermissions: t4.dosPermissions }).pipe(o2);
              }), o2.entriesCount = h2;
            } catch (e5) {
              o2.error(e5);
            }
            return o2;
          };
        }, { "../compressions": 3, "./ZipFileWorker": 8 }], 10: [function(e3, t2, r3) {
          function n3() {
            if (!(this instanceof n3)) return new n3();
            if (arguments.length) throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
            this.files = /* @__PURE__ */ Object.create(null), this.comment = null, this.root = "", this.clone = function() {
              var e4 = new n3();
              for (var t3 in this) "function" != typeof this[t3] && (e4[t3] = this[t3]);
              return e4;
            };
          }
          (n3.prototype = e3("./object")).loadAsync = e3("./load"), n3.support = e3("./support"), n3.defaults = e3("./defaults"), n3.version = "3.10.1", n3.loadAsync = function(e4, t3) {
            return new n3().loadAsync(e4, t3);
          }, n3.external = e3("./external"), t2.exports = n3;
        }, { "./defaults": 5, "./external": 6, "./load": 11, "./object": 15, "./support": 30 }], 11: [function(e3, t2, r3) {
          var u2 = e3("./utils"), i3 = e3("./external"), n3 = e3("./utf8"), s2 = e3("./zipEntries"), a2 = e3("./stream/Crc32Probe"), l2 = e3("./nodejsUtils");
          function f2(n4) {
            return new i3.Promise(function(e4, t3) {
              var r4 = n4.decompressed.getContentWorker().pipe(new a2());
              r4.on("error", function(e5) {
                t3(e5);
              }).on("end", function() {
                r4.streamInfo.crc32 !== n4.decompressed.crc32 ? t3(new Error("Corrupted zip : CRC32 mismatch")) : e4();
              }).resume();
            });
          }
          t2.exports = function(e4, o2) {
            var h2 = this;
            return o2 = u2.extend(o2 || {}, { base64: false, checkCRC32: false, optimizedBinaryString: false, createFolders: false, decodeFileName: n3.utf8decode }), l2.isNode && l2.isStream(e4) ? i3.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : u2.prepareContent("the loaded zip file", e4, true, o2.optimizedBinaryString, o2.base64).then(function(e5) {
              var t3 = new s2(o2);
              return t3.load(e5), t3;
            }).then(function(e5) {
              var t3 = [i3.Promise.resolve(e5)], r4 = e5.files;
              if (o2.checkCRC32) for (var n4 = 0; n4 < r4.length; n4++) t3.push(f2(r4[n4]));
              return i3.Promise.all(t3);
            }).then(function(e5) {
              for (var t3 = e5.shift(), r4 = t3.files, n4 = 0; n4 < r4.length; n4++) {
                var i4 = r4[n4], s3 = i4.fileNameStr, a3 = u2.resolve(i4.fileNameStr);
                h2.file(a3, i4.decompressed, { binary: true, optimizedBinaryString: true, date: i4.date, dir: i4.dir, comment: i4.fileCommentStr.length ? i4.fileCommentStr : null, unixPermissions: i4.unixPermissions, dosPermissions: i4.dosPermissions, createFolders: o2.createFolders }), i4.dir || (h2.file(a3).unsafeOriginalName = s3);
              }
              return t3.zipComment.length && (h2.comment = t3.zipComment), h2;
            });
          };
        }, { "./external": 6, "./nodejsUtils": 14, "./stream/Crc32Probe": 25, "./utf8": 31, "./utils": 32, "./zipEntries": 33 }], 12: [function(e3, t2, r3) {
          var n3 = e3("../utils"), i3 = e3("../stream/GenericWorker");
          function s2(e4, t3) {
            i3.call(this, "Nodejs stream input adapter for " + e4), this._upstreamEnded = false, this._bindStream(t3);
          }
          n3.inherits(s2, i3), s2.prototype._bindStream = function(e4) {
            var t3 = this;
            (this._stream = e4).pause(), e4.on("data", function(e5) {
              t3.push({ data: e5, meta: { percent: 0 } });
            }).on("error", function(e5) {
              t3.isPaused ? this.generatedError = e5 : t3.error(e5);
            }).on("end", function() {
              t3.isPaused ? t3._upstreamEnded = true : t3.end();
            });
          }, s2.prototype.pause = function() {
            return !!i3.prototype.pause.call(this) && (this._stream.pause(), true);
          }, s2.prototype.resume = function() {
            return !!i3.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), true);
          }, t2.exports = s2;
        }, { "../stream/GenericWorker": 28, "../utils": 32 }], 13: [function(e3, t2, r3) {
          var i3 = e3("readable-stream").Readable;
          function n3(e4, t3, r4) {
            i3.call(this, t3), this._helper = e4;
            var n4 = this;
            e4.on("data", function(e5, t4) {
              n4.push(e5) || n4._helper.pause(), r4 && r4(t4);
            }).on("error", function(e5) {
              n4.emit("error", e5);
            }).on("end", function() {
              n4.push(null);
            });
          }
          e3("../utils").inherits(n3, i3), n3.prototype._read = function() {
            this._helper.resume();
          }, t2.exports = n3;
        }, { "../utils": 32, "readable-stream": 16 }], 14: [function(e3, t2, r3) {
          t2.exports = { isNode: "undefined" != typeof Buffer, newBufferFrom: function(e4, t3) {
            if (Buffer.from && Buffer.from !== Uint8Array.from) return Buffer.from(e4, t3);
            if ("number" == typeof e4) throw new Error('The "data" argument must not be a number');
            return new Buffer(e4, t3);
          }, allocBuffer: function(e4) {
            if (Buffer.alloc) return Buffer.alloc(e4);
            var t3 = new Buffer(e4);
            return t3.fill(0), t3;
          }, isBuffer: function(e4) {
            return Buffer.isBuffer(e4);
          }, isStream: function(e4) {
            return e4 && "function" == typeof e4.on && "function" == typeof e4.pause && "function" == typeof e4.resume;
          } };
        }, {}], 15: [function(e3, t2, r3) {
          function s2(e4, t3, r4) {
            var n4, i4 = u2.getTypeOf(t3), s3 = u2.extend(r4 || {}, f2);
            s3.date = s3.date || /* @__PURE__ */ new Date(), null !== s3.compression && (s3.compression = s3.compression.toUpperCase()), "string" == typeof s3.unixPermissions && (s3.unixPermissions = parseInt(s3.unixPermissions, 8)), s3.unixPermissions && 16384 & s3.unixPermissions && (s3.dir = true), s3.dosPermissions && 16 & s3.dosPermissions && (s3.dir = true), s3.dir && (e4 = g2(e4)), s3.createFolders && (n4 = _2(e4)) && b2.call(this, n4, true);
            var a3 = "string" === i4 && false === s3.binary && false === s3.base64;
            r4 && void 0 !== r4.binary || (s3.binary = !a3), (t3 instanceof c3 && 0 === t3.uncompressedSize || s3.dir || !t3 || 0 === t3.length) && (s3.base64 = false, s3.binary = true, t3 = "", s3.compression = "STORE", i4 = "string");
            var o3 = null;
            o3 = t3 instanceof c3 || t3 instanceof l2 ? t3 : p2.isNode && p2.isStream(t3) ? new m2(e4, t3) : u2.prepareContent(e4, t3, s3.binary, s3.optimizedBinaryString, s3.base64);
            var h3 = new d2(e4, o3, s3);
            this.files[e4] = h3;
          }
          var i3 = e3("./utf8"), u2 = e3("./utils"), l2 = e3("./stream/GenericWorker"), a2 = e3("./stream/StreamHelper"), f2 = e3("./defaults"), c3 = e3("./compressedObject"), d2 = e3("./zipObject"), o2 = e3("./generate"), p2 = e3("./nodejsUtils"), m2 = e3("./nodejs/NodejsStreamInputAdapter"), _2 = function(e4) {
            "/" === e4.slice(-1) && (e4 = e4.substring(0, e4.length - 1));
            var t3 = e4.lastIndexOf("/");
            return 0 < t3 ? e4.substring(0, t3) : "";
          }, g2 = function(e4) {
            return "/" !== e4.slice(-1) && (e4 += "/"), e4;
          }, b2 = function(e4, t3) {
            return t3 = void 0 !== t3 ? t3 : f2.createFolders, e4 = g2(e4), this.files[e4] || s2.call(this, e4, null, { dir: true, createFolders: t3 }), this.files[e4];
          };
          function h2(e4) {
            return "[object RegExp]" === Object.prototype.toString.call(e4);
          }
          var n3 = { load: function() {
            throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
          }, forEach: function(e4) {
            var t3, r4, n4;
            for (t3 in this.files) n4 = this.files[t3], (r4 = t3.slice(this.root.length, t3.length)) && t3.slice(0, this.root.length) === this.root && e4(r4, n4);
          }, filter: function(r4) {
            var n4 = [];
            return this.forEach(function(e4, t3) {
              r4(e4, t3) && n4.push(t3);
            }), n4;
          }, file: function(e4, t3, r4) {
            if (1 !== arguments.length) return e4 = this.root + e4, s2.call(this, e4, t3, r4), this;
            if (h2(e4)) {
              var n4 = e4;
              return this.filter(function(e5, t4) {
                return !t4.dir && n4.test(e5);
              });
            }
            var i4 = this.files[this.root + e4];
            return i4 && !i4.dir ? i4 : null;
          }, folder: function(r4) {
            if (!r4) return this;
            if (h2(r4)) return this.filter(function(e5, t4) {
              return t4.dir && r4.test(e5);
            });
            var e4 = this.root + r4, t3 = b2.call(this, e4), n4 = this.clone();
            return n4.root = t3.name, n4;
          }, remove: function(r4) {
            r4 = this.root + r4;
            var e4 = this.files[r4];
            if (e4 || ("/" !== r4.slice(-1) && (r4 += "/"), e4 = this.files[r4]), e4 && !e4.dir) delete this.files[r4];
            else for (var t3 = this.filter(function(e5, t4) {
              return t4.name.slice(0, r4.length) === r4;
            }), n4 = 0; n4 < t3.length; n4++) delete this.files[t3[n4].name];
            return this;
          }, generate: function() {
            throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
          }, generateInternalStream: function(e4) {
            var t3, r4 = {};
            try {
              if ((r4 = u2.extend(e4 || {}, { streamFiles: false, compression: "STORE", compressionOptions: null, type: "", platform: "DOS", comment: null, mimeType: "application/zip", encodeFileName: i3.utf8encode })).type = r4.type.toLowerCase(), r4.compression = r4.compression.toUpperCase(), "binarystring" === r4.type && (r4.type = "string"), !r4.type) throw new Error("No output type specified.");
              u2.checkSupport(r4.type), "darwin" !== r4.platform && "freebsd" !== r4.platform && "linux" !== r4.platform && "sunos" !== r4.platform || (r4.platform = "UNIX"), "win32" === r4.platform && (r4.platform = "DOS");
              var n4 = r4.comment || this.comment || "";
              t3 = o2.generateWorker(this, r4, n4);
            } catch (e5) {
              (t3 = new l2("error")).error(e5);
            }
            return new a2(t3, r4.type || "string", r4.mimeType);
          }, generateAsync: function(e4, t3) {
            return this.generateInternalStream(e4).accumulate(t3);
          }, generateNodeStream: function(e4, t3) {
            return (e4 = e4 || {}).type || (e4.type = "nodebuffer"), this.generateInternalStream(e4).toNodejsStream(t3);
          } };
          t2.exports = n3;
        }, { "./compressedObject": 2, "./defaults": 5, "./generate": 9, "./nodejs/NodejsStreamInputAdapter": 12, "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31, "./utils": 32, "./zipObject": 35 }], 16: [function(e3, t2, r3) {
          t2.exports = e3("stream");
        }, { stream: void 0 }], 17: [function(e3, t2, r3) {
          var n3 = e3("./DataReader");
          function i3(e4) {
            n3.call(this, e4);
            for (var t3 = 0; t3 < this.data.length; t3++) e4[t3] = 255 & e4[t3];
          }
          e3("../utils").inherits(i3, n3), i3.prototype.byteAt = function(e4) {
            return this.data[this.zero + e4];
          }, i3.prototype.lastIndexOfSignature = function(e4) {
            for (var t3 = e4.charCodeAt(0), r4 = e4.charCodeAt(1), n4 = e4.charCodeAt(2), i4 = e4.charCodeAt(3), s2 = this.length - 4; 0 <= s2; --s2) if (this.data[s2] === t3 && this.data[s2 + 1] === r4 && this.data[s2 + 2] === n4 && this.data[s2 + 3] === i4) return s2 - this.zero;
            return -1;
          }, i3.prototype.readAndCheckSignature = function(e4) {
            var t3 = e4.charCodeAt(0), r4 = e4.charCodeAt(1), n4 = e4.charCodeAt(2), i4 = e4.charCodeAt(3), s2 = this.readData(4);
            return t3 === s2[0] && r4 === s2[1] && n4 === s2[2] && i4 === s2[3];
          }, i3.prototype.readData = function(e4) {
            if (this.checkOffset(e4), 0 === e4) return [];
            var t3 = this.data.slice(this.zero + this.index, this.zero + this.index + e4);
            return this.index += e4, t3;
          }, t2.exports = i3;
        }, { "../utils": 32, "./DataReader": 18 }], 18: [function(e3, t2, r3) {
          var n3 = e3("../utils");
          function i3(e4) {
            this.data = e4, this.length = e4.length, this.index = 0, this.zero = 0;
          }
          i3.prototype = { checkOffset: function(e4) {
            this.checkIndex(this.index + e4);
          }, checkIndex: function(e4) {
            if (this.length < this.zero + e4 || e4 < 0) throw new Error("End of data reached (data length = " + this.length + ", asked index = " + e4 + "). Corrupted zip ?");
          }, setIndex: function(e4) {
            this.checkIndex(e4), this.index = e4;
          }, skip: function(e4) {
            this.setIndex(this.index + e4);
          }, byteAt: function() {
          }, readInt: function(e4) {
            var t3, r4 = 0;
            for (this.checkOffset(e4), t3 = this.index + e4 - 1; t3 >= this.index; t3--) r4 = (r4 << 8) + this.byteAt(t3);
            return this.index += e4, r4;
          }, readString: function(e4) {
            return n3.transformTo("string", this.readData(e4));
          }, readData: function() {
          }, lastIndexOfSignature: function() {
          }, readAndCheckSignature: function() {
          }, readDate: function() {
            var e4 = this.readInt(4);
            return new Date(Date.UTC(1980 + (e4 >> 25 & 127), (e4 >> 21 & 15) - 1, e4 >> 16 & 31, e4 >> 11 & 31, e4 >> 5 & 63, (31 & e4) << 1));
          } }, t2.exports = i3;
        }, { "../utils": 32 }], 19: [function(e3, t2, r3) {
          var n3 = e3("./Uint8ArrayReader");
          function i3(e4) {
            n3.call(this, e4);
          }
          e3("../utils").inherits(i3, n3), i3.prototype.readData = function(e4) {
            this.checkOffset(e4);
            var t3 = this.data.slice(this.zero + this.index, this.zero + this.index + e4);
            return this.index += e4, t3;
          }, t2.exports = i3;
        }, { "../utils": 32, "./Uint8ArrayReader": 21 }], 20: [function(e3, t2, r3) {
          var n3 = e3("./DataReader");
          function i3(e4) {
            n3.call(this, e4);
          }
          e3("../utils").inherits(i3, n3), i3.prototype.byteAt = function(e4) {
            return this.data.charCodeAt(this.zero + e4);
          }, i3.prototype.lastIndexOfSignature = function(e4) {
            return this.data.lastIndexOf(e4) - this.zero;
          }, i3.prototype.readAndCheckSignature = function(e4) {
            return e4 === this.readData(4);
          }, i3.prototype.readData = function(e4) {
            this.checkOffset(e4);
            var t3 = this.data.slice(this.zero + this.index, this.zero + this.index + e4);
            return this.index += e4, t3;
          }, t2.exports = i3;
        }, { "../utils": 32, "./DataReader": 18 }], 21: [function(e3, t2, r3) {
          var n3 = e3("./ArrayReader");
          function i3(e4) {
            n3.call(this, e4);
          }
          e3("../utils").inherits(i3, n3), i3.prototype.readData = function(e4) {
            if (this.checkOffset(e4), 0 === e4) return new Uint8Array(0);
            var t3 = this.data.subarray(this.zero + this.index, this.zero + this.index + e4);
            return this.index += e4, t3;
          }, t2.exports = i3;
        }, { "../utils": 32, "./ArrayReader": 17 }], 22: [function(e3, t2, r3) {
          var n3 = e3("../utils"), i3 = e3("../support"), s2 = e3("./ArrayReader"), a2 = e3("./StringReader"), o2 = e3("./NodeBufferReader"), h2 = e3("./Uint8ArrayReader");
          t2.exports = function(e4) {
            var t3 = n3.getTypeOf(e4);
            return n3.checkSupport(t3), "string" !== t3 || i3.uint8array ? "nodebuffer" === t3 ? new o2(e4) : i3.uint8array ? new h2(n3.transformTo("uint8array", e4)) : new s2(n3.transformTo("array", e4)) : new a2(e4);
          };
        }, { "../support": 30, "../utils": 32, "./ArrayReader": 17, "./NodeBufferReader": 19, "./StringReader": 20, "./Uint8ArrayReader": 21 }], 23: [function(e3, t2, r3) {
          r3.LOCAL_FILE_HEADER = "PK", r3.CENTRAL_FILE_HEADER = "PK", r3.CENTRAL_DIRECTORY_END = "PK", r3.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x07", r3.ZIP64_CENTRAL_DIRECTORY_END = "PK", r3.DATA_DESCRIPTOR = "PK\x07\b";
        }, {}], 24: [function(e3, t2, r3) {
          var n3 = e3("./GenericWorker"), i3 = e3("../utils");
          function s2(e4) {
            n3.call(this, "ConvertWorker to " + e4), this.destType = e4;
          }
          i3.inherits(s2, n3), s2.prototype.processChunk = function(e4) {
            this.push({ data: i3.transformTo(this.destType, e4.data), meta: e4.meta });
          }, t2.exports = s2;
        }, { "../utils": 32, "./GenericWorker": 28 }], 25: [function(e3, t2, r3) {
          var n3 = e3("./GenericWorker"), i3 = e3("../crc32");
          function s2() {
            n3.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0);
          }
          e3("../utils").inherits(s2, n3), s2.prototype.processChunk = function(e4) {
            this.streamInfo.crc32 = i3(e4.data, this.streamInfo.crc32 || 0), this.push(e4);
          }, t2.exports = s2;
        }, { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 }], 26: [function(e3, t2, r3) {
          var n3 = e3("../utils"), i3 = e3("./GenericWorker");
          function s2(e4) {
            i3.call(this, "DataLengthProbe for " + e4), this.propName = e4, this.withStreamInfo(e4, 0);
          }
          n3.inherits(s2, i3), s2.prototype.processChunk = function(e4) {
            if (e4) {
              var t3 = this.streamInfo[this.propName] || 0;
              this.streamInfo[this.propName] = t3 + e4.data.length;
            }
            i3.prototype.processChunk.call(this, e4);
          }, t2.exports = s2;
        }, { "../utils": 32, "./GenericWorker": 28 }], 27: [function(e3, t2, r3) {
          var n3 = e3("../utils"), i3 = e3("./GenericWorker");
          function s2(e4) {
            i3.call(this, "DataWorker");
            var t3 = this;
            this.dataIsReady = false, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = false, e4.then(function(e5) {
              t3.dataIsReady = true, t3.data = e5, t3.max = e5 && e5.length || 0, t3.type = n3.getTypeOf(e5), t3.isPaused || t3._tickAndRepeat();
            }, function(e5) {
              t3.error(e5);
            });
          }
          n3.inherits(s2, i3), s2.prototype.cleanUp = function() {
            i3.prototype.cleanUp.call(this), this.data = null;
          }, s2.prototype.resume = function() {
            return !!i3.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = true, n3.delay(this._tickAndRepeat, [], this)), true);
          }, s2.prototype._tickAndRepeat = function() {
            this._tickScheduled = false, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n3.delay(this._tickAndRepeat, [], this), this._tickScheduled = true));
          }, s2.prototype._tick = function() {
            if (this.isPaused || this.isFinished) return false;
            var e4 = null, t3 = Math.min(this.max, this.index + 16384);
            if (this.index >= this.max) return this.end();
            switch (this.type) {
              case "string":
                e4 = this.data.substring(this.index, t3);
                break;
              case "uint8array":
                e4 = this.data.subarray(this.index, t3);
                break;
              case "array":
              case "nodebuffer":
                e4 = this.data.slice(this.index, t3);
            }
            return this.index = t3, this.push({ data: e4, meta: { percent: this.max ? this.index / this.max * 100 : 0 } });
          }, t2.exports = s2;
        }, { "../utils": 32, "./GenericWorker": 28 }], 28: [function(e3, t2, r3) {
          function n3(e4) {
            this.name = e4 || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = true, this.isFinished = false, this.isLocked = false, this._listeners = { data: [], end: [], error: [] }, this.previous = null;
          }
          n3.prototype = { push: function(e4) {
            this.emit("data", e4);
          }, end: function() {
            if (this.isFinished) return false;
            this.flush();
            try {
              this.emit("end"), this.cleanUp(), this.isFinished = true;
            } catch (e4) {
              this.emit("error", e4);
            }
            return true;
          }, error: function(e4) {
            return !this.isFinished && (this.isPaused ? this.generatedError = e4 : (this.isFinished = true, this.emit("error", e4), this.previous && this.previous.error(e4), this.cleanUp()), true);
          }, on: function(e4, t3) {
            return this._listeners[e4].push(t3), this;
          }, cleanUp: function() {
            this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = [];
          }, emit: function(e4, t3) {
            if (this._listeners[e4]) for (var r4 = 0; r4 < this._listeners[e4].length; r4++) this._listeners[e4][r4].call(this, t3);
          }, pipe: function(e4) {
            return e4.registerPrevious(this);
          }, registerPrevious: function(e4) {
            if (this.isLocked) throw new Error("The stream '" + this + "' has already been used.");
            this.streamInfo = e4.streamInfo, this.mergeStreamInfo(), this.previous = e4;
            var t3 = this;
            return e4.on("data", function(e5) {
              t3.processChunk(e5);
            }), e4.on("end", function() {
              t3.end();
            }), e4.on("error", function(e5) {
              t3.error(e5);
            }), this;
          }, pause: function() {
            return !this.isPaused && !this.isFinished && (this.isPaused = true, this.previous && this.previous.pause(), true);
          }, resume: function() {
            if (!this.isPaused || this.isFinished) return false;
            var e4 = this.isPaused = false;
            return this.generatedError && (this.error(this.generatedError), e4 = true), this.previous && this.previous.resume(), !e4;
          }, flush: function() {
          }, processChunk: function(e4) {
            this.push(e4);
          }, withStreamInfo: function(e4, t3) {
            return this.extraStreamInfo[e4] = t3, this.mergeStreamInfo(), this;
          }, mergeStreamInfo: function() {
            for (var e4 in this.extraStreamInfo) Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e4) && (this.streamInfo[e4] = this.extraStreamInfo[e4]);
          }, lock: function() {
            if (this.isLocked) throw new Error("The stream '" + this + "' has already been used.");
            this.isLocked = true, this.previous && this.previous.lock();
          }, toString: function() {
            var e4 = "Worker " + this.name;
            return this.previous ? this.previous + " -> " + e4 : e4;
          } }, t2.exports = n3;
        }, {}], 29: [function(e3, t2, r3) {
          var h2 = e3("../utils"), i3 = e3("./ConvertWorker"), s2 = e3("./GenericWorker"), u2 = e3("../base64"), n3 = e3("../support"), a2 = e3("../external"), o2 = null;
          if (n3.nodestream) try {
            o2 = e3("../nodejs/NodejsStreamOutputAdapter");
          } catch (e4) {
          }
          function l2(e4, o3) {
            return new a2.Promise(function(t3, r4) {
              var n4 = [], i4 = e4._internalType, s3 = e4._outputType, a3 = e4._mimeType;
              e4.on("data", function(e5, t4) {
                n4.push(e5), o3 && o3(t4);
              }).on("error", function(e5) {
                n4 = [], r4(e5);
              }).on("end", function() {
                try {
                  var e5 = function(e6, t4, r5) {
                    switch (e6) {
                      case "blob":
                        return h2.newBlob(h2.transformTo("arraybuffer", t4), r5);
                      case "base64":
                        return u2.encode(t4);
                      default:
                        return h2.transformTo(e6, t4);
                    }
                  }(s3, function(e6, t4) {
                    var r5, n5 = 0, i5 = null, s4 = 0;
                    for (r5 = 0; r5 < t4.length; r5++) s4 += t4[r5].length;
                    switch (e6) {
                      case "string":
                        return t4.join("");
                      case "array":
                        return Array.prototype.concat.apply([], t4);
                      case "uint8array":
                        for (i5 = new Uint8Array(s4), r5 = 0; r5 < t4.length; r5++) i5.set(t4[r5], n5), n5 += t4[r5].length;
                        return i5;
                      case "nodebuffer":
                        return Buffer.concat(t4);
                      default:
                        throw new Error("concat : unsupported type '" + e6 + "'");
                    }
                  }(i4, n4), a3);
                  t3(e5);
                } catch (e6) {
                  r4(e6);
                }
                n4 = [];
              }).resume();
            });
          }
          function f2(e4, t3, r4) {
            var n4 = t3;
            switch (t3) {
              case "blob":
              case "arraybuffer":
                n4 = "uint8array";
                break;
              case "base64":
                n4 = "string";
            }
            try {
              this._internalType = n4, this._outputType = t3, this._mimeType = r4, h2.checkSupport(n4), this._worker = e4.pipe(new i3(n4)), e4.lock();
            } catch (e5) {
              this._worker = new s2("error"), this._worker.error(e5);
            }
          }
          f2.prototype = { accumulate: function(e4) {
            return l2(this, e4);
          }, on: function(e4, t3) {
            var r4 = this;
            return "data" === e4 ? this._worker.on(e4, function(e5) {
              t3.call(r4, e5.data, e5.meta);
            }) : this._worker.on(e4, function() {
              h2.delay(t3, arguments, r4);
            }), this;
          }, resume: function() {
            return h2.delay(this._worker.resume, [], this._worker), this;
          }, pause: function() {
            return this._worker.pause(), this;
          }, toNodejsStream: function(e4) {
            if (h2.checkSupport("nodestream"), "nodebuffer" !== this._outputType) throw new Error(this._outputType + " is not supported by this method");
            return new o2(this, { objectMode: "nodebuffer" !== this._outputType }, e4);
          } }, t2.exports = f2;
        }, { "../base64": 1, "../external": 6, "../nodejs/NodejsStreamOutputAdapter": 13, "../support": 30, "../utils": 32, "./ConvertWorker": 24, "./GenericWorker": 28 }], 30: [function(e3, t2, r3) {
          if (r3.base64 = true, r3.array = true, r3.string = true, r3.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r3.nodebuffer = "undefined" != typeof Buffer, r3.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer) r3.blob = false;
          else {
            var n3 = new ArrayBuffer(0);
            try {
              r3.blob = 0 === new Blob([n3], { type: "application/zip" }).size;
            } catch (e4) {
              try {
                var i3 = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();
                i3.append(n3), r3.blob = 0 === i3.getBlob("application/zip").size;
              } catch (e5) {
                r3.blob = false;
              }
            }
          }
          try {
            r3.nodestream = !!e3("readable-stream").Readable;
          } catch (e4) {
            r3.nodestream = false;
          }
        }, { "readable-stream": 16 }], 31: [function(e3, t2, s2) {
          for (var o2 = e3("./utils"), h2 = e3("./support"), r3 = e3("./nodejsUtils"), n3 = e3("./stream/GenericWorker"), u2 = new Array(256), i3 = 0; i3 < 256; i3++) u2[i3] = 252 <= i3 ? 6 : 248 <= i3 ? 5 : 240 <= i3 ? 4 : 224 <= i3 ? 3 : 192 <= i3 ? 2 : 1;
          u2[254] = u2[254] = 1;
          function a2() {
            n3.call(this, "utf-8 decode"), this.leftOver = null;
          }
          function l2() {
            n3.call(this, "utf-8 encode");
          }
          s2.utf8encode = function(e4) {
            return h2.nodebuffer ? r3.newBufferFrom(e4, "utf-8") : function(e5) {
              var t3, r4, n4, i4, s3, a3 = e5.length, o3 = 0;
              for (i4 = 0; i4 < a3; i4++) 55296 == (64512 & (r4 = e5.charCodeAt(i4))) && i4 + 1 < a3 && 56320 == (64512 & (n4 = e5.charCodeAt(i4 + 1))) && (r4 = 65536 + (r4 - 55296 << 10) + (n4 - 56320), i4++), o3 += r4 < 128 ? 1 : r4 < 2048 ? 2 : r4 < 65536 ? 3 : 4;
              for (t3 = h2.uint8array ? new Uint8Array(o3) : new Array(o3), i4 = s3 = 0; s3 < o3; i4++) 55296 == (64512 & (r4 = e5.charCodeAt(i4))) && i4 + 1 < a3 && 56320 == (64512 & (n4 = e5.charCodeAt(i4 + 1))) && (r4 = 65536 + (r4 - 55296 << 10) + (n4 - 56320), i4++), r4 < 128 ? t3[s3++] = r4 : (r4 < 2048 ? t3[s3++] = 192 | r4 >>> 6 : (r4 < 65536 ? t3[s3++] = 224 | r4 >>> 12 : (t3[s3++] = 240 | r4 >>> 18, t3[s3++] = 128 | r4 >>> 12 & 63), t3[s3++] = 128 | r4 >>> 6 & 63), t3[s3++] = 128 | 63 & r4);
              return t3;
            }(e4);
          }, s2.utf8decode = function(e4) {
            return h2.nodebuffer ? o2.transformTo("nodebuffer", e4).toString("utf-8") : function(e5) {
              var t3, r4, n4, i4, s3 = e5.length, a3 = new Array(2 * s3);
              for (t3 = r4 = 0; t3 < s3; ) if ((n4 = e5[t3++]) < 128) a3[r4++] = n4;
              else if (4 < (i4 = u2[n4])) a3[r4++] = 65533, t3 += i4 - 1;
              else {
                for (n4 &= 2 === i4 ? 31 : 3 === i4 ? 15 : 7; 1 < i4 && t3 < s3; ) n4 = n4 << 6 | 63 & e5[t3++], i4--;
                1 < i4 ? a3[r4++] = 65533 : n4 < 65536 ? a3[r4++] = n4 : (n4 -= 65536, a3[r4++] = 55296 | n4 >> 10 & 1023, a3[r4++] = 56320 | 1023 & n4);
              }
              return a3.length !== r4 && (a3.subarray ? a3 = a3.subarray(0, r4) : a3.length = r4), o2.applyFromCharCode(a3);
            }(e4 = o2.transformTo(h2.uint8array ? "uint8array" : "array", e4));
          }, o2.inherits(a2, n3), a2.prototype.processChunk = function(e4) {
            var t3 = o2.transformTo(h2.uint8array ? "uint8array" : "array", e4.data);
            if (this.leftOver && this.leftOver.length) {
              if (h2.uint8array) {
                var r4 = t3;
                (t3 = new Uint8Array(r4.length + this.leftOver.length)).set(this.leftOver, 0), t3.set(r4, this.leftOver.length);
              } else t3 = this.leftOver.concat(t3);
              this.leftOver = null;
            }
            var n4 = function(e5, t4) {
              var r5;
              for ((t4 = t4 || e5.length) > e5.length && (t4 = e5.length), r5 = t4 - 1; 0 <= r5 && 128 == (192 & e5[r5]); ) r5--;
              return r5 < 0 ? t4 : 0 === r5 ? t4 : r5 + u2[e5[r5]] > t4 ? r5 : t4;
            }(t3), i4 = t3;
            n4 !== t3.length && (h2.uint8array ? (i4 = t3.subarray(0, n4), this.leftOver = t3.subarray(n4, t3.length)) : (i4 = t3.slice(0, n4), this.leftOver = t3.slice(n4, t3.length))), this.push({ data: s2.utf8decode(i4), meta: e4.meta });
          }, a2.prototype.flush = function() {
            this.leftOver && this.leftOver.length && (this.push({ data: s2.utf8decode(this.leftOver), meta: {} }), this.leftOver = null);
          }, s2.Utf8DecodeWorker = a2, o2.inherits(l2, n3), l2.prototype.processChunk = function(e4) {
            this.push({ data: s2.utf8encode(e4.data), meta: e4.meta });
          }, s2.Utf8EncodeWorker = l2;
        }, { "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./support": 30, "./utils": 32 }], 32: [function(e3, t2, a2) {
          var o2 = e3("./support"), h2 = e3("./base64"), r3 = e3("./nodejsUtils"), u2 = e3("./external");
          function n3(e4) {
            return e4;
          }
          function l2(e4, t3) {
            for (var r4 = 0; r4 < e4.length; ++r4) t3[r4] = 255 & e4.charCodeAt(r4);
            return t3;
          }
          e3("setimmediate"), a2.newBlob = function(t3, r4) {
            a2.checkSupport("blob");
            try {
              return new Blob([t3], { type: r4 });
            } catch (e4) {
              try {
                var n4 = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();
                return n4.append(t3), n4.getBlob(r4);
              } catch (e5) {
                throw new Error("Bug : can't construct the Blob.");
              }
            }
          };
          var i3 = { stringifyByChunk: function(e4, t3, r4) {
            var n4 = [], i4 = 0, s3 = e4.length;
            if (s3 <= r4) return String.fromCharCode.apply(null, e4);
            for (; i4 < s3; ) "array" === t3 || "nodebuffer" === t3 ? n4.push(String.fromCharCode.apply(null, e4.slice(i4, Math.min(i4 + r4, s3)))) : n4.push(String.fromCharCode.apply(null, e4.subarray(i4, Math.min(i4 + r4, s3)))), i4 += r4;
            return n4.join("");
          }, stringifyByChar: function(e4) {
            for (var t3 = "", r4 = 0; r4 < e4.length; r4++) t3 += String.fromCharCode(e4[r4]);
            return t3;
          }, applyCanBeUsed: { uint8array: function() {
            try {
              return o2.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length;
            } catch (e4) {
              return false;
            }
          }(), nodebuffer: function() {
            try {
              return o2.nodebuffer && 1 === String.fromCharCode.apply(null, r3.allocBuffer(1)).length;
            } catch (e4) {
              return false;
            }
          }() } };
          function s2(e4) {
            var t3 = 65536, r4 = a2.getTypeOf(e4), n4 = true;
            if ("uint8array" === r4 ? n4 = i3.applyCanBeUsed.uint8array : "nodebuffer" === r4 && (n4 = i3.applyCanBeUsed.nodebuffer), n4) for (; 1 < t3; ) try {
              return i3.stringifyByChunk(e4, r4, t3);
            } catch (e5) {
              t3 = Math.floor(t3 / 2);
            }
            return i3.stringifyByChar(e4);
          }
          function f2(e4, t3) {
            for (var r4 = 0; r4 < e4.length; r4++) t3[r4] = e4[r4];
            return t3;
          }
          a2.applyFromCharCode = s2;
          var c3 = {};
          c3.string = { string: n3, array: function(e4) {
            return l2(e4, new Array(e4.length));
          }, arraybuffer: function(e4) {
            return c3.string.uint8array(e4).buffer;
          }, uint8array: function(e4) {
            return l2(e4, new Uint8Array(e4.length));
          }, nodebuffer: function(e4) {
            return l2(e4, r3.allocBuffer(e4.length));
          } }, c3.array = { string: s2, array: n3, arraybuffer: function(e4) {
            return new Uint8Array(e4).buffer;
          }, uint8array: function(e4) {
            return new Uint8Array(e4);
          }, nodebuffer: function(e4) {
            return r3.newBufferFrom(e4);
          } }, c3.arraybuffer = { string: function(e4) {
            return s2(new Uint8Array(e4));
          }, array: function(e4) {
            return f2(new Uint8Array(e4), new Array(e4.byteLength));
          }, arraybuffer: n3, uint8array: function(e4) {
            return new Uint8Array(e4);
          }, nodebuffer: function(e4) {
            return r3.newBufferFrom(new Uint8Array(e4));
          } }, c3.uint8array = { string: s2, array: function(e4) {
            return f2(e4, new Array(e4.length));
          }, arraybuffer: function(e4) {
            return e4.buffer;
          }, uint8array: n3, nodebuffer: function(e4) {
            return r3.newBufferFrom(e4);
          } }, c3.nodebuffer = { string: s2, array: function(e4) {
            return f2(e4, new Array(e4.length));
          }, arraybuffer: function(e4) {
            return c3.nodebuffer.uint8array(e4).buffer;
          }, uint8array: function(e4) {
            return f2(e4, new Uint8Array(e4.length));
          }, nodebuffer: n3 }, a2.transformTo = function(e4, t3) {
            if (t3 = t3 || "", !e4) return t3;
            a2.checkSupport(e4);
            var r4 = a2.getTypeOf(t3);
            return c3[r4][e4](t3);
          }, a2.resolve = function(e4) {
            for (var t3 = e4.split("/"), r4 = [], n4 = 0; n4 < t3.length; n4++) {
              var i4 = t3[n4];
              "." === i4 || "" === i4 && 0 !== n4 && n4 !== t3.length - 1 || (".." === i4 ? r4.pop() : r4.push(i4));
            }
            return r4.join("/");
          }, a2.getTypeOf = function(e4) {
            return "string" == typeof e4 ? "string" : "[object Array]" === Object.prototype.toString.call(e4) ? "array" : o2.nodebuffer && r3.isBuffer(e4) ? "nodebuffer" : o2.uint8array && e4 instanceof Uint8Array ? "uint8array" : o2.arraybuffer && e4 instanceof ArrayBuffer ? "arraybuffer" : void 0;
          }, a2.checkSupport = function(e4) {
            if (!o2[e4.toLowerCase()]) throw new Error(e4 + " is not supported by this platform");
          }, a2.MAX_VALUE_16BITS = 65535, a2.MAX_VALUE_32BITS = -1, a2.pretty = function(e4) {
            var t3, r4, n4 = "";
            for (r4 = 0; r4 < (e4 || "").length; r4++) n4 += "\\x" + ((t3 = e4.charCodeAt(r4)) < 16 ? "0" : "") + t3.toString(16).toUpperCase();
            return n4;
          }, a2.delay = function(e4, t3, r4) {
            setImmediate(function() {
              e4.apply(r4 || null, t3 || []);
            });
          }, a2.inherits = function(e4, t3) {
            function r4() {
            }
            r4.prototype = t3.prototype, e4.prototype = new r4();
          }, a2.extend = function() {
            var e4, t3, r4 = {};
            for (e4 = 0; e4 < arguments.length; e4++) for (t3 in arguments[e4]) Object.prototype.hasOwnProperty.call(arguments[e4], t3) && void 0 === r4[t3] && (r4[t3] = arguments[e4][t3]);
            return r4;
          }, a2.prepareContent = function(r4, e4, n4, i4, s3) {
            return u2.Promise.resolve(e4).then(function(n5) {
              return o2.blob && (n5 instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(n5))) && "undefined" != typeof FileReader ? new u2.Promise(function(t3, r5) {
                var e5 = new FileReader();
                e5.onload = function(e6) {
                  t3(e6.target.result);
                }, e5.onerror = function(e6) {
                  r5(e6.target.error);
                }, e5.readAsArrayBuffer(n5);
              }) : n5;
            }).then(function(e5) {
              var t3 = a2.getTypeOf(e5);
              return t3 ? ("arraybuffer" === t3 ? e5 = a2.transformTo("uint8array", e5) : "string" === t3 && (s3 ? e5 = h2.decode(e5) : n4 && true !== i4 && (e5 = function(e6) {
                return l2(e6, o2.uint8array ? new Uint8Array(e6.length) : new Array(e6.length));
              }(e5))), e5) : u2.Promise.reject(new Error("Can't read the data of '" + r4 + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"));
            });
          };
        }, { "./base64": 1, "./external": 6, "./nodejsUtils": 14, "./support": 30, setimmediate: 54 }], 33: [function(e3, t2, r3) {
          var n3 = e3("./reader/readerFor"), i3 = e3("./utils"), s2 = e3("./signature"), a2 = e3("./zipEntry"), o2 = e3("./support");
          function h2(e4) {
            this.files = [], this.loadOptions = e4;
          }
          h2.prototype = { checkSignature: function(e4) {
            if (!this.reader.readAndCheckSignature(e4)) {
              this.reader.index -= 4;
              var t3 = this.reader.readString(4);
              throw new Error("Corrupted zip or bug: unexpected signature (" + i3.pretty(t3) + ", expected " + i3.pretty(e4) + ")");
            }
          }, isSignature: function(e4, t3) {
            var r4 = this.reader.index;
            this.reader.setIndex(e4);
            var n4 = this.reader.readString(4) === t3;
            return this.reader.setIndex(r4), n4;
          }, readBlockEndOfCentral: function() {
            this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2);
            var e4 = this.reader.readData(this.zipCommentLength), t3 = o2.uint8array ? "uint8array" : "array", r4 = i3.transformTo(t3, e4);
            this.zipComment = this.loadOptions.decodeFileName(r4);
          }, readBlockZip64EndOfCentral: function() {
            this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {};
            for (var e4, t3, r4, n4 = this.zip64EndOfCentralSize - 44; 0 < n4; ) e4 = this.reader.readInt(2), t3 = this.reader.readInt(4), r4 = this.reader.readData(t3), this.zip64ExtensibleData[e4] = { id: e4, length: t3, value: r4 };
          }, readBlockZip64EndOfCentralLocator: function() {
            if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error("Multi-volumes zip are not supported");
          }, readLocalFiles: function() {
            var e4, t3;
            for (e4 = 0; e4 < this.files.length; e4++) t3 = this.files[e4], this.reader.setIndex(t3.localHeaderOffset), this.checkSignature(s2.LOCAL_FILE_HEADER), t3.readLocalPart(this.reader), t3.handleUTF8(), t3.processAttributes();
          }, readCentralDir: function() {
            var e4;
            for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s2.CENTRAL_FILE_HEADER); ) (e4 = new a2({ zip64: this.zip64 }, this.loadOptions)).readCentralPart(this.reader), this.files.push(e4);
            if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
          }, readEndOfCentral: function() {
            var e4 = this.reader.lastIndexOfSignature(s2.CENTRAL_DIRECTORY_END);
            if (e4 < 0) throw !this.isSignature(0, s2.LOCAL_FILE_HEADER) ? new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html") : new Error("Corrupted zip: can't find end of central directory");
            this.reader.setIndex(e4);
            var t3 = e4;
            if (this.checkSignature(s2.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i3.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i3.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i3.MAX_VALUE_16BITS || this.centralDirRecords === i3.MAX_VALUE_16BITS || this.centralDirSize === i3.MAX_VALUE_32BITS || this.centralDirOffset === i3.MAX_VALUE_32BITS) {
              if (this.zip64 = true, (e4 = this.reader.lastIndexOfSignature(s2.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");
              if (this.reader.setIndex(e4), this.checkSignature(s2.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s2.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s2.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");
              this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s2.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral();
            }
            var r4 = this.centralDirOffset + this.centralDirSize;
            this.zip64 && (r4 += 20, r4 += 12 + this.zip64EndOfCentralSize);
            var n4 = t3 - r4;
            if (0 < n4) this.isSignature(t3, s2.CENTRAL_FILE_HEADER) || (this.reader.zero = n4);
            else if (n4 < 0) throw new Error("Corrupted zip: missing " + Math.abs(n4) + " bytes.");
          }, prepareReader: function(e4) {
            this.reader = n3(e4);
          }, load: function(e4) {
            this.prepareReader(e4), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles();
          } }, t2.exports = h2;
        }, { "./reader/readerFor": 22, "./signature": 23, "./support": 30, "./utils": 32, "./zipEntry": 34 }], 34: [function(e3, t2, r3) {
          var n3 = e3("./reader/readerFor"), s2 = e3("./utils"), i3 = e3("./compressedObject"), a2 = e3("./crc32"), o2 = e3("./utf8"), h2 = e3("./compressions"), u2 = e3("./support");
          function l2(e4, t3) {
            this.options = e4, this.loadOptions = t3;
          }
          l2.prototype = { isEncrypted: function() {
            return 1 == (1 & this.bitFlag);
          }, useUTF8: function() {
            return 2048 == (2048 & this.bitFlag);
          }, readLocalPart: function(e4) {
            var t3, r4;
            if (e4.skip(22), this.fileNameLength = e4.readInt(2), r4 = e4.readInt(2), this.fileName = e4.readData(this.fileNameLength), e4.skip(r4), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");
            if (null === (t3 = function(e5) {
              for (var t4 in h2) if (Object.prototype.hasOwnProperty.call(h2, t4) && h2[t4].magic === e5) return h2[t4];
              return null;
            }(this.compressionMethod))) throw new Error("Corrupted zip : compression " + s2.pretty(this.compressionMethod) + " unknown (inner file : " + s2.transformTo("string", this.fileName) + ")");
            this.decompressed = new i3(this.compressedSize, this.uncompressedSize, this.crc32, t3, e4.readData(this.compressedSize));
          }, readCentralPart: function(e4) {
            this.versionMadeBy = e4.readInt(2), e4.skip(2), this.bitFlag = e4.readInt(2), this.compressionMethod = e4.readString(2), this.date = e4.readDate(), this.crc32 = e4.readInt(4), this.compressedSize = e4.readInt(4), this.uncompressedSize = e4.readInt(4);
            var t3 = e4.readInt(2);
            if (this.extraFieldsLength = e4.readInt(2), this.fileCommentLength = e4.readInt(2), this.diskNumberStart = e4.readInt(2), this.internalFileAttributes = e4.readInt(2), this.externalFileAttributes = e4.readInt(4), this.localHeaderOffset = e4.readInt(4), this.isEncrypted()) throw new Error("Encrypted zip are not supported");
            e4.skip(t3), this.readExtraFields(e4), this.parseZIP64ExtraField(e4), this.fileComment = e4.readData(this.fileCommentLength);
          }, processAttributes: function() {
            this.unixPermissions = null, this.dosPermissions = null;
            var e4 = this.versionMadeBy >> 8;
            this.dir = !!(16 & this.externalFileAttributes), 0 == e4 && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == e4 && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = true);
          }, parseZIP64ExtraField: function() {
            if (this.extraFields[1]) {
              var e4 = n3(this.extraFields[1].value);
              this.uncompressedSize === s2.MAX_VALUE_32BITS && (this.uncompressedSize = e4.readInt(8)), this.compressedSize === s2.MAX_VALUE_32BITS && (this.compressedSize = e4.readInt(8)), this.localHeaderOffset === s2.MAX_VALUE_32BITS && (this.localHeaderOffset = e4.readInt(8)), this.diskNumberStart === s2.MAX_VALUE_32BITS && (this.diskNumberStart = e4.readInt(4));
            }
          }, readExtraFields: function(e4) {
            var t3, r4, n4, i4 = e4.index + this.extraFieldsLength;
            for (this.extraFields || (this.extraFields = {}); e4.index + 4 < i4; ) t3 = e4.readInt(2), r4 = e4.readInt(2), n4 = e4.readData(r4), this.extraFields[t3] = { id: t3, length: r4, value: n4 };
            e4.setIndex(i4);
          }, handleUTF8: function() {
            var e4 = u2.uint8array ? "uint8array" : "array";
            if (this.useUTF8()) this.fileNameStr = o2.utf8decode(this.fileName), this.fileCommentStr = o2.utf8decode(this.fileComment);
            else {
              var t3 = this.findExtraFieldUnicodePath();
              if (null !== t3) this.fileNameStr = t3;
              else {
                var r4 = s2.transformTo(e4, this.fileName);
                this.fileNameStr = this.loadOptions.decodeFileName(r4);
              }
              var n4 = this.findExtraFieldUnicodeComment();
              if (null !== n4) this.fileCommentStr = n4;
              else {
                var i4 = s2.transformTo(e4, this.fileComment);
                this.fileCommentStr = this.loadOptions.decodeFileName(i4);
              }
            }
          }, findExtraFieldUnicodePath: function() {
            var e4 = this.extraFields[28789];
            if (e4) {
              var t3 = n3(e4.value);
              return 1 !== t3.readInt(1) ? null : a2(this.fileName) !== t3.readInt(4) ? null : o2.utf8decode(t3.readData(e4.length - 5));
            }
            return null;
          }, findExtraFieldUnicodeComment: function() {
            var e4 = this.extraFields[25461];
            if (e4) {
              var t3 = n3(e4.value);
              return 1 !== t3.readInt(1) ? null : a2(this.fileComment) !== t3.readInt(4) ? null : o2.utf8decode(t3.readData(e4.length - 5));
            }
            return null;
          } }, t2.exports = l2;
        }, { "./compressedObject": 2, "./compressions": 3, "./crc32": 4, "./reader/readerFor": 22, "./support": 30, "./utf8": 31, "./utils": 32 }], 35: [function(e3, t2, r3) {
          function n3(e4, t3, r4) {
            this.name = e4, this.dir = r4.dir, this.date = r4.date, this.comment = r4.comment, this.unixPermissions = r4.unixPermissions, this.dosPermissions = r4.dosPermissions, this._data = t3, this._dataBinary = r4.binary, this.options = { compression: r4.compression, compressionOptions: r4.compressionOptions };
          }
          var s2 = e3("./stream/StreamHelper"), i3 = e3("./stream/DataWorker"), a2 = e3("./utf8"), o2 = e3("./compressedObject"), h2 = e3("./stream/GenericWorker");
          n3.prototype = { internalStream: function(e4) {
            var t3 = null, r4 = "string";
            try {
              if (!e4) throw new Error("No output type specified.");
              var n4 = "string" === (r4 = e4.toLowerCase()) || "text" === r4;
              "binarystring" !== r4 && "text" !== r4 || (r4 = "string"), t3 = this._decompressWorker();
              var i4 = !this._dataBinary;
              i4 && !n4 && (t3 = t3.pipe(new a2.Utf8EncodeWorker())), !i4 && n4 && (t3 = t3.pipe(new a2.Utf8DecodeWorker()));
            } catch (e5) {
              (t3 = new h2("error")).error(e5);
            }
            return new s2(t3, r4, "");
          }, async: function(e4, t3) {
            return this.internalStream(e4).accumulate(t3);
          }, nodeStream: function(e4, t3) {
            return this.internalStream(e4 || "nodebuffer").toNodejsStream(t3);
          }, _compressWorker: function(e4, t3) {
            if (this._data instanceof o2 && this._data.compression.magic === e4.magic) return this._data.getCompressedWorker();
            var r4 = this._decompressWorker();
            return this._dataBinary || (r4 = r4.pipe(new a2.Utf8EncodeWorker())), o2.createWorkerFrom(r4, e4, t3);
          }, _decompressWorker: function() {
            return this._data instanceof o2 ? this._data.getContentWorker() : this._data instanceof h2 ? this._data : new i3(this._data);
          } };
          for (var u2 = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l2 = function() {
            throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
          }, f2 = 0; f2 < u2.length; f2++) n3.prototype[u2[f2]] = l2;
          t2.exports = n3;
        }, { "./compressedObject": 2, "./stream/DataWorker": 27, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31 }], 36: [function(e3, l2, t2) {
          (function(t3) {
            var r3, n3, e4 = t3.MutationObserver || t3.WebKitMutationObserver;
            if (e4) {
              var i3 = 0, s2 = new e4(u2), a2 = t3.document.createTextNode("");
              s2.observe(a2, { characterData: true }), r3 = function() {
                a2.data = i3 = ++i3 % 2;
              };
            } else if (t3.setImmediate || void 0 === t3.MessageChannel) r3 = "document" in t3 && "onreadystatechange" in t3.document.createElement("script") ? function() {
              var e5 = t3.document.createElement("script");
              e5.onreadystatechange = function() {
                u2(), e5.onreadystatechange = null, e5.parentNode.removeChild(e5), e5 = null;
              }, t3.document.documentElement.appendChild(e5);
            } : function() {
              setTimeout(u2, 0);
            };
            else {
              var o2 = new t3.MessageChannel();
              o2.port1.onmessage = u2, r3 = function() {
                o2.port2.postMessage(0);
              };
            }
            var h2 = [];
            function u2() {
              var e5, t4;
              n3 = true;
              for (var r4 = h2.length; r4; ) {
                for (t4 = h2, h2 = [], e5 = -1; ++e5 < r4; ) t4[e5]();
                r4 = h2.length;
              }
              n3 = false;
            }
            l2.exports = function(e5) {
              1 !== h2.push(e5) || n3 || r3();
            };
          }).call(this, "undefined" != typeof commonjsGlobal ? commonjsGlobal : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
        }, {}], 37: [function(e3, t2, r3) {
          var i3 = e3("immediate");
          function u2() {
          }
          var l2 = {}, s2 = ["REJECTED"], a2 = ["FULFILLED"], n3 = ["PENDING"];
          function o2(e4) {
            if ("function" != typeof e4) throw new TypeError("resolver must be a function");
            this.state = n3, this.queue = [], this.outcome = void 0, e4 !== u2 && d2(this, e4);
          }
          function h2(e4, t3, r4) {
            this.promise = e4, "function" == typeof t3 && (this.onFulfilled = t3, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r4 && (this.onRejected = r4, this.callRejected = this.otherCallRejected);
          }
          function f2(t3, r4, n4) {
            i3(function() {
              var e4;
              try {
                e4 = r4(n4);
              } catch (e5) {
                return l2.reject(t3, e5);
              }
              e4 === t3 ? l2.reject(t3, new TypeError("Cannot resolve promise with itself")) : l2.resolve(t3, e4);
            });
          }
          function c3(e4) {
            var t3 = e4 && e4.then;
            if (e4 && ("object" == typeof e4 || "function" == typeof e4) && "function" == typeof t3) return function() {
              t3.apply(e4, arguments);
            };
          }
          function d2(t3, e4) {
            var r4 = false;
            function n4(e5) {
              r4 || (r4 = true, l2.reject(t3, e5));
            }
            function i4(e5) {
              r4 || (r4 = true, l2.resolve(t3, e5));
            }
            var s3 = p2(function() {
              e4(i4, n4);
            });
            "error" === s3.status && n4(s3.value);
          }
          function p2(e4, t3) {
            var r4 = {};
            try {
              r4.value = e4(t3), r4.status = "success";
            } catch (e5) {
              r4.status = "error", r4.value = e5;
            }
            return r4;
          }
          (t2.exports = o2).prototype.finally = function(t3) {
            if ("function" != typeof t3) return this;
            var r4 = this.constructor;
            return this.then(function(e4) {
              return r4.resolve(t3()).then(function() {
                return e4;
              });
            }, function(e4) {
              return r4.resolve(t3()).then(function() {
                throw e4;
              });
            });
          }, o2.prototype.catch = function(e4) {
            return this.then(null, e4);
          }, o2.prototype.then = function(e4, t3) {
            if ("function" != typeof e4 && this.state === a2 || "function" != typeof t3 && this.state === s2) return this;
            var r4 = new this.constructor(u2);
            this.state !== n3 ? f2(r4, this.state === a2 ? e4 : t3, this.outcome) : this.queue.push(new h2(r4, e4, t3));
            return r4;
          }, h2.prototype.callFulfilled = function(e4) {
            l2.resolve(this.promise, e4);
          }, h2.prototype.otherCallFulfilled = function(e4) {
            f2(this.promise, this.onFulfilled, e4);
          }, h2.prototype.callRejected = function(e4) {
            l2.reject(this.promise, e4);
          }, h2.prototype.otherCallRejected = function(e4) {
            f2(this.promise, this.onRejected, e4);
          }, l2.resolve = function(e4, t3) {
            var r4 = p2(c3, t3);
            if ("error" === r4.status) return l2.reject(e4, r4.value);
            var n4 = r4.value;
            if (n4) d2(e4, n4);
            else {
              e4.state = a2, e4.outcome = t3;
              for (var i4 = -1, s3 = e4.queue.length; ++i4 < s3; ) e4.queue[i4].callFulfilled(t3);
            }
            return e4;
          }, l2.reject = function(e4, t3) {
            e4.state = s2, e4.outcome = t3;
            for (var r4 = -1, n4 = e4.queue.length; ++r4 < n4; ) e4.queue[r4].callRejected(t3);
            return e4;
          }, o2.resolve = function(e4) {
            if (e4 instanceof this) return e4;
            return l2.resolve(new this(u2), e4);
          }, o2.reject = function(e4) {
            var t3 = new this(u2);
            return l2.reject(t3, e4);
          }, o2.all = function(e4) {
            var r4 = this;
            if ("[object Array]" !== Object.prototype.toString.call(e4)) return this.reject(new TypeError("must be an array"));
            var n4 = e4.length, i4 = false;
            if (!n4) return this.resolve([]);
            var s3 = new Array(n4), a3 = 0, t3 = -1, o3 = new this(u2);
            for (; ++t3 < n4; ) h3(e4[t3], t3);
            return o3;
            function h3(e5, t4) {
              r4.resolve(e5).then(function(e6) {
                s3[t4] = e6, ++a3 !== n4 || i4 || (i4 = true, l2.resolve(o3, s3));
              }, function(e6) {
                i4 || (i4 = true, l2.reject(o3, e6));
              });
            }
          }, o2.race = function(e4) {
            var t3 = this;
            if ("[object Array]" !== Object.prototype.toString.call(e4)) return this.reject(new TypeError("must be an array"));
            var r4 = e4.length, n4 = false;
            if (!r4) return this.resolve([]);
            var i4 = -1, s3 = new this(u2);
            for (; ++i4 < r4; ) a3 = e4[i4], t3.resolve(a3).then(function(e5) {
              n4 || (n4 = true, l2.resolve(s3, e5));
            }, function(e5) {
              n4 || (n4 = true, l2.reject(s3, e5));
            });
            var a3;
            return s3;
          };
        }, { immediate: 36 }], 38: [function(e3, t2, r3) {
          var n3 = {};
          (0, e3("./lib/utils/common").assign)(n3, e3("./lib/deflate"), e3("./lib/inflate"), e3("./lib/zlib/constants")), t2.exports = n3;
        }, { "./lib/deflate": 39, "./lib/inflate": 40, "./lib/utils/common": 41, "./lib/zlib/constants": 44 }], 39: [function(e3, t2, r3) {
          var a2 = e3("./zlib/deflate"), o2 = e3("./utils/common"), h2 = e3("./utils/strings"), i3 = e3("./zlib/messages"), s2 = e3("./zlib/zstream"), u2 = Object.prototype.toString, l2 = 0, f2 = -1, c3 = 0, d2 = 8;
          function p2(e4) {
            if (!(this instanceof p2)) return new p2(e4);
            this.options = o2.assign({ level: f2, method: d2, chunkSize: 16384, windowBits: 15, memLevel: 8, strategy: c3, to: "" }, e4 || {});
            var t3 = this.options;
            t3.raw && 0 < t3.windowBits ? t3.windowBits = -t3.windowBits : t3.gzip && 0 < t3.windowBits && t3.windowBits < 16 && (t3.windowBits += 16), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new s2(), this.strm.avail_out = 0;
            var r4 = a2.deflateInit2(this.strm, t3.level, t3.method, t3.windowBits, t3.memLevel, t3.strategy);
            if (r4 !== l2) throw new Error(i3[r4]);
            if (t3.header && a2.deflateSetHeader(this.strm, t3.header), t3.dictionary) {
              var n4;
              if (n4 = "string" == typeof t3.dictionary ? h2.string2buf(t3.dictionary) : "[object ArrayBuffer]" === u2.call(t3.dictionary) ? new Uint8Array(t3.dictionary) : t3.dictionary, (r4 = a2.deflateSetDictionary(this.strm, n4)) !== l2) throw new Error(i3[r4]);
              this._dict_set = true;
            }
          }
          function n3(e4, t3) {
            var r4 = new p2(t3);
            if (r4.push(e4, true), r4.err) throw r4.msg || i3[r4.err];
            return r4.result;
          }
          p2.prototype.push = function(e4, t3) {
            var r4, n4, i4 = this.strm, s3 = this.options.chunkSize;
            if (this.ended) return false;
            n4 = t3 === ~~t3 ? t3 : true === t3 ? 4 : 0, "string" == typeof e4 ? i4.input = h2.string2buf(e4) : "[object ArrayBuffer]" === u2.call(e4) ? i4.input = new Uint8Array(e4) : i4.input = e4, i4.next_in = 0, i4.avail_in = i4.input.length;
            do {
              if (0 === i4.avail_out && (i4.output = new o2.Buf8(s3), i4.next_out = 0, i4.avail_out = s3), 1 !== (r4 = a2.deflate(i4, n4)) && r4 !== l2) return this.onEnd(r4), !(this.ended = true);
              0 !== i4.avail_out && (0 !== i4.avail_in || 4 !== n4 && 2 !== n4) || ("string" === this.options.to ? this.onData(h2.buf2binstring(o2.shrinkBuf(i4.output, i4.next_out))) : this.onData(o2.shrinkBuf(i4.output, i4.next_out)));
            } while ((0 < i4.avail_in || 0 === i4.avail_out) && 1 !== r4);
            return 4 === n4 ? (r4 = a2.deflateEnd(this.strm), this.onEnd(r4), this.ended = true, r4 === l2) : 2 !== n4 || (this.onEnd(l2), !(i4.avail_out = 0));
          }, p2.prototype.onData = function(e4) {
            this.chunks.push(e4);
          }, p2.prototype.onEnd = function(e4) {
            e4 === l2 && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = o2.flattenChunks(this.chunks)), this.chunks = [], this.err = e4, this.msg = this.strm.msg;
          }, r3.Deflate = p2, r3.deflate = n3, r3.deflateRaw = function(e4, t3) {
            return (t3 = t3 || {}).raw = true, n3(e4, t3);
          }, r3.gzip = function(e4, t3) {
            return (t3 = t3 || {}).gzip = true, n3(e4, t3);
          };
        }, { "./utils/common": 41, "./utils/strings": 42, "./zlib/deflate": 46, "./zlib/messages": 51, "./zlib/zstream": 53 }], 40: [function(e3, t2, r3) {
          var c3 = e3("./zlib/inflate"), d2 = e3("./utils/common"), p2 = e3("./utils/strings"), m2 = e3("./zlib/constants"), n3 = e3("./zlib/messages"), i3 = e3("./zlib/zstream"), s2 = e3("./zlib/gzheader"), _2 = Object.prototype.toString;
          function a2(e4) {
            if (!(this instanceof a2)) return new a2(e4);
            this.options = d2.assign({ chunkSize: 16384, windowBits: 0, to: "" }, e4 || {});
            var t3 = this.options;
            t3.raw && 0 <= t3.windowBits && t3.windowBits < 16 && (t3.windowBits = -t3.windowBits, 0 === t3.windowBits && (t3.windowBits = -15)), !(0 <= t3.windowBits && t3.windowBits < 16) || e4 && e4.windowBits || (t3.windowBits += 32), 15 < t3.windowBits && t3.windowBits < 48 && 0 == (15 & t3.windowBits) && (t3.windowBits |= 15), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new i3(), this.strm.avail_out = 0;
            var r4 = c3.inflateInit2(this.strm, t3.windowBits);
            if (r4 !== m2.Z_OK) throw new Error(n3[r4]);
            this.header = new s2(), c3.inflateGetHeader(this.strm, this.header);
          }
          function o2(e4, t3) {
            var r4 = new a2(t3);
            if (r4.push(e4, true), r4.err) throw r4.msg || n3[r4.err];
            return r4.result;
          }
          a2.prototype.push = function(e4, t3) {
            var r4, n4, i4, s3, a3, o3, h2 = this.strm, u2 = this.options.chunkSize, l2 = this.options.dictionary, f2 = false;
            if (this.ended) return false;
            n4 = t3 === ~~t3 ? t3 : true === t3 ? m2.Z_FINISH : m2.Z_NO_FLUSH, "string" == typeof e4 ? h2.input = p2.binstring2buf(e4) : "[object ArrayBuffer]" === _2.call(e4) ? h2.input = new Uint8Array(e4) : h2.input = e4, h2.next_in = 0, h2.avail_in = h2.input.length;
            do {
              if (0 === h2.avail_out && (h2.output = new d2.Buf8(u2), h2.next_out = 0, h2.avail_out = u2), (r4 = c3.inflate(h2, m2.Z_NO_FLUSH)) === m2.Z_NEED_DICT && l2 && (o3 = "string" == typeof l2 ? p2.string2buf(l2) : "[object ArrayBuffer]" === _2.call(l2) ? new Uint8Array(l2) : l2, r4 = c3.inflateSetDictionary(this.strm, o3)), r4 === m2.Z_BUF_ERROR && true === f2 && (r4 = m2.Z_OK, f2 = false), r4 !== m2.Z_STREAM_END && r4 !== m2.Z_OK) return this.onEnd(r4), !(this.ended = true);
              h2.next_out && (0 !== h2.avail_out && r4 !== m2.Z_STREAM_END && (0 !== h2.avail_in || n4 !== m2.Z_FINISH && n4 !== m2.Z_SYNC_FLUSH) || ("string" === this.options.to ? (i4 = p2.utf8border(h2.output, h2.next_out), s3 = h2.next_out - i4, a3 = p2.buf2string(h2.output, i4), h2.next_out = s3, h2.avail_out = u2 - s3, s3 && d2.arraySet(h2.output, h2.output, i4, s3, 0), this.onData(a3)) : this.onData(d2.shrinkBuf(h2.output, h2.next_out)))), 0 === h2.avail_in && 0 === h2.avail_out && (f2 = true);
            } while ((0 < h2.avail_in || 0 === h2.avail_out) && r4 !== m2.Z_STREAM_END);
            return r4 === m2.Z_STREAM_END && (n4 = m2.Z_FINISH), n4 === m2.Z_FINISH ? (r4 = c3.inflateEnd(this.strm), this.onEnd(r4), this.ended = true, r4 === m2.Z_OK) : n4 !== m2.Z_SYNC_FLUSH || (this.onEnd(m2.Z_OK), !(h2.avail_out = 0));
          }, a2.prototype.onData = function(e4) {
            this.chunks.push(e4);
          }, a2.prototype.onEnd = function(e4) {
            e4 === m2.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = d2.flattenChunks(this.chunks)), this.chunks = [], this.err = e4, this.msg = this.strm.msg;
          }, r3.Inflate = a2, r3.inflate = o2, r3.inflateRaw = function(e4, t3) {
            return (t3 = t3 || {}).raw = true, o2(e4, t3);
          }, r3.ungzip = o2;
        }, { "./utils/common": 41, "./utils/strings": 42, "./zlib/constants": 44, "./zlib/gzheader": 47, "./zlib/inflate": 49, "./zlib/messages": 51, "./zlib/zstream": 53 }], 41: [function(e3, t2, r3) {
          var n3 = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array;
          r3.assign = function(e4) {
            for (var t3 = Array.prototype.slice.call(arguments, 1); t3.length; ) {
              var r4 = t3.shift();
              if (r4) {
                if ("object" != typeof r4) throw new TypeError(r4 + "must be non-object");
                for (var n4 in r4) r4.hasOwnProperty(n4) && (e4[n4] = r4[n4]);
              }
            }
            return e4;
          }, r3.shrinkBuf = function(e4, t3) {
            return e4.length === t3 ? e4 : e4.subarray ? e4.subarray(0, t3) : (e4.length = t3, e4);
          };
          var i3 = { arraySet: function(e4, t3, r4, n4, i4) {
            if (t3.subarray && e4.subarray) e4.set(t3.subarray(r4, r4 + n4), i4);
            else for (var s3 = 0; s3 < n4; s3++) e4[i4 + s3] = t3[r4 + s3];
          }, flattenChunks: function(e4) {
            var t3, r4, n4, i4, s3, a2;
            for (t3 = n4 = 0, r4 = e4.length; t3 < r4; t3++) n4 += e4[t3].length;
            for (a2 = new Uint8Array(n4), t3 = i4 = 0, r4 = e4.length; t3 < r4; t3++) s3 = e4[t3], a2.set(s3, i4), i4 += s3.length;
            return a2;
          } }, s2 = { arraySet: function(e4, t3, r4, n4, i4) {
            for (var s3 = 0; s3 < n4; s3++) e4[i4 + s3] = t3[r4 + s3];
          }, flattenChunks: function(e4) {
            return [].concat.apply([], e4);
          } };
          r3.setTyped = function(e4) {
            e4 ? (r3.Buf8 = Uint8Array, r3.Buf16 = Uint16Array, r3.Buf32 = Int32Array, r3.assign(r3, i3)) : (r3.Buf8 = Array, r3.Buf16 = Array, r3.Buf32 = Array, r3.assign(r3, s2));
          }, r3.setTyped(n3);
        }, {}], 42: [function(e3, t2, r3) {
          var h2 = e3("./common"), i3 = true, s2 = true;
          try {
            String.fromCharCode.apply(null, [0]);
          } catch (e4) {
            i3 = false;
          }
          try {
            String.fromCharCode.apply(null, new Uint8Array(1));
          } catch (e4) {
            s2 = false;
          }
          for (var u2 = new h2.Buf8(256), n3 = 0; n3 < 256; n3++) u2[n3] = 252 <= n3 ? 6 : 248 <= n3 ? 5 : 240 <= n3 ? 4 : 224 <= n3 ? 3 : 192 <= n3 ? 2 : 1;
          function l2(e4, t3) {
            if (t3 < 65537 && (e4.subarray && s2 || !e4.subarray && i3)) return String.fromCharCode.apply(null, h2.shrinkBuf(e4, t3));
            for (var r4 = "", n4 = 0; n4 < t3; n4++) r4 += String.fromCharCode(e4[n4]);
            return r4;
          }
          u2[254] = u2[254] = 1, r3.string2buf = function(e4) {
            var t3, r4, n4, i4, s3, a2 = e4.length, o2 = 0;
            for (i4 = 0; i4 < a2; i4++) 55296 == (64512 & (r4 = e4.charCodeAt(i4))) && i4 + 1 < a2 && 56320 == (64512 & (n4 = e4.charCodeAt(i4 + 1))) && (r4 = 65536 + (r4 - 55296 << 10) + (n4 - 56320), i4++), o2 += r4 < 128 ? 1 : r4 < 2048 ? 2 : r4 < 65536 ? 3 : 4;
            for (t3 = new h2.Buf8(o2), i4 = s3 = 0; s3 < o2; i4++) 55296 == (64512 & (r4 = e4.charCodeAt(i4))) && i4 + 1 < a2 && 56320 == (64512 & (n4 = e4.charCodeAt(i4 + 1))) && (r4 = 65536 + (r4 - 55296 << 10) + (n4 - 56320), i4++), r4 < 128 ? t3[s3++] = r4 : (r4 < 2048 ? t3[s3++] = 192 | r4 >>> 6 : (r4 < 65536 ? t3[s3++] = 224 | r4 >>> 12 : (t3[s3++] = 240 | r4 >>> 18, t3[s3++] = 128 | r4 >>> 12 & 63), t3[s3++] = 128 | r4 >>> 6 & 63), t3[s3++] = 128 | 63 & r4);
            return t3;
          }, r3.buf2binstring = function(e4) {
            return l2(e4, e4.length);
          }, r3.binstring2buf = function(e4) {
            for (var t3 = new h2.Buf8(e4.length), r4 = 0, n4 = t3.length; r4 < n4; r4++) t3[r4] = e4.charCodeAt(r4);
            return t3;
          }, r3.buf2string = function(e4, t3) {
            var r4, n4, i4, s3, a2 = t3 || e4.length, o2 = new Array(2 * a2);
            for (r4 = n4 = 0; r4 < a2; ) if ((i4 = e4[r4++]) < 128) o2[n4++] = i4;
            else if (4 < (s3 = u2[i4])) o2[n4++] = 65533, r4 += s3 - 1;
            else {
              for (i4 &= 2 === s3 ? 31 : 3 === s3 ? 15 : 7; 1 < s3 && r4 < a2; ) i4 = i4 << 6 | 63 & e4[r4++], s3--;
              1 < s3 ? o2[n4++] = 65533 : i4 < 65536 ? o2[n4++] = i4 : (i4 -= 65536, o2[n4++] = 55296 | i4 >> 10 & 1023, o2[n4++] = 56320 | 1023 & i4);
            }
            return l2(o2, n4);
          }, r3.utf8border = function(e4, t3) {
            var r4;
            for ((t3 = t3 || e4.length) > e4.length && (t3 = e4.length), r4 = t3 - 1; 0 <= r4 && 128 == (192 & e4[r4]); ) r4--;
            return r4 < 0 ? t3 : 0 === r4 ? t3 : r4 + u2[e4[r4]] > t3 ? r4 : t3;
          };
        }, { "./common": 41 }], 43: [function(e3, t2, r3) {
          t2.exports = function(e4, t3, r4, n3) {
            for (var i3 = 65535 & e4 | 0, s2 = e4 >>> 16 & 65535 | 0, a2 = 0; 0 !== r4; ) {
              for (r4 -= a2 = 2e3 < r4 ? 2e3 : r4; s2 = s2 + (i3 = i3 + t3[n3++] | 0) | 0, --a2; ) ;
              i3 %= 65521, s2 %= 65521;
            }
            return i3 | s2 << 16 | 0;
          };
        }, {}], 44: [function(e3, t2, r3) {
          t2.exports = { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, Z_TREES: 6, Z_OK: 0, Z_STREAM_END: 1, Z_NEED_DICT: 2, Z_ERRNO: -1, Z_STREAM_ERROR: -2, Z_DATA_ERROR: -3, Z_BUF_ERROR: -5, Z_NO_COMPRESSION: 0, Z_BEST_SPEED: 1, Z_BEST_COMPRESSION: 9, Z_DEFAULT_COMPRESSION: -1, Z_FILTERED: 1, Z_HUFFMAN_ONLY: 2, Z_RLE: 3, Z_FIXED: 4, Z_DEFAULT_STRATEGY: 0, Z_BINARY: 0, Z_TEXT: 1, Z_UNKNOWN: 2, Z_DEFLATED: 8 };
        }, {}], 45: [function(e3, t2, r3) {
          var o2 = function() {
            for (var e4, t3 = [], r4 = 0; r4 < 256; r4++) {
              e4 = r4;
              for (var n3 = 0; n3 < 8; n3++) e4 = 1 & e4 ? 3988292384 ^ e4 >>> 1 : e4 >>> 1;
              t3[r4] = e4;
            }
            return t3;
          }();
          t2.exports = function(e4, t3, r4, n3) {
            var i3 = o2, s2 = n3 + r4;
            e4 ^= -1;
            for (var a2 = n3; a2 < s2; a2++) e4 = e4 >>> 8 ^ i3[255 & (e4 ^ t3[a2])];
            return -1 ^ e4;
          };
        }, {}], 46: [function(e3, t2, r3) {
          var h2, c3 = e3("../utils/common"), u2 = e3("./trees"), d2 = e3("./adler32"), p2 = e3("./crc32"), n3 = e3("./messages"), l2 = 0, f2 = 4, m2 = 0, _2 = -2, g2 = -1, b2 = 4, i3 = 2, v2 = 8, y2 = 9, s2 = 286, a2 = 30, o2 = 19, w = 2 * s2 + 1, k2 = 15, x2 = 3, S2 = 258, z3 = S2 + x2 + 1, C2 = 42, E2 = 113, A2 = 1, I2 = 2, O = 3, B2 = 4;
          function R2(e4, t3) {
            return e4.msg = n3[t3], t3;
          }
          function T2(e4) {
            return (e4 << 1) - (4 < e4 ? 9 : 0);
          }
          function D(e4) {
            for (var t3 = e4.length; 0 <= --t3; ) e4[t3] = 0;
          }
          function F(e4) {
            var t3 = e4.state, r4 = t3.pending;
            r4 > e4.avail_out && (r4 = e4.avail_out), 0 !== r4 && (c3.arraySet(e4.output, t3.pending_buf, t3.pending_out, r4, e4.next_out), e4.next_out += r4, t3.pending_out += r4, e4.total_out += r4, e4.avail_out -= r4, t3.pending -= r4, 0 === t3.pending && (t3.pending_out = 0));
          }
          function N2(e4, t3) {
            u2._tr_flush_block(e4, 0 <= e4.block_start ? e4.block_start : -1, e4.strstart - e4.block_start, t3), e4.block_start = e4.strstart, F(e4.strm);
          }
          function U(e4, t3) {
            e4.pending_buf[e4.pending++] = t3;
          }
          function P2(e4, t3) {
            e4.pending_buf[e4.pending++] = t3 >>> 8 & 255, e4.pending_buf[e4.pending++] = 255 & t3;
          }
          function L2(e4, t3) {
            var r4, n4, i4 = e4.max_chain_length, s3 = e4.strstart, a3 = e4.prev_length, o3 = e4.nice_match, h3 = e4.strstart > e4.w_size - z3 ? e4.strstart - (e4.w_size - z3) : 0, u3 = e4.window, l3 = e4.w_mask, f3 = e4.prev, c4 = e4.strstart + S2, d3 = u3[s3 + a3 - 1], p3 = u3[s3 + a3];
            e4.prev_length >= e4.good_match && (i4 >>= 2), o3 > e4.lookahead && (o3 = e4.lookahead);
            do {
              if (u3[(r4 = t3) + a3] === p3 && u3[r4 + a3 - 1] === d3 && u3[r4] === u3[s3] && u3[++r4] === u3[s3 + 1]) {
                s3 += 2, r4++;
                do {
                } while (u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && u3[++s3] === u3[++r4] && s3 < c4);
                if (n4 = S2 - (c4 - s3), s3 = c4 - S2, a3 < n4) {
                  if (e4.match_start = t3, o3 <= (a3 = n4)) break;
                  d3 = u3[s3 + a3 - 1], p3 = u3[s3 + a3];
                }
              }
            } while ((t3 = f3[t3 & l3]) > h3 && 0 != --i4);
            return a3 <= e4.lookahead ? a3 : e4.lookahead;
          }
          function j2(e4) {
            var t3, r4, n4, i4, s3, a3, o3, h3, u3, l3, f3 = e4.w_size;
            do {
              if (i4 = e4.window_size - e4.lookahead - e4.strstart, e4.strstart >= f3 + (f3 - z3)) {
                for (c3.arraySet(e4.window, e4.window, f3, f3, 0), e4.match_start -= f3, e4.strstart -= f3, e4.block_start -= f3, t3 = r4 = e4.hash_size; n4 = e4.head[--t3], e4.head[t3] = f3 <= n4 ? n4 - f3 : 0, --r4; ) ;
                for (t3 = r4 = f3; n4 = e4.prev[--t3], e4.prev[t3] = f3 <= n4 ? n4 - f3 : 0, --r4; ) ;
                i4 += f3;
              }
              if (0 === e4.strm.avail_in) break;
              if (a3 = e4.strm, o3 = e4.window, h3 = e4.strstart + e4.lookahead, u3 = i4, l3 = void 0, l3 = a3.avail_in, u3 < l3 && (l3 = u3), r4 = 0 === l3 ? 0 : (a3.avail_in -= l3, c3.arraySet(o3, a3.input, a3.next_in, l3, h3), 1 === a3.state.wrap ? a3.adler = d2(a3.adler, o3, l3, h3) : 2 === a3.state.wrap && (a3.adler = p2(a3.adler, o3, l3, h3)), a3.next_in += l3, a3.total_in += l3, l3), e4.lookahead += r4, e4.lookahead + e4.insert >= x2) for (s3 = e4.strstart - e4.insert, e4.ins_h = e4.window[s3], e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[s3 + 1]) & e4.hash_mask; e4.insert && (e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[s3 + x2 - 1]) & e4.hash_mask, e4.prev[s3 & e4.w_mask] = e4.head[e4.ins_h], e4.head[e4.ins_h] = s3, s3++, e4.insert--, !(e4.lookahead + e4.insert < x2)); ) ;
            } while (e4.lookahead < z3 && 0 !== e4.strm.avail_in);
          }
          function Z(e4, t3) {
            for (var r4, n4; ; ) {
              if (e4.lookahead < z3) {
                if (j2(e4), e4.lookahead < z3 && t3 === l2) return A2;
                if (0 === e4.lookahead) break;
              }
              if (r4 = 0, e4.lookahead >= x2 && (e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[e4.strstart + x2 - 1]) & e4.hash_mask, r4 = e4.prev[e4.strstart & e4.w_mask] = e4.head[e4.ins_h], e4.head[e4.ins_h] = e4.strstart), 0 !== r4 && e4.strstart - r4 <= e4.w_size - z3 && (e4.match_length = L2(e4, r4)), e4.match_length >= x2) if (n4 = u2._tr_tally(e4, e4.strstart - e4.match_start, e4.match_length - x2), e4.lookahead -= e4.match_length, e4.match_length <= e4.max_lazy_match && e4.lookahead >= x2) {
                for (e4.match_length--; e4.strstart++, e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[e4.strstart + x2 - 1]) & e4.hash_mask, r4 = e4.prev[e4.strstart & e4.w_mask] = e4.head[e4.ins_h], e4.head[e4.ins_h] = e4.strstart, 0 != --e4.match_length; ) ;
                e4.strstart++;
              } else e4.strstart += e4.match_length, e4.match_length = 0, e4.ins_h = e4.window[e4.strstart], e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[e4.strstart + 1]) & e4.hash_mask;
              else n4 = u2._tr_tally(e4, 0, e4.window[e4.strstart]), e4.lookahead--, e4.strstart++;
              if (n4 && (N2(e4, false), 0 === e4.strm.avail_out)) return A2;
            }
            return e4.insert = e4.strstart < x2 - 1 ? e4.strstart : x2 - 1, t3 === f2 ? (N2(e4, true), 0 === e4.strm.avail_out ? O : B2) : e4.last_lit && (N2(e4, false), 0 === e4.strm.avail_out) ? A2 : I2;
          }
          function W(e4, t3) {
            for (var r4, n4, i4; ; ) {
              if (e4.lookahead < z3) {
                if (j2(e4), e4.lookahead < z3 && t3 === l2) return A2;
                if (0 === e4.lookahead) break;
              }
              if (r4 = 0, e4.lookahead >= x2 && (e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[e4.strstart + x2 - 1]) & e4.hash_mask, r4 = e4.prev[e4.strstart & e4.w_mask] = e4.head[e4.ins_h], e4.head[e4.ins_h] = e4.strstart), e4.prev_length = e4.match_length, e4.prev_match = e4.match_start, e4.match_length = x2 - 1, 0 !== r4 && e4.prev_length < e4.max_lazy_match && e4.strstart - r4 <= e4.w_size - z3 && (e4.match_length = L2(e4, r4), e4.match_length <= 5 && (1 === e4.strategy || e4.match_length === x2 && 4096 < e4.strstart - e4.match_start) && (e4.match_length = x2 - 1)), e4.prev_length >= x2 && e4.match_length <= e4.prev_length) {
                for (i4 = e4.strstart + e4.lookahead - x2, n4 = u2._tr_tally(e4, e4.strstart - 1 - e4.prev_match, e4.prev_length - x2), e4.lookahead -= e4.prev_length - 1, e4.prev_length -= 2; ++e4.strstart <= i4 && (e4.ins_h = (e4.ins_h << e4.hash_shift ^ e4.window[e4.strstart + x2 - 1]) & e4.hash_mask, r4 = e4.prev[e4.strstart & e4.w_mask] = e4.head[e4.ins_h], e4.head[e4.ins_h] = e4.strstart), 0 != --e4.prev_length; ) ;
                if (e4.match_available = 0, e4.match_length = x2 - 1, e4.strstart++, n4 && (N2(e4, false), 0 === e4.strm.avail_out)) return A2;
              } else if (e4.match_available) {
                if ((n4 = u2._tr_tally(e4, 0, e4.window[e4.strstart - 1])) && N2(e4, false), e4.strstart++, e4.lookahead--, 0 === e4.strm.avail_out) return A2;
              } else e4.match_available = 1, e4.strstart++, e4.lookahead--;
            }
            return e4.match_available && (n4 = u2._tr_tally(e4, 0, e4.window[e4.strstart - 1]), e4.match_available = 0), e4.insert = e4.strstart < x2 - 1 ? e4.strstart : x2 - 1, t3 === f2 ? (N2(e4, true), 0 === e4.strm.avail_out ? O : B2) : e4.last_lit && (N2(e4, false), 0 === e4.strm.avail_out) ? A2 : I2;
          }
          function M2(e4, t3, r4, n4, i4) {
            this.good_length = e4, this.max_lazy = t3, this.nice_length = r4, this.max_chain = n4, this.func = i4;
          }
          function H2() {
            this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v2, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new c3.Buf16(2 * w), this.dyn_dtree = new c3.Buf16(2 * (2 * a2 + 1)), this.bl_tree = new c3.Buf16(2 * (2 * o2 + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new c3.Buf16(k2 + 1), this.heap = new c3.Buf16(2 * s2 + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new c3.Buf16(2 * s2 + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0;
          }
          function G(e4) {
            var t3;
            return e4 && e4.state ? (e4.total_in = e4.total_out = 0, e4.data_type = i3, (t3 = e4.state).pending = 0, t3.pending_out = 0, t3.wrap < 0 && (t3.wrap = -t3.wrap), t3.status = t3.wrap ? C2 : E2, e4.adler = 2 === t3.wrap ? 0 : 1, t3.last_flush = l2, u2._tr_init(t3), m2) : R2(e4, _2);
          }
          function K(e4) {
            var t3 = G(e4);
            return t3 === m2 && function(e5) {
              e5.window_size = 2 * e5.w_size, D(e5.head), e5.max_lazy_match = h2[e5.level].max_lazy, e5.good_match = h2[e5.level].good_length, e5.nice_match = h2[e5.level].nice_length, e5.max_chain_length = h2[e5.level].max_chain, e5.strstart = 0, e5.block_start = 0, e5.lookahead = 0, e5.insert = 0, e5.match_length = e5.prev_length = x2 - 1, e5.match_available = 0, e5.ins_h = 0;
            }(e4.state), t3;
          }
          function Y(e4, t3, r4, n4, i4, s3) {
            if (!e4) return _2;
            var a3 = 1;
            if (t3 === g2 && (t3 = 6), n4 < 0 ? (a3 = 0, n4 = -n4) : 15 < n4 && (a3 = 2, n4 -= 16), i4 < 1 || y2 < i4 || r4 !== v2 || n4 < 8 || 15 < n4 || t3 < 0 || 9 < t3 || s3 < 0 || b2 < s3) return R2(e4, _2);
            8 === n4 && (n4 = 9);
            var o3 = new H2();
            return (e4.state = o3).strm = e4, o3.wrap = a3, o3.gzhead = null, o3.w_bits = n4, o3.w_size = 1 << o3.w_bits, o3.w_mask = o3.w_size - 1, o3.hash_bits = i4 + 7, o3.hash_size = 1 << o3.hash_bits, o3.hash_mask = o3.hash_size - 1, o3.hash_shift = ~~((o3.hash_bits + x2 - 1) / x2), o3.window = new c3.Buf8(2 * o3.w_size), o3.head = new c3.Buf16(o3.hash_size), o3.prev = new c3.Buf16(o3.w_size), o3.lit_bufsize = 1 << i4 + 6, o3.pending_buf_size = 4 * o3.lit_bufsize, o3.pending_buf = new c3.Buf8(o3.pending_buf_size), o3.d_buf = 1 * o3.lit_bufsize, o3.l_buf = 3 * o3.lit_bufsize, o3.level = t3, o3.strategy = s3, o3.method = r4, K(e4);
          }
          h2 = [new M2(0, 0, 0, 0, function(e4, t3) {
            var r4 = 65535;
            for (r4 > e4.pending_buf_size - 5 && (r4 = e4.pending_buf_size - 5); ; ) {
              if (e4.lookahead <= 1) {
                if (j2(e4), 0 === e4.lookahead && t3 === l2) return A2;
                if (0 === e4.lookahead) break;
              }
              e4.strstart += e4.lookahead, e4.lookahead = 0;
              var n4 = e4.block_start + r4;
              if ((0 === e4.strstart || e4.strstart >= n4) && (e4.lookahead = e4.strstart - n4, e4.strstart = n4, N2(e4, false), 0 === e4.strm.avail_out)) return A2;
              if (e4.strstart - e4.block_start >= e4.w_size - z3 && (N2(e4, false), 0 === e4.strm.avail_out)) return A2;
            }
            return e4.insert = 0, t3 === f2 ? (N2(e4, true), 0 === e4.strm.avail_out ? O : B2) : (e4.strstart > e4.block_start && (N2(e4, false), e4.strm.avail_out), A2);
          }), new M2(4, 4, 8, 4, Z), new M2(4, 5, 16, 8, Z), new M2(4, 6, 32, 32, Z), new M2(4, 4, 16, 16, W), new M2(8, 16, 32, 32, W), new M2(8, 16, 128, 128, W), new M2(8, 32, 128, 256, W), new M2(32, 128, 258, 1024, W), new M2(32, 258, 258, 4096, W)], r3.deflateInit = function(e4, t3) {
            return Y(e4, t3, v2, 15, 8, 0);
          }, r3.deflateInit2 = Y, r3.deflateReset = K, r3.deflateResetKeep = G, r3.deflateSetHeader = function(e4, t3) {
            return e4 && e4.state ? 2 !== e4.state.wrap ? _2 : (e4.state.gzhead = t3, m2) : _2;
          }, r3.deflate = function(e4, t3) {
            var r4, n4, i4, s3;
            if (!e4 || !e4.state || 5 < t3 || t3 < 0) return e4 ? R2(e4, _2) : _2;
            if (n4 = e4.state, !e4.output || !e4.input && 0 !== e4.avail_in || 666 === n4.status && t3 !== f2) return R2(e4, 0 === e4.avail_out ? -5 : _2);
            if (n4.strm = e4, r4 = n4.last_flush, n4.last_flush = t3, n4.status === C2) if (2 === n4.wrap) e4.adler = 0, U(n4, 31), U(n4, 139), U(n4, 8), n4.gzhead ? (U(n4, (n4.gzhead.text ? 1 : 0) + (n4.gzhead.hcrc ? 2 : 0) + (n4.gzhead.extra ? 4 : 0) + (n4.gzhead.name ? 8 : 0) + (n4.gzhead.comment ? 16 : 0)), U(n4, 255 & n4.gzhead.time), U(n4, n4.gzhead.time >> 8 & 255), U(n4, n4.gzhead.time >> 16 & 255), U(n4, n4.gzhead.time >> 24 & 255), U(n4, 9 === n4.level ? 2 : 2 <= n4.strategy || n4.level < 2 ? 4 : 0), U(n4, 255 & n4.gzhead.os), n4.gzhead.extra && n4.gzhead.extra.length && (U(n4, 255 & n4.gzhead.extra.length), U(n4, n4.gzhead.extra.length >> 8 & 255)), n4.gzhead.hcrc && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending, 0)), n4.gzindex = 0, n4.status = 69) : (U(n4, 0), U(n4, 0), U(n4, 0), U(n4, 0), U(n4, 0), U(n4, 9 === n4.level ? 2 : 2 <= n4.strategy || n4.level < 2 ? 4 : 0), U(n4, 3), n4.status = E2);
            else {
              var a3 = v2 + (n4.w_bits - 8 << 4) << 8;
              a3 |= (2 <= n4.strategy || n4.level < 2 ? 0 : n4.level < 6 ? 1 : 6 === n4.level ? 2 : 3) << 6, 0 !== n4.strstart && (a3 |= 32), a3 += 31 - a3 % 31, n4.status = E2, P2(n4, a3), 0 !== n4.strstart && (P2(n4, e4.adler >>> 16), P2(n4, 65535 & e4.adler)), e4.adler = 1;
            }
            if (69 === n4.status) if (n4.gzhead.extra) {
              for (i4 = n4.pending; n4.gzindex < (65535 & n4.gzhead.extra.length) && (n4.pending !== n4.pending_buf_size || (n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), F(e4), i4 = n4.pending, n4.pending !== n4.pending_buf_size)); ) U(n4, 255 & n4.gzhead.extra[n4.gzindex]), n4.gzindex++;
              n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), n4.gzindex === n4.gzhead.extra.length && (n4.gzindex = 0, n4.status = 73);
            } else n4.status = 73;
            if (73 === n4.status) if (n4.gzhead.name) {
              i4 = n4.pending;
              do {
                if (n4.pending === n4.pending_buf_size && (n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), F(e4), i4 = n4.pending, n4.pending === n4.pending_buf_size)) {
                  s3 = 1;
                  break;
                }
                s3 = n4.gzindex < n4.gzhead.name.length ? 255 & n4.gzhead.name.charCodeAt(n4.gzindex++) : 0, U(n4, s3);
              } while (0 !== s3);
              n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), 0 === s3 && (n4.gzindex = 0, n4.status = 91);
            } else n4.status = 91;
            if (91 === n4.status) if (n4.gzhead.comment) {
              i4 = n4.pending;
              do {
                if (n4.pending === n4.pending_buf_size && (n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), F(e4), i4 = n4.pending, n4.pending === n4.pending_buf_size)) {
                  s3 = 1;
                  break;
                }
                s3 = n4.gzindex < n4.gzhead.comment.length ? 255 & n4.gzhead.comment.charCodeAt(n4.gzindex++) : 0, U(n4, s3);
              } while (0 !== s3);
              n4.gzhead.hcrc && n4.pending > i4 && (e4.adler = p2(e4.adler, n4.pending_buf, n4.pending - i4, i4)), 0 === s3 && (n4.status = 103);
            } else n4.status = 103;
            if (103 === n4.status && (n4.gzhead.hcrc ? (n4.pending + 2 > n4.pending_buf_size && F(e4), n4.pending + 2 <= n4.pending_buf_size && (U(n4, 255 & e4.adler), U(n4, e4.adler >> 8 & 255), e4.adler = 0, n4.status = E2)) : n4.status = E2), 0 !== n4.pending) {
              if (F(e4), 0 === e4.avail_out) return n4.last_flush = -1, m2;
            } else if (0 === e4.avail_in && T2(t3) <= T2(r4) && t3 !== f2) return R2(e4, -5);
            if (666 === n4.status && 0 !== e4.avail_in) return R2(e4, -5);
            if (0 !== e4.avail_in || 0 !== n4.lookahead || t3 !== l2 && 666 !== n4.status) {
              var o3 = 2 === n4.strategy ? function(e5, t4) {
                for (var r5; ; ) {
                  if (0 === e5.lookahead && (j2(e5), 0 === e5.lookahead)) {
                    if (t4 === l2) return A2;
                    break;
                  }
                  if (e5.match_length = 0, r5 = u2._tr_tally(e5, 0, e5.window[e5.strstart]), e5.lookahead--, e5.strstart++, r5 && (N2(e5, false), 0 === e5.strm.avail_out)) return A2;
                }
                return e5.insert = 0, t4 === f2 ? (N2(e5, true), 0 === e5.strm.avail_out ? O : B2) : e5.last_lit && (N2(e5, false), 0 === e5.strm.avail_out) ? A2 : I2;
              }(n4, t3) : 3 === n4.strategy ? function(e5, t4) {
                for (var r5, n5, i5, s4, a4 = e5.window; ; ) {
                  if (e5.lookahead <= S2) {
                    if (j2(e5), e5.lookahead <= S2 && t4 === l2) return A2;
                    if (0 === e5.lookahead) break;
                  }
                  if (e5.match_length = 0, e5.lookahead >= x2 && 0 < e5.strstart && (n5 = a4[i5 = e5.strstart - 1]) === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5]) {
                    s4 = e5.strstart + S2;
                    do {
                    } while (n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && n5 === a4[++i5] && i5 < s4);
                    e5.match_length = S2 - (s4 - i5), e5.match_length > e5.lookahead && (e5.match_length = e5.lookahead);
                  }
                  if (e5.match_length >= x2 ? (r5 = u2._tr_tally(e5, 1, e5.match_length - x2), e5.lookahead -= e5.match_length, e5.strstart += e5.match_length, e5.match_length = 0) : (r5 = u2._tr_tally(e5, 0, e5.window[e5.strstart]), e5.lookahead--, e5.strstart++), r5 && (N2(e5, false), 0 === e5.strm.avail_out)) return A2;
                }
                return e5.insert = 0, t4 === f2 ? (N2(e5, true), 0 === e5.strm.avail_out ? O : B2) : e5.last_lit && (N2(e5, false), 0 === e5.strm.avail_out) ? A2 : I2;
              }(n4, t3) : h2[n4.level].func(n4, t3);
              if (o3 !== O && o3 !== B2 || (n4.status = 666), o3 === A2 || o3 === O) return 0 === e4.avail_out && (n4.last_flush = -1), m2;
              if (o3 === I2 && (1 === t3 ? u2._tr_align(n4) : 5 !== t3 && (u2._tr_stored_block(n4, 0, 0, false), 3 === t3 && (D(n4.head), 0 === n4.lookahead && (n4.strstart = 0, n4.block_start = 0, n4.insert = 0))), F(e4), 0 === e4.avail_out)) return n4.last_flush = -1, m2;
            }
            return t3 !== f2 ? m2 : n4.wrap <= 0 ? 1 : (2 === n4.wrap ? (U(n4, 255 & e4.adler), U(n4, e4.adler >> 8 & 255), U(n4, e4.adler >> 16 & 255), U(n4, e4.adler >> 24 & 255), U(n4, 255 & e4.total_in), U(n4, e4.total_in >> 8 & 255), U(n4, e4.total_in >> 16 & 255), U(n4, e4.total_in >> 24 & 255)) : (P2(n4, e4.adler >>> 16), P2(n4, 65535 & e4.adler)), F(e4), 0 < n4.wrap && (n4.wrap = -n4.wrap), 0 !== n4.pending ? m2 : 1);
          }, r3.deflateEnd = function(e4) {
            var t3;
            return e4 && e4.state ? (t3 = e4.state.status) !== C2 && 69 !== t3 && 73 !== t3 && 91 !== t3 && 103 !== t3 && t3 !== E2 && 666 !== t3 ? R2(e4, _2) : (e4.state = null, t3 === E2 ? R2(e4, -3) : m2) : _2;
          }, r3.deflateSetDictionary = function(e4, t3) {
            var r4, n4, i4, s3, a3, o3, h3, u3, l3 = t3.length;
            if (!e4 || !e4.state) return _2;
            if (2 === (s3 = (r4 = e4.state).wrap) || 1 === s3 && r4.status !== C2 || r4.lookahead) return _2;
            for (1 === s3 && (e4.adler = d2(e4.adler, t3, l3, 0)), r4.wrap = 0, l3 >= r4.w_size && (0 === s3 && (D(r4.head), r4.strstart = 0, r4.block_start = 0, r4.insert = 0), u3 = new c3.Buf8(r4.w_size), c3.arraySet(u3, t3, l3 - r4.w_size, r4.w_size, 0), t3 = u3, l3 = r4.w_size), a3 = e4.avail_in, o3 = e4.next_in, h3 = e4.input, e4.avail_in = l3, e4.next_in = 0, e4.input = t3, j2(r4); r4.lookahead >= x2; ) {
              for (n4 = r4.strstart, i4 = r4.lookahead - (x2 - 1); r4.ins_h = (r4.ins_h << r4.hash_shift ^ r4.window[n4 + x2 - 1]) & r4.hash_mask, r4.prev[n4 & r4.w_mask] = r4.head[r4.ins_h], r4.head[r4.ins_h] = n4, n4++, --i4; ) ;
              r4.strstart = n4, r4.lookahead = x2 - 1, j2(r4);
            }
            return r4.strstart += r4.lookahead, r4.block_start = r4.strstart, r4.insert = r4.lookahead, r4.lookahead = 0, r4.match_length = r4.prev_length = x2 - 1, r4.match_available = 0, e4.next_in = o3, e4.input = h3, e4.avail_in = a3, r4.wrap = s3, m2;
          }, r3.deflateInfo = "pako deflate (from Nodeca project)";
        }, { "../utils/common": 41, "./adler32": 43, "./crc32": 45, "./messages": 51, "./trees": 52 }], 47: [function(e3, t2, r3) {
          t2.exports = function() {
            this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = false;
          };
        }, {}], 48: [function(e3, t2, r3) {
          t2.exports = function(e4, t3) {
            var r4, n3, i3, s2, a2, o2, h2, u2, l2, f2, c3, d2, p2, m2, _2, g2, b2, v2, y2, w, k2, x2, S2, z3, C2;
            r4 = e4.state, n3 = e4.next_in, z3 = e4.input, i3 = n3 + (e4.avail_in - 5), s2 = e4.next_out, C2 = e4.output, a2 = s2 - (t3 - e4.avail_out), o2 = s2 + (e4.avail_out - 257), h2 = r4.dmax, u2 = r4.wsize, l2 = r4.whave, f2 = r4.wnext, c3 = r4.window, d2 = r4.hold, p2 = r4.bits, m2 = r4.lencode, _2 = r4.distcode, g2 = (1 << r4.lenbits) - 1, b2 = (1 << r4.distbits) - 1;
            e: do {
              p2 < 15 && (d2 += z3[n3++] << p2, p2 += 8, d2 += z3[n3++] << p2, p2 += 8), v2 = m2[d2 & g2];
              t: for (; ; ) {
                if (d2 >>>= y2 = v2 >>> 24, p2 -= y2, 0 === (y2 = v2 >>> 16 & 255)) C2[s2++] = 65535 & v2;
                else {
                  if (!(16 & y2)) {
                    if (0 == (64 & y2)) {
                      v2 = m2[(65535 & v2) + (d2 & (1 << y2) - 1)];
                      continue t;
                    }
                    if (32 & y2) {
                      r4.mode = 12;
                      break e;
                    }
                    e4.msg = "invalid literal/length code", r4.mode = 30;
                    break e;
                  }
                  w = 65535 & v2, (y2 &= 15) && (p2 < y2 && (d2 += z3[n3++] << p2, p2 += 8), w += d2 & (1 << y2) - 1, d2 >>>= y2, p2 -= y2), p2 < 15 && (d2 += z3[n3++] << p2, p2 += 8, d2 += z3[n3++] << p2, p2 += 8), v2 = _2[d2 & b2];
                  r: for (; ; ) {
                    if (d2 >>>= y2 = v2 >>> 24, p2 -= y2, !(16 & (y2 = v2 >>> 16 & 255))) {
                      if (0 == (64 & y2)) {
                        v2 = _2[(65535 & v2) + (d2 & (1 << y2) - 1)];
                        continue r;
                      }
                      e4.msg = "invalid distance code", r4.mode = 30;
                      break e;
                    }
                    if (k2 = 65535 & v2, p2 < (y2 &= 15) && (d2 += z3[n3++] << p2, (p2 += 8) < y2 && (d2 += z3[n3++] << p2, p2 += 8)), h2 < (k2 += d2 & (1 << y2) - 1)) {
                      e4.msg = "invalid distance too far back", r4.mode = 30;
                      break e;
                    }
                    if (d2 >>>= y2, p2 -= y2, (y2 = s2 - a2) < k2) {
                      if (l2 < (y2 = k2 - y2) && r4.sane) {
                        e4.msg = "invalid distance too far back", r4.mode = 30;
                        break e;
                      }
                      if (S2 = c3, (x2 = 0) === f2) {
                        if (x2 += u2 - y2, y2 < w) {
                          for (w -= y2; C2[s2++] = c3[x2++], --y2; ) ;
                          x2 = s2 - k2, S2 = C2;
                        }
                      } else if (f2 < y2) {
                        if (x2 += u2 + f2 - y2, (y2 -= f2) < w) {
                          for (w -= y2; C2[s2++] = c3[x2++], --y2; ) ;
                          if (x2 = 0, f2 < w) {
                            for (w -= y2 = f2; C2[s2++] = c3[x2++], --y2; ) ;
                            x2 = s2 - k2, S2 = C2;
                          }
                        }
                      } else if (x2 += f2 - y2, y2 < w) {
                        for (w -= y2; C2[s2++] = c3[x2++], --y2; ) ;
                        x2 = s2 - k2, S2 = C2;
                      }
                      for (; 2 < w; ) C2[s2++] = S2[x2++], C2[s2++] = S2[x2++], C2[s2++] = S2[x2++], w -= 3;
                      w && (C2[s2++] = S2[x2++], 1 < w && (C2[s2++] = S2[x2++]));
                    } else {
                      for (x2 = s2 - k2; C2[s2++] = C2[x2++], C2[s2++] = C2[x2++], C2[s2++] = C2[x2++], 2 < (w -= 3); ) ;
                      w && (C2[s2++] = C2[x2++], 1 < w && (C2[s2++] = C2[x2++]));
                    }
                    break;
                  }
                }
                break;
              }
            } while (n3 < i3 && s2 < o2);
            n3 -= w = p2 >> 3, d2 &= (1 << (p2 -= w << 3)) - 1, e4.next_in = n3, e4.next_out = s2, e4.avail_in = n3 < i3 ? i3 - n3 + 5 : 5 - (n3 - i3), e4.avail_out = s2 < o2 ? o2 - s2 + 257 : 257 - (s2 - o2), r4.hold = d2, r4.bits = p2;
          };
        }, {}], 49: [function(e3, t2, r3) {
          var I2 = e3("../utils/common"), O = e3("./adler32"), B2 = e3("./crc32"), R2 = e3("./inffast"), T2 = e3("./inftrees"), D = 1, F = 2, N2 = 0, U = -2, P2 = 1, n3 = 852, i3 = 592;
          function L2(e4) {
            return (e4 >>> 24 & 255) + (e4 >>> 8 & 65280) + ((65280 & e4) << 8) + ((255 & e4) << 24);
          }
          function s2() {
            this.mode = 0, this.last = false, this.wrap = 0, this.havedict = false, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I2.Buf16(320), this.work = new I2.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0;
          }
          function a2(e4) {
            var t3;
            return e4 && e4.state ? (t3 = e4.state, e4.total_in = e4.total_out = t3.total = 0, e4.msg = "", t3.wrap && (e4.adler = 1 & t3.wrap), t3.mode = P2, t3.last = 0, t3.havedict = 0, t3.dmax = 32768, t3.head = null, t3.hold = 0, t3.bits = 0, t3.lencode = t3.lendyn = new I2.Buf32(n3), t3.distcode = t3.distdyn = new I2.Buf32(i3), t3.sane = 1, t3.back = -1, N2) : U;
          }
          function o2(e4) {
            var t3;
            return e4 && e4.state ? ((t3 = e4.state).wsize = 0, t3.whave = 0, t3.wnext = 0, a2(e4)) : U;
          }
          function h2(e4, t3) {
            var r4, n4;
            return e4 && e4.state ? (n4 = e4.state, t3 < 0 ? (r4 = 0, t3 = -t3) : (r4 = 1 + (t3 >> 4), t3 < 48 && (t3 &= 15)), t3 && (t3 < 8 || 15 < t3) ? U : (null !== n4.window && n4.wbits !== t3 && (n4.window = null), n4.wrap = r4, n4.wbits = t3, o2(e4))) : U;
          }
          function u2(e4, t3) {
            var r4, n4;
            return e4 ? (n4 = new s2(), (e4.state = n4).window = null, (r4 = h2(e4, t3)) !== N2 && (e4.state = null), r4) : U;
          }
          var l2, f2, c3 = true;
          function j2(e4) {
            if (c3) {
              var t3;
              for (l2 = new I2.Buf32(512), f2 = new I2.Buf32(32), t3 = 0; t3 < 144; ) e4.lens[t3++] = 8;
              for (; t3 < 256; ) e4.lens[t3++] = 9;
              for (; t3 < 280; ) e4.lens[t3++] = 7;
              for (; t3 < 288; ) e4.lens[t3++] = 8;
              for (T2(D, e4.lens, 0, 288, l2, 0, e4.work, { bits: 9 }), t3 = 0; t3 < 32; ) e4.lens[t3++] = 5;
              T2(F, e4.lens, 0, 32, f2, 0, e4.work, { bits: 5 }), c3 = false;
            }
            e4.lencode = l2, e4.lenbits = 9, e4.distcode = f2, e4.distbits = 5;
          }
          function Z(e4, t3, r4, n4) {
            var i4, s3 = e4.state;
            return null === s3.window && (s3.wsize = 1 << s3.wbits, s3.wnext = 0, s3.whave = 0, s3.window = new I2.Buf8(s3.wsize)), n4 >= s3.wsize ? (I2.arraySet(s3.window, t3, r4 - s3.wsize, s3.wsize, 0), s3.wnext = 0, s3.whave = s3.wsize) : (n4 < (i4 = s3.wsize - s3.wnext) && (i4 = n4), I2.arraySet(s3.window, t3, r4 - n4, i4, s3.wnext), (n4 -= i4) ? (I2.arraySet(s3.window, t3, r4 - n4, n4, 0), s3.wnext = n4, s3.whave = s3.wsize) : (s3.wnext += i4, s3.wnext === s3.wsize && (s3.wnext = 0), s3.whave < s3.wsize && (s3.whave += i4))), 0;
          }
          r3.inflateReset = o2, r3.inflateReset2 = h2, r3.inflateResetKeep = a2, r3.inflateInit = function(e4) {
            return u2(e4, 15);
          }, r3.inflateInit2 = u2, r3.inflate = function(e4, t3) {
            var r4, n4, i4, s3, a3, o3, h3, u3, l3, f3, c4, d2, p2, m2, _2, g2, b2, v2, y2, w, k2, x2, S2, z3, C2 = 0, E2 = new I2.Buf8(4), A2 = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
            if (!e4 || !e4.state || !e4.output || !e4.input && 0 !== e4.avail_in) return U;
            12 === (r4 = e4.state).mode && (r4.mode = 13), a3 = e4.next_out, i4 = e4.output, h3 = e4.avail_out, s3 = e4.next_in, n4 = e4.input, o3 = e4.avail_in, u3 = r4.hold, l3 = r4.bits, f3 = o3, c4 = h3, x2 = N2;
            e: for (; ; ) switch (r4.mode) {
              case P2:
                if (0 === r4.wrap) {
                  r4.mode = 13;
                  break;
                }
                for (; l3 < 16; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if (2 & r4.wrap && 35615 === u3) {
                  E2[r4.check = 0] = 255 & u3, E2[1] = u3 >>> 8 & 255, r4.check = B2(r4.check, E2, 2, 0), l3 = u3 = 0, r4.mode = 2;
                  break;
                }
                if (r4.flags = 0, r4.head && (r4.head.done = false), !(1 & r4.wrap) || (((255 & u3) << 8) + (u3 >> 8)) % 31) {
                  e4.msg = "incorrect header check", r4.mode = 30;
                  break;
                }
                if (8 != (15 & u3)) {
                  e4.msg = "unknown compression method", r4.mode = 30;
                  break;
                }
                if (l3 -= 4, k2 = 8 + (15 & (u3 >>>= 4)), 0 === r4.wbits) r4.wbits = k2;
                else if (k2 > r4.wbits) {
                  e4.msg = "invalid window size", r4.mode = 30;
                  break;
                }
                r4.dmax = 1 << k2, e4.adler = r4.check = 1, r4.mode = 512 & u3 ? 10 : 12, l3 = u3 = 0;
                break;
              case 2:
                for (; l3 < 16; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if (r4.flags = u3, 8 != (255 & r4.flags)) {
                  e4.msg = "unknown compression method", r4.mode = 30;
                  break;
                }
                if (57344 & r4.flags) {
                  e4.msg = "unknown header flags set", r4.mode = 30;
                  break;
                }
                r4.head && (r4.head.text = u3 >> 8 & 1), 512 & r4.flags && (E2[0] = 255 & u3, E2[1] = u3 >>> 8 & 255, r4.check = B2(r4.check, E2, 2, 0)), l3 = u3 = 0, r4.mode = 3;
              case 3:
                for (; l3 < 32; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                r4.head && (r4.head.time = u3), 512 & r4.flags && (E2[0] = 255 & u3, E2[1] = u3 >>> 8 & 255, E2[2] = u3 >>> 16 & 255, E2[3] = u3 >>> 24 & 255, r4.check = B2(r4.check, E2, 4, 0)), l3 = u3 = 0, r4.mode = 4;
              case 4:
                for (; l3 < 16; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                r4.head && (r4.head.xflags = 255 & u3, r4.head.os = u3 >> 8), 512 & r4.flags && (E2[0] = 255 & u3, E2[1] = u3 >>> 8 & 255, r4.check = B2(r4.check, E2, 2, 0)), l3 = u3 = 0, r4.mode = 5;
              case 5:
                if (1024 & r4.flags) {
                  for (; l3 < 16; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  r4.length = u3, r4.head && (r4.head.extra_len = u3), 512 & r4.flags && (E2[0] = 255 & u3, E2[1] = u3 >>> 8 & 255, r4.check = B2(r4.check, E2, 2, 0)), l3 = u3 = 0;
                } else r4.head && (r4.head.extra = null);
                r4.mode = 6;
              case 6:
                if (1024 & r4.flags && (o3 < (d2 = r4.length) && (d2 = o3), d2 && (r4.head && (k2 = r4.head.extra_len - r4.length, r4.head.extra || (r4.head.extra = new Array(r4.head.extra_len)), I2.arraySet(r4.head.extra, n4, s3, d2, k2)), 512 & r4.flags && (r4.check = B2(r4.check, n4, d2, s3)), o3 -= d2, s3 += d2, r4.length -= d2), r4.length)) break e;
                r4.length = 0, r4.mode = 7;
              case 7:
                if (2048 & r4.flags) {
                  if (0 === o3) break e;
                  for (d2 = 0; k2 = n4[s3 + d2++], r4.head && k2 && r4.length < 65536 && (r4.head.name += String.fromCharCode(k2)), k2 && d2 < o3; ) ;
                  if (512 & r4.flags && (r4.check = B2(r4.check, n4, d2, s3)), o3 -= d2, s3 += d2, k2) break e;
                } else r4.head && (r4.head.name = null);
                r4.length = 0, r4.mode = 8;
              case 8:
                if (4096 & r4.flags) {
                  if (0 === o3) break e;
                  for (d2 = 0; k2 = n4[s3 + d2++], r4.head && k2 && r4.length < 65536 && (r4.head.comment += String.fromCharCode(k2)), k2 && d2 < o3; ) ;
                  if (512 & r4.flags && (r4.check = B2(r4.check, n4, d2, s3)), o3 -= d2, s3 += d2, k2) break e;
                } else r4.head && (r4.head.comment = null);
                r4.mode = 9;
              case 9:
                if (512 & r4.flags) {
                  for (; l3 < 16; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  if (u3 !== (65535 & r4.check)) {
                    e4.msg = "header crc mismatch", r4.mode = 30;
                    break;
                  }
                  l3 = u3 = 0;
                }
                r4.head && (r4.head.hcrc = r4.flags >> 9 & 1, r4.head.done = true), e4.adler = r4.check = 0, r4.mode = 12;
                break;
              case 10:
                for (; l3 < 32; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                e4.adler = r4.check = L2(u3), l3 = u3 = 0, r4.mode = 11;
              case 11:
                if (0 === r4.havedict) return e4.next_out = a3, e4.avail_out = h3, e4.next_in = s3, e4.avail_in = o3, r4.hold = u3, r4.bits = l3, 2;
                e4.adler = r4.check = 1, r4.mode = 12;
              case 12:
                if (5 === t3 || 6 === t3) break e;
              case 13:
                if (r4.last) {
                  u3 >>>= 7 & l3, l3 -= 7 & l3, r4.mode = 27;
                  break;
                }
                for (; l3 < 3; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                switch (r4.last = 1 & u3, l3 -= 1, 3 & (u3 >>>= 1)) {
                  case 0:
                    r4.mode = 14;
                    break;
                  case 1:
                    if (j2(r4), r4.mode = 20, 6 !== t3) break;
                    u3 >>>= 2, l3 -= 2;
                    break e;
                  case 2:
                    r4.mode = 17;
                    break;
                  case 3:
                    e4.msg = "invalid block type", r4.mode = 30;
                }
                u3 >>>= 2, l3 -= 2;
                break;
              case 14:
                for (u3 >>>= 7 & l3, l3 -= 7 & l3; l3 < 32; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if ((65535 & u3) != (u3 >>> 16 ^ 65535)) {
                  e4.msg = "invalid stored block lengths", r4.mode = 30;
                  break;
                }
                if (r4.length = 65535 & u3, l3 = u3 = 0, r4.mode = 15, 6 === t3) break e;
              case 15:
                r4.mode = 16;
              case 16:
                if (d2 = r4.length) {
                  if (o3 < d2 && (d2 = o3), h3 < d2 && (d2 = h3), 0 === d2) break e;
                  I2.arraySet(i4, n4, s3, d2, a3), o3 -= d2, s3 += d2, h3 -= d2, a3 += d2, r4.length -= d2;
                  break;
                }
                r4.mode = 12;
                break;
              case 17:
                for (; l3 < 14; ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if (r4.nlen = 257 + (31 & u3), u3 >>>= 5, l3 -= 5, r4.ndist = 1 + (31 & u3), u3 >>>= 5, l3 -= 5, r4.ncode = 4 + (15 & u3), u3 >>>= 4, l3 -= 4, 286 < r4.nlen || 30 < r4.ndist) {
                  e4.msg = "too many length or distance symbols", r4.mode = 30;
                  break;
                }
                r4.have = 0, r4.mode = 18;
              case 18:
                for (; r4.have < r4.ncode; ) {
                  for (; l3 < 3; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  r4.lens[A2[r4.have++]] = 7 & u3, u3 >>>= 3, l3 -= 3;
                }
                for (; r4.have < 19; ) r4.lens[A2[r4.have++]] = 0;
                if (r4.lencode = r4.lendyn, r4.lenbits = 7, S2 = { bits: r4.lenbits }, x2 = T2(0, r4.lens, 0, 19, r4.lencode, 0, r4.work, S2), r4.lenbits = S2.bits, x2) {
                  e4.msg = "invalid code lengths set", r4.mode = 30;
                  break;
                }
                r4.have = 0, r4.mode = 19;
              case 19:
                for (; r4.have < r4.nlen + r4.ndist; ) {
                  for (; g2 = (C2 = r4.lencode[u3 & (1 << r4.lenbits) - 1]) >>> 16 & 255, b2 = 65535 & C2, !((_2 = C2 >>> 24) <= l3); ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  if (b2 < 16) u3 >>>= _2, l3 -= _2, r4.lens[r4.have++] = b2;
                  else {
                    if (16 === b2) {
                      for (z3 = _2 + 2; l3 < z3; ) {
                        if (0 === o3) break e;
                        o3--, u3 += n4[s3++] << l3, l3 += 8;
                      }
                      if (u3 >>>= _2, l3 -= _2, 0 === r4.have) {
                        e4.msg = "invalid bit length repeat", r4.mode = 30;
                        break;
                      }
                      k2 = r4.lens[r4.have - 1], d2 = 3 + (3 & u3), u3 >>>= 2, l3 -= 2;
                    } else if (17 === b2) {
                      for (z3 = _2 + 3; l3 < z3; ) {
                        if (0 === o3) break e;
                        o3--, u3 += n4[s3++] << l3, l3 += 8;
                      }
                      l3 -= _2, k2 = 0, d2 = 3 + (7 & (u3 >>>= _2)), u3 >>>= 3, l3 -= 3;
                    } else {
                      for (z3 = _2 + 7; l3 < z3; ) {
                        if (0 === o3) break e;
                        o3--, u3 += n4[s3++] << l3, l3 += 8;
                      }
                      l3 -= _2, k2 = 0, d2 = 11 + (127 & (u3 >>>= _2)), u3 >>>= 7, l3 -= 7;
                    }
                    if (r4.have + d2 > r4.nlen + r4.ndist) {
                      e4.msg = "invalid bit length repeat", r4.mode = 30;
                      break;
                    }
                    for (; d2--; ) r4.lens[r4.have++] = k2;
                  }
                }
                if (30 === r4.mode) break;
                if (0 === r4.lens[256]) {
                  e4.msg = "invalid code -- missing end-of-block", r4.mode = 30;
                  break;
                }
                if (r4.lenbits = 9, S2 = { bits: r4.lenbits }, x2 = T2(D, r4.lens, 0, r4.nlen, r4.lencode, 0, r4.work, S2), r4.lenbits = S2.bits, x2) {
                  e4.msg = "invalid literal/lengths set", r4.mode = 30;
                  break;
                }
                if (r4.distbits = 6, r4.distcode = r4.distdyn, S2 = { bits: r4.distbits }, x2 = T2(F, r4.lens, r4.nlen, r4.ndist, r4.distcode, 0, r4.work, S2), r4.distbits = S2.bits, x2) {
                  e4.msg = "invalid distances set", r4.mode = 30;
                  break;
                }
                if (r4.mode = 20, 6 === t3) break e;
              case 20:
                r4.mode = 21;
              case 21:
                if (6 <= o3 && 258 <= h3) {
                  e4.next_out = a3, e4.avail_out = h3, e4.next_in = s3, e4.avail_in = o3, r4.hold = u3, r4.bits = l3, R2(e4, c4), a3 = e4.next_out, i4 = e4.output, h3 = e4.avail_out, s3 = e4.next_in, n4 = e4.input, o3 = e4.avail_in, u3 = r4.hold, l3 = r4.bits, 12 === r4.mode && (r4.back = -1);
                  break;
                }
                for (r4.back = 0; g2 = (C2 = r4.lencode[u3 & (1 << r4.lenbits) - 1]) >>> 16 & 255, b2 = 65535 & C2, !((_2 = C2 >>> 24) <= l3); ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if (g2 && 0 == (240 & g2)) {
                  for (v2 = _2, y2 = g2, w = b2; g2 = (C2 = r4.lencode[w + ((u3 & (1 << v2 + y2) - 1) >> v2)]) >>> 16 & 255, b2 = 65535 & C2, !(v2 + (_2 = C2 >>> 24) <= l3); ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  u3 >>>= v2, l3 -= v2, r4.back += v2;
                }
                if (u3 >>>= _2, l3 -= _2, r4.back += _2, r4.length = b2, 0 === g2) {
                  r4.mode = 26;
                  break;
                }
                if (32 & g2) {
                  r4.back = -1, r4.mode = 12;
                  break;
                }
                if (64 & g2) {
                  e4.msg = "invalid literal/length code", r4.mode = 30;
                  break;
                }
                r4.extra = 15 & g2, r4.mode = 22;
              case 22:
                if (r4.extra) {
                  for (z3 = r4.extra; l3 < z3; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  r4.length += u3 & (1 << r4.extra) - 1, u3 >>>= r4.extra, l3 -= r4.extra, r4.back += r4.extra;
                }
                r4.was = r4.length, r4.mode = 23;
              case 23:
                for (; g2 = (C2 = r4.distcode[u3 & (1 << r4.distbits) - 1]) >>> 16 & 255, b2 = 65535 & C2, !((_2 = C2 >>> 24) <= l3); ) {
                  if (0 === o3) break e;
                  o3--, u3 += n4[s3++] << l3, l3 += 8;
                }
                if (0 == (240 & g2)) {
                  for (v2 = _2, y2 = g2, w = b2; g2 = (C2 = r4.distcode[w + ((u3 & (1 << v2 + y2) - 1) >> v2)]) >>> 16 & 255, b2 = 65535 & C2, !(v2 + (_2 = C2 >>> 24) <= l3); ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  u3 >>>= v2, l3 -= v2, r4.back += v2;
                }
                if (u3 >>>= _2, l3 -= _2, r4.back += _2, 64 & g2) {
                  e4.msg = "invalid distance code", r4.mode = 30;
                  break;
                }
                r4.offset = b2, r4.extra = 15 & g2, r4.mode = 24;
              case 24:
                if (r4.extra) {
                  for (z3 = r4.extra; l3 < z3; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  r4.offset += u3 & (1 << r4.extra) - 1, u3 >>>= r4.extra, l3 -= r4.extra, r4.back += r4.extra;
                }
                if (r4.offset > r4.dmax) {
                  e4.msg = "invalid distance too far back", r4.mode = 30;
                  break;
                }
                r4.mode = 25;
              case 25:
                if (0 === h3) break e;
                if (d2 = c4 - h3, r4.offset > d2) {
                  if ((d2 = r4.offset - d2) > r4.whave && r4.sane) {
                    e4.msg = "invalid distance too far back", r4.mode = 30;
                    break;
                  }
                  p2 = d2 > r4.wnext ? (d2 -= r4.wnext, r4.wsize - d2) : r4.wnext - d2, d2 > r4.length && (d2 = r4.length), m2 = r4.window;
                } else m2 = i4, p2 = a3 - r4.offset, d2 = r4.length;
                for (h3 < d2 && (d2 = h3), h3 -= d2, r4.length -= d2; i4[a3++] = m2[p2++], --d2; ) ;
                0 === r4.length && (r4.mode = 21);
                break;
              case 26:
                if (0 === h3) break e;
                i4[a3++] = r4.length, h3--, r4.mode = 21;
                break;
              case 27:
                if (r4.wrap) {
                  for (; l3 < 32; ) {
                    if (0 === o3) break e;
                    o3--, u3 |= n4[s3++] << l3, l3 += 8;
                  }
                  if (c4 -= h3, e4.total_out += c4, r4.total += c4, c4 && (e4.adler = r4.check = r4.flags ? B2(r4.check, i4, c4, a3 - c4) : O(r4.check, i4, c4, a3 - c4)), c4 = h3, (r4.flags ? u3 : L2(u3)) !== r4.check) {
                    e4.msg = "incorrect data check", r4.mode = 30;
                    break;
                  }
                  l3 = u3 = 0;
                }
                r4.mode = 28;
              case 28:
                if (r4.wrap && r4.flags) {
                  for (; l3 < 32; ) {
                    if (0 === o3) break e;
                    o3--, u3 += n4[s3++] << l3, l3 += 8;
                  }
                  if (u3 !== (4294967295 & r4.total)) {
                    e4.msg = "incorrect length check", r4.mode = 30;
                    break;
                  }
                  l3 = u3 = 0;
                }
                r4.mode = 29;
              case 29:
                x2 = 1;
                break e;
              case 30:
                x2 = -3;
                break e;
              case 31:
                return -4;
              case 32:
              default:
                return U;
            }
            return e4.next_out = a3, e4.avail_out = h3, e4.next_in = s3, e4.avail_in = o3, r4.hold = u3, r4.bits = l3, (r4.wsize || c4 !== e4.avail_out && r4.mode < 30 && (r4.mode < 27 || 4 !== t3)) && Z(e4, e4.output, e4.next_out, c4 - e4.avail_out) ? (r4.mode = 31, -4) : (f3 -= e4.avail_in, c4 -= e4.avail_out, e4.total_in += f3, e4.total_out += c4, r4.total += c4, r4.wrap && c4 && (e4.adler = r4.check = r4.flags ? B2(r4.check, i4, c4, e4.next_out - c4) : O(r4.check, i4, c4, e4.next_out - c4)), e4.data_type = r4.bits + (r4.last ? 64 : 0) + (12 === r4.mode ? 128 : 0) + (20 === r4.mode || 15 === r4.mode ? 256 : 0), (0 == f3 && 0 === c4 || 4 === t3) && x2 === N2 && (x2 = -5), x2);
          }, r3.inflateEnd = function(e4) {
            if (!e4 || !e4.state) return U;
            var t3 = e4.state;
            return t3.window && (t3.window = null), e4.state = null, N2;
          }, r3.inflateGetHeader = function(e4, t3) {
            var r4;
            return e4 && e4.state ? 0 == (2 & (r4 = e4.state).wrap) ? U : ((r4.head = t3).done = false, N2) : U;
          }, r3.inflateSetDictionary = function(e4, t3) {
            var r4, n4 = t3.length;
            return e4 && e4.state ? 0 !== (r4 = e4.state).wrap && 11 !== r4.mode ? U : 11 === r4.mode && O(1, t3, n4, 0) !== r4.check ? -3 : Z(e4, t3, n4, n4) ? (r4.mode = 31, -4) : (r4.havedict = 1, N2) : U;
          }, r3.inflateInfo = "pako inflate (from Nodeca project)";
        }, { "../utils/common": 41, "./adler32": 43, "./crc32": 45, "./inffast": 48, "./inftrees": 50 }], 50: [function(e3, t2, r3) {
          var D = e3("../utils/common"), F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], N2 = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], P2 = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];
          t2.exports = function(e4, t3, r4, n3, i3, s2, a2, o2) {
            var h2, u2, l2, f2, c3, d2, p2, m2, _2, g2 = o2.bits, b2 = 0, v2 = 0, y2 = 0, w = 0, k2 = 0, x2 = 0, S2 = 0, z3 = 0, C2 = 0, E2 = 0, A2 = null, I2 = 0, O = new D.Buf16(16), B2 = new D.Buf16(16), R2 = null, T2 = 0;
            for (b2 = 0; b2 <= 15; b2++) O[b2] = 0;
            for (v2 = 0; v2 < n3; v2++) O[t3[r4 + v2]]++;
            for (k2 = g2, w = 15; 1 <= w && 0 === O[w]; w--) ;
            if (w < k2 && (k2 = w), 0 === w) return i3[s2++] = 20971520, i3[s2++] = 20971520, o2.bits = 1, 0;
            for (y2 = 1; y2 < w && 0 === O[y2]; y2++) ;
            for (k2 < y2 && (k2 = y2), b2 = z3 = 1; b2 <= 15; b2++) if (z3 <<= 1, (z3 -= O[b2]) < 0) return -1;
            if (0 < z3 && (0 === e4 || 1 !== w)) return -1;
            for (B2[1] = 0, b2 = 1; b2 < 15; b2++) B2[b2 + 1] = B2[b2] + O[b2];
            for (v2 = 0; v2 < n3; v2++) 0 !== t3[r4 + v2] && (a2[B2[t3[r4 + v2]]++] = v2);
            if (d2 = 0 === e4 ? (A2 = R2 = a2, 19) : 1 === e4 ? (A2 = F, I2 -= 257, R2 = N2, T2 -= 257, 256) : (A2 = U, R2 = P2, -1), b2 = y2, c3 = s2, S2 = v2 = E2 = 0, l2 = -1, f2 = (C2 = 1 << (x2 = k2)) - 1, 1 === e4 && 852 < C2 || 2 === e4 && 592 < C2) return 1;
            for (; ; ) {
              for (p2 = b2 - S2, _2 = a2[v2] < d2 ? (m2 = 0, a2[v2]) : a2[v2] > d2 ? (m2 = R2[T2 + a2[v2]], A2[I2 + a2[v2]]) : (m2 = 96, 0), h2 = 1 << b2 - S2, y2 = u2 = 1 << x2; i3[c3 + (E2 >> S2) + (u2 -= h2)] = p2 << 24 | m2 << 16 | _2 | 0, 0 !== u2; ) ;
              for (h2 = 1 << b2 - 1; E2 & h2; ) h2 >>= 1;
              if (0 !== h2 ? (E2 &= h2 - 1, E2 += h2) : E2 = 0, v2++, 0 == --O[b2]) {
                if (b2 === w) break;
                b2 = t3[r4 + a2[v2]];
              }
              if (k2 < b2 && (E2 & f2) !== l2) {
                for (0 === S2 && (S2 = k2), c3 += y2, z3 = 1 << (x2 = b2 - S2); x2 + S2 < w && !((z3 -= O[x2 + S2]) <= 0); ) x2++, z3 <<= 1;
                if (C2 += 1 << x2, 1 === e4 && 852 < C2 || 2 === e4 && 592 < C2) return 1;
                i3[l2 = E2 & f2] = k2 << 24 | x2 << 16 | c3 - s2 | 0;
              }
            }
            return 0 !== E2 && (i3[c3 + E2] = b2 - S2 << 24 | 64 << 16 | 0), o2.bits = k2, 0;
          };
        }, { "../utils/common": 41 }], 51: [function(e3, t2, r3) {
          t2.exports = { 2: "need dictionary", 1: "stream end", 0: "", "-1": "file error", "-2": "stream error", "-3": "data error", "-4": "insufficient memory", "-5": "buffer error", "-6": "incompatible version" };
        }, {}], 52: [function(e3, t2, r3) {
          var i3 = e3("../utils/common"), o2 = 0, h2 = 1;
          function n3(e4) {
            for (var t3 = e4.length; 0 <= --t3; ) e4[t3] = 0;
          }
          var s2 = 0, a2 = 29, u2 = 256, l2 = u2 + 1 + a2, f2 = 30, c3 = 19, _2 = 2 * l2 + 1, g2 = 15, d2 = 16, p2 = 7, m2 = 256, b2 = 16, v2 = 17, y2 = 18, w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], k2 = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], x2 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], S2 = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], z3 = new Array(2 * (l2 + 2));
          n3(z3);
          var C2 = new Array(2 * f2);
          n3(C2);
          var E2 = new Array(512);
          n3(E2);
          var A2 = new Array(256);
          n3(A2);
          var I2 = new Array(a2);
          n3(I2);
          var O, B2, R2, T2 = new Array(f2);
          function D(e4, t3, r4, n4, i4) {
            this.static_tree = e4, this.extra_bits = t3, this.extra_base = r4, this.elems = n4, this.max_length = i4, this.has_stree = e4 && e4.length;
          }
          function F(e4, t3) {
            this.dyn_tree = e4, this.max_code = 0, this.stat_desc = t3;
          }
          function N2(e4) {
            return e4 < 256 ? E2[e4] : E2[256 + (e4 >>> 7)];
          }
          function U(e4, t3) {
            e4.pending_buf[e4.pending++] = 255 & t3, e4.pending_buf[e4.pending++] = t3 >>> 8 & 255;
          }
          function P2(e4, t3, r4) {
            e4.bi_valid > d2 - r4 ? (e4.bi_buf |= t3 << e4.bi_valid & 65535, U(e4, e4.bi_buf), e4.bi_buf = t3 >> d2 - e4.bi_valid, e4.bi_valid += r4 - d2) : (e4.bi_buf |= t3 << e4.bi_valid & 65535, e4.bi_valid += r4);
          }
          function L2(e4, t3, r4) {
            P2(e4, r4[2 * t3], r4[2 * t3 + 1]);
          }
          function j2(e4, t3) {
            for (var r4 = 0; r4 |= 1 & e4, e4 >>>= 1, r4 <<= 1, 0 < --t3; ) ;
            return r4 >>> 1;
          }
          function Z(e4, t3, r4) {
            var n4, i4, s3 = new Array(g2 + 1), a3 = 0;
            for (n4 = 1; n4 <= g2; n4++) s3[n4] = a3 = a3 + r4[n4 - 1] << 1;
            for (i4 = 0; i4 <= t3; i4++) {
              var o3 = e4[2 * i4 + 1];
              0 !== o3 && (e4[2 * i4] = j2(s3[o3]++, o3));
            }
          }
          function W(e4) {
            var t3;
            for (t3 = 0; t3 < l2; t3++) e4.dyn_ltree[2 * t3] = 0;
            for (t3 = 0; t3 < f2; t3++) e4.dyn_dtree[2 * t3] = 0;
            for (t3 = 0; t3 < c3; t3++) e4.bl_tree[2 * t3] = 0;
            e4.dyn_ltree[2 * m2] = 1, e4.opt_len = e4.static_len = 0, e4.last_lit = e4.matches = 0;
          }
          function M2(e4) {
            8 < e4.bi_valid ? U(e4, e4.bi_buf) : 0 < e4.bi_valid && (e4.pending_buf[e4.pending++] = e4.bi_buf), e4.bi_buf = 0, e4.bi_valid = 0;
          }
          function H2(e4, t3, r4, n4) {
            var i4 = 2 * t3, s3 = 2 * r4;
            return e4[i4] < e4[s3] || e4[i4] === e4[s3] && n4[t3] <= n4[r4];
          }
          function G(e4, t3, r4) {
            for (var n4 = e4.heap[r4], i4 = r4 << 1; i4 <= e4.heap_len && (i4 < e4.heap_len && H2(t3, e4.heap[i4 + 1], e4.heap[i4], e4.depth) && i4++, !H2(t3, n4, e4.heap[i4], e4.depth)); ) e4.heap[r4] = e4.heap[i4], r4 = i4, i4 <<= 1;
            e4.heap[r4] = n4;
          }
          function K(e4, t3, r4) {
            var n4, i4, s3, a3, o3 = 0;
            if (0 !== e4.last_lit) for (; n4 = e4.pending_buf[e4.d_buf + 2 * o3] << 8 | e4.pending_buf[e4.d_buf + 2 * o3 + 1], i4 = e4.pending_buf[e4.l_buf + o3], o3++, 0 === n4 ? L2(e4, i4, t3) : (L2(e4, (s3 = A2[i4]) + u2 + 1, t3), 0 !== (a3 = w[s3]) && P2(e4, i4 -= I2[s3], a3), L2(e4, s3 = N2(--n4), r4), 0 !== (a3 = k2[s3]) && P2(e4, n4 -= T2[s3], a3)), o3 < e4.last_lit; ) ;
            L2(e4, m2, t3);
          }
          function Y(e4, t3) {
            var r4, n4, i4, s3 = t3.dyn_tree, a3 = t3.stat_desc.static_tree, o3 = t3.stat_desc.has_stree, h3 = t3.stat_desc.elems, u3 = -1;
            for (e4.heap_len = 0, e4.heap_max = _2, r4 = 0; r4 < h3; r4++) 0 !== s3[2 * r4] ? (e4.heap[++e4.heap_len] = u3 = r4, e4.depth[r4] = 0) : s3[2 * r4 + 1] = 0;
            for (; e4.heap_len < 2; ) s3[2 * (i4 = e4.heap[++e4.heap_len] = u3 < 2 ? ++u3 : 0)] = 1, e4.depth[i4] = 0, e4.opt_len--, o3 && (e4.static_len -= a3[2 * i4 + 1]);
            for (t3.max_code = u3, r4 = e4.heap_len >> 1; 1 <= r4; r4--) G(e4, s3, r4);
            for (i4 = h3; r4 = e4.heap[1], e4.heap[1] = e4.heap[e4.heap_len--], G(e4, s3, 1), n4 = e4.heap[1], e4.heap[--e4.heap_max] = r4, e4.heap[--e4.heap_max] = n4, s3[2 * i4] = s3[2 * r4] + s3[2 * n4], e4.depth[i4] = (e4.depth[r4] >= e4.depth[n4] ? e4.depth[r4] : e4.depth[n4]) + 1, s3[2 * r4 + 1] = s3[2 * n4 + 1] = i4, e4.heap[1] = i4++, G(e4, s3, 1), 2 <= e4.heap_len; ) ;
            e4.heap[--e4.heap_max] = e4.heap[1], function(e5, t4) {
              var r5, n5, i5, s4, a4, o4, h4 = t4.dyn_tree, u4 = t4.max_code, l3 = t4.stat_desc.static_tree, f3 = t4.stat_desc.has_stree, c4 = t4.stat_desc.extra_bits, d3 = t4.stat_desc.extra_base, p3 = t4.stat_desc.max_length, m3 = 0;
              for (s4 = 0; s4 <= g2; s4++) e5.bl_count[s4] = 0;
              for (h4[2 * e5.heap[e5.heap_max] + 1] = 0, r5 = e5.heap_max + 1; r5 < _2; r5++) p3 < (s4 = h4[2 * h4[2 * (n5 = e5.heap[r5]) + 1] + 1] + 1) && (s4 = p3, m3++), h4[2 * n5 + 1] = s4, u4 < n5 || (e5.bl_count[s4]++, a4 = 0, d3 <= n5 && (a4 = c4[n5 - d3]), o4 = h4[2 * n5], e5.opt_len += o4 * (s4 + a4), f3 && (e5.static_len += o4 * (l3[2 * n5 + 1] + a4)));
              if (0 !== m3) {
                do {
                  for (s4 = p3 - 1; 0 === e5.bl_count[s4]; ) s4--;
                  e5.bl_count[s4]--, e5.bl_count[s4 + 1] += 2, e5.bl_count[p3]--, m3 -= 2;
                } while (0 < m3);
                for (s4 = p3; 0 !== s4; s4--) for (n5 = e5.bl_count[s4]; 0 !== n5; ) u4 < (i5 = e5.heap[--r5]) || (h4[2 * i5 + 1] !== s4 && (e5.opt_len += (s4 - h4[2 * i5 + 1]) * h4[2 * i5], h4[2 * i5 + 1] = s4), n5--);
              }
            }(e4, t3), Z(s3, u3, e4.bl_count);
          }
          function X(e4, t3, r4) {
            var n4, i4, s3 = -1, a3 = t3[1], o3 = 0, h3 = 7, u3 = 4;
            for (0 === a3 && (h3 = 138, u3 = 3), t3[2 * (r4 + 1) + 1] = 65535, n4 = 0; n4 <= r4; n4++) i4 = a3, a3 = t3[2 * (n4 + 1) + 1], ++o3 < h3 && i4 === a3 || (o3 < u3 ? e4.bl_tree[2 * i4] += o3 : 0 !== i4 ? (i4 !== s3 && e4.bl_tree[2 * i4]++, e4.bl_tree[2 * b2]++) : o3 <= 10 ? e4.bl_tree[2 * v2]++ : e4.bl_tree[2 * y2]++, s3 = i4, u3 = (o3 = 0) === a3 ? (h3 = 138, 3) : i4 === a3 ? (h3 = 6, 3) : (h3 = 7, 4));
          }
          function V2(e4, t3, r4) {
            var n4, i4, s3 = -1, a3 = t3[1], o3 = 0, h3 = 7, u3 = 4;
            for (0 === a3 && (h3 = 138, u3 = 3), n4 = 0; n4 <= r4; n4++) if (i4 = a3, a3 = t3[2 * (n4 + 1) + 1], !(++o3 < h3 && i4 === a3)) {
              if (o3 < u3) for (; L2(e4, i4, e4.bl_tree), 0 != --o3; ) ;
              else 0 !== i4 ? (i4 !== s3 && (L2(e4, i4, e4.bl_tree), o3--), L2(e4, b2, e4.bl_tree), P2(e4, o3 - 3, 2)) : o3 <= 10 ? (L2(e4, v2, e4.bl_tree), P2(e4, o3 - 3, 3)) : (L2(e4, y2, e4.bl_tree), P2(e4, o3 - 11, 7));
              s3 = i4, u3 = (o3 = 0) === a3 ? (h3 = 138, 3) : i4 === a3 ? (h3 = 6, 3) : (h3 = 7, 4);
            }
          }
          n3(T2);
          var q = false;
          function J(e4, t3, r4, n4) {
            P2(e4, (s2 << 1) + (n4 ? 1 : 0), 3), function(e5, t4, r5, n5) {
              M2(e5), U(e5, r5), U(e5, ~r5), i3.arraySet(e5.pending_buf, e5.window, t4, r5, e5.pending), e5.pending += r5;
            }(e4, t3, r4);
          }
          r3._tr_init = function(e4) {
            q || (function() {
              var e5, t3, r4, n4, i4, s3 = new Array(g2 + 1);
              for (n4 = r4 = 0; n4 < a2 - 1; n4++) for (I2[n4] = r4, e5 = 0; e5 < 1 << w[n4]; e5++) A2[r4++] = n4;
              for (A2[r4 - 1] = n4, n4 = i4 = 0; n4 < 16; n4++) for (T2[n4] = i4, e5 = 0; e5 < 1 << k2[n4]; e5++) E2[i4++] = n4;
              for (i4 >>= 7; n4 < f2; n4++) for (T2[n4] = i4 << 7, e5 = 0; e5 < 1 << k2[n4] - 7; e5++) E2[256 + i4++] = n4;
              for (t3 = 0; t3 <= g2; t3++) s3[t3] = 0;
              for (e5 = 0; e5 <= 143; ) z3[2 * e5 + 1] = 8, e5++, s3[8]++;
              for (; e5 <= 255; ) z3[2 * e5 + 1] = 9, e5++, s3[9]++;
              for (; e5 <= 279; ) z3[2 * e5 + 1] = 7, e5++, s3[7]++;
              for (; e5 <= 287; ) z3[2 * e5 + 1] = 8, e5++, s3[8]++;
              for (Z(z3, l2 + 1, s3), e5 = 0; e5 < f2; e5++) C2[2 * e5 + 1] = 5, C2[2 * e5] = j2(e5, 5);
              O = new D(z3, w, u2 + 1, l2, g2), B2 = new D(C2, k2, 0, f2, g2), R2 = new D(new Array(0), x2, 0, c3, p2);
            }(), q = true), e4.l_desc = new F(e4.dyn_ltree, O), e4.d_desc = new F(e4.dyn_dtree, B2), e4.bl_desc = new F(e4.bl_tree, R2), e4.bi_buf = 0, e4.bi_valid = 0, W(e4);
          }, r3._tr_stored_block = J, r3._tr_flush_block = function(e4, t3, r4, n4) {
            var i4, s3, a3 = 0;
            0 < e4.level ? (2 === e4.strm.data_type && (e4.strm.data_type = function(e5) {
              var t4, r5 = 4093624447;
              for (t4 = 0; t4 <= 31; t4++, r5 >>>= 1) if (1 & r5 && 0 !== e5.dyn_ltree[2 * t4]) return o2;
              if (0 !== e5.dyn_ltree[18] || 0 !== e5.dyn_ltree[20] || 0 !== e5.dyn_ltree[26]) return h2;
              for (t4 = 32; t4 < u2; t4++) if (0 !== e5.dyn_ltree[2 * t4]) return h2;
              return o2;
            }(e4)), Y(e4, e4.l_desc), Y(e4, e4.d_desc), a3 = function(e5) {
              var t4;
              for (X(e5, e5.dyn_ltree, e5.l_desc.max_code), X(e5, e5.dyn_dtree, e5.d_desc.max_code), Y(e5, e5.bl_desc), t4 = c3 - 1; 3 <= t4 && 0 === e5.bl_tree[2 * S2[t4] + 1]; t4--) ;
              return e5.opt_len += 3 * (t4 + 1) + 5 + 5 + 4, t4;
            }(e4), i4 = e4.opt_len + 3 + 7 >>> 3, (s3 = e4.static_len + 3 + 7 >>> 3) <= i4 && (i4 = s3)) : i4 = s3 = r4 + 5, r4 + 4 <= i4 && -1 !== t3 ? J(e4, t3, r4, n4) : 4 === e4.strategy || s3 === i4 ? (P2(e4, 2 + (n4 ? 1 : 0), 3), K(e4, z3, C2)) : (P2(e4, 4 + (n4 ? 1 : 0), 3), function(e5, t4, r5, n5) {
              var i5;
              for (P2(e5, t4 - 257, 5), P2(e5, r5 - 1, 5), P2(e5, n5 - 4, 4), i5 = 0; i5 < n5; i5++) P2(e5, e5.bl_tree[2 * S2[i5] + 1], 3);
              V2(e5, e5.dyn_ltree, t4 - 1), V2(e5, e5.dyn_dtree, r5 - 1);
            }(e4, e4.l_desc.max_code + 1, e4.d_desc.max_code + 1, a3 + 1), K(e4, e4.dyn_ltree, e4.dyn_dtree)), W(e4), n4 && M2(e4);
          }, r3._tr_tally = function(e4, t3, r4) {
            return e4.pending_buf[e4.d_buf + 2 * e4.last_lit] = t3 >>> 8 & 255, e4.pending_buf[e4.d_buf + 2 * e4.last_lit + 1] = 255 & t3, e4.pending_buf[e4.l_buf + e4.last_lit] = 255 & r4, e4.last_lit++, 0 === t3 ? e4.dyn_ltree[2 * r4]++ : (e4.matches++, t3--, e4.dyn_ltree[2 * (A2[r4] + u2 + 1)]++, e4.dyn_dtree[2 * N2(t3)]++), e4.last_lit === e4.lit_bufsize - 1;
          }, r3._tr_align = function(e4) {
            P2(e4, 2, 3), L2(e4, m2, z3), function(e5) {
              16 === e5.bi_valid ? (U(e5, e5.bi_buf), e5.bi_buf = 0, e5.bi_valid = 0) : 8 <= e5.bi_valid && (e5.pending_buf[e5.pending++] = 255 & e5.bi_buf, e5.bi_buf >>= 8, e5.bi_valid -= 8);
            }(e4);
          };
        }, { "../utils/common": 41 }], 53: [function(e3, t2, r3) {
          t2.exports = function() {
            this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0;
          };
        }, {}], 54: [function(e3, t2, r3) {
          (function(e4) {
            !function(r4, n3) {
              if (!r4.setImmediate) {
                var i3, s2, t3, a2, o2 = 1, h2 = {}, u2 = false, l2 = r4.document, e5 = Object.getPrototypeOf && Object.getPrototypeOf(r4);
                e5 = e5 && e5.setTimeout ? e5 : r4, i3 = "[object process]" === {}.toString.call(r4.process) ? function(e6) {
                  process.nextTick(function() {
                    c3(e6);
                  });
                } : function() {
                  if (r4.postMessage && !r4.importScripts) {
                    var e6 = true, t4 = r4.onmessage;
                    return r4.onmessage = function() {
                      e6 = false;
                    }, r4.postMessage("", "*"), r4.onmessage = t4, e6;
                  }
                }() ? (a2 = "setImmediate$" + Math.random() + "$", r4.addEventListener ? r4.addEventListener("message", d2, false) : r4.attachEvent("onmessage", d2), function(e6) {
                  r4.postMessage(a2 + e6, "*");
                }) : r4.MessageChannel ? ((t3 = new MessageChannel()).port1.onmessage = function(e6) {
                  c3(e6.data);
                }, function(e6) {
                  t3.port2.postMessage(e6);
                }) : l2 && "onreadystatechange" in l2.createElement("script") ? (s2 = l2.documentElement, function(e6) {
                  var t4 = l2.createElement("script");
                  t4.onreadystatechange = function() {
                    c3(e6), t4.onreadystatechange = null, s2.removeChild(t4), t4 = null;
                  }, s2.appendChild(t4);
                }) : function(e6) {
                  setTimeout(c3, 0, e6);
                }, e5.setImmediate = function(e6) {
                  "function" != typeof e6 && (e6 = new Function("" + e6));
                  for (var t4 = new Array(arguments.length - 1), r5 = 0; r5 < t4.length; r5++) t4[r5] = arguments[r5 + 1];
                  var n4 = { callback: e6, args: t4 };
                  return h2[o2] = n4, i3(o2), o2++;
                }, e5.clearImmediate = f2;
              }
              function f2(e6) {
                delete h2[e6];
              }
              function c3(e6) {
                if (u2) setTimeout(c3, 0, e6);
                else {
                  var t4 = h2[e6];
                  if (t4) {
                    u2 = true;
                    try {
                      !function(e7) {
                        var t5 = e7.callback, r5 = e7.args;
                        switch (r5.length) {
                          case 0:
                            t5();
                            break;
                          case 1:
                            t5(r5[0]);
                            break;
                          case 2:
                            t5(r5[0], r5[1]);
                            break;
                          case 3:
                            t5(r5[0], r5[1], r5[2]);
                            break;
                          default:
                            t5.apply(n3, r5);
                        }
                      }(t4);
                    } finally {
                      f2(e6), u2 = false;
                    }
                  }
                }
              }
              function d2(e6) {
                e6.source === r4 && "string" == typeof e6.data && 0 === e6.data.indexOf(a2) && c3(+e6.data.slice(a2.length));
              }
            }("undefined" == typeof self ? void 0 === e4 ? this : e4 : self);
          }).call(this, "undefined" != typeof commonjsGlobal ? commonjsGlobal : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
        }, {}] }, {}, [10])(10);
      });
    })(jszip_min);
    return jszip_min.exports;
  }
  var jszip_minExports = requireJszip_min();
  const JSZip = /* @__PURE__ */ getDefaultExportFromCjs(jszip_minExports);
  var FileSaver_min$1 = { exports: {} };
  var FileSaver_min = FileSaver_min$1.exports;
  var hasRequiredFileSaver_min;
  function requireFileSaver_min() {
    if (hasRequiredFileSaver_min) return FileSaver_min$1.exports;
    hasRequiredFileSaver_min = 1;
    (function(module, exports) {
      (function(a2, b2) {
        b2();
      })(FileSaver_min, function() {
        function b2(a3, b3) {
          return "undefined" == typeof b3 ? b3 = { autoBom: false } : "object" != typeof b3 && (console.warn("Deprecated: Expected third argument to be a object"), b3 = { autoBom: !b3 }), b3.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a3.type) ? new Blob(["\uFEFF", a3], { type: a3.type }) : a3;
        }
        function c3(a3, b3, c4) {
          var d3 = new XMLHttpRequest();
          d3.open("GET", a3), d3.responseType = "blob", d3.onload = function() {
            g2(d3.response, b3, c4);
          }, d3.onerror = function() {
            console.error("could not download file");
          }, d3.send();
        }
        function d2(a3) {
          var b3 = new XMLHttpRequest();
          b3.open("HEAD", a3, false);
          try {
            b3.send();
          } catch (a4) {
          }
          return 200 <= b3.status && 299 >= b3.status;
        }
        function e3(a3) {
          try {
            a3.dispatchEvent(new MouseEvent("click"));
          } catch (c4) {
            var b3 = document.createEvent("MouseEvents");
            b3.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null), a3.dispatchEvent(b3);
          }
        }
        var f2 = "object" == typeof window && window.window === window ? window : "object" == typeof self && self.self === self ? self : "object" == typeof commonjsGlobal && commonjsGlobal.global === commonjsGlobal ? commonjsGlobal : void 0, a2 = f2.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent), g2 = f2.saveAs || ("object" != typeof window || window !== f2 ? function() {
        } : "download" in HTMLAnchorElement.prototype && !a2 ? function(b3, g3, h2) {
          var i3 = f2.URL || f2.webkitURL, j2 = document.createElement("a");
          g3 = g3 || b3.name || "download", j2.download = g3, j2.rel = "noopener", "string" == typeof b3 ? (j2.href = b3, j2.origin === location.origin ? e3(j2) : d2(j2.href) ? c3(b3, g3, h2) : e3(j2, j2.target = "_blank")) : (j2.href = i3.createObjectURL(b3), setTimeout(function() {
            i3.revokeObjectURL(j2.href);
          }, 4e4), setTimeout(function() {
            e3(j2);
          }, 0));
        } : "msSaveOrOpenBlob" in navigator ? function(f3, g3, h2) {
          if (g3 = g3 || f3.name || "download", "string" != typeof f3) navigator.msSaveOrOpenBlob(b2(f3, h2), g3);
          else if (d2(f3)) c3(f3, g3, h2);
          else {
            var i3 = document.createElement("a");
            i3.href = f3, i3.target = "_blank", setTimeout(function() {
              e3(i3);
            });
          }
        } : function(b3, d3, e4, g3) {
          if (g3 = g3 || open("", "_blank"), g3 && (g3.document.title = g3.document.body.innerText = "downloading..."), "string" == typeof b3) return c3(b3, d3, e4);
          var h2 = "application/octet-stream" === b3.type, i3 = /constructor/i.test(f2.HTMLElement) || f2.safari, j2 = /CriOS\/[\d]+/.test(navigator.userAgent);
          if ((j2 || h2 && i3 || a2) && "undefined" != typeof FileReader) {
            var k2 = new FileReader();
            k2.onloadend = function() {
              var a3 = k2.result;
              a3 = j2 ? a3 : a3.replace(/^data:[^;]*;/, "data:attachment/file;"), g3 ? g3.location.href = a3 : location = a3, g3 = null;
            }, k2.readAsDataURL(b3);
          } else {
            var l2 = f2.URL || f2.webkitURL, m2 = l2.createObjectURL(b3);
            g3 ? g3.location = m2 : location.href = m2, g3 = null, setTimeout(function() {
              l2.revokeObjectURL(m2);
            }, 4e4);
          }
        });
        f2.saveAs = g2.saveAs = g2, module.exports = g2;
      });
    })(FileSaver_min$1);
    return FileSaver_min$1.exports;
  }
  var FileSaver_minExports = requireFileSaver_min();
  const localStorage$1 = localforage.createInstance({
    name: "localforage"
  });
  const snapshotStorage = localforage.createInstance({
    name: "snapshot"
  });
  const screenshotStorage = localforage.createInstance({
    name: "screenshot"
  });
  const hanashiroStorage = localforage.createInstance({
    name: "Hanashiro"
  });
  const simplyActivityIds = async (snapshotId) => {
    const snapshotInfo = await snapshotStorage.getItem(snapshotId);
    const activityId = snapshotInfo == null ? void 0 : snapshotInfo.activityId;
    if (activityId) {
      const appId = snapshotInfo.appId;
      if (activityId.startsWith(appId) && activityId[appId.length] === ".") {
        const simplyActivityIds2 = activityId.replace(appId, "");
        return simplyActivityIds2;
      } else return false;
    } else return false;
  };
  const editNode = async (snapshotId, nodeId, options) => {
    try {
      const snapshotInfo = await snapshotStorage.getItem(snapshotId);
      const nodes = snapshotInfo.nodes;
      const nodeAttr = nodes[nodeId].attr;
      options.forEach(
        (option) => nodeAttr[option.target] = option.value
      );
      nodes[nodeId].attr = nodeAttr;
      snapshotInfo.nodes = nodes;
      await snapshotStorage.setItem(snapshotId, snapshotInfo);
      return true;
    } catch {
      return false;
    }
  };
  const getScreenInfo = async (snapshotId) => {
    const snapshotInfo = await snapshotStorage.getItem(snapshotId);
    return { width: snapshotInfo.screenWidth, height: snapshotInfo.screenHeight };
  };
  const getScreenshot = async (snapshotId) => {
    return await screenshotStorage.getItem(snapshotId);
  };
  const replaceScreenshot = async (snapshotId, image) => {
    await screenshotStorage.setItem(snapshotId, image);
  };
  const getNodeAttr = async (snapshotId, nodeId, target) => {
    const snapshotInfo = await snapshotStorage.getItem(snapshotId);
    const nodes = snapshotInfo.nodes;
    const nodeAttr = nodes[nodeId].attr;
    return nodeAttr[target];
  };
  const downloadSnapshot = async (snapshotId) => {
    const snapshotInfo = await snapshotStorage.getItem(snapshotId);
    const screenshot = await screenshotStorage.getItem(snapshotId);
    const jszip = new JSZip();
    jszip.file(
      `snapshot-${snapshotId}.json`,
      JSON.stringify(snapshotInfo, void 0, 2)
    );
    jszip.file(`screenshot-${snapshotId}.png`, screenshot);
    jszip.generateAsync({ type: "blob" }).then((snapshotFile) => {
      FileSaver_minExports.saveAs(snapshotFile, `snapshot-${snapshotId}.zip`);
    });
  };
  const setHanashiroSettings = async (item, value) => {
    await hanashiroStorage.setItem(item, value);
  };
  const getHanashiroSettings = async (item) => {
    return await hanashiroStorage.getItem(item);
  };
  const getInspectSettings = async () => {
    return await localStorage$1.getItem("settings");
  };
  const setInspectSettings = async (newSettings) => {
    await localStorage$1.setItem("settings", newSettings);
  };
  const rulesKeySort = [
    "key",
    "preKeys",
    "fastQuery",
    "matchTime",
    "actionMaximum",
    "resetMatch",
    "priorityTime",
    "action",
    "activityIds",
    "position",
    "matches",
    "exampleUrls",
    "snapshotUrls"
  ];
  if (!await( getHanashiroSettings("selectors")))
    await( setHanashiroSettings("selectors", []));
  if (!await( getHanashiroSettings("rulesKeySort")) || (await( getHanashiroSettings("rulesKeySort"))).length == 0) {
    await( setHanashiroSettings("rulesKeySort", rulesKeySort));
  }
  for (const rulesKey of await( getHanashiroSettings(
    "rulesKeySort"
  ))) {
    if (!rulesKeySort.includes(rulesKey))
      confirm({
        headline: "同步最新rulesKey排序",
        description: "检测你的rulesKey排序有多余或缺失字段,可能无法使用最新的功能。是否同步?注意:这会丢失你现有的排序设置。",
        closeOnEsc: true,
        closeOnOverlayClick: true,
        confirmText: "同步",
        cancelText: "取消",
        onConfirm: async () => await setHanashiroSettings("rulesKeySort", rulesKeySort)
      });
  }
  if (!await( getInspectSettings()))
    await( setInspectSettings({
      autoUploadImport: false,
      ignoreUploadWarn: false,
      ignoreWasmWarn: false,
      maxShowNodeSize: 2e3
    }));
  Object.defineProperty(window, "Hanashiro", {
    value: {},
    writable: true
  });
  if (await( getHanashiroSettings("hideLoadSnackbar")) === false) {
    snackbar({
      message: "世界第一公主殿下已经降下魔法~",
      autoCloseDelay: 2e3,
      placement: "top"
    });
  }
  const send = (eventName) => {
    const event = new Event(eventName);
    window.dispatchEvent(event);
  };
  const receive = (eventName, callback, once) => {
    window.addEventListener(eventName, callback, { once });
  };
  const createBarIcon = (icon, tooltip, onclick) => {
    const iconTooltip = document.createElement("mdui-tooltip");
    iconTooltip.content = tooltip;
    const iconElement = document.createElement("mdui-button-icon");
    iconElement.icon = icon;
    iconElement.style.height = "36px";
    iconElement.style.width = "36px";
    iconElement.onclick = onclick;
    iconTooltip.append(iconElement);
    return iconTooltip;
  };
  const observeElement = (selector, callback, continuous = false) => {
    let elementExists = false;
    try {
      const timer = setInterval(() => {
        const element = document.querySelector(selector);
        if (element && !elementExists) {
          elementExists = true;
          callback();
        } else if (!element) elementExists = false;
        if (element && !continuous) {
          clearInterval(timer);
        }
      }, 100);
    } catch (e3) {
      console.log(e3);
    }
  };
  const insertBarIcon = (icon) => {
    const iconBar = document.querySelector("#iconBar");
    iconBar.append(icon);
  };
  Object.defineProperty(window, "HatsuneMiku", {
    value: {
      event: {
        send,
        receive
      },
      utils: {
        icon: {
          createBarIcon,
          insertBarIcon
        },
        common: {
          observeElement
        },
        storage: {
          getHanashiroSettings,
          setHanashiroSettings,
          getInspectSettings,
          setInspectSettings
        },
        ui: {
          snackbar,
          confirm,
          dialog
        }
      }
    },
    writable: true
  });
  const attrList = [
    "id",
    "vid",
    "text",
    "text.length",
    "desc",
    "desc.length",
    "clickable",
    "focusable",
    "checkable",
    "checked",
    "editable",
    "longClickable",
    "visibleToUser",
    "left",
    "top",
    "right",
    "bottom",
    "width",
    "height",
    "childCount",
    "index"
  ];
  const copyProxy = new Proxy(navigator.clipboard.writeText, {
    apply: async (target, thisArg, args) => {
      const data2 = args[0];
      if (data2.startsWith("{") && data2.endsWith("}")) {
        window.Hanashiro.originRule = args[0];
        const result = await new Promise((resolve, reject) => {
          try {
            receive(
              "modifyEnd",
              () => resolve(window.Hanashiro.returnResult),
              true
            );
            send("copyEvent");
          } catch {
            reject();
          }
        });
        if (result) {
          snackbar({
            message: "注入修改成功",
            placement: "top"
          });
          return await Reflect.apply(target, thisArg, [result]);
        }
      } else if (data2.startsWith("name=")) {
        if (await getHanashiroSettings("simplyName") == true) {
          const fullname = data2.split('"')[1];
          const splitedName = fullname.split(".");
          const name = splitedName[splitedName.length - 1];
          return await Reflect.apply(target, thisArg, [name]);
        } else return await Reflect.apply(target, thisArg, [data2]);
      } else if (attrList.filter((attr) => data2.startsWith(`${attr}=`)).length != 0) {
        return await Reflect.apply(target, thisArg, [`[${data2}]`]);
      } else if (data2.startsWith(window.origin)) {
        const selectors = await getHanashiroSettings("selectors");
        if (selectors.length != 0) {
          const copiedUrl = new URL(data2);
          if (copiedUrl.searchParams.has("gkd")) {
            const selectorBase64 = copiedUrl.searchParams.get("gkd");
            prompt({
              headline: "备注",
              description: "给该选择器的备注,留空就用默认的了哦~",
              confirmText: "就决定是你了!",
              cancelText: "这个不要保存!",
              closeOnEsc: true,
              closeOnOverlayClick: true,
              onConfirm: async (value) => {
                selectors.push({
                  name: value ? value : selectorBase64,
                  base64: selectorBase64,
                  order: 1
                });
                selectors.sort((a2, b2) => {
                  if (a2.order > b2.order) return -1;
                  else if (a2.order == b2.order) return 0;
                  else return 1;
                });
                await setHanashiroSettings("selectors", selectors);
              }
            }).catch();
          }
        }
        return await Reflect.apply(target, thisArg, [data2]);
      } else return await Reflect.apply(target, thisArg, [data2]);
    }
  });
  navigator.clipboard.writeText = copyProxy;
  observeElement(".n-button.n-button--default-type.n-button--medium-type", () => {
    const settingsButton = document.querySelectorAll(
      ".n-button.n-button--default-type.n-button--medium-type"
    )[1];
    settingsButton.onclick = () => {
      snackbar({
        message: "网页审查工具未实现该功能,脚本粗略替代实现。未来官方实现可能与目前不同,请勿过度依赖。",
        placement: "top"
      });
      send("openInspectSettings");
    };
  });
  const getSnapshotId = () => {
    return location.pathname.split("/")[2];
  };
  const getCurrentNodeId = () => {
    const currentSelectedNode = document.querySelector(
      ".n-tree-node-wrapper .n-tree-node--selected"
    );
    if (!currentSelectedNode) return 0;
    else return Number(currentSelectedNode.getAttribute("data-node-id"));
  };
  const replaceNodeInfo = async () => {
    const snapshotId = getSnapshotId();
    const nodeId = getCurrentNodeId() == -1 ? 0 : getCurrentNodeId();
    const text = await getNodeAttr(snapshotId, nodeId, "text");
    const desc = await getNodeAttr(snapshotId, nodeId, "desc");
    let newText, newDesc;
    if (text !== null) {
      newText = "";
      for (let i3 = 0; i3 < text.length; i3++) {
        newText += "*";
      }
    } else newText = null;
    if (desc !== null) {
      newDesc = "";
      for (let i3 = 0; i3 < desc.length; i3++) {
        newDesc += "*";
      }
    } else newDesc = null;
    editNode(snapshotId, nodeId, [
      {
        target: "text",
        value: newText
      },
      {
        target: "desc",
        value: newDesc
      }
    ]).then((result) => {
      if (result)
        snackbar({
          message: "修改成功!你可以选择上传获取导入链接或下载快照分享",
          placement: "top"
        });
    });
  };
  const replaceNodeInfo$1 = () => {
    dialog({
      headline: "确认要对该节点打码吗?",
      description: "进行打码操作会对导入的快照造成无法恢复的修改,如需恢复,需要删除当前快照重新导入。建议你先下载备份!",
      actions: [
        {
          text: "我再想想"
        },
        {
          text: "下载快照文件并打码",
          onClick: () => {
            return new Promise((resolve, reject) => {
              snackbar({
                message: "开始下载中……下载开始后会自动关闭弹窗",
                placement: "top"
              });
              downloadSnapshot(getSnapshotId()).then(() => {
                resolve();
                replaceNodeInfo();
              }).catch(() => {
                snackbar({
                  message: "下载失败",
                  placement: "top"
                });
                reject();
              });
            });
          }
        },
        {
          text: "直接打码",
          onClick: () => replaceNodeInfo()
        }
      ],
      closeOnEsc: true,
      closeOnOverlayClick: true
    });
  };
  observeElement(
    ".n-input-group",
    () => {
      if (!document.querySelector("#iconBar")) {
        const inputGroup = document.querySelector(".n-input-group");
        const iconBar = document.createElement("div");
        iconBar.id = "iconBar";
        const UseSelectorIcon = createBarIcon("search", "搜索选择器", () => {
          send("openUseSelector");
        });
        const AddSelectorIcon = createBarIcon("add", "添加选择器", () => {
          send("openAddSelector");
        });
        const ManageSelectorsIcon = createBarIcon("edit", "管理选择器", () => {
          send("openManageSelectors");
        });
        const ChangeScreenshotIcon = createBarIcon("photo", "更换截图", () => {
          send("openChangeScreenshot");
        });
        const SettingsIcon = createBarIcon("settings", "脚本设置", () => {
          send("openSettings");
        });
        const HelpIcon = createBarIcon("help", "帮助", () => {
          send("openHelp");
        });
        const SponsorIcon = createBarIcon("coffee", "捐赠", () => {
          window.open("https://afdian.com/a/Adpro");
        });
        iconBar.append(
          UseSelectorIcon,
          AddSelectorIcon,
          ManageSelectorsIcon,
          ChangeScreenshotIcon,
          SettingsIcon,
          HelpIcon,
          SponsorIcon
        );
        inputGroup.insertAdjacentElement("beforebegin", iconBar);
      }
    },
    true
  );
  observeElement("#app", () => {
    const app = document.querySelector("#app");
    const editNodeIcon = document.createElement("mdui-fab");
    editNodeIcon.icon = "edit";
    editNodeIcon.variant = "secondary";
    editNodeIcon.extended = true;
    editNodeIcon.textContent = "替换当前节点信息";
    editNodeIcon.style.right = "16px";
    editNodeIcon.style.bottom = "120px";
    editNodeIcon.setAttribute("fixed", "");
    editNodeIcon.onclick = replaceNodeInfo$1;
    const positionIcon = document.createElement("mdui-fab");
    positionIcon.icon = "open_with";
    positionIcon.variant = "secondary";
    positionIcon.extended = true;
    positionIcon.textContent = "生成坐标";
    positionIcon.style.right = "16px";
    positionIcon.style.bottom = "60px";
    positionIcon.setAttribute("fixed", "");
    positionIcon.onclick = () => send("openGeneratePosition");
    app.append(editNodeIcon, positionIcon);
  });
  var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/;
  var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/;
  var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
  var unicode = {
    Space_Separator,
    ID_Start,
    ID_Continue
  };
  var util$1 = {
    isSpaceSeparator(c3) {
      return typeof c3 === "string" && unicode.Space_Separator.test(c3);
    },
    isIdStartChar(c3) {
      return typeof c3 === "string" && (c3 >= "a" && c3 <= "z" || c3 >= "A" && c3 <= "Z" || c3 === "$" || c3 === "_" || unicode.ID_Start.test(c3));
    },
    isIdContinueChar(c3) {
      return typeof c3 === "string" && (c3 >= "a" && c3 <= "z" || c3 >= "A" && c3 <= "Z" || c3 >= "0" && c3 <= "9" || c3 === "$" || c3 === "_" || c3 === "‌" || c3 === "‍" || unicode.ID_Continue.test(c3));
    },
    isDigit(c3) {
      return typeof c3 === "string" && /[0-9]/.test(c3);
    },
    isHexDigit(c3) {
      return typeof c3 === "string" && /[0-9A-Fa-f]/.test(c3);
    }
  };
  let source;
  let parseState;
  let stack;
  let pos;
  let line;
  let column;
  let token;
  let key$1;
  let root;
  var parse = function parse2(text, reviver) {
    source = String(text);
    parseState = "start";
    stack = [];
    pos = 0;
    line = 1;
    column = 0;
    token = void 0;
    key$1 = void 0;
    root = void 0;
    do {
      token = lex();
      parseStates[parseState]();
    } while (token.type !== "eof");
    if (typeof reviver === "function") {
      return internalize({ "": root }, "", reviver);
    }
    return root;
  };
  function internalize(holder, name, reviver) {
    const value = holder[name];
    if (value != null && typeof value === "object") {
      if (Array.isArray(value)) {
        for (let i3 = 0; i3 < value.length; i3++) {
          const key2 = String(i3);
          const replacement = internalize(value, key2, reviver);
          if (replacement === void 0) {
            delete value[key2];
          } else {
            Object.defineProperty(value, key2, {
              value: replacement,
              writable: true,
              enumerable: true,
              configurable: true
            });
          }
        }
      } else {
        for (const key2 in value) {
          const replacement = internalize(value, key2, reviver);
          if (replacement === void 0) {
            delete value[key2];
          } else {
            Object.defineProperty(value, key2, {
              value: replacement,
              writable: true,
              enumerable: true,
              configurable: true
            });
          }
        }
      }
    }
    return reviver.call(holder, name, value);
  }
  let lexState;
  let buffer;
  let doubleQuote;
  let sign;
  let c2;
  function lex() {
    lexState = "default";
    buffer = "";
    doubleQuote = false;
    sign = 1;
    for (; ; ) {
      c2 = peek();
      const token2 = lexStates[lexState]();
      if (token2) {
        return token2;
      }
    }
  }
  function peek() {
    if (source[pos]) {
      return String.fromCodePoint(source.codePointAt(pos));
    }
  }
  function read() {
    const c3 = peek();
    if (c3 === "\n") {
      line++;
      column = 0;
    } else if (c3) {
      column += c3.length;
    } else {
      column++;
    }
    if (c3) {
      pos += c3.length;
    }
    return c3;
  }
  const lexStates = {
    default() {
      switch (c2) {
        case "	":
        case "\v":
        case "\f":
        case " ":
        case " ":
        case "\uFEFF":
        case "\n":
        case "\r":
        case "\u2028":
        case "\u2029":
          read();
          return;
        case "/":
          read();
          lexState = "comment";
          return;
        case void 0:
          read();
          return newToken("eof");
      }
      if (util$1.isSpaceSeparator(c2)) {
        read();
        return;
      }
      return lexStates[parseState]();
    },
    comment() {
      switch (c2) {
        case "*":
          read();
          lexState = "multiLineComment";
          return;
        case "/":
          read();
          lexState = "singleLineComment";
          return;
      }
      throw invalidChar(read());
    },
    multiLineComment() {
      switch (c2) {
        case "*":
          read();
          lexState = "multiLineCommentAsterisk";
          return;
        case void 0:
          throw invalidChar(read());
      }
      read();
    },
    multiLineCommentAsterisk() {
      switch (c2) {
        case "*":
          read();
          return;
        case "/":
          read();
          lexState = "default";
          return;
        case void 0:
          throw invalidChar(read());
      }
      read();
      lexState = "multiLineComment";
    },
    singleLineComment() {
      switch (c2) {
        case "\n":
        case "\r":
        case "\u2028":
        case "\u2029":
          read();
          lexState = "default";
          return;
        case void 0:
          read();
          return newToken("eof");
      }
      read();
    },
    value() {
      switch (c2) {
        case "{":
        case "[":
          return newToken("punctuator", read());
        case "n":
          read();
          literal("ull");
          return newToken("null", null);
        case "t":
          read();
          literal("rue");
          return newToken("boolean", true);
        case "f":
          read();
          literal("alse");
          return newToken("boolean", false);
        case "-":
        case "+":
          if (read() === "-") {
            sign = -1;
          }
          lexState = "sign";
          return;
        case ".":
          buffer = read();
          lexState = "decimalPointLeading";
          return;
        case "0":
          buffer = read();
          lexState = "zero";
          return;
        case "1":
        case "2":
        case "3":
        case "4":
        case "5":
        case "6":
        case "7":
        case "8":
        case "9":
          buffer = read();
          lexState = "decimalInteger";
          return;
        case "I":
          read();
          literal("nfinity");
          return newToken("numeric", Infinity);
        case "N":
          read();
          literal("aN");
          return newToken("numeric", NaN);
        case '"':
        case "'":
          doubleQuote = read() === '"';
          buffer = "";
          lexState = "string";
          return;
      }
      throw invalidChar(read());
    },
    identifierNameStartEscape() {
      if (c2 !== "u") {
        throw invalidChar(read());
      }
      read();
      const u2 = unicodeEscape();
      switch (u2) {
        case "$":
        case "_":
          break;
        default:
          if (!util$1.isIdStartChar(u2)) {
            throw invalidIdentifier();
          }
          break;
      }
      buffer += u2;
      lexState = "identifierName";
    },
    identifierName() {
      switch (c2) {
        case "$":
        case "_":
        case "‌":
        case "‍":
          buffer += read();
          return;
        case "\\":
          read();
          lexState = "identifierNameEscape";
          return;
      }
      if (util$1.isIdContinueChar(c2)) {
        buffer += read();
        return;
      }
      return newToken("identifier", buffer);
    },
    identifierNameEscape() {
      if (c2 !== "u") {
        throw invalidChar(read());
      }
      read();
      const u2 = unicodeEscape();
      switch (u2) {
        case "$":
        case "_":
        case "‌":
        case "‍":
          break;
        default:
          if (!util$1.isIdContinueChar(u2)) {
            throw invalidIdentifier();
          }
          break;
      }
      buffer += u2;
      lexState = "identifierName";
    },
    sign() {
      switch (c2) {
        case ".":
          buffer = read();
          lexState = "decimalPointLeading";
          return;
        case "0":
          buffer = read();
          lexState = "zero";
          return;
        case "1":
        case "2":
        case "3":
        case "4":
        case "5":
        case "6":
        case "7":
        case "8":
        case "9":
          buffer = read();
          lexState = "decimalInteger";
          return;
        case "I":
          read();
          literal("nfinity");
          return newToken("numeric", sign * Infinity);
        case "N":
          read();
          literal("aN");
          return newToken("numeric", NaN);
      }
      throw invalidChar(read());
    },
    zero() {
      switch (c2) {
        case ".":
          buffer += read();
          lexState = "decimalPoint";
          return;
        case "e":
        case "E":
          buffer += read();
          lexState = "decimalExponent";
          return;
        case "x":
        case "X":
          buffer += read();
          lexState = "hexadecimal";
          return;
      }
      return newToken("numeric", sign * 0);
    },
    decimalInteger() {
      switch (c2) {
        case ".":
          buffer += read();
          lexState = "decimalPoint";
          return;
        case "e":
        case "E":
          buffer += read();
          lexState = "decimalExponent";
          return;
      }
      if (util$1.isDigit(c2)) {
        buffer += read();
        return;
      }
      return newToken("numeric", sign * Number(buffer));
    },
    decimalPointLeading() {
      if (util$1.isDigit(c2)) {
        buffer += read();
        lexState = "decimalFraction";
        return;
      }
      throw invalidChar(read());
    },
    decimalPoint() {
      switch (c2) {
        case "e":
        case "E":
          buffer += read();
          lexState = "decimalExponent";
          return;
      }
      if (util$1.isDigit(c2)) {
        buffer += read();
        lexState = "decimalFraction";
        return;
      }
      return newToken("numeric", sign * Number(buffer));
    },
    decimalFraction() {
      switch (c2) {
        case "e":
        case "E":
          buffer += read();
          lexState = "decimalExponent";
          return;
      }
      if (util$1.isDigit(c2)) {
        buffer += read();
        return;
      }
      return newToken("numeric", sign * Number(buffer));
    },
    decimalExponent() {
      switch (c2) {
        case "+":
        case "-":
          buffer += read();
          lexState = "decimalExponentSign";
          return;
      }
      if (util$1.isDigit(c2)) {
        buffer += read();
        lexState = "decimalExponentInteger";
        return;
      }
      throw invalidChar(read());
    },
    decimalExponentSign() {
      if (util$1.isDigit(c2)) {
        buffer += read();
        lexState = "decimalExponentInteger";
        return;
      }
      throw invalidChar(read());
    },
    decimalExponentInteger() {
      if (util$1.isDigit(c2)) {
        buffer += read();
        return;
      }
      return newToken("numeric", sign * Number(buffer));
    },
    hexadecimal() {
      if (util$1.isHexDigit(c2)) {
        buffer += read();
        lexState = "hexadecimalInteger";
        return;
      }
      throw invalidChar(read());
    },
    hexadecimalInteger() {
      if (util$1.isHexDigit(c2)) {
        buffer += read();
        return;
      }
      return newToken("numeric", sign * Number(buffer));
    },
    string() {
      switch (c2) {
        case "\\":
          read();
          buffer += escape();
          return;
        case '"':
          if (doubleQuote) {
            read();
            return newToken("string", buffer);
          }
          buffer += read();
          return;
        case "'":
          if (!doubleQuote) {
            read();
            return newToken("string", buffer);
          }
          buffer += read();
          return;
        case "\n":
        case "\r":
          throw invalidChar(read());
        case "\u2028":
        case "\u2029":
          separatorChar(c2);
          break;
        case void 0:
          throw invalidChar(read());
      }
      buffer += read();
    },
    start() {
      switch (c2) {
        case "{":
        case "[":
          return newToken("punctuator", read());
      }
      lexState = "value";
    },
    beforePropertyName() {
      switch (c2) {
        case "$":
        case "_":
          buffer = read();
          lexState = "identifierName";
          return;
        case "\\":
          read();
          lexState = "identifierNameStartEscape";
          return;
        case "}":
          return newToken("punctuator", read());
        case '"':
        case "'":
          doubleQuote = read() === '"';
          lexState = "string";
          return;
      }
      if (util$1.isIdStartChar(c2)) {
        buffer += read();
        lexState = "identifierName";
        return;
      }
      throw invalidChar(read());
    },
    afterPropertyName() {
      if (c2 === ":") {
        return newToken("punctuator", read());
      }
      throw invalidChar(read());
    },
    beforePropertyValue() {
      lexState = "value";
    },
    afterPropertyValue() {
      switch (c2) {
        case ",":
        case "}":
          return newToken("punctuator", read());
      }
      throw invalidChar(read());
    },
    beforeArrayValue() {
      if (c2 === "]") {
        return newToken("punctuator", read());
      }
      lexState = "value";
    },
    afterArrayValue() {
      switch (c2) {
        case ",":
        case "]":
          return newToken("punctuator", read());
      }
      throw invalidChar(read());
    },
    end() {
      throw invalidChar(read());
    }
  };
  function newToken(type, value) {
    return {
      type,
      value,
      line,
      column
    };
  }
  function literal(s2) {
    for (const c3 of s2) {
      const p2 = peek();
      if (p2 !== c3) {
        throw invalidChar(read());
      }
      read();
    }
  }
  function escape() {
    const c3 = peek();
    switch (c3) {
      case "b":
        read();
        return "\b";
      case "f":
        read();
        return "\f";
      case "n":
        read();
        return "\n";
      case "r":
        read();
        return "\r";
      case "t":
        read();
        return "	";
      case "v":
        read();
        return "\v";
      case "0":
        read();
        if (util$1.isDigit(peek())) {
          throw invalidChar(read());
        }
        return "\0";
      case "x":
        read();
        return hexEscape();
      case "u":
        read();
        return unicodeEscape();
      case "\n":
      case "\u2028":
      case "\u2029":
        read();
        return "";
      case "\r":
        read();
        if (peek() === "\n") {
          read();
        }
        return "";
      case "1":
      case "2":
      case "3":
      case "4":
      case "5":
      case "6":
      case "7":
      case "8":
      case "9":
        throw invalidChar(read());
      case void 0:
        throw invalidChar(read());
    }
    return read();
  }
  function hexEscape() {
    let buffer2 = "";
    let c3 = peek();
    if (!util$1.isHexDigit(c3)) {
      throw invalidChar(read());
    }
    buffer2 += read();
    c3 = peek();
    if (!util$1.isHexDigit(c3)) {
      throw invalidChar(read());
    }
    buffer2 += read();
    return String.fromCodePoint(parseInt(buffer2, 16));
  }
  function unicodeEscape() {
    let buffer2 = "";
    let count = 4;
    while (count-- > 0) {
      const c3 = peek();
      if (!util$1.isHexDigit(c3)) {
        throw invalidChar(read());
      }
      buffer2 += read();
    }
    return String.fromCodePoint(parseInt(buffer2, 16));
  }
  const parseStates = {
    start() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      push();
    },
    beforePropertyName() {
      switch (token.type) {
        case "identifier":
        case "string":
          key$1 = token.value;
          parseState = "afterPropertyName";
          return;
        case "punctuator":
          pop();
          return;
        case "eof":
          throw invalidEOF();
      }
    },
    afterPropertyName() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      parseState = "beforePropertyValue";
    },
    beforePropertyValue() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      push();
    },
    beforeArrayValue() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      if (token.type === "punctuator" && token.value === "]") {
        pop();
        return;
      }
      push();
    },
    afterPropertyValue() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      switch (token.value) {
        case ",":
          parseState = "beforePropertyName";
          return;
        case "}":
          pop();
      }
    },
    afterArrayValue() {
      if (token.type === "eof") {
        throw invalidEOF();
      }
      switch (token.value) {
        case ",":
          parseState = "beforeArrayValue";
          return;
        case "]":
          pop();
      }
    },
    end() {
    }
  };
  function push() {
    let value;
    switch (token.type) {
      case "punctuator":
        switch (token.value) {
          case "{":
            value = {};
            break;
          case "[":
            value = [];
            break;
        }
        break;
      case "null":
      case "boolean":
      case "numeric":
      case "string":
        value = token.value;
        break;
    }
    if (root === void 0) {
      root = value;
    } else {
      const parent = stack[stack.length - 1];
      if (Array.isArray(parent)) {
        parent.push(value);
      } else {
        Object.defineProperty(parent, key$1, {
          value,
          writable: true,
          enumerable: true,
          configurable: true
        });
      }
    }
    if (value !== null && typeof value === "object") {
      stack.push(value);
      if (Array.isArray(value)) {
        parseState = "beforeArrayValue";
      } else {
        parseState = "beforePropertyName";
      }
    } else {
      const current = stack[stack.length - 1];
      if (current == null) {
        parseState = "end";
      } else if (Array.isArray(current)) {
        parseState = "afterArrayValue";
      } else {
        parseState = "afterPropertyValue";
      }
    }
  }
  function pop() {
    stack.pop();
    const current = stack[stack.length - 1];
    if (current == null) {
      parseState = "end";
    } else if (Array.isArray(current)) {
      parseState = "afterArrayValue";
    } else {
      parseState = "afterPropertyValue";
    }
  }
  function invalidChar(c3) {
    if (c3 === void 0) {
      return syntaxError(`JSON5: invalid end of input at ${line}:${column}`);
    }
    return syntaxError(`JSON5: invalid character '${formatChar(c3)}' at ${line}:${column}`);
  }
  function invalidEOF() {
    return syntaxError(`JSON5: invalid end of input at ${line}:${column}`);
  }
  function invalidIdentifier() {
    column -= 5;
    return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`);
  }
  function separatorChar(c3) {
    console.warn(`JSON5: '${formatChar(c3)}' in strings is not valid ECMAScript; consider escaping`);
  }
  function formatChar(c3) {
    const replacements = {
      "'": "\\'",
      '"': '\\"',
      "\\": "\\\\",
      "\b": "\\b",
      "\f": "\\f",
      "\n": "\\n",
      "\r": "\\r",
      "	": "\\t",
      "\v": "\\v",
      "\0": "\\0",
      "\u2028": "\\u2028",
      "\u2029": "\\u2029"
    };
    if (replacements[c3]) {
      return replacements[c3];
    }
    if (c3 < " ") {
      const hexString = c3.charCodeAt(0).toString(16);
      return "\\x" + ("00" + hexString).substring(hexString.length);
    }
    return c3;
  }
  function syntaxError(message) {
    const err = new SyntaxError(message);
    err.lineNumber = line;
    err.columnNumber = column;
    return err;
  }
  var stringify = function stringify2(value, replacer, space) {
    const stack2 = [];
    let indent = "";
    let propertyList;
    let replacerFunc;
    let gap = "";
    let quote;
    if (replacer != null && typeof replacer === "object" && !Array.isArray(replacer)) {
      space = replacer.space;
      quote = replacer.quote;
      replacer = replacer.replacer;
    }
    if (typeof replacer === "function") {
      replacerFunc = replacer;
    } else if (Array.isArray(replacer)) {
      propertyList = [];
      for (const v2 of replacer) {
        let item;
        if (typeof v2 === "string") {
          item = v2;
        } else if (typeof v2 === "number" || v2 instanceof String || v2 instanceof Number) {
          item = String(v2);
        }
        if (item !== void 0 && propertyList.indexOf(item) < 0) {
          propertyList.push(item);
        }
      }
    }
    if (space instanceof Number) {
      space = Number(space);
    } else if (space instanceof String) {
      space = String(space);
    }
    if (typeof space === "number") {
      if (space > 0) {
        space = Math.min(10, Math.floor(space));
        gap = "          ".substr(0, space);
      }
    } else if (typeof space === "string") {
      gap = space.substr(0, 10);
    }
    return serializeProperty("", { "": value });
    function serializeProperty(key2, holder) {
      let value2 = holder[key2];
      if (value2 != null) {
        if (typeof value2.toJSON5 === "function") {
          value2 = value2.toJSON5(key2);
        } else if (typeof value2.toJSON === "function") {
          value2 = value2.toJSON(key2);
        }
      }
      if (replacerFunc) {
        value2 = replacerFunc.call(holder, key2, value2);
      }
      if (value2 instanceof Number) {
        value2 = Number(value2);
      } else if (value2 instanceof String) {
        value2 = String(value2);
      } else if (value2 instanceof Boolean) {
        value2 = value2.valueOf();
      }
      switch (value2) {
        case null:
          return "null";
        case true:
          return "true";
        case false:
          return "false";
      }
      if (typeof value2 === "string") {
        return quoteString(value2);
      }
      if (typeof value2 === "number") {
        return String(value2);
      }
      if (typeof value2 === "object") {
        return Array.isArray(value2) ? serializeArray(value2) : serializeObject(value2);
      }
      return void 0;
    }
    function quoteString(value2) {
      const quotes = {
        "'": 0.1,
        '"': 0.2
      };
      const replacements = {
        "'": "\\'",
        '"': '\\"',
        "\\": "\\\\",
        "\b": "\\b",
        "\f": "\\f",
        "\n": "\\n",
        "\r": "\\r",
        "	": "\\t",
        "\v": "\\v",
        "\0": "\\0",
        "\u2028": "\\u2028",
        "\u2029": "\\u2029"
      };
      let product = "";
      for (let i3 = 0; i3 < value2.length; i3++) {
        const c3 = value2[i3];
        switch (c3) {
          case "'":
          case '"':
            quotes[c3]++;
            product += c3;
            continue;
          case "\0":
            if (util$1.isDigit(value2[i3 + 1])) {
              product += "\\x00";
              continue;
            }
        }
        if (replacements[c3]) {
          product += replacements[c3];
          continue;
        }
        if (c3 < " ") {
          let hexString = c3.charCodeAt(0).toString(16);
          product += "\\x" + ("00" + hexString).substring(hexString.length);
          continue;
        }
        product += c3;
      }
      const quoteChar = quote || Object.keys(quotes).reduce((a2, b2) => quotes[a2] < quotes[b2] ? a2 : b2);
      product = product.replace(new RegExp(quoteChar, "g"), replacements[quoteChar]);
      return quoteChar + product + quoteChar;
    }
    function serializeObject(value2) {
      if (stack2.indexOf(value2) >= 0) {
        throw TypeError("Converting circular structure to JSON5");
      }
      stack2.push(value2);
      let stepback = indent;
      indent = indent + gap;
      let keys = propertyList || Object.keys(value2);
      let partial = [];
      for (const key2 of keys) {
        const propertyString = serializeProperty(key2, value2);
        if (propertyString !== void 0) {
          let member = serializeKey(key2) + ":";
          if (gap !== "") {
            member += " ";
          }
          member += propertyString;
          partial.push(member);
        }
      }
      let final;
      if (partial.length === 0) {
        final = "{}";
      } else {
        let properties;
        if (gap === "") {
          properties = partial.join(",");
          final = "{" + properties + "}";
        } else {
          let separator = ",\n" + indent;
          properties = partial.join(separator);
          final = "{\n" + indent + properties + ",\n" + stepback + "}";
        }
      }
      stack2.pop();
      indent = stepback;
      return final;
    }
    function serializeKey(key2) {
      if (key2.length === 0) {
        return quoteString(key2);
      }
      const firstChar = String.fromCodePoint(key2.codePointAt(0));
      if (!util$1.isIdStartChar(firstChar)) {
        return quoteString(key2);
      }
      for (let i3 = firstChar.length; i3 < key2.length; i3++) {
        if (!util$1.isIdContinueChar(String.fromCodePoint(key2.codePointAt(i3)))) {
          return quoteString(key2);
        }
      }
      return key2;
    }
    function serializeArray(value2) {
      if (stack2.indexOf(value2) >= 0) {
        throw TypeError("Converting circular structure to JSON5");
      }
      stack2.push(value2);
      let stepback = indent;
      indent = indent + gap;
      let partial = [];
      for (let i3 = 0; i3 < value2.length; i3++) {
        const propertyString = serializeProperty(String(i3), value2);
        partial.push(propertyString !== void 0 ? propertyString : "null");
      }
      let final;
      if (partial.length === 0) {
        final = "[]";
      } else {
        if (gap === "") {
          let properties = partial.join(",");
          final = "[" + properties + "]";
        } else {
          let separator = ",\n" + indent;
          let properties = partial.join(separator);
          final = "[\n" + indent + properties + ",\n" + stepback + "]";
        }
      }
      stack2.pop();
      indent = stepback;
      return final;
    }
  };
  const JSON5 = {
    parse,
    stringify
  };
  var lib = JSON5;
  const onChange = (element) => {
    if (element.id == "left") {
      if (element.value != "")
        document.querySelector(".position#right").disabled = true;
      else document.querySelector(".position#right").disabled = false;
    }
    if (element.id == "right") {
      if (element.value != "")
        document.querySelector(".position#left").disabled = true;
      else document.querySelector(".position#left").disabled = false;
    }
    if (element.id == "top") {
      if (element.value != "")
        document.querySelector(".position#bottom").disabled = true;
      else
        document.querySelector(".position#bottom").disabled = false;
    }
    if (element.id == "bottom") {
      if (element.value != "")
        document.querySelector(".position#top").disabled = true;
      else document.querySelector(".position#top").disabled = false;
    }
  };
  const constructPositionArray = () => {
    const left = document.querySelector(".position#left").value;
    const right = document.querySelector(".position#right").value;
    const top = document.querySelector(".position#top").value;
    const bottom = document.querySelector(".position#bottom").value;
    if (!left && !right && !top && !bottom) return [];
    else return [top, left, right, bottom];
  };
  const iArrayToArray = (array = []) => {
    return Array().concat(array);
  };
  const groupsKeyOrder = [
    "key",
    "name",
    "desc",
    "matchTime",
    "actionMaximum",
    "resetMatch",
    "priorityTime",
    "rules"
  ];
  const sort = async (groups) => {
    const rulesKeyOrder = await getHanashiroSettings("rulesKeySort");
    const groupsKeyValue = [];
    const rulesKeyValue = [];
    groupsKeyOrder.forEach((groupsKey) => {
      if (groups[groupsKey] !== void 0) groupsKeyValue.push(groups[groupsKey]);
      else groupsKeyValue.push(void 0);
    });
    rulesKeyOrder.forEach((rulesKey) => {
      if (groups.rules[0][rulesKey] !== void 0)
        rulesKeyValue.push(groups.rules[0][rulesKey]);
      else rulesKeyValue.push(void 0);
    });
    const sortedRules = {};
    rulesKeyOrder.forEach((rulesKey, index) => {
      sortedRules[rulesKey] = rulesKeyValue[index];
    });
    const sortedGroups = {
      key: groupsKeyValue[0],
      name: groupsKeyValue[1],
      desc: groupsKeyValue[2],
      matchTime: groupsKeyValue[3],
      actionMaximum: groupsKeyValue[4],
      resetMatch: groupsKeyValue[5],
      priorityTime: groupsKeyValue[6],
      rules: [sortedRules]
    };
    return sortedGroups;
  };
  const checkPositionLegality = (position) => {
    const { top, left, right, bottom } = position;
    if (top) {
      if (bottom || !left && !right) {
        snackbar({
          message: "非法坐标",
          placement: "top"
        });
        return false;
      }
    }
    if (left) {
      if (right || !top && !bottom) {
        snackbar({
          message: "非法坐标",
          placement: "top"
        });
        return false;
      }
    }
    if (right) {
      if (left || !top && !bottom) {
        snackbar({
          message: "非法坐标",
          placement: "top"
        });
        return false;
      }
    }
    if (bottom) {
      if (top || !left && !right) {
        snackbar({
          message: "非法坐标",
          placement: "top"
        });
        return false;
      }
    }
    return true;
  };
  const finish = async () => {
    const copyDepth = document.querySelector("#copyDepth").value;
    const action = document.querySelector("#action").value;
    const ruleName = document.querySelector("#ruleName").value;
    const ruleDesc = document.querySelector("#ruleDesc").value;
    const category = window.Hanashiro.currentCategory;
    const isLimit = document.querySelector("#limit").checked;
    const isNoExample = document.querySelector("#noExample").checked;
    const preKeys = document.querySelector("#preKeys").value;
    const position = constructPositionArray().length != 0 ? constructPositionArray() : false;
    const isSimplyActivityIds = await getHanashiroSettings("activityIdsSimply");
    const origin = lib.parse(window.Hanashiro.originRule);
    if (ruleName) origin.groups[0].name = ruleName;
    else origin.groups[0].name = "";
    if (ruleDesc) origin.groups[0].desc = ruleDesc;
    else delete origin.groups[0].desc;
    if (category) {
      if (!ruleName) origin.groups[0].name = category;
      else origin.groups[0].name = `${category}-${origin.groups[0].name}`;
      if (category == "开屏广告") {
        origin.groups[0].priorityTime = 1e4;
        const rule = iArrayToArray(
          origin.groups[0].rules
        )[0];
        delete rule.activityIds;
        origin.groups[0].rules = [rule];
      }
    }
    if (action) {
      const rule = iArrayToArray(origin.groups[0].rules)[0];
      rule.action = action;
      origin.groups[0].rules = [rule];
    }
    if (isLimit) {
      if (copyDepth == "rules") {
        const rule = iArrayToArray(
          origin.groups[0].rules
        )[0];
        rule.actionMaximum = 1;
        rule.resetMatch = "app";
        rule.matchTime = 1e4;
        origin.groups[0].rules = [rule];
      } else {
        origin.groups[0].actionMaximum = 1;
        origin.groups[0].resetMatch = "app";
        origin.groups[0].matchTime = 1e4;
      }
    }
    if (isNoExample) {
      const rule = iArrayToArray(origin.groups[0].rules)[0];
      delete rule.exampleUrls;
      origin.groups[0].rules = [rule];
    }
    if (preKeys) {
      const preKeysArray = preKeys.split(",");
      const preKeysNumberArray = [];
      preKeysArray.forEach((preKey) => {
        preKeysNumberArray.push(Number(preKey));
      });
      const rule = iArrayToArray(origin.groups[0].rules)[0];
      rule.preKeys = preKeysNumberArray;
      origin.groups[0].rules = [rule];
    }
    if (position) {
      const positionName = [
        "top",
        "left",
        "right",
        "bottom"
      ];
      const positionObject = {};
      position.forEach((position2, index) => {
        if (position2) {
          positionObject[positionName[index]] = position2;
        }
      });
      if (!checkPositionLegality(positionObject)) return;
      const rule = iArrayToArray(origin.groups[0].rules)[0];
      rule.position = positionObject;
      origin.groups[0].rules = [rule];
    }
    if (isSimplyActivityIds === true) {
      const snapshotId = getSnapshotId();
      const rule = iArrayToArray(origin.groups[0].rules)[0];
      const result = await simplyActivityIds(snapshotId);
      if (result && rule.activityIds) {
        rule.activityIds = result;
        origin.groups[0].rules = [rule];
      }
    }
    origin.groups[0] = await sort(origin.groups[0]);
    const stringify3 = lib.stringify(origin, null, 2);
    if (copyDepth == "ts") {
      const text = `import { defineGkdApp } from '@gkd-kit/define';\r\rexport default defineGkdApp(${stringify3});\r`;
      window.Hanashiro.returnResult = text;
    } else if (copyDepth == "app") window.Hanashiro.returnResult = stringify3;
    else if (copyDepth == "groups")
      window.Hanashiro.returnResult = lib.stringify(origin.groups[0], null, 2);
    else if (copyDepth == "rules")
      window.Hanashiro.returnResult = lib.stringify(
        iArrayToArray(origin.groups[0].rules)[0],
        null,
        2
      );
    send("closePage");
    send("modifyEnd");
  };
  const key = () => {
    const copyDepth = document.querySelector("#copyDepth").value;
    const key2 = document.querySelector("#key").value;
    const origin = lib.parse(window.Hanashiro.originRule);
    if (key2) {
      if (copyDepth == "rules") {
        const rule = iArrayToArray(
          origin.groups[0].rules
        )[0];
        rule.key = Number(key2);
        origin.groups[0].rules = [rule];
      } else origin.groups[0].key = Number(key2);
      window.Hanashiro.originRule = lib.stringify(origin, null, 2);
      snackbar({
        message: "key值修改成功!",
        placement: "top"
      });
    }
  };
  const renderedCategories = async () => {
    const categories = await getHanashiroSettings("categories");
    const categoriesGroup = document.querySelector("#category");
    if (categories) {
      let innerHtmlString = "";
      categories.forEach((category) => {
        innerHtmlString += `<mdui-radio value=${category.name}>${category.name}</mdui-radio>`;
      });
      categoriesGroup.innerHTML = innerHtmlString;
    }
  };
  const _sfc_main$9 = vue.defineComponent({
    methods: {
      async finish() {
        await finish();
      },
      key() {
        key();
      },
      onPositionChange(event) {
        onChange(event.target);
      },
      closeDialog() {
        send("closePage");
      }
    },
    data() {
      return {
        originRule: lib.parse(window.Hanashiro.originRule)
      };
    },
    async mounted() {
      window.Hanashiro.currentCategory = "";
      await renderedCategories();
      document.querySelector("#category").addEventListener("change", (e3) => {
        window.Hanashiro.currentCategory = e3.target.value;
      });
      document.querySelector("#page").open = true;
    }
  });
  const _export_sfc = (sfc, props) => {
    const target = sfc.__vccOpts || sfc;
    for (const [key2, val] of props) {
      target[key2] = val;
    }
    return target;
  };
  const _hoisted_1 = ["placeholder"];
  function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("mdui-dialog", {
      id: "page",
      headline: "配置",
      "close-on-overlay-click": "",
      "close-on-esc": "",
      onClosed: _cache[6] || (_cache[6] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
    }, [
      _cache[14] || (_cache[14] = vue.createStaticVNode('<div><span>选择复制深度:</span><mdui-radio-group id="copyDepth" value="app"><mdui-radio value="ts">ts层</mdui-radio><mdui-radio value="app">app层</mdui-radio><mdui-radio value="groups">groups层</mdui-radio><mdui-radio value="rules">rules层</mdui-radio></mdui-radio-group></div><div><span>选择分类:</span><mdui-radio-group id="category"></mdui-radio-group></div><div><span>插入action类型:</span><mdui-radio-group id="action"><mdui-radio value="clickCenter">clickCenter</mdui-radio><mdui-radio value="back">back</mdui-radio><mdui-radio value="longClick">longClick</mdui-radio></mdui-radio-group></div><div><span>插入限制字段:</span><mdui-switch id="limit"></mdui-switch><span class="introduction">插入matchTime、resetMatch和actionMaximum</span></div><div><span>去除exampleUrls:</span><mdui-switch id="noExample" checked></mdui-switch></div>', 5)),
      vue.createElementVNode("div", null, [
        _cache[7] || (_cache[7] = vue.createElementVNode("span", null, "修改key值为:", -1)),
        vue.createElementVNode("mdui-text-field", {
          id: "key",
          variant: "filled",
          type: "number",
          label: "key",
          placeholder: "填写一个数字",
          helper: "rules模式修改ruleKey,其余修改groupKey。请提前选好模式,失焦保存!",
          onChange: _cache[0] || (_cache[0] = (...args) => _ctx.key && _ctx.key(...args))
        }, null, 32)
      ]),
      _cache[15] || (_cache[15] = vue.createElementVNode("div", null, [
        vue.createElementVNode("span", null, "修改preKeys值为:"),
        vue.createElementVNode("mdui-text-field", {
          id: "preKeys",
          variant: "filled",
          label: "preKeys",
          placeholder: "填写多个以英文逗号分隔的数字",
          helper: "失焦保存"
        })
      ], -1)),
      vue.createElementVNode("div", null, [
        _cache[8] || (_cache[8] = vue.createElementVNode("span", null, "坐标:", -1)),
        _cache[9] || (_cache[9] = vue.createElementVNode("mdui-chip", { variant: "input" }, "左", -1)),
        vue.createElementVNode("mdui-text-field", {
          variant: "filled",
          class: "position",
          id: "left",
          onChange: _cache[1] || (_cache[1] = (...args) => _ctx.onPositionChange && _ctx.onPositionChange(...args))
        }, null, 32),
        _cache[10] || (_cache[10] = vue.createElementVNode("mdui-chip", { variant: "input" }, "右", -1)),
        vue.createElementVNode("mdui-text-field", {
          variant: "filled",
          class: "position",
          id: "right",
          onChange: _cache[2] || (_cache[2] = (...args) => _ctx.onPositionChange && _ctx.onPositionChange(...args))
        }, null, 32),
        _cache[11] || (_cache[11] = vue.createElementVNode("mdui-chip", { variant: "input" }, "上", -1)),
        vue.createElementVNode("mdui-text-field", {
          variant: "filled",
          class: "position",
          id: "top",
          onChange: _cache[3] || (_cache[3] = (...args) => _ctx.onPositionChange && _ctx.onPositionChange(...args))
        }, null, 32),
        _cache[12] || (_cache[12] = vue.createElementVNode("mdui-chip", { variant: "input" }, "下", -1)),
        vue.createElementVNode("mdui-text-field", {
          variant: "filled",
          class: "position",
          id: "bottom",
          onChange: _cache[4] || (_cache[4] = (...args) => _ctx.onPositionChange && _ctx.onPositionChange(...args))
        }, null, 32)
      ]),
      vue.createElementVNode("div", null, [
        _cache[13] || (_cache[13] = vue.createElementVNode("span", null, "规则组名称:", -1)),
        vue.createElementVNode("mdui-text-field", {
          id: "ruleName",
          variant: "filled",
          label: "名称",
          placeholder: _ctx.originRule.groups[0].name
        }, null, 8, _hoisted_1)
      ]),
      _cache[16] || (_cache[16] = vue.createElementVNode("div", null, [
        vue.createElementVNode("span", null, "规则组描述:"),
        vue.createElementVNode("mdui-text-field", {
          id: "ruleDesc",
          variant: "filled",
          label: "描述",
          placeholder: "没有描述不填"
        })
      ], -1)),
      vue.createElementVNode("div", null, [
        vue.createElementVNode("mdui-button", {
          slot: "action",
          variant: "tonal",
          onClick: _cache[5] || (_cache[5] = (...args) => _ctx.finish && _ctx.finish(...args))
        }, "确定")
      ])
    ], 32);
  }
  const Main = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8]]);
  var util;
  (function(util2) {
    util2.assertEqual = (val) => val;
    function assertIs(_arg) {
    }
    util2.assertIs = assertIs;
    function assertNever(_x) {
      throw new Error();
    }
    util2.assertNever = assertNever;
    util2.arrayToEnum = (items) => {
      const obj = {};
      for (const item of items) {
        obj[item] = item;
      }
      return obj;
    };
    util2.getValidEnumValues = (obj) => {
      const validKeys = util2.objectKeys(obj).filter((k2) => typeof obj[obj[k2]] !== "number");
      const filtered = {};
      for (const k2 of validKeys) {
        filtered[k2] = obj[k2];
      }
      return util2.objectValues(filtered);
    };
    util2.objectValues = (obj) => {
      return util2.objectKeys(obj).map(function(e3) {
        return obj[e3];
      });
    };
    util2.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object) => {
      const keys = [];
      for (const key2 in object) {
        if (Object.prototype.hasOwnProperty.call(object, key2)) {
          keys.push(key2);
        }
      }
      return keys;
    };
    util2.find = (arr, checker) => {
      for (const item of arr) {
        if (checker(item))
          return item;
      }
      return void 0;
    };
    util2.isInteger = typeof Number.isInteger === "function" ? (val) => Number.isInteger(val) : (val) => typeof val === "number" && isFinite(val) && Math.floor(val) === val;
    function joinValues(array, separator = " | ") {
      return array.map((val) => typeof val === "string" ? `'${val}'` : val).join(separator);
    }
    util2.joinValues = joinValues;
    util2.jsonStringifyReplacer = (_2, value) => {
      if (typeof value === "bigint") {
        return value.toString();
      }
      return value;
    };
  })(util || (util = {}));
  var objectUtil;
  (function(objectUtil2) {
    objectUtil2.mergeShapes = (first, second) => {
      return {
        ...first,
        ...second
        // second overwrites first
      };
    };
  })(objectUtil || (objectUtil = {}));
  const ZodParsedType = util.arrayToEnum([
    "string",
    "nan",
    "number",
    "integer",
    "float",
    "boolean",
    "date",
    "bigint",
    "symbol",
    "function",
    "undefined",
    "null",
    "array",
    "object",
    "unknown",
    "promise",
    "void",
    "never",
    "map",
    "set"
  ]);
  const getParsedType = (data2) => {
    const t2 = typeof data2;
    switch (t2) {
      case "undefined":
        return ZodParsedType.undefined;
      case "string":
        return ZodParsedType.string;
      case "number":
        return isNaN(data2) ? ZodParsedType.nan : ZodParsedType.number;
      case "boolean":
        return ZodParsedType.boolean;
      case "function":
        return ZodParsedType.function;
      case "bigint":
        return ZodParsedType.bigint;
      case "symbol":
        return ZodParsedType.symbol;
      case "object":
        if (Array.isArray(data2)) {
          return ZodParsedType.array;
        }
        if (data2 === null) {
          return ZodParsedType.null;
        }
        if (data2.then && typeof data2.then === "function" && data2.catch && typeof data2.catch === "function") {
          return ZodParsedType.promise;
        }
        if (typeof Map !== "undefined" && data2 instanceof Map) {
          return ZodParsedType.map;
        }
        if (typeof Set !== "undefined" && data2 instanceof Set) {
          return ZodParsedType.set;
        }
        if (typeof Date !== "undefined" && data2 instanceof Date) {
          return ZodParsedType.date;
        }
        return ZodParsedType.object;
      default:
        return ZodParsedType.unknown;
    }
  };
  const ZodIssueCode = util.arrayToEnum([
    "invalid_type",
    "invalid_literal",
    "custom",
    "invalid_union",
    "invalid_union_discriminator",
    "invalid_enum_value",
    "unrecognized_keys",
    "invalid_arguments",
    "invalid_return_type",
    "invalid_date",
    "invalid_string",
    "too_small",
    "too_big",
    "invalid_intersection_types",
    "not_multiple_of",
    "not_finite"
  ]);
  const quotelessJson = (obj) => {
    const json = JSON.stringify(obj, null, 2);
    return json.replace(/"([^"]+)":/g, "$1:");
  };
  class ZodError extends Error {
    get errors() {
      return this.issues;
    }
    constructor(issues) {
      super();
      this.issues = [];
      this.addIssue = (sub) => {
        this.issues = [...this.issues, sub];
      };
      this.addIssues = (subs = []) => {
        this.issues = [...this.issues, ...subs];
      };
      const actualProto = new.target.prototype;
      if (Object.setPrototypeOf) {
        Object.setPrototypeOf(this, actualProto);
      } else {
        this.__proto__ = actualProto;
      }
      this.name = "ZodError";
      this.issues = issues;
    }
    format(_mapper) {
      const mapper = _mapper || function(issue) {
        return issue.message;
      };
      const fieldErrors = { _errors: [] };
      const processError = (error) => {
        for (const issue of error.issues) {
          if (issue.code === "invalid_union") {
            issue.unionErrors.map(processError);
          } else if (issue.code === "invalid_return_type") {
            processError(issue.returnTypeError);
          } else if (issue.code === "invalid_arguments") {
            processError(issue.argumentsError);
          } else if (issue.path.length === 0) {
            fieldErrors._errors.push(mapper(issue));
          } else {
            let curr = fieldErrors;
            let i3 = 0;
            while (i3 < issue.path.length) {
              const el = issue.path[i3];
              const terminal = i3 === issue.path.length - 1;
              if (!terminal) {
                curr[el] = curr[el] || { _errors: [] };
              } else {
                curr[el] = curr[el] || { _errors: [] };
                curr[el]._errors.push(mapper(issue));
              }
              curr = curr[el];
              i3++;
            }
          }
        }
      };
      processError(this);
      return fieldErrors;
    }
    static assert(value) {
      if (!(value instanceof ZodError)) {
        throw new Error(`Not a ZodError: ${value}`);
      }
    }
    toString() {
      return this.message;
    }
    get message() {
      return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);
    }
    get isEmpty() {
      return this.issues.length === 0;
    }
    flatten(mapper = (issue) => issue.message) {
      const fieldErrors = {};
      const formErrors = [];
      for (const sub of this.issues) {
        if (sub.path.length > 0) {
          fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
          fieldErrors[sub.path[0]].push(mapper(sub));
        } else {
          formErrors.push(mapper(sub));
        }
      }
      return { formErrors, fieldErrors };
    }
    get formErrors() {
      return this.flatten();
    }
  }
  ZodError.create = (issues) => {
    const error = new ZodError(issues);
    return error;
  };
  const errorMap = (issue, _ctx) => {
    let message;
    switch (issue.code) {
      case ZodIssueCode.invalid_type:
        if (issue.received === ZodParsedType.undefined) {
          message = "Required";
        } else {
          message = `Expected ${issue.expected}, received ${issue.received}`;
        }
        break;
      case ZodIssueCode.invalid_literal:
        message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;
        break;
      case ZodIssueCode.unrecognized_keys:
        message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, ", ")}`;
        break;
      case ZodIssueCode.invalid_union:
        message = `Invalid input`;
        break;
      case ZodIssueCode.invalid_union_discriminator:
        message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;
        break;
      case ZodIssueCode.invalid_enum_value:
        message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;
        break;
      case ZodIssueCode.invalid_arguments:
        message = `Invalid function arguments`;
        break;
      case ZodIssueCode.invalid_return_type:
        message = `Invalid function return type`;
        break;
      case ZodIssueCode.invalid_date:
        message = `Invalid date`;
        break;
      case ZodIssueCode.invalid_string:
        if (typeof issue.validation === "object") {
          if ("includes" in issue.validation) {
            message = `Invalid input: must include "${issue.validation.includes}"`;
            if (typeof issue.validation.position === "number") {
              message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;
            }
          } else if ("startsWith" in issue.validation) {
            message = `Invalid input: must start with "${issue.validation.startsWith}"`;
          } else if ("endsWith" in issue.validation) {
            message = `Invalid input: must end with "${issue.validation.endsWith}"`;
          } else {
            util.assertNever(issue.validation);
          }
        } else if (issue.validation !== "regex") {
          message = `Invalid ${issue.validation}`;
        } else {
          message = "Invalid";
        }
        break;
      case ZodIssueCode.too_small:
        if (issue.type === "array")
          message = `Array must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;
        else if (issue.type === "string")
          message = `String must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;
        else if (issue.type === "number")
          message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
        else if (issue.type === "date")
          message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;
        else
          message = "Invalid input";
        break;
      case ZodIssueCode.too_big:
        if (issue.type === "array")
          message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;
        else if (issue.type === "string")
          message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;
        else if (issue.type === "number")
          message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
        else if (issue.type === "bigint")
          message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
        else if (issue.type === "date")
          message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;
        else
          message = "Invalid input";
        break;
      case ZodIssueCode.custom:
        message = `Invalid input`;
        break;
      case ZodIssueCode.invalid_intersection_types:
        message = `Intersection results could not be merged`;
        break;
      case ZodIssueCode.not_multiple_of:
        message = `Number must be a multiple of ${issue.multipleOf}`;
        break;
      case ZodIssueCode.not_finite:
        message = "Number must be finite";
        break;
      default:
        message = _ctx.defaultError;
        util.assertNever(issue);
    }
    return { message };
  };
  let overrideErrorMap = errorMap;
  function setErrorMap(map2) {
    overrideErrorMap = map2;
  }
  function getErrorMap() {
    return overrideErrorMap;
  }
  const makeIssue = (params) => {
    const { data: data2, path, errorMaps, issueData } = params;
    const fullPath = [...path, ...issueData.path || []];
    const fullIssue = {
      ...issueData,
      path: fullPath
    };
    if (issueData.message !== void 0) {
      return {
        ...issueData,
        path: fullPath,
        message: issueData.message
      };
    }
    let errorMessage = "";
    const maps = errorMaps.filter((m2) => !!m2).slice().reverse();
    for (const map2 of maps) {
      errorMessage = map2(fullIssue, { data: data2, defaultError: errorMessage }).message;
    }
    return {
      ...issueData,
      path: fullPath,
      message: errorMessage
    };
  };
  const EMPTY_PATH = [];
  function addIssueToContext(ctx, issueData) {
    const overrideMap = getErrorMap();
    const issue = makeIssue({
      issueData,
      data: ctx.data,
      path: ctx.path,
      errorMaps: [
        ctx.common.contextualErrorMap,
        // contextual error map is first priority
        ctx.schemaErrorMap,
        // then schema-bound map if available
        overrideMap,
        // then global override map
        overrideMap === errorMap ? void 0 : errorMap
        // then global default map
      ].filter((x2) => !!x2)
    });
    ctx.common.issues.push(issue);
  }
  class ParseStatus {
    constructor() {
      this.value = "valid";
    }
    dirty() {
      if (this.value === "valid")
        this.value = "dirty";
    }
    abort() {
      if (this.value !== "aborted")
        this.value = "aborted";
    }
    static mergeArray(status, results) {
      const arrayValue = [];
      for (const s2 of results) {
        if (s2.status === "aborted")
          return INVALID;
        if (s2.status === "dirty")
          status.dirty();
        arrayValue.push(s2.value);
      }
      return { status: status.value, value: arrayValue };
    }
    static async mergeObjectAsync(status, pairs) {
      const syncPairs = [];
      for (const pair of pairs) {
        const key2 = await pair.key;
        const value = await pair.value;
        syncPairs.push({
          key: key2,
          value
        });
      }
      return ParseStatus.mergeObjectSync(status, syncPairs);
    }
    static mergeObjectSync(status, pairs) {
      const finalObject = {};
      for (const pair of pairs) {
        const { key: key2, value } = pair;
        if (key2.status === "aborted")
          return INVALID;
        if (value.status === "aborted")
          return INVALID;
        if (key2.status === "dirty")
          status.dirty();
        if (value.status === "dirty")
          status.dirty();
        if (key2.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) {
          finalObject[key2.value] = value.value;
        }
      }
      return { status: status.value, value: finalObject };
    }
  }
  const INVALID = Object.freeze({
    status: "aborted"
  });
  const DIRTY = (value) => ({ status: "dirty", value });
  const OK = (value) => ({ status: "valid", value });
  const isAborted = (x2) => x2.status === "aborted";
  const isDirty = (x2) => x2.status === "dirty";
  const isValid = (x2) => x2.status === "valid";
  const isAsync = (x2) => typeof Promise !== "undefined" && x2 instanceof Promise;
  function __classPrivateFieldGet(receiver, state, kind, f2) {
    if (typeof state === "function" ? receiver !== state || true : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
    return state.get(receiver);
  }
  function __classPrivateFieldSet(receiver, state, value, kind, f2) {
    if (typeof state === "function" ? receiver !== state || true : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
    return state.set(receiver, value), value;
  }
  typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
    var e3 = new Error(message);
    return e3.name = "SuppressedError", e3.error = error, e3.suppressed = suppressed, e3;
  };
  var errorUtil;
  (function(errorUtil2) {
    errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
    errorUtil2.toString = (message) => typeof message === "string" ? message : message === null || message === void 0 ? void 0 : message.message;
  })(errorUtil || (errorUtil = {}));
  var _ZodEnum_cache, _ZodNativeEnum_cache;
  class ParseInputLazyPath {
    constructor(parent, value, path, key2) {
      this._cachedPath = [];
      this.parent = parent;
      this.data = value;
      this._path = path;
      this._key = key2;
    }
    get path() {
      if (!this._cachedPath.length) {
        if (this._key instanceof Array) {
          this._cachedPath.push(...this._path, ...this._key);
        } else {
          this._cachedPath.push(...this._path, this._key);
        }
      }
      return this._cachedPath;
    }
  }
  const handleResult = (ctx, result) => {
    if (isValid(result)) {
      return { success: true, data: result.value };
    } else {
      if (!ctx.common.issues.length) {
        throw new Error("Validation failed but no issues detected.");
      }
      return {
        success: false,
        get error() {
          if (this._error)
            return this._error;
          const error = new ZodError(ctx.common.issues);
          this._error = error;
          return this._error;
        }
      };
    }
  };
  function processCreateParams(params) {
    if (!params)
      return {};
    const { errorMap: errorMap2, invalid_type_error, required_error, description } = params;
    if (errorMap2 && (invalid_type_error || required_error)) {
      throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
    }
    if (errorMap2)
      return { errorMap: errorMap2, description };
    const customMap = (iss, ctx) => {
      var _a2, _b;
      const { message } = params;
      if (iss.code === "invalid_enum_value") {
        return { message: message !== null && message !== void 0 ? message : ctx.defaultError };
      }
      if (typeof ctx.data === "undefined") {
        return { message: (_a2 = message !== null && message !== void 0 ? message : required_error) !== null && _a2 !== void 0 ? _a2 : ctx.defaultError };
      }
      if (iss.code !== "invalid_type")
        return { message: ctx.defaultError };
      return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };
    };
    return { errorMap: customMap, description };
  }
  class ZodType {
    get description() {
      return this._def.description;
    }
    _getType(input) {
      return getParsedType(input.data);
    }
    _getOrReturnCtx(input, ctx) {
      return ctx || {
        common: input.parent.common,
        data: input.data,
        parsedType: getParsedType(input.data),
        schemaErrorMap: this._def.errorMap,
        path: input.path,
        parent: input.parent
      };
    }
    _processInputParams(input) {
      return {
        status: new ParseStatus(),
        ctx: {
          common: input.parent.common,
          data: input.data,
          parsedType: getParsedType(input.data),
          schemaErrorMap: this._def.errorMap,
          path: input.path,
          parent: input.parent
        }
      };
    }
    _parseSync(input) {
      const result = this._parse(input);
      if (isAsync(result)) {
        throw new Error("Synchronous parse encountered promise.");
      }
      return result;
    }
    _parseAsync(input) {
      const result = this._parse(input);
      return Promise.resolve(result);
    }
    parse(data2, params) {
      const result = this.safeParse(data2, params);
      if (result.success)
        return result.data;
      throw result.error;
    }
    safeParse(data2, params) {
      var _a2;
      const ctx = {
        common: {
          issues: [],
          async: (_a2 = params === null || params === void 0 ? void 0 : params.async) !== null && _a2 !== void 0 ? _a2 : false,
          contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap
        },
        path: (params === null || params === void 0 ? void 0 : params.path) || [],
        schemaErrorMap: this._def.errorMap,
        parent: null,
        data: data2,
        parsedType: getParsedType(data2)
      };
      const result = this._parseSync({ data: data2, path: ctx.path, parent: ctx });
      return handleResult(ctx, result);
    }
    "~validate"(data2) {
      var _a2, _b;
      const ctx = {
        common: {
          issues: [],
          async: !!this["~standard"].async
        },
        path: [],
        schemaErrorMap: this._def.errorMap,
        parent: null,
        data: data2,
        parsedType: getParsedType(data2)
      };
      if (!this["~standard"].async) {
        try {
          const result = this._parseSync({ data: data2, path: [], parent: ctx });
          return isValid(result) ? {
            value: result.value
          } : {
            issues: ctx.common.issues
          };
        } catch (err) {
          if ((_b = (_a2 = err === null || err === void 0 ? void 0 : err.message) === null || _a2 === void 0 ? void 0 : _a2.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes("encountered")) {
            this["~standard"].async = true;
          }
          ctx.common = {
            issues: [],
            async: true
          };
        }
      }
      return this._parseAsync({ data: data2, path: [], parent: ctx }).then((result) => isValid(result) ? {
        value: result.value
      } : {
        issues: ctx.common.issues
      });
    }
    async parseAsync(data2, params) {
      const result = await this.safeParseAsync(data2, params);
      if (result.success)
        return result.data;
      throw result.error;
    }
    async safeParseAsync(data2, params) {
      const ctx = {
        common: {
          issues: [],
          contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,
          async: true
        },
        path: (params === null || params === void 0 ? void 0 : params.path) || [],
        schemaErrorMap: this._def.errorMap,
        parent: null,
        data: data2,
        parsedType: getParsedType(data2)
      };
      const maybeAsyncResult = this._parse({ data: data2, path: ctx.path, parent: ctx });
      const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));
      return handleResult(ctx, result);
    }
    refine(check, message) {
      const getIssueProperties = (val) => {
        if (typeof message === "string" || typeof message === "undefined") {
          return { message };
        } else if (typeof message === "function") {
          return message(val);
        } else {
          return message;
        }
      };
      return this._refinement((val, ctx) => {
        const result = check(val);
        const setError = () => ctx.addIssue({
          code: ZodIssueCode.custom,
          ...getIssueProperties(val)
        });
        if (typeof Promise !== "undefined" && result instanceof Promise) {
          return result.then((data2) => {
            if (!data2) {
              setError();
              return false;
            } else {
              return true;
            }
          });
        }
        if (!result) {
          setError();
          return false;
        } else {
          return true;
        }
      });
    }
    refinement(check, refinementData) {
      return this._refinement((val, ctx) => {
        if (!check(val)) {
          ctx.addIssue(typeof refinementData === "function" ? refinementData(val, ctx) : refinementData);
          return false;
        } else {
          return true;
        }
      });
    }
    _refinement(refinement) {
      return new ZodEffects({
        schema: this,
        typeName: ZodFirstPartyTypeKind.ZodEffects,
        effect: { type: "refinement", refinement }
      });
    }
    superRefine(refinement) {
      return this._refinement(refinement);
    }
    constructor(def) {
      this.spa = this.safeParseAsync;
      this._def = def;
      this.parse = this.parse.bind(this);
      this.safeParse = this.safeParse.bind(this);
      this.parseAsync = this.parseAsync.bind(this);
      this.safeParseAsync = this.safeParseAsync.bind(this);
      this.spa = this.spa.bind(this);
      this.refine = this.refine.bind(this);
      this.refinement = this.refinement.bind(this);
      this.superRefine = this.superRefine.bind(this);
      this.optional = this.optional.bind(this);
      this.nullable = this.nullable.bind(this);
      this.nullish = this.nullish.bind(this);
      this.array = this.array.bind(this);
      this.promise = this.promise.bind(this);
      this.or = this.or.bind(this);
      this.and = this.and.bind(this);
      this.transform = this.transform.bind(this);
      this.brand = this.brand.bind(this);
      this.default = this.default.bind(this);
      this.catch = this.catch.bind(this);
      this.describe = this.describe.bind(this);
      this.pipe = this.pipe.bind(this);
      this.readonly = this.readonly.bind(this);
      this.isNullable = this.isNullable.bind(this);
      this.isOptional = this.isOptional.bind(this);
      this["~standard"] = {
        version: 1,
        vendor: "zod",
        validate: (data2) => this["~validate"](data2)
      };
    }
    optional() {
      return ZodOptional.create(this, this._def);
    }
    nullable() {
      return ZodNullable.create(this, this._def);
    }
    nullish() {
      return this.nullable().optional();
    }
    array() {
      return ZodArray.create(this);
    }
    promise() {
      return ZodPromise.create(this, this._def);
    }
    or(option) {
      return ZodUnion.create([this, option], this._def);
    }
    and(incoming) {
      return ZodIntersection.create(this, incoming, this._def);
    }
    transform(transform) {
      return new ZodEffects({
        ...processCreateParams(this._def),
        schema: this,
        typeName: ZodFirstPartyTypeKind.ZodEffects,
        effect: { type: "transform", transform }
      });
    }
    default(def) {
      const defaultValueFunc = typeof def === "function" ? def : () => def;
      return new ZodDefault({
        ...processCreateParams(this._def),
        innerType: this,
        defaultValue: defaultValueFunc,
        typeName: ZodFirstPartyTypeKind.ZodDefault
      });
    }
    brand() {
      return new ZodBranded({
        typeName: ZodFirstPartyTypeKind.ZodBranded,
        type: this,
        ...processCreateParams(this._def)
      });
    }
    catch(def) {
      const catchValueFunc = typeof def === "function" ? def : () => def;
      return new ZodCatch({
        ...processCreateParams(this._def),
        innerType: this,
        catchValue: catchValueFunc,
        typeName: ZodFirstPartyTypeKind.ZodCatch
      });
    }
    describe(description) {
      const This = this.constructor;
      return new This({
        ...this._def,
        description
      });
    }
    pipe(target) {
      return ZodPipeline.create(this, target);
    }
    readonly() {
      return ZodReadonly.create(this);
    }
    isOptional() {
      return this.safeParse(void 0).success;
    }
    isNullable() {
      return this.safeParse(null).success;
    }
  }
  const cuidRegex = /^c[^\s-]{8,}$/i;
  const cuid2Regex = /^[0-9a-z]+$/;
  const ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
  const uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
  const nanoidRegex = /^[a-z0-9_-]{21}$/i;
  const jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;
  const durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
  const emailRegex = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;
  const _emojiRegex = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
  let emojiRegex;
  const ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
  const ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/;
  const ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
  const ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
  const base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
  const base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;
  const dateRegexSource = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`;
  const dateRegex = new RegExp(`^${dateRegexSource}$`);
  function timeRegexSource(args) {
    let regex = `([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;
    if (args.precision) {
      regex = `${regex}\\.\\d{${args.precision}}`;
    } else if (args.precision == null) {
      regex = `${regex}(\\.\\d+)?`;
    }
    return regex;
  }
  function timeRegex(args) {
    return new RegExp(`^${timeRegexSource(args)}$`);
  }
  function datetimeRegex(args) {
    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;
    const opts = [];
    opts.push(args.local ? `Z?` : `Z`);
    if (args.offset)
      opts.push(`([+-]\\d{2}:?\\d{2})`);
    regex = `${regex}(${opts.join("|")})`;
    return new RegExp(`^${regex}$`);
  }
  function isValidIP(ip, version) {
    if ((version === "v4" || !version) && ipv4Regex.test(ip)) {
      return true;
    }
    if ((version === "v6" || !version) && ipv6Regex.test(ip)) {
      return true;
    }
    return false;
  }
  function isValidJWT(jwt, alg) {
    if (!jwtRegex.test(jwt))
      return false;
    try {
      const [header] = jwt.split(".");
      const base64 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "=");
      const decoded = JSON.parse(atob(base64));
      if (typeof decoded !== "object" || decoded === null)
        return false;
      if (!decoded.typ || !decoded.alg)
        return false;
      if (alg && decoded.alg !== alg)
        return false;
      return true;
    } catch (_a2) {
      return false;
    }
  }
  function isValidCidr(ip, version) {
    if ((version === "v4" || !version) && ipv4CidrRegex.test(ip)) {
      return true;
    }
    if ((version === "v6" || !version) && ipv6CidrRegex.test(ip)) {
      return true;
    }
    return false;
  }
  class ZodString extends ZodType {
    _parse(input) {
      if (this._def.coerce) {
        input.data = String(input.data);
      }
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.string) {
        const ctx2 = this._getOrReturnCtx(input);
        addIssueToContext(ctx2, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.string,
          received: ctx2.parsedType
        });
        return INVALID;
      }
      const status = new ParseStatus();
      let ctx = void 0;
      for (const check of this._def.checks) {
        if (check.kind === "min") {
          if (input.data.length < check.value) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_small,
              minimum: check.value,
              type: "string",
              inclusive: true,
              exact: false,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "max") {
          if (input.data.length > check.value) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_big,
              maximum: check.value,
              type: "string",
              inclusive: true,
              exact: false,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "length") {
          const tooBig = input.data.length > check.value;
          const tooSmall = input.data.length < check.value;
          if (tooBig || tooSmall) {
            ctx = this._getOrReturnCtx(input, ctx);
            if (tooBig) {
              addIssueToContext(ctx, {
                code: ZodIssueCode.too_big,
                maximum: check.value,
                type: "string",
                inclusive: true,
                exact: true,
                message: check.message
              });
            } else if (tooSmall) {
              addIssueToContext(ctx, {
                code: ZodIssueCode.too_small,
                minimum: check.value,
                type: "string",
                inclusive: true,
                exact: true,
                message: check.message
              });
            }
            status.dirty();
          }
        } else if (check.kind === "email") {
          if (!emailRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "email",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "emoji") {
          if (!emojiRegex) {
            emojiRegex = new RegExp(_emojiRegex, "u");
          }
          if (!emojiRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "emoji",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "uuid") {
          if (!uuidRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "uuid",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "nanoid") {
          if (!nanoidRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "nanoid",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "cuid") {
          if (!cuidRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "cuid",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "cuid2") {
          if (!cuid2Regex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "cuid2",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "ulid") {
          if (!ulidRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "ulid",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "url") {
          try {
            new URL(input.data);
          } catch (_a2) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "url",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "regex") {
          check.regex.lastIndex = 0;
          const testResult = check.regex.test(input.data);
          if (!testResult) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "regex",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "trim") {
          input.data = input.data.trim();
        } else if (check.kind === "includes") {
          if (!input.data.includes(check.value, check.position)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: { includes: check.value, position: check.position },
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "toLowerCase") {
          input.data = input.data.toLowerCase();
        } else if (check.kind === "toUpperCase") {
          input.data = input.data.toUpperCase();
        } else if (check.kind === "startsWith") {
          if (!input.data.startsWith(check.value)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: { startsWith: check.value },
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "endsWith") {
          if (!input.data.endsWith(check.value)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: { endsWith: check.value },
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "datetime") {
          const regex = datetimeRegex(check);
          if (!regex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: "datetime",
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "date") {
          const regex = dateRegex;
          if (!regex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: "date",
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "time") {
          const regex = timeRegex(check);
          if (!regex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_string,
              validation: "time",
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "duration") {
          if (!durationRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "duration",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "ip") {
          if (!isValidIP(input.data, check.version)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "ip",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "jwt") {
          if (!isValidJWT(input.data, check.alg)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "jwt",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "cidr") {
          if (!isValidCidr(input.data, check.version)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "cidr",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "base64") {
          if (!base64Regex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "base64",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "base64url") {
          if (!base64urlRegex.test(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              validation: "base64url",
              code: ZodIssueCode.invalid_string,
              message: check.message
            });
            status.dirty();
          }
        } else {
          util.assertNever(check);
        }
      }
      return { status: status.value, value: input.data };
    }
    _regex(regex, validation, message) {
      return this.refinement((data2) => regex.test(data2), {
        validation,
        code: ZodIssueCode.invalid_string,
        ...errorUtil.errToObj(message)
      });
    }
    _addCheck(check) {
      return new ZodString({
        ...this._def,
        checks: [...this._def.checks, check]
      });
    }
    email(message) {
      return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) });
    }
    url(message) {
      return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) });
    }
    emoji(message) {
      return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) });
    }
    uuid(message) {
      return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) });
    }
    nanoid(message) {
      return this._addCheck({ kind: "nanoid", ...errorUtil.errToObj(message) });
    }
    cuid(message) {
      return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) });
    }
    cuid2(message) {
      return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) });
    }
    ulid(message) {
      return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) });
    }
    base64(message) {
      return this._addCheck({ kind: "base64", ...errorUtil.errToObj(message) });
    }
    base64url(message) {
      return this._addCheck({
        kind: "base64url",
        ...errorUtil.errToObj(message)
      });
    }
    jwt(options) {
      return this._addCheck({ kind: "jwt", ...errorUtil.errToObj(options) });
    }
    ip(options) {
      return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) });
    }
    cidr(options) {
      return this._addCheck({ kind: "cidr", ...errorUtil.errToObj(options) });
    }
    datetime(options) {
      var _a2, _b;
      if (typeof options === "string") {
        return this._addCheck({
          kind: "datetime",
          precision: null,
          offset: false,
          local: false,
          message: options
        });
      }
      return this._addCheck({
        kind: "datetime",
        precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
        offset: (_a2 = options === null || options === void 0 ? void 0 : options.offset) !== null && _a2 !== void 0 ? _a2 : false,
        local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,
        ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
      });
    }
    date(message) {
      return this._addCheck({ kind: "date", message });
    }
    time(options) {
      if (typeof options === "string") {
        return this._addCheck({
          kind: "time",
          precision: null,
          message: options
        });
      }
      return this._addCheck({
        kind: "time",
        precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
        ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
      });
    }
    duration(message) {
      return this._addCheck({ kind: "duration", ...errorUtil.errToObj(message) });
    }
    regex(regex, message) {
      return this._addCheck({
        kind: "regex",
        regex,
        ...errorUtil.errToObj(message)
      });
    }
    includes(value, options) {
      return this._addCheck({
        kind: "includes",
        value,
        position: options === null || options === void 0 ? void 0 : options.position,
        ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
      });
    }
    startsWith(value, message) {
      return this._addCheck({
        kind: "startsWith",
        value,
        ...errorUtil.errToObj(message)
      });
    }
    endsWith(value, message) {
      return this._addCheck({
        kind: "endsWith",
        value,
        ...errorUtil.errToObj(message)
      });
    }
    min(minLength, message) {
      return this._addCheck({
        kind: "min",
        value: minLength,
        ...errorUtil.errToObj(message)
      });
    }
    max(maxLength, message) {
      return this._addCheck({
        kind: "max",
        value: maxLength,
        ...errorUtil.errToObj(message)
      });
    }
    length(len, message) {
      return this._addCheck({
        kind: "length",
        value: len,
        ...errorUtil.errToObj(message)
      });
    }
    /**
     * Equivalent to `.min(1)`
     */
    nonempty(message) {
      return this.min(1, errorUtil.errToObj(message));
    }
    trim() {
      return new ZodString({
        ...this._def,
        checks: [...this._def.checks, { kind: "trim" }]
      });
    }
    toLowerCase() {
      return new ZodString({
        ...this._def,
        checks: [...this._def.checks, { kind: "toLowerCase" }]
      });
    }
    toUpperCase() {
      return new ZodString({
        ...this._def,
        checks: [...this._def.checks, { kind: "toUpperCase" }]
      });
    }
    get isDatetime() {
      return !!this._def.checks.find((ch) => ch.kind === "datetime");
    }
    get isDate() {
      return !!this._def.checks.find((ch) => ch.kind === "date");
    }
    get isTime() {
      return !!this._def.checks.find((ch) => ch.kind === "time");
    }
    get isDuration() {
      return !!this._def.checks.find((ch) => ch.kind === "duration");
    }
    get isEmail() {
      return !!this._def.checks.find((ch) => ch.kind === "email");
    }
    get isURL() {
      return !!this._def.checks.find((ch) => ch.kind === "url");
    }
    get isEmoji() {
      return !!this._def.checks.find((ch) => ch.kind === "emoji");
    }
    get isUUID() {
      return !!this._def.checks.find((ch) => ch.kind === "uuid");
    }
    get isNANOID() {
      return !!this._def.checks.find((ch) => ch.kind === "nanoid");
    }
    get isCUID() {
      return !!this._def.checks.find((ch) => ch.kind === "cuid");
    }
    get isCUID2() {
      return !!this._def.checks.find((ch) => ch.kind === "cuid2");
    }
    get isULID() {
      return !!this._def.checks.find((ch) => ch.kind === "ulid");
    }
    get isIP() {
      return !!this._def.checks.find((ch) => ch.kind === "ip");
    }
    get isCIDR() {
      return !!this._def.checks.find((ch) => ch.kind === "cidr");
    }
    get isBase64() {
      return !!this._def.checks.find((ch) => ch.kind === "base64");
    }
    get isBase64url() {
      return !!this._def.checks.find((ch) => ch.kind === "base64url");
    }
    get minLength() {
      let min = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "min") {
          if (min === null || ch.value > min)
            min = ch.value;
        }
      }
      return min;
    }
    get maxLength() {
      let max = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "max") {
          if (max === null || ch.value < max)
            max = ch.value;
        }
      }
      return max;
    }
  }
  ZodString.create = (params) => {
    var _a2;
    return new ZodString({
      checks: [],
      typeName: ZodFirstPartyTypeKind.ZodString,
      coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
      ...processCreateParams(params)
    });
  };
  function floatSafeRemainder(val, step) {
    const valDecCount = (val.toString().split(".")[1] || "").length;
    const stepDecCount = (step.toString().split(".")[1] || "").length;
    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
    const valInt = parseInt(val.toFixed(decCount).replace(".", ""));
    const stepInt = parseInt(step.toFixed(decCount).replace(".", ""));
    return valInt % stepInt / Math.pow(10, decCount);
  }
  class ZodNumber extends ZodType {
    constructor() {
      super(...arguments);
      this.min = this.gte;
      this.max = this.lte;
      this.step = this.multipleOf;
    }
    _parse(input) {
      if (this._def.coerce) {
        input.data = Number(input.data);
      }
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.number) {
        const ctx2 = this._getOrReturnCtx(input);
        addIssueToContext(ctx2, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.number,
          received: ctx2.parsedType
        });
        return INVALID;
      }
      let ctx = void 0;
      const status = new ParseStatus();
      for (const check of this._def.checks) {
        if (check.kind === "int") {
          if (!util.isInteger(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.invalid_type,
              expected: "integer",
              received: "float",
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "min") {
          const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
          if (tooSmall) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_small,
              minimum: check.value,
              type: "number",
              inclusive: check.inclusive,
              exact: false,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "max") {
          const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
          if (tooBig) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_big,
              maximum: check.value,
              type: "number",
              inclusive: check.inclusive,
              exact: false,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "multipleOf") {
          if (floatSafeRemainder(input.data, check.value) !== 0) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.not_multiple_of,
              multipleOf: check.value,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "finite") {
          if (!Number.isFinite(input.data)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.not_finite,
              message: check.message
            });
            status.dirty();
          }
        } else {
          util.assertNever(check);
        }
      }
      return { status: status.value, value: input.data };
    }
    gte(value, message) {
      return this.setLimit("min", value, true, errorUtil.toString(message));
    }
    gt(value, message) {
      return this.setLimit("min", value, false, errorUtil.toString(message));
    }
    lte(value, message) {
      return this.setLimit("max", value, true, errorUtil.toString(message));
    }
    lt(value, message) {
      return this.setLimit("max", value, false, errorUtil.toString(message));
    }
    setLimit(kind, value, inclusive, message) {
      return new ZodNumber({
        ...this._def,
        checks: [
          ...this._def.checks,
          {
            kind,
            value,
            inclusive,
            message: errorUtil.toString(message)
          }
        ]
      });
    }
    _addCheck(check) {
      return new ZodNumber({
        ...this._def,
        checks: [...this._def.checks, check]
      });
    }
    int(message) {
      return this._addCheck({
        kind: "int",
        message: errorUtil.toString(message)
      });
    }
    positive(message) {
      return this._addCheck({
        kind: "min",
        value: 0,
        inclusive: false,
        message: errorUtil.toString(message)
      });
    }
    negative(message) {
      return this._addCheck({
        kind: "max",
        value: 0,
        inclusive: false,
        message: errorUtil.toString(message)
      });
    }
    nonpositive(message) {
      return this._addCheck({
        kind: "max",
        value: 0,
        inclusive: true,
        message: errorUtil.toString(message)
      });
    }
    nonnegative(message) {
      return this._addCheck({
        kind: "min",
        value: 0,
        inclusive: true,
        message: errorUtil.toString(message)
      });
    }
    multipleOf(value, message) {
      return this._addCheck({
        kind: "multipleOf",
        value,
        message: errorUtil.toString(message)
      });
    }
    finite(message) {
      return this._addCheck({
        kind: "finite",
        message: errorUtil.toString(message)
      });
    }
    safe(message) {
      return this._addCheck({
        kind: "min",
        inclusive: true,
        value: Number.MIN_SAFE_INTEGER,
        message: errorUtil.toString(message)
      })._addCheck({
        kind: "max",
        inclusive: true,
        value: Number.MAX_SAFE_INTEGER,
        message: errorUtil.toString(message)
      });
    }
    get minValue() {
      let min = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "min") {
          if (min === null || ch.value > min)
            min = ch.value;
        }
      }
      return min;
    }
    get maxValue() {
      let max = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "max") {
          if (max === null || ch.value < max)
            max = ch.value;
        }
      }
      return max;
    }
    get isInt() {
      return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util.isInteger(ch.value));
    }
    get isFinite() {
      let max = null, min = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
          return true;
        } else if (ch.kind === "min") {
          if (min === null || ch.value > min)
            min = ch.value;
        } else if (ch.kind === "max") {
          if (max === null || ch.value < max)
            max = ch.value;
        }
      }
      return Number.isFinite(min) && Number.isFinite(max);
    }
  }
  ZodNumber.create = (params) => {
    return new ZodNumber({
      checks: [],
      typeName: ZodFirstPartyTypeKind.ZodNumber,
      coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
      ...processCreateParams(params)
    });
  };
  class ZodBigInt extends ZodType {
    constructor() {
      super(...arguments);
      this.min = this.gte;
      this.max = this.lte;
    }
    _parse(input) {
      if (this._def.coerce) {
        try {
          input.data = BigInt(input.data);
        } catch (_a2) {
          return this._getInvalidInput(input);
        }
      }
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.bigint) {
        return this._getInvalidInput(input);
      }
      let ctx = void 0;
      const status = new ParseStatus();
      for (const check of this._def.checks) {
        if (check.kind === "min") {
          const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
          if (tooSmall) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_small,
              type: "bigint",
              minimum: check.value,
              inclusive: check.inclusive,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "max") {
          const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
          if (tooBig) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_big,
              type: "bigint",
              maximum: check.value,
              inclusive: check.inclusive,
              message: check.message
            });
            status.dirty();
          }
        } else if (check.kind === "multipleOf") {
          if (input.data % check.value !== BigInt(0)) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.not_multiple_of,
              multipleOf: check.value,
              message: check.message
            });
            status.dirty();
          }
        } else {
          util.assertNever(check);
        }
      }
      return { status: status.value, value: input.data };
    }
    _getInvalidInput(input) {
      const ctx = this._getOrReturnCtx(input);
      addIssueToContext(ctx, {
        code: ZodIssueCode.invalid_type,
        expected: ZodParsedType.bigint,
        received: ctx.parsedType
      });
      return INVALID;
    }
    gte(value, message) {
      return this.setLimit("min", value, true, errorUtil.toString(message));
    }
    gt(value, message) {
      return this.setLimit("min", value, false, errorUtil.toString(message));
    }
    lte(value, message) {
      return this.setLimit("max", value, true, errorUtil.toString(message));
    }
    lt(value, message) {
      return this.setLimit("max", value, false, errorUtil.toString(message));
    }
    setLimit(kind, value, inclusive, message) {
      return new ZodBigInt({
        ...this._def,
        checks: [
          ...this._def.checks,
          {
            kind,
            value,
            inclusive,
            message: errorUtil.toString(message)
          }
        ]
      });
    }
    _addCheck(check) {
      return new ZodBigInt({
        ...this._def,
        checks: [...this._def.checks, check]
      });
    }
    positive(message) {
      return this._addCheck({
        kind: "min",
        value: BigInt(0),
        inclusive: false,
        message: errorUtil.toString(message)
      });
    }
    negative(message) {
      return this._addCheck({
        kind: "max",
        value: BigInt(0),
        inclusive: false,
        message: errorUtil.toString(message)
      });
    }
    nonpositive(message) {
      return this._addCheck({
        kind: "max",
        value: BigInt(0),
        inclusive: true,
        message: errorUtil.toString(message)
      });
    }
    nonnegative(message) {
      return this._addCheck({
        kind: "min",
        value: BigInt(0),
        inclusive: true,
        message: errorUtil.toString(message)
      });
    }
    multipleOf(value, message) {
      return this._addCheck({
        kind: "multipleOf",
        value,
        message: errorUtil.toString(message)
      });
    }
    get minValue() {
      let min = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "min") {
          if (min === null || ch.value > min)
            min = ch.value;
        }
      }
      return min;
    }
    get maxValue() {
      let max = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "max") {
          if (max === null || ch.value < max)
            max = ch.value;
        }
      }
      return max;
    }
  }
  ZodBigInt.create = (params) => {
    var _a2;
    return new ZodBigInt({
      checks: [],
      typeName: ZodFirstPartyTypeKind.ZodBigInt,
      coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
      ...processCreateParams(params)
    });
  };
  class ZodBoolean extends ZodType {
    _parse(input) {
      if (this._def.coerce) {
        input.data = Boolean(input.data);
      }
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.boolean) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.boolean,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return OK(input.data);
    }
  }
  ZodBoolean.create = (params) => {
    return new ZodBoolean({
      typeName: ZodFirstPartyTypeKind.ZodBoolean,
      coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
      ...processCreateParams(params)
    });
  };
  class ZodDate extends ZodType {
    _parse(input) {
      if (this._def.coerce) {
        input.data = new Date(input.data);
      }
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.date) {
        const ctx2 = this._getOrReturnCtx(input);
        addIssueToContext(ctx2, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.date,
          received: ctx2.parsedType
        });
        return INVALID;
      }
      if (isNaN(input.data.getTime())) {
        const ctx2 = this._getOrReturnCtx(input);
        addIssueToContext(ctx2, {
          code: ZodIssueCode.invalid_date
        });
        return INVALID;
      }
      const status = new ParseStatus();
      let ctx = void 0;
      for (const check of this._def.checks) {
        if (check.kind === "min") {
          if (input.data.getTime() < check.value) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_small,
              message: check.message,
              inclusive: true,
              exact: false,
              minimum: check.value,
              type: "date"
            });
            status.dirty();
          }
        } else if (check.kind === "max") {
          if (input.data.getTime() > check.value) {
            ctx = this._getOrReturnCtx(input, ctx);
            addIssueToContext(ctx, {
              code: ZodIssueCode.too_big,
              message: check.message,
              inclusive: true,
              exact: false,
              maximum: check.value,
              type: "date"
            });
            status.dirty();
          }
        } else {
          util.assertNever(check);
        }
      }
      return {
        status: status.value,
        value: new Date(input.data.getTime())
      };
    }
    _addCheck(check) {
      return new ZodDate({
        ...this._def,
        checks: [...this._def.checks, check]
      });
    }
    min(minDate, message) {
      return this._addCheck({
        kind: "min",
        value: minDate.getTime(),
        message: errorUtil.toString(message)
      });
    }
    max(maxDate, message) {
      return this._addCheck({
        kind: "max",
        value: maxDate.getTime(),
        message: errorUtil.toString(message)
      });
    }
    get minDate() {
      let min = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "min") {
          if (min === null || ch.value > min)
            min = ch.value;
        }
      }
      return min != null ? new Date(min) : null;
    }
    get maxDate() {
      let max = null;
      for (const ch of this._def.checks) {
        if (ch.kind === "max") {
          if (max === null || ch.value < max)
            max = ch.value;
        }
      }
      return max != null ? new Date(max) : null;
    }
  }
  ZodDate.create = (params) => {
    return new ZodDate({
      checks: [],
      coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
      typeName: ZodFirstPartyTypeKind.ZodDate,
      ...processCreateParams(params)
    });
  };
  class ZodSymbol extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.symbol) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.symbol,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return OK(input.data);
    }
  }
  ZodSymbol.create = (params) => {
    return new ZodSymbol({
      typeName: ZodFirstPartyTypeKind.ZodSymbol,
      ...processCreateParams(params)
    });
  };
  class ZodUndefined extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.undefined) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.undefined,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return OK(input.data);
    }
  }
  ZodUndefined.create = (params) => {
    return new ZodUndefined({
      typeName: ZodFirstPartyTypeKind.ZodUndefined,
      ...processCreateParams(params)
    });
  };
  class ZodNull extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.null) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.null,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return OK(input.data);
    }
  }
  ZodNull.create = (params) => {
    return new ZodNull({
      typeName: ZodFirstPartyTypeKind.ZodNull,
      ...processCreateParams(params)
    });
  };
  class ZodAny extends ZodType {
    constructor() {
      super(...arguments);
      this._any = true;
    }
    _parse(input) {
      return OK(input.data);
    }
  }
  ZodAny.create = (params) => {
    return new ZodAny({
      typeName: ZodFirstPartyTypeKind.ZodAny,
      ...processCreateParams(params)
    });
  };
  class ZodUnknown extends ZodType {
    constructor() {
      super(...arguments);
      this._unknown = true;
    }
    _parse(input) {
      return OK(input.data);
    }
  }
  ZodUnknown.create = (params) => {
    return new ZodUnknown({
      typeName: ZodFirstPartyTypeKind.ZodUnknown,
      ...processCreateParams(params)
    });
  };
  class ZodNever extends ZodType {
    _parse(input) {
      const ctx = this._getOrReturnCtx(input);
      addIssueToContext(ctx, {
        code: ZodIssueCode.invalid_type,
        expected: ZodParsedType.never,
        received: ctx.parsedType
      });
      return INVALID;
    }
  }
  ZodNever.create = (params) => {
    return new ZodNever({
      typeName: ZodFirstPartyTypeKind.ZodNever,
      ...processCreateParams(params)
    });
  };
  class ZodVoid extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.undefined) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.void,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return OK(input.data);
    }
  }
  ZodVoid.create = (params) => {
    return new ZodVoid({
      typeName: ZodFirstPartyTypeKind.ZodVoid,
      ...processCreateParams(params)
    });
  };
  class ZodArray extends ZodType {
    _parse(input) {
      const { ctx, status } = this._processInputParams(input);
      const def = this._def;
      if (ctx.parsedType !== ZodParsedType.array) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.array,
          received: ctx.parsedType
        });
        return INVALID;
      }
      if (def.exactLength !== null) {
        const tooBig = ctx.data.length > def.exactLength.value;
        const tooSmall = ctx.data.length < def.exactLength.value;
        if (tooBig || tooSmall) {
          addIssueToContext(ctx, {
            code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,
            minimum: tooSmall ? def.exactLength.value : void 0,
            maximum: tooBig ? def.exactLength.value : void 0,
            type: "array",
            inclusive: true,
            exact: true,
            message: def.exactLength.message
          });
          status.dirty();
        }
      }
      if (def.minLength !== null) {
        if (ctx.data.length < def.minLength.value) {
          addIssueToContext(ctx, {
            code: ZodIssueCode.too_small,
            minimum: def.minLength.value,
            type: "array",
            inclusive: true,
            exact: false,
            message: def.minLength.message
          });
          status.dirty();
        }
      }
      if (def.maxLength !== null) {
        if (ctx.data.length > def.maxLength.value) {
          addIssueToContext(ctx, {
            code: ZodIssueCode.too_big,
            maximum: def.maxLength.value,
            type: "array",
            inclusive: true,
            exact: false,
            message: def.maxLength.message
          });
          status.dirty();
        }
      }
      if (ctx.common.async) {
        return Promise.all([...ctx.data].map((item, i3) => {
          return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i3));
        })).then((result2) => {
          return ParseStatus.mergeArray(status, result2);
        });
      }
      const result = [...ctx.data].map((item, i3) => {
        return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i3));
      });
      return ParseStatus.mergeArray(status, result);
    }
    get element() {
      return this._def.type;
    }
    min(minLength, message) {
      return new ZodArray({
        ...this._def,
        minLength: { value: minLength, message: errorUtil.toString(message) }
      });
    }
    max(maxLength, message) {
      return new ZodArray({
        ...this._def,
        maxLength: { value: maxLength, message: errorUtil.toString(message) }
      });
    }
    length(len, message) {
      return new ZodArray({
        ...this._def,
        exactLength: { value: len, message: errorUtil.toString(message) }
      });
    }
    nonempty(message) {
      return this.min(1, message);
    }
  }
  ZodArray.create = (schema, params) => {
    return new ZodArray({
      type: schema,
      minLength: null,
      maxLength: null,
      exactLength: null,
      typeName: ZodFirstPartyTypeKind.ZodArray,
      ...processCreateParams(params)
    });
  };
  function deepPartialify(schema) {
    if (schema instanceof ZodObject) {
      const newShape = {};
      for (const key2 in schema.shape) {
        const fieldSchema = schema.shape[key2];
        newShape[key2] = ZodOptional.create(deepPartialify(fieldSchema));
      }
      return new ZodObject({
        ...schema._def,
        shape: () => newShape
      });
    } else if (schema instanceof ZodArray) {
      return new ZodArray({
        ...schema._def,
        type: deepPartialify(schema.element)
      });
    } else if (schema instanceof ZodOptional) {
      return ZodOptional.create(deepPartialify(schema.unwrap()));
    } else if (schema instanceof ZodNullable) {
      return ZodNullable.create(deepPartialify(schema.unwrap()));
    } else if (schema instanceof ZodTuple) {
      return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));
    } else {
      return schema;
    }
  }
  class ZodObject extends ZodType {
    constructor() {
      super(...arguments);
      this._cached = null;
      this.nonstrict = this.passthrough;
      this.augment = this.extend;
    }
    _getCached() {
      if (this._cached !== null)
        return this._cached;
      const shape = this._def.shape();
      const keys = util.objectKeys(shape);
      return this._cached = { shape, keys };
    }
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.object) {
        const ctx2 = this._getOrReturnCtx(input);
        addIssueToContext(ctx2, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.object,
          received: ctx2.parsedType
        });
        return INVALID;
      }
      const { status, ctx } = this._processInputParams(input);
      const { shape, keys: shapeKeys } = this._getCached();
      const extraKeys = [];
      if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === "strip")) {
        for (const key2 in ctx.data) {
          if (!shapeKeys.includes(key2)) {
            extraKeys.push(key2);
          }
        }
      }
      const pairs = [];
      for (const key2 of shapeKeys) {
        const keyValidator = shape[key2];
        const value = ctx.data[key2];
        pairs.push({
          key: { status: "valid", value: key2 },
          value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key2)),
          alwaysSet: key2 in ctx.data
        });
      }
      if (this._def.catchall instanceof ZodNever) {
        const unknownKeys = this._def.unknownKeys;
        if (unknownKeys === "passthrough") {
          for (const key2 of extraKeys) {
            pairs.push({
              key: { status: "valid", value: key2 },
              value: { status: "valid", value: ctx.data[key2] }
            });
          }
        } else if (unknownKeys === "strict") {
          if (extraKeys.length > 0) {
            addIssueToContext(ctx, {
              code: ZodIssueCode.unrecognized_keys,
              keys: extraKeys
            });
            status.dirty();
          }
        } else if (unknownKeys === "strip") ;
        else {
          throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
        }
      } else {
        const catchall = this._def.catchall;
        for (const key2 of extraKeys) {
          const value = ctx.data[key2];
          pairs.push({
            key: { status: "valid", value: key2 },
            value: catchall._parse(
              new ParseInputLazyPath(ctx, value, ctx.path, key2)
              //, ctx.child(key), value, getParsedType(value)
            ),
            alwaysSet: key2 in ctx.data
          });
        }
      }
      if (ctx.common.async) {
        return Promise.resolve().then(async () => {
          const syncPairs = [];
          for (const pair of pairs) {
            const key2 = await pair.key;
            const value = await pair.value;
            syncPairs.push({
              key: key2,
              value,
              alwaysSet: pair.alwaysSet
            });
          }
          return syncPairs;
        }).then((syncPairs) => {
          return ParseStatus.mergeObjectSync(status, syncPairs);
        });
      } else {
        return ParseStatus.mergeObjectSync(status, pairs);
      }
    }
    get shape() {
      return this._def.shape();
    }
    strict(message) {
      errorUtil.errToObj;
      return new ZodObject({
        ...this._def,
        unknownKeys: "strict",
        ...message !== void 0 ? {
          errorMap: (issue, ctx) => {
            var _a2, _b, _c, _d;
            const defaultError = (_c = (_b = (_a2 = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a2, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;
            if (issue.code === "unrecognized_keys")
              return {
                message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError
              };
            return {
              message: defaultError
            };
          }
        } : {}
      });
    }
    strip() {
      return new ZodObject({
        ...this._def,
        unknownKeys: "strip"
      });
    }
    passthrough() {
      return new ZodObject({
        ...this._def,
        unknownKeys: "passthrough"
      });
    }
    // const AugmentFactory =
    //   <Def extends ZodObjectDef>(def: Def) =>
    //   <Augmentation extends ZodRawShape>(
    //     augmentation: Augmentation
    //   ): ZodObject<
    //     extendShape<ReturnType<Def["shape"]>, Augmentation>,
    //     Def["unknownKeys"],
    //     Def["catchall"]
    //   > => {
    //     return new ZodObject({
    //       ...def,
    //       shape: () => ({
    //         ...def.shape(),
    //         ...augmentation,
    //       }),
    //     }) as any;
    //   };
    extend(augmentation) {
      return new ZodObject({
        ...this._def,
        shape: () => ({
          ...this._def.shape(),
          ...augmentation
        })
      });
    }
    /**
     * Prior to [email protected] there was a bug in the
     * inferred type of merged objects. Please
     * upgrade if you are experiencing issues.
     */
    merge(merging) {
      const merged = new ZodObject({
        unknownKeys: merging._def.unknownKeys,
        catchall: merging._def.catchall,
        shape: () => ({
          ...this._def.shape(),
          ...merging._def.shape()
        }),
        typeName: ZodFirstPartyTypeKind.ZodObject
      });
      return merged;
    }
    // merge<
    //   Incoming extends AnyZodObject,
    //   Augmentation extends Incoming["shape"],
    //   NewOutput extends {
    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation
    //       ? Augmentation[k]["_output"]
    //       : k extends keyof Output
    //       ? Output[k]
    //       : never;
    //   },
    //   NewInput extends {
    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation
    //       ? Augmentation[k]["_input"]
    //       : k extends keyof Input
    //       ? Input[k]
    //       : never;
    //   }
    // >(
    //   merging: Incoming
    // ): ZodObject<
    //   extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
    //   Incoming["_def"]["unknownKeys"],
    //   Incoming["_def"]["catchall"],
    //   NewOutput,
    //   NewInput
    // > {
    //   const merged: any = new ZodObject({
    //     unknownKeys: merging._def.unknownKeys,
    //     catchall: merging._def.catchall,
    //     shape: () =>
    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
    //     typeName: ZodFirstPartyTypeKind.ZodObject,
    //   }) as any;
    //   return merged;
    // }
    setKey(key2, schema) {
      return this.augment({ [key2]: schema });
    }
    // merge<Incoming extends AnyZodObject>(
    //   merging: Incoming
    // ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => {
    // ZodObject<
    //   extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
    //   Incoming["_def"]["unknownKeys"],
    //   Incoming["_def"]["catchall"]
    // > {
    //   // const mergedShape = objectUtil.mergeShapes(
    //   //   this._def.shape(),
    //   //   merging._def.shape()
    //   // );
    //   const merged: any = new ZodObject({
    //     unknownKeys: merging._def.unknownKeys,
    //     catchall: merging._def.catchall,
    //     shape: () =>
    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
    //     typeName: ZodFirstPartyTypeKind.ZodObject,
    //   }) as any;
    //   return merged;
    // }
    catchall(index) {
      return new ZodObject({
        ...this._def,
        catchall: index
      });
    }
    pick(mask) {
      const shape = {};
      util.objectKeys(mask).forEach((key2) => {
        if (mask[key2] && this.shape[key2]) {
          shape[key2] = this.shape[key2];
        }
      });
      return new ZodObject({
        ...this._def,
        shape: () => shape
      });
    }
    omit(mask) {
      const shape = {};
      util.objectKeys(this.shape).forEach((key2) => {
        if (!mask[key2]) {
          shape[key2] = this.shape[key2];
        }
      });
      return new ZodObject({
        ...this._def,
        shape: () => shape
      });
    }
    /**
     * @deprecated
     */
    deepPartial() {
      return deepPartialify(this);
    }
    partial(mask) {
      const newShape = {};
      util.objectKeys(this.shape).forEach((key2) => {
        const fieldSchema = this.shape[key2];
        if (mask && !mask[key2]) {
          newShape[key2] = fieldSchema;
        } else {
          newShape[key2] = fieldSchema.optional();
        }
      });
      return new ZodObject({
        ...this._def,
        shape: () => newShape
      });
    }
    required(mask) {
      const newShape = {};
      util.objectKeys(this.shape).forEach((key2) => {
        if (mask && !mask[key2]) {
          newShape[key2] = this.shape[key2];
        } else {
          const fieldSchema = this.shape[key2];
          let newField = fieldSchema;
          while (newField instanceof ZodOptional) {
            newField = newField._def.innerType;
          }
          newShape[key2] = newField;
        }
      });
      return new ZodObject({
        ...this._def,
        shape: () => newShape
      });
    }
    keyof() {
      return createZodEnum(util.objectKeys(this.shape));
    }
  }
  ZodObject.create = (shape, params) => {
    return new ZodObject({
      shape: () => shape,
      unknownKeys: "strip",
      catchall: ZodNever.create(),
      typeName: ZodFirstPartyTypeKind.ZodObject,
      ...processCreateParams(params)
    });
  };
  ZodObject.strictCreate = (shape, params) => {
    return new ZodObject({
      shape: () => shape,
      unknownKeys: "strict",
      catchall: ZodNever.create(),
      typeName: ZodFirstPartyTypeKind.ZodObject,
      ...processCreateParams(params)
    });
  };
  ZodObject.lazycreate = (shape, params) => {
    return new ZodObject({
      shape,
      unknownKeys: "strip",
      catchall: ZodNever.create(),
      typeName: ZodFirstPartyTypeKind.ZodObject,
      ...processCreateParams(params)
    });
  };
  class ZodUnion extends ZodType {
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      const options = this._def.options;
      function handleResults(results) {
        for (const result of results) {
          if (result.result.status === "valid") {
            return result.result;
          }
        }
        for (const result of results) {
          if (result.result.status === "dirty") {
            ctx.common.issues.push(...result.ctx.common.issues);
            return result.result;
          }
        }
        const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_union,
          unionErrors
        });
        return INVALID;
      }
      if (ctx.common.async) {
        return Promise.all(options.map(async (option) => {
          const childCtx = {
            ...ctx,
            common: {
              ...ctx.common,
              issues: []
            },
            parent: null
          };
          return {
            result: await option._parseAsync({
              data: ctx.data,
              path: ctx.path,
              parent: childCtx
            }),
            ctx: childCtx
          };
        })).then(handleResults);
      } else {
        let dirty = void 0;
        const issues = [];
        for (const option of options) {
          const childCtx = {
            ...ctx,
            common: {
              ...ctx.common,
              issues: []
            },
            parent: null
          };
          const result = option._parseSync({
            data: ctx.data,
            path: ctx.path,
            parent: childCtx
          });
          if (result.status === "valid") {
            return result;
          } else if (result.status === "dirty" && !dirty) {
            dirty = { result, ctx: childCtx };
          }
          if (childCtx.common.issues.length) {
            issues.push(childCtx.common.issues);
          }
        }
        if (dirty) {
          ctx.common.issues.push(...dirty.ctx.common.issues);
          return dirty.result;
        }
        const unionErrors = issues.map((issues2) => new ZodError(issues2));
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_union,
          unionErrors
        });
        return INVALID;
      }
    }
    get options() {
      return this._def.options;
    }
  }
  ZodUnion.create = (types, params) => {
    return new ZodUnion({
      options: types,
      typeName: ZodFirstPartyTypeKind.ZodUnion,
      ...processCreateParams(params)
    });
  };
  const getDiscriminator = (type) => {
    if (type instanceof ZodLazy) {
      return getDiscriminator(type.schema);
    } else if (type instanceof ZodEffects) {
      return getDiscriminator(type.innerType());
    } else if (type instanceof ZodLiteral) {
      return [type.value];
    } else if (type instanceof ZodEnum) {
      return type.options;
    } else if (type instanceof ZodNativeEnum) {
      return util.objectValues(type.enum);
    } else if (type instanceof ZodDefault) {
      return getDiscriminator(type._def.innerType);
    } else if (type instanceof ZodUndefined) {
      return [void 0];
    } else if (type instanceof ZodNull) {
      return [null];
    } else if (type instanceof ZodOptional) {
      return [void 0, ...getDiscriminator(type.unwrap())];
    } else if (type instanceof ZodNullable) {
      return [null, ...getDiscriminator(type.unwrap())];
    } else if (type instanceof ZodBranded) {
      return getDiscriminator(type.unwrap());
    } else if (type instanceof ZodReadonly) {
      return getDiscriminator(type.unwrap());
    } else if (type instanceof ZodCatch) {
      return getDiscriminator(type._def.innerType);
    } else {
      return [];
    }
  };
  class ZodDiscriminatedUnion extends ZodType {
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.object) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.object,
          received: ctx.parsedType
        });
        return INVALID;
      }
      const discriminator = this.discriminator;
      const discriminatorValue = ctx.data[discriminator];
      const option = this.optionsMap.get(discriminatorValue);
      if (!option) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_union_discriminator,
          options: Array.from(this.optionsMap.keys()),
          path: [discriminator]
        });
        return INVALID;
      }
      if (ctx.common.async) {
        return option._parseAsync({
          data: ctx.data,
          path: ctx.path,
          parent: ctx
        });
      } else {
        return option._parseSync({
          data: ctx.data,
          path: ctx.path,
          parent: ctx
        });
      }
    }
    get discriminator() {
      return this._def.discriminator;
    }
    get options() {
      return this._def.options;
    }
    get optionsMap() {
      return this._def.optionsMap;
    }
    /**
     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.
     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must
     * have a different value for each object in the union.
     * @param discriminator the name of the discriminator property
     * @param types an array of object schemas
     * @param params
     */
    static create(discriminator, options, params) {
      const optionsMap = /* @__PURE__ */ new Map();
      for (const type of options) {
        const discriminatorValues = getDiscriminator(type.shape[discriminator]);
        if (!discriminatorValues.length) {
          throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);
        }
        for (const value of discriminatorValues) {
          if (optionsMap.has(value)) {
            throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);
          }
          optionsMap.set(value, type);
        }
      }
      return new ZodDiscriminatedUnion({
        typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,
        discriminator,
        options,
        optionsMap,
        ...processCreateParams(params)
      });
    }
  }
  function mergeValues(a2, b2) {
    const aType = getParsedType(a2);
    const bType = getParsedType(b2);
    if (a2 === b2) {
      return { valid: true, data: a2 };
    } else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {
      const bKeys = util.objectKeys(b2);
      const sharedKeys = util.objectKeys(a2).filter((key2) => bKeys.indexOf(key2) !== -1);
      const newObj = { ...a2, ...b2 };
      for (const key2 of sharedKeys) {
        const sharedValue = mergeValues(a2[key2], b2[key2]);
        if (!sharedValue.valid) {
          return { valid: false };
        }
        newObj[key2] = sharedValue.data;
      }
      return { valid: true, data: newObj };
    } else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {
      if (a2.length !== b2.length) {
        return { valid: false };
      }
      const newArray = [];
      for (let index = 0; index < a2.length; index++) {
        const itemA = a2[index];
        const itemB = b2[index];
        const sharedValue = mergeValues(itemA, itemB);
        if (!sharedValue.valid) {
          return { valid: false };
        }
        newArray.push(sharedValue.data);
      }
      return { valid: true, data: newArray };
    } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a2 === +b2) {
      return { valid: true, data: a2 };
    } else {
      return { valid: false };
    }
  }
  class ZodIntersection extends ZodType {
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      const handleParsed = (parsedLeft, parsedRight) => {
        if (isAborted(parsedLeft) || isAborted(parsedRight)) {
          return INVALID;
        }
        const merged = mergeValues(parsedLeft.value, parsedRight.value);
        if (!merged.valid) {
          addIssueToContext(ctx, {
            code: ZodIssueCode.invalid_intersection_types
          });
          return INVALID;
        }
        if (isDirty(parsedLeft) || isDirty(parsedRight)) {
          status.dirty();
        }
        return { status: status.value, value: merged.data };
      };
      if (ctx.common.async) {
        return Promise.all([
          this._def.left._parseAsync({
            data: ctx.data,
            path: ctx.path,
            parent: ctx
          }),
          this._def.right._parseAsync({
            data: ctx.data,
            path: ctx.path,
            parent: ctx
          })
        ]).then(([left, right]) => handleParsed(left, right));
      } else {
        return handleParsed(this._def.left._parseSync({
          data: ctx.data,
          path: ctx.path,
          parent: ctx
        }), this._def.right._parseSync({
          data: ctx.data,
          path: ctx.path,
          parent: ctx
        }));
      }
    }
  }
  ZodIntersection.create = (left, right, params) => {
    return new ZodIntersection({
      left,
      right,
      typeName: ZodFirstPartyTypeKind.ZodIntersection,
      ...processCreateParams(params)
    });
  };
  class ZodTuple extends ZodType {
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.array) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.array,
          received: ctx.parsedType
        });
        return INVALID;
      }
      if (ctx.data.length < this._def.items.length) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.too_small,
          minimum: this._def.items.length,
          inclusive: true,
          exact: false,
          type: "array"
        });
        return INVALID;
      }
      const rest = this._def.rest;
      if (!rest && ctx.data.length > this._def.items.length) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.too_big,
          maximum: this._def.items.length,
          inclusive: true,
          exact: false,
          type: "array"
        });
        status.dirty();
      }
      const items = [...ctx.data].map((item, itemIndex) => {
        const schema = this._def.items[itemIndex] || this._def.rest;
        if (!schema)
          return null;
        return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));
      }).filter((x2) => !!x2);
      if (ctx.common.async) {
        return Promise.all(items).then((results) => {
          return ParseStatus.mergeArray(status, results);
        });
      } else {
        return ParseStatus.mergeArray(status, items);
      }
    }
    get items() {
      return this._def.items;
    }
    rest(rest) {
      return new ZodTuple({
        ...this._def,
        rest
      });
    }
  }
  ZodTuple.create = (schemas, params) => {
    if (!Array.isArray(schemas)) {
      throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
    }
    return new ZodTuple({
      items: schemas,
      typeName: ZodFirstPartyTypeKind.ZodTuple,
      rest: null,
      ...processCreateParams(params)
    });
  };
  class ZodRecord extends ZodType {
    get keySchema() {
      return this._def.keyType;
    }
    get valueSchema() {
      return this._def.valueType;
    }
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.object) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.object,
          received: ctx.parsedType
        });
        return INVALID;
      }
      const pairs = [];
      const keyType = this._def.keyType;
      const valueType = this._def.valueType;
      for (const key2 in ctx.data) {
        pairs.push({
          key: keyType._parse(new ParseInputLazyPath(ctx, key2, ctx.path, key2)),
          value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key2], ctx.path, key2)),
          alwaysSet: key2 in ctx.data
        });
      }
      if (ctx.common.async) {
        return ParseStatus.mergeObjectAsync(status, pairs);
      } else {
        return ParseStatus.mergeObjectSync(status, pairs);
      }
    }
    get element() {
      return this._def.valueType;
    }
    static create(first, second, third) {
      if (second instanceof ZodType) {
        return new ZodRecord({
          keyType: first,
          valueType: second,
          typeName: ZodFirstPartyTypeKind.ZodRecord,
          ...processCreateParams(third)
        });
      }
      return new ZodRecord({
        keyType: ZodString.create(),
        valueType: first,
        typeName: ZodFirstPartyTypeKind.ZodRecord,
        ...processCreateParams(second)
      });
    }
  }
  class ZodMap extends ZodType {
    get keySchema() {
      return this._def.keyType;
    }
    get valueSchema() {
      return this._def.valueType;
    }
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.map) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.map,
          received: ctx.parsedType
        });
        return INVALID;
      }
      const keyType = this._def.keyType;
      const valueType = this._def.valueType;
      const pairs = [...ctx.data.entries()].map(([key2, value], index) => {
        return {
          key: keyType._parse(new ParseInputLazyPath(ctx, key2, ctx.path, [index, "key"])),
          value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, "value"]))
        };
      });
      if (ctx.common.async) {
        const finalMap = /* @__PURE__ */ new Map();
        return Promise.resolve().then(async () => {
          for (const pair of pairs) {
            const key2 = await pair.key;
            const value = await pair.value;
            if (key2.status === "aborted" || value.status === "aborted") {
              return INVALID;
            }
            if (key2.status === "dirty" || value.status === "dirty") {
              status.dirty();
            }
            finalMap.set(key2.value, value.value);
          }
          return { status: status.value, value: finalMap };
        });
      } else {
        const finalMap = /* @__PURE__ */ new Map();
        for (const pair of pairs) {
          const key2 = pair.key;
          const value = pair.value;
          if (key2.status === "aborted" || value.status === "aborted") {
            return INVALID;
          }
          if (key2.status === "dirty" || value.status === "dirty") {
            status.dirty();
          }
          finalMap.set(key2.value, value.value);
        }
        return { status: status.value, value: finalMap };
      }
    }
  }
  ZodMap.create = (keyType, valueType, params) => {
    return new ZodMap({
      valueType,
      keyType,
      typeName: ZodFirstPartyTypeKind.ZodMap,
      ...processCreateParams(params)
    });
  };
  class ZodSet extends ZodType {
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.set) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.set,
          received: ctx.parsedType
        });
        return INVALID;
      }
      const def = this._def;
      if (def.minSize !== null) {
        if (ctx.data.size < def.minSize.value) {
          addIssueToContext(ctx, {
            code: ZodIssueCode.too_small,
            minimum: def.minSize.value,
            type: "set",
            inclusive: true,
            exact: false,
            message: def.minSize.message
          });
          status.dirty();
        }
      }
      if (def.maxSize !== null) {
        if (ctx.data.size > def.maxSize.value) {
          addIssueToContext(ctx, {
            code: ZodIssueCode.too_big,
            maximum: def.maxSize.value,
            type: "set",
            inclusive: true,
            exact: false,
            message: def.maxSize.message
          });
          status.dirty();
        }
      }
      const valueType = this._def.valueType;
      function finalizeSet(elements2) {
        const parsedSet = /* @__PURE__ */ new Set();
        for (const element of elements2) {
          if (element.status === "aborted")
            return INVALID;
          if (element.status === "dirty")
            status.dirty();
          parsedSet.add(element.value);
        }
        return { status: status.value, value: parsedSet };
      }
      const elements = [...ctx.data.values()].map((item, i3) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i3)));
      if (ctx.common.async) {
        return Promise.all(elements).then((elements2) => finalizeSet(elements2));
      } else {
        return finalizeSet(elements);
      }
    }
    min(minSize, message) {
      return new ZodSet({
        ...this._def,
        minSize: { value: minSize, message: errorUtil.toString(message) }
      });
    }
    max(maxSize, message) {
      return new ZodSet({
        ...this._def,
        maxSize: { value: maxSize, message: errorUtil.toString(message) }
      });
    }
    size(size, message) {
      return this.min(size, message).max(size, message);
    }
    nonempty(message) {
      return this.min(1, message);
    }
  }
  ZodSet.create = (valueType, params) => {
    return new ZodSet({
      valueType,
      minSize: null,
      maxSize: null,
      typeName: ZodFirstPartyTypeKind.ZodSet,
      ...processCreateParams(params)
    });
  };
  class ZodFunction extends ZodType {
    constructor() {
      super(...arguments);
      this.validate = this.implement;
    }
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.function) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.function,
          received: ctx.parsedType
        });
        return INVALID;
      }
      function makeArgsIssue(args, error) {
        return makeIssue({
          data: args,
          path: ctx.path,
          errorMaps: [
            ctx.common.contextualErrorMap,
            ctx.schemaErrorMap,
            getErrorMap(),
            errorMap
          ].filter((x2) => !!x2),
          issueData: {
            code: ZodIssueCode.invalid_arguments,
            argumentsError: error
          }
        });
      }
      function makeReturnsIssue(returns, error) {
        return makeIssue({
          data: returns,
          path: ctx.path,
          errorMaps: [
            ctx.common.contextualErrorMap,
            ctx.schemaErrorMap,
            getErrorMap(),
            errorMap
          ].filter((x2) => !!x2),
          issueData: {
            code: ZodIssueCode.invalid_return_type,
            returnTypeError: error
          }
        });
      }
      const params = { errorMap: ctx.common.contextualErrorMap };
      const fn = ctx.data;
      if (this._def.returns instanceof ZodPromise) {
        const me = this;
        return OK(async function(...args) {
          const error = new ZodError([]);
          const parsedArgs = await me._def.args.parseAsync(args, params).catch((e3) => {
            error.addIssue(makeArgsIssue(args, e3));
            throw error;
          });
          const result = await Reflect.apply(fn, this, parsedArgs);
          const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e3) => {
            error.addIssue(makeReturnsIssue(result, e3));
            throw error;
          });
          return parsedReturns;
        });
      } else {
        const me = this;
        return OK(function(...args) {
          const parsedArgs = me._def.args.safeParse(args, params);
          if (!parsedArgs.success) {
            throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);
          }
          const result = Reflect.apply(fn, this, parsedArgs.data);
          const parsedReturns = me._def.returns.safeParse(result, params);
          if (!parsedReturns.success) {
            throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);
          }
          return parsedReturns.data;
        });
      }
    }
    parameters() {
      return this._def.args;
    }
    returnType() {
      return this._def.returns;
    }
    args(...items) {
      return new ZodFunction({
        ...this._def,
        args: ZodTuple.create(items).rest(ZodUnknown.create())
      });
    }
    returns(returnType) {
      return new ZodFunction({
        ...this._def,
        returns: returnType
      });
    }
    implement(func) {
      const validatedFunc = this.parse(func);
      return validatedFunc;
    }
    strictImplement(func) {
      const validatedFunc = this.parse(func);
      return validatedFunc;
    }
    static create(args, returns, params) {
      return new ZodFunction({
        args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()),
        returns: returns || ZodUnknown.create(),
        typeName: ZodFirstPartyTypeKind.ZodFunction,
        ...processCreateParams(params)
      });
    }
  }
  class ZodLazy extends ZodType {
    get schema() {
      return this._def.getter();
    }
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      const lazySchema = this._def.getter();
      return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });
    }
  }
  ZodLazy.create = (getter, params) => {
    return new ZodLazy({
      getter,
      typeName: ZodFirstPartyTypeKind.ZodLazy,
      ...processCreateParams(params)
    });
  };
  class ZodLiteral extends ZodType {
    _parse(input) {
      if (input.data !== this._def.value) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          received: ctx.data,
          code: ZodIssueCode.invalid_literal,
          expected: this._def.value
        });
        return INVALID;
      }
      return { status: "valid", value: input.data };
    }
    get value() {
      return this._def.value;
    }
  }
  ZodLiteral.create = (value, params) => {
    return new ZodLiteral({
      value,
      typeName: ZodFirstPartyTypeKind.ZodLiteral,
      ...processCreateParams(params)
    });
  };
  function createZodEnum(values, params) {
    return new ZodEnum({
      values,
      typeName: ZodFirstPartyTypeKind.ZodEnum,
      ...processCreateParams(params)
    });
  }
  class ZodEnum extends ZodType {
    constructor() {
      super(...arguments);
      _ZodEnum_cache.set(this, void 0);
    }
    _parse(input) {
      if (typeof input.data !== "string") {
        const ctx = this._getOrReturnCtx(input);
        const expectedValues = this._def.values;
        addIssueToContext(ctx, {
          expected: util.joinValues(expectedValues),
          received: ctx.parsedType,
          code: ZodIssueCode.invalid_type
        });
        return INVALID;
      }
      if (!__classPrivateFieldGet(this, _ZodEnum_cache)) {
        __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values));
      }
      if (!__classPrivateFieldGet(this, _ZodEnum_cache).has(input.data)) {
        const ctx = this._getOrReturnCtx(input);
        const expectedValues = this._def.values;
        addIssueToContext(ctx, {
          received: ctx.data,
          code: ZodIssueCode.invalid_enum_value,
          options: expectedValues
        });
        return INVALID;
      }
      return OK(input.data);
    }
    get options() {
      return this._def.values;
    }
    get enum() {
      const enumValues = {};
      for (const val of this._def.values) {
        enumValues[val] = val;
      }
      return enumValues;
    }
    get Values() {
      const enumValues = {};
      for (const val of this._def.values) {
        enumValues[val] = val;
      }
      return enumValues;
    }
    get Enum() {
      const enumValues = {};
      for (const val of this._def.values) {
        enumValues[val] = val;
      }
      return enumValues;
    }
    extract(values, newDef = this._def) {
      return ZodEnum.create(values, {
        ...this._def,
        ...newDef
      });
    }
    exclude(values, newDef = this._def) {
      return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {
        ...this._def,
        ...newDef
      });
    }
  }
  _ZodEnum_cache = /* @__PURE__ */ new WeakMap();
  ZodEnum.create = createZodEnum;
  class ZodNativeEnum extends ZodType {
    constructor() {
      super(...arguments);
      _ZodNativeEnum_cache.set(this, void 0);
    }
    _parse(input) {
      const nativeEnumValues = util.getValidEnumValues(this._def.values);
      const ctx = this._getOrReturnCtx(input);
      if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {
        const expectedValues = util.objectValues(nativeEnumValues);
        addIssueToContext(ctx, {
          expected: util.joinValues(expectedValues),
          received: ctx.parsedType,
          code: ZodIssueCode.invalid_type
        });
        return INVALID;
      }
      if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache)) {
        __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)));
      }
      if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache).has(input.data)) {
        const expectedValues = util.objectValues(nativeEnumValues);
        addIssueToContext(ctx, {
          received: ctx.data,
          code: ZodIssueCode.invalid_enum_value,
          options: expectedValues
        });
        return INVALID;
      }
      return OK(input.data);
    }
    get enum() {
      return this._def.values;
    }
  }
  _ZodNativeEnum_cache = /* @__PURE__ */ new WeakMap();
  ZodNativeEnum.create = (values, params) => {
    return new ZodNativeEnum({
      values,
      typeName: ZodFirstPartyTypeKind.ZodNativeEnum,
      ...processCreateParams(params)
    });
  };
  class ZodPromise extends ZodType {
    unwrap() {
      return this._def.type;
    }
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.promise,
          received: ctx.parsedType
        });
        return INVALID;
      }
      const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);
      return OK(promisified.then((data2) => {
        return this._def.type.parseAsync(data2, {
          path: ctx.path,
          errorMap: ctx.common.contextualErrorMap
        });
      }));
    }
  }
  ZodPromise.create = (schema, params) => {
    return new ZodPromise({
      type: schema,
      typeName: ZodFirstPartyTypeKind.ZodPromise,
      ...processCreateParams(params)
    });
  };
  class ZodEffects extends ZodType {
    innerType() {
      return this._def.schema;
    }
    sourceType() {
      return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
    }
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      const effect = this._def.effect || null;
      const checkCtx = {
        addIssue: (arg) => {
          addIssueToContext(ctx, arg);
          if (arg.fatal) {
            status.abort();
          } else {
            status.dirty();
          }
        },
        get path() {
          return ctx.path;
        }
      };
      checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);
      if (effect.type === "preprocess") {
        const processed = effect.transform(ctx.data, checkCtx);
        if (ctx.common.async) {
          return Promise.resolve(processed).then(async (processed2) => {
            if (status.value === "aborted")
              return INVALID;
            const result = await this._def.schema._parseAsync({
              data: processed2,
              path: ctx.path,
              parent: ctx
            });
            if (result.status === "aborted")
              return INVALID;
            if (result.status === "dirty")
              return DIRTY(result.value);
            if (status.value === "dirty")
              return DIRTY(result.value);
            return result;
          });
        } else {
          if (status.value === "aborted")
            return INVALID;
          const result = this._def.schema._parseSync({
            data: processed,
            path: ctx.path,
            parent: ctx
          });
          if (result.status === "aborted")
            return INVALID;
          if (result.status === "dirty")
            return DIRTY(result.value);
          if (status.value === "dirty")
            return DIRTY(result.value);
          return result;
        }
      }
      if (effect.type === "refinement") {
        const executeRefinement = (acc) => {
          const result = effect.refinement(acc, checkCtx);
          if (ctx.common.async) {
            return Promise.resolve(result);
          }
          if (result instanceof Promise) {
            throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
          }
          return acc;
        };
        if (ctx.common.async === false) {
          const inner = this._def.schema._parseSync({
            data: ctx.data,
            path: ctx.path,
            parent: ctx
          });
          if (inner.status === "aborted")
            return INVALID;
          if (inner.status === "dirty")
            status.dirty();
          executeRefinement(inner.value);
          return { status: status.value, value: inner.value };
        } else {
          return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {
            if (inner.status === "aborted")
              return INVALID;
            if (inner.status === "dirty")
              status.dirty();
            return executeRefinement(inner.value).then(() => {
              return { status: status.value, value: inner.value };
            });
          });
        }
      }
      if (effect.type === "transform") {
        if (ctx.common.async === false) {
          const base = this._def.schema._parseSync({
            data: ctx.data,
            path: ctx.path,
            parent: ctx
          });
          if (!isValid(base))
            return base;
          const result = effect.transform(base.value, checkCtx);
          if (result instanceof Promise) {
            throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);
          }
          return { status: status.value, value: result };
        } else {
          return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {
            if (!isValid(base))
              return base;
            return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));
          });
        }
      }
      util.assertNever(effect);
    }
  }
  ZodEffects.create = (schema, effect, params) => {
    return new ZodEffects({
      schema,
      typeName: ZodFirstPartyTypeKind.ZodEffects,
      effect,
      ...processCreateParams(params)
    });
  };
  ZodEffects.createWithPreprocess = (preprocess, schema, params) => {
    return new ZodEffects({
      schema,
      effect: { type: "preprocess", transform: preprocess },
      typeName: ZodFirstPartyTypeKind.ZodEffects,
      ...processCreateParams(params)
    });
  };
  class ZodOptional extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType === ZodParsedType.undefined) {
        return OK(void 0);
      }
      return this._def.innerType._parse(input);
    }
    unwrap() {
      return this._def.innerType;
    }
  }
  ZodOptional.create = (type, params) => {
    return new ZodOptional({
      innerType: type,
      typeName: ZodFirstPartyTypeKind.ZodOptional,
      ...processCreateParams(params)
    });
  };
  class ZodNullable extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType === ZodParsedType.null) {
        return OK(null);
      }
      return this._def.innerType._parse(input);
    }
    unwrap() {
      return this._def.innerType;
    }
  }
  ZodNullable.create = (type, params) => {
    return new ZodNullable({
      innerType: type,
      typeName: ZodFirstPartyTypeKind.ZodNullable,
      ...processCreateParams(params)
    });
  };
  class ZodDefault extends ZodType {
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      let data2 = ctx.data;
      if (ctx.parsedType === ZodParsedType.undefined) {
        data2 = this._def.defaultValue();
      }
      return this._def.innerType._parse({
        data: data2,
        path: ctx.path,
        parent: ctx
      });
    }
    removeDefault() {
      return this._def.innerType;
    }
  }
  ZodDefault.create = (type, params) => {
    return new ZodDefault({
      innerType: type,
      typeName: ZodFirstPartyTypeKind.ZodDefault,
      defaultValue: typeof params.default === "function" ? params.default : () => params.default,
      ...processCreateParams(params)
    });
  };
  class ZodCatch extends ZodType {
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      const newCtx = {
        ...ctx,
        common: {
          ...ctx.common,
          issues: []
        }
      };
      const result = this._def.innerType._parse({
        data: newCtx.data,
        path: newCtx.path,
        parent: {
          ...newCtx
        }
      });
      if (isAsync(result)) {
        return result.then((result2) => {
          return {
            status: "valid",
            value: result2.status === "valid" ? result2.value : this._def.catchValue({
              get error() {
                return new ZodError(newCtx.common.issues);
              },
              input: newCtx.data
            })
          };
        });
      } else {
        return {
          status: "valid",
          value: result.status === "valid" ? result.value : this._def.catchValue({
            get error() {
              return new ZodError(newCtx.common.issues);
            },
            input: newCtx.data
          })
        };
      }
    }
    removeCatch() {
      return this._def.innerType;
    }
  }
  ZodCatch.create = (type, params) => {
    return new ZodCatch({
      innerType: type,
      typeName: ZodFirstPartyTypeKind.ZodCatch,
      catchValue: typeof params.catch === "function" ? params.catch : () => params.catch,
      ...processCreateParams(params)
    });
  };
  class ZodNaN extends ZodType {
    _parse(input) {
      const parsedType = this._getType(input);
      if (parsedType !== ZodParsedType.nan) {
        const ctx = this._getOrReturnCtx(input);
        addIssueToContext(ctx, {
          code: ZodIssueCode.invalid_type,
          expected: ZodParsedType.nan,
          received: ctx.parsedType
        });
        return INVALID;
      }
      return { status: "valid", value: input.data };
    }
  }
  ZodNaN.create = (params) => {
    return new ZodNaN({
      typeName: ZodFirstPartyTypeKind.ZodNaN,
      ...processCreateParams(params)
    });
  };
  const BRAND = Symbol("zod_brand");
  class ZodBranded extends ZodType {
    _parse(input) {
      const { ctx } = this._processInputParams(input);
      const data2 = ctx.data;
      return this._def.type._parse({
        data: data2,
        path: ctx.path,
        parent: ctx
      });
    }
    unwrap() {
      return this._def.type;
    }
  }
  class ZodPipeline extends ZodType {
    _parse(input) {
      const { status, ctx } = this._processInputParams(input);
      if (ctx.common.async) {
        const handleAsync = async () => {
          const inResult = await this._def.in._parseAsync({
            data: ctx.data,
            path: ctx.path,
            parent: ctx
          });
          if (inResult.status === "aborted")
            return INVALID;
          if (inResult.status === "dirty") {
            status.dirty();
            return DIRTY(inResult.value);
          } else {
            return this._def.out._parseAsync({
              data: inResult.value,
              path: ctx.path,
              parent: ctx
            });
          }
        };
        return handleAsync();
      } else {
        const inResult = this._def.in._parseSync({
          data: ctx.data,
          path: ctx.path,
          parent: ctx
        });
        if (inResult.status === "aborted")
          return INVALID;
        if (inResult.status === "dirty") {
          status.dirty();
          return {
            status: "dirty",
            value: inResult.value
          };
        } else {
          return this._def.out._parseSync({
            data: inResult.value,
            path: ctx.path,
            parent: ctx
          });
        }
      }
    }
    static create(a2, b2) {
      return new ZodPipeline({
        in: a2,
        out: b2,
        typeName: ZodFirstPartyTypeKind.ZodPipeline
      });
    }
  }
  class ZodReadonly extends ZodType {
    _parse(input) {
      const result = this._def.innerType._parse(input);
      const freeze = (data2) => {
        if (isValid(data2)) {
          data2.value = Object.freeze(data2.value);
        }
        return data2;
      };
      return isAsync(result) ? result.then((data2) => freeze(data2)) : freeze(result);
    }
    unwrap() {
      return this._def.innerType;
    }
  }
  ZodReadonly.create = (type, params) => {
    return new ZodReadonly({
      innerType: type,
      typeName: ZodFirstPartyTypeKind.ZodReadonly,
      ...processCreateParams(params)
    });
  };
  function cleanParams(params, data2) {
    const p2 = typeof params === "function" ? params(data2) : typeof params === "string" ? { message: params } : params;
    const p22 = typeof p2 === "string" ? { message: p2 } : p2;
    return p22;
  }
  function custom(check, _params = {}, fatal) {
    if (check)
      return ZodAny.create().superRefine((data2, ctx) => {
        var _a2, _b;
        const r3 = check(data2);
        if (r3 instanceof Promise) {
          return r3.then((r4) => {
            var _a3, _b2;
            if (!r4) {
              const params = cleanParams(_params, data2);
              const _fatal = (_b2 = (_a3 = params.fatal) !== null && _a3 !== void 0 ? _a3 : fatal) !== null && _b2 !== void 0 ? _b2 : true;
              ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
            }
          });
        }
        if (!r3) {
          const params = cleanParams(_params, data2);
          const _fatal = (_b = (_a2 = params.fatal) !== null && _a2 !== void 0 ? _a2 : fatal) !== null && _b !== void 0 ? _b : true;
          ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
        }
        return;
      });
    return ZodAny.create();
  }
  const late = {
    object: ZodObject.lazycreate
  };
  var ZodFirstPartyTypeKind;
  (function(ZodFirstPartyTypeKind2) {
    ZodFirstPartyTypeKind2["ZodString"] = "ZodString";
    ZodFirstPartyTypeKind2["ZodNumber"] = "ZodNumber";
    ZodFirstPartyTypeKind2["ZodNaN"] = "ZodNaN";
    ZodFirstPartyTypeKind2["ZodBigInt"] = "ZodBigInt";
    ZodFirstPartyTypeKind2["ZodBoolean"] = "ZodBoolean";
    ZodFirstPartyTypeKind2["ZodDate"] = "ZodDate";
    ZodFirstPartyTypeKind2["ZodSymbol"] = "ZodSymbol";
    ZodFirstPartyTypeKind2["ZodUndefined"] = "ZodUndefined";
    ZodFirstPartyTypeKind2["ZodNull"] = "ZodNull";
    ZodFirstPartyTypeKind2["ZodAny"] = "ZodAny";
    ZodFirstPartyTypeKind2["ZodUnknown"] = "ZodUnknown";
    ZodFirstPartyTypeKind2["ZodNever"] = "ZodNever";
    ZodFirstPartyTypeKind2["ZodVoid"] = "ZodVoid";
    ZodFirstPartyTypeKind2["ZodArray"] = "ZodArray";
    ZodFirstPartyTypeKind2["ZodObject"] = "ZodObject";
    ZodFirstPartyTypeKind2["ZodUnion"] = "ZodUnion";
    ZodFirstPartyTypeKind2["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
    ZodFirstPartyTypeKind2["ZodIntersection"] = "ZodIntersection";
    ZodFirstPartyTypeKind2["ZodTuple"] = "ZodTuple";
    ZodFirstPartyTypeKind2["ZodRecord"] = "ZodRecord";
    ZodFirstPartyTypeKind2["ZodMap"] = "ZodMap";
    ZodFirstPartyTypeKind2["ZodSet"] = "ZodSet";
    ZodFirstPartyTypeKind2["ZodFunction"] = "ZodFunction";
    ZodFirstPartyTypeKind2["ZodLazy"] = "ZodLazy";
    ZodFirstPartyTypeKind2["ZodLiteral"] = "ZodLiteral";
    ZodFirstPartyTypeKind2["ZodEnum"] = "ZodEnum";
    ZodFirstPartyTypeKind2["ZodEffects"] = "ZodEffects";
    ZodFirstPartyTypeKind2["ZodNativeEnum"] = "ZodNativeEnum";
    ZodFirstPartyTypeKind2["ZodOptional"] = "ZodOptional";
    ZodFirstPartyTypeKind2["ZodNullable"] = "ZodNullable";
    ZodFirstPartyTypeKind2["ZodDefault"] = "ZodDefault";
    ZodFirstPartyTypeKind2["ZodCatch"] = "ZodCatch";
    ZodFirstPartyTypeKind2["ZodPromise"] = "ZodPromise";
    ZodFirstPartyTypeKind2["ZodBranded"] = "ZodBranded";
    ZodFirstPartyTypeKind2["ZodPipeline"] = "ZodPipeline";
    ZodFirstPartyTypeKind2["ZodReadonly"] = "ZodReadonly";
  })(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
  const instanceOfType = (cls, params = {
    message: `Input not instance of ${cls.name}`
  }) => custom((data2) => data2 instanceof cls, params);
  const stringType = ZodString.create;
  const numberType = ZodNumber.create;
  const nanType = ZodNaN.create;
  const bigIntType = ZodBigInt.create;
  const booleanType = ZodBoolean.create;
  const dateType = ZodDate.create;
  const symbolType = ZodSymbol.create;
  const undefinedType = ZodUndefined.create;
  const nullType = ZodNull.create;
  const anyType = ZodAny.create;
  const unknownType = ZodUnknown.create;
  const neverType = ZodNever.create;
  const voidType = ZodVoid.create;
  const arrayType = ZodArray.create;
  const objectType = ZodObject.create;
  const strictObjectType = ZodObject.strictCreate;
  const unionType = ZodUnion.create;
  const discriminatedUnionType = ZodDiscriminatedUnion.create;
  const intersectionType = ZodIntersection.create;
  const tupleType = ZodTuple.create;
  const recordType = ZodRecord.create;
  const mapType = ZodMap.create;
  const setType = ZodSet.create;
  const functionType = ZodFunction.create;
  const lazyType = ZodLazy.create;
  const literalType = ZodLiteral.create;
  const enumType = ZodEnum.create;
  const nativeEnumType = ZodNativeEnum.create;
  const promiseType = ZodPromise.create;
  const effectsType = ZodEffects.create;
  const optionalType = ZodOptional.create;
  const nullableType = ZodNullable.create;
  const preprocessType = ZodEffects.createWithPreprocess;
  const pipelineType = ZodPipeline.create;
  const ostring = () => stringType().optional();
  const onumber = () => numberType().optional();
  const oboolean = () => booleanType().optional();
  const coerce = {
    string: (arg) => ZodString.create({ ...arg, coerce: true }),
    number: (arg) => ZodNumber.create({ ...arg, coerce: true }),
    boolean: (arg) => ZodBoolean.create({
      ...arg,
      coerce: true
    }),
    bigint: (arg) => ZodBigInt.create({ ...arg, coerce: true }),
    date: (arg) => ZodDate.create({ ...arg, coerce: true })
  };
  const NEVER = INVALID;
  var z2 = /* @__PURE__ */ Object.freeze({
    __proto__: null,
    defaultErrorMap: errorMap,
    setErrorMap,
    getErrorMap,
    makeIssue,
    EMPTY_PATH,
    addIssueToContext,
    ParseStatus,
    INVALID,
    DIRTY,
    OK,
    isAborted,
    isDirty,
    isValid,
    isAsync,
    get util() {
      return util;
    },
    get objectUtil() {
      return objectUtil;
    },
    ZodParsedType,
    getParsedType,
    ZodType,
    datetimeRegex,
    ZodString,
    ZodNumber,
    ZodBigInt,
    ZodBoolean,
    ZodDate,
    ZodSymbol,
    ZodUndefined,
    ZodNull,
    ZodAny,
    ZodUnknown,
    ZodNever,
    ZodVoid,
    ZodArray,
    ZodObject,
    ZodUnion,
    ZodDiscriminatedUnion,
    ZodIntersection,
    ZodTuple,
    ZodRecord,
    ZodMap,
    ZodSet,
    ZodFunction,
    ZodLazy,
    ZodLiteral,
    ZodEnum,
    ZodNativeEnum,
    ZodPromise,
    ZodEffects,
    ZodTransformer: ZodEffects,
    ZodOptional,
    ZodNullable,
    ZodDefault,
    ZodCatch,
    ZodNaN,
    BRAND,
    ZodBranded,
    ZodPipeline,
    ZodReadonly,
    custom,
    Schema: ZodType,
    ZodSchema: ZodType,
    late,
    get ZodFirstPartyTypeKind() {
      return ZodFirstPartyTypeKind;
    },
    coerce,
    any: anyType,
    array: arrayType,
    bigint: bigIntType,
    boolean: booleanType,
    date: dateType,
    discriminatedUnion: discriminatedUnionType,
    effect: effectsType,
    "enum": enumType,
    "function": functionType,
    "instanceof": instanceOfType,
    intersection: intersectionType,
    lazy: lazyType,
    literal: literalType,
    map: mapType,
    nan: nanType,
    nativeEnum: nativeEnumType,
    never: neverType,
    "null": nullType,
    nullable: nullableType,
    number: numberType,
    object: objectType,
    oboolean,
    onumber,
    optional: optionalType,
    ostring,
    pipeline: pipelineType,
    preprocess: preprocessType,
    promise: promiseType,
    record: recordType,
    set: setType,
    strictObject: strictObjectType,
    string: stringType,
    symbol: symbolType,
    transformer: effectsType,
    tuple: tupleType,
    "undefined": undefinedType,
    union: unionType,
    unknown: unknownType,
    "void": voidType,
    NEVER,
    ZodIssueCode,
    quotelessJson,
    ZodError
  });
  const IntegerZod = z2.number().int();
  const RawCategoryZod = z2.object({
    /**
     * 当前分类在列表中的唯一标识
     *
     * 也是客户端禁用/启用此分类组的依据
     */
    key: IntegerZod,
    /**
     * 分类名称
     *
     * 同时也是分类的依据, 捕获以 name 开头的所有应用规则组, 不捕获全局规则组
     *
     * 示例: `开屏广告` 将捕获 `开屏广告-1` `开屏广告-2` `开屏广告-233` 这类应用规则组
     */
    name: z2.string(),
    /**
     * null => 跟随捕获的规则组的 enable 的默认值
     *
     * true => 全部启用捕获的规则组
     *
     * false => 全部禁用捕获的规则组
     *
     * @default null
     */
    enable: z2.boolean().optional()
  });
  const settings = async () => {
    const categories = document.querySelector("#categories").value;
    const rulesKeySort2 = document.querySelector("#rulesKeySort").value;
    const maxShowSize = document.querySelector("#maxShowSize").value;
    const isHideLoadSnackbar = document.querySelector("#hideLoadSnackbar").checked;
    const isSimplyName = document.querySelector("#simplyName").checked;
    const isAutoAddSelector = document.querySelector("#autoAddSelector").checked;
    const isActivityIdsSimply = document.querySelector("#activityIdsSimply").checked;
    const inspectSettings = await getInspectSettings();
    let isCategoriesLegal = true;
    try {
      lib.parse(categories ? categories : "[]").forEach((category) => {
        RawCategoryZod.parse(category);
      });
    } catch {
      isCategoriesLegal = false;
      snackbar({
        message: "分类格式错误!分类设置已跳过!",
        placement: "top"
      });
    }
    if (isCategoriesLegal)
      await setHanashiroSettings(
        "categories",
        lib.parse(categories ? categories : "[]")
      );
    await setHanashiroSettings(
      "rulesKeySort",
      lib.parse(rulesKeySort2 ? rulesKeySort2 : "[]")
    );
    await setHanashiroSettings("hideLoadSnackbar", isHideLoadSnackbar);
    await setHanashiroSettings("simplyName", isSimplyName);
    await setHanashiroSettings("autoAddSelector", isAutoAddSelector);
    await setHanashiroSettings("activityIdsSimply", isActivityIdsSimply);
    inspectSettings.maxShowNodeSize = Number(maxShowSize);
    await setInspectSettings(inspectSettings);
    send("closePage");
  };
  const setValue$1 = async (settings2) => {
    try {
      let isCategoriesLegal = true;
      try {
        settings2.categories.forEach((category) => RawCategoryZod.parse(category));
      } catch {
        isCategoriesLegal = false;
        snackbar({
          message: "分类格式错误,已跳过分类设置!",
          placement: "top"
        });
      }
      await setHanashiroSettings("activityIdsSimply", settings2.activityIdsSimply);
      await setHanashiroSettings("autoAddSelector", settings2.autoAddSelector);
      if (isCategoriesLegal)
        await setHanashiroSettings("categories", settings2.categories);
      await setHanashiroSettings("hideLoadSnackbar", settings2.hideLoadSnackbar);
      await setHanashiroSettings("rulesKeySort", settings2.rulesKeySort);
      await setHanashiroSettings("simplyName", settings2.simplyName);
    } catch {
      snackbar({
        message: "应用设置失败",
        placement: "top"
      });
      return;
    }
  };
  const getRemoteSettings = async (url) => {
    let remoteSettings;
    try {
      remoteSettings = lib.parse(await (await fetch(url)).text());
    } catch {
      snackbar({
        message: "请求失败!",
        placement: "top"
      });
      return;
    }
    await setValue$1(remoteSettings);
    snackbar({
      message: "设置应用成功!重新打开页面即可看见更改",
      placement: "top"
    });
  };
  const showFilePicker$1 = () => document.querySelector("input#localImport").click();
  const getLocalSettings = async () => {
    const inputElement = document.querySelector(
      "input#localImport"
    );
    const fileList = inputElement.files;
    if (!fileList) return;
    const file = fileList[0];
    const localSettings = lib.parse(await file.text());
    await setValue$1(localSettings);
    snackbar({
      message: "设置应用成功!重新打开页面即可看见更改",
      placement: "top"
    });
  };
  const _import$1 = () => {
    dialog({
      headline: "选择导入渠道",
      description: "选择从本地导入或者远程导入",
      closeOnEsc: true,
      closeOnOverlayClick: true,
      actions: [
        {
          text: "本地导入",
          onClick: showFilePicker$1
        },
        {
          text: "远程导入",
          onClick: () => {
            prompt({
              headline: "远程设置文件链接",
              description: "请输入远程设置文件的链接以导入",
              closeOnEsc: true,
              closeOnOverlayClick: true,
              confirmText: "导入",
              cancelText: "取消",
              onConfirm: async (value) => {
                if (!value) {
                  snackbar({
                    message: "请输入链接!",
                    placement: "top"
                  });
                  return new Promise((_2, reject) => reject(false));
                } else await getRemoteSettings(value);
              }
            });
          }
        }
      ]
    });
  };
  const _export$1 = async () => {
    const activityIdsSimply = await getHanashiroSettings("activityIdsSimply");
    const autoAddSelector = await getHanashiroSettings("autoAddSelector");
    const categories = await getHanashiroSettings("categories");
    const hideLoadSnackbar = await getHanashiroSettings("hideLoadSnackbar");
    const rulesKeySort2 = await getHanashiroSettings("rulesKeySort");
    const simplyName = await getHanashiroSettings("simplyName");
    const settings2 = {
      activityIdsSimply: activityIdsSimply ? activityIdsSimply : false,
      autoAddSelector: autoAddSelector ? autoAddSelector : false,
      categories: categories ? categories : [],
      hideLoadSnackbar: hideLoadSnackbar ? hideLoadSnackbar : false,
      rulesKeySort: rulesKeySort2,
      simplyName: simplyName ? simplyName : false
    };
    const settingsFile = new Blob([lib.stringify(settings2, void 0, 2)]);
    FileSaver_minExports.saveAs(settingsFile, "settings.json5");
  };
  const _sfc_main$8 = vue.defineComponent({
    methods: {
      settings() {
        settings();
      },
      async exportSettings() {
        await _export$1();
      },
      importSettings() {
        _import$1();
      },
      async getLocalSettingsFile() {
        await getLocalSettings();
      },
      closeDialog() {
        send("closePage");
      }
    },
    async mounted() {
      if (await getHanashiroSettings("categories")) {
        document.querySelector("#categories").value = lib.stringify(await getHanashiroSettings("categories"));
      }
      if (await getHanashiroSettings("rulesKeySort")) {
        document.querySelector("#rulesKeySort").value = lib.stringify(await getHanashiroSettings("rulesKeySort"));
      }
      if (await getInspectSettings()) {
        document.querySelector("#maxShowSize").value = String((await getInspectSettings()).maxShowNodeSize);
      }
      if (await getHanashiroSettings("hideLoadSnackbar") == true) document.querySelector("#hideLoadSnackbar").checked = true;
      if (await getHanashiroSettings("simplyName") == true) document.querySelector("#simplyName").checked = true;
      if (await getHanashiroSettings("activityIdsSimply") == true) document.querySelector("#activityIdsSimply").checked = true;
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
      vue.createElementVNode("mdui-dialog", {
        id: "page",
        headline: "设置",
        "close-on-overlay-click": "",
        "close-on-esc": "",
        onClosed: _cache[3] || (_cache[3] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
      }, [
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            variant: "tonal",
            onClick: _cache[0] || (_cache[0] = (...args) => _ctx.exportSettings && _ctx.exportSettings(...args))
          }, "导出"),
          vue.createElementVNode("mdui-button", {
            variant: "tonal",
            onClick: _cache[1] || (_cache[1] = (...args) => _ctx.importSettings && _ctx.importSettings(...args))
          }, "导入")
        ]),
        _cache[5] || (_cache[5] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "分类设置:"),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "categories",
            label: "分类",
            placeholder: "填入合法的分类",
            rows: "10"
          })
        ], -1)),
        _cache[6] || (_cache[6] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "字段排序设置:"),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "rulesKeySort",
            label: "字段排序",
            placeholder: "目前仅支持rules内字段",
            rows: "10"
          }),
          vue.createElementVNode("span", { class: "introduction" }, " 接受一个字符串数组,目前支持的字段有: key,preKeys,fastQuery,matchTime,actionMaximum,resetMatch,priorityTime action,activityIds,position,matches,exampleUrls,snapshotUrls ")
        ], -1)),
        _cache[7] || (_cache[7] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "节点阈值:"),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "maxShowSize",
            type: "number",
            label: "节点阈值",
            placeholder: "填入数字"
          }),
          vue.createElementVNode("span", { class: "introduction" }, "最大节点展示数量,超出的节点将被丢弃")
        ], -1)),
        _cache[8] || (_cache[8] = vue.createStaticVNode('<div><span>隐藏加载成功提示:</span><mdui-switch id="hideLoadSnackbar"></mdui-switch><span class="introduction">每次脚本加载时会弹出一个snackbar,此选项可选择是否弹出</span></div><div><span>name属性复制优化:</span><mdui-switch id="simplyName"></mdui-switch><span class="introduction">在复制name属性时,会自动优化复制的内容。如复制 android.widget.TextView 时会优化为 TextView</span></div><div><span>选择器分享自动添加快捷搜索:</span><mdui-switch id="autoAddSelector"></mdui-switch><span class="introduction">在分享选择器时,自动添加到快捷搜索列表中</span></div><div><span>activityIds规则复制优化:</span><mdui-switch id="activityIdsSimply"></mdui-switch><span class="introduction">在复制规则代码时,若activityIds满足简写条件时,使用简写</span></div>', 4)),
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            slot: "action",
            variant: "tonal",
            onClick: _cache[2] || (_cache[2] = (...args) => _ctx.settings && _ctx.settings(...args))
          }, "确定")
        ])
      ], 32),
      vue.createElementVNode("input", {
        type: "file",
        id: "localImport",
        accept: ".json,.json5",
        onChange: _cache[4] || (_cache[4] = (...args) => _ctx.getLocalSettingsFile && _ctx.getLocalSettingsFile(...args))
      }, null, 32)
    ], 64);
  }
  const Settings = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7]]);
  const inspect = async () => {
    const currentInspectSettings = await getInspectSettings();
    const isUploadWarn = document.querySelector("#uploadWarn").checked;
    const isWasmWarn = document.querySelector("#wasmWarn").checked;
    const isAutoUploadImport = document.querySelector("#autoUploadImport").checked;
    currentInspectSettings.ignoreUploadWarn = !isUploadWarn;
    currentInspectSettings.ignoreWasmWarn = !isWasmWarn;
    currentInspectSettings.autoUploadImport = isAutoUploadImport;
    await setInspectSettings(currentInspectSettings);
    send("closePage");
  };
  const _sfc_main$7 = vue.defineComponent({
    methods: {
      async inspect() {
        await inspect();
      },
      closeDialog() {
        send("closePage");
      }
    },
    async mounted() {
      const currentInspectSettings = await getInspectSettings();
      if (currentInspectSettings.ignoreUploadWarn) document.querySelector("#uploadWarn").checked = false;
      if (currentInspectSettings.ignoreWasmWarn) document.querySelector("#wasmWarn").checked = false;
      if (currentInspectSettings.autoUploadImport) document.querySelector("#autoUploadImport").checked = true;
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("mdui-dialog", {
      id: "page",
      headline: "网页审查工具设置",
      "close-on-overlay-click": "",
      "close-on-esc": "",
      onClosed: _cache[1] || (_cache[1] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
    }, [
      _cache[2] || (_cache[2] = vue.createStaticVNode('<div><span>生成分享链接弹窗提醒:</span><mdui-switch id="uploadWarn" checked></mdui-switch><span class="introduction">默认开启。关闭则不会提醒</span></div><div><span>浏览器版本正则表达式WASM(GC)提醒:</span><mdui-switch id="wasmWarn" checked></mdui-switch><span class="introduction">默认开启。关闭则不会提醒</span></div><div><span>打开快照页面自动生成分享链接:</span><mdui-switch id="autoUploadImport"></mdui-switch><span class="introduction">请确保不含隐私!</span></div>', 3)),
      vue.createElementVNode("div", null, [
        vue.createElementVNode("mdui-button", {
          slot: "action",
          variant: "tonal",
          onClick: _cache[0] || (_cache[0] = (...args) => _ctx.inspect && _ctx.inspect(...args))
        }, "确定")
      ])
    ], 32);
  }
  const InspectSettings = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6]]);
  const _sfc_main$6 = vue.defineComponent({
    methods: {
      closeDialog() {
        send("closePage");
      }
    },
    mounted() {
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("mdui-dialog", {
      id: "page",
      headline: "帮助",
      "close-on-overlay-click": "",
      "close-on-esc": "",
      onClosed: _cache[0] || (_cache[0] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
    }, _cache[1] || (_cache[1] = [
      vue.createStaticVNode('<div><p> 本脚本已开源至Github,欢迎反馈:<a href="https://github.com/adproqwq/MikuMagicWand">Github仓库</a><br><br> 你可以通过以下方式联系我:<br> QQ群:494273126<br> 邮箱:[email protected]<br> Telegram群组:<a href="https://t.me/+P4y5kLo3UrUxMWY1">Telegram群组</a><br> Telegram频道:<a href="https://t.me/adproqwq">Telegram频道</a><br><br> 在这里推荐AIsouler的GKD订阅,特别好用,受到用户广泛好评!<a href="https://github.com/AIsouler/GKD_subscription">Github仓库</a></p></div>', 1)
    ]), 32);
  }
  const Help = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5]]);
  const generateSelectors$1 = async () => {
    const selectors = await getHanashiroSettings("selectors");
    const selectorsGroup = document.querySelector("#selectors");
    let innerHtmlString = "";
    selectors.forEach(({ name, base64 }, index) => {
      innerHtmlString += `<mdui-radio id="selector" value=${base64} data-index="${String(index)}">${name}</mdui-radio>`;
    });
    selectorsGroup.innerHTML = innerHtmlString;
    document.querySelectorAll("#selector").forEach((radio) => {
      radio.addEventListener("click", (e3) => {
        window.Hanashiro.currentUseSelectorIndex = Number(
          e3.target.getAttribute("data-index")
        );
      });
    });
  };
  const search = async () => {
    const selectors = await getHanashiroSettings("selectors");
    const target = new URL(window.location.href);
    target.searchParams.set(
      "gkd",
      selectors[window.Hanashiro.currentUseSelectorIndex].base64
    );
    window.location.href = target.toString();
  };
  const _sfc_main$5 = vue.defineComponent({
    methods: {
      async search() {
        await search();
      },
      closeDialog() {
        send("closePage");
      }
    },
    async mounted() {
      await generateSelectors$1();
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("mdui-dialog", {
      id: "page",
      headline: "使用选择器",
      "close-on-overlay-click": "",
      "close-on-esc": "",
      onClosed: _cache[1] || (_cache[1] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
    }, [
      _cache[2] || (_cache[2] = vue.createElementVNode("div", null, [
        vue.createElementVNode("span", null, "选择选择器:"),
        vue.createElementVNode("mdui-radio-group", { id: "selectors" })
      ], -1)),
      vue.createElementVNode("div", null, [
        vue.createElementVNode("mdui-button", {
          slot: "action",
          variant: "tonal",
          onClick: _cache[0] || (_cache[0] = (...args) => _ctx.search && _ctx.search(...args))
        }, "搜索")
      ])
    ], 32);
  }
  const UseSelector = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4]]);
  const _hasBuffer = typeof Buffer === "function";
  const _TD = typeof TextDecoder === "function" ? new TextDecoder() : void 0;
  const _TE = typeof TextEncoder === "function" ? new TextEncoder() : void 0;
  const b64ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  const b64chs = Array.prototype.slice.call(b64ch);
  const b64tab = ((a2) => {
    let tab = {};
    a2.forEach((c3, i3) => tab[c3] = i3);
    return tab;
  })(b64chs);
  const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
  const _fromCC = String.fromCharCode.bind(String);
  const _U8Afrom = typeof Uint8Array.from === "function" ? Uint8Array.from.bind(Uint8Array) : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));
  const _mkUriSafe = (src) => src.replace(/=/g, "").replace(/[+\/]/g, (m0) => m0 == "+" ? "-" : "_");
  const _tidyB64 = (s2) => s2.replace(/[^A-Za-z0-9\+\/]/g, "");
  const btoaPolyfill = (bin) => {
    let u32, c0, c1, c22, asc = "";
    const pad = bin.length % 3;
    for (let i3 = 0; i3 < bin.length; ) {
      if ((c0 = bin.charCodeAt(i3++)) > 255 || (c1 = bin.charCodeAt(i3++)) > 255 || (c22 = bin.charCodeAt(i3++)) > 255)
        throw new TypeError("invalid character found");
      u32 = c0 << 16 | c1 << 8 | c22;
      asc += b64chs[u32 >> 18 & 63] + b64chs[u32 >> 12 & 63] + b64chs[u32 >> 6 & 63] + b64chs[u32 & 63];
    }
    return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc;
  };
  const _btoa = typeof btoa === "function" ? (bin) => btoa(bin) : _hasBuffer ? (bin) => Buffer.from(bin, "binary").toString("base64") : btoaPolyfill;
  const _fromUint8Array = _hasBuffer ? (u8a) => Buffer.from(u8a).toString("base64") : (u8a) => {
    const maxargs = 4096;
    let strs = [];
    for (let i3 = 0, l2 = u8a.length; i3 < l2; i3 += maxargs) {
      strs.push(_fromCC.apply(null, u8a.subarray(i3, i3 + maxargs)));
    }
    return _btoa(strs.join(""));
  };
  const cb_utob = (c3) => {
    if (c3.length < 2) {
      var cc2 = c3.charCodeAt(0);
      return cc2 < 128 ? c3 : cc2 < 2048 ? _fromCC(192 | cc2 >>> 6) + _fromCC(128 | cc2 & 63) : _fromCC(224 | cc2 >>> 12 & 15) + _fromCC(128 | cc2 >>> 6 & 63) + _fromCC(128 | cc2 & 63);
    } else {
      var cc2 = 65536 + (c3.charCodeAt(0) - 55296) * 1024 + (c3.charCodeAt(1) - 56320);
      return _fromCC(240 | cc2 >>> 18 & 7) + _fromCC(128 | cc2 >>> 12 & 63) + _fromCC(128 | cc2 >>> 6 & 63) + _fromCC(128 | cc2 & 63);
    }
  };
  const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
  const utob = (u2) => u2.replace(re_utob, cb_utob);
  const _encode = _hasBuffer ? (s2) => Buffer.from(s2, "utf8").toString("base64") : _TE ? (s2) => _fromUint8Array(_TE.encode(s2)) : (s2) => _btoa(utob(s2));
  const encode = (src, urlsafe = false) => urlsafe ? _mkUriSafe(_encode(src)) : _encode(src);
  const encodeURI = (src) => encode(src, true);
  const re_btou = /[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g;
  const cb_btou = (cccc) => {
    switch (cccc.length) {
      case 4:
        var cp = (7 & cccc.charCodeAt(0)) << 18 | (63 & cccc.charCodeAt(1)) << 12 | (63 & cccc.charCodeAt(2)) << 6 | 63 & cccc.charCodeAt(3), offset = cp - 65536;
        return _fromCC((offset >>> 10) + 55296) + _fromCC((offset & 1023) + 56320);
      case 3:
        return _fromCC((15 & cccc.charCodeAt(0)) << 12 | (63 & cccc.charCodeAt(1)) << 6 | 63 & cccc.charCodeAt(2));
      default:
        return _fromCC((31 & cccc.charCodeAt(0)) << 6 | 63 & cccc.charCodeAt(1));
    }
  };
  const btou = (b2) => b2.replace(re_btou, cb_btou);
  const atobPolyfill = (asc) => {
    asc = asc.replace(/\s+/g, "");
    if (!b64re.test(asc))
      throw new TypeError("malformed base64.");
    asc += "==".slice(2 - (asc.length & 3));
    let u24, bin = "", r1, r22;
    for (let i3 = 0; i3 < asc.length; ) {
      u24 = b64tab[asc.charAt(i3++)] << 18 | b64tab[asc.charAt(i3++)] << 12 | (r1 = b64tab[asc.charAt(i3++)]) << 6 | (r22 = b64tab[asc.charAt(i3++)]);
      bin += r1 === 64 ? _fromCC(u24 >> 16 & 255) : r22 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255) : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);
    }
    return bin;
  };
  const _atob = typeof atob === "function" ? (asc) => atob(_tidyB64(asc)) : _hasBuffer ? (asc) => Buffer.from(asc, "base64").toString("binary") : atobPolyfill;
  const _toUint8Array = _hasBuffer ? (a2) => _U8Afrom(Buffer.from(a2, "base64")) : (a2) => _U8Afrom(_atob(a2).split("").map((c3) => c3.charCodeAt(0)));
  const _decode = _hasBuffer ? (a2) => Buffer.from(a2, "base64").toString("utf8") : _TD ? (a2) => _TD.decode(_toUint8Array(a2)) : (a2) => btou(_atob(a2));
  const _unURI = (a2) => _tidyB64(a2.replace(/[-_]/g, (m0) => m0 == "-" ? "+" : "/"));
  const decode = (src) => _decode(_unURI(src));
  const _sfc_main$4 = vue.defineComponent({
    mounted() {
      prompt({
        headline: "请输入选择器备注",
        description: "对该选择器的备注,方便辨认",
        confirmText: "就决定是你了!",
        cancelText: "算了",
        closeOnEsc: true,
        closeOnOverlayClick: true,
        onConfirm: (name) => {
          if (!name) {
            snackbar({
              message: "请不要留空哦~",
              placement: "top"
            });
            return false;
          } else {
            prompt({
              headline: "请输入选择器",
              description: "输入选择器",
              confirmText: "好了~",
              cancelText: "算了",
              closeOnEsc: true,
              closeOnOverlayClick: true,
              onConfirm: async (selector) => {
                if (!selector) {
                  snackbar({
                    message: "请不要留空哦~",
                    placement: "top"
                  });
                  return new Promise((_2, reject) => reject(false));
                } else {
                  const savedSelectors = await getHanashiroSettings("selectors");
                  savedSelectors.push({
                    name,
                    base64: encodeURI(selector),
                    order: 1
                  });
                  savedSelectors.sort((a2, b2) => {
                    if (a2.order > b2.order) return -1;
                    else if (a2.order == b2.order) return 0;
                    else return 1;
                  });
                  await setHanashiroSettings("selectors", savedSelectors);
                  send("closePage");
                }
              },
              onCancel: () => send("closePage")
            }).catch();
          }
        },
        onCancel: () => send("closePage")
      }).catch();
    }
  });
  const generateSelectors = async () => {
    const selectors = await getHanashiroSettings("selectors");
    const selectorsGroup = document.querySelector("#selectors");
    let innerHtmlString = "";
    selectors.sort((a2, b2) => {
      if (a2.order > b2.order) return -1;
      else if (a2.order == b2.order) return 0;
      else return 1;
    });
    selectors.forEach(({ name, base64, order }, index) => {
      innerHtmlString += `<mdui-radio id="selectorRadio" value=${base64} data-index="${String(index)}" data-order="${String(order ?? 1)}">${name}</mdui-radio>`;
    });
    selectorsGroup.innerHTML = innerHtmlString;
    document.querySelectorAll("#selectorRadio").forEach((radio) => {
      radio.addEventListener("click", (e3) => {
        const nameTextField = document.querySelector("#name");
        const selectorTextField = document.querySelector(
          "#selector"
        );
        const orderTextField = document.querySelector("#order");
        nameTextField.value = e3.target.innerText;
        selectorTextField.value = decode(e3.target.value);
        orderTextField.value = e3.target.getAttribute("data-order");
        window.Hanashiro.currentSelector = {
          index: Number(e3.target.getAttribute("data-index")),
          name: e3.target.innerText,
          base64: e3.target.value
        };
      });
    });
  };
  const editSelector = async () => {
    const selectors = await getHanashiroSettings("selectors");
    const nameTextField = document.querySelector("#name");
    const selectorTextField = document.querySelector("#selector");
    const orderTextField = document.querySelector("#order");
    if (selectorTextField.value) {
      selectors[window.Hanashiro.currentSelector.index] = {
        name: nameTextField.value,
        base64: encodeURI(selectorTextField.value),
        order: Number(orderTextField.value == "" ? 1 : orderTextField.value)
      };
    } else selectors.splice(window.Hanashiro.currentSelector.index, 1);
    await setHanashiroSettings("selectors", selectors);
    snackbar({
      message: "修改成功!",
      placement: "top"
    });
  };
  const setValue = async (selectors) => {
    try {
      if (window.Hanashiro.selectorsImportWay == 0)
        await setHanashiroSettings("selectors", selectors);
      else {
        const hadSelectors = await getHanashiroSettings("selectors");
        await setHanashiroSettings("selectors", hadSelectors.concat(selectors));
      }
    } catch {
      snackbar({
        message: "应用设置失败",
        placement: "top"
      });
      return;
    }
  };
  const getRemoteSelectors = async (url) => {
    let remoteSelectors;
    try {
      remoteSelectors = lib.parse(await (await fetch(url)).text());
    } catch {
      snackbar({
        message: "请求失败!",
        placement: "top"
      });
      return;
    }
    await setValue(remoteSelectors);
    snackbar({
      message: "设置应用成功!重新打开页面即可看见更改",
      placement: "top"
    });
  };
  const showFilePicker = () => document.querySelector("input#localImport").click();
  const getLocalSelectors = async () => {
    const inputElement = document.querySelector(
      "input#localImport"
    );
    const fileList = inputElement.files;
    if (!fileList) return;
    const file = fileList[0];
    const localSelectors = lib.parse(await file.text());
    await setValue(localSelectors);
    snackbar({
      message: "设置应用成功!重新打开页面即可看见更改",
      placement: "top"
    });
  };
  const _import = () => {
    dialog({
      headline: "选择导入方式",
      description: "选择覆盖导入或者添加导入",
      closeOnEsc: true,
      closeOnOverlayClick: true,
      queue: "selectors",
      actions: [
        {
          text: "覆盖导入",
          onClick: () => {
            window.Hanashiro.selectorsImportWay = 0;
          }
        },
        {
          text: "添加导入",
          onClick: () => {
            window.Hanashiro.selectorsImportWay = 1;
          }
        }
      ]
    });
    dialog({
      headline: "选择导入渠道",
      description: "选择从本地导入或者远程导入",
      closeOnEsc: true,
      closeOnOverlayClick: true,
      queue: "selectors",
      actions: [
        {
          text: "本地导入",
          onClick: showFilePicker
        },
        {
          text: "远程导入",
          onClick: () => {
            prompt({
              headline: "远程设置文件链接",
              description: "请输入远程设置文件的链接以导入",
              closeOnEsc: true,
              closeOnOverlayClick: true,
              confirmText: "导入",
              cancelText: "取消",
              onConfirm: async (value) => {
                if (!value) {
                  snackbar({
                    message: "请输入链接!",
                    placement: "top"
                  });
                  return new Promise((_2, reject) => reject(false));
                } else await getRemoteSelectors(value);
              }
            });
          }
        }
      ]
    });
  };
  const _export = async () => {
    const selectors = await getHanashiroSettings("selectors");
    const selectorsFile = new Blob([lib.stringify(selectors, void 0, 2)]);
    FileSaver_minExports.saveAs(selectorsFile, "selectors.json5");
  };
  const _sfc_main$3 = vue.defineComponent({
    methods: {
      async editSelector() {
        await editSelector();
      },
      async close() {
        const selectors = await getHanashiroSettings("selectors");
        selectors.sort((a2, b2) => {
          if (a2.order > b2.order) return -1;
          else if (a2.order == b2.order) return 0;
          else return 1;
        });
        await setHanashiroSettings("selectors", selectors);
        send("closePage");
      },
      async exportSelectors() {
        await _export();
      },
      importSelectors() {
        _import();
      },
      async getLocalSelectorsFile() {
        await getLocalSelectors();
      }
    },
    async mounted() {
      await generateSelectors();
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
      vue.createElementVNode("mdui-dialog", {
        id: "page",
        headline: "管理选择器",
        "close-on-overlay-click": "",
        "close-on-esc": "",
        onClosed: _cache[6] || (_cache[6] = (...args) => _ctx.close && _ctx.close(...args))
      }, [
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            variant: "tonal",
            onClick: _cache[0] || (_cache[0] = (...args) => _ctx.exportSelectors && _ctx.exportSelectors(...args))
          }, "导出"),
          vue.createElementVNode("mdui-button", {
            variant: "tonal",
            onClick: _cache[1] || (_cache[1] = (...args) => _ctx.importSelectors && _ctx.importSelectors(...args))
          }, "导入")
        ]),
        _cache[14] || (_cache[14] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "选择选择器:"),
          vue.createElementVNode("mdui-radio-group", { id: "selectors" })
        ], -1)),
        vue.createElementVNode("div", null, [
          _cache[8] || (_cache[8] = vue.createElementVNode("span", null, "备注:", -1)),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "name",
            label: "备注",
            onChange: _cache[2] || (_cache[2] = (...args) => _ctx.editSelector && _ctx.editSelector(...args))
          }, null, 32),
          _cache[9] || (_cache[9] = vue.createElementVNode("span", { class: "introduction" }, "失焦保存", -1))
        ]),
        vue.createElementVNode("div", null, [
          _cache[10] || (_cache[10] = vue.createElementVNode("span", null, "选择器:", -1)),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "selector",
            label: "选择器",
            onChange: _cache[3] || (_cache[3] = (...args) => _ctx.editSelector && _ctx.editSelector(...args))
          }, null, 32),
          _cache[11] || (_cache[11] = vue.createElementVNode("span", { class: "introduction" }, "留空删除。失焦保存", -1))
        ]),
        vue.createElementVNode("div", null, [
          _cache[12] || (_cache[12] = vue.createElementVNode("span", null, "排序优先值:", -1)),
          vue.createElementVNode("mdui-text-field", {
            variant: "filled",
            id: "order",
            label: "排序优先值",
            type: "number",
            onChange: _cache[4] || (_cache[4] = (...args) => _ctx.editSelector && _ctx.editSelector(...args))
          }, null, 32),
          _cache[13] || (_cache[13] = vue.createElementVNode("span", { class: "introduction" }, "数字越大,排序越前。失焦保存", -1))
        ]),
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            slot: "action",
            variant: "tonal",
            onClick: _cache[5] || (_cache[5] = (...args) => _ctx.close && _ctx.close(...args))
          }, "关闭")
        ])
      ], 32),
      vue.createElementVNode("input", {
        type: "file",
        id: "localImport",
        accept: ".json,.json5",
        onChange: _cache[7] || (_cache[7] = (...args) => _ctx.getLocalSelectorsFile && _ctx.getLocalSelectorsFile(...args))
      }, null, 32)
    ], 64);
  }
  const ManageSelectors = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3]]);
  const _sfc_main$2 = vue.defineComponent({
    methods: {
      async getImg() {
        const inputElement = document.querySelector("#img");
        const fileList = inputElement.files;
        const imageArrayBuffer = await fileList[0].arrayBuffer();
        await replaceScreenshot(getSnapshotId(), imageArrayBuffer);
        snackbar({
          message: "更换截图成功!刷新页面即可看见更改",
          placement: "top"
        });
        send("closePage");
      },
      cancel() {
        send("closePage");
      }
    },
    async mounted() {
      document.querySelector("#img").click();
    }
  });
  function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock("input", {
      type: "file",
      id: "img",
      accept: ".png",
      onChange: _cache[0] || (_cache[0] = (...args) => _ctx.getImg && _ctx.getImg(...args)),
      onCancel: _cache[1] || (_cache[1] = (...args) => _ctx.cancel && _ctx.cancel(...args))
    }, null, 32);
  }
  const ChangeScreenshot = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2]]);
  const arrayBufferToImage = (arrayBuffer) => {
    const arrayBufferView = new Uint8Array(arrayBuffer);
    const blob = new Blob([arrayBufferView], { type: "image/png" });
    const src = (window.URL || window.webkitURL).createObjectURL(blob);
    const img = document.createElement("img");
    img.src = src;
    return img;
  };
  const getInfo = async () => {
    const canvas = document.querySelector("#canvas");
    const snapshotId = getSnapshotId();
    const screenshot = await getScreenshot(snapshotId);
    const nodeId = getCurrentNodeId();
    const screenWidth = (await getScreenInfo(getSnapshotId())).width;
    const screenHeight = (await getScreenInfo(getSnapshotId())).height;
    const left = await getNodeAttr(snapshotId, nodeId, "left");
    const top = await getNodeAttr(snapshotId, nodeId, "top");
    const width = await getNodeAttr(snapshotId, nodeId, "width");
    const height = await getNodeAttr(snapshotId, nodeId, "height");
    const fullImg = arrayBufferToImage(screenshot);
    return [canvas, screenWidth, screenHeight, left, top, width, height, fullImg];
  };
  const partialView = (canvas, screenWidth, screenHeight, left, top, width, height, fullImg) => {
    window.Hanashiro.currentPositionView = "partial";
    const ctx = canvas.getContext("2d");
    const tampCanvas = document.createElement("canvas");
    const tampCtx = tampCanvas.getContext("2d");
    canvas.width = width;
    canvas.height = height;
    tampCanvas.width = screenWidth;
    tampCanvas.height = screenHeight;
    tampCtx.drawImage(fullImg, 0, 0, screenWidth, screenHeight);
    const imgData = tampCtx.getImageData(left, top, width, height);
    ctx.putImageData(imgData, 0, 0);
  };
  const globalView = (canvas, screenWidth, screenHeight, fullImg) => {
    window.Hanashiro.currentPositionView = "global";
    const ctx = canvas.getContext("2d");
    canvas.width = screenWidth;
    canvas.height = screenHeight;
    ctx.drawImage(fullImg, 0, 0, screenWidth, screenHeight);
  };
  const generatePosition = async () => {
    const [canvas, screenWidth, screenHeight, left, top, width, height, fullImg] = await getInfo();
    fullImg.onload = () => partialView(
      canvas,
      screenWidth,
      screenHeight,
      left,
      top,
      width,
      height,
      fullImg
    );
    canvas.onclick = (e3) => {
      let x2 = e3.offsetX, y2 = e3.offsetY;
      if (window.Hanashiro.currentPositionView == "global") {
        x2 -= left;
        y2 -= top;
      }
      const absolutePosition = {
        left: left + x2,
        top: top + y2
      };
      const relativePosition = {
        left: `width * ${String((x2 / width).toFixed(4))}`,
        top: `width * ${String((y2 / width).toFixed(4))}`
      };
      window.Hanashiro.nodePosition = {
        absolute: absolutePosition,
        relative: relativePosition
      };
      const result = document.querySelector("#result");
      result.open = true;
    };
  };
  const _sfc_main$1 = vue.defineComponent({
    methods: {
      closeDialog() {
        send("closePage");
      },
      closeResult() {
        const result = document.querySelector("#result");
        result.open = false;
      },
      async partialView() {
        const [canvas, screenWidth, screenHeight, left, top, width, height, fullImg] = await getInfo();
        fullImg.onload = () => partialView(canvas, screenWidth, screenHeight, left, top, width, height, fullImg);
      },
      async globalView() {
        const [canvas, screenWidth, screenHeight, _left, _top, _width, _height, fullImg] = await getInfo();
        fullImg.onload = () => globalView(canvas, screenWidth, screenHeight, fullImg);
      },
      getNewPosition() {
        const absolute = window.Hanashiro.nodePosition.absolute;
        const relative = window.Hanashiro.nodePosition.relative;
        document.querySelector("#absolute").value = lib.stringify({ position: absolute }, void 0, 2);
        document.querySelector("#relative").value = lib.stringify({ position: relative }, void 0, 2);
      }
    },
    async mounted() {
      await generatePosition();
      document.querySelector("#page").open = true;
    }
  });
  function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
      vue.createElementVNode("mdui-dialog", {
        id: "page",
        headline: "选择点击坐标",
        fullscreen: "",
        "close-on-overlay-click": "",
        "close-on-esc": "",
        onClosed: _cache[3] || (_cache[3] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
      }, [
        _cache[6] || (_cache[6] = vue.createElementVNode("div", null, [
          vue.createElementVNode("canvas", { id: "canvas" })
        ], -1)),
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button-icon", {
            icon: "open_in_full",
            onClick: _cache[0] || (_cache[0] = (...args) => _ctx.globalView && _ctx.globalView(...args))
          }),
          vue.createElementVNode("mdui-button-icon", {
            icon: "close_fullscreen",
            onClick: _cache[1] || (_cache[1] = (...args) => _ctx.partialView && _ctx.partialView(...args))
          })
        ]),
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            slot: "action",
            variant: "tonal",
            onClick: _cache[2] || (_cache[2] = (...args) => _ctx.closeDialog && _ctx.closeDialog(...args))
          }, "关闭")
        ])
      ], 32),
      vue.createElementVNode("mdui-dialog", {
        id: "result",
        headline: "计算结果",
        "close-on-esc": "",
        "close-on-overlay-click": "",
        onOpen: _cache[5] || (_cache[5] = (...args) => _ctx.getNewPosition && _ctx.getNewPosition(...args))
      }, [
        _cache[7] || (_cache[7] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "绝对坐标:"),
          vue.createElementVNode("mdui-text-field", {
            id: "absolute",
            variant: "filled",
            label: "绝对坐标",
            rows: "8"
          })
        ], -1)),
        _cache[8] || (_cache[8] = vue.createElementVNode("div", null, [
          vue.createElementVNode("span", null, "相对坐标:"),
          vue.createElementVNode("mdui-text-field", {
            id: "relative",
            variant: "filled",
            label: "相对坐标",
            rows: "8"
          })
        ], -1)),
        vue.createElementVNode("div", null, [
          vue.createElementVNode("mdui-button", {
            slot: "action",
            variant: "tonal",
            onClick: _cache[4] || (_cache[4] = (...args) => _ctx.closeResult && _ctx.closeResult(...args))
          }, "关闭")
        ])
      ], 32)
    ], 64);
  }
  const GeneratePosition = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1]]);
  const _sfc_main = vue.defineComponent({
    components: {
      Main,
      Settings,
      InspectSettings,
      Help,
      UseSelector,
      AddSelector: _sfc_main$4,
      ManageSelectors,
      ChangeScreenshot,
      GeneratePosition
    },
    data() {
      return {
        currentComponent: ""
      };
    },
    created() {
      receive("copyEvent", () => {
        this.currentComponent = "Main";
      });
      receive("openSettings", () => {
        this.currentComponent = "Settings";
      });
      receive("openHelp", () => {
        this.currentComponent = "Help";
      });
      receive("openUseSelector", () => {
        this.currentComponent = "UseSelector";
      });
      receive("openAddSelector", () => {
        this.currentComponent = "AddSelector";
      });
      receive("openManageSelectors", () => {
        this.currentComponent = "ManageSelectors";
      });
      receive("openChangeScreenshot", () => {
        this.currentComponent = "ChangeScreenshot";
      });
      receive("openGeneratePosition", () => {
        this.currentComponent = "GeneratePosition";
      });
      receive("openInspectSettings", () => {
        this.currentComponent = "InspectSettings";
      });
      receive("closePage", () => {
        this.currentComponent = "";
      });
    },
    mounted() {
      setColorScheme("#39C5BB");
    }
  });
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
    return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.currentComponent));
  }
  const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
  vue.createApp(App).mount(
    (() => {
      const app = document.createElement("div");
      document.body.append(app);
      return app;
    })()
  );

})(Vue);