// ==UserScript==
// @name richard-couchdb-tag-post-script
// @namespace npm/vite-plugin-monkey
// @version 0.0.1
// @author monkey
// @description Tag page and store to CouchDb
// @license MIT
// @icon https://vitejs.dev/logo.svg
// @match *://*/*
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @grant GM_getValue
// @grant GM_setValue
// ==/UserScript==
(e=>{const t=document.createElement("style");t.dataset.source="vite-plugin-monkey",t.textContent=e,document.head.append(t)})(' @charset "UTF-8";.vue-root{position:fixed;top:20px;left:20px}.read-the-docs[data-v-cec3ba6f]{color:#888}@font-face{font-family:Material Icons;font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,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) format("woff2"),url(data:font/woff;base64,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) format("woff")}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}*,*:before,*:after{box-sizing:inherit;-webkit-tap-highlight-color:transparent;-moz-tap-highlight-color:transparent}html,body,#q-app{width:100%;direction:ltr}body.platform-ios.within-iframe,body.platform-ios.within-iframe #q-app{width:100px;min-width:100%}html,body{margin:0;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;font-family:inherit;margin:0}optgroup{font-weight:700}button,input,select{overflow:visible;text-transform:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.q-icon{line-height:1;width:1em;height:1em;flex-shrink:0;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;text-align:center;position:relative;box-sizing:content-box;fill:currentColor}.q-icon:before,.q-icon:after{width:100%;height:100%;display:flex!important;align-items:center;justify-content:center}.q-icon>svg,.q-icon>img{width:100%;height:100%}.q-icon,.material-icons,.material-icons-outlined,.material-icons-round,.material-icons-sharp,.material-symbols-outlined,.material-symbols-rounded,.material-symbols-sharp{user-select:none;cursor:inherit;font-size:inherit;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.q-panel{height:100%;width:100%}.q-panel>div{height:100%;width:100%}.q-panel-parent{overflow:hidden;position:relative}.q-loading-bar{position:fixed;z-index:9998;transition:transform .5s cubic-bezier(0,0,.2,1),opacity .5s;background:#f44336}.q-loading-bar--top{left:0;right:0;top:0;width:100%}.q-loading-bar--bottom{left:0;right:0;bottom:0;width:100%}.q-loading-bar--right{top:0;bottom:0;right:0;height:100%}.q-loading-bar--left{top:0;bottom:0;left:0;height:100%}.q-avatar{position:relative;vertical-align:middle;display:inline-block;border-radius:50%;font-size:48px;height:1em;width:1em}.q-avatar__content{font-size:.5em;line-height:.5em}.q-avatar__content,.q-avatar img:not(.q-icon):not(.q-img__image){border-radius:inherit;height:inherit;width:inherit}.q-avatar--square{border-radius:0}.q-badge{background-color:var(--q-primary);color:#fff;padding:2px 6px;border-radius:4px;font-size:12px;line-height:12px;min-height:12px;font-weight:400;vertical-align:baseline}.q-badge--single-line{white-space:nowrap}.q-badge--multi-line{word-break:break-all;word-wrap:break-word}.q-badge--floating{position:absolute;top:-4px;right:-3px;cursor:inherit}.q-badge--transparent{opacity:.8}.q-badge--outline{background-color:transparent;border:1px solid currentColor}.q-badge--rounded{border-radius:1em}.q-banner{min-height:54px;padding:8px 16px;background:#fff}.q-banner--top-padding{padding-top:14px}.q-banner__avatar{min-width:1px!important}.q-banner__avatar>.q-avatar{font-size:46px}.q-banner__avatar>.q-icon{font-size:40px}.q-banner__avatar:not(:empty)+.q-banner__content{padding-left:16px}.q-banner__actions.col-auto{padding-left:16px}.q-banner__actions.col-all .q-btn-item{margin:4px 0 0 4px}.q-banner--dense{min-height:32px;padding:8px}.q-banner--dense.q-banner--top-padding{padding-top:12px}.q-banner--dense .q-banner__avatar>.q-avatar,.q-banner--dense .q-banner__avatar>.q-icon{font-size:28px}.q-banner--dense .q-banner__avatar:not(:empty)+.q-banner__content{padding-left:8px}.q-banner--dense .q-banner__actions.col-auto{padding-left:8px}.q-bar{background:rgba(0,0,0,.2)}.q-bar>.q-icon{margin-left:2px}.q-bar>div,.q-bar>div+.q-icon{margin-left:8px}.q-bar>.q-btn{margin-left:2px}.q-bar>.q-icon:first-child,.q-bar>.q-btn:first-child,.q-bar>div:first-child{margin-left:0}.q-bar--standard{padding:0 12px;height:32px;font-size:18px}.q-bar--standard>div{font-size:16px}.q-bar--standard .q-btn{font-size:11px}.q-bar--dense{padding:0 8px;height:24px;font-size:14px}.q-bar--dense .q-btn{font-size:8px}.q-bar--dark{background:rgba(255,255,255,.15)}.q-breadcrumbs__el{color:inherit}.q-breadcrumbs__el-icon{font-size:125%}.q-breadcrumbs__el-icon--with-label{margin-right:8px}[dir=rtl] .q-breadcrumbs__separator .q-icon{transform:scaleX(-1)}.q-btn{display:inline-flex;flex-direction:column;align-items:stretch;position:relative;outline:0;border:0;vertical-align:middle;font-size:14px;line-height:1.715em;text-decoration:none;color:inherit;background:transparent;font-weight:500;text-transform:uppercase;text-align:center;width:auto;height:auto;cursor:default;padding:4px 16px;min-height:2.572em}.q-btn .q-icon,.q-btn .q-spinner{font-size:1.715em}.q-btn.disabled{opacity:.7!important}.q-btn:before{content:"";display:block;position:absolute;left:0;right:0;top:0;bottom:0;border-radius:inherit;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f}.q-btn--actionable{cursor:pointer}.q-btn--actionable.q-btn--standard:before{transition:box-shadow .3s cubic-bezier(.25,.8,.5,1)}.q-btn--actionable.q-btn--standard:active:before,.q-btn--actionable.q-btn--standard.q-btn--active:before{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.q-btn--no-uppercase{text-transform:none}.q-btn--rectangle{border-radius:3px}.q-btn--outline{background:transparent!important}.q-btn--outline:before{border:1px solid currentColor}.q-btn--push{border-radius:7px}.q-btn--push:before{border-bottom:3px solid rgba(0,0,0,.15)}.q-btn--push.q-btn--actionable{transition:transform .3s cubic-bezier(.25,.8,.5,1)}.q-btn--push.q-btn--actionable:before{transition:border-width .3s cubic-bezier(.25,.8,.5,1)}.q-btn--push.q-btn--actionable:active,.q-btn--push.q-btn--actionable.q-btn--active{transform:translateY(2px)}.q-btn--push.q-btn--actionable:active:before,.q-btn--push.q-btn--actionable.q-btn--active:before{border-bottom-width:0}.q-btn--rounded{border-radius:28px}.q-btn--round{border-radius:50%;padding:0;min-width:3em;min-height:3em}.q-btn--square{border-radius:0}.q-btn--flat:before,.q-btn--outline:before,.q-btn--unelevated:before{box-shadow:none}.q-btn--dense{padding:.285em;min-height:2em}.q-btn--dense.q-btn--round{padding:0;min-height:2.4em;min-width:2.4em}.q-btn--dense .on-left{margin-right:6px}.q-btn--dense .on-right{margin-left:6px}.q-btn--fab .q-icon,.q-btn--fab-mini .q-icon{font-size:24px}.q-btn--fab{padding:16px;min-height:56px;min-width:56px}.q-btn--fab .q-icon{margin:auto}.q-btn--fab-mini{padding:8px;min-height:40px;min-width:40px}.q-btn__content{transition:opacity .3s;z-index:0}.q-btn__content--hidden{opacity:0;pointer-events:none}.q-btn__progress{border-radius:inherit;z-index:0}.q-btn__progress-indicator{z-index:-1;transform:translate(-100%);background:rgba(255,255,255,.25)}.q-btn__progress--dark .q-btn__progress-indicator{background:rgba(0,0,0,.2)}.q-btn--flat .q-btn__progress-indicator,.q-btn--outline .q-btn__progress-indicator{opacity:.2;background:currentColor}.q-btn-dropdown--split .q-btn-dropdown__arrow-container{padding:0 4px}.q-btn-dropdown--split .q-btn-dropdown__arrow-container.q-btn--outline{border-left:1px solid currentColor}.q-btn-dropdown--split .q-btn-dropdown__arrow-container:not(.q-btn--outline){border-left:1px solid rgba(255,255,255,.3)}.q-btn-dropdown--simple *+.q-btn-dropdown__arrow{margin-left:8px}.q-btn-dropdown__arrow{transition:transform .28s}.q-btn-dropdown--current{flex-grow:1}.q-btn-group{border-radius:3px;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;vertical-align:middle}.q-btn-group>.q-btn-item{border-radius:inherit;align-self:stretch}.q-btn-group>.q-btn-item:before{box-shadow:none}.q-btn-group>.q-btn-item .q-badge--floating{right:0}.q-btn-group>.q-btn-group{box-shadow:none}.q-btn-group>.q-btn-group:first-child>.q-btn:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.q-btn-group>.q-btn-group:last-child>.q-btn:last-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.q-btn-group>.q-btn-group:not(:first-child)>.q-btn:first-child:before{border-left:0}.q-btn-group>.q-btn-group:not(:last-child)>.q-btn:last-child:before{border-right:0}.q-btn-group>.q-btn-item:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.q-btn-group>.q-btn-item:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.q-btn-group>.q-btn-item.q-btn--standard:before{z-index:-1}.q-btn-group--push{border-radius:7px}.q-btn-group--push>.q-btn--push.q-btn--actionable{transform:none}.q-btn-group--push>.q-btn--push.q-btn--actionable .q-btn__content{transition:margin-top .3s cubic-bezier(.25,.8,.5,1),margin-bottom .3s cubic-bezier(.25,.8,.5,1)}.q-btn-group--push>.q-btn--push.q-btn--actionable:active .q-btn__content,.q-btn-group--push>.q-btn--push.q-btn--actionable.q-btn--active .q-btn__content{margin-top:2px;margin-bottom:-2px}.q-btn-group--rounded{border-radius:28px}.q-btn-group--square{border-radius:0}.q-btn-group--flat,.q-btn-group--outline,.q-btn-group--unelevated{box-shadow:none}.q-btn-group--outline>.q-separator{display:none}.q-btn-group--outline>.q-btn-item+.q-btn-item:before{border-left:0}.q-btn-group--outline>.q-btn-item:not(:last-child):before{border-right:0}.q-btn-group--stretch{align-self:stretch;border-radius:0}.q-btn-group--glossy>.q-btn-item{background-image:linear-gradient(to bottom,rgba(255,255,255,.3),rgba(255,255,255,0) 50%,rgba(0,0,0,.12) 51%,rgba(0,0,0,.04))!important}.q-btn-group--spread>.q-btn-group{display:flex!important}.q-btn-group--spread>.q-btn-item,.q-btn-group--spread>.q-btn-group>.q-btn-item:not(.q-btn-dropdown__arrow-container){width:auto;min-width:0;max-width:100%;flex:10000 1 0%}.q-btn-toggle{position:relative}.q-card{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;vertical-align:top;background:#fff;position:relative}.q-card>div:first-child,.q-card>img:first-child{border-top:0;border-top-left-radius:inherit;border-top-right-radius:inherit}.q-card>div:last-child,.q-card>img:last-child{border-bottom:0;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-card>div:not(:first-child),.q-card>img:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.q-card>div:not(:last-child),.q-card>img:not(:last-child){border-bottom-left-radius:0;border-bottom-right-radius:0}.q-card>div{border-left:0;border-right:0;box-shadow:none}.q-card--bordered{border:1px solid rgba(0,0,0,.12)}.q-card--dark{border-color:#ffffff47;box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-card__section{position:relative}.q-card__section--vert{padding:16px}.q-card__section--horiz>div:first-child,.q-card__section--horiz>img:first-child{border-top-left-radius:inherit;border-bottom-left-radius:inherit}.q-card__section--horiz>div:last-child,.q-card__section--horiz>img:last-child{border-top-right-radius:inherit;border-bottom-right-radius:inherit}.q-card__section--horiz>div:not(:first-child),.q-card__section--horiz>img:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.q-card__section--horiz>div:not(:last-child),.q-card__section--horiz>img:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.q-card__section--horiz>div{border-top:0;border-bottom:0;box-shadow:none}.q-card__actions{padding:8px;align-items:center}.q-card__actions .q-btn--rectangle{padding:0 8px}.q-card__actions--horiz>.q-btn-item+.q-btn-item,.q-card__actions--horiz>.q-btn-group+.q-btn-item,.q-card__actions--horiz>.q-btn-item+.q-btn-group{margin-left:8px}.q-card__actions--vert>.q-btn-item.q-btn--round{align-self:center}.q-card__actions--vert>.q-btn-item+.q-btn-item,.q-card__actions--vert>.q-btn-group+.q-btn-item,.q-card__actions--vert>.q-btn-item+.q-btn-group{margin-top:4px}.q-card__actions--vert>.q-btn-group>.q-btn-item{flex-grow:1}.q-card>img{display:block;width:100%;max-width:100%;border:0}.q-carousel{background-color:#fff;height:400px}.q-carousel__slide{min-height:100%;background-size:cover;background-position:50%}.q-carousel__slide,.q-carousel .q-carousel--padding{padding:16px}.q-carousel__slides-container{height:100%}.q-carousel__control{color:#fff}.q-carousel__arrow{pointer-events:none}.q-carousel__arrow .q-icon{font-size:28px}.q-carousel__arrow .q-btn{pointer-events:all}.q-carousel__prev-arrow--horizontal,.q-carousel__next-arrow--horizontal{top:16px;bottom:16px}.q-carousel__prev-arrow--horizontal{left:16px}.q-carousel__next-arrow--horizontal{right:16px}.q-carousel__prev-arrow--vertical,.q-carousel__next-arrow--vertical{left:16px;right:16px}.q-carousel__prev-arrow--vertical{top:16px}.q-carousel__next-arrow--vertical{bottom:16px}.q-carousel__navigation--top,.q-carousel__navigation--bottom{left:16px;right:16px;overflow-x:auto;overflow-y:hidden}.q-carousel__navigation--top{top:16px}.q-carousel__navigation--bottom{bottom:16px}.q-carousel__navigation--left,.q-carousel__navigation--right{top:16px;bottom:16px;overflow-x:hidden;overflow-y:auto}.q-carousel__navigation--left>.q-carousel__navigation-inner,.q-carousel__navigation--right>.q-carousel__navigation-inner{flex-direction:column}.q-carousel__navigation--left{left:16px}.q-carousel__navigation--right{right:16px}.q-carousel__navigation-inner{flex:1 1 auto}.q-carousel__navigation .q-btn{margin:6px 4px;padding:5px}.q-carousel__navigation-icon--inactive{opacity:.7}.q-carousel .q-carousel__thumbnail{margin:2px;height:50px;width:auto;display:inline-block;cursor:pointer;border:1px solid transparent;border-radius:4px;vertical-align:middle;opacity:.7;transition:opacity .3s}.q-carousel .q-carousel__thumbnail:hover,.q-carousel .q-carousel__thumbnail--active{opacity:1}.q-carousel .q-carousel__thumbnail--active{border-color:currentColor;cursor:default}.q-carousel--navigation-top.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-top .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--arrows-vertical .q-carousel--padding{padding-top:60px}.q-carousel--navigation-bottom.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-bottom .q-carousel--padding,.q-carousel--arrows-vertical.q-carousel--with-padding .q-carousel__slide,.q-carousel--arrows-vertical .q-carousel--padding{padding-bottom:60px}.q-carousel--navigation-left.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-left .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--arrows-horizontal .q-carousel--padding{padding-left:60px}.q-carousel--navigation-right.q-carousel--with-padding .q-carousel__slide,.q-carousel--navigation-right .q-carousel--padding,.q-carousel--arrows-horizontal.q-carousel--with-padding .q-carousel__slide,.q-carousel--arrows-horizontal .q-carousel--padding{padding-right:60px}.q-carousel.fullscreen{height:100%}.q-message-name,.q-message-stamp,.q-message-label{font-size:small}.q-message-label{margin:24px 0;text-align:center}.q-message-stamp{color:inherit;margin-top:4px;opacity:.6;display:none}.q-message-avatar{border-radius:50%;width:48px;height:48px;min-width:48px}.q-message{margin-bottom:8px}.q-message:first-child .q-message-label{margin-top:0}.q-message-avatar--received{margin-right:8px}.q-message-text--received{color:#81c784;border-radius:4px 4px 4px 0}.q-message-text--received:last-child:before{right:100%;border-right:0 solid transparent;border-left:8px solid transparent;border-bottom:8px solid currentColor}.q-message-text-content--received{color:#000}.q-message-name--sent{text-align:right}.q-message-avatar--sent{margin-left:8px}.q-message-container--sent{flex-direction:row-reverse}.q-message-text--sent{color:#e0e0e0;border-radius:4px 4px 0}.q-message-text--sent:last-child:before{left:100%;border-left:0 solid transparent;border-right:8px solid transparent;border-bottom:8px solid currentColor}.q-message-text-content--sent{color:#000}.q-message-text{background:currentColor;padding:8px;line-height:1.2;word-break:break-word;position:relative}.q-message-text+.q-message-text{margin-top:3px}.q-message-text:last-child{min-height:48px}.q-message-text:last-child .q-message-stamp{display:block}.q-message-text:last-child:before{content:"";position:absolute;bottom:0;width:0;height:0}.q-checkbox{vertical-align:middle}.q-checkbox__native{width:1px;height:1px}.q-checkbox__bg,.q-checkbox__icon-container{user-select:none}.q-checkbox__bg{top:25%;left:25%;width:50%;height:50%;border:2px solid currentColor;border-radius:2px;transition:background .22s cubic-bezier(0,0,.2,1) 0ms;-webkit-print-color-adjust:exact}.q-checkbox__icon{color:currentColor;font-size:.5em}.q-checkbox__svg{color:#fff}.q-checkbox__truthy{stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.78334;stroke-dasharray:29.78334}.q-checkbox__indet{fill:currentColor;transform-origin:50% 50%;transform:rotate(-280deg) scale(0)}.q-checkbox__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;border-radius:50%;color:#0000008a}.q-checkbox__inner--truthy,.q-checkbox__inner--indet{color:var(--q-primary)}.q-checkbox__inner--truthy .q-checkbox__bg,.q-checkbox__inner--indet .q-checkbox__bg{background:currentColor}.q-checkbox__inner--truthy path{stroke-dashoffset:0;transition:stroke-dashoffset .18s cubic-bezier(.4,0,.6,1) 0ms}.q-checkbox__inner--indet .q-checkbox__indet{transform:rotate(0) scale(1);transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}.q-checkbox.disabled{opacity:.75!important}.q-checkbox--dark .q-checkbox__inner{color:#ffffffb3}.q-checkbox--dark .q-checkbox__inner:before{opacity:.32!important}.q-checkbox--dark .q-checkbox__inner--truthy,.q-checkbox--dark .q-checkbox__inner--indet{color:var(--q-primary)}.q-checkbox--dense .q-checkbox__inner{width:.5em;min-width:.5em;height:.5em}.q-checkbox--dense .q-checkbox__bg{left:5%;top:5%;width:90%;height:90%}.q-checkbox--dense .q-checkbox__label{padding-left:.5em}.q-checkbox--dense.reverse .q-checkbox__label{padding-left:0;padding-right:.5em}body.desktop .q-checkbox:not(.disabled) .q-checkbox__inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:.12;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1)}body.desktop .q-checkbox:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox:not(.disabled):hover .q-checkbox__inner:before{transform:scaleZ(1)}body.desktop .q-checkbox--dense:not(.disabled):focus .q-checkbox__inner:before,body.desktop .q-checkbox--dense:not(.disabled):hover .q-checkbox__inner:before{transform:scale3d(1.4,1.4,1)}.q-chip{vertical-align:middle;border-radius:16px;outline:0;position:relative;height:2em;max-width:100%;margin:4px;background:#e0e0e0;color:#000000de;font-size:14px;padding:.5em .9em}.q-chip--colored .q-chip__icon,.q-chip--dark .q-chip__icon{color:inherit}.q-chip--outline{background:transparent!important;border:1px solid currentColor}.q-chip .q-avatar{font-size:2em;margin-left:-.45em;margin-right:.2em;border-radius:16px}.q-chip--selected .q-avatar{display:none}.q-chip__icon{color:#0000008a;font-size:1.5em;margin:-.2em}.q-chip__icon--left{margin-right:.2em}.q-chip__icon--right{margin-left:.2em}.q-chip__icon--remove{margin-left:.1em;margin-right:-.5em;opacity:.6;outline:0}.q-chip__icon--remove:hover,.q-chip__icon--remove:focus{opacity:1}.q-chip__content{white-space:nowrap}.q-chip--dense{border-radius:12px;padding:0 .4em;height:1.5em}.q-chip--dense .q-avatar{font-size:1.5em;margin-left:-.27em;margin-right:.1em;border-radius:12px}.q-chip--dense .q-chip__icon{font-size:1.25em}.q-chip--dense .q-chip__icon--left{margin-right:.195em}.q-chip--dense .q-chip__icon--remove{margin-right:-.25em}.q-chip--square{border-radius:4px}.q-chip--square .q-avatar{border-radius:3px 0 0 3px}body.desktop .q-chip--clickable:focus{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f}body.desktop.body--dark .q-chip--clickable:focus{box-shadow:0 1px 3px #fff3,0 1px 1px #ffffff24,0 2px 1px -1px #ffffff1f}.q-circular-progress{display:inline-block;position:relative;vertical-align:middle;width:1em;height:1em;line-height:1}.q-circular-progress.q-focusable{border-radius:50%}.q-circular-progress__svg{width:100%;height:100%}.q-circular-progress__text{font-size:.25em}.q-circular-progress--indeterminate .q-circular-progress__svg{transform-origin:50% 50%;animation:q-spin 2s linear infinite}.q-circular-progress--indeterminate .q-circular-progress__circle{stroke-dasharray:1 400;stroke-dashoffset:0;animation:q-circular-progress-circle 1.5s ease-in-out infinite}@keyframes q-circular-progress-circle{0%{stroke-dasharray:1,400;stroke-dashoffset:0}50%{stroke-dasharray:400,400;stroke-dashoffset:-100}to{stroke-dasharray:400,400;stroke-dashoffset:-300}}.q-color-picker{overflow:hidden;background:#fff;max-width:350px;vertical-align:top;min-width:180px;border-radius:4px;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f}.q-color-picker .q-tab{padding:0!important}.q-color-picker--bordered{border:1px solid rgba(0,0,0,.12)}.q-color-picker__header-tabs{height:32px}.q-color-picker__header input{line-height:24px;border:0}.q-color-picker__header .q-tab{min-height:32px!important;height:32px!important}.q-color-picker__header .q-tab--inactive{background:linear-gradient(to top,rgba(0,0,0,.3) 0%,rgba(0,0,0,.15) 25%,rgba(0,0,0,.1))}.q-color-picker__error-icon{bottom:2px;right:2px;font-size:24px;opacity:0;transition:opacity .3s ease-in}.q-color-picker__header-content{position:relative;background:#fff}.q-color-picker__header-content--light{color:#000}.q-color-picker__header-content--dark{color:#fff}.q-color-picker__header-content--dark .q-tab--inactive:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(255,255,255,.2)}.q-color-picker__header-banner{height:36px}.q-color-picker__header-bg{background:#fff;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAH0lEQVQoU2NkYGAwZkAFZ5G5jPRRgOYEVDeB3EBjBQBOZwTVugIGyAAAAABJRU5ErkJggg==)!important}.q-color-picker__footer{height:36px}.q-color-picker__footer .q-tab{min-height:36px!important;height:36px!important}.q-color-picker__footer .q-tab--inactive{background:linear-gradient(to bottom,rgba(0,0,0,.3) 0%,rgba(0,0,0,.15) 25%,rgba(0,0,0,.1))}.q-color-picker__spectrum{width:100%;height:100%}.q-color-picker__spectrum-tab{padding:0!important}.q-color-picker__spectrum-white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.q-color-picker__spectrum-black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.q-color-picker__spectrum-circle{width:10px;height:10px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006;border-radius:50%;transform:translate(-5px,-5px)}.q-color-picker__hue .q-slider__track{background:linear-gradient(to right,#f00 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00 100%)!important;opacity:1}.q-color-picker__alpha .q-slider__track-container{padding-top:0}.q-color-picker__alpha .q-slider__track:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:linear-gradient(90deg,rgba(255,255,255,0),#757575)}.q-color-picker__sliders{padding:0 16px}.q-color-picker__sliders .q-slider__thumb{color:#424242}.q-color-picker__sliders .q-slider__thumb path{stroke-width:2px;fill:transparent}.q-color-picker__sliders .q-slider--active path{stroke-width:3px}.q-color-picker__tune-tab .q-slider{margin-left:18px;margin-right:18px}.q-color-picker__tune-tab input{font-size:11px;border:1px solid #e0e0e0;border-radius:4px;width:3.5em}.q-color-picker__palette-tab{padding:0!important}.q-color-picker__palette-rows--editable .q-color-picker__cube{cursor:pointer}.q-color-picker__cube{padding-bottom:10%;width:10%!important}.q-color-picker input{color:inherit;background:transparent;outline:0;text-align:center}.q-color-picker .q-tabs{overflow:hidden}.q-color-picker .q-tab--active{box-shadow:0 0 14px 3px #0003}.q-color-picker .q-tab--active .q-focus-helper,.q-color-picker .q-tab__indicator{display:none}.q-color-picker .q-tab-panels{background:inherit}.q-color-picker--dark{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-color-picker--dark .q-color-picker__tune-tab input{border:1px solid rgba(255,255,255,.3)}.q-color-picker--dark .q-slider__thumb{color:#fafafa}.q-date{display:inline-flex;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;background:#fff;width:290px;min-width:290px;max-width:100%}.q-date--bordered{border:1px solid rgba(0,0,0,.12)}.q-date__header{border-top-left-radius:inherit;color:#fff;background-color:var(--q-primary);padding:16px}.q-date__actions{padding:0 16px 16px}.q-date__content,.q-date__main{outline:0}.q-date__content .q-btn{font-weight:400}.q-date__header-link{opacity:.64;outline:0;transition:opacity .3s ease-out}.q-date__header-link--active,.q-date__header-link:hover,.q-date__header-link:focus{opacity:1}.q-date__header-subtitle{font-size:14px;line-height:1.75;letter-spacing:.00938em}.q-date__header-title-label{font-size:24px;line-height:1.2;letter-spacing:.00735em}.q-date__view{height:100%;width:100%;min-height:290px;padding:16px}.q-date__navigation{height:12.5%}.q-date__navigation>div:first-child{width:8%;min-width:24px;justify-content:flex-end}.q-date__navigation>div:last-child{width:8%;min-width:24px;justify-content:flex-start}.q-date__calendar-weekdays{height:12.5%}.q-date__calendar-weekdays>div{opacity:.38;font-size:12px}.q-date__calendar-item{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:14.285%!important;height:12.5%!important;position:relative;padding:1px}.q-date__calendar-item:after{content:"";position:absolute;pointer-events:none;top:1px;right:0;bottom:1px;left:0;border-style:dashed;border-color:transparent;border-width:1px}.q-date__calendar-item>div,.q-date__calendar-item button{width:30px;height:30px;border-radius:50%}.q-date__calendar-item>div{line-height:30px;text-align:center}.q-date__calendar-item>button{line-height:22px}.q-date__calendar-item--out{opacity:.18}.q-date__calendar-item--fill{visibility:hidden}.q-date__range:before,.q-date__range-from:before,.q-date__range-to:before{content:"";background-color:currentColor;position:absolute;top:1px;bottom:1px;left:0;right:0;opacity:.3}.q-date__range:nth-child(7n-6):before,.q-date__range-from:nth-child(7n-6):before,.q-date__range-to:nth-child(7n-6):before{border-top-left-radius:0;border-bottom-left-radius:0}.q-date__range:nth-child(7n):before,.q-date__range-from:nth-child(7n):before,.q-date__range-to:nth-child(7n):before{border-top-right-radius:0;border-bottom-right-radius:0}.q-date__range-from:before{left:50%}.q-date__range-to:before{right:50%}.q-date__edit-range:after{border-color:currentColor transparent}.q-date__edit-range:nth-child(7n-6):after{border-top-left-radius:0;border-bottom-left-radius:0}.q-date__edit-range:nth-child(7n):after{border-top-right-radius:0;border-bottom-right-radius:0}.q-date__edit-range-from:after,.q-date__edit-range-from-to:after{left:4px;border-left-color:currentColor;border-top-color:currentColor;border-bottom-color:currentColor;border-top-left-radius:28px;border-bottom-left-radius:28px}.q-date__edit-range-to:after,.q-date__edit-range-from-to:after{right:4px;border-right-color:currentColor;border-top-color:currentColor;border-bottom-color:currentColor;border-top-right-radius:28px;border-bottom-right-radius:28px}.q-date__calendar-days-container{height:75%;min-height:192px}.q-date__calendar-days>div{height:16.66%!important}.q-date__event{position:absolute;bottom:2px;left:50%;height:5px;width:8px;border-radius:5px;background-color:var(--q-secondary);transform:translate3d(-50%,0,0)}.q-date__today{box-shadow:0 0 1px 0 currentColor}.q-date__years-content{padding:0 8px}.q-date__years-item,.q-date__months-item{flex:0 0 33.3333%}.q-date.disabled .q-date__header,.q-date.disabled .q-date__content,.q-date--readonly .q-date__header,.q-date--readonly .q-date__content{pointer-events:none}.q-date--readonly .q-date__navigation{display:none}.q-date--portrait{flex-direction:column}.q-date--portrait-standard .q-date__content{height:calc(100% - 86px)}.q-date--portrait-standard .q-date__header{border-top-right-radius:inherit;height:86px}.q-date--portrait-standard .q-date__header-title{align-items:center;height:30px}.q-date--portrait-minimal .q-date__content{height:100%}.q-date--landscape{flex-direction:row;align-items:stretch;min-width:420px}.q-date--landscape>div{display:flex;flex-direction:column}.q-date--landscape .q-date__content{height:100%}.q-date--landscape-standard{min-width:420px}.q-date--landscape-standard .q-date__header{border-bottom-left-radius:inherit;min-width:110px;width:110px}.q-date--landscape-standard .q-date__header-title{flex-direction:column}.q-date--landscape-standard .q-date__header-today{margin-top:12px;margin-left:-8px}.q-date--landscape-minimal{width:310px}.q-date--dark{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f;border-color:#ffffff47}.q-dialog__title{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:.0125em}.q-dialog__progress{font-size:4rem}.q-dialog__inner{outline:0}.q-dialog__inner>div{pointer-events:all;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position;border-radius:4px}.q-dialog__inner--square>div{border-radius:0!important}.q-dialog__inner>.q-card>.q-card__actions .q-btn--rectangle{min-width:64px}.q-dialog__inner--minimized{padding:24px}.q-dialog__inner--minimized>div{max-height:calc(100vh - 48px)}.q-dialog__inner--maximized>div{height:100%;width:100%;max-height:100vh;max-width:100vw;border-radius:0!important;top:0!important;left:0!important}.q-dialog__inner--top,.q-dialog__inner--bottom{padding-top:0!important;padding-bottom:0!important}.q-dialog__inner--right,.q-dialog__inner--left{padding-right:0!important;padding-left:0!important}.q-dialog__inner--left:not(.q-dialog__inner--animating)>div,.q-dialog__inner--top:not(.q-dialog__inner--animating)>div{border-top-left-radius:0}.q-dialog__inner--right:not(.q-dialog__inner--animating)>div,.q-dialog__inner--top:not(.q-dialog__inner--animating)>div{border-top-right-radius:0}.q-dialog__inner--left:not(.q-dialog__inner--animating)>div,.q-dialog__inner--bottom:not(.q-dialog__inner--animating)>div{border-bottom-left-radius:0}.q-dialog__inner--right:not(.q-dialog__inner--animating)>div,.q-dialog__inner--bottom:not(.q-dialog__inner--animating)>div{border-bottom-right-radius:0}.q-dialog__inner--fullwidth>div{width:100%!important;max-width:100%!important}.q-dialog__inner--fullheight>div{height:100%!important;max-height:100%!important}.q-dialog__backdrop{z-index:-1;pointer-events:all;outline:0;background:rgba(0,0,0,.4)}body.platform-ios .q-dialog__inner--minimized>div,body.platform-android:not(.native-mobile) .q-dialog__inner--minimized>div{max-height:calc(100vh - 108px)}body.q-ios-padding .q-dialog__inner{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}body.q-ios-padding .q-dialog__inner>div{max-height:calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom))!important}@media (max-width: 599.98px){.q-dialog__inner--top,.q-dialog__inner--bottom{padding-left:0;padding-right:0}.q-dialog__inner--top>div,.q-dialog__inner--bottom>div{width:100%!important}}@media (min-width: 600px){.q-dialog__inner--minimized>div{max-width:560px}}.q-body--dialog{overflow:hidden}.q-bottom-sheet{padding-bottom:8px}.q-bottom-sheet__avatar{border-radius:50%}.q-bottom-sheet--list{width:400px}.q-bottom-sheet--list .q-icon,.q-bottom-sheet--list img{font-size:24px;width:24px;height:24px}.q-bottom-sheet--grid{width:700px}.q-bottom-sheet--grid .q-bottom-sheet__item{padding:8px;text-align:center;min-width:100px}.q-bottom-sheet--grid .q-icon,.q-bottom-sheet--grid img,.q-bottom-sheet--grid .q-bottom-sheet__empty-icon{font-size:48px;width:48px;height:48px;margin-bottom:8px}.q-bottom-sheet--grid .q-separator{margin:12px 0}.q-bottom-sheet__item{flex:0 0 33.3333%}@media (min-width: 600px){.q-bottom-sheet__item{flex:0 0 25%}}.q-dialog-plugin{width:400px}.q-dialog-plugin__form{max-height:50vh}.q-dialog-plugin .q-card__section+.q-card__section{padding-top:0}.q-dialog-plugin--progress{text-align:center}.q-editor{border:1px solid rgba(0,0,0,.12);border-radius:4px;background-color:#fff}.q-editor.disabled{border-style:dashed}.q-editor>div:first-child,.q-editor__toolbars-container,.q-editor__toolbars-container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-editor__content{outline:0;padding:10px;min-height:10em;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;overflow:auto;max-width:100%}.q-editor__content pre{white-space:pre-wrap}.q-editor__content hr{border:0;outline:0;margin:1px;height:1px;background:rgba(0,0,0,.12)}.q-editor__content:empty:not(:focus):before{content:attr(placeholder);opacity:.7}.q-editor__toolbar{border-bottom:1px solid rgba(0,0,0,.12);min-height:32px}.q-editor__toolbars-container{max-width:100%}.q-editor .q-btn{margin:4px}.q-editor__toolbar-group{position:relative;margin:0 4px}.q-editor__toolbar-group+.q-editor__toolbar-group:before{content:"";position:absolute;left:-4px;top:4px;bottom:4px;width:1px;background:rgba(0,0,0,.12)}.q-editor__link-input{color:inherit;text-decoration:none;text-transform:none;border:none;border-radius:0;background:none;outline:0}.q-editor--flat,.q-editor--flat .q-editor__toolbar{border:0}.q-editor--dense .q-editor__toolbar-group{display:flex;align-items:center;flex-wrap:nowrap}.q-editor--dark{border-color:#ffffff47}.q-editor--dark .q-editor__content hr{background:rgba(255,255,255,.28)}.q-editor--dark .q-editor__toolbar{border-color:#ffffff47}.q-editor--dark .q-editor__toolbar-group+.q-editor__toolbar-group:before{background:rgba(255,255,255,.28)}.q-expansion-item__border{opacity:0}.q-expansion-item__toggle-icon{position:relative;transition:transform .3s}.q-expansion-item__toggle-icon--rotated{transform:rotate(180deg)}.q-expansion-item__toggle-focus{width:1em!important;height:1em!important;position:relative!important}.q-expansion-item__toggle-focus+.q-expansion-item__toggle-icon{margin-top:-1em}.q-expansion-item--standard.q-expansion-item--expanded>div>.q-expansion-item__border{opacity:1}.q-expansion-item--popup{transition:padding .5s}.q-expansion-item--popup>.q-expansion-item__container{border:1px solid rgba(0,0,0,.12)}.q-expansion-item--popup>.q-expansion-item__container>.q-separator{display:none}.q-expansion-item--popup.q-expansion-item--collapsed{padding:0 15px}.q-expansion-item--popup.q-expansion-item--expanded{padding:15px 0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--expanded{padding-top:0}.q-expansion-item--popup.q-expansion-item--collapsed:not(:first-child)>.q-expansion-item__container{border-top-width:0}.q-expansion-item--popup.q-expansion-item--expanded+.q-expansion-item--popup.q-expansion-item--collapsed>.q-expansion-item__container{border-top-width:1px}.q-expansion-item__content>.q-card{box-shadow:none;border-radius:0}.q-expansion-item:first-child>div>.q-expansion-item__border--top{opacity:0}.q-expansion-item:last-child>div>.q-expansion-item__border--bottom{opacity:0}.q-expansion-item--expanded+.q-expansion-item--expanded>div>.q-expansion-item__border--top{opacity:0}.q-expansion-item--expanded .q-textarea--autogrow textarea{animation:q-expansion-done 0s}@keyframes q-expansion-done{0%{--q-exp-done: 1}}.z-fab{z-index:990}.q-fab{position:relative;vertical-align:middle}.q-fab>.q-btn{width:100%}.q-fab--form-rounded{border-radius:28px}.q-fab--form-square{border-radius:4px}.q-fab__icon,.q-fab__active-icon{transition:opacity .4s,transform .4s}.q-fab__icon{opacity:1;transform:rotate(0)}.q-fab__active-icon{opacity:0;transform:rotate(-180deg)}.q-fab__label--external{position:absolute;padding:0 8px;transition:opacity .18s cubic-bezier(.65,.815,.735,.395)}.q-fab__label--external-hidden{opacity:0;pointer-events:none}.q-fab__label--external-left{top:50%;left:-12px;transform:translate(-100%,-50%)}.q-fab__label--external-right{top:50%;right:-12px;transform:translate(100%,-50%)}.q-fab__label--external-bottom{bottom:-12px;left:50%;transform:translate(-50%,100%)}.q-fab__label--external-top{top:-12px;left:50%;transform:translate(-50%,-100%)}.q-fab__label--internal{padding:0;transition:font-size .12s cubic-bezier(.65,.815,.735,.395),max-height .12s cubic-bezier(.65,.815,.735,.395),opacity .07s cubic-bezier(.65,.815,.735,.395);max-height:30px}.q-fab__label--internal-hidden{font-size:0;opacity:0}.q-fab__label--internal-top{padding-bottom:.12em}.q-fab__label--internal-bottom{padding-top:.12em}.q-fab__label--internal-top.q-fab__label--internal-hidden,.q-fab__label--internal-bottom.q-fab__label--internal-hidden{max-height:0}.q-fab__label--internal-left{padding-left:.285em;padding-right:.571em}.q-fab__label--internal-right{padding-right:.285em;padding-left:.571em}.q-fab__icon-holder{min-width:24px;min-height:24px;position:relative}.q-fab__icon-holder--opened .q-fab__icon{transform:rotate(180deg);opacity:0}.q-fab__icon-holder--opened .q-fab__active-icon{transform:rotate(0);opacity:1}.q-fab__actions{position:absolute;opacity:0;transition:transform .18s ease-in,opacity .18s ease-in;pointer-events:none;align-items:center;justify-content:center;align-self:center;padding:3px}.q-fab__actions .q-btn{margin:5px}.q-fab__actions--right{transform-origin:0 50%;transform:scale(.4) translate(-62px);height:56px;left:100%;margin-left:9px}.q-fab__actions--left{transform-origin:100% 50%;transform:scale(.4) translate(62px);height:56px;right:100%;margin-right:9px;flex-direction:row-reverse}.q-fab__actions--up{transform-origin:50% 100%;transform:scale(.4) translateY(62px);width:56px;bottom:100%;margin-bottom:9px;flex-direction:column-reverse}.q-fab__actions--down{transform-origin:50% 0;transform:scale(.4) translateY(-62px);width:56px;top:100%;margin-top:9px;flex-direction:column}.q-fab__actions--up,.q-fab__actions--down{left:50%;margin-left:-28px}.q-fab__actions--opened{opacity:1;transform:scale(1) translate(.1px);pointer-events:all}.q-fab--align-left>.q-fab__actions--up,.q-fab--align-left>.q-fab__actions--down{align-items:flex-start;left:28px}.q-fab--align-right>.q-fab__actions--up,.q-fab--align-right>.q-fab__actions--down{align-items:flex-end;left:auto;right:0}.q-field{font-size:14px}.q-field ::-ms-clear,.q-field ::-ms-reveal{display:none}.q-field--with-bottom{padding-bottom:20px}.q-field__marginal{height:56px;color:#0000008a;font-size:24px}.q-field__marginal>*+*{margin-left:2px}.q-field__marginal .q-avatar{font-size:32px}.q-field__before,.q-field__prepend{padding-right:12px}.q-field__after,.q-field__append{padding-left:12px}.q-field__after:empty,.q-field__append:empty{display:none}.q-field__append+.q-field__append{padding-left:2px}.q-field__inner{text-align:left}.q-field__bottom{font-size:12px;min-height:20px;line-height:1;color:#0000008a;padding:8px 12px 0;backface-visibility:hidden}.q-field__bottom--animated{transform:translateY(100%);position:absolute;left:0;right:0;bottom:0}.q-field__messages{line-height:1}.q-field__messages>div{word-break:break-word;word-wrap:break-word;overflow-wrap:break-word}.q-field__messages>div+div{margin-top:4px}.q-field__counter{padding-left:8px;line-height:1}.q-field--item-aligned{padding:8px 16px}.q-field--item-aligned .q-field__before{min-width:56px}.q-field__control-container{height:inherit}.q-field__control{color:var(--q-primary);height:56px;max-width:100%;outline:none}.q-field__control:before,.q-field__control:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.q-field__control:before{border-radius:inherit}.q-field__shadow{top:8px;opacity:0;overflow:hidden;white-space:pre-wrap;transition:opacity .36s cubic-bezier(.4,0,.2,1)}.q-field__shadow+.q-field__native::placeholder{transition:opacity .36s cubic-bezier(.4,0,.2,1)}.q-field__shadow+.q-field__native:focus::placeholder{opacity:0}.q-field__native,.q-field__prefix,.q-field__suffix,.q-field__input{font-weight:400;line-height:28px;letter-spacing:.00937em;text-decoration:inherit;text-transform:inherit;border:none;border-radius:0;background:none;color:#000000de;outline:0;padding:6px 0}.q-field__native,.q-field__input{width:100%;min-width:0;outline:0!important;user-select:auto}.q-field__native:-webkit-autofill,.q-field__input:-webkit-autofill{-webkit-animation-name:q-autofill;-webkit-animation-fill-mode:both}.q-field__native:-webkit-autofill+.q-field__label,.q-field__input:-webkit-autofill+.q-field__label{transform:translateY(-40%) scale(.75)}.q-field__native[type=color]+.q-field__label,.q-field__native[type=date]+.q-field__label,.q-field__native[type=datetime-local]+.q-field__label,.q-field__native[type=month]+.q-field__label,.q-field__native[type=time]+.q-field__label,.q-field__native[type=week]+.q-field__label,.q-field__input[type=color]+.q-field__label,.q-field__input[type=date]+.q-field__label,.q-field__input[type=datetime-local]+.q-field__label,.q-field__input[type=month]+.q-field__label,.q-field__input[type=time]+.q-field__label,.q-field__input[type=week]+.q-field__label{transform:translateY(-40%) scale(.75)}.q-field__native:invalid,.q-field__input:invalid{box-shadow:none}.q-field__native[type=file]{line-height:1em}.q-field__input{padding:0;height:0;min-height:24px;line-height:24px}.q-field__prefix,.q-field__suffix{transition:opacity .36s cubic-bezier(.4,0,.2,1);white-space:nowrap}.q-field__prefix{padding-right:4px}.q-field__suffix{padding-left:4px}.q-field--readonly .q-placeholder,.q-field--disabled .q-placeholder{opacity:1!important}.q-field--readonly.q-field--labeled .q-field__native,.q-field--readonly.q-field--labeled .q-field__input{cursor:default}.q-field--readonly.q-field--float .q-field__native,.q-field--readonly.q-field--float .q-field__input{cursor:text}.q-field--disabled .q-field__inner{cursor:not-allowed}.q-field--disabled .q-field__control{pointer-events:none}.q-field--disabled .q-field__control>div{opacity:.6!important}.q-field--disabled .q-field__control>div,.q-field--disabled .q-field__control>div *{outline:0!important}.q-field__label{left:0;top:18px;max-width:100%;color:#0009;font-size:16px;line-height:20px;font-weight:400;letter-spacing:.00937em;text-decoration:inherit;text-transform:inherit;transform-origin:left top;transition:transform .36s cubic-bezier(.4,0,.2,1),max-width .324s cubic-bezier(.4,0,.2,1);backface-visibility:hidden}.q-field--float .q-field__label{max-width:133%;transform:translateY(-40%) scale(.75);transition:transform .36s cubic-bezier(.4,0,.2,1),max-width .396s cubic-bezier(.4,0,.2,1)}.q-field--highlighted .q-field__label{color:currentColor}.q-field--highlighted .q-field__shadow{opacity:.5}.q-field--filled .q-field__control{padding:0 12px;background:rgba(0,0,0,.05);border-radius:4px 4px 0 0}.q-field--filled .q-field__control:before{background:rgba(0,0,0,.05);border-bottom:1px solid rgba(0,0,0,.42);opacity:0;transition:opacity .36s cubic-bezier(.4,0,.2,1),background .36s cubic-bezier(.4,0,.2,1)}.q-field--filled .q-field__control:hover:before{opacity:1}.q-field--filled .q-field__control:after{height:2px;top:auto;transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor;transition:transform .36s cubic-bezier(.4,0,.2,1)}.q-field--filled.q-field--rounded .q-field__control{border-radius:28px 28px 0 0}.q-field--filled.q-field--highlighted .q-field__control:before{opacity:1;background:rgba(0,0,0,.12)}.q-field--filled.q-field--highlighted .q-field__control:after{transform:scaleZ(1)}.q-field--filled.q-field--dark .q-field__control,.q-field--filled.q-field--dark .q-field__control:before{background:rgba(255,255,255,.07)}.q-field--filled.q-field--dark.q-field--highlighted .q-field__control:before{background:rgba(255,255,255,.1)}.q-field--filled.q-field--readonly .q-field__control:before{opacity:1;background:transparent;border-bottom-style:dashed}.q-field--outlined .q-field__control{border-radius:4px;padding:0 12px}.q-field--outlined .q-field__control:before{border:1px solid rgba(0,0,0,.24);transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--outlined .q-field__control:hover:before{border-color:#000}.q-field--outlined .q-field__control:after{height:inherit;border-radius:inherit;border:2px solid transparent;transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--outlined .q-field__native:-webkit-autofill,.q-field--outlined .q-field__input:-webkit-autofill{margin-top:1px;margin-bottom:1px}.q-field--outlined.q-field--rounded .q-field__control{border-radius:28px}.q-field--outlined.q-field--highlighted .q-field__control:hover:before{border-color:transparent}.q-field--outlined.q-field--highlighted .q-field__control:after{border-color:currentColor;border-width:2px;transform:scaleZ(1)}.q-field--outlined.q-field--readonly .q-field__control:before{border-style:dashed}.q-field--standard .q-field__control:before{border-bottom:1px solid rgba(0,0,0,.24);transition:border-color .36s cubic-bezier(.4,0,.2,1)}.q-field--standard .q-field__control:hover:before{border-color:#000}.q-field--standard .q-field__control:after{height:2px;top:auto;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;transform-origin:center bottom;transform:scale3d(0,1,1);background:currentColor;transition:transform .36s cubic-bezier(.4,0,.2,1)}.q-field--standard.q-field--highlighted .q-field__control:after{transform:scaleZ(1)}.q-field--standard.q-field--readonly .q-field__control:before{border-bottom-style:dashed}.q-field--dark .q-field__control:before{border-color:#fff9}.q-field--dark .q-field__control:hover:before{border-color:#fff}.q-field--dark .q-field__native,.q-field--dark .q-field__prefix,.q-field--dark .q-field__suffix,.q-field--dark .q-field__input{color:#fff}.q-field--dark:not(.q-field--highlighted) .q-field__label,.q-field--dark .q-field__marginal,.q-field--dark .q-field__bottom{color:#ffffffb3}.q-field--standout .q-field__control{padding:0 12px;background:rgba(0,0,0,.05);border-radius:4px;transition:box-shadow .36s cubic-bezier(.4,0,.2,1),background-color .36s cubic-bezier(.4,0,.2,1)}.q-field--standout .q-field__control:before{background:rgba(0,0,0,.07);opacity:0;transition:opacity .36s cubic-bezier(.4,0,.2,1),background .36s cubic-bezier(.4,0,.2,1)}.q-field--standout .q-field__control:hover:before{opacity:1}.q-field--standout.q-field--rounded .q-field__control{border-radius:28px}.q-field--standout.q-field--highlighted .q-field__control{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;background:#000}.q-field--standout.q-field--highlighted .q-field__native,.q-field--standout.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--highlighted .q-field__suffix,.q-field--standout.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--highlighted .q-field__append,.q-field--standout.q-field--highlighted .q-field__input{color:#fff}.q-field--standout.q-field--readonly .q-field__control:before{opacity:1;background:transparent;border:1px dashed rgba(0,0,0,.24)}.q-field--standout.q-field--dark .q-field__control{background:rgba(255,255,255,.07)}.q-field--standout.q-field--dark .q-field__control:before{background:rgba(255,255,255,.07)}.q-field--standout.q-field--dark.q-field--highlighted .q-field__control{background:#fff}.q-field--standout.q-field--dark.q-field--highlighted .q-field__native,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prefix,.q-field--standout.q-field--dark.q-field--highlighted .q-field__suffix,.q-field--standout.q-field--dark.q-field--highlighted .q-field__prepend,.q-field--standout.q-field--dark.q-field--highlighted .q-field__append,.q-field--standout.q-field--dark.q-field--highlighted .q-field__input{color:#000}.q-field--standout.q-field--dark.q-field--readonly .q-field__control:before{border-color:#ffffff3d}.q-field--labeled .q-field__native,.q-field--labeled .q-field__prefix,.q-field--labeled .q-field__suffix{line-height:24px;padding-top:24px;padding-bottom:8px}.q-field--labeled .q-field__shadow{top:0}.q-field--labeled:not(.q-field--float) .q-field__prefix,.q-field--labeled:not(.q-field--float) .q-field__suffix{opacity:0}.q-field--labeled:not(.q-field--float) .q-field__native::-webkit-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__input::-webkit-input-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__native::-moz-placeholder,.q-field--labeled:not(.q-field--float) .q-field__input::-moz-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__native:-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__input:-ms-input-placeholder{color:transparent!important}.q-field--labeled:not(.q-field--float) .q-field__native::-ms-input-placeholder,.q-field--labeled:not(.q-field--float) .q-field__input::-ms-input-placeholder{color:transparent}.q-field--labeled:not(.q-field--float) .q-field__native::placeholder,.q-field--labeled:not(.q-field--float) .q-field__input::placeholder{color:transparent}.q-field--labeled.q-field--dense .q-field__native,.q-field--labeled.q-field--dense .q-field__prefix,.q-field--labeled.q-field--dense .q-field__suffix{padding-top:14px;padding-bottom:2px}.q-field--dense .q-field__shadow{top:0}.q-field--dense .q-field__control,.q-field--dense .q-field__marginal{height:40px}.q-field--dense .q-field__bottom{font-size:11px}.q-field--dense .q-field__label{font-size:14px;top:10px}.q-field--dense .q-field__before,.q-field--dense .q-field__prepend{padding-right:6px}.q-field--dense .q-field__after,.q-field--dense .q-field__append{padding-left:6px}.q-field--dense .q-field__append+.q-field__append{padding-left:2px}.q-field--dense .q-field__marginal .q-avatar{font-size:24px}.q-field--dense.q-field--float .q-field__label{transform:translateY(-30%) scale(.75)}.q-field--dense .q-field__native:-webkit-autofill+.q-field__label,.q-field--dense .q-field__input:-webkit-autofill+.q-field__label{transform:translateY(-30%) scale(.75)}.q-field--dense .q-field__native[type=color]+.q-field__label,.q-field--dense .q-field__native[type=date]+.q-field__label,.q-field--dense .q-field__native[type=datetime-local]+.q-field__label,.q-field--dense .q-field__native[type=month]+.q-field__label,.q-field--dense .q-field__native[type=time]+.q-field__label,.q-field--dense .q-field__native[type=week]+.q-field__label,.q-field--dense .q-field__input[type=color]+.q-field__label,.q-field--dense .q-field__input[type=date]+.q-field__label,.q-field--dense .q-field__input[type=datetime-local]+.q-field__label,.q-field--dense .q-field__input[type=month]+.q-field__label,.q-field--dense .q-field__input[type=time]+.q-field__label,.q-field--dense .q-field__input[type=week]+.q-field__label{transform:translateY(-30%) scale(.75)}.q-field--borderless .q-field__bottom,.q-field--borderless.q-field--dense .q-field__control,.q-field--standard .q-field__bottom,.q-field--standard.q-field--dense .q-field__control{padding-left:0;padding-right:0}.q-field--error .q-field__label{animation:q-field-label .36s}.q-field--error .q-field__bottom{color:var(--q-negative)}.q-field__focusable-action{opacity:.6;cursor:pointer;outline:0!important;border:0;color:inherit;background:transparent;padding:0}.q-field__focusable-action:hover,.q-field__focusable-action:focus{opacity:1}.q-field--auto-height .q-field__control{height:auto}.q-field--auto-height .q-field__control,.q-field--auto-height .q-field__native{min-height:56px}.q-field--auto-height .q-field__native{align-items:center}.q-field--auto-height .q-field__control-container{padding-top:0}.q-field--auto-height .q-field__native,.q-field--auto-height .q-field__prefix,.q-field--auto-height .q-field__suffix{line-height:18px}.q-field--auto-height.q-field--labeled .q-field__control-container{padding-top:24px}.q-field--auto-height.q-field--labeled .q-field__shadow{top:24px}.q-field--auto-height.q-field--labeled .q-field__native,.q-field--auto-height.q-field--labeled .q-field__prefix,.q-field--auto-height.q-field--labeled .q-field__suffix{padding-top:0}.q-field--auto-height.q-field--labeled .q-field__native{min-height:24px}.q-field--auto-height.q-field--dense .q-field__control,.q-field--auto-height.q-field--dense .q-field__native{min-height:40px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__control-container{padding-top:14px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__shadow{top:14px}.q-field--auto-height.q-field--dense.q-field--labeled .q-field__native{min-height:24px}.q-field--square .q-field__control{border-radius:0!important}.q-transition--field-message-enter-active,.q-transition--field-message-leave-active{transition:transform .6s cubic-bezier(.86,0,.07,1),opacity .6s cubic-bezier(.86,0,.07,1)}.q-transition--field-message-enter-from,.q-transition--field-message-leave-to{opacity:0;transform:translateY(-10px)}.q-transition--field-message-leave-from,.q-transition--field-message-leave-active{position:absolute}@keyframes q-field-label{40%{margin-left:2px}60%,80%{margin-left:-2px}70%,90%{margin-left:2px}}@keyframes q-autofill{to{background:transparent;color:inherit}}.q-file .q-field__native{word-break:break-all;overflow:hidden}.q-file .q-field__input{opacity:0!important}.q-file .q-field__input::-webkit-file-upload-button{cursor:pointer}.q-file__filler{visibility:hidden;width:100%;border:none;padding:0}.q-file__dnd{outline:1px dashed currentColor;outline-offset:-4px}.q-form{position:relative}.q-img{position:relative;width:100%;display:inline-block;vertical-align:middle;overflow:hidden}.q-img__loading .q-spinner{font-size:50px}.q-img__container{border-radius:inherit;font-size:0}.q-img__image{border-radius:inherit;width:100%;height:100%;opacity:0}.q-img__image--with-transition{transition:opacity .28s ease-in}.q-img__image--loaded{opacity:1}.q-img__content{border-radius:inherit;pointer-events:none}.q-img__content>div{pointer-events:all;position:absolute;padding:16px;color:#fff;background:rgba(0,0,0,.47)}.q-img--no-menu .q-img__image,.q-img--no-menu .q-img__placeholder{pointer-events:none}.q-inner-loading{background:rgba(255,255,255,.6)}.q-inner-loading--dark{background:rgba(0,0,0,.4)}.q-inner-loading__label{margin-top:8px}.q-textarea .q-field__control{min-height:56px;height:auto}.q-textarea .q-field__control-container{padding-top:2px;padding-bottom:2px}.q-textarea .q-field__shadow{top:2px;bottom:2px}.q-textarea .q-field__native,.q-textarea .q-field__prefix,.q-textarea .q-field__suffix{line-height:18px}.q-textarea .q-field__native{resize:vertical;padding-top:17px;min-height:52px}.q-textarea.q-field--labeled .q-field__control-container{padding-top:26px}.q-textarea.q-field--labeled .q-field__shadow{top:26px}.q-textarea.q-field--labeled .q-field__native,.q-textarea.q-field--labeled .q-field__prefix,.q-textarea.q-field--labeled .q-field__suffix{padding-top:0}.q-textarea.q-field--labeled .q-field__native{min-height:26px;padding-top:1px}.q-textarea--autogrow .q-field__native{resize:none}.q-textarea.q-field--dense .q-field__control,.q-textarea.q-field--dense .q-field__native{min-height:36px}.q-textarea.q-field--dense .q-field__native{padding-top:9px}.q-textarea.q-field--dense.q-field--labeled .q-field__control-container{padding-top:14px}.q-textarea.q-field--dense.q-field--labeled .q-field__shadow{top:14px}.q-textarea.q-field--dense.q-field--labeled .q-field__native{min-height:24px;padding-top:3px}.q-textarea.q-field--dense.q-field--labeled .q-field__prefix,.q-textarea.q-field--dense.q-field--labeled .q-field__suffix{padding-top:2px}body.mobile .q-textarea .q-field__native,.q-textarea.disabled .q-field__native{resize:none}.q-intersection{position:relative}.q-item{min-height:48px;padding:8px 16px;color:inherit;transition:color .3s,background-color .3s}.q-item__section--side{color:#757575;align-items:flex-start;padding-right:16px;width:auto;min-width:0;max-width:100%}.q-item__section--side>.q-icon{font-size:24px}.q-item__section--side>.q-avatar{font-size:40px}.q-item__section--avatar{color:inherit;min-width:56px}.q-item__section--thumbnail img{width:100px;height:56px}.q-item__section--nowrap{white-space:nowrap}.q-item>.q-item__section--thumbnail:first-child,.q-item>.q-focus-helper+.q-item__section--thumbnail{margin-left:-16px}.q-item>.q-item__section--thumbnail:last-of-type{margin-right:-16px}.q-item__label{line-height:1.2em!important;max-width:100%}.q-item__label--overline{color:#000000b3}.q-item__label--caption{color:#0000008a}.q-item__label--header{color:#757575;padding:16px;font-size:.875rem;line-height:1.25rem;letter-spacing:.01786em}.q-separator--spaced+.q-item__label--header,.q-list--padding .q-item__label--header{padding-top:8px}.q-item__label+.q-item__label{margin-top:4px}.q-item__section--main{width:auto;min-width:0;max-width:100%;flex:10000 1 0%}.q-item__section--main+.q-item__section--main{margin-left:8px}.q-item__section--main~.q-item__section--side{align-items:flex-end;padding-right:0;padding-left:16px}.q-item__section--main.q-item__section--thumbnail{margin-left:0;margin-right:-16px}.q-list--bordered{border:1px solid rgba(0,0,0,.12)}.q-list--separator>.q-item-type+.q-item-type,.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top:1px solid rgba(0,0,0,.12)}.q-list--padding{padding:8px 0}.q-list--dense>.q-item,.q-item--dense{min-height:32px;padding:2px 16px}.q-list--dark.q-list--separator>.q-item-type+.q-item-type,.q-list--dark.q-list--separator>.q-virtual-scroll__content>.q-item-type+.q-item-type{border-top-color:#ffffff47}.q-list--dark,.q-item--dark{color:#fff;border-color:#ffffff47}.q-list--dark .q-item__section--side:not(.q-item__section--avatar),.q-item--dark .q-item__section--side:not(.q-item__section--avatar){color:#ffffffb3}.q-list--dark .q-item__label--header,.q-item--dark .q-item__label--header{color:#ffffffa3}.q-list--dark .q-item__label--overline,.q-list--dark .q-item__label--caption,.q-item--dark .q-item__label--overline,.q-item--dark .q-item__label--caption{color:#fffc}.q-item{position:relative}.q-item.q-router-link--active,.q-item--active{color:var(--q-primary)}.q-knob{font-size:48px}.q-knob--editable{cursor:pointer;outline:0}.q-knob--editable:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;box-shadow:none;transition:box-shadow .24s ease-in-out}.q-knob--editable:focus:before{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f}body.body--dark .q-knob--editable:focus:before{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-layout{width:100%;outline:0}.q-layout-container{position:relative;width:100%;height:100%}.q-layout-container .q-layout{min-height:100%}.q-layout-container>div{transform:translateZ(0)}.q-layout-container>div>div{min-height:0;max-height:100%}.q-layout__shadow{width:100%}.q-layout__shadow:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;box-shadow:0 0 10px 2px #0003,0 0 10px #0000003d}.q-layout__section--marginal{background-color:var(--q-primary);color:#fff}.q-header--hidden{transform:translateY(-110%)}.q-header--bordered{border-bottom:1px solid rgba(0,0,0,.12)}.q-header .q-layout__shadow{bottom:-10px}.q-header .q-layout__shadow:after{bottom:10px}.q-footer--hidden{transform:translateY(110%)}.q-footer--bordered{border-top:1px solid rgba(0,0,0,.12)}.q-footer .q-layout__shadow{top:-10px}.q-footer .q-layout__shadow:after{top:10px}.q-header,.q-footer{z-index:2000}.q-drawer{position:absolute;top:0;bottom:0;background:#fff;z-index:1000}.q-drawer--on-top{z-index:3000}.q-drawer--left{left:0;transform:translate(-100%)}.q-drawer--left.q-drawer--bordered{border-right:1px solid rgba(0,0,0,.12)}.q-drawer--left .q-layout__shadow{left:10px;right:-10px}.q-drawer--left .q-layout__shadow:after{right:10px}.q-drawer--right{right:0;transform:translate(100%)}.q-drawer--right.q-drawer--bordered{border-left:1px solid rgba(0,0,0,.12)}.q-drawer--right .q-layout__shadow{left:-10px}.q-drawer--right .q-layout__shadow:after{left:10px}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini{padding:0!important}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section{text-align:center;justify-content:center;padding-left:0;padding-right:0;min-width:0}.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__label,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--main,.q-drawer-container:not(.q-drawer--mini-animate) .q-drawer--mini .q-item__section--side~.q-item__section--side{display:none}.q-drawer--mini .q-mini-drawer-hide,.q-drawer--mini .q-expansion-item__content{display:none}.q-drawer--mini-animate .q-drawer__content{overflow-x:hidden!important;white-space:nowrap}.q-drawer--standard .q-mini-drawer-only,.q-drawer--mobile .q-mini-drawer-only,.q-drawer--mobile .q-mini-drawer-hide{display:none}.q-drawer__backdrop{z-index:2999!important;will-change:background-color}.q-drawer__opener{z-index:2001;height:100%;width:15px;user-select:none}.q-layout,.q-header,.q-footer,.q-page{position:relative}.q-page-sticky--shrink{pointer-events:none}.q-page-sticky--shrink>div{display:inline-block;pointer-events:auto}body.q-ios-padding .q-layout--standard .q-header>.q-toolbar:nth-child(1),body.q-ios-padding .q-layout--standard .q-header>.q-tabs:nth-child(1) .q-tabs-head,body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content{padding-top:20px;min-height:70px;padding-top:env(safe-area-inset-top);min-height:calc(env(safe-area-inset-top) + 50px)}body.q-ios-padding .q-layout--standard .q-footer>.q-toolbar:last-child,body.q-ios-padding .q-layout--standard .q-footer>.q-tabs:last-child .q-tabs-head,body.q-ios-padding .q-layout--standard .q-drawer--top-padding .q-drawer__content{padding-bottom:env(safe-area-inset-bottom);min-height:calc(env(safe-area-inset-bottom) + 50px)}.q-body--layout-animate .q-drawer__backdrop{transition:background-color .12s!important}.q-body--layout-animate .q-drawer{transition:transform .12s,width .12s,top .12s,bottom .12s!important}.q-body--layout-animate .q-layout__section--marginal{transition:transform .12s,left .12s,right .12s!important}.q-body--layout-animate .q-page-container{transition:padding-top .12s,padding-right .12s,padding-bottom .12s,padding-left .12s!important}.q-body--layout-animate .q-page-sticky{transition:transform .12s,left .12s,right .12s,top .12s,bottom .12s!important}body:not(.q-body--layout-animate) .q-layout--prevent-focus{visibility:hidden}.q-body--drawer-toggle{overflow-x:hidden!important}@media (max-width: 599.98px){.q-layout-padding{padding:8px}}@media (min-width: 600px) and (max-width: 1439.98px){.q-layout-padding{padding:16px}}@media (min-width: 1440px){.q-layout-padding{padding:24px}}body.body--dark .q-header,body.body--dark .q-footer,body.body--dark .q-drawer{border-color:#ffffff47}body.body--dark .q-layout__shadow:after{box-shadow:0 0 10px 2px #fff3,0 0 10px #ffffff3d}body.platform-ios .q-layout--containerized{position:unset!important}.q-linear-progress{--q-linear-progress-speed: .3s;position:relative;width:100%;overflow:hidden;font-size:4px;height:1em;color:var(--q-primary);transform:scaleZ(1)}.q-linear-progress__model,.q-linear-progress__track{transform-origin:0 0}.q-linear-progress__model--with-transition,.q-linear-progress__track--with-transition{transition:transform var(--q-linear-progress-speed)}.q-linear-progress--reverse .q-linear-progress__model,.q-linear-progress--reverse .q-linear-progress__track{transform-origin:0 100%}.q-linear-progress__model--determinate{background:currentColor}.q-linear-progress__model--indeterminate,.q-linear-progress__model--query{transition:none}.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--query:before,.q-linear-progress__model--query:after{background:currentColor;content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:0 0}.q-linear-progress__model--indeterminate:before,.q-linear-progress__model--query:before{animation:q-linear-progress--indeterminate 2.1s cubic-bezier(.65,.815,.735,.395) infinite}.q-linear-progress__model--indeterminate:after,.q-linear-progress__model--query:after{transform:translate3d(-101%,0,0) scaleZ(1);animation:q-linear-progress--indeterminate-short 2.1s cubic-bezier(.165,.84,.44,1) infinite;animation-delay:1.15s}.q-linear-progress__track{opacity:.4}.q-linear-progress__track--light{background:rgba(0,0,0,.26)}.q-linear-progress__track--dark{background:rgba(255,255,255,.6)}.q-linear-progress__stripe{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,rgba(255,255,255,0) 25%,rgba(255,255,255,0) 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,rgba(255,255,255,0) 75%,rgba(255,255,255,0))!important;background-size:40px 40px!important}.q-linear-progress__stripe--with-transition{transition:width var(--q-linear-progress-speed)}@keyframes q-linear-progress--indeterminate{0%{transform:translate3d(-35%,0,0) scale3d(.35,1,1)}60%{transform:translate3d(100%,0,0) scale3d(.9,1,1)}to{transform:translate3d(100%,0,0) scale3d(.9,1,1)}}@keyframes q-linear-progress--indeterminate-short{0%{transform:translate3d(-101%,0,0) scaleZ(1)}60%{transform:translate3d(107%,0,0) scale3d(.01,1,1)}to{transform:translate3d(107%,0,0) scale3d(.01,1,1)}}.q-menu{position:fixed!important;display:inline-block;max-width:95vw;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;background:#fff;border-radius:4px;overflow-y:auto;overflow-x:hidden;outline:0;max-height:65vh;z-index:6000}.q-menu--square{border-radius:0}.q-menu--dark{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-option-group--inline>div{display:inline-block}.q-pagination input{text-align:center;-moz-appearance:textfield}.q-pagination input::-webkit-outer-spin-button,.q-pagination input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.q-pagination__content{--q-pagination-gutter-parent: -2px;--q-pagination-gutter-child: 2px;margin-top:var(--q-pagination-gutter-parent);margin-left:var(--q-pagination-gutter-parent)}.q-pagination__content>.q-btn,.q-pagination__content>.q-input,.q-pagination__middle>.q-btn{margin-top:var(--q-pagination-gutter-child);margin-left:var(--q-pagination-gutter-child)}.q-parallax{position:relative;width:100%;overflow:hidden;border-radius:inherit}.q-parallax__media>img,.q-parallax__media>video{position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;will-change:transform;display:none}.q-popup-edit{padding:8px 16px}.q-popup-edit__buttons{margin-top:8px}.q-popup-edit__buttons .q-btn+.q-btn{margin-left:8px}.q-pull-to-refresh{position:relative}.q-pull-to-refresh__puller{border-radius:50%;width:40px;height:40px;color:var(--q-primary);background:#fff;box-shadow:0 0 4px #0000004d}.q-pull-to-refresh__puller--animating{transition:transform .3s,opacity .3s}.q-radio{vertical-align:middle}.q-radio__native{width:1px;height:1px}.q-radio__bg,.q-radio__icon-container{user-select:none}.q-radio__bg{top:25%;left:25%;width:50%;height:50%;-webkit-print-color-adjust:exact}.q-radio__bg path{fill:currentColor}.q-radio__icon{color:currentColor;font-size:.5em}.q-radio__check{transform-origin:50% 50%;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}.q-radio__inner{font-size:40px;width:1em;min-width:1em;height:1em;outline:0;border-radius:50%;color:#0000008a}.q-radio__inner--truthy{color:var(--q-primary)}.q-radio__inner--truthy .q-radio__check{transform:scaleZ(1)}.q-radio.disabled{opacity:.75!important}.q-radio--dark .q-radio__inner{color:#ffffffb3}.q-radio--dark .q-radio__inner:before{opacity:.32!important}.q-radio--dark .q-radio__inner--truthy{color:var(--q-primary)}.q-radio--dense .q-radio__inner{width:.5em;min-width:.5em;height:.5em}.q-radio--dense .q-radio__bg{left:0;top:0;width:100%;height:100%}.q-radio--dense .q-radio__label{padding-left:.5em}.q-radio--dense.reverse .q-radio__label{padding-left:0;padding-right:.5em}body.desktop .q-radio:not(.disabled) .q-radio__inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:.12;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1) 0ms}body.desktop .q-radio:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio:not(.disabled):hover .q-radio__inner:before{transform:scaleZ(1)}body.desktop .q-radio--dense:not(.disabled):focus .q-radio__inner:before,body.desktop .q-radio--dense:not(.disabled):hover .q-radio__inner:before{transform:scale3d(1.5,1.5,1)}.q-rating{color:#ffeb3b;vertical-align:middle}.q-rating__icon-container{height:1em;outline:0}.q-rating__icon-container+.q-rating__icon-container{margin-left:2px}.q-rating__icon{color:currentColor;text-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);position:relative;opacity:.4;transition:transform .2s ease-in,opacity .2s ease-in}.q-rating__icon--hovered{transform:scale(1.3)}.q-rating__icon--active{opacity:1}.q-rating__icon--exselected{opacity:.7}.q-rating--no-dimming .q-rating__icon{opacity:1}.q-rating--editable .q-rating__icon-container{cursor:pointer}.q-responsive{position:relative;max-width:100%;max-height:100%}.q-responsive__filler{width:inherit;max-width:inherit;height:inherit;max-height:inherit}.q-responsive__content{border-radius:inherit}.q-responsive__content>*{width:100%!important;height:100%!important;max-height:100%!important;max-width:100%!important}.q-scrollarea{position:relative;contain:strict}.q-scrollarea__bar,.q-scrollarea__thumb{opacity:.2;transition:opacity .3s;will-change:opacity;cursor:grab}.q-scrollarea__bar--v,.q-scrollarea__thumb--v{right:0;width:10px}.q-scrollarea__bar--h,.q-scrollarea__thumb--h{bottom:0;height:10px}.q-scrollarea__bar--invisible,.q-scrollarea__thumb--invisible{opacity:0!important;pointer-events:none}.q-scrollarea__thumb{background:#000;border-radius:3px}.q-scrollarea__thumb:hover{opacity:.3}.q-scrollarea__thumb:active{opacity:.5}.q-scrollarea__content{min-height:100%;min-width:100%}.q-scrollarea--dark .q-scrollarea__thumb{background:#fff}.q-select--without-input .q-field__control{cursor:pointer}.q-select--with-input .q-field__control{cursor:text}.q-select .q-field__input{min-width:50px!important;cursor:text}.q-select .q-field__input--padding{padding-left:4px}.q-select__focus-target,.q-select__autocomplete-input{position:absolute;outline:0!important;width:1px;height:1px;padding:0;border:0;opacity:0}.q-select__dropdown-icon{cursor:pointer;transition:transform .28s}.q-select.q-field--readonly .q-field__control,.q-select.q-field--readonly .q-select__dropdown-icon{cursor:default}.q-select__dialog{width:90vw!important;max-width:90vw!important;max-height:calc(100vh - 70px)!important;background:#fff;display:flex;flex-direction:column}.q-select__dialog>.scroll{position:relative;background:inherit}body.mobile:not(.native-mobile) .q-select__dialog{max-height:calc(100vh - 108px)!important}body.platform-android.native-mobile .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 24px)!important}body.platform-android:not(.native-mobile) .q-dialog__inner--top .q-select__dialog{max-height:calc(100vh - 80px)!important}body.platform-ios.native-mobile .q-dialog__inner--top>div{border-radius:4px}body.platform-ios.native-mobile .q-dialog__inner--top .q-select__dialog--focused{max-height:47vh!important}body.platform-ios:not(.native-mobile) .q-dialog__inner--top .q-select__dialog--focused{max-height:50vh!important}.q-separator{border:0;background:rgba(0,0,0,.12);margin:0;transition:background .3s,opacity .3s;flex-shrink:0}.q-separator--dark{background:rgba(255,255,255,.28)}.q-separator--horizontal{display:block;height:1px}.q-separator--horizontal-inset{margin-left:16px;margin-right:16px}.q-separator--horizontal-item-inset{margin-left:72px;margin-right:0}.q-separator--horizontal-item-thumbnail-inset{margin-left:116px;margin-right:0}.q-separator--vertical{width:1px;height:auto;align-self:stretch}.q-separator--vertical-inset{margin-top:8px;margin-bottom:8px}.q-skeleton{--q-skeleton-speed: 1.5s;background:rgba(0,0,0,.12);border-radius:4px;box-sizing:border-box}.q-skeleton--anim{cursor:wait}.q-skeleton:before{content:"\\a0"}.q-skeleton--type-text{transform:scaleY(.5)}.q-skeleton--type-circle,.q-skeleton--type-QAvatar{height:48px;width:48px;border-radius:50%}.q-skeleton--type-QBtn{width:90px;height:36px}.q-skeleton--type-QBadge{width:70px;height:16px}.q-skeleton--type-QChip{width:90px;height:28px;border-radius:16px}.q-skeleton--type-QToolbar{height:50px}.q-skeleton--type-QCheckbox,.q-skeleton--type-QRadio{width:40px;height:40px;border-radius:50%}.q-skeleton--type-QToggle{width:56px;height:40px;border-radius:7px}.q-skeleton--type-QSlider,.q-skeleton--type-QRange{height:40px}.q-skeleton--type-QInput{height:56px}.q-skeleton--bordered{border:1px solid rgba(0,0,0,.05)}.q-skeleton--square{border-radius:0}.q-skeleton--anim-fade{animation:q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite}.q-skeleton--anim-pulse{animation:q-skeleton--pulse var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-pulse-x{animation:q-skeleton--pulse-x var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-pulse-y{animation:q-skeleton--pulse-y var(--q-skeleton-speed) ease-in-out .5s infinite}.q-skeleton--anim-wave,.q-skeleton--anim-blink,.q-skeleton--anim-pop{position:relative;overflow:hidden;z-index:1}.q-skeleton--anim-wave:after,.q-skeleton--anim-blink:after,.q-skeleton--anim-pop:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}.q-skeleton--anim-blink:after{background:rgba(255,255,255,.7);animation:q-skeleton--fade var(--q-skeleton-speed) linear .5s infinite}.q-skeleton--anim-wave:after{background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.5),rgba(255,255,255,0));animation:q-skeleton--wave var(--q-skeleton-speed) linear .5s infinite}.q-skeleton--dark{background:rgba(255,255,255,.05)}.q-skeleton--dark.q-skeleton--bordered{border:1px solid rgba(255,255,255,.25)}.q-skeleton--dark.q-skeleton--anim-wave:after{background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.1),rgba(255,255,255,0))}.q-skeleton--dark.q-skeleton--anim-blink:after{background:rgba(255,255,255,.2)}@keyframes q-skeleton--fade{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes q-skeleton--pulse{0%{transform:scale(1)}50%{transform:scale(.85)}to{transform:scale(1)}}@keyframes q-skeleton--pulse-x{0%{transform:scaleX(1)}50%{transform:scaleX(.75)}to{transform:scaleX(1)}}@keyframes q-skeleton--pulse-y{0%{transform:scaleY(1)}50%{transform:scaleY(.75)}to{transform:scaleY(1)}}@keyframes q-skeleton--wave{0%{transform:translate(-100%)}to{transform:translate(100%)}}.q-slide-item{position:relative;background:white}.q-slide-item__left,.q-slide-item__right,.q-slide-item__top,.q-slide-item__bottom{visibility:hidden;font-size:14px;color:#fff}.q-slide-item__left .q-icon,.q-slide-item__right .q-icon,.q-slide-item__top .q-icon,.q-slide-item__bottom .q-icon{font-size:1.714em}.q-slide-item__left{background:#4caf50;padding:8px 16px}.q-slide-item__left>div{transform-origin:left center}.q-slide-item__right{background:#ff9800;padding:8px 16px}.q-slide-item__right>div{transform-origin:right center}.q-slide-item__top{background:#2196f3;padding:16px 8px}.q-slide-item__top>div{transform-origin:top center}.q-slide-item__bottom{background:#9c27b0;padding:16px 8px}.q-slide-item__bottom>div{transform-origin:bottom center}.q-slide-item__content{background:inherit;transition:transform .2s ease-in;user-select:none;cursor:pointer}.q-slider{position:relative}.q-slider--h{width:100%}.q-slider--v{height:200px}.q-slider--editable .q-slider__track-container{cursor:grab}.q-slider__track-container{outline:0}.q-slider__track-container--h{width:100%;padding:12px 0}.q-slider__track-container--h .q-slider__selection{will-change:width,left}.q-slider__track-container--v{height:100%;padding:0 12px}.q-slider__track-container--v .q-slider__selection{will-change:height,top}.q-slider__track{color:var(--q-primary);background:rgba(0,0,0,.1);border-radius:4px;width:inherit;height:inherit}.q-slider__inner{background:rgba(0,0,0,.1);border-radius:inherit;width:100%;height:100%}.q-slider__selection{background:currentColor;border-radius:inherit;width:100%;height:100%}.q-slider__markers{color:#0000004d;border-radius:inherit;width:100%;height:100%}.q-slider__markers:after{content:"";position:absolute;background:currentColor}.q-slider__markers--h{background-image:repeating-linear-gradient(to right,currentColor,currentColor 2px,rgba(255,255,255,0) 0,rgba(255,255,255,0))}.q-slider__markers--h:after{height:100%;width:2px;top:0;right:0}.q-slider__markers--v{background-image:repeating-linear-gradient(to bottom,currentColor,currentColor 2px,rgba(255,255,255,0) 0,rgba(255,255,255,0))}.q-slider__markers--v:after{width:100%;height:2px;left:0;bottom:0}.q-slider__marker-labels-container{position:relative;width:100%;height:100%;min-height:24px;min-width:24px}.q-slider__marker-labels{position:absolute}.q-slider__marker-labels--h-standard{top:0}.q-slider__marker-labels--h-switched{bottom:0}.q-slider__marker-labels--h-ltr{transform:translate(-50%)}.q-slider__marker-labels--h-rtl{transform:translate(50%)}.q-slider__marker-labels--v-standard{left:4px}.q-slider__marker-labels--v-switched{right:4px}.q-slider__marker-labels--v-ltr{transform:translateY(-50%)}.q-slider__marker-labels--v-rtl{transform:translateY(50%)}.q-slider__thumb{z-index:1;outline:0;color:var(--q-primary);transition:transform .18s ease-out,fill .18s ease-out,stroke .18s ease-out}.q-slider__thumb.q-slider--focus{opacity:1!important}.q-slider__thumb--h{top:50%;will-change:left}.q-slider__thumb--h-ltr{transform:scale(1) translate(-50%,-50%)}.q-slider__thumb--h-rtl{transform:scale(1) translate(50%,-50%)}.q-slider__thumb--v{left:50%;will-change:top}.q-slider__thumb--v-ltr{transform:scale(1) translate(-50%,-50%)}.q-slider__thumb--v-rtl{transform:scale(1) translate(-50%,50%)}.q-slider__thumb-shape{top:0;left:0;stroke-width:3.5;stroke:currentColor;transition:transform .28s}.q-slider__thumb-shape path{stroke:currentColor;fill:currentColor}.q-slider__focus-ring{border-radius:50%;opacity:0;transition:transform .26667s ease-out,opacity .26667s ease-out,background-color .26667s ease-out;transition-delay:.14s}.q-slider__pin{opacity:0;white-space:nowrap;transition:opacity .28s ease-out;transition-delay:.14s}.q-slider__pin:before{content:"";width:0;height:0;position:absolute}.q-slider__pin--h:before{border-left:6px solid transparent;border-right:6px solid transparent;left:50%;transform:translate(-50%)}.q-slider__pin--h-standard{bottom:100%}.q-slider__pin--h-standard:before{bottom:2px;border-top:6px solid currentColor}.q-slider__pin--h-switched{top:100%}.q-slider__pin--h-switched:before{top:2px;border-bottom:6px solid currentColor}.q-slider__pin--v{top:0}.q-slider__pin--v:before{top:50%;transform:translateY(-50%);border-top:6px solid transparent;border-bottom:6px solid transparent}.q-slider__pin--v-standard{left:100%}.q-slider__pin--v-standard:before{left:2px;border-right:6px solid currentColor}.q-slider__pin--v-switched{right:100%}.q-slider__pin--v-switched:before{right:2px;border-left:6px solid currentColor}.q-slider__label{z-index:1;white-space:nowrap;position:absolute}.q-slider__label--h{left:50%;transform:translate(-50%)}.q-slider__label--h-standard{bottom:7px}.q-slider__label--h-switched{top:7px}.q-slider__label--v{top:50%;transform:translateY(-50%)}.q-slider__label--v-standard{left:7px}.q-slider__label--v-switched{right:7px}.q-slider__text-container{min-height:25px;padding:2px 8px;border-radius:4px;background:currentColor;position:relative;text-align:center}.q-slider__text{color:#fff;font-size:12px}.q-slider--no-value .q-slider__thumb,.q-slider--no-value .q-slider__inner,.q-slider--no-value .q-slider__selection{opacity:0}.q-slider--focus .q-slider__focus-ring,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__focus-ring{background:currentColor;transform:scale3d(1.55,1.55,1);opacity:.25}.q-slider--focus .q-slider__thumb,.q-slider--focus .q-slider__inner,.q-slider--focus .q-slider__selection,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__thumb,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__inner,body.desktop .q-slider.q-slider--editable .q-slider__track-container:hover .q-slider__selection{opacity:1}.q-slider--inactive .q-slider__thumb--h{transition:left .28s,right .28s}.q-slider--inactive .q-slider__thumb--v{transition:top .28s,bottom .28s}.q-slider--inactive .q-slider__selection{transition:width .28s,left .28s,right .28s,height .28s,top .28s,bottom .28s}.q-slider--inactive .q-slider__text-container{transition:transform .28s}.q-slider--active{cursor:grabbing}.q-slider--active .q-slider__thumb-shape{transform:scale(1.5)}.q-slider--active .q-slider__focus-ring,.q-slider--active.q-slider--label .q-slider__thumb-shape{transform:scale(0)!important}body.desktop .q-slider.q-slider--enabled .q-slider__track-container:hover .q-slider__pin,.q-slider--label.q-slider--active .q-slider__pin,.q-slider--label .q-slider--focus .q-slider__pin,.q-slider--label.q-slider--label-always .q-slider__pin{opacity:1}.q-slider--dark .q-slider__track,.q-slider--dark .q-slider__inner{background:rgba(255,255,255,.1)}.q-slider--dark .q-slider__markers{color:#ffffff4d}.q-slider--dense .q-slider__track-container--h{padding:6px 0}.q-slider--dense .q-slider__track-container--v{padding:0 6px}.q-space{flex-grow:1!important}.q-spinner{vertical-align:middle}.q-spinner-mat{animation:q-spin 2s linear infinite;transform-origin:center center}.q-spinner-mat .path{stroke-dasharray:1,200;stroke-dashoffset:0;animation:q-mat-dash 1.5s ease-in-out infinite}@keyframes q-spin{0%{transform:rotate3d(0,0,1,0)}25%{transform:rotate3d(0,0,1,90deg)}50%{transform:rotate3d(0,0,1,180deg)}75%{transform:rotate3d(0,0,1,270deg)}to{transform:rotate3d(0,0,1,359deg)}}@keyframes q-mat-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}.q-splitter__panel{position:relative;z-index:0}.q-splitter__panel>.q-splitter{width:100%;height:100%}.q-splitter__separator{background-color:#0000001f;user-select:none;position:relative;z-index:1}.q-splitter__separator-area>*{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.q-splitter--dark .q-splitter__separator{background-color:#ffffff47}.q-splitter--vertical>.q-splitter__panel{height:100%}.q-splitter--vertical.q-splitter--active{cursor:col-resize}.q-splitter--vertical>.q-splitter__separator{width:1px}.q-splitter--vertical>.q-splitter__separator>div{left:-6px;right:-6px}.q-splitter--vertical.q-splitter--workable>.q-splitter__separator{cursor:col-resize}.q-splitter--horizontal>.q-splitter__panel{width:100%}.q-splitter--horizontal.q-splitter--active{cursor:row-resize}.q-splitter--horizontal>.q-splitter__separator{height:1px}.q-splitter--horizontal>.q-splitter__separator>div{top:-6px;bottom:-6px}.q-splitter--horizontal.q-splitter--workable>.q-splitter__separator{cursor:row-resize}.q-splitter__before,.q-splitter__after{overflow:auto}.q-stepper{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;background:#fff}.q-stepper__title{font-size:14px;line-height:18px;letter-spacing:.1px}.q-stepper__caption{font-size:12px;line-height:14px}.q-stepper__dot{contain:layout;margin-right:8px;font-size:14px;width:24px;min-width:24px;height:24px;border-radius:50%;background:currentColor}.q-stepper__dot span{color:#fff}.q-stepper__tab{padding:8px 24px;font-size:14px;color:#9e9e9e;flex-direction:row}.q-stepper--dark{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-stepper--dark .q-stepper__dot span{color:#000}.q-stepper__tab--navigation{user-select:none;cursor:pointer}.q-stepper__tab--active,.q-stepper__tab--done{color:var(--q-primary)}.q-stepper__tab--active .q-stepper__dot,.q-stepper__tab--active .q-stepper__label,.q-stepper__tab--done .q-stepper__dot,.q-stepper__tab--done .q-stepper__label{text-shadow:0 0 0 currentColor}.q-stepper__tab--disabled .q-stepper__dot{background:rgba(0,0,0,.22)}.q-stepper__tab--disabled .q-stepper__label{color:#00000052}.q-stepper__tab--error{color:var(--q-negative)}.q-stepper__tab--error-with-icon .q-stepper__dot{background:transparent!important}.q-stepper__tab--error-with-icon .q-stepper__dot span{color:currentColor;font-size:24px}.q-stepper__header{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-stepper__header--border{border-bottom:1px solid rgba(0,0,0,.12)}.q-stepper__header--standard-labels .q-stepper__tab{min-height:72px;justify-content:center}.q-stepper__header--standard-labels .q-stepper__tab:first-child{justify-content:flex-start}.q-stepper__header--standard-labels .q-stepper__tab:last-child{justify-content:flex-end}.q-stepper__header--standard-labels .q-stepper__tab:only-child{justify-content:center}.q-stepper__header--standard-labels .q-stepper__dot:after{display:none}.q-stepper__header--alternative-labels .q-stepper__tab{min-height:104px;padding:24px 32px;flex-direction:column;justify-content:flex-start}.q-stepper__header--alternative-labels .q-stepper__dot{margin-right:0}.q-stepper__header--alternative-labels .q-stepper__label{margin-top:8px;text-align:center}.q-stepper__header--alternative-labels .q-stepper__label:before,.q-stepper__header--alternative-labels .q-stepper__label:after{display:none}.q-stepper__header--contracted,.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab{min-height:72px}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:first-child{align-items:flex-start}.q-stepper__header--contracted.q-stepper__header--alternative-labels .q-stepper__tab:last-child{align-items:flex-end}.q-stepper__header--contracted .q-stepper__tab{padding:24px 0}.q-stepper__header--contracted .q-stepper__tab:first-child .q-stepper__dot{transform:translate(24px)}.q-stepper__header--contracted .q-stepper__tab:last-child .q-stepper__dot{transform:translate(-24px)}.q-stepper__header--contracted .q-stepper__tab:not(:last-child) .q-stepper__dot:after{display:block!important}.q-stepper__header--contracted .q-stepper__dot{margin:0}.q-stepper__header--contracted .q-stepper__label{display:none}.q-stepper__nav{padding-top:24px}.q-stepper--flat{box-shadow:none}.q-stepper--bordered{border:1px solid rgba(0,0,0,.12)}.q-stepper--horizontal .q-stepper__step-inner{padding:24px}.q-stepper--horizontal .q-stepper__tab:first-child{border-top-left-radius:inherit}.q-stepper--horizontal .q-stepper__tab:last-child{border-top-right-radius:inherit}.q-stepper--horizontal .q-stepper__tab:first-child .q-stepper__dot:before,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__label:after,.q-stepper--horizontal .q-stepper__tab:last-child .q-stepper__dot:after{display:none}.q-stepper--horizontal .q-stepper__tab{overflow:hidden}.q-stepper--horizontal .q-stepper__line{contain:layout}.q-stepper--horizontal .q-stepper__line:before,.q-stepper--horizontal .q-stepper__line:after{position:absolute;top:50%;height:1px;width:100vw;background:rgba(0,0,0,.12)}.q-stepper--horizontal .q-stepper__label:after,.q-stepper--horizontal .q-stepper__dot:after{content:"";left:100%;margin-left:8px}.q-stepper--horizontal .q-stepper__dot:before{content:"";right:100%;margin-right:8px}.q-stepper--horizontal>.q-stepper__nav{padding:0 24px 24px}.q-stepper--vertical{padding:16px 0}.q-stepper--vertical .q-stepper__tab{padding:12px 24px}.q-stepper--vertical .q-stepper__title{line-height:18px}.q-stepper--vertical .q-stepper__step-inner{padding:0 24px 32px 60px}.q-stepper--vertical>.q-stepper__nav{padding:24px 24px 0}.q-stepper--vertical .q-stepper__step{overflow:hidden}.q-stepper--vertical .q-stepper__dot{margin-right:12px}.q-stepper--vertical .q-stepper__dot:before,.q-stepper--vertical .q-stepper__dot:after{content:"";position:absolute;left:50%;width:1px;height:99999px;background:rgba(0,0,0,.12)}.q-stepper--vertical .q-stepper__dot:before{bottom:100%;margin-bottom:8px}.q-stepper--vertical .q-stepper__dot:after{top:100%;margin-top:8px}.q-stepper--vertical .q-stepper__step:first-child .q-stepper__dot:before,.q-stepper--vertical .q-stepper__step:last-child .q-stepper__dot:after{display:none}.q-stepper--vertical .q-stepper__step:last-child .q-stepper__step-inner{padding-bottom:8px}.q-stepper--dark.q-stepper--bordered,.q-stepper--dark .q-stepper__header--border{border-color:#ffffff47}.q-stepper--dark.q-stepper--horizontal .q-stepper__line:before,.q-stepper--dark.q-stepper--horizontal .q-stepper__line:after{background:rgba(255,255,255,.28)}.q-stepper--dark.q-stepper--vertical .q-stepper__dot:before,.q-stepper--dark.q-stepper--vertical .q-stepper__dot:after{background:rgba(255,255,255,.28)}.q-stepper--dark .q-stepper__tab--disabled{color:#ffffff47}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__dot{background:rgba(255,255,255,.28)}.q-stepper--dark .q-stepper__tab--disabled .q-stepper__label{color:#ffffff8a}.q-tab-panels{background:#fff}.q-tab-panel{padding:16px}.q-markup-table{overflow:auto;background:#fff}.q-table{width:100%;max-width:100%;border-collapse:separate;border-spacing:0}.q-table thead tr,.q-table tbody td{height:48px}.q-table th{font-weight:500;font-size:12px;user-select:none}.q-table th.sortable{cursor:pointer}.q-table th.sortable:hover .q-table__sort-icon{opacity:.64}.q-table th.sorted .q-table__sort-icon{opacity:.86!important}.q-table th.sort-desc .q-table__sort-icon{transform:rotate(180deg)}.q-table th,.q-table td{padding:7px 16px;background-color:inherit}.q-table thead,.q-table td,.q-table th{border-style:solid;border-width:0}.q-table tbody td{font-size:13px}.q-table__card{color:#000;background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f}.q-table__card .q-table__middle{flex:1 1 auto}.q-table__card .q-table__top,.q-table__card .q-table__bottom{flex:0 0 auto}.q-table__container{position:relative}.q-table__container>div:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.q-table__container>div:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.q-table__container>.q-inner-loading{border-radius:inherit!important}.q-table__top{padding:12px 16px}.q-table__top .q-table__control{flex-wrap:wrap}.q-table__title{font-size:20px;letter-spacing:.005em;font-weight:400}.q-table__separator{min-width:8px!important}.q-table__progress{height:0!important}.q-table__progress th{padding:0!important;border:0!important}.q-table__progress .q-linear-progress{position:absolute;bottom:0}.q-table__middle{max-width:100%}.q-table__bottom{min-height:50px;padding:4px 14px 4px 16px;font-size:12px}.q-table__bottom .q-table__control{min-height:24px}.q-table__bottom-nodata-icon{font-size:200%;margin-right:8px}.q-table__bottom-item{margin-right:16px}.q-table__control{display:flex;align-items:center}.q-table__sort-icon{transition:transform .3s cubic-bezier(.25,.8,.5,1);opacity:0;font-size:120%}.q-table__sort-icon--left,.q-table__sort-icon--center{margin-left:4px}.q-table__sort-icon--right{margin-right:4px}.q-table--col-auto-width{width:1px}.q-table__card--dark,.q-table--dark{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-table--flat{box-shadow:none}.q-table--bordered{border:1px solid rgba(0,0,0,.12)}.q-table--square{border-radius:0}.q-table__linear-progress{height:2px}.q-table--no-wrap th,.q-table--no-wrap td{white-space:nowrap}.q-table--grid{box-shadow:none;border-radius:4px}.q-table--grid .q-table__top{padding-bottom:4px}.q-table--grid .q-table__middle{min-height:2px;margin-bottom:4px}.q-table--grid .q-table__middle thead,.q-table--grid .q-table__middle thead th{border:0!important}.q-table--grid .q-table__linear-progress{bottom:0}.q-table--grid .q-table__bottom{border-top:0}.q-table--grid .q-table__grid-content{flex:1 1 auto}.q-table--grid.fullscreen{background:inherit}.q-table__grid-item-card{vertical-align:top;padding:12px}.q-table__grid-item-card .q-separator{margin:12px 0}.q-table__grid-item-row+.q-table__grid-item-row{margin-top:8px}.q-table__grid-item-title{opacity:.54;font-weight:500;font-size:12px}.q-table__grid-item-value{font-size:13px}.q-table__grid-item{padding:4px;transition:transform .3s cubic-bezier(.25,.8,.5,1)}.q-table__grid-item--selected{transform:scale(.95)}.q-table--horizontal-separator thead th,.q-table--horizontal-separator tbody tr:not(:last-child)>td,.q-table--cell-separator thead th,.q-table--cell-separator tbody tr:not(:last-child)>td{border-bottom-width:1px}.q-table--vertical-separator td,.q-table--vertical-separator th,.q-table--cell-separator td,.q-table--cell-separator th{border-left-width:1px}.q-table--vertical-separator thead tr:last-child th,.q-table--vertical-separator.q-table--loading tr:nth-last-child(2) th,.q-table--cell-separator thead tr:last-child th,.q-table--cell-separator.q-table--loading tr:nth-last-child(2) th{border-bottom-width:1px}.q-table--vertical-separator td:first-child,.q-table--vertical-separator th:first-child,.q-table--cell-separator td:first-child,.q-table--cell-separator th:first-child{border-left:0}.q-table--vertical-separator .q-table__top,.q-table--cell-separator .q-table__top{border-bottom:1px solid rgba(0,0,0,.12)}.q-table--dense .q-table__top{padding:6px 16px}.q-table--dense .q-table__bottom{min-height:33px}.q-table--dense .q-table__sort-icon{font-size:110%}.q-table--dense .q-table th,.q-table--dense .q-table td{padding:4px 8px}.q-table--dense .q-table thead tr,.q-table--dense .q-table tbody tr,.q-table--dense .q-table tbody td{height:28px}.q-table--dense .q-table th:first-child,.q-table--dense .q-table td:first-child{padding-left:16px}.q-table--dense .q-table th:last-child,.q-table--dense .q-table td:last-child{padding-right:16px}.q-table--dense .q-table__bottom-item{margin-right:8px}.q-table--dense .q-table__select .q-field__control,.q-table--dense .q-table__select .q-field__native{min-height:24px;padding:0}.q-table--dense .q-table__select .q-field__marginal{height:24px}.q-table__bottom{border-top:1px solid rgba(0,0,0,.12)}.q-table thead,.q-table tr,.q-table th,.q-table td{border-color:#0000001f}.q-table tbody td{position:relative}.q-table tbody td:before,.q-table tbody td:after{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none}.q-table tbody td:before{background:rgba(0,0,0,.03)}.q-table tbody td:after{background:rgba(0,0,0,.06)}.q-table tbody tr.selected td:after{content:""}body.desktop .q-table>tbody>tr:not(.q-tr--no-hover):hover>td:not(.q-td--no-hover):before{content:""}.q-table__card--dark,.q-table--dark,.q-table--dark .q-table__bottom,.q-table--dark thead,.q-table--dark tr,.q-table--dark th,.q-table--dark td{border-color:#ffffff47}.q-table--dark tbody td:before{background:rgba(255,255,255,.07)}.q-table--dark tbody td:after{background:rgba(255,255,255,.1)}.q-table--dark.q-table--vertical-separator .q-table__top,.q-table--dark.q-table--cell-separator .q-table__top{border-color:#ffffff47}.q-tab{padding:0 16px;min-height:48px;transition:color .3s,background-color .3s;text-transform:uppercase;white-space:nowrap;color:inherit;text-decoration:none}.q-tab--full{min-height:72px}.q-tab--no-caps{text-transform:none}.q-tab__content{height:inherit;padding:4px 0;min-width:40px}.q-tab__content--inline .q-tab__icon+.q-tab__label{padding-left:8px}.q-tab__content .q-chip--floating{top:0;right:-16px}.q-tab__icon{width:24px;height:24px;font-size:24px}.q-tab__label{font-size:14px;line-height:1.715em;font-weight:500}.q-tab .q-badge{top:3px;right:-12px}.q-tab__alert,.q-tab__alert-icon{position:absolute}.q-tab__alert{top:7px;right:-9px;height:10px;width:10px;border-radius:50%;background:currentColor}.q-tab__alert-icon{top:2px;right:-12px;font-size:18px}.q-tab__indicator{opacity:0;height:2px;background:currentColor}.q-tab--active .q-tab__indicator{opacity:1;transform-origin:left}.q-tab--inactive{opacity:.85}.q-tabs{position:relative;transition:color .3s,background-color .3s}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--horizontal{padding-left:36px;padding-right:36px}.q-tabs--scrollable.q-tabs__arrows--outside.q-tabs--vertical{padding-top:36px;padding-bottom:36px}.q-tabs--scrollable.q-tabs__arrows--outside .q-tabs__arrow--faded{opacity:.3;pointer-events:none}.q-tabs--scrollable.q-tabs__arrows--inside .q-tabs__arrow--faded{display:none}.q-tabs--not-scrollable.q-tabs__arrows--outside,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows.q-tabs__arrows--outside{padding-left:0;padding-right:0}.q-tabs--not-scrollable .q-tabs__arrow,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows .q-tabs__arrow{display:none}.q-tabs--not-scrollable .q-tabs__content,body.mobile .q-tabs--scrollable.q-tabs--mobile-without-arrows .q-tabs__content{border-radius:inherit}.q-tabs__arrow{cursor:pointer;font-size:32px;min-width:36px;text-shadow:0 0 3px #fff,0 0 1px #fff,0 0 1px #000;transition:opacity .3s}.q-tabs__content{overflow:hidden;flex:1 1 auto}.q-tabs__content--align-center{justify-content:center}.q-tabs__content--align-right{justify-content:flex-end}.q-tabs__content--align-justify .q-tab{flex:1 1 auto}.q-tabs__offset{display:none}.q-tabs--horizontal .q-tabs__arrow{height:100%}.q-tabs--horizontal .q-tabs__arrow--left{top:0;left:0;bottom:0}.q-tabs--horizontal .q-tabs__arrow--right{top:0;right:0;bottom:0}.q-tabs--vertical,.q-tabs--vertical .q-tabs__content{display:block!important;height:100%}.q-tabs--vertical .q-tabs__arrow{width:100%;height:36px;text-align:center}.q-tabs--vertical .q-tabs__arrow--left{top:0;left:0;right:0}.q-tabs--vertical .q-tabs__arrow--right{left:0;right:0;bottom:0}.q-tabs--vertical .q-tab{padding:0 8px}.q-tabs--vertical .q-tab__indicator{height:unset;width:2px}.q-tabs--vertical.q-tabs--not-scrollable .q-tabs__content{height:100%}.q-tabs--vertical.q-tabs--dense .q-tab__content{min-width:24px}.q-tabs--dense .q-tab{min-height:36px}.q-tabs--dense .q-tab--full{min-height:52px}.q-time{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;background:#fff;outline:0;width:290px;min-width:290px;max-width:100%}.q-time--bordered{border:1px solid rgba(0,0,0,.12)}.q-time__header{border-top-left-radius:inherit;color:#fff;background-color:var(--q-primary);padding:16px;font-weight:300}.q-time__actions{padding:0 16px 16px}.q-time__header-label{font-size:28px;line-height:1;letter-spacing:-.00833em}.q-time__header-label>div+div{margin-left:4px}.q-time__link{opacity:.56;outline:0;transition:opacity .3s ease-out}.q-time__link--active,.q-time__link:hover,.q-time__link:focus{opacity:1}.q-time__header-ampm{font-size:16px;letter-spacing:.1em}.q-time__content{padding:16px}.q-time__content:before{content:"";display:block;padding-bottom:100%}.q-time__container-parent{padding:16px}.q-time__container-child{border-radius:50%;background:rgba(0,0,0,.12)}.q-time__clock{padding:24px;width:100%;height:100%;max-width:100%;max-height:100%;font-size:14px}.q-time__clock-circle{position:relative}.q-time__clock-center{height:6px;width:6px;margin:auto;border-radius:50%;min-height:0;background:currentColor}.q-time__clock-pointer{width:2px;height:50%;transform-origin:0 0;min-height:0;position:absolute;left:50%;right:0;bottom:0;color:var(--q-primary);background:currentColor;transform:translate(-50%)}.q-time__clock-pointer:before,.q-time__clock-pointer:after{content:"";position:absolute;left:50%;border-radius:50%;background:currentColor;transform:translate(-50%)}.q-time__clock-pointer:before{bottom:-4px;width:8px;height:8px}.q-time__clock-pointer:after{top:-3px;height:6px;width:6px}.q-time__clock-position{position:absolute;min-height:32px;width:32px;height:32px;font-size:12px;line-height:32px;margin:0;padding:0;transform:translate(-50%,-50%);border-radius:50%}.q-time__clock-position--disable{opacity:.4}.q-time__clock-position--active{background-color:var(--q-primary);color:#fff}.q-time__clock-pos-0{top:0%;left:50%}.q-time__clock-pos-1{top:6.7%;left:75%}.q-time__clock-pos-2{top:25%;left:93.3%}.q-time__clock-pos-3{top:50%;left:100%}.q-time__clock-pos-4{top:75%;left:93.3%}.q-time__clock-pos-5{top:93.3%;left:75%}.q-time__clock-pos-6{top:100%;left:50%}.q-time__clock-pos-7{top:93.3%;left:25%}.q-time__clock-pos-8{top:75%;left:6.7%}.q-time__clock-pos-9{top:50%;left:0%}.q-time__clock-pos-10{top:25%;left:6.7%}.q-time__clock-pos-11{top:6.7%;left:25%}.q-time__clock-pos-12{top:15%;left:50%}.q-time__clock-pos-13{top:19.69%;left:67.5%}.q-time__clock-pos-14{top:32.5%;left:80.31%}.q-time__clock-pos-15{top:50%;left:85%}.q-time__clock-pos-16{top:67.5%;left:80.31%}.q-time__clock-pos-17{top:80.31%;left:67.5%}.q-time__clock-pos-18{top:85%;left:50%}.q-time__clock-pos-19{top:80.31%;left:32.5%}.q-time__clock-pos-20{top:67.5%;left:19.69%}.q-time__clock-pos-21{top:50%;left:15%}.q-time__clock-pos-22{top:32.5%;left:19.69%}.q-time__clock-pos-23{top:19.69%;left:32.5%}.q-time__now-button{background-color:var(--q-primary);color:#fff;top:12px;right:12px}.q-time.disabled .q-time__header-ampm,.q-time.disabled .q-time__content,.q-time--readonly .q-time__header-ampm,.q-time--readonly .q-time__content{pointer-events:none}.q-time--portrait{display:inline-flex;flex-direction:column}.q-time--portrait .q-time__header{border-top-right-radius:inherit;min-height:86px}.q-time--portrait .q-time__header-ampm{margin-left:12px}.q-time--portrait.q-time--bordered .q-time__content{margin:1px 0}.q-time--landscape{display:inline-flex;align-items:stretch;min-width:420px}.q-time--landscape>div{display:flex;flex-direction:column;justify-content:center}.q-time--landscape .q-time__header{border-bottom-left-radius:inherit;min-width:156px}.q-time--landscape .q-time__header-ampm{margin-top:12px}.q-time--dark{border-color:#ffffff47;box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-timeline{padding:0;width:100%;list-style:none}.q-timeline h6{line-height:inherit}.q-timeline--dark{color:#fff}.q-timeline--dark .q-timeline__subtitle{opacity:.7}.q-timeline__content{padding-bottom:24px}.q-timeline__title{margin-top:0;margin-bottom:16px}.q-timeline__subtitle{font-size:12px;margin-bottom:8px;opacity:.6;text-transform:uppercase;letter-spacing:1px;font-weight:700}.q-timeline__dot{position:absolute;top:0;bottom:0;width:15px}.q-timeline__dot:before,.q-timeline__dot:after{content:"";background:currentColor;display:block;position:absolute}.q-timeline__dot:before{border:3px solid transparent;border-radius:100%;height:15px;width:15px;top:4px;left:0;transition:background .3s ease-in-out,border .3s ease-in-out}.q-timeline__dot:after{width:3px;opacity:.4;top:24px;bottom:0;left:6px}.q-timeline__dot .q-icon{position:absolute;top:0;left:0;right:0;font-size:16px;height:38px;line-height:38px;width:100%;color:#fff}.q-timeline__dot .q-icon>svg,.q-timeline__dot .q-icon>img{width:1em;height:1em}.q-timeline__dot-img{position:absolute;top:4px;left:0;right:0;height:31px;width:31px;background:currentColor;border-radius:50%}.q-timeline__heading{position:relative}.q-timeline__heading:first-child .q-timeline__heading-title{padding-top:0}.q-timeline__heading:last-child .q-timeline__heading-title{padding-bottom:0}.q-timeline__heading-title{padding:32px 0;margin:0}.q-timeline__entry{position:relative;line-height:22px}.q-timeline__entry:last-child{padding-bottom:0!important}.q-timeline__entry:last-child .q-timeline__dot:after{content:none}.q-timeline__entry--icon .q-timeline__dot{width:31px}.q-timeline__entry--icon .q-timeline__dot:before{height:31px;width:31px}.q-timeline__entry--icon .q-timeline__dot:after{top:41px;left:14px}.q-timeline__entry--icon .q-timeline__subtitle{padding-top:8px}.q-timeline--dense--right .q-timeline__entry{padding-left:40px}.q-timeline--dense--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--dense--right .q-timeline__dot{left:0}.q-timeline--dense--left .q-timeline__heading{text-align:right}.q-timeline--dense--left .q-timeline__entry{padding-right:40px}.q-timeline--dense--left .q-timeline__entry--icon .q-timeline__dot{right:-8px}.q-timeline--dense--left .q-timeline__content,.q-timeline--dense--left .q-timeline__title,.q-timeline--dense--left .q-timeline__subtitle{text-align:right}.q-timeline--dense--left .q-timeline__dot{right:0}.q-timeline--comfortable{display:table}.q-timeline--comfortable .q-timeline__heading{display:table-row;font-size:200%}.q-timeline--comfortable .q-timeline__heading>div{display:table-cell}.q-timeline--comfortable .q-timeline__entry{display:table-row;padding:0}.q-timeline--comfortable .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--comfortable .q-timeline__subtitle,.q-timeline--comfortable .q-timeline__dot,.q-timeline--comfortable .q-timeline__content{display:table-cell;vertical-align:top}.q-timeline--comfortable .q-timeline__subtitle{width:35%}.q-timeline--comfortable .q-timeline__dot{position:relative;min-width:31px}.q-timeline--comfortable--right .q-timeline__heading .q-timeline__heading-title{margin-left:-50px}.q-timeline--comfortable--right .q-timeline__subtitle{text-align:right;padding-right:30px}.q-timeline--comfortable--right .q-timeline__content{padding-left:30px}.q-timeline--comfortable--right .q-timeline__entry--icon .q-timeline__dot{left:-8px}.q-timeline--comfortable--left .q-timeline__heading{text-align:right}.q-timeline--comfortable--left .q-timeline__heading .q-timeline__heading-title{margin-right:-50px}.q-timeline--comfortable--left .q-timeline__subtitle{padding-left:30px}.q-timeline--comfortable--left .q-timeline__content{padding-right:30px}.q-timeline--comfortable--left .q-timeline__content,.q-timeline--comfortable--left .q-timeline__title{text-align:right}.q-timeline--comfortable--left .q-timeline__entry--icon .q-timeline__dot{right:0}.q-timeline--comfortable--left .q-timeline__dot{right:-8px}.q-timeline--loose .q-timeline__heading-title{text-align:center;margin-left:0}.q-timeline--loose .q-timeline__entry,.q-timeline--loose .q-timeline__subtitle,.q-timeline--loose .q-timeline__dot,.q-timeline--loose .q-timeline__content{display:block;margin:0;padding:0}.q-timeline--loose .q-timeline__dot{position:absolute;left:50%;margin-left:-7.15px}.q-timeline--loose .q-timeline__entry{padding-bottom:24px;overflow:hidden}.q-timeline--loose .q-timeline__entry--icon .q-timeline__dot{margin-left:-15px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__subtitle{line-height:38px}.q-timeline--loose .q-timeline__entry--icon .q-timeline__content{padding-top:8px}.q-timeline--loose .q-timeline__entry--left .q-timeline__content,.q-timeline--loose .q-timeline__entry--right .q-timeline__subtitle{float:left;padding-right:30px;text-align:right}.q-timeline--loose .q-timeline__entry--left .q-timeline__subtitle,.q-timeline--loose .q-timeline__entry--right .q-timeline__content{float:right;text-align:left;padding-left:30px}.q-timeline--loose .q-timeline__subtitle,.q-timeline--loose .q-timeline__content{width:50%}.q-toggle{vertical-align:middle}.q-toggle__native{width:1px;height:1px}.q-toggle__track{height:.35em;border-radius:.175em;opacity:.38;background:currentColor}.q-toggle__thumb{top:.25em;left:.25em;width:.5em;height:.5em;transition:left .22s cubic-bezier(.4,0,.2,1);user-select:none;z-index:0}.q-toggle__thumb:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:#fff;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.q-toggle__thumb .q-icon{font-size:.3em;min-width:1em;color:#000;opacity:.54;z-index:1}.q-toggle__inner{font-size:40px;width:1.4em;min-width:1.4em;height:1em;padding:.325em .3em;-webkit-print-color-adjust:exact}.q-toggle__inner--indet .q-toggle__thumb{left:.45em}.q-toggle__inner--truthy{color:var(--q-primary)}.q-toggle__inner--truthy .q-toggle__track{opacity:.54}.q-toggle__inner--truthy .q-toggle__thumb{left:.65em}.q-toggle__inner--truthy .q-toggle__thumb:after{background-color:currentColor}.q-toggle__inner--truthy .q-toggle__thumb .q-icon{color:#fff;opacity:1}.q-toggle.disabled{opacity:.75!important}.q-toggle--dark .q-toggle__inner{color:#fff}.q-toggle--dark .q-toggle__inner--truthy{color:var(--q-primary)}.q-toggle--dark .q-toggle__thumb:after{box-shadow:none}.q-toggle--dark .q-toggle__thumb:before{opacity:.32!important}.q-toggle--dense .q-toggle__inner{width:.8em;min-width:.8em;height:.5em;padding:.07625em 0}.q-toggle--dense .q-toggle__thumb{top:0;left:0}.q-toggle--dense .q-toggle__inner--indet .q-toggle__thumb{left:.15em}.q-toggle--dense .q-toggle__inner--truthy .q-toggle__thumb{left:.3em}.q-toggle--dense .q-toggle__label{padding-left:.5em}.q-toggle--dense.reverse .q-toggle__label{padding-left:0;padding-right:.5em}body.desktop .q-toggle:not(.disabled) .q-toggle__thumb:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;background:currentColor;opacity:.12;transform:scale3d(0,0,1);transition:transform .22s cubic-bezier(0,0,.2,1)}body.desktop .q-toggle:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(2,2,1)}body.desktop .q-toggle--dense:not(.disabled):focus .q-toggle__thumb:before,body.desktop .q-toggle--dense:not(.disabled):hover .q-toggle__thumb:before{transform:scale3d(1.5,1.5,1)}.q-toolbar{position:relative;padding:0 12px;min-height:50px;width:100%}.q-toolbar--inset{padding-left:58px}.q-toolbar .q-avatar{font-size:38px}.q-toolbar__title{flex:1 1 0%;min-width:1px;max-width:100%;font-size:21px;font-weight:400;letter-spacing:.01em;padding:0 12px}.q-toolbar__title:first-child{padding-left:0}.q-toolbar__title:last-child{padding-right:0}.q-tooltip--style{font-size:10px;color:#fafafa;background:#757575;border-radius:4px;text-transform:none;font-weight:400}.q-tooltip{z-index:9000;position:fixed!important;overflow-y:auto;overflow-x:hidden;padding:6px 10px}@media (max-width: 599.98px){.q-tooltip{font-size:14px;padding:8px 16px}}.q-tree{position:relative;color:#9e9e9e}.q-tree__node{padding:0 0 3px 22px}.q-tree__node:after{content:"";position:absolute;top:-3px;bottom:0;width:2px;right:auto;left:-13px;border-left:1px solid currentColor}.q-tree__node:last-child:after{display:none}.q-tree__node--disabled{pointer-events:none}.q-tree__node--disabled .disabled{opacity:1!important}.q-tree__node--disabled>div,.q-tree__node--disabled>i,.q-tree__node--disabled>.disabled{opacity:.6!important}.q-tree__node--disabled>div .q-tree__node--disabled>div,.q-tree__node--disabled>div .q-tree__node--disabled>i,.q-tree__node--disabled>div .q-tree__node--disabled>.disabled,.q-tree__node--disabled>i .q-tree__node--disabled>div,.q-tree__node--disabled>i .q-tree__node--disabled>i,.q-tree__node--disabled>i .q-tree__node--disabled>.disabled,.q-tree__node--disabled>.disabled .q-tree__node--disabled>div,.q-tree__node--disabled>.disabled .q-tree__node--disabled>i,.q-tree__node--disabled>.disabled .q-tree__node--disabled>.disabled{opacity:1!important}.q-tree__node-header:before{content:"";position:absolute;top:-3px;bottom:50%;width:31px;left:-35px;border-left:1px solid currentColor;border-bottom:1px solid currentColor}.q-tree__children{padding-left:25px}.q-tree__node-body{padding:5px 0 8px 5px}.q-tree__node--parent{padding-left:2px}.q-tree__node--parent>.q-tree__node-header:before{width:15px;left:-15px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:5px 0 8px 27px}.q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{content:"";position:absolute;top:0;width:2px;height:100%;right:auto;left:12px;border-left:1px solid currentColor;bottom:50px}.q-tree__node--link{cursor:pointer}.q-tree__node-header{padding:4px;margin-top:3px;border-radius:4px;outline:0}.q-tree__node-header-content{color:#000;transition:color .3s}.q-tree__node--selected .q-tree__node-header-content{color:#9e9e9e}.q-tree__icon,.q-tree__node-header-content .q-icon{font-size:21px}.q-tree__img{height:42px;border-radius:2px}.q-tree__avatar,.q-tree__node-header-content .q-avatar{font-size:28px;border-radius:50%;width:28px;height:28px}.q-tree__arrow,.q-tree__spinner{font-size:16px;margin-right:4px}.q-tree__arrow{transition:transform .3s}.q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}.q-tree__tickbox{margin-right:4px}.q-tree>.q-tree__node{padding:0}.q-tree>.q-tree__node:after,.q-tree>.q-tree__node>.q-tree__node-header:before{display:none}.q-tree>.q-tree__node--child>.q-tree__node-header{padding-left:24px}.q-tree--dark .q-tree__node-header-content{color:#fff}.q-tree--no-connectors .q-tree__node:after,.q-tree--no-connectors .q-tree__node-header:before,.q-tree--no-connectors .q-tree__node-body:after{display:none!important}.q-tree--dense>.q-tree__node--child>.q-tree__node-header{padding-left:1px}.q-tree--dense .q-tree__arrow,.q-tree--dense .q-tree__spinner{margin-right:1px}.q-tree--dense .q-tree__img{height:32px}.q-tree--dense .q-tree__tickbox{margin-right:3px}.q-tree--dense .q-tree__node{padding:0}.q-tree--dense .q-tree__node:after{top:0;left:-8px}.q-tree--dense .q-tree__node-header{margin-top:0;padding:1px}.q-tree--dense .q-tree__node-header:before{top:0;left:-8px;width:8px}.q-tree--dense .q-tree__node--child{padding-left:17px}.q-tree--dense .q-tree__node--child>.q-tree__node-header:before{left:-25px;width:21px}.q-tree--dense .q-tree__node-body{padding:0 0 2px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body{padding:0 0 2px 20px}.q-tree--dense .q-tree__node--parent>.q-tree__node-collapsible>.q-tree__node-body:after{left:8px}.q-tree--dense .q-tree__children{padding-left:16px}[dir=rtl] .q-tree__arrow{transform:rotate3d(0,0,1,180deg)}[dir=rtl] .q-tree__arrow--rotate{transform:rotate3d(0,0,1,90deg)}.q-uploader{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;vertical-align:top;background:#fff;position:relative;width:320px;max-height:320px}.q-uploader--bordered{border:1px solid rgba(0,0,0,.12)}.q-uploader__input{opacity:0;width:100%;height:100%;cursor:pointer!important;z-index:1}.q-uploader__input::-webkit-file-upload-button{cursor:pointer}.q-uploader__file:before{content:"";border-top-left-radius:inherit;border-top-right-radius:inherit;position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:currentColor;opacity:.04}.q-uploader__header{position:relative;border-top-left-radius:inherit;border-top-right-radius:inherit;background-color:var(--q-primary);color:#fff;width:100%}.q-uploader__spinner{font-size:24px;margin-right:4px}.q-uploader__header-content{padding:8px}.q-uploader__dnd{outline:1px dashed currentColor;outline-offset:-4px;background:rgba(255,255,255,.6)}.q-uploader__overlay{font-size:36px;color:#000;background-color:#fff9}.q-uploader__list{position:relative;border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;padding:8px;min-height:60px;flex:1 1 auto}.q-uploader__file{border-radius:4px 4px 0 0;border:1px solid rgba(0,0,0,.12)}.q-uploader__file .q-circular-progress{font-size:24px}.q-uploader__file--img{color:#fff;height:200px;min-width:200px;background-position:50% 50%;background-size:cover;background-repeat:no-repeat}.q-uploader__file--img:before{content:none}.q-uploader__file--img .q-circular-progress{color:#fff}.q-uploader__file--img .q-uploader__file-header{padding-bottom:24px;background:linear-gradient(to bottom,rgba(0,0,0,.7) 20%,rgba(255,255,255,0))}.q-uploader__file+.q-uploader__file{margin-top:8px}.q-uploader__file-header{position:relative;padding:4px 8px;border-top-left-radius:inherit;border-top-right-radius:inherit}.q-uploader__file-header-content{padding-right:8px}.q-uploader__file-status{font-size:24px;margin-right:4px}.q-uploader__title{font-size:14px;font-weight:700;line-height:18px;word-break:break-word}.q-uploader__subtitle{font-size:12px;line-height:18px}.q-uploader--disable .q-uploader__header,.q-uploader--disable .q-uploader__list{pointer-events:none}.q-uploader--dark{border-color:#ffffff47;box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}.q-uploader--dark .q-uploader__file{border-color:#ffffff47}.q-uploader--dark .q-uploader__dnd,.q-uploader--dark .q-uploader__overlay{background:rgba(255,255,255,.3)}.q-uploader--dark .q-uploader__overlay{color:#fff}.q-video{position:relative;overflow:hidden;border-radius:inherit}.q-video iframe,.q-video object,.q-video embed{width:100%;height:100%}.q-video--responsive{height:0}.q-video--responsive iframe,.q-video--responsive object,.q-video--responsive embed{position:absolute;top:0;left:0}.q-virtual-scroll:focus{outline:0}.q-virtual-scroll__content{outline:none;contain:content}.q-virtual-scroll__content>*{overflow-anchor:none}.q-virtual-scroll__content>[data-q-vs-anchor]{overflow-anchor:auto}.q-virtual-scroll__padding{background:linear-gradient(rgba(255,255,255,0),rgba(255,255,255,0) 20%,rgba(128,128,128,.03) 20%,rgba(128,128,128,.08) 50%,rgba(128,128,128,.03) 80%,rgba(255,255,255,0) 80%,rgba(255,255,255,0));background-size:var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px)}.q-table .q-virtual-scroll__padding tr{height:0!important}.q-table .q-virtual-scroll__padding td{padding:0!important}.q-virtual-scroll--horizontal{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:stretch}.q-virtual-scroll--horizontal .q-virtual-scroll__content{display:flex;flex-direction:row;flex-wrap:nowrap}.q-virtual-scroll--horizontal .q-virtual-scroll__padding,.q-virtual-scroll--horizontal .q-virtual-scroll__content,.q-virtual-scroll--horizontal .q-virtual-scroll__content>*{flex:0 0 auto}.q-virtual-scroll--horizontal .q-virtual-scroll__padding{background:linear-gradient(to left,rgba(255,255,255,0),rgba(255,255,255,0) 20%,rgba(128,128,128,.03) 20%,rgba(128,128,128,.08) 50%,rgba(128,128,128,.03) 80%,rgba(255,255,255,0) 80%,rgba(255,255,255,0));background-size:var(--q-virtual-scroll-item-width, 50px) var(--q-virtual-scroll-item-height, 100%)}.q-ripple{position:absolute;top:0;left:0;width:100%;height:100%;color:inherit;border-radius:inherit;z-index:0;pointer-events:none;overflow:hidden;contain:strict}.q-ripple__inner{position:absolute;top:0;left:0;opacity:0;color:inherit;border-radius:50%;background:currentColor;pointer-events:none;will-change:transform,opacity}.q-ripple__inner--enter{transition:transform .225s cubic-bezier(.4,0,.2,1),opacity .1s cubic-bezier(.4,0,.2,1)}.q-ripple__inner--leave{transition:opacity .25s cubic-bezier(.4,0,.2,1)}.q-morph--invisible,.q-morph--internal{opacity:0!important;pointer-events:none!important;position:fixed!important;right:200vw!important;bottom:200vh!important}.q-loading{color:#000;position:fixed!important}.q-loading__backdrop{position:fixed;top:0;right:0;bottom:0;left:0;opacity:.5;z-index:-1;background-color:#000;transition:background-color .28s}.q-loading__box{border-radius:4px;padding:18px;color:#fff;max-width:450px}.q-loading__message{margin:40px 20px 0;text-align:center}.q-notifications__list{z-index:9500;pointer-events:none;left:0;right:0;margin-bottom:10px;position:relative}.q-notifications__list--center{top:0;bottom:0}.q-notifications__list--top{top:0}.q-notifications__list--bottom{bottom:0}body.q-ios-padding .q-notifications__list--center,body.q-ios-padding .q-notifications__list--top{top:20px;top:env(safe-area-inset-top)}body.q-ios-padding .q-notifications__list--center,body.q-ios-padding .q-notifications__list--bottom{bottom:env(safe-area-inset-bottom)}.q-notification{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f;border-radius:4px;pointer-events:all;display:inline-flex;margin:10px 10px 0;transition:transform 1s,opacity 1s;z-index:9500;flex-shrink:0;max-width:95vw;background:#323232;color:#fff;font-size:14px}.q-notification__icon{font-size:24px;flex:0 0 1em}.q-notification__icon--additional{margin-right:16px}.q-notification__avatar{font-size:32px}.q-notification__avatar--additional{margin-right:8px}.q-notification__spinner{font-size:32px}.q-notification__spinner--additional{margin-right:8px}.q-notification__message{padding:8px 0}.q-notification__caption{font-size:.9em;opacity:.7}.q-notification__actions{color:var(--q-primary)}.q-notification__badge{animation:q-notif-badge .42s;padding:4px 8px;position:absolute;box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;background-color:var(--q-negative);color:#fff;border-radius:4px;font-size:12px;line-height:12px}.q-notification__badge--top-left,.q-notification__badge--top-right{top:-6px}.q-notification__badge--bottom-left,.q-notification__badge--bottom-right{bottom:-6px}.q-notification__badge--top-left,.q-notification__badge--bottom-left{left:-22px}.q-notification__badge--top-right,.q-notification__badge--bottom-right{right:-22px}.q-notification__progress{z-index:-1;position:absolute;height:3px;bottom:0;left:-10px;right:-10px;animation:q-notif-progress linear;background:currentColor;opacity:.3;border-radius:4px 4px 0 0;transform-origin:0 50%;transform:scaleX(0)}.q-notification--standard{padding:0 16px;min-height:48px}.q-notification--standard .q-notification__actions{padding:6px 0 6px 8px;margin-right:-8px}.q-notification--multi-line{min-height:68px;padding:8px 16px}.q-notification--multi-line .q-notification__badge--top-left,.q-notification--multi-line .q-notification__badge--top-right{top:-15px}.q-notification--multi-line .q-notification__badge--bottom-left,.q-notification--multi-line .q-notification__badge--bottom-right{bottom:-15px}.q-notification--multi-line .q-notification__progress{bottom:-8px}.q-notification--multi-line .q-notification__actions{padding:0}.q-notification--multi-line .q-notification__actions--with-media{padding-left:25px}.q-notification--top-left-enter-from,.q-notification--top-left-leave-to,.q-notification--top-enter-from,.q-notification--top-leave-to,.q-notification--top-right-enter-from,.q-notification--top-right-leave-to{opacity:0;transform:translateY(-50px);z-index:9499}.q-notification--left-enter-from,.q-notification--left-leave-to,.q-notification--center-enter-from,.q-notification--center-leave-to,.q-notification--right-enter-from,.q-notification--right-leave-to{opacity:0;transform:rotateX(90deg);z-index:9499}.q-notification--bottom-left-enter-from,.q-notification--bottom-left-leave-to,.q-notification--bottom-enter-from,.q-notification--bottom-leave-to,.q-notification--bottom-right-enter-from,.q-notification--bottom-right-leave-to{opacity:0;transform:translateY(50px);z-index:9499}.q-notification--top-left-leave-active,.q-notification--top-leave-active,.q-notification--top-right-leave-active,.q-notification--left-leave-active,.q-notification--center-leave-active,.q-notification--right-leave-active,.q-notification--bottom-left-leave-active,.q-notification--bottom-leave-active,.q-notification--bottom-right-leave-active{position:absolute;z-index:9499;margin-left:0;margin-right:0}.q-notification--top-leave-active,.q-notification--center-leave-active{top:0}.q-notification--bottom-left-leave-active,.q-notification--bottom-leave-active,.q-notification--bottom-right-leave-active{bottom:0}@media (min-width: 600px){.q-notification{max-width:65vw}}@keyframes q-notif-badge{15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes q-notif-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}:root{--animate-duration: .3s;--animate-delay: .3s;--animate-repeat: 1}.animated{animation-duration:var(--animate-duration);animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.repeat-1{animation-iteration-count:var(--animate-repeat)}.animated.repeat-2{animation-iteration-count:calc(var(--animate-repeat) * 2)}.animated.repeat-3{animation-iteration-count:calc(var(--animate-repeat) * 3)}.animated.delay-1s{animation-delay:var(--animate-delay)}.animated.delay-2s{animation-delay:calc(var(--animate-delay) * 2)}.animated.delay-3s{animation-delay:calc(var(--animate-delay) * 3)}.animated.delay-4s{animation-delay:calc(var(--animate-delay) * 4)}.animated.delay-5s{animation-delay:calc(var(--animate-delay) * 5)}.animated.faster{animation-duration:calc(var(--animate-duration) / 2)}.animated.fast{animation-duration:calc(var(--animate-duration) * .8)}.animated.slow{animation-duration:calc(var(--animate-duration) * 2)}.animated.slower{animation-duration:calc(var(--animate-duration) * 3)}@media print,(prefers-reduced-motion: reduce){.animated{animation-duration:1ms!important;transition-duration:1ms!important;animation-iteration-count:1!important}.animated[class*=Out]{opacity:0}}.q-animate--scale{animation:q-scale .15s;animation-timing-function:cubic-bezier(.25,.8,.25,1)}@keyframes q-scale{0%{transform:scale(1)}50%{transform:scale(1.04)}to{transform:scale(1)}}.q-animate--fade{animation:q-fade .2s}@keyframes q-fade{0%{opacity:0}to{opacity:1}}:root{--q-primary: #1976D2;--q-secondary: #26A69A;--q-accent: #9C27B0;--q-positive: #21BA45;--q-negative: #C10015;--q-info: #31CCEC;--q-warning: #F2C037;--q-dark: #1D1D1D;--q-dark-page: #121212}.text-dark{color:var(--q-dark)!important}.bg-dark{background:var(--q-dark)!important}.text-primary{color:var(--q-primary)!important}.bg-primary{background:var(--q-primary)!important}.text-secondary{color:var(--q-secondary)!important}.bg-secondary{background:var(--q-secondary)!important}.text-accent{color:var(--q-accent)!important}.bg-accent{background:var(--q-accent)!important}.text-positive{color:var(--q-positive)!important}.bg-positive{background:var(--q-positive)!important}.text-negative{color:var(--q-negative)!important}.bg-negative{background:var(--q-negative)!important}.text-info{color:var(--q-info)!important}.bg-info{background:var(--q-info)!important}.text-warning{color:var(--q-warning)!important}.bg-warning{background:var(--q-warning)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.text-transparent{color:transparent!important}.bg-transparent{background:transparent!important}.text-separator{color:#0000001f!important}.bg-separator{background:rgba(0,0,0,.12)!important}.text-dark-separator{color:#ffffff47!important}.bg-dark-separator{background:rgba(255,255,255,.28)!important}.text-red{color:#f44336!important}.text-red-1{color:#ffebee!important}.text-red-2{color:#ffcdd2!important}.text-red-3{color:#ef9a9a!important}.text-red-4{color:#e57373!important}.text-red-5{color:#ef5350!important}.text-red-6{color:#f44336!important}.text-red-7{color:#e53935!important}.text-red-8{color:#d32f2f!important}.text-red-9{color:#c62828!important}.text-red-10{color:#b71c1c!important}.text-red-11{color:#ff8a80!important}.text-red-12{color:#ff5252!important}.text-red-13{color:#ff1744!important}.text-red-14{color:#d50000!important}.text-pink{color:#e91e63!important}.text-pink-1{color:#fce4ec!important}.text-pink-2{color:#f8bbd0!important}.text-pink-3{color:#f48fb1!important}.text-pink-4{color:#f06292!important}.text-pink-5{color:#ec407a!important}.text-pink-6{color:#e91e63!important}.text-pink-7{color:#d81b60!important}.text-pink-8{color:#c2185b!important}.text-pink-9{color:#ad1457!important}.text-pink-10{color:#880e4f!important}.text-pink-11{color:#ff80ab!important}.text-pink-12{color:#ff4081!important}.text-pink-13{color:#f50057!important}.text-pink-14{color:#c51162!important}.text-purple{color:#9c27b0!important}.text-purple-1{color:#f3e5f5!important}.text-purple-2{color:#e1bee7!important}.text-purple-3{color:#ce93d8!important}.text-purple-4{color:#ba68c8!important}.text-purple-5{color:#ab47bc!important}.text-purple-6{color:#9c27b0!important}.text-purple-7{color:#8e24aa!important}.text-purple-8{color:#7b1fa2!important}.text-purple-9{color:#6a1b9a!important}.text-purple-10{color:#4a148c!important}.text-purple-11{color:#ea80fc!important}.text-purple-12{color:#e040fb!important}.text-purple-13{color:#d500f9!important}.text-purple-14{color:#a0f!important}.text-deep-purple{color:#673ab7!important}.text-deep-purple-1{color:#ede7f6!important}.text-deep-purple-2{color:#d1c4e9!important}.text-deep-purple-3{color:#b39ddb!important}.text-deep-purple-4{color:#9575cd!important}.text-deep-purple-5{color:#7e57c2!important}.text-deep-purple-6{color:#673ab7!important}.text-deep-purple-7{color:#5e35b1!important}.text-deep-purple-8{color:#512da8!important}.text-deep-purple-9{color:#4527a0!important}.text-deep-purple-10{color:#311b92!important}.text-deep-purple-11{color:#b388ff!important}.text-deep-purple-12{color:#7c4dff!important}.text-deep-purple-13{color:#651fff!important}.text-deep-purple-14{color:#6200ea!important}.text-indigo{color:#3f51b5!important}.text-indigo-1{color:#e8eaf6!important}.text-indigo-2{color:#c5cae9!important}.text-indigo-3{color:#9fa8da!important}.text-indigo-4{color:#7986cb!important}.text-indigo-5{color:#5c6bc0!important}.text-indigo-6{color:#3f51b5!important}.text-indigo-7{color:#3949ab!important}.text-indigo-8{color:#303f9f!important}.text-indigo-9{color:#283593!important}.text-indigo-10{color:#1a237e!important}.text-indigo-11{color:#8c9eff!important}.text-indigo-12{color:#536dfe!important}.text-indigo-13{color:#3d5afe!important}.text-indigo-14{color:#304ffe!important}.text-blue{color:#2196f3!important}.text-blue-1{color:#e3f2fd!important}.text-blue-2{color:#bbdefb!important}.text-blue-3{color:#90caf9!important}.text-blue-4{color:#64b5f6!important}.text-blue-5{color:#42a5f5!important}.text-blue-6{color:#2196f3!important}.text-blue-7{color:#1e88e5!important}.text-blue-8{color:#1976d2!important}.text-blue-9{color:#1565c0!important}.text-blue-10{color:#0d47a1!important}.text-blue-11{color:#82b1ff!important}.text-blue-12{color:#448aff!important}.text-blue-13{color:#2979ff!important}.text-blue-14{color:#2962ff!important}.text-light-blue{color:#03a9f4!important}.text-light-blue-1{color:#e1f5fe!important}.text-light-blue-2{color:#b3e5fc!important}.text-light-blue-3{color:#81d4fa!important}.text-light-blue-4{color:#4fc3f7!important}.text-light-blue-5{color:#29b6f6!important}.text-light-blue-6{color:#03a9f4!important}.text-light-blue-7{color:#039be5!important}.text-light-blue-8{color:#0288d1!important}.text-light-blue-9{color:#0277bd!important}.text-light-blue-10{color:#01579b!important}.text-light-blue-11{color:#80d8ff!important}.text-light-blue-12{color:#40c4ff!important}.text-light-blue-13{color:#00b0ff!important}.text-light-blue-14{color:#0091ea!important}.text-cyan{color:#00bcd4!important}.text-cyan-1{color:#e0f7fa!important}.text-cyan-2{color:#b2ebf2!important}.text-cyan-3{color:#80deea!important}.text-cyan-4{color:#4dd0e1!important}.text-cyan-5{color:#26c6da!important}.text-cyan-6{color:#00bcd4!important}.text-cyan-7{color:#00acc1!important}.text-cyan-8{color:#0097a7!important}.text-cyan-9{color:#00838f!important}.text-cyan-10{color:#006064!important}.text-cyan-11{color:#84ffff!important}.text-cyan-12{color:#18ffff!important}.text-cyan-13{color:#00e5ff!important}.text-cyan-14{color:#00b8d4!important}.text-teal{color:#009688!important}.text-teal-1{color:#e0f2f1!important}.text-teal-2{color:#b2dfdb!important}.text-teal-3{color:#80cbc4!important}.text-teal-4{color:#4db6ac!important}.text-teal-5{color:#26a69a!important}.text-teal-6{color:#009688!important}.text-teal-7{color:#00897b!important}.text-teal-8{color:#00796b!important}.text-teal-9{color:#00695c!important}.text-teal-10{color:#004d40!important}.text-teal-11{color:#a7ffeb!important}.text-teal-12{color:#64ffda!important}.text-teal-13{color:#1de9b6!important}.text-teal-14{color:#00bfa5!important}.text-green{color:#4caf50!important}.text-green-1{color:#e8f5e9!important}.text-green-2{color:#c8e6c9!important}.text-green-3{color:#a5d6a7!important}.text-green-4{color:#81c784!important}.text-green-5{color:#66bb6a!important}.text-green-6{color:#4caf50!important}.text-green-7{color:#43a047!important}.text-green-8{color:#388e3c!important}.text-green-9{color:#2e7d32!important}.text-green-10{color:#1b5e20!important}.text-green-11{color:#b9f6ca!important}.text-green-12{color:#69f0ae!important}.text-green-13{color:#00e676!important}.text-green-14{color:#00c853!important}.text-light-green{color:#8bc34a!important}.text-light-green-1{color:#f1f8e9!important}.text-light-green-2{color:#dcedc8!important}.text-light-green-3{color:#c5e1a5!important}.text-light-green-4{color:#aed581!important}.text-light-green-5{color:#9ccc65!important}.text-light-green-6{color:#8bc34a!important}.text-light-green-7{color:#7cb342!important}.text-light-green-8{color:#689f38!important}.text-light-green-9{color:#558b2f!important}.text-light-green-10{color:#33691e!important}.text-light-green-11{color:#ccff90!important}.text-light-green-12{color:#b2ff59!important}.text-light-green-13{color:#76ff03!important}.text-light-green-14{color:#64dd17!important}.text-lime{color:#cddc39!important}.text-lime-1{color:#f9fbe7!important}.text-lime-2{color:#f0f4c3!important}.text-lime-3{color:#e6ee9c!important}.text-lime-4{color:#dce775!important}.text-lime-5{color:#d4e157!important}.text-lime-6{color:#cddc39!important}.text-lime-7{color:#c0ca33!important}.text-lime-8{color:#afb42b!important}.text-lime-9{color:#9e9d24!important}.text-lime-10{color:#827717!important}.text-lime-11{color:#f4ff81!important}.text-lime-12{color:#eeff41!important}.text-lime-13{color:#c6ff00!important}.text-lime-14{color:#aeea00!important}.text-yellow{color:#ffeb3b!important}.text-yellow-1{color:#fffde7!important}.text-yellow-2{color:#fff9c4!important}.text-yellow-3{color:#fff59d!important}.text-yellow-4{color:#fff176!important}.text-yellow-5{color:#ffee58!important}.text-yellow-6{color:#ffeb3b!important}.text-yellow-7{color:#fdd835!important}.text-yellow-8{color:#fbc02d!important}.text-yellow-9{color:#f9a825!important}.text-yellow-10{color:#f57f17!important}.text-yellow-11{color:#ffff8d!important}.text-yellow-12{color:#ff0!important}.text-yellow-13{color:#ffea00!important}.text-yellow-14{color:#ffd600!important}.text-amber{color:#ffc107!important}.text-amber-1{color:#fff8e1!important}.text-amber-2{color:#ffecb3!important}.text-amber-3{color:#ffe082!important}.text-amber-4{color:#ffd54f!important}.text-amber-5{color:#ffca28!important}.text-amber-6{color:#ffc107!important}.text-amber-7{color:#ffb300!important}.text-amber-8{color:#ffa000!important}.text-amber-9{color:#ff8f00!important}.text-amber-10{color:#ff6f00!important}.text-amber-11{color:#ffe57f!important}.text-amber-12{color:#ffd740!important}.text-amber-13{color:#ffc400!important}.text-amber-14{color:#ffab00!important}.text-orange{color:#ff9800!important}.text-orange-1{color:#fff3e0!important}.text-orange-2{color:#ffe0b2!important}.text-orange-3{color:#ffcc80!important}.text-orange-4{color:#ffb74d!important}.text-orange-5{color:#ffa726!important}.text-orange-6{color:#ff9800!important}.text-orange-7{color:#fb8c00!important}.text-orange-8{color:#f57c00!important}.text-orange-9{color:#ef6c00!important}.text-orange-10{color:#e65100!important}.text-orange-11{color:#ffd180!important}.text-orange-12{color:#ffab40!important}.text-orange-13{color:#ff9100!important}.text-orange-14{color:#ff6d00!important}.text-deep-orange{color:#ff5722!important}.text-deep-orange-1{color:#fbe9e7!important}.text-deep-orange-2{color:#ffccbc!important}.text-deep-orange-3{color:#ffab91!important}.text-deep-orange-4{color:#ff8a65!important}.text-deep-orange-5{color:#ff7043!important}.text-deep-orange-6{color:#ff5722!important}.text-deep-orange-7{color:#f4511e!important}.text-deep-orange-8{color:#e64a19!important}.text-deep-orange-9{color:#d84315!important}.text-deep-orange-10{color:#bf360c!important}.text-deep-orange-11{color:#ff9e80!important}.text-deep-orange-12{color:#ff6e40!important}.text-deep-orange-13{color:#ff3d00!important}.text-deep-orange-14{color:#dd2c00!important}.text-brown{color:#795548!important}.text-brown-1{color:#efebe9!important}.text-brown-2{color:#d7ccc8!important}.text-brown-3{color:#bcaaa4!important}.text-brown-4{color:#a1887f!important}.text-brown-5{color:#8d6e63!important}.text-brown-6{color:#795548!important}.text-brown-7{color:#6d4c41!important}.text-brown-8{color:#5d4037!important}.text-brown-9{color:#4e342e!important}.text-brown-10{color:#3e2723!important}.text-brown-11{color:#d7ccc8!important}.text-brown-12{color:#bcaaa4!important}.text-brown-13{color:#8d6e63!important}.text-brown-14{color:#5d4037!important}.text-grey{color:#9e9e9e!important}.text-grey-1{color:#fafafa!important}.text-grey-2{color:#f5f5f5!important}.text-grey-3{color:#eee!important}.text-grey-4{color:#e0e0e0!important}.text-grey-5{color:#bdbdbd!important}.text-grey-6{color:#9e9e9e!important}.text-grey-7{color:#757575!important}.text-grey-8{color:#616161!important}.text-grey-9{color:#424242!important}.text-grey-10{color:#212121!important}.text-grey-11{color:#f5f5f5!important}.text-grey-12{color:#eee!important}.text-grey-13{color:#bdbdbd!important}.text-grey-14{color:#616161!important}.text-blue-grey{color:#607d8b!important}.text-blue-grey-1{color:#eceff1!important}.text-blue-grey-2{color:#cfd8dc!important}.text-blue-grey-3{color:#b0bec5!important}.text-blue-grey-4{color:#90a4ae!important}.text-blue-grey-5{color:#78909c!important}.text-blue-grey-6{color:#607d8b!important}.text-blue-grey-7{color:#546e7a!important}.text-blue-grey-8{color:#455a64!important}.text-blue-grey-9{color:#37474f!important}.text-blue-grey-10{color:#263238!important}.text-blue-grey-11{color:#cfd8dc!important}.text-blue-grey-12{color:#b0bec5!important}.text-blue-grey-13{color:#78909c!important}.text-blue-grey-14{color:#455a64!important}.bg-red{background:#f44336!important}.bg-red-1{background:#ffebee!important}.bg-red-2{background:#ffcdd2!important}.bg-red-3{background:#ef9a9a!important}.bg-red-4{background:#e57373!important}.bg-red-5{background:#ef5350!important}.bg-red-6{background:#f44336!important}.bg-red-7{background:#e53935!important}.bg-red-8{background:#d32f2f!important}.bg-red-9{background:#c62828!important}.bg-red-10{background:#b71c1c!important}.bg-red-11{background:#ff8a80!important}.bg-red-12{background:#ff5252!important}.bg-red-13{background:#ff1744!important}.bg-red-14{background:#d50000!important}.bg-pink{background:#e91e63!important}.bg-pink-1{background:#fce4ec!important}.bg-pink-2{background:#f8bbd0!important}.bg-pink-3{background:#f48fb1!important}.bg-pink-4{background:#f06292!important}.bg-pink-5{background:#ec407a!important}.bg-pink-6{background:#e91e63!important}.bg-pink-7{background:#d81b60!important}.bg-pink-8{background:#c2185b!important}.bg-pink-9{background:#ad1457!important}.bg-pink-10{background:#880e4f!important}.bg-pink-11{background:#ff80ab!important}.bg-pink-12{background:#ff4081!important}.bg-pink-13{background:#f50057!important}.bg-pink-14{background:#c51162!important}.bg-purple{background:#9c27b0!important}.bg-purple-1{background:#f3e5f5!important}.bg-purple-2{background:#e1bee7!important}.bg-purple-3{background:#ce93d8!important}.bg-purple-4{background:#ba68c8!important}.bg-purple-5{background:#ab47bc!important}.bg-purple-6{background:#9c27b0!important}.bg-purple-7{background:#8e24aa!important}.bg-purple-8{background:#7b1fa2!important}.bg-purple-9{background:#6a1b9a!important}.bg-purple-10{background:#4a148c!important}.bg-purple-11{background:#ea80fc!important}.bg-purple-12{background:#e040fb!important}.bg-purple-13{background:#d500f9!important}.bg-purple-14{background:#aa00ff!important}.bg-deep-purple{background:#673ab7!important}.bg-deep-purple-1{background:#ede7f6!important}.bg-deep-purple-2{background:#d1c4e9!important}.bg-deep-purple-3{background:#b39ddb!important}.bg-deep-purple-4{background:#9575cd!important}.bg-deep-purple-5{background:#7e57c2!important}.bg-deep-purple-6{background:#673ab7!important}.bg-deep-purple-7{background:#5e35b1!important}.bg-deep-purple-8{background:#512da8!important}.bg-deep-purple-9{background:#4527a0!important}.bg-deep-purple-10{background:#311b92!important}.bg-deep-purple-11{background:#b388ff!important}.bg-deep-purple-12{background:#7c4dff!important}.bg-deep-purple-13{background:#651fff!important}.bg-deep-purple-14{background:#6200ea!important}.bg-indigo{background:#3f51b5!important}.bg-indigo-1{background:#e8eaf6!important}.bg-indigo-2{background:#c5cae9!important}.bg-indigo-3{background:#9fa8da!important}.bg-indigo-4{background:#7986cb!important}.bg-indigo-5{background:#5c6bc0!important}.bg-indigo-6{background:#3f51b5!important}.bg-indigo-7{background:#3949ab!important}.bg-indigo-8{background:#303f9f!important}.bg-indigo-9{background:#283593!important}.bg-indigo-10{background:#1a237e!important}.bg-indigo-11{background:#8c9eff!important}.bg-indigo-12{background:#536dfe!important}.bg-indigo-13{background:#3d5afe!important}.bg-indigo-14{background:#304ffe!important}.bg-blue{background:#2196f3!important}.bg-blue-1{background:#e3f2fd!important}.bg-blue-2{background:#bbdefb!important}.bg-blue-3{background:#90caf9!important}.bg-blue-4{background:#64b5f6!important}.bg-blue-5{background:#42a5f5!important}.bg-blue-6{background:#2196f3!important}.bg-blue-7{background:#1e88e5!important}.bg-blue-8{background:#1976d2!important}.bg-blue-9{background:#1565c0!important}.bg-blue-10{background:#0d47a1!important}.bg-blue-11{background:#82b1ff!important}.bg-blue-12{background:#448aff!important}.bg-blue-13{background:#2979ff!important}.bg-blue-14{background:#2962ff!important}.bg-light-blue{background:#03a9f4!important}.bg-light-blue-1{background:#e1f5fe!important}.bg-light-blue-2{background:#b3e5fc!important}.bg-light-blue-3{background:#81d4fa!important}.bg-light-blue-4{background:#4fc3f7!important}.bg-light-blue-5{background:#29b6f6!important}.bg-light-blue-6{background:#03a9f4!important}.bg-light-blue-7{background:#039be5!important}.bg-light-blue-8{background:#0288d1!important}.bg-light-blue-9{background:#0277bd!important}.bg-light-blue-10{background:#01579b!important}.bg-light-blue-11{background:#80d8ff!important}.bg-light-blue-12{background:#40c4ff!important}.bg-light-blue-13{background:#00b0ff!important}.bg-light-blue-14{background:#0091ea!important}.bg-cyan{background:#00bcd4!important}.bg-cyan-1{background:#e0f7fa!important}.bg-cyan-2{background:#b2ebf2!important}.bg-cyan-3{background:#80deea!important}.bg-cyan-4{background:#4dd0e1!important}.bg-cyan-5{background:#26c6da!important}.bg-cyan-6{background:#00bcd4!important}.bg-cyan-7{background:#00acc1!important}.bg-cyan-8{background:#0097a7!important}.bg-cyan-9{background:#00838f!important}.bg-cyan-10{background:#006064!important}.bg-cyan-11{background:#84ffff!important}.bg-cyan-12{background:#18ffff!important}.bg-cyan-13{background:#00e5ff!important}.bg-cyan-14{background:#00b8d4!important}.bg-teal{background:#009688!important}.bg-teal-1{background:#e0f2f1!important}.bg-teal-2{background:#b2dfdb!important}.bg-teal-3{background:#80cbc4!important}.bg-teal-4{background:#4db6ac!important}.bg-teal-5{background:#26a69a!important}.bg-teal-6{background:#009688!important}.bg-teal-7{background:#00897b!important}.bg-teal-8{background:#00796b!important}.bg-teal-9{background:#00695c!important}.bg-teal-10{background:#004d40!important}.bg-teal-11{background:#a7ffeb!important}.bg-teal-12{background:#64ffda!important}.bg-teal-13{background:#1de9b6!important}.bg-teal-14{background:#00bfa5!important}.bg-green{background:#4caf50!important}.bg-green-1{background:#e8f5e9!important}.bg-green-2{background:#c8e6c9!important}.bg-green-3{background:#a5d6a7!important}.bg-green-4{background:#81c784!important}.bg-green-5{background:#66bb6a!important}.bg-green-6{background:#4caf50!important}.bg-green-7{background:#43a047!important}.bg-green-8{background:#388e3c!important}.bg-green-9{background:#2e7d32!important}.bg-green-10{background:#1b5e20!important}.bg-green-11{background:#b9f6ca!important}.bg-green-12{background:#69f0ae!important}.bg-green-13{background:#00e676!important}.bg-green-14{background:#00c853!important}.bg-light-green{background:#8bc34a!important}.bg-light-green-1{background:#f1f8e9!important}.bg-light-green-2{background:#dcedc8!important}.bg-light-green-3{background:#c5e1a5!important}.bg-light-green-4{background:#aed581!important}.bg-light-green-5{background:#9ccc65!important}.bg-light-green-6{background:#8bc34a!important}.bg-light-green-7{background:#7cb342!important}.bg-light-green-8{background:#689f38!important}.bg-light-green-9{background:#558b2f!important}.bg-light-green-10{background:#33691e!important}.bg-light-green-11{background:#ccff90!important}.bg-light-green-12{background:#b2ff59!important}.bg-light-green-13{background:#76ff03!important}.bg-light-green-14{background:#64dd17!important}.bg-lime{background:#cddc39!important}.bg-lime-1{background:#f9fbe7!important}.bg-lime-2{background:#f0f4c3!important}.bg-lime-3{background:#e6ee9c!important}.bg-lime-4{background:#dce775!important}.bg-lime-5{background:#d4e157!important}.bg-lime-6{background:#cddc39!important}.bg-lime-7{background:#c0ca33!important}.bg-lime-8{background:#afb42b!important}.bg-lime-9{background:#9e9d24!important}.bg-lime-10{background:#827717!important}.bg-lime-11{background:#f4ff81!important}.bg-lime-12{background:#eeff41!important}.bg-lime-13{background:#c6ff00!important}.bg-lime-14{background:#aeea00!important}.bg-yellow{background:#ffeb3b!important}.bg-yellow-1{background:#fffde7!important}.bg-yellow-2{background:#fff9c4!important}.bg-yellow-3{background:#fff59d!important}.bg-yellow-4{background:#fff176!important}.bg-yellow-5{background:#ffee58!important}.bg-yellow-6{background:#ffeb3b!important}.bg-yellow-7{background:#fdd835!important}.bg-yellow-8{background:#fbc02d!important}.bg-yellow-9{background:#f9a825!important}.bg-yellow-10{background:#f57f17!important}.bg-yellow-11{background:#ffff8d!important}.bg-yellow-12{background:#ffff00!important}.bg-yellow-13{background:#ffea00!important}.bg-yellow-14{background:#ffd600!important}.bg-amber{background:#ffc107!important}.bg-amber-1{background:#fff8e1!important}.bg-amber-2{background:#ffecb3!important}.bg-amber-3{background:#ffe082!important}.bg-amber-4{background:#ffd54f!important}.bg-amber-5{background:#ffca28!important}.bg-amber-6{background:#ffc107!important}.bg-amber-7{background:#ffb300!important}.bg-amber-8{background:#ffa000!important}.bg-amber-9{background:#ff8f00!important}.bg-amber-10{background:#ff6f00!important}.bg-amber-11{background:#ffe57f!important}.bg-amber-12{background:#ffd740!important}.bg-amber-13{background:#ffc400!important}.bg-amber-14{background:#ffab00!important}.bg-orange{background:#ff9800!important}.bg-orange-1{background:#fff3e0!important}.bg-orange-2{background:#ffe0b2!important}.bg-orange-3{background:#ffcc80!important}.bg-orange-4{background:#ffb74d!important}.bg-orange-5{background:#ffa726!important}.bg-orange-6{background:#ff9800!important}.bg-orange-7{background:#fb8c00!important}.bg-orange-8{background:#f57c00!important}.bg-orange-9{background:#ef6c00!important}.bg-orange-10{background:#e65100!important}.bg-orange-11{background:#ffd180!important}.bg-orange-12{background:#ffab40!important}.bg-orange-13{background:#ff9100!important}.bg-orange-14{background:#ff6d00!important}.bg-deep-orange{background:#ff5722!important}.bg-deep-orange-1{background:#fbe9e7!important}.bg-deep-orange-2{background:#ffccbc!important}.bg-deep-orange-3{background:#ffab91!important}.bg-deep-orange-4{background:#ff8a65!important}.bg-deep-orange-5{background:#ff7043!important}.bg-deep-orange-6{background:#ff5722!important}.bg-deep-orange-7{background:#f4511e!important}.bg-deep-orange-8{background:#e64a19!important}.bg-deep-orange-9{background:#d84315!important}.bg-deep-orange-10{background:#bf360c!important}.bg-deep-orange-11{background:#ff9e80!important}.bg-deep-orange-12{background:#ff6e40!important}.bg-deep-orange-13{background:#ff3d00!important}.bg-deep-orange-14{background:#dd2c00!important}.bg-brown{background:#795548!important}.bg-brown-1{background:#efebe9!important}.bg-brown-2{background:#d7ccc8!important}.bg-brown-3{background:#bcaaa4!important}.bg-brown-4{background:#a1887f!important}.bg-brown-5{background:#8d6e63!important}.bg-brown-6{background:#795548!important}.bg-brown-7{background:#6d4c41!important}.bg-brown-8{background:#5d4037!important}.bg-brown-9{background:#4e342e!important}.bg-brown-10{background:#3e2723!important}.bg-brown-11{background:#d7ccc8!important}.bg-brown-12{background:#bcaaa4!important}.bg-brown-13{background:#8d6e63!important}.bg-brown-14{background:#5d4037!important}.bg-grey{background:#9e9e9e!important}.bg-grey-1{background:#fafafa!important}.bg-grey-2{background:#f5f5f5!important}.bg-grey-3{background:#eeeeee!important}.bg-grey-4{background:#e0e0e0!important}.bg-grey-5{background:#bdbdbd!important}.bg-grey-6{background:#9e9e9e!important}.bg-grey-7{background:#757575!important}.bg-grey-8{background:#616161!important}.bg-grey-9{background:#424242!important}.bg-grey-10{background:#212121!important}.bg-grey-11{background:#f5f5f5!important}.bg-grey-12{background:#eeeeee!important}.bg-grey-13{background:#bdbdbd!important}.bg-grey-14{background:#616161!important}.bg-blue-grey{background:#607d8b!important}.bg-blue-grey-1{background:#eceff1!important}.bg-blue-grey-2{background:#cfd8dc!important}.bg-blue-grey-3{background:#b0bec5!important}.bg-blue-grey-4{background:#90a4ae!important}.bg-blue-grey-5{background:#78909c!important}.bg-blue-grey-6{background:#607d8b!important}.bg-blue-grey-7{background:#546e7a!important}.bg-blue-grey-8{background:#455a64!important}.bg-blue-grey-9{background:#37474f!important}.bg-blue-grey-10{background:#263238!important}.bg-blue-grey-11{background:#cfd8dc!important}.bg-blue-grey-12{background:#b0bec5!important}.bg-blue-grey-13{background:#78909c!important}.bg-blue-grey-14{background:#455a64!important}.shadow-transition{transition:box-shadow .28s cubic-bezier(.4,0,.2,1)!important}.shadow-1{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f}.shadow-up-1{box-shadow:0 -1px 3px #0003,0 -1px 1px #00000024,0 -2px 1px -1px #0000001f}.shadow-2{box-shadow:0 1px 5px #0003,0 2px 2px #00000024,0 3px 1px -2px #0000001f}.shadow-up-2{box-shadow:0 -1px 5px #0003,0 -2px 2px #00000024,0 -3px 1px -2px #0000001f}.shadow-3{box-shadow:0 1px 8px #0003,0 3px 4px #00000024,0 3px 3px -2px #0000001f}.shadow-up-3{box-shadow:0 -1px 8px #0003,0 -3px 4px #00000024,0 -3px 3px -2px #0000001f}.shadow-4{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.shadow-up-4{box-shadow:0 -2px 4px -1px #0003,0 -4px 5px #00000024,0 -1px 10px #0000001f}.shadow-5{box-shadow:0 3px 5px -1px #0003,0 5px 8px #00000024,0 1px 14px #0000001f}.shadow-up-5{box-shadow:0 -3px 5px -1px #0003,0 -5px 8px #00000024,0 -1px 14px #0000001f}.shadow-6{box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}.shadow-up-6{box-shadow:0 -3px 5px -1px #0003,0 -6px 10px #00000024,0 -1px 18px #0000001f}.shadow-7{box-shadow:0 4px 5px -2px #0003,0 7px 10px 1px #00000024,0 2px 16px 1px #0000001f}.shadow-up-7{box-shadow:0 -4px 5px -2px #0003,0 -7px 10px 1px #00000024,0 -2px 16px 1px #0000001f}.shadow-8{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.shadow-up-8{box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.shadow-9{box-shadow:0 5px 6px -3px #0003,0 9px 12px 1px #00000024,0 3px 16px 2px #0000001f}.shadow-up-9{box-shadow:0 -5px 6px -3px #0003,0 -9px 12px 1px #00000024,0 -3px 16px 2px #0000001f}.shadow-10{box-shadow:0 6px 6px -3px #0003,0 10px 14px 1px #00000024,0 4px 18px 3px #0000001f}.shadow-up-10{box-shadow:0 -6px 6px -3px #0003,0 -10px 14px 1px #00000024,0 -4px 18px 3px #0000001f}.shadow-11{box-shadow:0 6px 7px -4px #0003,0 11px 15px 1px #00000024,0 4px 20px 3px #0000001f}.shadow-up-11{box-shadow:0 -6px 7px -4px #0003,0 -11px 15px 1px #00000024,0 -4px 20px 3px #0000001f}.shadow-12{box-shadow:0 7px 8px -4px #0003,0 12px 17px 2px #00000024,0 5px 22px 4px #0000001f}.shadow-up-12{box-shadow:0 -7px 8px -4px #0003,0 -12px 17px 2px #00000024,0 -5px 22px 4px #0000001f}.shadow-13{box-shadow:0 7px 8px -4px #0003,0 13px 19px 2px #00000024,0 5px 24px 4px #0000001f}.shadow-up-13{box-shadow:0 -7px 8px -4px #0003,0 -13px 19px 2px #00000024,0 -5px 24px 4px #0000001f}.shadow-14{box-shadow:0 7px 9px -4px #0003,0 14px 21px 2px #00000024,0 5px 26px 4px #0000001f}.shadow-up-14{box-shadow:0 -7px 9px -4px #0003,0 -14px 21px 2px #00000024,0 -5px 26px 4px #0000001f}.shadow-15{box-shadow:0 8px 9px -5px #0003,0 15px 22px 2px #00000024,0 6px 28px 5px #0000001f}.shadow-up-15{box-shadow:0 -8px 9px -5px #0003,0 -15px 22px 2px #00000024,0 -6px 28px 5px #0000001f}.shadow-16{box-shadow:0 8px 10px -5px #0003,0 16px 24px 2px #00000024,0 6px 30px 5px #0000001f}.shadow-up-16{box-shadow:0 -8px 10px -5px #0003,0 -16px 24px 2px #00000024,0 -6px 30px 5px #0000001f}.shadow-17{box-shadow:0 8px 11px -5px #0003,0 17px 26px 2px #00000024,0 6px 32px 5px #0000001f}.shadow-up-17{box-shadow:0 -8px 11px -5px #0003,0 -17px 26px 2px #00000024,0 -6px 32px 5px #0000001f}.shadow-18{box-shadow:0 9px 11px -5px #0003,0 18px 28px 2px #00000024,0 7px 34px 6px #0000001f}.shadow-up-18{box-shadow:0 -9px 11px -5px #0003,0 -18px 28px 2px #00000024,0 -7px 34px 6px #0000001f}.shadow-19{box-shadow:0 9px 12px -6px #0003,0 19px 29px 2px #00000024,0 7px 36px 6px #0000001f}.shadow-up-19{box-shadow:0 -9px 12px -6px #0003,0 -19px 29px 2px #00000024,0 -7px 36px 6px #0000001f}.shadow-20{box-shadow:0 10px 13px -6px #0003,0 20px 31px 3px #00000024,0 8px 38px 7px #0000001f}.shadow-up-20{box-shadow:0 -10px 13px -6px #0003,0 -20px 31px 3px #00000024,0 -8px 38px 7px #0000001f}.shadow-21{box-shadow:0 10px 13px -6px #0003,0 21px 33px 3px #00000024,0 8px 40px 7px #0000001f}.shadow-up-21{box-shadow:0 -10px 13px -6px #0003,0 -21px 33px 3px #00000024,0 -8px 40px 7px #0000001f}.shadow-22{box-shadow:0 10px 14px -6px #0003,0 22px 35px 3px #00000024,0 8px 42px 7px #0000001f}.shadow-up-22{box-shadow:0 -10px 14px -6px #0003,0 -22px 35px 3px #00000024,0 -8px 42px 7px #0000001f}.shadow-23{box-shadow:0 11px 14px -7px #0003,0 23px 36px 3px #00000024,0 9px 44px 8px #0000001f}.shadow-up-23{box-shadow:0 -11px 14px -7px #0003,0 -23px 36px 3px #00000024,0 -9px 44px 8px #0000001f}.shadow-24{box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.shadow-up-24{box-shadow:0 -11px 15px -7px #0003,0 -24px 38px 3px #00000024,0 -9px 46px 8px #0000001f}.inset-shadow{box-shadow:0 7px 9px -7px #000000b3 inset}.inset-shadow-down{box-shadow:0 -7px 9px -7px #000000b3 inset}body.body--dark .shadow-1{box-shadow:0 1px 3px #fff3,0 1px 1px #ffffff24,0 2px 1px -1px #ffffff1f}body.body--dark .shadow-up-1{box-shadow:0 -1px 3px #fff3,0 -1px 1px #ffffff24,0 -2px 1px -1px #ffffff1f}body.body--dark .shadow-2{box-shadow:0 1px 5px #fff3,0 2px 2px #ffffff24,0 3px 1px -2px #ffffff1f}body.body--dark .shadow-up-2{box-shadow:0 -1px 5px #fff3,0 -2px 2px #ffffff24,0 -3px 1px -2px #ffffff1f}body.body--dark .shadow-3{box-shadow:0 1px 8px #fff3,0 3px 4px #ffffff24,0 3px 3px -2px #ffffff1f}body.body--dark .shadow-up-3{box-shadow:0 -1px 8px #fff3,0 -3px 4px #ffffff24,0 -3px 3px -2px #ffffff1f}body.body--dark .shadow-4{box-shadow:0 2px 4px -1px #fff3,0 4px 5px #ffffff24,0 1px 10px #ffffff1f}body.body--dark .shadow-up-4{box-shadow:0 -2px 4px -1px #fff3,0 -4px 5px #ffffff24,0 -1px 10px #ffffff1f}body.body--dark .shadow-5{box-shadow:0 3px 5px -1px #fff3,0 5px 8px #ffffff24,0 1px 14px #ffffff1f}body.body--dark .shadow-up-5{box-shadow:0 -3px 5px -1px #fff3,0 -5px 8px #ffffff24,0 -1px 14px #ffffff1f}body.body--dark .shadow-6{box-shadow:0 3px 5px -1px #fff3,0 6px 10px #ffffff24,0 1px 18px #ffffff1f}body.body--dark .shadow-up-6{box-shadow:0 -3px 5px -1px #fff3,0 -6px 10px #ffffff24,0 -1px 18px #ffffff1f}body.body--dark .shadow-7{box-shadow:0 4px 5px -2px #fff3,0 7px 10px 1px #ffffff24,0 2px 16px 1px #ffffff1f}body.body--dark .shadow-up-7{box-shadow:0 -4px 5px -2px #fff3,0 -7px 10px 1px #ffffff24,0 -2px 16px 1px #ffffff1f}body.body--dark .shadow-8{box-shadow:0 5px 5px -3px #fff3,0 8px 10px 1px #ffffff24,0 3px 14px 2px #ffffff1f}body.body--dark .shadow-up-8{box-shadow:0 -5px 5px -3px #fff3,0 -8px 10px 1px #ffffff24,0 -3px 14px 2px #ffffff1f}body.body--dark .shadow-9{box-shadow:0 5px 6px -3px #fff3,0 9px 12px 1px #ffffff24,0 3px 16px 2px #ffffff1f}body.body--dark .shadow-up-9{box-shadow:0 -5px 6px -3px #fff3,0 -9px 12px 1px #ffffff24,0 -3px 16px 2px #ffffff1f}body.body--dark .shadow-10{box-shadow:0 6px 6px -3px #fff3,0 10px 14px 1px #ffffff24,0 4px 18px 3px #ffffff1f}body.body--dark .shadow-up-10{box-shadow:0 -6px 6px -3px #fff3,0 -10px 14px 1px #ffffff24,0 -4px 18px 3px #ffffff1f}body.body--dark .shadow-11{box-shadow:0 6px 7px -4px #fff3,0 11px 15px 1px #ffffff24,0 4px 20px 3px #ffffff1f}body.body--dark .shadow-up-11{box-shadow:0 -6px 7px -4px #fff3,0 -11px 15px 1px #ffffff24,0 -4px 20px 3px #ffffff1f}body.body--dark .shadow-12{box-shadow:0 7px 8px -4px #fff3,0 12px 17px 2px #ffffff24,0 5px 22px 4px #ffffff1f}body.body--dark .shadow-up-12{box-shadow:0 -7px 8px -4px #fff3,0 -12px 17px 2px #ffffff24,0 -5px 22px 4px #ffffff1f}body.body--dark .shadow-13{box-shadow:0 7px 8px -4px #fff3,0 13px 19px 2px #ffffff24,0 5px 24px 4px #ffffff1f}body.body--dark .shadow-up-13{box-shadow:0 -7px 8px -4px #fff3,0 -13px 19px 2px #ffffff24,0 -5px 24px 4px #ffffff1f}body.body--dark .shadow-14{box-shadow:0 7px 9px -4px #fff3,0 14px 21px 2px #ffffff24,0 5px 26px 4px #ffffff1f}body.body--dark .shadow-up-14{box-shadow:0 -7px 9px -4px #fff3,0 -14px 21px 2px #ffffff24,0 -5px 26px 4px #ffffff1f}body.body--dark .shadow-15{box-shadow:0 8px 9px -5px #fff3,0 15px 22px 2px #ffffff24,0 6px 28px 5px #ffffff1f}body.body--dark .shadow-up-15{box-shadow:0 -8px 9px -5px #fff3,0 -15px 22px 2px #ffffff24,0 -6px 28px 5px #ffffff1f}body.body--dark .shadow-16{box-shadow:0 8px 10px -5px #fff3,0 16px 24px 2px #ffffff24,0 6px 30px 5px #ffffff1f}body.body--dark .shadow-up-16{box-shadow:0 -8px 10px -5px #fff3,0 -16px 24px 2px #ffffff24,0 -6px 30px 5px #ffffff1f}body.body--dark .shadow-17{box-shadow:0 8px 11px -5px #fff3,0 17px 26px 2px #ffffff24,0 6px 32px 5px #ffffff1f}body.body--dark .shadow-up-17{box-shadow:0 -8px 11px -5px #fff3,0 -17px 26px 2px #ffffff24,0 -6px 32px 5px #ffffff1f}body.body--dark .shadow-18{box-shadow:0 9px 11px -5px #fff3,0 18px 28px 2px #ffffff24,0 7px 34px 6px #ffffff1f}body.body--dark .shadow-up-18{box-shadow:0 -9px 11px -5px #fff3,0 -18px 28px 2px #ffffff24,0 -7px 34px 6px #ffffff1f}body.body--dark .shadow-19{box-shadow:0 9px 12px -6px #fff3,0 19px 29px 2px #ffffff24,0 7px 36px 6px #ffffff1f}body.body--dark .shadow-up-19{box-shadow:0 -9px 12px -6px #fff3,0 -19px 29px 2px #ffffff24,0 -7px 36px 6px #ffffff1f}body.body--dark .shadow-20{box-shadow:0 10px 13px -6px #fff3,0 20px 31px 3px #ffffff24,0 8px 38px 7px #ffffff1f}body.body--dark .shadow-up-20{box-shadow:0 -10px 13px -6px #fff3,0 -20px 31px 3px #ffffff24,0 -8px 38px 7px #ffffff1f}body.body--dark .shadow-21{box-shadow:0 10px 13px -6px #fff3,0 21px 33px 3px #ffffff24,0 8px 40px 7px #ffffff1f}body.body--dark .shadow-up-21{box-shadow:0 -10px 13px -6px #fff3,0 -21px 33px 3px #ffffff24,0 -8px 40px 7px #ffffff1f}body.body--dark .shadow-22{box-shadow:0 10px 14px -6px #fff3,0 22px 35px 3px #ffffff24,0 8px 42px 7px #ffffff1f}body.body--dark .shadow-up-22{box-shadow:0 -10px 14px -6px #fff3,0 -22px 35px 3px #ffffff24,0 -8px 42px 7px #ffffff1f}body.body--dark .shadow-23{box-shadow:0 11px 14px -7px #fff3,0 23px 36px 3px #ffffff24,0 9px 44px 8px #ffffff1f}body.body--dark .shadow-up-23{box-shadow:0 -11px 14px -7px #fff3,0 -23px 36px 3px #ffffff24,0 -9px 44px 8px #ffffff1f}body.body--dark .shadow-24{box-shadow:0 11px 15px -7px #fff3,0 24px 38px 3px #ffffff24,0 9px 46px 8px #ffffff1f}body.body--dark .shadow-up-24{box-shadow:0 -11px 15px -7px #fff3,0 -24px 38px 3px #ffffff24,0 -9px 46px 8px #ffffff1f}body.body--dark .inset-shadow{box-shadow:0 7px 9px -7px #ffffffb3 inset}body.body--dark .inset-shadow-down{box-shadow:0 -7px 9px -7px #ffffffb3 inset}.no-shadow,.shadow-0{box-shadow:none!important}.z-marginals{z-index:2000}.z-notify{z-index:9500}.z-fullscreen{z-index:6000}.z-inherit{z-index:inherit!important}.row,.column,.flex{display:flex;flex-wrap:wrap}.row.inline,.column.inline,.flex.inline{display:inline-flex}.row.reverse{flex-direction:row-reverse}.column{flex-direction:column}.column.reverse{flex-direction:column-reverse}.wrap{flex-wrap:wrap}.no-wrap{flex-wrap:nowrap}.reverse-wrap{flex-wrap:wrap-reverse}.order-first{order:-10000}.order-last{order:10000}.order-none{order:0}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center,.flex-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center,.flex-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-stretch{align-content:stretch}.content-between{align-content:space-between}.content-around{align-content:space-around}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.q-gutter-x-none,.q-gutter-none{margin-left:0}.q-gutter-x-none>*,.q-gutter-none>*{margin-left:0}.q-gutter-y-none,.q-gutter-none{margin-top:0}.q-gutter-y-none>*,.q-gutter-none>*{margin-top:0}.q-col-gutter-x-none,.q-col-gutter-none{margin-left:0}.q-col-gutter-x-none>*,.q-col-gutter-none>*{padding-left:0}.q-col-gutter-y-none,.q-col-gutter-none{margin-top:0}.q-col-gutter-y-none>*,.q-col-gutter-none>*{padding-top:0}.q-gutter-x-xs,.q-gutter-xs{margin-left:-4px}.q-gutter-x-xs>*,.q-gutter-xs>*{margin-left:4px}.q-gutter-y-xs,.q-gutter-xs{margin-top:-4px}.q-gutter-y-xs>*,.q-gutter-xs>*{margin-top:4px}.q-col-gutter-x-xs,.q-col-gutter-xs{margin-left:-4px}.q-col-gutter-x-xs>*,.q-col-gutter-xs>*{padding-left:4px}.q-col-gutter-y-xs,.q-col-gutter-xs{margin-top:-4px}.q-col-gutter-y-xs>*,.q-col-gutter-xs>*{padding-top:4px}.q-gutter-x-sm,.q-gutter-sm{margin-left:-8px}.q-gutter-x-sm>*,.q-gutter-sm>*{margin-left:8px}.q-gutter-y-sm,.q-gutter-sm{margin-top:-8px}.q-gutter-y-sm>*,.q-gutter-sm>*{margin-top:8px}.q-col-gutter-x-sm,.q-col-gutter-sm{margin-left:-8px}.q-col-gutter-x-sm>*,.q-col-gutter-sm>*{padding-left:8px}.q-col-gutter-y-sm,.q-col-gutter-sm{margin-top:-8px}.q-col-gutter-y-sm>*,.q-col-gutter-sm>*{padding-top:8px}.q-gutter-x-md,.q-gutter-md{margin-left:-16px}.q-gutter-x-md>*,.q-gutter-md>*{margin-left:16px}.q-gutter-y-md,.q-gutter-md{margin-top:-16px}.q-gutter-y-md>*,.q-gutter-md>*{margin-top:16px}.q-col-gutter-x-md,.q-col-gutter-md{margin-left:-16px}.q-col-gutter-x-md>*,.q-col-gutter-md>*{padding-left:16px}.q-col-gutter-y-md,.q-col-gutter-md{margin-top:-16px}.q-col-gutter-y-md>*,.q-col-gutter-md>*{padding-top:16px}.q-gutter-x-lg,.q-gutter-lg{margin-left:-24px}.q-gutter-x-lg>*,.q-gutter-lg>*{margin-left:24px}.q-gutter-y-lg,.q-gutter-lg{margin-top:-24px}.q-gutter-y-lg>*,.q-gutter-lg>*{margin-top:24px}.q-col-gutter-x-lg,.q-col-gutter-lg{margin-left:-24px}.q-col-gutter-x-lg>*,.q-col-gutter-lg>*{padding-left:24px}.q-col-gutter-y-lg,.q-col-gutter-lg{margin-top:-24px}.q-col-gutter-y-lg>*,.q-col-gutter-lg>*{padding-top:24px}.q-gutter-x-xl,.q-gutter-xl{margin-left:-48px}.q-gutter-x-xl>*,.q-gutter-xl>*{margin-left:48px}.q-gutter-y-xl,.q-gutter-xl{margin-top:-48px}.q-gutter-y-xl>*,.q-gutter-xl>*{margin-top:48px}.q-col-gutter-x-xl,.q-col-gutter-xl{margin-left:-48px}.q-col-gutter-x-xl>*,.q-col-gutter-xl>*{padding-left:48px}.q-col-gutter-y-xl,.q-col-gutter-xl{margin-top:-48px}.q-col-gutter-y-xl>*,.q-col-gutter-xl>*{padding-top:48px}@media (min-width: 0){.row>.col,.flex>.col,.row>.col-auto,.flex>.col-auto,.row>.col-grow,.flex>.col-grow,.row>.col-shrink,.flex>.col-shrink,.row>.col-xs,.flex>.col-xs,.row>.col-xs-auto,.row>.col-12,.row>.col-xs-12,.row>.col-11,.row>.col-xs-11,.row>.col-10,.row>.col-xs-10,.row>.col-9,.row>.col-xs-9,.row>.col-8,.row>.col-xs-8,.row>.col-7,.row>.col-xs-7,.row>.col-6,.row>.col-xs-6,.row>.col-5,.row>.col-xs-5,.row>.col-4,.row>.col-xs-4,.row>.col-3,.row>.col-xs-3,.row>.col-2,.row>.col-xs-2,.row>.col-1,.row>.col-xs-1,.row>.col-0,.row>.col-xs-0,.flex>.col-xs-auto,.flex>.col-12,.flex>.col-xs-12,.flex>.col-11,.flex>.col-xs-11,.flex>.col-10,.flex>.col-xs-10,.flex>.col-9,.flex>.col-xs-9,.flex>.col-8,.flex>.col-xs-8,.flex>.col-7,.flex>.col-xs-7,.flex>.col-6,.flex>.col-xs-6,.flex>.col-5,.flex>.col-xs-5,.flex>.col-4,.flex>.col-xs-4,.flex>.col-3,.flex>.col-xs-3,.flex>.col-2,.flex>.col-xs-2,.flex>.col-1,.flex>.col-xs-1,.flex>.col-0,.flex>.col-xs-0,.row>.col-xs-grow,.flex>.col-xs-grow,.row>.col-xs-shrink,.flex>.col-xs-shrink{width:auto;min-width:0;max-width:100%}.column>.col,.flex>.col,.column>.col-auto,.flex>.col-auto,.column>.col-grow,.flex>.col-grow,.column>.col-shrink,.flex>.col-shrink,.column>.col-xs,.flex>.col-xs,.column>.col-xs-auto,.column>.col-12,.column>.col-xs-12,.column>.col-11,.column>.col-xs-11,.column>.col-10,.column>.col-xs-10,.column>.col-9,.column>.col-xs-9,.column>.col-8,.column>.col-xs-8,.column>.col-7,.column>.col-xs-7,.column>.col-6,.column>.col-xs-6,.column>.col-5,.column>.col-xs-5,.column>.col-4,.column>.col-xs-4,.column>.col-3,.column>.col-xs-3,.column>.col-2,.column>.col-xs-2,.column>.col-1,.column>.col-xs-1,.column>.col-0,.column>.col-xs-0,.flex>.col-xs-auto,.flex>.col-12,.flex>.col-xs-12,.flex>.col-11,.flex>.col-xs-11,.flex>.col-10,.flex>.col-xs-10,.flex>.col-9,.flex>.col-xs-9,.flex>.col-8,.flex>.col-xs-8,.flex>.col-7,.flex>.col-xs-7,.flex>.col-6,.flex>.col-xs-6,.flex>.col-5,.flex>.col-xs-5,.flex>.col-4,.flex>.col-xs-4,.flex>.col-3,.flex>.col-xs-3,.flex>.col-2,.flex>.col-xs-2,.flex>.col-1,.flex>.col-xs-1,.flex>.col-0,.flex>.col-xs-0,.column>.col-xs-grow,.flex>.col-xs-grow,.column>.col-xs-shrink,.flex>.col-xs-shrink{height:auto;min-height:0;max-height:100%}.col,.col-xs{flex:10000 1 0%}.col-auto,.col-xs-auto,.col-12,.col-xs-12,.col-11,.col-xs-11,.col-10,.col-xs-10,.col-9,.col-xs-9,.col-8,.col-xs-8,.col-7,.col-xs-7,.col-6,.col-xs-6,.col-5,.col-xs-5,.col-4,.col-xs-4,.col-3,.col-xs-3,.col-2,.col-xs-2,.col-1,.col-xs-1,.col-0,.col-xs-0{flex:0 0 auto}.col-grow,.col-xs-grow{flex:1 0 auto}.col-shrink,.col-xs-shrink{flex:0 1 auto}.row>.col-0,.row>.col-xs-0{height:auto;width:0%}.row>.offset-0,.row>.offset-xs-0{margin-left:0%}.column>.col-0,.column>.col-xs-0{height:0%;width:auto}.row>.col-1,.row>.col-xs-1{height:auto;width:8.3333%}.row>.offset-1,.row>.offset-xs-1{margin-left:8.3333%}.column>.col-1,.column>.col-xs-1{height:8.3333%;width:auto}.row>.col-2,.row>.col-xs-2{height:auto;width:16.6667%}.row>.offset-2,.row>.offset-xs-2{margin-left:16.6667%}.column>.col-2,.column>.col-xs-2{height:16.6667%;width:auto}.row>.col-3,.row>.col-xs-3{height:auto;width:25%}.row>.offset-3,.row>.offset-xs-3{margin-left:25%}.column>.col-3,.column>.col-xs-3{height:25%;width:auto}.row>.col-4,.row>.col-xs-4{height:auto;width:33.3333%}.row>.offset-4,.row>.offset-xs-4{margin-left:33.3333%}.column>.col-4,.column>.col-xs-4{height:33.3333%;width:auto}.row>.col-5,.row>.col-xs-5{height:auto;width:41.6667%}.row>.offset-5,.row>.offset-xs-5{margin-left:41.6667%}.column>.col-5,.column>.col-xs-5{height:41.6667%;width:auto}.row>.col-6,.row>.col-xs-6{height:auto;width:50%}.row>.offset-6,.row>.offset-xs-6{margin-left:50%}.column>.col-6,.column>.col-xs-6{height:50%;width:auto}.row>.col-7,.row>.col-xs-7{height:auto;width:58.3333%}.row>.offset-7,.row>.offset-xs-7{margin-left:58.3333%}.column>.col-7,.column>.col-xs-7{height:58.3333%;width:auto}.row>.col-8,.row>.col-xs-8{height:auto;width:66.6667%}.row>.offset-8,.row>.offset-xs-8{margin-left:66.6667%}.column>.col-8,.column>.col-xs-8{height:66.6667%;width:auto}.row>.col-9,.row>.col-xs-9{height:auto;width:75%}.row>.offset-9,.row>.offset-xs-9{margin-left:75%}.column>.col-9,.column>.col-xs-9{height:75%;width:auto}.row>.col-10,.row>.col-xs-10{height:auto;width:83.3333%}.row>.offset-10,.row>.offset-xs-10{margin-left:83.3333%}.column>.col-10,.column>.col-xs-10{height:83.3333%;width:auto}.row>.col-11,.row>.col-xs-11{height:auto;width:91.6667%}.row>.offset-11,.row>.offset-xs-11{margin-left:91.6667%}.column>.col-11,.column>.col-xs-11{height:91.6667%;width:auto}.row>.col-12,.row>.col-xs-12{height:auto;width:100%}.row>.offset-12,.row>.offset-xs-12{margin-left:100%}.column>.col-12,.column>.col-xs-12{height:100%;width:auto}.row>.col-all{height:auto;flex:0 0 100%}}@media (min-width: 600px){.row>.col-sm,.flex>.col-sm,.row>.col-sm-auto,.row>.col-sm-12,.row>.col-sm-11,.row>.col-sm-10,.row>.col-sm-9,.row>.col-sm-8,.row>.col-sm-7,.row>.col-sm-6,.row>.col-sm-5,.row>.col-sm-4,.row>.col-sm-3,.row>.col-sm-2,.row>.col-sm-1,.row>.col-sm-0,.flex>.col-sm-auto,.flex>.col-sm-12,.flex>.col-sm-11,.flex>.col-sm-10,.flex>.col-sm-9,.flex>.col-sm-8,.flex>.col-sm-7,.flex>.col-sm-6,.flex>.col-sm-5,.flex>.col-sm-4,.flex>.col-sm-3,.flex>.col-sm-2,.flex>.col-sm-1,.flex>.col-sm-0,.row>.col-sm-grow,.flex>.col-sm-grow,.row>.col-sm-shrink,.flex>.col-sm-shrink{width:auto;min-width:0;max-width:100%}.column>.col-sm,.flex>.col-sm,.column>.col-sm-auto,.column>.col-sm-12,.column>.col-sm-11,.column>.col-sm-10,.column>.col-sm-9,.column>.col-sm-8,.column>.col-sm-7,.column>.col-sm-6,.column>.col-sm-5,.column>.col-sm-4,.column>.col-sm-3,.column>.col-sm-2,.column>.col-sm-1,.column>.col-sm-0,.flex>.col-sm-auto,.flex>.col-sm-12,.flex>.col-sm-11,.flex>.col-sm-10,.flex>.col-sm-9,.flex>.col-sm-8,.flex>.col-sm-7,.flex>.col-sm-6,.flex>.col-sm-5,.flex>.col-sm-4,.flex>.col-sm-3,.flex>.col-sm-2,.flex>.col-sm-1,.flex>.col-sm-0,.column>.col-sm-grow,.flex>.col-sm-grow,.column>.col-sm-shrink,.flex>.col-sm-shrink{height:auto;min-height:0;max-height:100%}.col-sm{flex:10000 1 0%}.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col-sm-0{flex:0 0 auto}.col-sm-grow{flex:1 0 auto}.col-sm-shrink{flex:0 1 auto}.row>.col-sm-0{height:auto;width:0%}.row>.offset-sm-0{margin-left:0%}.column>.col-sm-0{height:0%;width:auto}.row>.col-sm-1{height:auto;width:8.3333%}.row>.offset-sm-1{margin-left:8.3333%}.column>.col-sm-1{height:8.3333%;width:auto}.row>.col-sm-2{height:auto;width:16.6667%}.row>.offset-sm-2{margin-left:16.6667%}.column>.col-sm-2{height:16.6667%;width:auto}.row>.col-sm-3{height:auto;width:25%}.row>.offset-sm-3{margin-left:25%}.column>.col-sm-3{height:25%;width:auto}.row>.col-sm-4{height:auto;width:33.3333%}.row>.offset-sm-4{margin-left:33.3333%}.column>.col-sm-4{height:33.3333%;width:auto}.row>.col-sm-5{height:auto;width:41.6667%}.row>.offset-sm-5{margin-left:41.6667%}.column>.col-sm-5{height:41.6667%;width:auto}.row>.col-sm-6{height:auto;width:50%}.row>.offset-sm-6{margin-left:50%}.column>.col-sm-6{height:50%;width:auto}.row>.col-sm-7{height:auto;width:58.3333%}.row>.offset-sm-7{margin-left:58.3333%}.column>.col-sm-7{height:58.3333%;width:auto}.row>.col-sm-8{height:auto;width:66.6667%}.row>.offset-sm-8{margin-left:66.6667%}.column>.col-sm-8{height:66.6667%;width:auto}.row>.col-sm-9{height:auto;width:75%}.row>.offset-sm-9{margin-left:75%}.column>.col-sm-9{height:75%;width:auto}.row>.col-sm-10{height:auto;width:83.3333%}.row>.offset-sm-10{margin-left:83.3333%}.column>.col-sm-10{height:83.3333%;width:auto}.row>.col-sm-11{height:auto;width:91.6667%}.row>.offset-sm-11{margin-left:91.6667%}.column>.col-sm-11{height:91.6667%;width:auto}.row>.col-sm-12{height:auto;width:100%}.row>.offset-sm-12{margin-left:100%}.column>.col-sm-12{height:100%;width:auto}}@media (min-width: 1024px){.row>.col-md,.flex>.col-md,.row>.col-md-auto,.row>.col-md-12,.row>.col-md-11,.row>.col-md-10,.row>.col-md-9,.row>.col-md-8,.row>.col-md-7,.row>.col-md-6,.row>.col-md-5,.row>.col-md-4,.row>.col-md-3,.row>.col-md-2,.row>.col-md-1,.row>.col-md-0,.flex>.col-md-auto,.flex>.col-md-12,.flex>.col-md-11,.flex>.col-md-10,.flex>.col-md-9,.flex>.col-md-8,.flex>.col-md-7,.flex>.col-md-6,.flex>.col-md-5,.flex>.col-md-4,.flex>.col-md-3,.flex>.col-md-2,.flex>.col-md-1,.flex>.col-md-0,.row>.col-md-grow,.flex>.col-md-grow,.row>.col-md-shrink,.flex>.col-md-shrink{width:auto;min-width:0;max-width:100%}.column>.col-md,.flex>.col-md,.column>.col-md-auto,.column>.col-md-12,.column>.col-md-11,.column>.col-md-10,.column>.col-md-9,.column>.col-md-8,.column>.col-md-7,.column>.col-md-6,.column>.col-md-5,.column>.col-md-4,.column>.col-md-3,.column>.col-md-2,.column>.col-md-1,.column>.col-md-0,.flex>.col-md-auto,.flex>.col-md-12,.flex>.col-md-11,.flex>.col-md-10,.flex>.col-md-9,.flex>.col-md-8,.flex>.col-md-7,.flex>.col-md-6,.flex>.col-md-5,.flex>.col-md-4,.flex>.col-md-3,.flex>.col-md-2,.flex>.col-md-1,.flex>.col-md-0,.column>.col-md-grow,.flex>.col-md-grow,.column>.col-md-shrink,.flex>.col-md-shrink{height:auto;min-height:0;max-height:100%}.col-md{flex:10000 1 0%}.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-md-0{flex:0 0 auto}.col-md-grow{flex:1 0 auto}.col-md-shrink{flex:0 1 auto}.row>.col-md-0{height:auto;width:0%}.row>.offset-md-0{margin-left:0%}.column>.col-md-0{height:0%;width:auto}.row>.col-md-1{height:auto;width:8.3333%}.row>.offset-md-1{margin-left:8.3333%}.column>.col-md-1{height:8.3333%;width:auto}.row>.col-md-2{height:auto;width:16.6667%}.row>.offset-md-2{margin-left:16.6667%}.column>.col-md-2{height:16.6667%;width:auto}.row>.col-md-3{height:auto;width:25%}.row>.offset-md-3{margin-left:25%}.column>.col-md-3{height:25%;width:auto}.row>.col-md-4{height:auto;width:33.3333%}.row>.offset-md-4{margin-left:33.3333%}.column>.col-md-4{height:33.3333%;width:auto}.row>.col-md-5{height:auto;width:41.6667%}.row>.offset-md-5{margin-left:41.6667%}.column>.col-md-5{height:41.6667%;width:auto}.row>.col-md-6{height:auto;width:50%}.row>.offset-md-6{margin-left:50%}.column>.col-md-6{height:50%;width:auto}.row>.col-md-7{height:auto;width:58.3333%}.row>.offset-md-7{margin-left:58.3333%}.column>.col-md-7{height:58.3333%;width:auto}.row>.col-md-8{height:auto;width:66.6667%}.row>.offset-md-8{margin-left:66.6667%}.column>.col-md-8{height:66.6667%;width:auto}.row>.col-md-9{height:auto;width:75%}.row>.offset-md-9{margin-left:75%}.column>.col-md-9{height:75%;width:auto}.row>.col-md-10{height:auto;width:83.3333%}.row>.offset-md-10{margin-left:83.3333%}.column>.col-md-10{height:83.3333%;width:auto}.row>.col-md-11{height:auto;width:91.6667%}.row>.offset-md-11{margin-left:91.6667%}.column>.col-md-11{height:91.6667%;width:auto}.row>.col-md-12{height:auto;width:100%}.row>.offset-md-12{margin-left:100%}.column>.col-md-12{height:100%;width:auto}}@media (min-width: 1440px){.row>.col-lg,.flex>.col-lg,.row>.col-lg-auto,.row>.col-lg-12,.row>.col-lg-11,.row>.col-lg-10,.row>.col-lg-9,.row>.col-lg-8,.row>.col-lg-7,.row>.col-lg-6,.row>.col-lg-5,.row>.col-lg-4,.row>.col-lg-3,.row>.col-lg-2,.row>.col-lg-1,.row>.col-lg-0,.flex>.col-lg-auto,.flex>.col-lg-12,.flex>.col-lg-11,.flex>.col-lg-10,.flex>.col-lg-9,.flex>.col-lg-8,.flex>.col-lg-7,.flex>.col-lg-6,.flex>.col-lg-5,.flex>.col-lg-4,.flex>.col-lg-3,.flex>.col-lg-2,.flex>.col-lg-1,.flex>.col-lg-0,.row>.col-lg-grow,.flex>.col-lg-grow,.row>.col-lg-shrink,.flex>.col-lg-shrink{width:auto;min-width:0;max-width:100%}.column>.col-lg,.flex>.col-lg,.column>.col-lg-auto,.column>.col-lg-12,.column>.col-lg-11,.column>.col-lg-10,.column>.col-lg-9,.column>.col-lg-8,.column>.col-lg-7,.column>.col-lg-6,.column>.col-lg-5,.column>.col-lg-4,.column>.col-lg-3,.column>.col-lg-2,.column>.col-lg-1,.column>.col-lg-0,.flex>.col-lg-auto,.flex>.col-lg-12,.flex>.col-lg-11,.flex>.col-lg-10,.flex>.col-lg-9,.flex>.col-lg-8,.flex>.col-lg-7,.flex>.col-lg-6,.flex>.col-lg-5,.flex>.col-lg-4,.flex>.col-lg-3,.flex>.col-lg-2,.flex>.col-lg-1,.flex>.col-lg-0,.column>.col-lg-grow,.flex>.col-lg-grow,.column>.col-lg-shrink,.flex>.col-lg-shrink{height:auto;min-height:0;max-height:100%}.col-lg{flex:10000 1 0%}.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-lg-0{flex:0 0 auto}.col-lg-grow{flex:1 0 auto}.col-lg-shrink{flex:0 1 auto}.row>.col-lg-0{height:auto;width:0%}.row>.offset-lg-0{margin-left:0%}.column>.col-lg-0{height:0%;width:auto}.row>.col-lg-1{height:auto;width:8.3333%}.row>.offset-lg-1{margin-left:8.3333%}.column>.col-lg-1{height:8.3333%;width:auto}.row>.col-lg-2{height:auto;width:16.6667%}.row>.offset-lg-2{margin-left:16.6667%}.column>.col-lg-2{height:16.6667%;width:auto}.row>.col-lg-3{height:auto;width:25%}.row>.offset-lg-3{margin-left:25%}.column>.col-lg-3{height:25%;width:auto}.row>.col-lg-4{height:auto;width:33.3333%}.row>.offset-lg-4{margin-left:33.3333%}.column>.col-lg-4{height:33.3333%;width:auto}.row>.col-lg-5{height:auto;width:41.6667%}.row>.offset-lg-5{margin-left:41.6667%}.column>.col-lg-5{height:41.6667%;width:auto}.row>.col-lg-6{height:auto;width:50%}.row>.offset-lg-6{margin-left:50%}.column>.col-lg-6{height:50%;width:auto}.row>.col-lg-7{height:auto;width:58.3333%}.row>.offset-lg-7{margin-left:58.3333%}.column>.col-lg-7{height:58.3333%;width:auto}.row>.col-lg-8{height:auto;width:66.6667%}.row>.offset-lg-8{margin-left:66.6667%}.column>.col-lg-8{height:66.6667%;width:auto}.row>.col-lg-9{height:auto;width:75%}.row>.offset-lg-9{margin-left:75%}.column>.col-lg-9{height:75%;width:auto}.row>.col-lg-10{height:auto;width:83.3333%}.row>.offset-lg-10{margin-left:83.3333%}.column>.col-lg-10{height:83.3333%;width:auto}.row>.col-lg-11{height:auto;width:91.6667%}.row>.offset-lg-11{margin-left:91.6667%}.column>.col-lg-11{height:91.6667%;width:auto}.row>.col-lg-12{height:auto;width:100%}.row>.offset-lg-12{margin-left:100%}.column>.col-lg-12{height:100%;width:auto}}@media (min-width: 1920px){.row>.col-xl,.flex>.col-xl,.row>.col-xl-auto,.row>.col-xl-12,.row>.col-xl-11,.row>.col-xl-10,.row>.col-xl-9,.row>.col-xl-8,.row>.col-xl-7,.row>.col-xl-6,.row>.col-xl-5,.row>.col-xl-4,.row>.col-xl-3,.row>.col-xl-2,.row>.col-xl-1,.row>.col-xl-0,.flex>.col-xl-auto,.flex>.col-xl-12,.flex>.col-xl-11,.flex>.col-xl-10,.flex>.col-xl-9,.flex>.col-xl-8,.flex>.col-xl-7,.flex>.col-xl-6,.flex>.col-xl-5,.flex>.col-xl-4,.flex>.col-xl-3,.flex>.col-xl-2,.flex>.col-xl-1,.flex>.col-xl-0,.row>.col-xl-grow,.flex>.col-xl-grow,.row>.col-xl-shrink,.flex>.col-xl-shrink{width:auto;min-width:0;max-width:100%}.column>.col-xl,.flex>.col-xl,.column>.col-xl-auto,.column>.col-xl-12,.column>.col-xl-11,.column>.col-xl-10,.column>.col-xl-9,.column>.col-xl-8,.column>.col-xl-7,.column>.col-xl-6,.column>.col-xl-5,.column>.col-xl-4,.column>.col-xl-3,.column>.col-xl-2,.column>.col-xl-1,.column>.col-xl-0,.flex>.col-xl-auto,.flex>.col-xl-12,.flex>.col-xl-11,.flex>.col-xl-10,.flex>.col-xl-9,.flex>.col-xl-8,.flex>.col-xl-7,.flex>.col-xl-6,.flex>.col-xl-5,.flex>.col-xl-4,.flex>.col-xl-3,.flex>.col-xl-2,.flex>.col-xl-1,.flex>.col-xl-0,.column>.col-xl-grow,.flex>.col-xl-grow,.column>.col-xl-shrink,.flex>.col-xl-shrink{height:auto;min-height:0;max-height:100%}.col-xl{flex:10000 1 0%}.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-xl-0{flex:0 0 auto}.col-xl-grow{flex:1 0 auto}.col-xl-shrink{flex:0 1 auto}.row>.col-xl-0{height:auto;width:0%}.row>.offset-xl-0{margin-left:0%}.column>.col-xl-0{height:0%;width:auto}.row>.col-xl-1{height:auto;width:8.3333%}.row>.offset-xl-1{margin-left:8.3333%}.column>.col-xl-1{height:8.3333%;width:auto}.row>.col-xl-2{height:auto;width:16.6667%}.row>.offset-xl-2{margin-left:16.6667%}.column>.col-xl-2{height:16.6667%;width:auto}.row>.col-xl-3{height:auto;width:25%}.row>.offset-xl-3{margin-left:25%}.column>.col-xl-3{height:25%;width:auto}.row>.col-xl-4{height:auto;width:33.3333%}.row>.offset-xl-4{margin-left:33.3333%}.column>.col-xl-4{height:33.3333%;width:auto}.row>.col-xl-5{height:auto;width:41.6667%}.row>.offset-xl-5{margin-left:41.6667%}.column>.col-xl-5{height:41.6667%;width:auto}.row>.col-xl-6{height:auto;width:50%}.row>.offset-xl-6{margin-left:50%}.column>.col-xl-6{height:50%;width:auto}.row>.col-xl-7{height:auto;width:58.3333%}.row>.offset-xl-7{margin-left:58.3333%}.column>.col-xl-7{height:58.3333%;width:auto}.row>.col-xl-8{height:auto;width:66.6667%}.row>.offset-xl-8{margin-left:66.6667%}.column>.col-xl-8{height:66.6667%;width:auto}.row>.col-xl-9{height:auto;width:75%}.row>.offset-xl-9{margin-left:75%}.column>.col-xl-9{height:75%;width:auto}.row>.col-xl-10{height:auto;width:83.3333%}.row>.offset-xl-10{margin-left:83.3333%}.column>.col-xl-10{height:83.3333%;width:auto}.row>.col-xl-11{height:auto;width:91.6667%}.row>.offset-xl-11{margin-left:91.6667%}.column>.col-xl-11{height:91.6667%;width:auto}.row>.col-xl-12{height:auto;width:100%}.row>.offset-xl-12{margin-left:100%}.column>.col-xl-12{height:100%;width:auto}}.rounded-borders{border-radius:4px}.border-radius-inherit{border-radius:inherit}.no-transition{transition:none!important}.transition-0{transition:0s!important}.glossy{background-image:linear-gradient(to bottom,rgba(255,255,255,.3),rgba(255,255,255,0) 50%,rgba(0,0,0,.12) 51%,rgba(0,0,0,.04))!important}.q-placeholder::-webkit-input-placeholder{color:inherit;opacity:.7}.q-placeholder::-moz-placeholder{color:inherit;opacity:.7}.q-placeholder:-ms-input-placeholder{color:inherit!important;opacity:.7!important}.q-placeholder::-ms-input-placeholder{color:inherit;opacity:.7}.q-placeholder::placeholder{color:inherit;opacity:.7}.q-body--fullscreen-mixin,.q-body--prevent-scroll{position:fixed!important}.q-body--force-scrollbar-x{overflow-x:scroll}.q-body--force-scrollbar-y{overflow-y:scroll}.q-no-input-spinner{-moz-appearance:textfield!important}.q-no-input-spinner::-webkit-outer-spin-button,.q-no-input-spinner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.q-link{outline:0;text-decoration:none}.q-link--focusable:focus-visible{text-decoration:underline dashed currentColor 1px}body.electron .q-electron-drag{-webkit-user-select:none;-webkit-app-region:drag}body.electron .q-electron-drag .q-btn-item,body.electron .q-electron-drag--exception{-webkit-app-region:no-drag}img.responsive{max-width:100%;height:auto}.non-selectable{user-select:none!important}.scroll,body.mobile .scroll--mobile{overflow:auto}.scroll,.scroll-x,.scroll-y{-webkit-overflow-scrolling:touch;will-change:scroll-position}.scroll-x{overflow-x:auto}.scroll-y{overflow-y:auto}.no-scroll{overflow:hidden!important}.no-pointer-events,.no-pointer-events--children,.no-pointer-events--children *{pointer-events:none!important}.all-pointer-events{pointer-events:all!important}.cursor-pointer{cursor:pointer!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-inherit{cursor:inherit!important}.cursor-none{cursor:none!important}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}.rotate-45{transform:rotate(45deg)}.rotate-90{transform:rotate(90deg)}.rotate-135{transform:rotate(135deg)}.rotate-180{transform:rotate(180deg)}.rotate-225{transform:rotate(225deg)}.rotate-270{transform:rotate(270deg)}.rotate-315{transform:rotate(315deg)}.flip-horizontal{transform:scaleX(-1)}.flip-vertical{transform:scaleY(-1)}.float-left{float:left}.float-right{float:right}.relative-position{position:relative}.fixed,.fixed-full,.fullscreen,.fixed-center,.fixed-bottom,.fixed-left,.fixed-right,.fixed-top,.fixed-top-left,.fixed-top-right,.fixed-bottom-left,.fixed-bottom-right{position:fixed}.absolute,.absolute-full,.absolute-center,.absolute-bottom,.absolute-left,.absolute-right,.absolute-top,.absolute-top-left,.absolute-top-right,.absolute-bottom-left,.absolute-bottom-right{position:absolute}.fixed-top,.absolute-top{top:0;left:0;right:0}.fixed-right,.absolute-right{top:0;right:0;bottom:0}.fixed-bottom,.absolute-bottom{right:0;bottom:0;left:0}.fixed-left,.absolute-left{top:0;bottom:0;left:0}.fixed-top-left,.absolute-top-left{top:0;left:0}.fixed-top-right,.absolute-top-right{top:0;right:0}.fixed-bottom-left,.absolute-bottom-left{bottom:0;left:0}.fixed-bottom-right,.absolute-bottom-right{bottom:0;right:0}.fullscreen{z-index:6000;border-radius:0!important;max-width:100vw;max-height:100vh}body.q-ios-padding .fullscreen{padding-top:20px!important;padding-top:env(safe-area-inset-top)!important;padding-bottom:env(safe-area-inset-bottom)!important}.absolute-full,.fullscreen,.fixed-full{top:0;right:0;bottom:0;left:0}.fixed-center,.absolute-center{top:50%;left:50%;transform:translate(-50%,-50%)}.vertical-top{vertical-align:top!important}.vertical-middle{vertical-align:middle!important}.vertical-bottom{vertical-align:bottom!important}.on-left{margin-right:12px}.on-right{margin-left:12px}.q-position-engine{margin-top:var(--q-pe-top, 0)!important;margin-left:var(--q-pe-left, 0)!important;will-change:auto;visibility:collapse}:root{--q-size-xs: 0;--q-size-sm: 600px;--q-size-md: 1024px;--q-size-lg: 1440px;--q-size-xl: 1920px}.fit{width:100%!important;height:100%!important}.full-height{height:100%!important}.full-width{width:100%!important;margin-left:0!important;margin-right:0!important}.window-height{margin-top:0!important;margin-bottom:0!important;height:100vh!important}.window-width{margin-left:0!important;margin-right:0!important;width:100vw!important}.block{display:block!important}.inline-block{display:inline-block!important}.q-pa-none{padding:0}.q-pl-none{padding-left:0}.q-pr-none{padding-right:0}.q-pt-none{padding-top:0}.q-pb-none{padding-bottom:0}.q-px-none{padding-left:0;padding-right:0}.q-py-none{padding-top:0;padding-bottom:0}.q-ma-none{margin:0}.q-ml-none{margin-left:0}.q-mr-none{margin-right:0}.q-mt-none{margin-top:0}.q-mb-none{margin-bottom:0}.q-mx-none{margin-left:0;margin-right:0}.q-my-none{margin-top:0;margin-bottom:0}.q-pa-xs{padding:4px}.q-pl-xs{padding-left:4px}.q-pr-xs{padding-right:4px}.q-pt-xs{padding-top:4px}.q-pb-xs{padding-bottom:4px}.q-px-xs{padding-left:4px;padding-right:4px}.q-py-xs{padding-top:4px;padding-bottom:4px}.q-ma-xs{margin:4px}.q-ml-xs{margin-left:4px}.q-mr-xs{margin-right:4px}.q-mt-xs{margin-top:4px}.q-mb-xs{margin-bottom:4px}.q-mx-xs{margin-left:4px;margin-right:4px}.q-my-xs{margin-top:4px;margin-bottom:4px}.q-pa-sm{padding:8px}.q-pl-sm{padding-left:8px}.q-pr-sm{padding-right:8px}.q-pt-sm{padding-top:8px}.q-pb-sm{padding-bottom:8px}.q-px-sm{padding-left:8px;padding-right:8px}.q-py-sm{padding-top:8px;padding-bottom:8px}.q-ma-sm{margin:8px}.q-ml-sm{margin-left:8px}.q-mr-sm{margin-right:8px}.q-mt-sm{margin-top:8px}.q-mb-sm{margin-bottom:8px}.q-mx-sm{margin-left:8px;margin-right:8px}.q-my-sm{margin-top:8px;margin-bottom:8px}.q-pa-md{padding:16px}.q-pl-md{padding-left:16px}.q-pr-md{padding-right:16px}.q-pt-md{padding-top:16px}.q-pb-md{padding-bottom:16px}.q-px-md{padding-left:16px;padding-right:16px}.q-py-md{padding-top:16px;padding-bottom:16px}.q-ma-md{margin:16px}.q-ml-md{margin-left:16px}.q-mr-md{margin-right:16px}.q-mt-md{margin-top:16px}.q-mb-md{margin-bottom:16px}.q-mx-md{margin-left:16px;margin-right:16px}.q-my-md{margin-top:16px;margin-bottom:16px}.q-pa-lg{padding:24px}.q-pl-lg{padding-left:24px}.q-pr-lg{padding-right:24px}.q-pt-lg{padding-top:24px}.q-pb-lg{padding-bottom:24px}.q-px-lg{padding-left:24px;padding-right:24px}.q-py-lg{padding-top:24px;padding-bottom:24px}.q-ma-lg{margin:24px}.q-ml-lg{margin-left:24px}.q-mr-lg{margin-right:24px}.q-mt-lg{margin-top:24px}.q-mb-lg{margin-bottom:24px}.q-mx-lg{margin-left:24px;margin-right:24px}.q-my-lg{margin-top:24px;margin-bottom:24px}.q-pa-xl{padding:48px}.q-pl-xl{padding-left:48px}.q-pr-xl{padding-right:48px}.q-pt-xl{padding-top:48px}.q-pb-xl{padding-bottom:48px}.q-px-xl{padding-left:48px;padding-right:48px}.q-py-xl{padding-top:48px;padding-bottom:48px}.q-ma-xl{margin:48px}.q-ml-xl{margin-left:48px}.q-mr-xl{margin-right:48px}.q-mt-xl{margin-top:48px}.q-mb-xl{margin-bottom:48px}.q-mx-xl{margin-left:48px;margin-right:48px}.q-my-xl{margin-top:48px;margin-bottom:48px}.q-mt-auto,.q-my-auto{margin-top:auto}.q-ml-auto{margin-left:auto}.q-mb-auto,.q-my-auto{margin-bottom:auto}.q-mr-auto{margin-right:auto}.q-mx-auto{margin-left:auto;margin-right:auto}.q-touch{user-select:none;user-drag:none;-khtml-user-drag:none;-webkit-user-drag:none}.q-touch-x{touch-action:pan-x}.q-touch-y{touch-action:pan-y}:root{--q-transition-duration: .3s}.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active,.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active,.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active,.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active,.q-transition--fade-enter-active,.q-transition--fade-leave-active,.q-transition--scale-enter-active,.q-transition--scale-leave-active,.q-transition--rotate-enter-active,.q-transition--rotate-leave-active,.q-transition--flip-enter-active,.q-transition--flip-leave-active{--q-transition-duration: .3s;--q-transition-easing: cubic-bezier(.215,.61,.355,1)}.q-transition--slide-right-leave-active,.q-transition--slide-left-leave-active,.q-transition--slide-up-leave-active,.q-transition--slide-down-leave-active,.q-transition--jump-right-leave-active,.q-transition--jump-left-leave-active,.q-transition--jump-up-leave-active,.q-transition--jump-down-leave-active,.q-transition--fade-leave-active,.q-transition--scale-leave-active,.q-transition--rotate-leave-active,.q-transition--flip-leave-active{position:absolute}.q-transition--slide-right-enter-active,.q-transition--slide-right-leave-active,.q-transition--slide-left-enter-active,.q-transition--slide-left-leave-active,.q-transition--slide-up-enter-active,.q-transition--slide-up-leave-active,.q-transition--slide-down-enter-active,.q-transition--slide-down-leave-active{transition:transform var(--q-transition-duration) var(--q-transition-easing)}.q-transition--slide-right-enter-from{transform:translate3d(-100%,0,0)}.q-transition--slide-right-leave-to,.q-transition--slide-left-enter-from{transform:translate3d(100%,0,0)}.q-transition--slide-left-leave-to{transform:translate3d(-100%,0,0)}.q-transition--slide-up-enter-from{transform:translate3d(0,100%,0)}.q-transition--slide-up-leave-to,.q-transition--slide-down-enter-from{transform:translate3d(0,-100%,0)}.q-transition--slide-down-leave-to{transform:translate3d(0,100%,0)}.q-transition--jump-right-enter-active,.q-transition--jump-right-leave-active,.q-transition--jump-left-enter-active,.q-transition--jump-left-leave-active,.q-transition--jump-up-enter-active,.q-transition--jump-up-leave-active,.q-transition--jump-down-enter-active,.q-transition--jump-down-leave-active{transition:opacity var(--q-transition-duration),transform var(--q-transition-duration)}.q-transition--jump-right-enter-from,.q-transition--jump-right-leave-to,.q-transition--jump-left-enter-from,.q-transition--jump-left-leave-to,.q-transition--jump-up-enter-from,.q-transition--jump-up-leave-to,.q-transition--jump-down-enter-from,.q-transition--jump-down-leave-to{opacity:0}.q-transition--jump-right-enter-from{transform:translate3d(-15px,0,0)}.q-transition--jump-right-leave-to,.q-transition--jump-left-enter-from{transform:translate3d(15px,0,0)}.q-transition--jump-left-leave-to{transform:translate(-15px)}.q-transition--jump-up-enter-from{transform:translate3d(0,15px,0)}.q-transition--jump-up-leave-to,.q-transition--jump-down-enter-from{transform:translate3d(0,-15px,0)}.q-transition--jump-down-leave-to{transform:translate3d(0,15px,0)}.q-transition--fade-enter-active,.q-transition--fade-leave-active{transition:opacity var(--q-transition-duration) ease-out}.q-transition--fade-enter-from,.q-transition--fade-leave-to{opacity:0}.q-transition--scale-enter-active,.q-transition--scale-leave-active{transition:opacity var(--q-transition-duration),transform var(--q-transition-duration) var(--q-transition-easing)}.q-transition--scale-enter-from,.q-transition--scale-leave-to{opacity:0;transform:scale3d(0,0,1)}.q-transition--rotate-enter-active,.q-transition--rotate-leave-active{transition:opacity var(--q-transition-duration),transform var(--q-transition-duration) var(--q-transition-easing);transform-style:preserve-3d}.q-transition--rotate-enter-from,.q-transition--rotate-leave-to{opacity:0;transform:scale3d(0,0,1) rotate3d(0,0,1,90deg)}.q-transition--flip-right-enter-active,.q-transition--flip-right-leave-active,.q-transition--flip-left-enter-active,.q-transition--flip-left-leave-active,.q-transition--flip-up-enter-active,.q-transition--flip-up-leave-active,.q-transition--flip-down-enter-active,.q-transition--flip-down-leave-active{transition:transform var(--q-transition-duration);backface-visibility:hidden}.q-transition--flip-right-enter-to,.q-transition--flip-right-leave-from,.q-transition--flip-left-enter-to,.q-transition--flip-left-leave-from,.q-transition--flip-up-enter-to,.q-transition--flip-up-leave-from,.q-transition--flip-down-enter-to,.q-transition--flip-down-leave-from{transform:perspective(400px) rotate3d(1,1,0,0)}.q-transition--flip-right-enter-from{transform:perspective(400px) rotateY(-180deg)}.q-transition--flip-right-leave-to,.q-transition--flip-left-enter-from{transform:perspective(400px) rotateY(180deg)}.q-transition--flip-left-leave-to{transform:perspective(400px) rotateY(-180deg)}.q-transition--flip-up-enter-from{transform:perspective(400px) rotateX(-180deg)}.q-transition--flip-up-leave-to,.q-transition--flip-down-enter-from{transform:perspective(400px) rotateX(180deg)}.q-transition--flip-down-leave-to{transform:perspective(400px) rotateX(-180deg)}body{min-width:100px;min-height:100%;font-family:Roboto,-apple-system,Helvetica Neue,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;line-height:1.5;font-size:14px}h1{font-size:6rem;font-weight:300;line-height:6rem;letter-spacing:-.01562em}h2{font-size:3.75rem;font-weight:300;line-height:3.75rem;letter-spacing:-.00833em}h3{font-size:3rem;font-weight:400;line-height:3.125rem;letter-spacing:normal}h4{font-size:2.125rem;font-weight:400;line-height:2.5rem;letter-spacing:.00735em}h5{font-size:1.5rem;font-weight:400;line-height:2rem;letter-spacing:normal}h6{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:.0125em}p{margin:0 0 16px}.text-h1{font-size:6rem;font-weight:300;line-height:6rem;letter-spacing:-.01562em}.text-h2{font-size:3.75rem;font-weight:300;line-height:3.75rem;letter-spacing:-.00833em}.text-h3{font-size:3rem;font-weight:400;line-height:3.125rem;letter-spacing:normal}.text-h4{font-size:2.125rem;font-weight:400;line-height:2.5rem;letter-spacing:.00735em}.text-h5{font-size:1.5rem;font-weight:400;line-height:2rem;letter-spacing:normal}.text-h6{font-size:1.25rem;font-weight:500;line-height:2rem;letter-spacing:.0125em}.text-subtitle1{font-size:1rem;font-weight:400;line-height:1.75rem;letter-spacing:.00937em}.text-subtitle2{font-size:.875rem;font-weight:500;line-height:1.375rem;letter-spacing:.00714em}.text-body1{font-size:1rem;font-weight:400;line-height:1.5rem;letter-spacing:.03125em}.text-body2{font-size:.875rem;font-weight:400;line-height:1.25rem;letter-spacing:.01786em}.text-overline{font-size:.75rem;font-weight:500;line-height:2rem;letter-spacing:.16667em}.text-caption{font-size:.75rem;font-weight:400;line-height:1.25rem;letter-spacing:.03333em}.text-uppercase{text-transform:uppercase}.text-lowercase{text-transform:lowercase}.text-capitalize{text-transform:capitalize}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-justify{text-align:justify;hyphens:auto}.text-italic{font-style:italic}.text-bold{font-weight:700}.text-no-wrap{white-space:nowrap}.text-strike{text-decoration:line-through}.text-weight-thin{font-weight:100}.text-weight-light{font-weight:300}.text-weight-regular{font-weight:400}.text-weight-medium{font-weight:500}.text-weight-bold{font-weight:700}.text-weight-bolder{font-weight:900}small{font-size:80%}big{font-size:170%}sub{bottom:-.25em}sup{top:-.5em}.no-margin{margin:0!important}.no-padding{padding:0!important}.no-border{border:0!important}.no-border-radius{border-radius:0!important}.no-box-shadow{box-shadow:none!important}.no-outline{outline:0!important}.ellipsis{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ellipsis-2-lines,.ellipsis-3-lines{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical}.ellipsis-2-lines{-webkit-line-clamp:2}.ellipsis-3-lines{-webkit-line-clamp:3}.readonly{cursor:default!important}.disabled,.disabled *,[disabled],[disabled] *{outline:0!important;cursor:not-allowed!important}.disabled,[disabled]{opacity:.6!important}.hidden{display:none!important}.invisible,.invisible *{visibility:hidden!important;transition:none!important;animation:none!important}.transparent{background:transparent!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-hidden-y{overflow-y:hidden!important}.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.hide-scrollbar::-webkit-scrollbar{width:0;height:0;display:none}.dimmed:after,.light-dimmed:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.dimmed:after{background:rgba(0,0,0,.4)!important}.light-dimmed:after{background:rgba(255,255,255,.6)!important}.z-top{z-index:7000!important}.z-max{z-index:9998!important}body:not(.desktop) .desktop-only,body.desktop .desktop-hide{display:none!important}body:not(.mobile) .mobile-only,body.mobile .mobile-hide{display:none!important}body:not(.native-mobile) .native-mobile-only,body.native-mobile .native-mobile-hide{display:none!important}body:not(.cordova) .cordova-only,body.cordova .cordova-hide{display:none!important}body:not(.capacitor) .capacitor-only,body.capacitor .capacitor-hide{display:none!important}body:not(.electron) .electron-only,body.electron .electron-hide{display:none!important}body:not(.touch) .touch-only,body.touch .touch-hide{display:none!important}body:not(.within-iframe) .within-iframe-only,body.within-iframe .within-iframe-hide{display:none!important}body:not(.platform-ios) .platform-ios-only,body.platform-ios .platform-ios-hide{display:none!important}body:not(.platform-android) .platform-android-only,body.platform-android .platform-android-hide{display:none!important}@media all and (orientation: portrait){.orientation-landscape{display:none!important}}@media all and (orientation: landscape){.orientation-portrait{display:none!important}}@media screen{.print-only{display:none!important}}@media print{.print-hide{display:none!important}}@media (max-width: 599.98px){.xs-hide,.gt-xs,.sm,.gt-sm,.md,.gt-md,.lg,.gt-lg,.xl{display:none!important}}@media (min-width: 600px) and (max-width: 1023.98px){.sm-hide,.xs,.lt-sm,.gt-sm,.md,.gt-md,.lg,.gt-lg,.xl{display:none!important}}@media (min-width: 1024px) and (max-width: 1439.98px){.md-hide,.xs,.lt-sm,.sm,.lt-md,.gt-md,.lg,.gt-lg,.xl{display:none!important}}@media (min-width: 1440px) and (max-width: 1919.98px){.lg-hide,.xs,.lt-sm,.sm,.lt-md,.md,.lt-lg,.gt-lg,.xl{display:none!important}}@media (min-width: 1920px){.xl-hide,.xs,.lt-sm,.sm,.lt-md,.md,.lt-lg,.lg,.lt-xl{display:none!important}}.q-focus-helper,.q-focusable,.q-manual-focusable,.q-hoverable{outline:0}body.desktop .q-focus-helper{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;border-radius:inherit;opacity:0;transition:background-color .3s cubic-bezier(.25,.8,.5,1),opacity .4s cubic-bezier(.25,.8,.5,1)}body.desktop .q-focus-helper:before,body.desktop .q-focus-helper:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;border-radius:inherit;transition:background-color .3s cubic-bezier(.25,.8,.5,1),opacity .6s cubic-bezier(.25,.8,.5,1)}body.desktop .q-focus-helper:before{background:#000}body.desktop .q-focus-helper:after{background:#fff}body.desktop .q-focus-helper--rounded{border-radius:4px}body.desktop .q-focus-helper--round{border-radius:50%}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper,body.desktop .q-hoverable:hover>.q-focus-helper{background:currentColor;opacity:.15}body.desktop .q-focusable:focus>.q-focus-helper:before,body.desktop .q-manual-focusable--focused>.q-focus-helper:before,body.desktop .q-hoverable:hover>.q-focus-helper:before{opacity:.1}body.desktop .q-focusable:focus>.q-focus-helper:after,body.desktop .q-manual-focusable--focused>.q-focus-helper:after,body.desktop .q-hoverable:hover>.q-focus-helper:after{opacity:.4}body.desktop .q-focusable:focus>.q-focus-helper,body.desktop .q-manual-focusable--focused>.q-focus-helper{opacity:.22}body.body--dark{color:#fff;background:var(--q-dark-page)}.q-dark{color:#fff;background:var(--q-dark)} ');
(function (vue) {
'use strict';
const createComponent = (raw) => vue.markRaw(vue.defineComponent(raw));
const createDirective = (raw) => vue.markRaw(raw);
function hSlot(slot, otherwise) {
return slot !== void 0 ? slot() || otherwise : otherwise;
}
function hMergeSlot(slot, source) {
return slot !== void 0 ? source.concat(slot()) : source;
}
function hMergeSlotSafely(slot, source) {
if (slot === void 0) {
return source;
}
return source !== void 0 ? source.concat(slot()) : slot();
}
function hDir(tag, data, children, key, condition, getDirsFn) {
data.key = key + condition;
const vnode = vue.h(tag, data, children);
return condition === true ? vue.withDirectives(vnode, getDirsFn()) : vnode;
}
const QToolbar = createComponent({
name: "QToolbar",
props: {
inset: Boolean
},
setup(props, { slots }) {
const classes = vue.computed(
() => "q-toolbar row no-wrap items-center" + (props.inset === true ? " q-toolbar--inset" : "")
);
return () => vue.h("div", { class: classes.value, role: "toolbar" }, hSlot(slots.default));
}
});
const useSizeDefaults = {
xs: 18,
sm: 24,
md: 32,
lg: 38,
xl: 46
};
const useSizeProps = {
size: String
};
function useSize(props, sizes = useSizeDefaults) {
return vue.computed(() => props.size !== void 0 ? { fontSize: props.size in sizes ? `${sizes[props.size]}px` : props.size } : null);
}
const defaultViewBox = "0 0 24 24";
const sameFn = (i) => i;
const ionFn = (i) => `ionicons ${i}`;
const libMap = {
"mdi-": (i) => `mdi ${i}`,
"icon-": sameFn,
// fontawesome equiv
"bt-": (i) => `bt ${i}`,
"eva-": (i) => `eva ${i}`,
"ion-md": ionFn,
"ion-ios": ionFn,
"ion-logo": ionFn,
"iconfont ": sameFn,
"ti-": (i) => `themify-icon ${i}`,
"bi-": (i) => `bootstrap-icons ${i}`
};
const matMap = {
o_: "-outlined",
r_: "-round",
s_: "-sharp"
};
const symMap = {
sym_o_: "-outlined",
sym_r_: "-rounded",
sym_s_: "-sharp"
};
const libRE = new RegExp("^(" + Object.keys(libMap).join("|") + ")");
const matRE = new RegExp("^(" + Object.keys(matMap).join("|") + ")");
const symRE = new RegExp("^(" + Object.keys(symMap).join("|") + ")");
const mRE = /^[Mm]\s?[-+]?\.?\d/;
const imgRE = /^img:/;
const svgUseRE = /^svguse:/;
const ionRE = /^ion-/;
const faRE = /^(fa-(sharp|solid|regular|light|brands|duotone|thin)|[lf]a[srlbdk]?) /;
const QIcon = createComponent({
name: "QIcon",
props: {
...useSizeProps,
tag: {
type: String,
default: "i"
},
name: String,
color: String,
left: Boolean,
right: Boolean
},
setup(props, { slots }) {
const { proxy: { $q } } = vue.getCurrentInstance();
const sizeStyle = useSize(props);
const classes = vue.computed(
() => "q-icon" + (props.left === true ? " on-left" : "") + (props.right === true ? " on-right" : "") + (props.color !== void 0 ? ` text-${props.color}` : "")
);
const type = vue.computed(() => {
let cls;
let icon = props.name;
if (icon === "none" || !icon) {
return { none: true };
}
if ($q.iconMapFn !== null) {
const res = $q.iconMapFn(icon);
if (res !== void 0) {
if (res.icon !== void 0) {
icon = res.icon;
if (icon === "none" || !icon) {
return { none: true };
}
} else {
return {
cls: res.cls,
content: res.content !== void 0 ? res.content : " "
};
}
}
}
if (mRE.test(icon) === true) {
const [def, viewBox = defaultViewBox] = icon.split("|");
return {
svg: true,
viewBox,
nodes: def.split("&&").map((path) => {
const [d, style2, transform] = path.split("@@");
return vue.h("path", { style: style2, d, transform });
})
};
}
if (imgRE.test(icon) === true) {
return {
img: true,
src: icon.substring(4)
};
}
if (svgUseRE.test(icon) === true) {
const [def, viewBox = defaultViewBox] = icon.split("|");
return {
svguse: true,
src: def.substring(7),
viewBox
};
}
let content = " ";
const matches = icon.match(libRE);
if (matches !== null) {
cls = libMap[matches[1]](icon);
} else if (faRE.test(icon) === true) {
cls = icon;
} else if (ionRE.test(icon) === true) {
cls = `ionicons ion-${$q.platform.is.ios === true ? "ios" : "md"}${icon.substring(3)}`;
} else if (symRE.test(icon) === true) {
cls = "notranslate material-symbols";
const matches2 = icon.match(symRE);
if (matches2 !== null) {
icon = icon.substring(6);
cls += symMap[matches2[1]];
}
content = icon;
} else {
cls = "notranslate material-icons";
const matches2 = icon.match(matRE);
if (matches2 !== null) {
icon = icon.substring(2);
cls += matMap[matches2[1]];
}
content = icon;
}
return {
cls,
content
};
});
return () => {
const data = {
class: classes.value,
style: sizeStyle.value,
"aria-hidden": "true",
role: "presentation"
};
if (type.value.none === true) {
return vue.h(props.tag, data, hSlot(slots.default));
}
if (type.value.img === true) {
return vue.h("span", data, hMergeSlot(slots.default, [
vue.h("img", { src: type.value.src })
]));
}
if (type.value.svg === true) {
return vue.h("span", data, hMergeSlot(slots.default, [
vue.h("svg", {
viewBox: type.value.viewBox || "0 0 24 24"
}, type.value.nodes)
]));
}
if (type.value.svguse === true) {
return vue.h("span", data, hMergeSlot(slots.default, [
vue.h("svg", {
viewBox: type.value.viewBox
}, [
vue.h("use", { "xlink:href": type.value.src })
])
]));
}
if (type.value.cls !== void 0) {
data.class += " " + type.value.cls;
}
return vue.h(props.tag, data, hMergeSlot(slots.default, [
type.value.content
]));
};
}
});
function css(element, css2) {
const style2 = element.style;
for (const prop in css2) {
style2[prop] = css2[prop];
}
}
function childHasFocus(el, focusedEl) {
if (el === void 0 || el === null || el.contains(focusedEl) === true) {
return true;
}
for (let next = el.nextElementSibling; next !== null; next = next.nextElementSibling) {
if (next.contains(focusedEl)) {
return true;
}
}
return false;
}
const listenOpts = {
hasPassive: false,
passiveCapture: true,
notPassiveCapture: true
};
try {
const opts = Object.defineProperty({}, "passive", {
get() {
Object.assign(listenOpts, {
hasPassive: true,
passive: { passive: true },
notPassive: { passive: false },
passiveCapture: { passive: true, capture: true },
notPassiveCapture: { passive: false, capture: true }
});
}
});
window.addEventListener("qtest", null, opts);
window.removeEventListener("qtest", null, opts);
} catch (e) {
}
function noop() {
}
function leftClick(e) {
return e.button === 0;
}
function position(e) {
if (e.touches && e.touches[0]) {
e = e.touches[0];
} else if (e.changedTouches && e.changedTouches[0]) {
e = e.changedTouches[0];
} else if (e.targetTouches && e.targetTouches[0]) {
e = e.targetTouches[0];
}
return {
top: e.clientY,
left: e.clientX
};
}
function getEventPath(e) {
if (e.path) {
return e.path;
}
if (e.composedPath) {
return e.composedPath();
}
const path = [];
let el = e.target;
while (el) {
path.push(el);
if (el.tagName === "HTML") {
path.push(document);
path.push(window);
return path;
}
el = el.parentElement;
}
}
function stop(e) {
e.stopPropagation();
}
function prevent(e) {
e.cancelable !== false && e.preventDefault();
}
function stopAndPrevent(e) {
e.cancelable !== false && e.preventDefault();
e.stopPropagation();
}
function preventDraggable(el, status) {
if (el === void 0 || status === true && el.__dragPrevented === true) {
return;
}
const fn = status === true ? (el2) => {
el2.__dragPrevented = true;
el2.addEventListener("dragstart", prevent, listenOpts.notPassiveCapture);
} : (el2) => {
delete el2.__dragPrevented;
el2.removeEventListener("dragstart", prevent, listenOpts.notPassiveCapture);
};
el.querySelectorAll("a, img").forEach(fn);
}
function addEvt(ctx, targetName, events2) {
const name = `__q_${targetName}_evt`;
ctx[name] = ctx[name] !== void 0 ? ctx[name].concat(events2) : events2;
events2.forEach((evt) => {
evt[0].addEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]);
});
}
function cleanEvt(ctx, targetName) {
const name = `__q_${targetName}_evt`;
if (ctx[name] !== void 0) {
ctx[name].forEach((evt) => {
evt[0].removeEventListener(evt[1], ctx[evt[2]], listenOpts[evt[3]]);
});
ctx[name] = void 0;
}
}
let lastKeyCompositionStatus = false;
function onKeyDownComposition(evt) {
lastKeyCompositionStatus = evt.isComposing === true;
}
function shouldIgnoreKey(evt) {
return lastKeyCompositionStatus === true || evt !== Object(evt) || evt.isComposing === true || evt.qKeyEvent === true;
}
function isKeyCode(evt, keyCodes) {
return shouldIgnoreKey(evt) === true ? false : [].concat(keyCodes).includes(evt.keyCode);
}
function throttle(fn, limit = 250) {
let wait = false, result;
return function() {
if (wait === false) {
wait = true;
setTimeout(() => {
wait = false;
}, limit);
result = fn.apply(this, arguments);
}
return result;
};
}
function showRipple(evt, el, ctx, forceCenter) {
ctx.modifiers.stop === true && stop(evt);
const color = ctx.modifiers.color;
let center = ctx.modifiers.center;
center = center === true || forceCenter === true;
const node = document.createElement("span"), innerNode = document.createElement("span"), pos = position(evt), { left, top, width, height } = el.getBoundingClientRect(), diameter = Math.sqrt(width * width + height * height), radius = diameter / 2, centerX = `${(width - diameter) / 2}px`, x = center ? centerX : `${pos.left - left - radius}px`, centerY = `${(height - diameter) / 2}px`, y = center ? centerY : `${pos.top - top - radius}px`;
innerNode.className = "q-ripple__inner";
css(innerNode, {
height: `${diameter}px`,
width: `${diameter}px`,
transform: `translate3d(${x},${y},0) scale3d(.2,.2,1)`,
opacity: 0
});
node.className = `q-ripple${color ? " text-" + color : ""}`;
node.setAttribute("dir", "ltr");
node.appendChild(innerNode);
el.appendChild(node);
const abort = () => {
node.remove();
clearTimeout(timer);
};
ctx.abort.push(abort);
let timer = setTimeout(() => {
innerNode.classList.add("q-ripple__inner--enter");
innerNode.style.transform = `translate3d(${centerX},${centerY},0) scale3d(1,1,1)`;
innerNode.style.opacity = 0.2;
timer = setTimeout(() => {
innerNode.classList.remove("q-ripple__inner--enter");
innerNode.classList.add("q-ripple__inner--leave");
innerNode.style.opacity = 0;
timer = setTimeout(() => {
node.remove();
ctx.abort.splice(ctx.abort.indexOf(abort), 1);
}, 275);
}, 250);
}, 50);
}
function updateModifiers(ctx, { modifiers, value: value2, arg }) {
const cfg = Object.assign({}, ctx.cfg.ripple, modifiers, value2);
ctx.modifiers = {
early: cfg.early === true,
stop: cfg.stop === true,
center: cfg.center === true,
color: cfg.color || arg,
keyCodes: [].concat(cfg.keyCodes || 13)
};
}
const Ripple = createDirective(
{
name: "ripple",
beforeMount(el, binding) {
const cfg = binding.instance.$.appContext.config.globalProperties.$q.config || {};
if (cfg.ripple === false) {
return;
}
const ctx = {
cfg,
enabled: binding.value !== false,
modifiers: {},
abort: [],
start(evt) {
if (ctx.enabled === true && evt.qSkipRipple !== true && evt.type === (ctx.modifiers.early === true ? "pointerdown" : "click")) {
showRipple(evt, el, ctx, evt.qKeyEvent === true);
}
},
keystart: throttle((evt) => {
if (ctx.enabled === true && evt.qSkipRipple !== true && isKeyCode(evt, ctx.modifiers.keyCodes) === true && evt.type === `key${ctx.modifiers.early === true ? "down" : "up"}`) {
showRipple(evt, el, ctx, true);
}
}, 300)
};
updateModifiers(ctx, binding);
el.__qripple = ctx;
addEvt(ctx, "main", [
[el, "pointerdown", "start", "passive"],
[el, "click", "start", "passive"],
[el, "keydown", "keystart", "passive"],
[el, "keyup", "keystart", "passive"]
]);
},
updated(el, binding) {
if (binding.oldValue !== binding.value) {
const ctx = el.__qripple;
if (ctx !== void 0) {
ctx.enabled = binding.value !== false;
if (ctx.enabled === true && Object(binding.value) === binding.value) {
updateModifiers(ctx, binding);
}
}
}
},
beforeUnmount(el) {
const ctx = el.__qripple;
if (ctx !== void 0) {
ctx.abort.forEach((fn) => {
fn();
});
cleanEvt(ctx, "main");
delete el._qripple;
}
}
}
);
const useDarkProps = {
dark: {
type: Boolean,
default: null
}
};
function useDark(props, $q) {
return vue.computed(() => props.dark === null ? $q.dark.isActive : props.dark);
}
const defaultSizes$1 = {
xs: 8,
sm: 10,
md: 14,
lg: 20,
xl: 24
};
const QChip = createComponent({
name: "QChip",
props: {
...useDarkProps,
...useSizeProps,
dense: Boolean,
icon: String,
iconRight: String,
iconRemove: String,
iconSelected: String,
label: [String, Number],
color: String,
textColor: String,
modelValue: {
type: Boolean,
default: true
},
selected: {
type: Boolean,
default: null
},
square: Boolean,
outline: Boolean,
clickable: Boolean,
removable: Boolean,
removeAriaLabel: String,
tabindex: [String, Number],
disable: Boolean,
ripple: {
type: [Boolean, Object],
default: true
}
},
emits: ["update:modelValue", "update:selected", "remove", "click"],
setup(props, { slots, emit: emit2 }) {
const { proxy: { $q } } = vue.getCurrentInstance();
const isDark = useDark(props, $q);
const sizeStyle = useSize(props, defaultSizes$1);
const hasLeftIcon = vue.computed(() => props.selected === true || props.icon !== void 0);
const leftIcon = vue.computed(() => props.selected === true ? props.iconSelected || $q.iconSet.chip.selected : props.icon);
const removeIcon = vue.computed(() => props.iconRemove || $q.iconSet.chip.remove);
const isClickable = vue.computed(
() => props.disable === false && (props.clickable === true || props.selected !== null)
);
const classes = vue.computed(() => {
const text = props.outline === true ? props.color || props.textColor : props.textColor;
return "q-chip row inline no-wrap items-center" + (props.outline === false && props.color !== void 0 ? ` bg-${props.color}` : "") + (text ? ` text-${text} q-chip--colored` : "") + (props.disable === true ? " disabled" : "") + (props.dense === true ? " q-chip--dense" : "") + (props.outline === true ? " q-chip--outline" : "") + (props.selected === true ? " q-chip--selected" : "") + (isClickable.value === true ? " q-chip--clickable cursor-pointer non-selectable q-hoverable" : "") + (props.square === true ? " q-chip--square" : "") + (isDark.value === true ? " q-chip--dark q-dark" : "");
});
const attributes = vue.computed(() => {
const chip = props.disable === true ? { tabindex: -1, "aria-disabled": "true" } : { tabindex: props.tabindex || 0 };
const remove = {
...chip,
role: "button",
"aria-hidden": "false",
"aria-label": props.removeAriaLabel || $q.lang.label.remove
};
return { chip, remove };
});
function onKeyup2(e) {
e.keyCode === 13 && onClick(e);
}
function onClick(e) {
if (!props.disable) {
emit2("update:selected", !props.selected);
emit2("click", e);
}
}
function onRemove(e) {
if (e.keyCode === void 0 || e.keyCode === 13) {
stopAndPrevent(e);
if (props.disable === false) {
emit2("update:modelValue", false);
emit2("remove");
}
}
}
function getContent() {
const child = [];
isClickable.value === true && child.push(
vue.h("div", { class: "q-focus-helper" })
);
hasLeftIcon.value === true && child.push(
vue.h(QIcon, {
class: "q-chip__icon q-chip__icon--left",
name: leftIcon.value
})
);
const label = props.label !== void 0 ? [vue.h("div", { class: "ellipsis" }, [props.label])] : void 0;
child.push(
vue.h("div", {
class: "q-chip__content col row no-wrap items-center q-anchor--skip"
}, hMergeSlotSafely(slots.default, label))
);
props.iconRight && child.push(
vue.h(QIcon, {
class: "q-chip__icon q-chip__icon--right",
name: props.iconRight
})
);
props.removable === true && child.push(
vue.h(QIcon, {
class: "q-chip__icon q-chip__icon--remove cursor-pointer",
name: removeIcon.value,
...attributes.value.remove,
onClick: onRemove,
onKeyup: onRemove
})
);
return child;
}
return () => {
if (props.modelValue === false) {
return;
}
const data = {
class: classes.value,
style: sizeStyle.value
};
isClickable.value === true && Object.assign(
data,
attributes.value.chip,
{ onClick, onKeyup: onKeyup2 }
);
return hDir(
"div",
data,
getContent(),
"ripple",
props.ripple !== false && props.disable !== true,
() => [[Ripple, props.ripple]]
);
};
}
});
const useSpinnerProps = {
size: {
type: [Number, String],
default: "1em"
},
color: String
};
function useSpinner(props) {
return {
cSize: vue.computed(() => props.size in useSizeDefaults ? `${useSizeDefaults[props.size]}px` : props.size),
classes: vue.computed(
() => "q-spinner" + (props.color ? ` text-${props.color}` : "")
)
};
}
const QSpinner = createComponent({
name: "QSpinner",
props: {
...useSpinnerProps,
thickness: {
type: Number,
default: 5
}
},
setup(props) {
const { cSize, classes } = useSpinner(props);
return () => vue.h("svg", {
class: classes.value + " q-spinner-mat",
width: cSize.value,
height: cSize.value,
viewBox: "25 25 50 50"
}, [
vue.h("circle", {
class: "path",
cx: "50",
cy: "50",
r: "20",
fill: "none",
stroke: "currentColor",
"stroke-width": props.thickness,
"stroke-miterlimit": "10"
})
]);
}
});
const alignMap = {
left: "start",
center: "center",
right: "end",
between: "between",
around: "around",
evenly: "evenly",
stretch: "stretch"
};
const alignValues = Object.keys(alignMap);
const useAlignProps = {
align: {
type: String,
validator: (v) => alignValues.includes(v)
}
};
function useAlign(props) {
return vue.computed(() => {
const align = props.align === void 0 ? props.vertical === true ? "stretch" : "left" : props.align;
return `${props.vertical === true ? "items" : "justify"}-${alignMap[align]}`;
});
}
function vmHasRouter(vm) {
return vm.appContext.config.globalProperties.$router !== void 0;
}
function vmIsDestroyed(vm) {
return vm.isUnmounted === true || vm.isDeactivated === true;
}
function getOriginalPath(record) {
return record ? record.aliasOf ? record.aliasOf.path : record.path : "";
}
function isSameRouteRecord(a2, b) {
return (a2.aliasOf || a2) === (b.aliasOf || b);
}
function includesParams(outer, inner) {
for (const key in inner) {
const innerValue = inner[key], outerValue = outer[key];
if (typeof innerValue === "string") {
if (innerValue !== outerValue) {
return false;
}
} else if (Array.isArray(outerValue) === false || outerValue.length !== innerValue.length || innerValue.some((value2, i) => value2 !== outerValue[i])) {
return false;
}
}
return true;
}
function isEquivalentArray(a2, b) {
return Array.isArray(b) === true ? a2.length === b.length && a2.every((value2, i) => value2 === b[i]) : a2.length === 1 && a2[0] === b;
}
function isSameRouteLocationParamsValue(a2, b) {
return Array.isArray(a2) === true ? isEquivalentArray(a2, b) : Array.isArray(b) === true ? isEquivalentArray(b, a2) : a2 === b;
}
function isSameRouteLocationParams(a2, b) {
if (Object.keys(a2).length !== Object.keys(b).length) {
return false;
}
for (const key in a2) {
if (isSameRouteLocationParamsValue(a2[key], b[key]) === false) {
return false;
}
}
return true;
}
const useRouterLinkProps = {
// router-link
to: [String, Object],
replace: Boolean,
exact: Boolean,
activeClass: {
type: String,
default: "q-router-link--active"
},
exactActiveClass: {
type: String,
default: "q-router-link--exact-active"
},
// regular <a> link
href: String,
target: String,
// state
disable: Boolean
};
function useRouterLink({ fallbackTag, useDisableForRouterLinkProps = true } = {}) {
const vm = vue.getCurrentInstance();
const { props, proxy, emit: emit2 } = vm;
const hasRouter = vmHasRouter(vm);
const hasHrefLink = vue.computed(() => props.disable !== true && props.href !== void 0);
const hasRouterLinkProps = useDisableForRouterLinkProps === true ? vue.computed(
() => hasRouter === true && props.disable !== true && hasHrefLink.value !== true && props.to !== void 0 && props.to !== null && props.to !== ""
) : vue.computed(
() => hasRouter === true && hasHrefLink.value !== true && props.to !== void 0 && props.to !== null && props.to !== ""
);
const resolvedLink = vue.computed(() => hasRouterLinkProps.value === true ? getLink(props.to) : null);
const hasRouterLink = vue.computed(() => resolvedLink.value !== null);
const hasLink = vue.computed(() => hasHrefLink.value === true || hasRouterLink.value === true);
const linkTag = vue.computed(() => props.type === "a" || hasLink.value === true ? "a" : props.tag || fallbackTag || "div");
const linkAttrs = vue.computed(() => hasHrefLink.value === true ? {
href: props.href,
target: props.target
} : hasRouterLink.value === true ? {
href: resolvedLink.value.href,
target: props.target
} : {});
const linkActiveIndex = vue.computed(() => {
if (hasRouterLink.value === false) {
return -1;
}
const { matched } = resolvedLink.value, { length } = matched, routeMatched = matched[length - 1];
if (routeMatched === void 0) {
return -1;
}
const currentMatched = proxy.$route.matched;
if (currentMatched.length === 0) {
return -1;
}
const index2 = currentMatched.findIndex(
isSameRouteRecord.bind(null, routeMatched)
);
if (index2 > -1) {
return index2;
}
const parentRecordPath = getOriginalPath(matched[length - 2]);
return (
// we are dealing with nested routes
length > 1 && getOriginalPath(routeMatched) === parentRecordPath && currentMatched[currentMatched.length - 1].path !== parentRecordPath ? currentMatched.findIndex(
isSameRouteRecord.bind(null, matched[length - 2])
) : index2
);
});
const linkIsActive = vue.computed(
() => hasRouterLink.value === true && linkActiveIndex.value !== -1 && includesParams(proxy.$route.params, resolvedLink.value.params)
);
const linkIsExactActive = vue.computed(
() => linkIsActive.value === true && linkActiveIndex.value === proxy.$route.matched.length - 1 && isSameRouteLocationParams(proxy.$route.params, resolvedLink.value.params)
);
const linkClass = vue.computed(() => hasRouterLink.value === true ? linkIsExactActive.value === true ? ` ${props.exactActiveClass} ${props.activeClass}` : props.exact === true ? "" : linkIsActive.value === true ? ` ${props.activeClass}` : "" : "");
function getLink(to) {
try {
return proxy.$router.resolve(to);
} catch (_) {
}
return null;
}
function navigateToRouterLink(e, { returnRouterError, to = props.to, replace = props.replace } = {}) {
if (props.disable === true) {
e.preventDefault();
return Promise.resolve(false);
}
if (
// don't redirect with control keys;
// should match RouterLink from Vue Router
e.metaKey || e.altKey || e.ctrlKey || e.shiftKey || e.button !== void 0 && e.button !== 0 || props.target === "_blank"
) {
return Promise.resolve(false);
}
e.preventDefault();
const promise = proxy.$router[replace === true ? "replace" : "push"](to);
return returnRouterError === true ? promise : promise.then(() => {
}).catch(() => {
});
}
function navigateOnClick(e) {
if (hasRouterLink.value === true) {
const go = (opts) => navigateToRouterLink(e, opts);
emit2("click", e, go);
e.defaultPrevented !== true && go();
} else {
emit2("click", e);
}
}
return {
hasRouterLink,
hasHrefLink,
hasLink,
linkTag,
resolvedLink,
linkIsActive,
linkIsExactActive,
linkClass,
linkAttrs,
getLink,
navigateToRouterLink,
navigateOnClick
};
}
const btnPadding = {
none: 0,
xs: 4,
sm: 8,
md: 16,
lg: 24,
xl: 32
};
const defaultSizes = {
xs: 8,
sm: 10,
md: 14,
lg: 20,
xl: 24
};
const formTypes = ["button", "submit", "reset"];
const mediaTypeRE = /[^\s]\/[^\s]/;
const btnDesignOptions = ["flat", "outline", "push", "unelevated"];
const getBtnDesign = (props, defaultValue) => {
if (props.flat === true)
return "flat";
if (props.outline === true)
return "outline";
if (props.push === true)
return "push";
if (props.unelevated === true)
return "unelevated";
return defaultValue;
};
const useBtnProps = {
...useSizeProps,
...useRouterLinkProps,
type: {
type: String,
default: "button"
},
label: [Number, String],
icon: String,
iconRight: String,
...btnDesignOptions.reduce(
(acc, val) => (acc[val] = Boolean) && acc,
{}
),
square: Boolean,
round: Boolean,
rounded: Boolean,
glossy: Boolean,
size: String,
fab: Boolean,
fabMini: Boolean,
padding: String,
color: String,
textColor: String,
noCaps: Boolean,
noWrap: Boolean,
dense: Boolean,
tabindex: [Number, String],
ripple: {
type: [Boolean, Object],
default: true
},
align: {
...useAlignProps.align,
default: "center"
},
stack: Boolean,
stretch: Boolean,
loading: {
type: Boolean,
default: null
},
disable: Boolean
};
function useBtn(props) {
const sizeStyle = useSize(props, defaultSizes);
const alignClass = useAlign(props);
const { hasRouterLink, hasLink, linkTag, linkAttrs, navigateOnClick } = useRouterLink({
fallbackTag: "button"
});
const style2 = vue.computed(() => {
const obj = props.fab === false && props.fabMini === false ? sizeStyle.value : {};
return props.padding !== void 0 ? Object.assign({}, obj, {
padding: props.padding.split(/\s+/).map((v) => v in btnPadding ? btnPadding[v] + "px" : v).join(" "),
minWidth: "0",
minHeight: "0"
}) : obj;
});
const isRounded = vue.computed(
() => props.rounded === true || props.fab === true || props.fabMini === true
);
const isActionable = vue.computed(
() => props.disable !== true && props.loading !== true
);
const tabIndex = vue.computed(() => isActionable.value === true ? props.tabindex || 0 : -1);
const design = vue.computed(() => getBtnDesign(props, "standard"));
const attributes = vue.computed(() => {
const acc = { tabindex: tabIndex.value };
if (hasLink.value === true) {
Object.assign(acc, linkAttrs.value);
} else if (formTypes.includes(props.type) === true) {
acc.type = props.type;
}
if (linkTag.value === "a") {
if (props.disable === true) {
acc["aria-disabled"] = "true";
} else if (acc.href === void 0) {
acc.role = "button";
}
if (hasRouterLink.value !== true && mediaTypeRE.test(props.type) === true) {
acc.type = props.type;
}
} else if (props.disable === true) {
acc.disabled = "";
acc["aria-disabled"] = "true";
}
if (props.loading === true && props.percentage !== void 0) {
Object.assign(acc, {
role: "progressbar",
"aria-valuemin": 0,
"aria-valuemax": 100,
"aria-valuenow": props.percentage
});
}
return acc;
});
const classes = vue.computed(() => {
let colors;
if (props.color !== void 0) {
if (props.flat === true || props.outline === true) {
colors = `text-${props.textColor || props.color}`;
} else {
colors = `bg-${props.color} text-${props.textColor || "white"}`;
}
} else if (props.textColor) {
colors = `text-${props.textColor}`;
}
const shape = props.round === true ? "round" : `rectangle${isRounded.value === true ? " q-btn--rounded" : props.square === true ? " q-btn--square" : ""}`;
return `q-btn--${design.value} q-btn--${shape}` + (colors !== void 0 ? " " + colors : "") + (isActionable.value === true ? " q-btn--actionable q-focusable q-hoverable" : props.disable === true ? " disabled" : "") + (props.fab === true ? " q-btn--fab" : props.fabMini === true ? " q-btn--fab-mini" : "") + (props.noCaps === true ? " q-btn--no-uppercase" : "") + (props.dense === true ? " q-btn--dense" : "") + (props.stretch === true ? " no-border-radius self-stretch" : "") + (props.glossy === true ? " glossy" : "") + (props.square ? " q-btn--square" : "");
});
const innerClasses = vue.computed(
() => alignClass.value + (props.stack === true ? " column" : " row") + (props.noWrap === true ? " no-wrap text-no-wrap" : "") + (props.loading === true ? " q-btn__content--hidden" : "")
);
return {
classes,
style: style2,
innerClasses,
attributes,
hasLink,
linkTag,
navigateOnClick,
isActionable
};
}
const { passiveCapture } = listenOpts;
let touchTarget = null, keyboardTarget = null, mouseTarget = null;
const QBtn = createComponent({
name: "QBtn",
props: {
...useBtnProps,
percentage: Number,
darkPercentage: Boolean,
onTouchstart: [Function, Array]
},
emits: ["click", "keydown", "mousedown", "keyup"],
setup(props, { slots, emit: emit2 }) {
const { proxy } = vue.getCurrentInstance();
const {
classes,
style: style2,
innerClasses,
attributes,
hasLink,
linkTag,
navigateOnClick,
isActionable
} = useBtn(props);
const rootRef = vue.ref(null);
const blurTargetRef = vue.ref(null);
let localTouchTargetEl = null, avoidMouseRipple, mouseTimer = null;
const hasLabel = vue.computed(
() => props.label !== void 0 && props.label !== null && props.label !== ""
);
const ripple = vue.computed(() => props.disable === true || props.ripple === false ? false : {
keyCodes: hasLink.value === true ? [13, 32] : [13],
...props.ripple === true ? {} : props.ripple
});
const rippleProps = vue.computed(() => ({ center: props.round }));
const percentageStyle = vue.computed(() => {
const val = Math.max(0, Math.min(100, props.percentage));
return val > 0 ? { transition: "transform 0.6s", transform: `translateX(${val - 100}%)` } : {};
});
const onEvents = vue.computed(() => {
if (props.loading === true) {
return {
onMousedown: onLoadingEvt,
onTouchstart: onLoadingEvt,
onClick: onLoadingEvt,
onKeydown: onLoadingEvt,
onKeyup: onLoadingEvt
};
}
if (isActionable.value === true) {
const acc = {
onClick,
onKeydown: onKeydown2,
onMousedown
};
if (proxy.$q.platform.has.touch === true) {
const suffix = props.onTouchstart !== void 0 ? "" : "Passive";
acc[`onTouchstart${suffix}`] = onTouchstart;
}
return acc;
}
return {
// needed; especially for disabled <a> tags
onClick: stopAndPrevent
};
});
const nodeProps = vue.computed(() => ({
ref: rootRef,
class: "q-btn q-btn-item non-selectable no-outline " + classes.value,
style: style2.value,
...attributes.value,
...onEvents.value
}));
function onClick(e) {
if (rootRef.value === null) {
return;
}
if (e !== void 0) {
if (e.defaultPrevented === true) {
return;
}
const el = document.activeElement;
if (props.type === "submit" && el !== document.body && rootRef.value.contains(el) === false && el.contains(rootRef.value) === false) {
rootRef.value.focus();
const onClickCleanup = () => {
document.removeEventListener("keydown", stopAndPrevent, true);
document.removeEventListener("keyup", onClickCleanup, passiveCapture);
rootRef.value !== null && rootRef.value.removeEventListener("blur", onClickCleanup, passiveCapture);
};
document.addEventListener("keydown", stopAndPrevent, true);
document.addEventListener("keyup", onClickCleanup, passiveCapture);
rootRef.value.addEventListener("blur", onClickCleanup, passiveCapture);
}
}
navigateOnClick(e);
}
function onKeydown2(e) {
if (rootRef.value === null) {
return;
}
emit2("keydown", e);
if (isKeyCode(e, [13, 32]) === true && keyboardTarget !== rootRef.value) {
keyboardTarget !== null && cleanup();
if (e.defaultPrevented !== true) {
rootRef.value.focus();
keyboardTarget = rootRef.value;
rootRef.value.classList.add("q-btn--active");
document.addEventListener("keyup", onPressEnd, true);
rootRef.value.addEventListener("blur", onPressEnd, passiveCapture);
}
stopAndPrevent(e);
}
}
function onTouchstart(e) {
if (rootRef.value === null) {
return;
}
emit2("touchstart", e);
if (e.defaultPrevented === true) {
return;
}
if (touchTarget !== rootRef.value) {
touchTarget !== null && cleanup();
touchTarget = rootRef.value;
localTouchTargetEl = e.target;
localTouchTargetEl.addEventListener("touchcancel", onPressEnd, passiveCapture);
localTouchTargetEl.addEventListener("touchend", onPressEnd, passiveCapture);
}
avoidMouseRipple = true;
mouseTimer !== null && clearTimeout(mouseTimer);
mouseTimer = setTimeout(() => {
mouseTimer = null;
avoidMouseRipple = false;
}, 200);
}
function onMousedown(e) {
if (rootRef.value === null) {
return;
}
e.qSkipRipple = avoidMouseRipple === true;
emit2("mousedown", e);
if (e.defaultPrevented !== true && mouseTarget !== rootRef.value) {
mouseTarget !== null && cleanup();
mouseTarget = rootRef.value;
rootRef.value.classList.add("q-btn--active");
document.addEventListener("mouseup", onPressEnd, passiveCapture);
}
}
function onPressEnd(e) {
if (rootRef.value === null) {
return;
}
if (e !== void 0 && e.type === "blur" && document.activeElement === rootRef.value) {
return;
}
if (e !== void 0 && e.type === "keyup") {
if (keyboardTarget === rootRef.value && isKeyCode(e, [13, 32]) === true) {
const evt = new MouseEvent("click", e);
evt.qKeyEvent = true;
e.defaultPrevented === true && prevent(evt);
e.cancelBubble === true && stop(evt);
rootRef.value.dispatchEvent(evt);
stopAndPrevent(e);
e.qKeyEvent = true;
}
emit2("keyup", e);
}
cleanup();
}
function cleanup(destroying) {
const blurTarget = blurTargetRef.value;
if (destroying !== true && (touchTarget === rootRef.value || mouseTarget === rootRef.value) && blurTarget !== null && blurTarget !== document.activeElement) {
blurTarget.setAttribute("tabindex", -1);
blurTarget.focus();
}
if (touchTarget === rootRef.value) {
if (localTouchTargetEl !== null) {
localTouchTargetEl.removeEventListener("touchcancel", onPressEnd, passiveCapture);
localTouchTargetEl.removeEventListener("touchend", onPressEnd, passiveCapture);
}
touchTarget = localTouchTargetEl = null;
}
if (mouseTarget === rootRef.value) {
document.removeEventListener("mouseup", onPressEnd, passiveCapture);
mouseTarget = null;
}
if (keyboardTarget === rootRef.value) {
document.removeEventListener("keyup", onPressEnd, true);
rootRef.value !== null && rootRef.value.removeEventListener("blur", onPressEnd, passiveCapture);
keyboardTarget = null;
}
rootRef.value !== null && rootRef.value.classList.remove("q-btn--active");
}
function onLoadingEvt(evt) {
stopAndPrevent(evt);
evt.qSkipRipple = true;
}
vue.onBeforeUnmount(() => {
cleanup(true);
});
Object.assign(proxy, { click: onClick });
return () => {
let inner = [];
props.icon !== void 0 && inner.push(
vue.h(QIcon, {
name: props.icon,
left: props.stack === false && hasLabel.value === true,
role: "img",
"aria-hidden": "true"
})
);
hasLabel.value === true && inner.push(
vue.h("span", { class: "block" }, [props.label])
);
inner = hMergeSlot(slots.default, inner);
if (props.iconRight !== void 0 && props.round === false) {
inner.push(
vue.h(QIcon, {
name: props.iconRight,
right: props.stack === false && hasLabel.value === true,
role: "img",
"aria-hidden": "true"
})
);
}
const child = [
vue.h("span", {
class: "q-focus-helper",
ref: blurTargetRef
})
];
if (props.loading === true && props.percentage !== void 0) {
child.push(
vue.h("span", {
class: "q-btn__progress absolute-full overflow-hidden" + (props.darkPercentage === true ? " q-btn__progress--dark" : "")
}, [
vue.h("span", {
class: "q-btn__progress-indicator fit block",
style: percentageStyle.value
})
])
);
}
child.push(
vue.h("span", {
class: "q-btn__content text-center col items-center q-anchor--skip " + innerClasses.value
}, inner)
);
props.loading !== null && child.push(
vue.h(vue.Transition, {
name: "q-transition--fade"
}, () => props.loading === true ? [
vue.h("span", {
key: "loading",
class: "absolute-full flex flex-center"
}, slots.loading !== void 0 ? slots.loading() : [vue.h(QSpinner)])
] : null)
);
return vue.withDirectives(
vue.h(
linkTag.value,
nodeProps.value,
child
),
[[
Ripple,
ripple.value,
void 0,
rippleProps.value
]]
);
};
}
});
function injectProp(target2, propName, get, set) {
Object.defineProperty(target2, propName, {
get,
set,
enumerable: true
});
return target2;
}
const isRuntimeSsrPreHydration = vue.ref(
false
);
let iosCorrection;
function getMatch(userAgent2, platformMatch) {
const match2 = /(edg|edge|edga|edgios)\/([\w.]+)/.exec(userAgent2) || /(opr)[\/]([\w.]+)/.exec(userAgent2) || /(vivaldi)[\/]([\w.]+)/.exec(userAgent2) || /(chrome|crios)[\/]([\w.]+)/.exec(userAgent2) || /(version)(applewebkit)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent2) || /(webkit)[\/]([\w.]+).*(version)[\/]([\w.]+).*(safari)[\/]([\w.]+)/.exec(userAgent2) || /(firefox|fxios)[\/]([\w.]+)/.exec(userAgent2) || /(webkit)[\/]([\w.]+)/.exec(userAgent2) || /(opera)(?:.*version|)[\/]([\w.]+)/.exec(userAgent2) || [];
return {
browser: match2[5] || match2[3] || match2[1] || "",
version: match2[2] || match2[4] || "0",
versionNumber: match2[4] || match2[2] || "0",
platform: platformMatch[0] || ""
};
}
function getPlatformMatch(userAgent2) {
return /(ipad)/.exec(userAgent2) || /(ipod)/.exec(userAgent2) || /(windows phone)/.exec(userAgent2) || /(iphone)/.exec(userAgent2) || /(kindle)/.exec(userAgent2) || /(silk)/.exec(userAgent2) || /(android)/.exec(userAgent2) || /(win)/.exec(userAgent2) || /(mac)/.exec(userAgent2) || /(linux)/.exec(userAgent2) || /(cros)/.exec(userAgent2) || /(playbook)/.exec(userAgent2) || /(bb)/.exec(userAgent2) || /(blackberry)/.exec(userAgent2) || [];
}
const hasTouch = "ontouchstart" in window || window.navigator.maxTouchPoints > 0;
function applyIosCorrection(is) {
iosCorrection = { is: { ...is } };
delete is.mac;
delete is.desktop;
const platform = Math.min(window.innerHeight, window.innerWidth) > 414 ? "ipad" : "iphone";
Object.assign(is, {
mobile: true,
ios: true,
platform,
[platform]: true
});
}
function getPlatform(UA) {
const userAgent2 = UA.toLowerCase(), platformMatch = getPlatformMatch(userAgent2), matched = getMatch(userAgent2, platformMatch), browser = {};
if (matched.browser) {
browser[matched.browser] = true;
browser.version = matched.version;
browser.versionNumber = parseInt(matched.versionNumber, 10);
}
if (matched.platform) {
browser[matched.platform] = true;
}
const knownMobiles = browser.android || browser.ios || browser.bb || browser.blackberry || browser.ipad || browser.iphone || browser.ipod || browser.kindle || browser.playbook || browser.silk || browser["windows phone"];
if (knownMobiles === true || userAgent2.indexOf("mobile") > -1) {
browser.mobile = true;
if (browser.edga || browser.edgios) {
browser.edge = true;
matched.browser = "edge";
} else if (browser.crios) {
browser.chrome = true;
matched.browser = "chrome";
} else if (browser.fxios) {
browser.firefox = true;
matched.browser = "firefox";
}
} else {
browser.desktop = true;
}
if (browser.ipod || browser.ipad || browser.iphone) {
browser.ios = true;
}
if (browser["windows phone"]) {
browser.winphone = true;
delete browser["windows phone"];
}
if (browser.chrome || browser.opr || browser.safari || browser.vivaldi || browser.mobile === true && browser.ios !== true && knownMobiles !== true) {
browser.webkit = true;
}
if (browser.edg) {
matched.browser = "edgechromium";
browser.edgeChromium = true;
}
if (browser.safari && browser.blackberry || browser.bb) {
matched.browser = "blackberry";
browser.blackberry = true;
}
if (browser.safari && browser.playbook) {
matched.browser = "playbook";
browser.playbook = true;
}
if (browser.opr) {
matched.browser = "opera";
browser.opera = true;
}
if (browser.safari && browser.android) {
matched.browser = "android";
browser.android = true;
}
if (browser.safari && browser.kindle) {
matched.browser = "kindle";
browser.kindle = true;
}
if (browser.safari && browser.silk) {
matched.browser = "silk";
browser.silk = true;
}
if (browser.vivaldi) {
matched.browser = "vivaldi";
browser.vivaldi = true;
}
browser.name = matched.browser;
browser.platform = matched.platform;
{
if (userAgent2.indexOf("electron") > -1) {
browser.electron = true;
} else if (document.location.href.indexOf("-extension://") > -1) {
browser.bex = true;
} else {
if (window.Capacitor !== void 0) {
browser.capacitor = true;
browser.nativeMobile = true;
browser.nativeMobileWrapper = "capacitor";
} else if (window._cordovaNative !== void 0 || window.cordova !== void 0) {
browser.cordova = true;
browser.nativeMobile = true;
browser.nativeMobileWrapper = "cordova";
}
if (hasTouch === true && browser.mac === true && (browser.desktop === true && browser.safari === true || browser.nativeMobile === true && browser.android !== true && browser.ios !== true && browser.ipad !== true)) {
applyIosCorrection(browser);
}
}
}
return browser;
}
const userAgent = navigator.userAgent || navigator.vendor || window.opera;
const ssrClient = {
has: {
touch: false,
webStorage: false
},
within: { iframe: false }
};
const client = {
userAgent,
is: getPlatform(userAgent),
has: {
touch: hasTouch
},
within: {
iframe: window.self !== window.top
}
};
const Platform = {
install(opts) {
const { $q } = opts;
if (isRuntimeSsrPreHydration.value === true) {
opts.onSSRHydrated.push(() => {
Object.assign($q.platform, client);
isRuntimeSsrPreHydration.value = false;
iosCorrection = void 0;
});
$q.platform = vue.reactive(this);
} else {
$q.platform = this;
}
}
};
{
let hasWebStorage;
injectProp(client.has, "webStorage", () => {
if (hasWebStorage !== void 0) {
return hasWebStorage;
}
try {
if (window.localStorage) {
hasWebStorage = true;
return true;
}
} catch (e) {
}
hasWebStorage = false;
return false;
});
client.is.ios === true && window.navigator.vendor.toLowerCase().indexOf("apple") === -1;
if (isRuntimeSsrPreHydration.value === true) {
Object.assign(Platform, client, iosCorrection, ssrClient);
} else {
Object.assign(Platform, client);
}
}
const quasarKey = "_q_";
const formKey = "_q_fo_";
function useFormChild({ validate: validate2, resetValidation, requiresQForm }) {
const $form = vue.inject(formKey, false);
if ($form !== false) {
const { props, proxy } = vue.getCurrentInstance();
Object.assign(proxy, { validate: validate2, resetValidation });
vue.watch(() => props.disable, (val) => {
if (val === true) {
typeof resetValidation === "function" && resetValidation();
$form.unbindComponent(proxy);
} else {
$form.bindComponent(proxy);
}
});
vue.onMounted(() => {
props.disable !== true && $form.bindComponent(proxy);
});
vue.onBeforeUnmount(() => {
props.disable !== true && $form.unbindComponent(proxy);
});
} else if (requiresQForm === true) {
console.error("Parent QForm not found on useFormChild()!");
}
}
const hex = /^#[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/, hexa = /^#[0-9a-fA-F]{4}([0-9a-fA-F]{4})?$/, hexOrHexa = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/, rgb = /^rgb\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5])\)$/, rgba = /^rgba\(((0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),){2}(0|[1-9][\d]?|1[\d]{0,2}|2[\d]?|2[0-4][\d]|25[0-5]),(0|0\.[0-9]+[1-9]|0\.[1-9]+|1)\)$/;
const testPattern = {
date: (v) => /^-?[\d]+\/[0-1]\d\/[0-3]\d$/.test(v),
time: (v) => /^([0-1]?\d|2[0-3]):[0-5]\d$/.test(v),
fulltime: (v) => /^([0-1]?\d|2[0-3]):[0-5]\d:[0-5]\d$/.test(v),
timeOrFulltime: (v) => /^([0-1]?\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/.test(v),
// -- RFC 5322 --
// -- Added in v2.6.6 --
// This is a basic helper validation.
// For something more complex (like RFC 822) you should write and use your own rule.
// We won't be accepting PRs to enhance the one below because of the reason above.
// eslint-disable-next-line
email: (v) => /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(v),
hexColor: (v) => hex.test(v),
hexaColor: (v) => hexa.test(v),
hexOrHexaColor: (v) => hexOrHexa.test(v),
rgbColor: (v) => rgb.test(v),
rgbaColor: (v) => rgba.test(v),
rgbOrRgbaColor: (v) => rgb.test(v) || rgba.test(v),
hexOrRgbColor: (v) => hex.test(v) || rgb.test(v),
hexaOrRgbaColor: (v) => hexa.test(v) || rgba.test(v),
anyColor: (v) => hexOrHexa.test(v) || rgb.test(v) || rgba.test(v)
};
function debounce(fn, wait = 250, immediate2) {
let timer = null;
function debounced() {
const args = arguments;
const later = () => {
timer = null;
if (immediate2 !== true) {
fn.apply(this, args);
}
};
if (timer !== null) {
clearTimeout(timer);
} else if (immediate2 === true) {
fn.apply(this, args);
}
timer = setTimeout(later, wait);
}
debounced.cancel = () => {
timer !== null && clearTimeout(timer);
};
return debounced;
}
const lazyRulesValues = [true, false, "ondemand"];
const useValidateProps = {
modelValue: {},
error: {
type: Boolean,
default: null
},
errorMessage: String,
noErrorIcon: Boolean,
rules: Array,
reactiveRules: Boolean,
lazyRules: {
type: [Boolean, String],
validator: (v) => lazyRulesValues.includes(v)
}
};
function useValidate(focused, innerLoading) {
const { props, proxy } = vue.getCurrentInstance();
const innerError = vue.ref(false);
const innerErrorMessage = vue.ref(null);
const isDirtyModel = vue.ref(null);
useFormChild({ validate: validate2, resetValidation });
let validateIndex2 = 0, unwatchRules;
const hasRules = vue.computed(
() => props.rules !== void 0 && props.rules !== null && props.rules.length > 0
);
const hasActiveRules = vue.computed(
() => props.disable !== true && hasRules.value === true
);
const hasError = vue.computed(
() => props.error === true || innerError.value === true
);
const errorMessage = vue.computed(() => typeof props.errorMessage === "string" && props.errorMessage.length > 0 ? props.errorMessage : innerErrorMessage.value);
vue.watch(() => props.modelValue, () => {
validateIfNeeded();
});
vue.watch(() => props.reactiveRules, (val) => {
if (val === true) {
if (unwatchRules === void 0) {
unwatchRules = vue.watch(() => props.rules, () => {
validateIfNeeded(true);
});
}
} else if (unwatchRules !== void 0) {
unwatchRules();
unwatchRules = void 0;
}
}, { immediate: true });
vue.watch(focused, (val) => {
if (val === true) {
if (isDirtyModel.value === null) {
isDirtyModel.value = false;
}
} else if (isDirtyModel.value === false) {
isDirtyModel.value = true;
if (hasActiveRules.value === true && props.lazyRules !== "ondemand" && innerLoading.value === false) {
debouncedValidate();
}
}
});
function resetValidation() {
validateIndex2++;
innerLoading.value = false;
isDirtyModel.value = null;
innerError.value = false;
innerErrorMessage.value = null;
debouncedValidate.cancel();
}
function validate2(val = props.modelValue) {
if (hasActiveRules.value !== true) {
return true;
}
const index2 = ++validateIndex2;
const setDirty = innerLoading.value !== true ? () => {
isDirtyModel.value = true;
} : () => {
};
const update2 = (err, msg) => {
err === true && setDirty();
innerError.value = err;
innerErrorMessage.value = msg || null;
innerLoading.value = false;
};
const promises = [];
for (let i = 0; i < props.rules.length; i++) {
const rule = props.rules[i];
let res;
if (typeof rule === "function") {
res = rule(val, testPattern);
} else if (typeof rule === "string" && testPattern[rule] !== void 0) {
res = testPattern[rule](val);
}
if (res === false || typeof res === "string") {
update2(true, res);
return false;
} else if (res !== true && res !== void 0) {
promises.push(res);
}
}
if (promises.length === 0) {
update2(false);
return true;
}
innerLoading.value = true;
return Promise.all(promises).then(
(res) => {
if (res === void 0 || Array.isArray(res) === false || res.length === 0) {
index2 === validateIndex2 && update2(false);
return true;
}
const msg = res.find((r) => r === false || typeof r === "string");
index2 === validateIndex2 && update2(msg !== void 0, msg);
return msg === void 0;
},
(e) => {
if (index2 === validateIndex2) {
console.error(e);
update2(true);
}
return false;
}
);
}
function validateIfNeeded(changedRules) {
if (hasActiveRules.value === true && props.lazyRules !== "ondemand" && (isDirtyModel.value === true || props.lazyRules !== true && changedRules !== true)) {
debouncedValidate();
}
}
const debouncedValidate = debounce(validate2, 0);
vue.onBeforeUnmount(() => {
unwatchRules !== void 0 && unwatchRules();
debouncedValidate.cancel();
});
Object.assign(proxy, { resetValidation, validate: validate2 });
injectProp(proxy, "hasError", () => hasError.value);
return {
isDirtyModel,
hasRules,
hasError,
errorMessage,
validate: validate2,
resetValidation
};
}
const listenerRE = /^on[A-Z]/;
function useSplitAttrs(attrs, vnode) {
const acc = {
listeners: vue.ref({}),
attributes: vue.ref({})
};
function update2() {
const attributes = {};
const listeners2 = {};
for (const key in attrs) {
if (key !== "class" && key !== "style" && listenerRE.test(key) === false) {
attributes[key] = attrs[key];
}
}
for (const key in vnode.props) {
if (listenerRE.test(key) === true) {
listeners2[key] = vnode.props[key];
}
}
acc.attributes.value = attributes;
acc.listeners.value = listeners2;
}
vue.onBeforeUpdate(update2);
update2();
return acc;
}
let buf, bufIdx = 0;
const hexBytes = new Array(256);
for (let i = 0; i < 256; i++) {
hexBytes[i] = (i + 256).toString(16).substring(1);
}
const randomBytes = (() => {
const lib2 = typeof crypto !== "undefined" ? crypto : typeof window !== "undefined" ? window.crypto || window.msCrypto : void 0;
if (lib2 !== void 0) {
if (lib2.randomBytes !== void 0) {
return lib2.randomBytes;
}
if (lib2.getRandomValues !== void 0) {
return (n) => {
const bytes = new Uint8Array(n);
lib2.getRandomValues(bytes);
return bytes;
};
}
}
return (n) => {
const r = [];
for (let i = n; i > 0; i--) {
r.push(Math.floor(Math.random() * 256));
}
return r;
};
})();
const BUFFER_SIZE = 4096;
function uid$1() {
if (buf === void 0 || bufIdx + 16 > BUFFER_SIZE) {
bufIdx = 0;
buf = randomBytes(BUFFER_SIZE);
}
const b = Array.prototype.slice.call(buf, bufIdx, bufIdx += 16);
b[6] = b[6] & 15 | 64;
b[8] = b[8] & 63 | 128;
return hexBytes[b[0]] + hexBytes[b[1]] + hexBytes[b[2]] + hexBytes[b[3]] + "-" + hexBytes[b[4]] + hexBytes[b[5]] + "-" + hexBytes[b[6]] + hexBytes[b[7]] + "-" + hexBytes[b[8]] + hexBytes[b[9]] + "-" + hexBytes[b[10]] + hexBytes[b[11]] + hexBytes[b[12]] + hexBytes[b[13]] + hexBytes[b[14]] + hexBytes[b[15]];
}
let queue$2 = [];
let waitFlags = [];
function clearFlag(flag) {
waitFlags = waitFlags.filter((entry) => entry !== flag);
}
function addFocusWaitFlag(flag) {
clearFlag(flag);
waitFlags.push(flag);
}
function removeFocusWaitFlag(flag) {
clearFlag(flag);
if (waitFlags.length === 0 && queue$2.length > 0) {
queue$2[queue$2.length - 1]();
queue$2 = [];
}
}
function addFocusFn(fn) {
if (waitFlags.length === 0) {
fn();
} else {
queue$2.push(fn);
}
}
function removeFocusFn(fn) {
queue$2 = queue$2.filter((entry) => entry !== fn);
}
function getTargetUid(val) {
return val === void 0 ? `f_${uid$1()}` : val;
}
function fieldValueIsFilled(val) {
return val !== void 0 && val !== null && ("" + val).length > 0;
}
const useFieldProps = {
...useDarkProps,
...useValidateProps,
label: String,
stackLabel: Boolean,
hint: String,
hideHint: Boolean,
prefix: String,
suffix: String,
labelColor: String,
color: String,
bgColor: String,
filled: Boolean,
outlined: Boolean,
borderless: Boolean,
standout: [Boolean, String],
square: Boolean,
loading: Boolean,
labelSlot: Boolean,
bottomSlots: Boolean,
hideBottomSpace: Boolean,
rounded: Boolean,
dense: Boolean,
itemAligned: Boolean,
counter: Boolean,
clearable: Boolean,
clearIcon: String,
disable: Boolean,
readonly: Boolean,
autofocus: Boolean,
for: String,
maxlength: [Number, String]
};
const useFieldEmits = ["update:modelValue", "clear", "focus", "blur", "popupShow", "popupHide"];
function useFieldState() {
const { props, attrs, proxy, vnode } = vue.getCurrentInstance();
const isDark = useDark(props, proxy.$q);
return {
isDark,
editable: vue.computed(
() => props.disable !== true && props.readonly !== true
),
innerLoading: vue.ref(false),
focused: vue.ref(false),
hasPopupOpen: false,
splitAttrs: useSplitAttrs(attrs, vnode),
targetUid: vue.ref(getTargetUid(props.for)),
rootRef: vue.ref(null),
targetRef: vue.ref(null),
controlRef: vue.ref(null)
/**
* user supplied additionals:
* innerValue - computed
* floatingLabel - computed
* inputRef - computed
* fieldClass - computed
* hasShadow - computed
* controlEvents - Object with fn(e)
* getControl - fn
* getInnerAppend - fn
* getControlChild - fn
* getShadowControl - fn
* showPopup - fn
*/
};
}
function useField(state) {
const { props, emit: emit2, slots, attrs, proxy } = vue.getCurrentInstance();
const { $q } = proxy;
let focusoutTimer = null;
if (state.hasValue === void 0) {
state.hasValue = vue.computed(() => fieldValueIsFilled(props.modelValue));
}
if (state.emitValue === void 0) {
state.emitValue = (value2) => {
emit2("update:modelValue", value2);
};
}
if (state.controlEvents === void 0) {
state.controlEvents = {
onFocusin: onControlFocusin,
onFocusout: onControlFocusout
};
}
Object.assign(state, {
clearValue,
onControlFocusin,
onControlFocusout,
focus
});
if (state.computedCounter === void 0) {
state.computedCounter = vue.computed(() => {
if (props.counter !== false) {
const len2 = typeof props.modelValue === "string" || typeof props.modelValue === "number" ? ("" + props.modelValue).length : Array.isArray(props.modelValue) === true ? props.modelValue.length : 0;
const max2 = props.maxlength !== void 0 ? props.maxlength : props.maxValues;
return len2 + (max2 !== void 0 ? " / " + max2 : "");
}
});
}
const {
isDirtyModel,
hasRules,
hasError,
errorMessage,
resetValidation
} = useValidate(state.focused, state.innerLoading);
const floatingLabel = state.floatingLabel !== void 0 ? vue.computed(() => props.stackLabel === true || state.focused.value === true || state.floatingLabel.value === true) : vue.computed(() => props.stackLabel === true || state.focused.value === true || state.hasValue.value === true);
const shouldRenderBottom = vue.computed(
() => props.bottomSlots === true || props.hint !== void 0 || hasRules.value === true || props.counter === true || props.error !== null
);
const styleType = vue.computed(() => {
if (props.filled === true) {
return "filled";
}
if (props.outlined === true) {
return "outlined";
}
if (props.borderless === true) {
return "borderless";
}
if (props.standout) {
return "standout";
}
return "standard";
});
const classes = vue.computed(
() => `q-field row no-wrap items-start q-field--${styleType.value}` + (state.fieldClass !== void 0 ? ` ${state.fieldClass.value}` : "") + (props.rounded === true ? " q-field--rounded" : "") + (props.square === true ? " q-field--square" : "") + (floatingLabel.value === true ? " q-field--float" : "") + (hasLabel.value === true ? " q-field--labeled" : "") + (props.dense === true ? " q-field--dense" : "") + (props.itemAligned === true ? " q-field--item-aligned q-item-type" : "") + (state.isDark.value === true ? " q-field--dark" : "") + (state.getControl === void 0 ? " q-field--auto-height" : "") + (state.focused.value === true ? " q-field--focused" : "") + (hasError.value === true ? " q-field--error" : "") + (hasError.value === true || state.focused.value === true ? " q-field--highlighted" : "") + (props.hideBottomSpace !== true && shouldRenderBottom.value === true ? " q-field--with-bottom" : "") + (props.disable === true ? " q-field--disabled" : props.readonly === true ? " q-field--readonly" : "")
);
const contentClass = vue.computed(
() => "q-field__control relative-position row no-wrap" + (props.bgColor !== void 0 ? ` bg-${props.bgColor}` : "") + (hasError.value === true ? " text-negative" : typeof props.standout === "string" && props.standout.length > 0 && state.focused.value === true ? ` ${props.standout}` : props.color !== void 0 ? ` text-${props.color}` : "")
);
const hasLabel = vue.computed(
() => props.labelSlot === true || props.label !== void 0
);
const labelClass = vue.computed(
() => "q-field__label no-pointer-events absolute ellipsis" + (props.labelColor !== void 0 && hasError.value !== true ? ` text-${props.labelColor}` : "")
);
const controlSlotScope = vue.computed(() => ({
id: state.targetUid.value,
editable: state.editable.value,
focused: state.focused.value,
floatingLabel: floatingLabel.value,
modelValue: props.modelValue,
emitValue: state.emitValue
}));
const attributes = vue.computed(() => {
const acc = {
for: state.targetUid.value
};
if (props.disable === true) {
acc["aria-disabled"] = "true";
} else if (props.readonly === true) {
acc["aria-readonly"] = "true";
}
return acc;
});
vue.watch(() => props.for, (val) => {
state.targetUid.value = getTargetUid(val);
});
function focusHandler() {
const el = document.activeElement;
let target2 = state.targetRef !== void 0 && state.targetRef.value;
if (target2 && (el === null || el.id !== state.targetUid.value)) {
target2.hasAttribute("tabindex") === true || (target2 = target2.querySelector("[tabindex]"));
if (target2 && target2 !== el) {
target2.focus({ preventScroll: true });
}
}
}
function focus() {
addFocusFn(focusHandler);
}
function blur() {
removeFocusFn(focusHandler);
const el = document.activeElement;
if (el !== null && state.rootRef.value.contains(el)) {
el.blur();
}
}
function onControlFocusin(e) {
if (focusoutTimer !== null) {
clearTimeout(focusoutTimer);
focusoutTimer = null;
}
if (state.editable.value === true && state.focused.value === false) {
state.focused.value = true;
emit2("focus", e);
}
}
function onControlFocusout(e, then) {
focusoutTimer !== null && clearTimeout(focusoutTimer);
focusoutTimer = setTimeout(() => {
focusoutTimer = null;
if (document.hasFocus() === true && (state.hasPopupOpen === true || state.controlRef === void 0 || state.controlRef.value === null || state.controlRef.value.contains(document.activeElement) !== false)) {
return;
}
if (state.focused.value === true) {
state.focused.value = false;
emit2("blur", e);
}
then !== void 0 && then();
});
}
function clearValue(e) {
stopAndPrevent(e);
if ($q.platform.is.mobile !== true) {
const el = state.targetRef !== void 0 && state.targetRef.value || state.rootRef.value;
el.focus();
} else if (state.rootRef.value.contains(document.activeElement) === true) {
document.activeElement.blur();
}
if (props.type === "file") {
state.inputRef.value.value = null;
}
emit2("update:modelValue", null);
emit2("clear", props.modelValue);
vue.nextTick(() => {
resetValidation();
if ($q.platform.is.mobile !== true) {
isDirtyModel.value = false;
}
});
}
function getContent() {
const node = [];
slots.prepend !== void 0 && node.push(
vue.h("div", {
class: "q-field__prepend q-field__marginal row no-wrap items-center",
key: "prepend",
onClick: prevent
}, slots.prepend())
);
node.push(
vue.h("div", {
class: "q-field__control-container col relative-position row no-wrap q-anchor--skip"
}, getControlContainer())
);
hasError.value === true && props.noErrorIcon === false && node.push(
getInnerAppendNode("error", [
vue.h(QIcon, { name: $q.iconSet.field.error, color: "negative" })
])
);
if (props.loading === true || state.innerLoading.value === true) {
node.push(
getInnerAppendNode(
"inner-loading-append",
slots.loading !== void 0 ? slots.loading() : [vue.h(QSpinner, { color: props.color })]
)
);
} else if (props.clearable === true && state.hasValue.value === true && state.editable.value === true) {
node.push(
getInnerAppendNode("inner-clearable-append", [
vue.h(QIcon, {
class: "q-field__focusable-action",
tag: "button",
name: props.clearIcon || $q.iconSet.field.clear,
tabindex: 0,
type: "button",
"aria-hidden": null,
role: null,
onClick: clearValue
})
])
);
}
slots.append !== void 0 && node.push(
vue.h("div", {
class: "q-field__append q-field__marginal row no-wrap items-center",
key: "append",
onClick: prevent
}, slots.append())
);
state.getInnerAppend !== void 0 && node.push(
getInnerAppendNode("inner-append", state.getInnerAppend())
);
state.getControlChild !== void 0 && node.push(
state.getControlChild()
);
return node;
}
function getControlContainer() {
const node = [];
props.prefix !== void 0 && props.prefix !== null && node.push(
vue.h("div", {
class: "q-field__prefix no-pointer-events row items-center"
}, props.prefix)
);
if (state.getShadowControl !== void 0 && state.hasShadow.value === true) {
node.push(
state.getShadowControl()
);
}
if (state.getControl !== void 0) {
node.push(state.getControl());
} else if (slots.rawControl !== void 0) {
node.push(slots.rawControl());
} else if (slots.control !== void 0) {
node.push(
vue.h("div", {
ref: state.targetRef,
class: "q-field__native row",
tabindex: -1,
...state.splitAttrs.attributes.value,
"data-autofocus": props.autofocus === true || void 0
}, slots.control(controlSlotScope.value))
);
}
hasLabel.value === true && node.push(
vue.h("div", {
class: labelClass.value
}, hSlot(slots.label, props.label))
);
props.suffix !== void 0 && props.suffix !== null && node.push(
vue.h("div", {
class: "q-field__suffix no-pointer-events row items-center"
}, props.suffix)
);
return node.concat(hSlot(slots.default));
}
function getBottom() {
let msg, key;
if (hasError.value === true) {
if (errorMessage.value !== null) {
msg = [vue.h("div", { role: "alert" }, errorMessage.value)];
key = `q--slot-error-${errorMessage.value}`;
} else {
msg = hSlot(slots.error);
key = "q--slot-error";
}
} else if (props.hideHint !== true || state.focused.value === true) {
if (props.hint !== void 0) {
msg = [vue.h("div", props.hint)];
key = `q--slot-hint-${props.hint}`;
} else {
msg = hSlot(slots.hint);
key = "q--slot-hint";
}
}
const hasCounter = props.counter === true || slots.counter !== void 0;
if (props.hideBottomSpace === true && hasCounter === false && msg === void 0) {
return;
}
const main = vue.h("div", {
key,
class: "q-field__messages col"
}, msg);
return vue.h("div", {
class: "q-field__bottom row items-start q-field__bottom--" + (props.hideBottomSpace !== true ? "animated" : "stale"),
onClick: prevent
}, [
props.hideBottomSpace === true ? main : vue.h(vue.Transition, { name: "q-transition--field-message" }, () => main),
hasCounter === true ? vue.h("div", {
class: "q-field__counter"
}, slots.counter !== void 0 ? slots.counter() : state.computedCounter.value) : null
]);
}
function getInnerAppendNode(key, content) {
return content === null ? null : vue.h("div", {
key,
class: "q-field__append q-field__marginal row no-wrap items-center q-anchor--skip"
}, content);
}
let shouldActivate = false;
vue.onDeactivated(() => {
shouldActivate = true;
});
vue.onActivated(() => {
shouldActivate === true && props.autofocus === true && proxy.focus();
});
vue.onMounted(() => {
if (isRuntimeSsrPreHydration.value === true && props.for === void 0) {
state.targetUid.value = getTargetUid();
}
props.autofocus === true && proxy.focus();
});
vue.onBeforeUnmount(() => {
focusoutTimer !== null && clearTimeout(focusoutTimer);
});
Object.assign(proxy, { focus, blur });
return function renderField() {
const labelAttrs = state.getControl === void 0 && slots.control === void 0 ? {
...state.splitAttrs.attributes.value,
"data-autofocus": props.autofocus === true || void 0,
...attributes.value
} : attributes.value;
return vue.h("label", {
ref: state.rootRef,
class: [
classes.value,
attrs.class
],
style: attrs.style,
...labelAttrs
}, [
slots.before !== void 0 ? vue.h("div", {
class: "q-field__before q-field__marginal row no-wrap items-center",
onClick: prevent
}, slots.before()) : null,
vue.h("div", {
class: "q-field__inner relative-position col self-stretch"
}, [
vue.h("div", {
ref: state.controlRef,
class: contentClass.value,
tabindex: -1,
...state.controlEvents
}, getContent()),
shouldRenderBottom.value === true ? getBottom() : null
]),
slots.after !== void 0 ? vue.h("div", {
class: "q-field__after q-field__marginal row no-wrap items-center",
onClick: prevent
}, slots.after()) : null
]);
};
}
const NAMED_MASKS = {
date: "####/##/##",
datetime: "####/##/## ##:##",
time: "##:##",
fulltime: "##:##:##",
phone: "(###) ### - ####",
card: "#### #### #### ####"
};
const TOKENS = {
"#": { pattern: "[\\d]", negate: "[^\\d]" },
S: { pattern: "[a-zA-Z]", negate: "[^a-zA-Z]" },
N: { pattern: "[0-9a-zA-Z]", negate: "[^0-9a-zA-Z]" },
A: { pattern: "[a-zA-Z]", negate: "[^a-zA-Z]", transform: (v) => v.toLocaleUpperCase() },
a: { pattern: "[a-zA-Z]", negate: "[^a-zA-Z]", transform: (v) => v.toLocaleLowerCase() },
X: { pattern: "[0-9a-zA-Z]", negate: "[^0-9a-zA-Z]", transform: (v) => v.toLocaleUpperCase() },
x: { pattern: "[0-9a-zA-Z]", negate: "[^0-9a-zA-Z]", transform: (v) => v.toLocaleLowerCase() }
};
const KEYS = Object.keys(TOKENS);
KEYS.forEach((key) => {
TOKENS[key].regex = new RegExp(TOKENS[key].pattern);
});
const tokenRegexMask = new RegExp("\\\\([^.*+?^${}()|([\\]])|([.*+?^${}()|[\\]])|([" + KEYS.join("") + "])|(.)", "g"), escRegex = /[.*+?^${}()|[\]\\]/g;
const MARKER = String.fromCharCode(1);
const useMaskProps = {
mask: String,
reverseFillMask: Boolean,
fillMask: [Boolean, String],
unmaskedValue: Boolean
};
function useMask(props, emit2, emitValue, inputRef) {
let maskMarked, maskReplaced, computedMask, computedUnmask, pastedTextStart, selectionAnchor;
const hasMask = vue.ref(null);
const innerValue = vue.ref(getInitialMaskedValue());
function getIsTypeText() {
return props.autogrow === true || ["textarea", "text", "search", "url", "tel", "password"].includes(props.type);
}
vue.watch(() => props.type + props.autogrow, updateMaskInternals);
vue.watch(() => props.mask, (v) => {
if (v !== void 0) {
updateMaskValue(innerValue.value, true);
} else {
const val = unmaskValue(innerValue.value);
updateMaskInternals();
props.modelValue !== val && emit2("update:modelValue", val);
}
});
vue.watch(() => props.fillMask + props.reverseFillMask, () => {
hasMask.value === true && updateMaskValue(innerValue.value, true);
});
vue.watch(() => props.unmaskedValue, () => {
hasMask.value === true && updateMaskValue(innerValue.value);
});
function getInitialMaskedValue() {
updateMaskInternals();
if (hasMask.value === true) {
const masked = maskValue(unmaskValue(props.modelValue));
return props.fillMask !== false ? fillWithMask(masked) : masked;
}
return props.modelValue;
}
function getPaddedMaskMarked(size) {
if (size < maskMarked.length) {
return maskMarked.slice(-size);
}
let pad2 = "", localMaskMarked = maskMarked;
const padPos = localMaskMarked.indexOf(MARKER);
if (padPos > -1) {
for (let i = size - localMaskMarked.length; i > 0; i--) {
pad2 += MARKER;
}
localMaskMarked = localMaskMarked.slice(0, padPos) + pad2 + localMaskMarked.slice(padPos);
}
return localMaskMarked;
}
function updateMaskInternals() {
hasMask.value = props.mask !== void 0 && props.mask.length > 0 && getIsTypeText();
if (hasMask.value === false) {
computedUnmask = void 0;
maskMarked = "";
maskReplaced = "";
return;
}
const localComputedMask = NAMED_MASKS[props.mask] === void 0 ? props.mask : NAMED_MASKS[props.mask], fillChar = typeof props.fillMask === "string" && props.fillMask.length > 0 ? props.fillMask.slice(0, 1) : "_", fillCharEscaped = fillChar.replace(escRegex, "\\$&"), unmask = [], extract = [], mask = [];
let firstMatch = props.reverseFillMask === true, unmaskChar = "", negateChar = "";
localComputedMask.replace(tokenRegexMask, (_, char1, esc, token, char2) => {
if (token !== void 0) {
const c = TOKENS[token];
mask.push(c);
negateChar = c.negate;
if (firstMatch === true) {
extract.push("(?:" + negateChar + "+)?(" + c.pattern + "+)?(?:" + negateChar + "+)?(" + c.pattern + "+)?");
firstMatch = false;
}
extract.push("(?:" + negateChar + "+)?(" + c.pattern + ")?");
} else if (esc !== void 0) {
unmaskChar = "\\" + (esc === "\\" ? "" : esc);
mask.push(esc);
unmask.push("([^" + unmaskChar + "]+)?" + unmaskChar + "?");
} else {
const c = char1 !== void 0 ? char1 : char2;
unmaskChar = c === "\\" ? "\\\\\\\\" : c.replace(escRegex, "\\\\$&");
mask.push(c);
unmask.push("([^" + unmaskChar + "]+)?" + unmaskChar + "?");
}
});
const unmaskMatcher = new RegExp(
"^" + unmask.join("") + "(" + (unmaskChar === "" ? "." : "[^" + unmaskChar + "]") + "+)?" + (unmaskChar === "" ? "" : "[" + unmaskChar + "]*") + "$"
), extractLast = extract.length - 1, extractMatcher = extract.map((re, index2) => {
if (index2 === 0 && props.reverseFillMask === true) {
return new RegExp("^" + fillCharEscaped + "*" + re);
} else if (index2 === extractLast) {
return new RegExp(
"^" + re + "(" + (negateChar === "" ? "." : negateChar) + "+)?" + (props.reverseFillMask === true ? "$" : fillCharEscaped + "*")
);
}
return new RegExp("^" + re);
});
computedMask = mask;
computedUnmask = (val) => {
const unmaskMatch = unmaskMatcher.exec(props.reverseFillMask === true ? val : val.slice(0, mask.length + 1));
if (unmaskMatch !== null) {
val = unmaskMatch.slice(1).join("");
}
const extractMatch = [], extractMatcherLength = extractMatcher.length;
for (let i = 0, str = val; i < extractMatcherLength; i++) {
const m = extractMatcher[i].exec(str);
if (m === null) {
break;
}
str = str.slice(m.shift().length);
extractMatch.push(...m);
}
if (extractMatch.length > 0) {
return extractMatch.join("");
}
return val;
};
maskMarked = mask.map((v) => typeof v === "string" ? v : MARKER).join("");
maskReplaced = maskMarked.split(MARKER).join(fillChar);
}
function updateMaskValue(rawVal, updateMaskInternalsFlag, inputType) {
const inp = inputRef.value, end = inp.selectionEnd, endReverse = inp.value.length - end, unmasked = unmaskValue(rawVal);
updateMaskInternalsFlag === true && updateMaskInternals();
const preMasked = maskValue(unmasked), masked = props.fillMask !== false ? fillWithMask(preMasked) : preMasked, changed = innerValue.value !== masked;
inp.value !== masked && (inp.value = masked);
changed === true && (innerValue.value = masked);
document.activeElement === inp && vue.nextTick(() => {
if (masked === maskReplaced) {
const cursor = props.reverseFillMask === true ? maskReplaced.length : 0;
inp.setSelectionRange(cursor, cursor, "forward");
return;
}
if (inputType === "insertFromPaste" && props.reverseFillMask !== true) {
const maxEnd = inp.selectionEnd;
let cursor = end - 1;
for (let i = pastedTextStart; i <= cursor && i < maxEnd; i++) {
if (maskMarked[i] !== MARKER) {
cursor++;
}
}
moveCursor.right(inp, cursor);
return;
}
if (["deleteContentBackward", "deleteContentForward"].indexOf(inputType) > -1) {
const cursor = props.reverseFillMask === true ? end === 0 ? masked.length > preMasked.length ? 1 : 0 : Math.max(0, masked.length - (masked === maskReplaced ? 0 : Math.min(preMasked.length, endReverse) + 1)) + 1 : end;
inp.setSelectionRange(cursor, cursor, "forward");
return;
}
if (props.reverseFillMask === true) {
if (changed === true) {
const cursor = Math.max(0, masked.length - (masked === maskReplaced ? 0 : Math.min(preMasked.length, endReverse + 1)));
if (cursor === 1 && end === 1) {
inp.setSelectionRange(cursor, cursor, "forward");
} else {
moveCursor.rightReverse(inp, cursor);
}
} else {
const cursor = masked.length - endReverse;
inp.setSelectionRange(cursor, cursor, "backward");
}
} else {
if (changed === true) {
const cursor = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, end) - 1);
moveCursor.right(inp, cursor);
} else {
const cursor = end - 1;
moveCursor.right(inp, cursor);
}
}
});
const val = props.unmaskedValue === true ? unmaskValue(masked) : masked;
String(props.modelValue) !== val && emitValue(val, true);
}
function moveCursorForPaste(inp, start, end) {
const preMasked = maskValue(unmaskValue(inp.value));
start = Math.max(0, maskMarked.indexOf(MARKER), Math.min(preMasked.length, start));
pastedTextStart = start;
inp.setSelectionRange(start, end, "forward");
}
const moveCursor = {
left(inp, cursor) {
const noMarkBefore = maskMarked.slice(cursor - 1).indexOf(MARKER) === -1;
let i = Math.max(0, cursor - 1);
for (; i >= 0; i--) {
if (maskMarked[i] === MARKER) {
cursor = i;
noMarkBefore === true && cursor++;
break;
}
}
if (i < 0 && maskMarked[cursor] !== void 0 && maskMarked[cursor] !== MARKER) {
return moveCursor.right(inp, 0);
}
cursor >= 0 && inp.setSelectionRange(cursor, cursor, "backward");
},
right(inp, cursor) {
const limit = inp.value.length;
let i = Math.min(limit, cursor + 1);
for (; i <= limit; i++) {
if (maskMarked[i] === MARKER) {
cursor = i;
break;
} else if (maskMarked[i - 1] === MARKER) {
cursor = i;
}
}
if (i > limit && maskMarked[cursor - 1] !== void 0 && maskMarked[cursor - 1] !== MARKER) {
return moveCursor.left(inp, limit);
}
inp.setSelectionRange(cursor, cursor, "forward");
},
leftReverse(inp, cursor) {
const localMaskMarked = getPaddedMaskMarked(inp.value.length);
let i = Math.max(0, cursor - 1);
for (; i >= 0; i--) {
if (localMaskMarked[i - 1] === MARKER) {
cursor = i;
break;
} else if (localMaskMarked[i] === MARKER) {
cursor = i;
if (i === 0) {
break;
}
}
}
if (i < 0 && localMaskMarked[cursor] !== void 0 && localMaskMarked[cursor] !== MARKER) {
return moveCursor.rightReverse(inp, 0);
}
cursor >= 0 && inp.setSelectionRange(cursor, cursor, "backward");
},
rightReverse(inp, cursor) {
const limit = inp.value.length, localMaskMarked = getPaddedMaskMarked(limit), noMarkBefore = localMaskMarked.slice(0, cursor + 1).indexOf(MARKER) === -1;
let i = Math.min(limit, cursor + 1);
for (; i <= limit; i++) {
if (localMaskMarked[i - 1] === MARKER) {
cursor = i;
cursor > 0 && noMarkBefore === true && cursor--;
break;
}
}
if (i > limit && localMaskMarked[cursor - 1] !== void 0 && localMaskMarked[cursor - 1] !== MARKER) {
return moveCursor.leftReverse(inp, limit);
}
inp.setSelectionRange(cursor, cursor, "forward");
}
};
function onMaskedClick(e) {
emit2("click", e);
selectionAnchor = void 0;
}
function onMaskedKeydown(e) {
emit2("keydown", e);
if (shouldIgnoreKey(e) === true) {
return;
}
const inp = inputRef.value, start = inp.selectionStart, end = inp.selectionEnd;
if (!e.shiftKey) {
selectionAnchor = void 0;
}
if (e.keyCode === 37 || e.keyCode === 39) {
if (e.shiftKey && selectionAnchor === void 0) {
selectionAnchor = inp.selectionDirection === "forward" ? start : end;
}
const fn = moveCursor[(e.keyCode === 39 ? "right" : "left") + (props.reverseFillMask === true ? "Reverse" : "")];
e.preventDefault();
fn(inp, selectionAnchor === start ? end : start);
if (e.shiftKey) {
const cursor = inp.selectionStart;
inp.setSelectionRange(Math.min(selectionAnchor, cursor), Math.max(selectionAnchor, cursor), "forward");
}
} else if (e.keyCode === 8 && props.reverseFillMask !== true && start === end) {
moveCursor.left(inp, start);
inp.setSelectionRange(inp.selectionStart, end, "backward");
} else if (e.keyCode === 46 && props.reverseFillMask === true && start === end) {
moveCursor.rightReverse(inp, end);
inp.setSelectionRange(start, inp.selectionEnd, "forward");
}
}
function maskValue(val) {
if (val === void 0 || val === null || val === "") {
return "";
}
if (props.reverseFillMask === true) {
return maskValueReverse(val);
}
const mask = computedMask;
let valIndex = 0, output = "";
for (let maskIndex = 0; maskIndex < mask.length; maskIndex++) {
const valChar = val[valIndex], maskDef = mask[maskIndex];
if (typeof maskDef === "string") {
output += maskDef;
valChar === maskDef && valIndex++;
} else if (valChar !== void 0 && maskDef.regex.test(valChar)) {
output += maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar;
valIndex++;
} else {
return output;
}
}
return output;
}
function maskValueReverse(val) {
const mask = computedMask, firstTokenIndex = maskMarked.indexOf(MARKER);
let valIndex = val.length - 1, output = "";
for (let maskIndex = mask.length - 1; maskIndex >= 0 && valIndex > -1; maskIndex--) {
const maskDef = mask[maskIndex];
let valChar = val[valIndex];
if (typeof maskDef === "string") {
output = maskDef + output;
valChar === maskDef && valIndex--;
} else if (valChar !== void 0 && maskDef.regex.test(valChar)) {
do {
output = (maskDef.transform !== void 0 ? maskDef.transform(valChar) : valChar) + output;
valIndex--;
valChar = val[valIndex];
} while (firstTokenIndex === maskIndex && valChar !== void 0 && maskDef.regex.test(valChar));
} else {
return output;
}
}
return output;
}
function unmaskValue(val) {
return typeof val !== "string" || computedUnmask === void 0 ? typeof val === "number" ? computedUnmask("" + val) : val : computedUnmask(val);
}
function fillWithMask(val) {
if (maskReplaced.length - val.length <= 0) {
return val;
}
return props.reverseFillMask === true && val.length > 0 ? maskReplaced.slice(0, -val.length) + val : val + maskReplaced.slice(val.length);
}
return {
innerValue,
hasMask,
moveCursorForPaste,
updateMaskValue,
onMaskedKeydown,
onMaskedClick
};
}
const useFormProps = {
name: String
};
function useFormInputNameAttr(props) {
return vue.computed(() => props.name || props.for);
}
function useFileFormDomProps(props, typeGuard) {
function getFormDomProps() {
const model = props.modelValue;
try {
const dt = "DataTransfer" in window ? new DataTransfer() : "ClipboardEvent" in window ? new ClipboardEvent("").clipboardData : void 0;
if (Object(model) === model) {
("length" in model ? Array.from(model) : [model]).forEach((file) => {
dt.items.add(file);
});
}
return {
files: dt.files
};
} catch (e) {
return {
files: void 0
};
}
}
return typeGuard === true ? vue.computed(() => {
if (props.type !== "file") {
return;
}
return getFormDomProps();
}) : vue.computed(getFormDomProps);
}
const isJapanese = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/;
const isChinese = /[\u4e00-\u9fff\u3400-\u4dbf\u{20000}-\u{2a6df}\u{2a700}-\u{2b73f}\u{2b740}-\u{2b81f}\u{2b820}-\u{2ceaf}\uf900-\ufaff\u3300-\u33ff\ufe30-\ufe4f\uf900-\ufaff\u{2f800}-\u{2fa1f}]/u;
const isKorean = /[\u3131-\u314e\u314f-\u3163\uac00-\ud7a3]/;
const isPlainText = /[a-z0-9_ -]$/i;
function useKeyComposition(onInput) {
return function onComposition(e) {
if (e.type === "compositionend" || e.type === "change") {
if (e.target.qComposing !== true) {
return;
}
e.target.qComposing = false;
onInput(e);
} else if (e.type === "compositionupdate" && e.target.qComposing !== true && typeof e.data === "string") {
const isComposing = client.is.firefox === true ? isPlainText.test(e.data) === false : isJapanese.test(e.data) === true || isChinese.test(e.data) === true || isKorean.test(e.data) === true;
if (isComposing === true) {
e.target.qComposing = true;
}
}
};
}
const QInput = createComponent({
name: "QInput",
inheritAttrs: false,
props: {
...useFieldProps,
...useMaskProps,
...useFormProps,
modelValue: { required: false },
shadowText: String,
type: {
type: String,
default: "text"
},
debounce: [String, Number],
autogrow: Boolean,
// makes a textarea
inputClass: [Array, String, Object],
inputStyle: [Array, String, Object]
},
emits: [
...useFieldEmits,
"paste",
"change",
"keydown",
"click",
"animationend"
],
setup(props, { emit: emit2, attrs }) {
const { proxy } = vue.getCurrentInstance();
const { $q } = proxy;
const temp = {};
let emitCachedValue = NaN, typedNumber, stopValueWatcher, emitTimer = null, emitValueFn;
const inputRef = vue.ref(null);
const nameProp = useFormInputNameAttr(props);
const {
innerValue,
hasMask,
moveCursorForPaste,
updateMaskValue,
onMaskedKeydown,
onMaskedClick
} = useMask(props, emit2, emitValue, inputRef);
const formDomProps = useFileFormDomProps(
props,
/* type guard */
true
);
const hasValue = vue.computed(() => fieldValueIsFilled(innerValue.value));
const onComposition = useKeyComposition(onInput);
const state = useFieldState();
const isTextarea = vue.computed(
() => props.type === "textarea" || props.autogrow === true
);
const isTypeText = vue.computed(
() => isTextarea.value === true || ["text", "search", "url", "tel", "password"].includes(props.type)
);
const onEvents = vue.computed(() => {
const evt = {
...state.splitAttrs.listeners.value,
onInput,
onPaste,
// Safari < 10.2 & UIWebView doesn't fire compositionend when
// switching focus before confirming composition choice
// this also fixes the issue where some browsers e.g. iOS Chrome
// fires "change" instead of "input" on autocomplete.
onChange,
onBlur: onFinishEditing,
onFocus: stop
};
evt.onCompositionstart = evt.onCompositionupdate = evt.onCompositionend = onComposition;
if (hasMask.value === true) {
evt.onKeydown = onMaskedKeydown;
evt.onClick = onMaskedClick;
}
if (props.autogrow === true) {
evt.onAnimationend = onAnimationend;
}
return evt;
});
const inputAttrs = vue.computed(() => {
const attrs2 = {
tabindex: 0,
"data-autofocus": props.autofocus === true || void 0,
rows: props.type === "textarea" ? 6 : void 0,
"aria-label": props.label,
name: nameProp.value,
...state.splitAttrs.attributes.value,
id: state.targetUid.value,
maxlength: props.maxlength,
disabled: props.disable === true,
readonly: props.readonly === true
};
if (isTextarea.value === false) {
attrs2.type = props.type;
}
if (props.autogrow === true) {
attrs2.rows = 1;
}
return attrs2;
});
vue.watch(() => props.type, () => {
if (inputRef.value) {
inputRef.value.value = props.modelValue;
}
});
vue.watch(() => props.modelValue, (v) => {
if (hasMask.value === true) {
if (stopValueWatcher === true) {
stopValueWatcher = false;
if (String(v) === emitCachedValue) {
return;
}
}
updateMaskValue(v);
} else if (innerValue.value !== v) {
innerValue.value = v;
if (props.type === "number" && temp.hasOwnProperty("value") === true) {
if (typedNumber === true) {
typedNumber = false;
} else {
delete temp.value;
}
}
}
props.autogrow === true && vue.nextTick(adjustHeight);
});
vue.watch(() => props.autogrow, (val) => {
if (val === true) {
vue.nextTick(adjustHeight);
} else if (inputRef.value !== null && attrs.rows > 0) {
inputRef.value.style.height = "auto";
}
});
vue.watch(() => props.dense, () => {
props.autogrow === true && vue.nextTick(adjustHeight);
});
function focus() {
addFocusFn(() => {
const el = document.activeElement;
if (inputRef.value !== null && inputRef.value !== el && (el === null || el.id !== state.targetUid.value)) {
inputRef.value.focus({ preventScroll: true });
}
});
}
function select() {
inputRef.value !== null && inputRef.value.select();
}
function onPaste(e) {
if (hasMask.value === true && props.reverseFillMask !== true) {
const inp = e.target;
moveCursorForPaste(inp, inp.selectionStart, inp.selectionEnd);
}
emit2("paste", e);
}
function onInput(e) {
if (!e || !e.target) {
return;
}
if (props.type === "file") {
emit2("update:modelValue", e.target.files);
return;
}
const val = e.target.value;
if (e.target.qComposing === true) {
temp.value = val;
return;
}
if (hasMask.value === true) {
updateMaskValue(val, false, e.inputType);
} else {
emitValue(val);
if (isTypeText.value === true && e.target === document.activeElement) {
const { selectionStart, selectionEnd } = e.target;
if (selectionStart !== void 0 && selectionEnd !== void 0) {
vue.nextTick(() => {
if (e.target === document.activeElement && val.indexOf(e.target.value) === 0) {
e.target.setSelectionRange(selectionStart, selectionEnd);
}
});
}
}
}
props.autogrow === true && adjustHeight();
}
function onAnimationend(e) {
emit2("animationend", e);
adjustHeight();
}
function emitValue(val, stopWatcher) {
emitValueFn = () => {
emitTimer = null;
if (props.type !== "number" && temp.hasOwnProperty("value") === true) {
delete temp.value;
}
if (props.modelValue !== val && emitCachedValue !== val) {
emitCachedValue = val;
stopWatcher === true && (stopValueWatcher = true);
emit2("update:modelValue", val);
vue.nextTick(() => {
emitCachedValue === val && (emitCachedValue = NaN);
});
}
emitValueFn = void 0;
};
if (props.type === "number") {
typedNumber = true;
temp.value = val;
}
if (props.debounce !== void 0) {
emitTimer !== null && clearTimeout(emitTimer);
temp.value = val;
emitTimer = setTimeout(emitValueFn, props.debounce);
} else {
emitValueFn();
}
}
function adjustHeight() {
requestAnimationFrame(() => {
const inp = inputRef.value;
if (inp !== null) {
const parentStyle = inp.parentNode.style;
const { scrollTop } = inp;
const { overflowY, maxHeight } = $q.platform.is.firefox === true ? {} : window.getComputedStyle(inp);
const changeOverflow = overflowY !== void 0 && overflowY !== "scroll";
changeOverflow === true && (inp.style.overflowY = "hidden");
parentStyle.marginBottom = inp.scrollHeight - 1 + "px";
inp.style.height = "1px";
inp.style.height = inp.scrollHeight + "px";
changeOverflow === true && (inp.style.overflowY = parseInt(maxHeight, 10) < inp.scrollHeight ? "auto" : "hidden");
parentStyle.marginBottom = "";
inp.scrollTop = scrollTop;
}
});
}
function onChange(e) {
onComposition(e);
if (emitTimer !== null) {
clearTimeout(emitTimer);
emitTimer = null;
}
emitValueFn !== void 0 && emitValueFn();
emit2("change", e.target.value);
}
function onFinishEditing(e) {
e !== void 0 && stop(e);
if (emitTimer !== null) {
clearTimeout(emitTimer);
emitTimer = null;
}
emitValueFn !== void 0 && emitValueFn();
typedNumber = false;
stopValueWatcher = false;
delete temp.value;
props.type !== "file" && setTimeout(() => {
if (inputRef.value !== null) {
inputRef.value.value = innerValue.value !== void 0 ? innerValue.value : "";
}
});
}
function getCurValue() {
return temp.hasOwnProperty("value") === true ? temp.value : innerValue.value !== void 0 ? innerValue.value : "";
}
vue.onBeforeUnmount(() => {
onFinishEditing();
});
vue.onMounted(() => {
props.autogrow === true && adjustHeight();
});
Object.assign(state, {
innerValue,
fieldClass: vue.computed(
() => `q-${isTextarea.value === true ? "textarea" : "input"}` + (props.autogrow === true ? " q-textarea--autogrow" : "")
),
hasShadow: vue.computed(
() => props.type !== "file" && typeof props.shadowText === "string" && props.shadowText.length > 0
),
inputRef,
emitValue,
hasValue,
floatingLabel: vue.computed(
() => hasValue.value === true && (props.type !== "number" || isNaN(innerValue.value) === false) || fieldValueIsFilled(props.displayValue)
),
getControl: () => {
return vue.h(isTextarea.value === true ? "textarea" : "input", {
ref: inputRef,
class: [
"q-field__native q-placeholder",
props.inputClass
],
style: props.inputStyle,
...inputAttrs.value,
...onEvents.value,
...props.type !== "file" ? { value: getCurValue() } : formDomProps.value
});
},
getShadowControl: () => {
return vue.h("div", {
class: "q-field__native q-field__shadow absolute-bottom no-pointer-events" + (isTextarea.value === true ? "" : " text-no-wrap")
}, [
vue.h("span", { class: "invisible" }, getCurValue()),
vue.h("span", props.shadowText)
]);
}
});
const renderFn = useField(state);
Object.assign(proxy, {
focus,
select,
getNativeElement: () => inputRef.value
// deprecated
});
injectProp(proxy, "nativeEl", () => inputRef.value);
return renderFn;
}
});
const QCard = createComponent({
name: "QCard",
props: {
...useDarkProps,
tag: {
type: String,
default: "div"
},
square: Boolean,
flat: Boolean,
bordered: Boolean
},
setup(props, { slots }) {
const { proxy: { $q } } = vue.getCurrentInstance();
const isDark = useDark(props, $q);
const classes = vue.computed(
() => "q-card" + (isDark.value === true ? " q-card--dark q-dark" : "") + (props.bordered === true ? " q-card--bordered" : "") + (props.square === true ? " q-card--square no-border-radius" : "") + (props.flat === true ? " q-card--flat no-shadow" : "")
);
return () => vue.h(props.tag, { class: classes.value }, hSlot(slots.default));
}
});
const getTrue = () => true;
function filterInvalidPath(path) {
return typeof path === "string" && path !== "" && path !== "/" && path !== "#/";
}
function normalizeExitPath(path) {
path.startsWith("#") === true && (path = path.substring(1));
path.startsWith("/") === false && (path = "/" + path);
path.endsWith("/") === true && (path = path.substring(0, path.length - 1));
return "#" + path;
}
function getShouldExitFn(cfg) {
if (cfg.backButtonExit === false) {
return () => false;
}
if (cfg.backButtonExit === "*") {
return getTrue;
}
const exitPaths = ["#/"];
Array.isArray(cfg.backButtonExit) === true && exitPaths.push(
...cfg.backButtonExit.filter(filterInvalidPath).map(normalizeExitPath)
);
return () => exitPaths.includes(window.location.hash);
}
const History = {
__history: [],
add: noop,
remove: noop,
install({ $q }) {
if (this.__installed === true) {
return;
}
const { cordova, capacitor } = client.is;
if (cordova !== true && capacitor !== true) {
return;
}
const qConf = $q.config[cordova === true ? "cordova" : "capacitor"];
if (qConf !== void 0 && qConf.backButton === false) {
return;
}
if (
// if we're on Capacitor mode
capacitor === true && (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0)
) {
return;
}
this.add = (entry) => {
if (entry.condition === void 0) {
entry.condition = getTrue;
}
this.__history.push(entry);
};
this.remove = (entry) => {
const index2 = this.__history.indexOf(entry);
if (index2 >= 0) {
this.__history.splice(index2, 1);
}
};
const shouldExit = getShouldExitFn(
Object.assign(
{ backButtonExit: true },
qConf
)
);
const backHandler = () => {
if (this.__history.length) {
const entry = this.__history[this.__history.length - 1];
if (entry.condition() === true) {
this.__history.pop();
entry.handler();
}
} else if (shouldExit() === true) {
navigator.app.exitApp();
} else {
window.history.back();
}
};
if (cordova === true) {
document.addEventListener("deviceready", () => {
document.addEventListener("backbutton", backHandler, false);
});
} else {
window.Capacitor.Plugins.App.addListener("backButton", backHandler);
}
}
};
function useHistory(showing, hide, hideOnRouteChange) {
let historyEntry;
function removeFromHistory() {
if (historyEntry !== void 0) {
History.remove(historyEntry);
historyEntry = void 0;
}
}
vue.onBeforeUnmount(() => {
showing.value === true && removeFromHistory();
});
return {
removeFromHistory,
addToHistory() {
historyEntry = {
condition: () => hideOnRouteChange.value === true,
handler: hide
};
History.add(historyEntry);
}
};
}
function useTimeout() {
let timer = null;
const vm = vue.getCurrentInstance();
function removeTimeout() {
if (timer !== null) {
clearTimeout(timer);
timer = null;
}
}
vue.onDeactivated(removeTimeout);
vue.onBeforeUnmount(removeTimeout);
return {
removeTimeout,
registerTimeout(fn, delay) {
removeTimeout();
if (vmIsDestroyed(vm) === false) {
timer = setTimeout(fn, delay);
}
}
};
}
function useTick() {
let tickFn;
const vm = vue.getCurrentInstance();
function removeTick() {
tickFn = void 0;
}
vue.onDeactivated(removeTick);
vue.onBeforeUnmount(removeTick);
return {
removeTick,
registerTick(fn) {
tickFn = fn;
vue.nextTick(() => {
if (tickFn === fn) {
vmIsDestroyed(vm) === false && tickFn();
tickFn = void 0;
}
});
}
};
}
const useModelToggleProps = {
modelValue: {
type: Boolean,
default: null
},
"onUpdate:modelValue": [Function, Array]
};
const useModelToggleEmits = [
"beforeShow",
"show",
"beforeHide",
"hide"
];
function useModelToggle({
showing,
canShow,
// optional
hideOnRouteChange,
// optional
handleShow,
// optional
handleHide,
// optional
processOnMount
// optional
}) {
const vm = vue.getCurrentInstance();
const { props, emit: emit2, proxy } = vm;
let payload;
function toggle(evt) {
if (showing.value === true) {
hide(evt);
} else {
show(evt);
}
}
function show(evt) {
if (props.disable === true || evt !== void 0 && evt.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) {
return;
}
const listener = props["onUpdate:modelValue"] !== void 0;
if (listener === true && true) {
emit2("update:modelValue", true);
payload = evt;
vue.nextTick(() => {
if (payload === evt) {
payload = void 0;
}
});
}
if (props.modelValue === null || listener === false || false) {
processShow(evt);
}
}
function processShow(evt) {
if (showing.value === true) {
return;
}
showing.value = true;
emit2("beforeShow", evt);
if (handleShow !== void 0) {
handleShow(evt);
} else {
emit2("show", evt);
}
}
function hide(evt) {
if (props.disable === true) {
return;
}
const listener = props["onUpdate:modelValue"] !== void 0;
if (listener === true && true) {
emit2("update:modelValue", false);
payload = evt;
vue.nextTick(() => {
if (payload === evt) {
payload = void 0;
}
});
}
if (props.modelValue === null || listener === false || false) {
processHide(evt);
}
}
function processHide(evt) {
if (showing.value === false) {
return;
}
showing.value = false;
emit2("beforeHide", evt);
if (handleHide !== void 0) {
handleHide(evt);
} else {
emit2("hide", evt);
}
}
function processModelChange(val) {
if (props.disable === true && val === true) {
if (props["onUpdate:modelValue"] !== void 0) {
emit2("update:modelValue", false);
}
} else if (val === true !== showing.value) {
const fn = val === true ? processShow : processHide;
fn(payload);
}
}
vue.watch(() => props.modelValue, processModelChange);
if (hideOnRouteChange !== void 0 && vmHasRouter(vm) === true) {
vue.watch(() => proxy.$route.fullPath, () => {
if (hideOnRouteChange.value === true && showing.value === true) {
hide();
}
});
}
processOnMount === true && vue.onMounted(() => {
processModelChange(props.modelValue);
});
const publicMethods = { show, hide, toggle };
Object.assign(proxy, publicMethods);
return publicMethods;
}
const useTransitionProps = {
transitionShow: {
type: String,
default: "fade"
},
transitionHide: {
type: String,
default: "fade"
},
transitionDuration: {
type: [String, Number],
default: 300
}
};
function useTransition(props, defaultShowFn = () => {
}, defaultHideFn = () => {
}) {
return {
transitionProps: vue.computed(() => {
const show = `q-transition--${props.transitionShow || defaultShowFn()}`;
const hide = `q-transition--${props.transitionHide || defaultHideFn()}`;
return {
appear: true,
enterFromClass: `${show}-enter-from`,
enterActiveClass: `${show}-enter-active`,
enterToClass: `${show}-enter-to`,
leaveFromClass: `${hide}-leave-from`,
leaveActiveClass: `${hide}-leave-active`,
leaveToClass: `${hide}-leave-to`
};
}),
transitionStyle: vue.computed(() => `--q-transition-duration: ${props.transitionDuration}ms`)
};
}
const globalConfig = {};
let globalConfigIsFrozen = false;
function freezeGlobalConfig() {
globalConfigIsFrozen = true;
}
let portalIndex = 1;
let target = document.body;
function createGlobalNode(id, portalType) {
const el = document.createElement("div");
el.id = portalType !== void 0 ? `q-portal--${portalType}--${portalIndex++}` : id;
if (globalConfig.globalNodes !== void 0) {
const cls = globalConfig.globalNodes.class;
if (cls !== void 0) {
el.className = cls;
}
}
target.appendChild(el);
return el;
}
function removeGlobalNode(el) {
el.remove();
}
const portalProxyList = [];
function isOnGlobalDialog(vm) {
vm = vm.parent;
while (vm !== void 0 && vm !== null) {
if (vm.type.name === "QGlobalDialog") {
return true;
}
if (vm.type.name === "QDialog" || vm.type.name === "QMenu") {
return false;
}
vm = vm.parent;
}
return false;
}
function usePortal(vm, innerRef, renderPortalContent, type) {
const portalIsActive = vue.ref(false);
const portalIsAccessible = vue.ref(false);
let portalEl = null;
const focusObj = {};
const onGlobalDialog = type === "dialog" && isOnGlobalDialog(vm);
function showPortal(isReady) {
if (isReady === true) {
removeFocusWaitFlag(focusObj);
portalIsAccessible.value = true;
return;
}
portalIsAccessible.value = false;
if (portalIsActive.value === false) {
if (onGlobalDialog === false && portalEl === null) {
portalEl = createGlobalNode(false, type);
}
portalIsActive.value = true;
portalProxyList.push(vm.proxy);
addFocusWaitFlag(focusObj);
}
}
function hidePortal(isReady) {
portalIsAccessible.value = false;
if (isReady !== true) {
return;
}
removeFocusWaitFlag(focusObj);
portalIsActive.value = false;
const index2 = portalProxyList.indexOf(vm.proxy);
if (index2 !== -1) {
portalProxyList.splice(index2, 1);
}
if (portalEl !== null) {
removeGlobalNode(portalEl);
portalEl = null;
}
}
vue.onUnmounted(() => {
hidePortal(true);
});
vm.proxy.__qPortal = true;
injectProp(vm.proxy, "contentEl", () => innerRef.value);
return {
showPortal,
hidePortal,
portalIsActive,
portalIsAccessible,
renderPortal: () => onGlobalDialog === true ? renderPortalContent() : portalIsActive.value === true ? [vue.h(vue.Teleport, { to: portalEl }, renderPortalContent())] : void 0
};
}
function getVerticalScrollPosition(scrollTarget) {
return scrollTarget === window ? window.pageYOffset || window.scrollY || document.body.scrollTop || 0 : scrollTarget.scrollTop;
}
function getHorizontalScrollPosition(scrollTarget) {
return scrollTarget === window ? window.pageXOffset || window.scrollX || document.body.scrollLeft || 0 : scrollTarget.scrollLeft;
}
function hasScrollbar(el, onY = true) {
if (!el || el.nodeType !== Node.ELEMENT_NODE) {
return false;
}
return onY ? el.scrollHeight > el.clientHeight && (el.classList.contains("scroll") || el.classList.contains("overflow-auto") || ["auto", "scroll"].includes(window.getComputedStyle(el)["overflow-y"])) : el.scrollWidth > el.clientWidth && (el.classList.contains("scroll") || el.classList.contains("overflow-auto") || ["auto", "scroll"].includes(window.getComputedStyle(el)["overflow-x"]));
}
let registered = 0, scrollPositionX, scrollPositionY, maxScrollTop, vpPendingUpdate = false, bodyLeft, bodyTop, href, closeTimer = null;
function onWheel(e) {
if (shouldPreventScroll(e)) {
stopAndPrevent(e);
}
}
function shouldPreventScroll(e) {
if (e.target === document.body || e.target.classList.contains("q-layout__backdrop")) {
return true;
}
const path = getEventPath(e), shift = e.shiftKey && !e.deltaX, scrollY = !shift && Math.abs(e.deltaX) <= Math.abs(e.deltaY), delta = shift || scrollY ? e.deltaY : e.deltaX;
for (let index2 = 0; index2 < path.length; index2++) {
const el = path[index2];
if (hasScrollbar(el, scrollY)) {
return scrollY ? delta < 0 && el.scrollTop === 0 ? true : delta > 0 && el.scrollTop + el.clientHeight === el.scrollHeight : delta < 0 && el.scrollLeft === 0 ? true : delta > 0 && el.scrollLeft + el.clientWidth === el.scrollWidth;
}
}
return true;
}
function onAppleScroll(e) {
if (e.target === document) {
document.scrollingElement.scrollTop = document.scrollingElement.scrollTop;
}
}
function onAppleResize(evt) {
if (vpPendingUpdate === true) {
return;
}
vpPendingUpdate = true;
requestAnimationFrame(() => {
vpPendingUpdate = false;
const { height } = evt.target, { clientHeight, scrollTop } = document.scrollingElement;
if (maxScrollTop === void 0 || height !== window.innerHeight) {
maxScrollTop = clientHeight - height;
document.scrollingElement.scrollTop = scrollTop;
}
if (scrollTop > maxScrollTop) {
document.scrollingElement.scrollTop -= Math.ceil((scrollTop - maxScrollTop) / 8);
}
});
}
function apply(action) {
const body = document.body, hasViewport = window.visualViewport !== void 0;
if (action === "add") {
const { overflowY, overflowX } = window.getComputedStyle(body);
scrollPositionX = getHorizontalScrollPosition(window);
scrollPositionY = getVerticalScrollPosition(window);
bodyLeft = body.style.left;
bodyTop = body.style.top;
href = window.location.href;
body.style.left = `-${scrollPositionX}px`;
body.style.top = `-${scrollPositionY}px`;
if (overflowX !== "hidden" && (overflowX === "scroll" || body.scrollWidth > window.innerWidth)) {
body.classList.add("q-body--force-scrollbar-x");
}
if (overflowY !== "hidden" && (overflowY === "scroll" || body.scrollHeight > window.innerHeight)) {
body.classList.add("q-body--force-scrollbar-y");
}
body.classList.add("q-body--prevent-scroll");
document.qScrollPrevented = true;
if (client.is.ios === true) {
if (hasViewport === true) {
window.scrollTo(0, 0);
window.visualViewport.addEventListener("resize", onAppleResize, listenOpts.passiveCapture);
window.visualViewport.addEventListener("scroll", onAppleResize, listenOpts.passiveCapture);
window.scrollTo(0, 0);
} else {
window.addEventListener("scroll", onAppleScroll, listenOpts.passiveCapture);
}
}
}
if (client.is.desktop === true && client.is.mac === true) {
window[`${action}EventListener`]("wheel", onWheel, listenOpts.notPassive);
}
if (action === "remove") {
if (client.is.ios === true) {
if (hasViewport === true) {
window.visualViewport.removeEventListener("resize", onAppleResize, listenOpts.passiveCapture);
window.visualViewport.removeEventListener("scroll", onAppleResize, listenOpts.passiveCapture);
} else {
window.removeEventListener("scroll", onAppleScroll, listenOpts.passiveCapture);
}
}
body.classList.remove("q-body--prevent-scroll");
body.classList.remove("q-body--force-scrollbar-x");
body.classList.remove("q-body--force-scrollbar-y");
document.qScrollPrevented = false;
body.style.left = bodyLeft;
body.style.top = bodyTop;
if (window.location.href === href) {
window.scrollTo(scrollPositionX, scrollPositionY);
}
maxScrollTop = void 0;
}
}
function preventScroll(state) {
let action = "add";
if (state === true) {
registered++;
if (closeTimer !== null) {
clearTimeout(closeTimer);
closeTimer = null;
return;
}
if (registered > 1) {
return;
}
} else {
if (registered === 0) {
return;
}
registered--;
if (registered > 0) {
return;
}
action = "remove";
if (client.is.ios === true && client.is.nativeMobile === true) {
closeTimer !== null && clearTimeout(closeTimer);
closeTimer = setTimeout(() => {
apply(action);
closeTimer = null;
}, 100);
return;
}
}
apply(action);
}
function usePreventScroll() {
let currentState;
return {
preventBodyScroll(state) {
if (state !== currentState && (currentState !== void 0 || state === true)) {
currentState = state;
preventScroll(state);
}
}
};
}
const handlers$1 = [];
let escDown;
function onKeydown(evt) {
escDown = evt.keyCode === 27;
}
function onBlur() {
if (escDown === true) {
escDown = false;
}
}
function onKeyup(evt) {
if (escDown === true) {
escDown = false;
if (isKeyCode(evt, 27) === true) {
handlers$1[handlers$1.length - 1](evt);
}
}
}
function update(action) {
window[action]("keydown", onKeydown);
window[action]("blur", onBlur);
window[action]("keyup", onKeyup);
escDown = false;
}
function addEscapeKey(fn) {
if (client.is.desktop === true) {
handlers$1.push(fn);
if (handlers$1.length === 1) {
update("addEventListener");
}
}
}
function removeEscapeKey(fn) {
const index2 = handlers$1.indexOf(fn);
if (index2 > -1) {
handlers$1.splice(index2, 1);
if (handlers$1.length === 0) {
update("removeEventListener");
}
}
}
const handlers = [];
function trigger(e) {
handlers[handlers.length - 1](e);
}
function addFocusout(fn) {
if (client.is.desktop === true) {
handlers.push(fn);
if (handlers.length === 1) {
document.body.addEventListener("focusin", trigger);
}
}
}
function removeFocusout(fn) {
const index2 = handlers.indexOf(fn);
if (index2 > -1) {
handlers.splice(index2, 1);
if (handlers.length === 0) {
document.body.removeEventListener("focusin", trigger);
}
}
}
let maximizedModals = 0;
const positionClass = {
standard: "fixed-full flex-center",
top: "fixed-top justify-center",
bottom: "fixed-bottom justify-center",
right: "fixed-right items-center",
left: "fixed-left items-center"
};
const defaultTransitions = {
standard: ["scale", "scale"],
top: ["slide-down", "slide-up"],
bottom: ["slide-up", "slide-down"],
right: ["slide-left", "slide-right"],
left: ["slide-right", "slide-left"]
};
const QDialog = createComponent({
name: "QDialog",
inheritAttrs: false,
props: {
...useModelToggleProps,
...useTransitionProps,
transitionShow: String,
// override useTransitionProps
transitionHide: String,
// override useTransitionProps
persistent: Boolean,
autoClose: Boolean,
allowFocusOutside: Boolean,
noEscDismiss: Boolean,
noBackdropDismiss: Boolean,
noRouteDismiss: Boolean,
noRefocus: Boolean,
noFocus: Boolean,
noShake: Boolean,
seamless: Boolean,
maximized: Boolean,
fullWidth: Boolean,
fullHeight: Boolean,
square: Boolean,
position: {
type: String,
default: "standard",
validator: (val) => val === "standard" || ["top", "bottom", "left", "right"].includes(val)
}
},
emits: [
...useModelToggleEmits,
"shake",
"click",
"escapeKey"
],
setup(props, { slots, emit: emit2, attrs }) {
const vm = vue.getCurrentInstance();
const innerRef = vue.ref(null);
const showing = vue.ref(false);
const animating = vue.ref(false);
let shakeTimeout = null, refocusTarget = null, isMaximized, avoidAutoClose;
const hideOnRouteChange = vue.computed(
() => props.persistent !== true && props.noRouteDismiss !== true && props.seamless !== true
);
const { preventBodyScroll } = usePreventScroll();
const { registerTimeout } = useTimeout();
const { registerTick, removeTick } = useTick();
const { transitionProps, transitionStyle } = useTransition(
props,
() => defaultTransitions[props.position][0],
() => defaultTransitions[props.position][1]
);
const { showPortal, hidePortal, portalIsAccessible, renderPortal } = usePortal(
vm,
innerRef,
renderPortalContent,
"dialog"
);
const { hide } = useModelToggle({
showing,
hideOnRouteChange,
handleShow,
handleHide,
processOnMount: true
});
const { addToHistory, removeFromHistory } = useHistory(showing, hide, hideOnRouteChange);
const classes = vue.computed(
() => `q-dialog__inner flex no-pointer-events q-dialog__inner--${props.maximized === true ? "maximized" : "minimized"} q-dialog__inner--${props.position} ${positionClass[props.position]}` + (animating.value === true ? " q-dialog__inner--animating" : "") + (props.fullWidth === true ? " q-dialog__inner--fullwidth" : "") + (props.fullHeight === true ? " q-dialog__inner--fullheight" : "") + (props.square === true ? " q-dialog__inner--square" : "")
);
const useBackdrop = vue.computed(() => showing.value === true && props.seamless !== true);
const onEvents = vue.computed(() => props.autoClose === true ? { onClick: onAutoClose } : {});
const rootClasses = vue.computed(() => [
`q-dialog fullscreen no-pointer-events q-dialog--${useBackdrop.value === true ? "modal" : "seamless"}`,
attrs.class
]);
vue.watch(() => props.maximized, (state) => {
showing.value === true && updateMaximized(state);
});
vue.watch(useBackdrop, (val) => {
preventBodyScroll(val);
if (val === true) {
addFocusout(onFocusChange);
addEscapeKey(onEscapeKey);
} else {
removeFocusout(onFocusChange);
removeEscapeKey(onEscapeKey);
}
});
function handleShow(evt) {
addToHistory();
refocusTarget = props.noRefocus === false && document.activeElement !== null ? document.activeElement : null;
updateMaximized(props.maximized);
showPortal();
animating.value = true;
if (props.noFocus !== true) {
document.activeElement !== null && document.activeElement.blur();
registerTick(focus);
} else {
removeTick();
}
registerTimeout(() => {
if (vm.proxy.$q.platform.is.ios === true) {
if (props.seamless !== true && document.activeElement) {
const { top, bottom } = document.activeElement.getBoundingClientRect(), { innerHeight } = window, height = window.visualViewport !== void 0 ? window.visualViewport.height : innerHeight;
if (top > 0 && bottom > height / 2) {
document.scrollingElement.scrollTop = Math.min(
document.scrollingElement.scrollHeight - height,
bottom >= innerHeight ? Infinity : Math.ceil(document.scrollingElement.scrollTop + bottom - height / 2)
);
}
document.activeElement.scrollIntoView();
}
avoidAutoClose = true;
innerRef.value.click();
avoidAutoClose = false;
}
showPortal(true);
animating.value = false;
emit2("show", evt);
}, props.transitionDuration);
}
function handleHide(evt) {
removeTick();
removeFromHistory();
cleanup(true);
animating.value = true;
hidePortal();
if (refocusTarget !== null) {
((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
refocusTarget = null;
}
registerTimeout(() => {
hidePortal(true);
animating.value = false;
emit2("hide", evt);
}, props.transitionDuration);
}
function focus(selector) {
addFocusFn(() => {
let node = innerRef.value;
if (node === null || node.contains(document.activeElement) === true) {
return;
}
node = (selector !== "" ? node.querySelector(selector) : null) || node.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]") || node.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]") || node.querySelector("[autofocus], [data-autofocus]") || node;
node.focus({ preventScroll: true });
});
}
function shake(focusTarget) {
if (focusTarget && typeof focusTarget.focus === "function") {
focusTarget.focus({ preventScroll: true });
} else {
focus();
}
emit2("shake");
const node = innerRef.value;
if (node !== null) {
node.classList.remove("q-animate--scale");
node.classList.add("q-animate--scale");
shakeTimeout !== null && clearTimeout(shakeTimeout);
shakeTimeout = setTimeout(() => {
shakeTimeout = null;
if (innerRef.value !== null) {
node.classList.remove("q-animate--scale");
focus();
}
}, 170);
}
}
function onEscapeKey() {
if (props.seamless !== true) {
if (props.persistent === true || props.noEscDismiss === true) {
props.maximized !== true && props.noShake !== true && shake();
} else {
emit2("escapeKey");
hide();
}
}
}
function cleanup(hiding) {
if (shakeTimeout !== null) {
clearTimeout(shakeTimeout);
shakeTimeout = null;
}
if (hiding === true || showing.value === true) {
updateMaximized(false);
if (props.seamless !== true) {
preventBodyScroll(false);
removeFocusout(onFocusChange);
removeEscapeKey(onEscapeKey);
}
}
if (hiding !== true) {
refocusTarget = null;
}
}
function updateMaximized(active) {
if (active === true) {
if (isMaximized !== true) {
maximizedModals < 1 && document.body.classList.add("q-body--dialog");
maximizedModals++;
isMaximized = true;
}
} else if (isMaximized === true) {
if (maximizedModals < 2) {
document.body.classList.remove("q-body--dialog");
}
maximizedModals--;
isMaximized = false;
}
}
function onAutoClose(e) {
if (avoidAutoClose !== true) {
hide(e);
emit2("click", e);
}
}
function onBackdropClick(e) {
if (props.persistent !== true && props.noBackdropDismiss !== true) {
hide(e);
} else if (props.noShake !== true) {
shake();
}
}
function onFocusChange(evt) {
if (props.allowFocusOutside !== true && portalIsAccessible.value === true && childHasFocus(innerRef.value, evt.target) !== true) {
focus('[tabindex]:not([tabindex="-1"])');
}
}
Object.assign(vm.proxy, {
// expose public methods
focus,
shake,
// private but needed by QSelect
__updateRefocusTarget(target2) {
refocusTarget = target2 || null;
}
});
vue.onBeforeUnmount(cleanup);
function renderPortalContent() {
return vue.h("div", {
role: "dialog",
"aria-modal": useBackdrop.value === true ? "true" : "false",
...attrs,
class: rootClasses.value
}, [
vue.h(vue.Transition, {
name: "q-transition--fade",
appear: true
}, () => useBackdrop.value === true ? vue.h("div", {
class: "q-dialog__backdrop fixed-full",
style: transitionStyle.value,
"aria-hidden": "true",
tabindex: -1,
onClick: onBackdropClick
}) : null),
vue.h(
vue.Transition,
transitionProps.value,
() => showing.value === true ? vue.h("div", {
ref: innerRef,
class: classes.value,
style: transitionStyle.value,
tabindex: -1,
...onEvents.value
}, hSlot(slots.default)) : null
)
]);
}
return renderPortal;
}
});
const modifiersAll = {
left: true,
right: true,
up: true,
down: true,
horizontal: true,
vertical: true
};
const directionList = Object.keys(modifiersAll);
modifiersAll.all = true;
function getModifierDirections(mod) {
const dir = {};
for (const direction of directionList) {
if (mod[direction] === true) {
dir[direction] = true;
}
}
if (Object.keys(dir).length === 0) {
return modifiersAll;
}
if (dir.horizontal === true) {
dir.left = dir.right = true;
} else if (dir.left === true && dir.right === true) {
dir.horizontal = true;
}
if (dir.vertical === true) {
dir.up = dir.down = true;
} else if (dir.up === true && dir.down === true) {
dir.vertical = true;
}
if (dir.horizontal === true && dir.vertical === true) {
dir.all = true;
}
return dir;
}
function shouldStart(evt, ctx) {
return ctx.event === void 0 && evt.target !== void 0 && evt.target.draggable !== true && typeof ctx.handler === "function" && evt.target.nodeName.toUpperCase() !== "INPUT" && (evt.qClonedBy === void 0 || evt.qClonedBy.indexOf(ctx.uid) === -1);
}
function clearSelection() {
if (window.getSelection !== void 0) {
const selection = window.getSelection();
if (selection.empty !== void 0) {
selection.empty();
} else if (selection.removeAllRanges !== void 0) {
selection.removeAllRanges();
Platform.is.mobile !== true && selection.addRange(document.createRange());
}
} else if (document.selection !== void 0) {
document.selection.empty();
}
}
function getChanges(evt, ctx, isFinal) {
const pos = position(evt);
let dir, distX = pos.left - ctx.event.x, distY = pos.top - ctx.event.y, absX = Math.abs(distX), absY = Math.abs(distY);
const direction = ctx.direction;
if (direction.horizontal === true && direction.vertical !== true) {
dir = distX < 0 ? "left" : "right";
} else if (direction.horizontal !== true && direction.vertical === true) {
dir = distY < 0 ? "up" : "down";
} else if (direction.up === true && distY < 0) {
dir = "up";
if (absX > absY) {
if (direction.left === true && distX < 0) {
dir = "left";
} else if (direction.right === true && distX > 0) {
dir = "right";
}
}
} else if (direction.down === true && distY > 0) {
dir = "down";
if (absX > absY) {
if (direction.left === true && distX < 0) {
dir = "left";
} else if (direction.right === true && distX > 0) {
dir = "right";
}
}
} else if (direction.left === true && distX < 0) {
dir = "left";
if (absX < absY) {
if (direction.up === true && distY < 0) {
dir = "up";
} else if (direction.down === true && distY > 0) {
dir = "down";
}
}
} else if (direction.right === true && distX > 0) {
dir = "right";
if (absX < absY) {
if (direction.up === true && distY < 0) {
dir = "up";
} else if (direction.down === true && distY > 0) {
dir = "down";
}
}
}
let synthetic = false;
if (dir === void 0 && isFinal === false) {
if (ctx.event.isFirst === true || ctx.event.lastDir === void 0) {
return {};
}
dir = ctx.event.lastDir;
synthetic = true;
if (dir === "left" || dir === "right") {
pos.left -= distX;
absX = 0;
distX = 0;
} else {
pos.top -= distY;
absY = 0;
distY = 0;
}
}
return {
synthetic,
payload: {
evt,
touch: ctx.event.mouse !== true,
mouse: ctx.event.mouse === true,
position: pos,
direction: dir,
isFirst: ctx.event.isFirst,
isFinal: isFinal === true,
duration: Date.now() - ctx.event.time,
distance: {
x: absX,
y: absY
},
offset: {
x: distX,
y: distY
},
delta: {
x: pos.left - ctx.event.lastX,
y: pos.top - ctx.event.lastY
}
}
};
}
let uid = 0;
const TouchPan = createDirective(
{
name: "touch-pan",
beforeMount(el, { value: value2, modifiers }) {
if (modifiers.mouse !== true && client.has.touch !== true) {
return;
}
function handleEvent(evt, mouseEvent) {
if (modifiers.mouse === true && mouseEvent === true) {
stopAndPrevent(evt);
} else {
modifiers.stop === true && stop(evt);
modifiers.prevent === true && prevent(evt);
}
}
const ctx = {
uid: "qvtp_" + uid++,
handler: value2,
modifiers,
direction: getModifierDirections(modifiers),
noop,
mouseStart(evt) {
if (shouldStart(evt, ctx) && leftClick(evt)) {
addEvt(ctx, "temp", [
[document, "mousemove", "move", "notPassiveCapture"],
[document, "mouseup", "end", "passiveCapture"]
]);
ctx.start(evt, true);
}
},
touchStart(evt) {
if (shouldStart(evt, ctx)) {
const target2 = evt.target;
addEvt(ctx, "temp", [
[target2, "touchmove", "move", "notPassiveCapture"],
[target2, "touchcancel", "end", "passiveCapture"],
[target2, "touchend", "end", "passiveCapture"]
]);
ctx.start(evt);
}
},
start(evt, mouseEvent) {
client.is.firefox === true && preventDraggable(el, true);
ctx.lastEvt = evt;
if (mouseEvent === true || modifiers.stop === true) {
if (ctx.direction.all !== true && (mouseEvent !== true || ctx.modifiers.mouseAllDir !== true && ctx.modifiers.mousealldir !== true)) {
const clone2 = evt.type.indexOf("mouse") > -1 ? new MouseEvent(evt.type, evt) : new TouchEvent(evt.type, evt);
evt.defaultPrevented === true && prevent(clone2);
evt.cancelBubble === true && stop(clone2);
Object.assign(clone2, {
qKeyEvent: evt.qKeyEvent,
qClickOutside: evt.qClickOutside,
qAnchorHandled: evt.qAnchorHandled,
qClonedBy: evt.qClonedBy === void 0 ? [ctx.uid] : evt.qClonedBy.concat(ctx.uid)
});
ctx.initialEvent = {
target: evt.target,
event: clone2
};
}
stop(evt);
}
const { left, top } = position(evt);
ctx.event = {
x: left,
y: top,
time: Date.now(),
mouse: mouseEvent === true,
detected: false,
isFirst: true,
isFinal: false,
lastX: left,
lastY: top
};
},
move(evt) {
if (ctx.event === void 0) {
return;
}
const pos = position(evt), distX = pos.left - ctx.event.x, distY = pos.top - ctx.event.y;
if (distX === 0 && distY === 0) {
return;
}
ctx.lastEvt = evt;
const isMouseEvt = ctx.event.mouse === true;
const start = () => {
handleEvent(evt, isMouseEvt);
let cursor;
if (modifiers.preserveCursor !== true && modifiers.preservecursor !== true) {
cursor = document.documentElement.style.cursor || "";
document.documentElement.style.cursor = "grabbing";
}
isMouseEvt === true && document.body.classList.add("no-pointer-events--children");
document.body.classList.add("non-selectable");
clearSelection();
ctx.styleCleanup = (withDelayedFn) => {
ctx.styleCleanup = void 0;
if (cursor !== void 0) {
document.documentElement.style.cursor = cursor;
}
document.body.classList.remove("non-selectable");
if (isMouseEvt === true) {
const remove = () => {
document.body.classList.remove("no-pointer-events--children");
};
if (withDelayedFn !== void 0) {
setTimeout(() => {
remove();
withDelayedFn();
}, 50);
} else {
remove();
}
} else if (withDelayedFn !== void 0) {
withDelayedFn();
}
};
};
if (ctx.event.detected === true) {
ctx.event.isFirst !== true && handleEvent(evt, ctx.event.mouse);
const { payload, synthetic } = getChanges(evt, ctx, false);
if (payload !== void 0) {
if (ctx.handler(payload) === false) {
ctx.end(evt);
} else {
if (ctx.styleCleanup === void 0 && ctx.event.isFirst === true) {
start();
}
ctx.event.lastX = payload.position.left;
ctx.event.lastY = payload.position.top;
ctx.event.lastDir = synthetic === true ? void 0 : payload.direction;
ctx.event.isFirst = false;
}
}
return;
}
if (ctx.direction.all === true || isMouseEvt === true && (ctx.modifiers.mouseAllDir === true || ctx.modifiers.mousealldir === true)) {
start();
ctx.event.detected = true;
ctx.move(evt);
return;
}
const absX = Math.abs(distX), absY = Math.abs(distY);
if (absX !== absY) {
if (ctx.direction.horizontal === true && absX > absY || ctx.direction.vertical === true && absX < absY || ctx.direction.up === true && absX < absY && distY < 0 || ctx.direction.down === true && absX < absY && distY > 0 || ctx.direction.left === true && absX > absY && distX < 0 || ctx.direction.right === true && absX > absY && distX > 0) {
ctx.event.detected = true;
ctx.move(evt);
} else {
ctx.end(evt, true);
}
}
},
end(evt, abort) {
if (ctx.event === void 0) {
return;
}
cleanEvt(ctx, "temp");
client.is.firefox === true && preventDraggable(el, false);
if (abort === true) {
ctx.styleCleanup !== void 0 && ctx.styleCleanup();
if (ctx.event.detected !== true && ctx.initialEvent !== void 0) {
ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event);
}
} else if (ctx.event.detected === true) {
ctx.event.isFirst === true && ctx.handler(getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx).payload);
const { payload } = getChanges(evt === void 0 ? ctx.lastEvt : evt, ctx, true);
const fn = () => {
ctx.handler(payload);
};
if (ctx.styleCleanup !== void 0) {
ctx.styleCleanup(fn);
} else {
fn();
}
}
ctx.event = void 0;
ctx.initialEvent = void 0;
ctx.lastEvt = void 0;
}
};
el.__qtouchpan = ctx;
if (modifiers.mouse === true) {
const capture = modifiers.mouseCapture === true || modifiers.mousecapture === true ? "Capture" : "";
addEvt(ctx, "main", [
[el, "mousedown", "mouseStart", `passive${capture}`]
]);
}
client.has.touch === true && addEvt(ctx, "main", [
[el, "touchstart", "touchStart", `passive${modifiers.capture === true ? "Capture" : ""}`],
[el, "touchmove", "noop", "notPassiveCapture"]
// cannot be passive (ex: iOS scroll)
]);
},
updated(el, bindings) {
const ctx = el.__qtouchpan;
if (ctx !== void 0) {
if (bindings.oldValue !== bindings.value) {
typeof value !== "function" && ctx.end();
ctx.handler = bindings.value;
}
ctx.direction = getModifierDirections(bindings.modifiers);
}
},
beforeUnmount(el) {
const ctx = el.__qtouchpan;
if (ctx !== void 0) {
ctx.event !== void 0 && ctx.end();
cleanEvt(ctx, "main");
cleanEvt(ctx, "temp");
client.is.firefox === true && preventDraggable(el, false);
ctx.styleCleanup !== void 0 && ctx.styleCleanup();
delete el.__qtouchpan;
}
}
}
);
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function getAugmentedNamespace(n) {
if (n.__esModule)
return n;
var f = n.default;
if (typeof f == "function") {
var a2 = function a3() {
if (this instanceof a3) {
var args = [null];
args.push.apply(args, arguments);
var Ctor = Function.bind.apply(f, args);
return new Ctor();
}
return f.apply(this, arguments);
};
a2.prototype = f.prototype;
} else
a2 = {};
Object.defineProperty(a2, "__esModule", { value: true });
Object.keys(n).forEach(function(k) {
var d = Object.getOwnPropertyDescriptor(n, k);
Object.defineProperty(a2, k, d.get ? d : {
enumerable: true,
get: function() {
return n[k];
}
});
});
return a2;
}
const __viteBrowserExternal = {};
const __viteBrowserExternal$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: __viteBrowserExternal
}, Symbol.toStringTag, { value: "Module" }));
const require$$0 = /* @__PURE__ */ getAugmentedNamespace(__viteBrowserExternal$1);
var queueMicrotask = {};
queueMicrotask.test = function() {
return typeof commonjsGlobal.queueMicrotask === "function";
};
queueMicrotask.install = function(func) {
return function() {
commonjsGlobal.queueMicrotask(func);
};
};
var mutation = {};
var Mutation = commonjsGlobal.MutationObserver || commonjsGlobal.WebKitMutationObserver;
mutation.test = function() {
return Mutation;
};
mutation.install = function(handle) {
var called = 0;
var observer = new Mutation(handle);
var element = commonjsGlobal.document.createTextNode("");
observer.observe(element, {
characterData: true
});
return function() {
element.data = called = ++called % 2;
};
};
var messageChannel = {};
messageChannel.test = function() {
if (commonjsGlobal.setImmediate) {
return false;
}
return typeof commonjsGlobal.MessageChannel !== "undefined";
};
messageChannel.install = function(func) {
var channel = new commonjsGlobal.MessageChannel();
channel.port1.onmessage = func;
return function() {
channel.port2.postMessage(0);
};
};
var stateChange = {};
stateChange.test = function() {
return "document" in commonjsGlobal && "onreadystatechange" in commonjsGlobal.document.createElement("script");
};
stateChange.install = function(handle) {
return function() {
var scriptEl = commonjsGlobal.document.createElement("script");
scriptEl.onreadystatechange = function() {
handle();
scriptEl.onreadystatechange = null;
scriptEl.parentNode.removeChild(scriptEl);
scriptEl = null;
};
commonjsGlobal.document.documentElement.appendChild(scriptEl);
return handle;
};
};
var timeout = {};
timeout.test = function() {
return true;
};
timeout.install = function(t) {
return function() {
setTimeout(t, 0);
};
};
var types = [
require$$0,
queueMicrotask,
mutation,
messageChannel,
stateChange,
timeout
];
var draining;
var currentQueue;
var queueIndex = -1;
var queue$1 = [];
var scheduled = false;
function cleanUpNextTick() {
if (!draining || !currentQueue) {
return;
}
draining = false;
if (currentQueue.length) {
queue$1 = currentQueue.concat(queue$1);
} else {
queueIndex = -1;
}
if (queue$1.length) {
nextTick();
}
}
function nextTick() {
if (draining) {
return;
}
scheduled = false;
draining = true;
var len2 = queue$1.length;
var timeout2 = setTimeout(cleanUpNextTick);
while (len2) {
currentQueue = queue$1;
queue$1 = [];
while (currentQueue && ++queueIndex < len2) {
currentQueue[queueIndex].run();
}
queueIndex = -1;
len2 = queue$1.length;
}
currentQueue = null;
queueIndex = -1;
draining = false;
clearTimeout(timeout2);
}
var scheduleDrain;
var i$1 = -1;
var len = types.length;
while (++i$1 < len) {
if (types[i$1] && types[i$1].test && types[i$1].test()) {
scheduleDrain = types[i$1].install(nextTick);
break;
}
}
function Item(fun, array) {
this.fun = fun;
this.array = array;
}
Item.prototype.run = function() {
var fun = this.fun;
var array = this.array;
switch (array.length) {
case 0:
return fun();
case 1:
return fun(array[0]);
case 2:
return fun(array[0], array[1]);
case 3:
return fun(array[0], array[1], array[2]);
default:
return fun.apply(null, array);
}
};
var lib = immediate;
function immediate(task) {
var args = new Array(arguments.length - 1);
if (arguments.length > 1) {
for (var i = 1; i < arguments.length; i++) {
args[i - 1] = arguments[i];
}
}
queue$1.push(new Item(task, args));
if (!scheduled && !draining) {
scheduled = true;
scheduleDrain();
}
}
var sparkMd5Exports = {};
var sparkMd5 = {
get exports() {
return sparkMd5Exports;
},
set exports(v) {
sparkMd5Exports = v;
}
};
(function(module, exports) {
(function(factory) {
{
module.exports = factory();
}
})(function(undefined$1) {
var hex_chr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
function md5cycle(x, k) {
var a2 = x[0], b = x[1], c = x[2], d = x[3];
a2 += (b & c | ~b & d) + k[0] - 680876936 | 0;
a2 = (a2 << 7 | a2 >>> 25) + b | 0;
d += (a2 & b | ~a2 & c) + k[1] - 389564586 | 0;
d = (d << 12 | d >>> 20) + a2 | 0;
c += (d & a2 | ~d & b) + k[2] + 606105819 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a2) + k[3] - 1044525330 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a2 += (b & c | ~b & d) + k[4] - 176418897 | 0;
a2 = (a2 << 7 | a2 >>> 25) + b | 0;
d += (a2 & b | ~a2 & c) + k[5] + 1200080426 | 0;
d = (d << 12 | d >>> 20) + a2 | 0;
c += (d & a2 | ~d & b) + k[6] - 1473231341 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a2) + k[7] - 45705983 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a2 += (b & c | ~b & d) + k[8] + 1770035416 | 0;
a2 = (a2 << 7 | a2 >>> 25) + b | 0;
d += (a2 & b | ~a2 & c) + k[9] - 1958414417 | 0;
d = (d << 12 | d >>> 20) + a2 | 0;
c += (d & a2 | ~d & b) + k[10] - 42063 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a2) + k[11] - 1990404162 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a2 += (b & c | ~b & d) + k[12] + 1804603682 | 0;
a2 = (a2 << 7 | a2 >>> 25) + b | 0;
d += (a2 & b | ~a2 & c) + k[13] - 40341101 | 0;
d = (d << 12 | d >>> 20) + a2 | 0;
c += (d & a2 | ~d & b) + k[14] - 1502002290 | 0;
c = (c << 17 | c >>> 15) + d | 0;
b += (c & d | ~c & a2) + k[15] + 1236535329 | 0;
b = (b << 22 | b >>> 10) + c | 0;
a2 += (b & d | c & ~d) + k[1] - 165796510 | 0;
a2 = (a2 << 5 | a2 >>> 27) + b | 0;
d += (a2 & c | b & ~c) + k[6] - 1069501632 | 0;
d = (d << 9 | d >>> 23) + a2 | 0;
c += (d & b | a2 & ~b) + k[11] + 643717713 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a2 | d & ~a2) + k[0] - 373897302 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a2 += (b & d | c & ~d) + k[5] - 701558691 | 0;
a2 = (a2 << 5 | a2 >>> 27) + b | 0;
d += (a2 & c | b & ~c) + k[10] + 38016083 | 0;
d = (d << 9 | d >>> 23) + a2 | 0;
c += (d & b | a2 & ~b) + k[15] - 660478335 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a2 | d & ~a2) + k[4] - 405537848 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a2 += (b & d | c & ~d) + k[9] + 568446438 | 0;
a2 = (a2 << 5 | a2 >>> 27) + b | 0;
d += (a2 & c | b & ~c) + k[14] - 1019803690 | 0;
d = (d << 9 | d >>> 23) + a2 | 0;
c += (d & b | a2 & ~b) + k[3] - 187363961 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a2 | d & ~a2) + k[8] + 1163531501 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a2 += (b & d | c & ~d) + k[13] - 1444681467 | 0;
a2 = (a2 << 5 | a2 >>> 27) + b | 0;
d += (a2 & c | b & ~c) + k[2] - 51403784 | 0;
d = (d << 9 | d >>> 23) + a2 | 0;
c += (d & b | a2 & ~b) + k[7] + 1735328473 | 0;
c = (c << 14 | c >>> 18) + d | 0;
b += (c & a2 | d & ~a2) + k[12] - 1926607734 | 0;
b = (b << 20 | b >>> 12) + c | 0;
a2 += (b ^ c ^ d) + k[5] - 378558 | 0;
a2 = (a2 << 4 | a2 >>> 28) + b | 0;
d += (a2 ^ b ^ c) + k[8] - 2022574463 | 0;
d = (d << 11 | d >>> 21) + a2 | 0;
c += (d ^ a2 ^ b) + k[11] + 1839030562 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a2) + k[14] - 35309556 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a2 += (b ^ c ^ d) + k[1] - 1530992060 | 0;
a2 = (a2 << 4 | a2 >>> 28) + b | 0;
d += (a2 ^ b ^ c) + k[4] + 1272893353 | 0;
d = (d << 11 | d >>> 21) + a2 | 0;
c += (d ^ a2 ^ b) + k[7] - 155497632 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a2) + k[10] - 1094730640 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a2 += (b ^ c ^ d) + k[13] + 681279174 | 0;
a2 = (a2 << 4 | a2 >>> 28) + b | 0;
d += (a2 ^ b ^ c) + k[0] - 358537222 | 0;
d = (d << 11 | d >>> 21) + a2 | 0;
c += (d ^ a2 ^ b) + k[3] - 722521979 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a2) + k[6] + 76029189 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a2 += (b ^ c ^ d) + k[9] - 640364487 | 0;
a2 = (a2 << 4 | a2 >>> 28) + b | 0;
d += (a2 ^ b ^ c) + k[12] - 421815835 | 0;
d = (d << 11 | d >>> 21) + a2 | 0;
c += (d ^ a2 ^ b) + k[15] + 530742520 | 0;
c = (c << 16 | c >>> 16) + d | 0;
b += (c ^ d ^ a2) + k[2] - 995338651 | 0;
b = (b << 23 | b >>> 9) + c | 0;
a2 += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
a2 = (a2 << 6 | a2 >>> 26) + b | 0;
d += (b ^ (a2 | ~c)) + k[7] + 1126891415 | 0;
d = (d << 10 | d >>> 22) + a2 | 0;
c += (a2 ^ (d | ~b)) + k[14] - 1416354905 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a2)) + k[5] - 57434055 | 0;
b = (b << 21 | b >>> 11) + c | 0;
a2 += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
a2 = (a2 << 6 | a2 >>> 26) + b | 0;
d += (b ^ (a2 | ~c)) + k[3] - 1894986606 | 0;
d = (d << 10 | d >>> 22) + a2 | 0;
c += (a2 ^ (d | ~b)) + k[10] - 1051523 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a2)) + k[1] - 2054922799 | 0;
b = (b << 21 | b >>> 11) + c | 0;
a2 += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
a2 = (a2 << 6 | a2 >>> 26) + b | 0;
d += (b ^ (a2 | ~c)) + k[15] - 30611744 | 0;
d = (d << 10 | d >>> 22) + a2 | 0;
c += (a2 ^ (d | ~b)) + k[6] - 1560198380 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a2)) + k[13] + 1309151649 | 0;
b = (b << 21 | b >>> 11) + c | 0;
a2 += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
a2 = (a2 << 6 | a2 >>> 26) + b | 0;
d += (b ^ (a2 | ~c)) + k[11] - 1120210379 | 0;
d = (d << 10 | d >>> 22) + a2 | 0;
c += (a2 ^ (d | ~b)) + k[2] + 718787259 | 0;
c = (c << 15 | c >>> 17) + d | 0;
b += (d ^ (c | ~a2)) + k[9] - 343485551 | 0;
b = (b << 21 | b >>> 11) + c | 0;
x[0] = a2 + x[0] | 0;
x[1] = b + x[1] | 0;
x[2] = c + x[2] | 0;
x[3] = d + x[3] | 0;
}
function md5blk(s) {
var md5blks = [], i;
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
}
return md5blks;
}
function md5blk_array(a2) {
var md5blks = [], i;
for (i = 0; i < 64; i += 4) {
md5blks[i >> 2] = a2[i] + (a2[i + 1] << 8) + (a2[i + 2] << 16) + (a2[i + 3] << 24);
}
return md5blks;
}
function md51(s) {
var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk(s.substring(i - 64, i)));
}
s = s.substring(i - 64);
length = s.length;
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);
}
tail[i >> 2] |= 128 << (i % 4 << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
tmp = n * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(state, tail);
return state;
}
function md51_array(a2) {
var n = a2.length, state = [1732584193, -271733879, -1732584194, 271733878], i, length, tail, tmp, lo, hi;
for (i = 64; i <= n; i += 64) {
md5cycle(state, md5blk_array(a2.subarray(i - 64, i)));
}
a2 = i - 64 < n ? a2.subarray(i - 64) : new Uint8Array(0);
length = a2.length;
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= a2[i] << (i % 4 << 3);
}
tail[i >> 2] |= 128 << (i % 4 << 3);
if (i > 55) {
md5cycle(state, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
tmp = n * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(state, tail);
return state;
}
function rhex(n) {
var s = "", j;
for (j = 0; j < 4; j += 1) {
s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];
}
return s;
}
function hex2(x) {
var i;
for (i = 0; i < x.length; i += 1) {
x[i] = rhex(x[i]);
}
return x.join("");
}
if (hex2(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592")
;
if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) {
(function() {
function clamp(val, length) {
val = val | 0 || 0;
if (val < 0) {
return Math.max(val + length, 0);
}
return Math.min(val, length);
}
ArrayBuffer.prototype.slice = function(from, to) {
var length = this.byteLength, begin = clamp(from, length), end = length, num, target2, targetArray, sourceArray;
if (to !== undefined$1) {
end = clamp(to, length);
}
if (begin > end) {
return new ArrayBuffer(0);
}
num = end - begin;
target2 = new ArrayBuffer(num);
targetArray = new Uint8Array(target2);
sourceArray = new Uint8Array(this, begin, num);
targetArray.set(sourceArray);
return target2;
};
})();
}
function toUtf8(str) {
if (/[\u0080-\uFFFF]/.test(str)) {
str = unescape(encodeURIComponent(str));
}
return str;
}
function utf8Str2ArrayBuffer(str, returnUInt8Array) {
var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i;
for (i = 0; i < length; i += 1) {
arr[i] = str.charCodeAt(i);
}
return returnUInt8Array ? arr : buff;
}
function arrayBuffer2Utf8Str(buff) {
return String.fromCharCode.apply(null, new Uint8Array(buff));
}
function concatenateArrayBuffers(first, second, returnUInt8Array) {
var result = new Uint8Array(first.byteLength + second.byteLength);
result.set(new Uint8Array(first));
result.set(new Uint8Array(second), first.byteLength);
return returnUInt8Array ? result : result.buffer;
}
function hexToBinaryString(hex3) {
var bytes = [], length = hex3.length, x;
for (x = 0; x < length - 1; x += 2) {
bytes.push(parseInt(hex3.substr(x, 2), 16));
}
return String.fromCharCode.apply(String, bytes);
}
function SparkMD5() {
this.reset();
}
SparkMD5.prototype.append = function(str) {
this.appendBinary(toUtf8(str));
return this;
};
SparkMD5.prototype.appendBinary = function(contents) {
this._buff += contents;
this._length += contents.length;
var length = this._buff.length, i;
for (i = 64; i <= length; i += 64) {
md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));
}
this._buff = this._buff.substring(i - 64);
return this;
};
SparkMD5.prototype.end = function(raw) {
var buff = this._buff, length = buff.length, i, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret;
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);
}
this._finish(tail, length);
ret = hex2(this._hash);
if (raw) {
ret = hexToBinaryString(ret);
}
this.reset();
return ret;
};
SparkMD5.prototype.reset = function() {
this._buff = "";
this._length = 0;
this._hash = [1732584193, -271733879, -1732584194, 271733878];
return this;
};
SparkMD5.prototype.getState = function() {
return {
buff: this._buff,
length: this._length,
hash: this._hash.slice()
};
};
SparkMD5.prototype.setState = function(state) {
this._buff = state.buff;
this._length = state.length;
this._hash = state.hash;
return this;
};
SparkMD5.prototype.destroy = function() {
delete this._hash;
delete this._buff;
delete this._length;
};
SparkMD5.prototype._finish = function(tail, length) {
var i = length, tmp, lo, hi;
tail[i >> 2] |= 128 << (i % 4 << 3);
if (i > 55) {
md5cycle(this._hash, tail);
for (i = 0; i < 16; i += 1) {
tail[i] = 0;
}
}
tmp = this._length * 8;
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
lo = parseInt(tmp[2], 16);
hi = parseInt(tmp[1], 16) || 0;
tail[14] = lo;
tail[15] = hi;
md5cycle(this._hash, tail);
};
SparkMD5.hash = function(str, raw) {
return SparkMD5.hashBinary(toUtf8(str), raw);
};
SparkMD5.hashBinary = function(content, raw) {
var hash = md51(content), ret = hex2(hash);
return raw ? hexToBinaryString(ret) : ret;
};
SparkMD5.ArrayBuffer = function() {
this.reset();
};
SparkMD5.ArrayBuffer.prototype.append = function(arr) {
var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i;
this._length += arr.byteLength;
for (i = 64; i <= length; i += 64) {
md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));
}
this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);
return this;
};
SparkMD5.ArrayBuffer.prototype.end = function(raw) {
var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i, ret;
for (i = 0; i < length; i += 1) {
tail[i >> 2] |= buff[i] << (i % 4 << 3);
}
this._finish(tail, length);
ret = hex2(this._hash);
if (raw) {
ret = hexToBinaryString(ret);
}
this.reset();
return ret;
};
SparkMD5.ArrayBuffer.prototype.reset = function() {
this._buff = new Uint8Array(0);
this._length = 0;
this._hash = [1732584193, -271733879, -1732584194, 271733878];
return this;
};
SparkMD5.ArrayBuffer.prototype.getState = function() {
var state = SparkMD5.prototype.getState.call(this);
state.buff = arrayBuffer2Utf8Str(state.buff);
return state;
};
SparkMD5.ArrayBuffer.prototype.setState = function(state) {
state.buff = utf8Str2ArrayBuffer(state.buff, true);
return SparkMD5.prototype.setState.call(this, state);
};
SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;
SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;
SparkMD5.ArrayBuffer.hash = function(arr, raw) {
var hash = md51_array(new Uint8Array(arr)), ret = hex2(hash);
return raw ? hexToBinaryString(ret) : ret;
};
return SparkMD5;
});
})(sparkMd5);
const Md5 = sparkMd5Exports;
var getRandomValues;
var rnds8 = new Uint8Array(16);
function rng() {
if (!getRandomValues) {
getRandomValues = typeof crypto !== "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== "undefined" && typeof msCrypto.getRandomValues === "function" && msCrypto.getRandomValues.bind(msCrypto);
if (!getRandomValues) {
throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
}
}
return getRandomValues(rnds8);
}
const REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
function validate$1(uuid2) {
return typeof uuid2 === "string" && REGEX.test(uuid2);
}
var byteToHex = [];
for (var i = 0; i < 256; ++i) {
byteToHex.push((i + 256).toString(16).substr(1));
}
function stringify$2(arr) {
var offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
var uuid2 = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
if (!validate$1(uuid2)) {
throw TypeError("Stringified UUID is invalid");
}
return uuid2;
}
function v4(options, buf2, offset) {
options = options || {};
var rnds = options.random || (options.rng || rng)();
rnds[6] = rnds[6] & 15 | 64;
rnds[8] = rnds[8] & 63 | 128;
if (buf2) {
offset = offset || 0;
for (var i = 0; i < 16; ++i) {
buf2[offset + i] = rnds[i];
}
return buf2;
}
return stringify$2(rnds);
}
var vuvuzela = {};
vuvuzela.stringify = function stringify(input) {
var queue2 = [];
queue2.push({ obj: input });
var res = "";
var next, obj, prefix, val, i, arrayPrefix, keys2, k, key, value2, objPrefix;
while (next = queue2.pop()) {
obj = next.obj;
prefix = next.prefix || "";
val = next.val || "";
res += prefix;
if (val) {
res += val;
} else if (typeof obj !== "object") {
res += typeof obj === "undefined" ? null : JSON.stringify(obj);
} else if (obj === null) {
res += "null";
} else if (Array.isArray(obj)) {
queue2.push({ val: "]" });
for (i = obj.length - 1; i >= 0; i--) {
arrayPrefix = i === 0 ? "" : ",";
queue2.push({ obj: obj[i], prefix: arrayPrefix });
}
queue2.push({ val: "[" });
} else {
keys2 = [];
for (k in obj) {
if (obj.hasOwnProperty(k)) {
keys2.push(k);
}
}
queue2.push({ val: "}" });
for (i = keys2.length - 1; i >= 0; i--) {
key = keys2[i];
value2 = obj[key];
objPrefix = i > 0 ? "," : "";
objPrefix += JSON.stringify(key) + ":";
queue2.push({ obj: value2, prefix: objPrefix });
}
queue2.push({ val: "{" });
}
}
return res;
};
function pop$2(obj, stack, metaStack) {
var lastMetaElement = metaStack[metaStack.length - 1];
if (obj === lastMetaElement.element) {
metaStack.pop();
lastMetaElement = metaStack[metaStack.length - 1];
}
var element = lastMetaElement.element;
var lastElementIndex = lastMetaElement.index;
if (Array.isArray(element)) {
element.push(obj);
} else if (lastElementIndex === stack.length - 2) {
var key = stack.pop();
element[key] = obj;
} else {
stack.push(obj);
}
}
vuvuzela.parse = function(str) {
var stack = [];
var metaStack = [];
var i = 0;
var collationIndex2, parsedNum, numChar;
var parsedString, lastCh, numConsecutiveSlashes, ch;
var arrayElement, objElement;
while (true) {
collationIndex2 = str[i++];
if (collationIndex2 === "}" || collationIndex2 === "]" || typeof collationIndex2 === "undefined") {
if (stack.length === 1) {
return stack.pop();
} else {
pop$2(stack.pop(), stack, metaStack);
continue;
}
}
switch (collationIndex2) {
case " ":
case " ":
case "\n":
case ":":
case ",":
break;
case "n":
i += 3;
pop$2(null, stack, metaStack);
break;
case "t":
i += 3;
pop$2(true, stack, metaStack);
break;
case "f":
i += 4;
pop$2(false, stack, metaStack);
break;
case "0":
case "1":
case "2":
case "3":
case "4":
case "5":
case "6":
case "7":
case "8":
case "9":
case "-":
parsedNum = "";
i--;
while (true) {
numChar = str[i++];
if (/[\d\.\-e\+]/.test(numChar)) {
parsedNum += numChar;
} else {
i--;
break;
}
}
pop$2(parseFloat(parsedNum), stack, metaStack);
break;
case '"':
parsedString = "";
lastCh = void 0;
numConsecutiveSlashes = 0;
while (true) {
ch = str[i++];
if (ch !== '"' || lastCh === "\\" && numConsecutiveSlashes % 2 === 1) {
parsedString += ch;
lastCh = ch;
if (lastCh === "\\") {
numConsecutiveSlashes++;
} else {
numConsecutiveSlashes = 0;
}
} else {
break;
}
}
pop$2(JSON.parse('"' + parsedString + '"'), stack, metaStack);
break;
case "[":
arrayElement = { element: [], index: stack.length };
stack.push(arrayElement.element);
metaStack.push(arrayElement);
break;
case "{":
objElement = { element: {}, index: stack.length };
stack.push(objElement.element);
metaStack.push(objElement);
break;
default:
throw new Error(
"unexpectedly reached end of input: " + collationIndex2
);
}
}
};
var eventsExports = {};
var events = {
get exports() {
return eventsExports;
},
set exports(v) {
eventsExports = v;
}
};
var R = typeof Reflect === "object" ? Reflect : null;
var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply2(target2, receiver, args) {
return Function.prototype.apply.call(target2, receiver, args);
};
var ReflectOwnKeys;
if (R && typeof R.ownKeys === "function") {
ReflectOwnKeys = R.ownKeys;
} else if (Object.getOwnPropertySymbols) {
ReflectOwnKeys = function ReflectOwnKeys2(target2) {
return Object.getOwnPropertyNames(target2).concat(Object.getOwnPropertySymbols(target2));
};
} else {
ReflectOwnKeys = function ReflectOwnKeys2(target2) {
return Object.getOwnPropertyNames(target2);
};
}
function ProcessEmitWarning(warning) {
if (console && console.warn)
console.warn(warning);
}
var NumberIsNaN = Number.isNaN || function NumberIsNaN2(value2) {
return value2 !== value2;
};
function EventEmitter() {
EventEmitter.init.call(this);
}
events.exports = EventEmitter;
eventsExports.once = once$2;
EventEmitter.EventEmitter = EventEmitter;
EventEmitter.prototype._events = void 0;
EventEmitter.prototype._eventsCount = 0;
EventEmitter.prototype._maxListeners = void 0;
var defaultMaxListeners = 10;
function checkListener(listener) {
if (typeof listener !== "function") {
throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
}
}
Object.defineProperty(EventEmitter, "defaultMaxListeners", {
enumerable: true,
get: function() {
return defaultMaxListeners;
},
set: function(arg) {
if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) {
throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + ".");
}
defaultMaxListeners = arg;
}
});
EventEmitter.init = function() {
if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) {
this._events = /* @__PURE__ */ Object.create(null);
this._eventsCount = 0;
}
this._maxListeners = this._maxListeners || void 0;
};
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) {
throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + ".");
}
this._maxListeners = n;
return this;
};
function _getMaxListeners(that) {
if (that._maxListeners === void 0)
return EventEmitter.defaultMaxListeners;
return that._maxListeners;
}
EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
return _getMaxListeners(this);
};
EventEmitter.prototype.emit = function emit(type) {
var args = [];
for (var i = 1; i < arguments.length; i++)
args.push(arguments[i]);
var doError = type === "error";
var events2 = this._events;
if (events2 !== void 0)
doError = doError && events2.error === void 0;
else if (!doError)
return false;
if (doError) {
var er;
if (args.length > 0)
er = args[0];
if (er instanceof Error) {
throw er;
}
var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : ""));
err.context = er;
throw err;
}
var handler = events2[type];
if (handler === void 0)
return false;
if (typeof handler === "function") {
ReflectApply(handler, this, args);
} else {
var len2 = handler.length;
var listeners2 = arrayClone(handler, len2);
for (var i = 0; i < len2; ++i)
ReflectApply(listeners2[i], this, args);
}
return true;
};
function _addListener(target2, type, listener, prepend) {
var m;
var events2;
var existing;
checkListener(listener);
events2 = target2._events;
if (events2 === void 0) {
events2 = target2._events = /* @__PURE__ */ Object.create(null);
target2._eventsCount = 0;
} else {
if (events2.newListener !== void 0) {
target2.emit(
"newListener",
type,
listener.listener ? listener.listener : listener
);
events2 = target2._events;
}
existing = events2[type];
}
if (existing === void 0) {
existing = events2[type] = listener;
++target2._eventsCount;
} else {
if (typeof existing === "function") {
existing = events2[type] = prepend ? [listener, existing] : [existing, listener];
} else if (prepend) {
existing.unshift(listener);
} else {
existing.push(listener);
}
m = _getMaxListeners(target2);
if (m > 0 && existing.length > m && !existing.warned) {
existing.warned = true;
var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit");
w.name = "MaxListenersExceededWarning";
w.emitter = target2;
w.type = type;
w.count = existing.length;
ProcessEmitWarning(w);
}
}
return target2;
}
EventEmitter.prototype.addListener = function addListener(type, listener) {
return _addListener(this, type, listener, false);
};
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
EventEmitter.prototype.prependListener = function prependListener(type, listener) {
return _addListener(this, type, listener, true);
};
function onceWrapper() {
if (!this.fired) {
this.target.removeListener(this.type, this.wrapFn);
this.fired = true;
if (arguments.length === 0)
return this.listener.call(this.target);
return this.listener.apply(this.target, arguments);
}
}
function _onceWrap(target2, type, listener) {
var state = { fired: false, wrapFn: void 0, target: target2, type, listener };
var wrapped = onceWrapper.bind(state);
wrapped.listener = listener;
state.wrapFn = wrapped;
return wrapped;
}
EventEmitter.prototype.once = function once(type, listener) {
checkListener(listener);
this.on(type, _onceWrap(this, type, listener));
return this;
};
EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {
checkListener(listener);
this.prependListener(type, _onceWrap(this, type, listener));
return this;
};
EventEmitter.prototype.removeListener = function removeListener(type, listener) {
var list, events2, position2, i, originalListener;
checkListener(listener);
events2 = this._events;
if (events2 === void 0)
return this;
list = events2[type];
if (list === void 0)
return this;
if (list === listener || list.listener === listener) {
if (--this._eventsCount === 0)
this._events = /* @__PURE__ */ Object.create(null);
else {
delete events2[type];
if (events2.removeListener)
this.emit("removeListener", type, list.listener || listener);
}
} else if (typeof list !== "function") {
position2 = -1;
for (i = list.length - 1; i >= 0; i--) {
if (list[i] === listener || list[i].listener === listener) {
originalListener = list[i].listener;
position2 = i;
break;
}
}
if (position2 < 0)
return this;
if (position2 === 0)
list.shift();
else {
spliceOne(list, position2);
}
if (list.length === 1)
events2[type] = list[0];
if (events2.removeListener !== void 0)
this.emit("removeListener", type, originalListener || listener);
}
return this;
};
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {
var listeners2, events2, i;
events2 = this._events;
if (events2 === void 0)
return this;
if (events2.removeListener === void 0) {
if (arguments.length === 0) {
this._events = /* @__PURE__ */ Object.create(null);
this._eventsCount = 0;
} else if (events2[type] !== void 0) {
if (--this._eventsCount === 0)
this._events = /* @__PURE__ */ Object.create(null);
else
delete events2[type];
}
return this;
}
if (arguments.length === 0) {
var keys2 = Object.keys(events2);
var key;
for (i = 0; i < keys2.length; ++i) {
key = keys2[i];
if (key === "removeListener")
continue;
this.removeAllListeners(key);
}
this.removeAllListeners("removeListener");
this._events = /* @__PURE__ */ Object.create(null);
this._eventsCount = 0;
return this;
}
listeners2 = events2[type];
if (typeof listeners2 === "function") {
this.removeListener(type, listeners2);
} else if (listeners2 !== void 0) {
for (i = listeners2.length - 1; i >= 0; i--) {
this.removeListener(type, listeners2[i]);
}
}
return this;
};
function _listeners(target2, type, unwrap) {
var events2 = target2._events;
if (events2 === void 0)
return [];
var evlistener = events2[type];
if (evlistener === void 0)
return [];
if (typeof evlistener === "function")
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
}
EventEmitter.prototype.listeners = function listeners(type) {
return _listeners(this, type, true);
};
EventEmitter.prototype.rawListeners = function rawListeners(type) {
return _listeners(this, type, false);
};
EventEmitter.listenerCount = function(emitter, type) {
if (typeof emitter.listenerCount === "function") {
return emitter.listenerCount(type);
} else {
return listenerCount$1.call(emitter, type);
}
};
EventEmitter.prototype.listenerCount = listenerCount$1;
function listenerCount$1(type) {
var events2 = this._events;
if (events2 !== void 0) {
var evlistener = events2[type];
if (typeof evlistener === "function") {
return 1;
} else if (evlistener !== void 0) {
return evlistener.length;
}
}
return 0;
}
EventEmitter.prototype.eventNames = function eventNames() {
return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
};
function arrayClone(arr, n) {
var copy = new Array(n);
for (var i = 0; i < n; ++i)
copy[i] = arr[i];
return copy;
}
function spliceOne(list, index2) {
for (; index2 + 1 < list.length; index2++)
list[index2] = list[index2 + 1];
list.pop();
}
function unwrapListeners(arr) {
var ret = new Array(arr.length);
for (var i = 0; i < ret.length; ++i) {
ret[i] = arr[i].listener || arr[i];
}
return ret;
}
function once$2(emitter, name) {
return new Promise(function(resolve, reject) {
function errorListener(err) {
emitter.removeListener(name, resolver);
reject(err);
}
function resolver() {
if (typeof emitter.removeListener === "function") {
emitter.removeListener("error", errorListener);
}
resolve([].slice.call(arguments));
}
eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
if (name !== "error") {
addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
}
});
}
function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
if (typeof emitter.on === "function") {
eventTargetAgnosticAddListener(emitter, "error", handler, flags);
}
}
function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
if (typeof emitter.on === "function") {
if (flags.once) {
emitter.once(name, listener);
} else {
emitter.on(name, listener);
}
} else if (typeof emitter.addEventListener === "function") {
emitter.addEventListener(name, function wrapListener(arg) {
if (flags.once) {
emitter.removeEventListener(name, wrapListener);
}
listener(arg);
});
} else {
throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
}
}
function mangle$1(key) {
return "$" + key;
}
function unmangle$1(key) {
return key.substring(1);
}
function Map$1$1() {
this._store = {};
}
Map$1$1.prototype.get = function(key) {
var mangled = mangle$1(key);
return this._store[mangled];
};
Map$1$1.prototype.set = function(key, value2) {
var mangled = mangle$1(key);
this._store[mangled] = value2;
return true;
};
Map$1$1.prototype.has = function(key) {
var mangled = mangle$1(key);
return mangled in this._store;
};
Map$1$1.prototype.keys = function() {
return Object.keys(this._store).map((k) => unmangle$1(k));
};
Map$1$1.prototype.delete = function(key) {
var mangled = mangle$1(key);
var res = mangled in this._store;
delete this._store[mangled];
return res;
};
Map$1$1.prototype.forEach = function(cb) {
var keys2 = Object.keys(this._store);
for (var i = 0, len2 = keys2.length; i < len2; i++) {
var key = keys2[i];
var value2 = this._store[key];
key = unmangle$1(key);
cb(value2, key);
}
};
Object.defineProperty(Map$1$1.prototype, "size", {
get: function() {
return Object.keys(this._store).length;
}
});
function Set$1$1(array) {
this._store = new Map$1$1();
if (array && Array.isArray(array)) {
for (var i = 0, len2 = array.length; i < len2; i++) {
this.add(array[i]);
}
}
}
Set$1$1.prototype.add = function(key) {
return this._store.set(key, true);
};
Set$1$1.prototype.has = function(key) {
return this._store.has(key);
};
Set$1$1.prototype.forEach = function(cb) {
this._store.forEach(function(value2, key) {
cb(key);
});
};
Object.defineProperty(Set$1$1.prototype, "size", {
get: function() {
return this._store.size;
}
});
function supportsMapAndSet$1() {
if (typeof Symbol === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
return false;
}
var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);
return prop && "get" in prop && Map[Symbol.species] === Map;
}
var ExportedSet$1;
var ExportedMap$1;
{
if (supportsMapAndSet$1()) {
ExportedSet$1 = Set;
ExportedMap$1 = Map;
} else {
ExportedSet$1 = Set$1$1;
ExportedMap$1 = Map$1$1;
}
}
function isBinaryObject$1(object) {
return typeof ArrayBuffer !== "undefined" && object instanceof ArrayBuffer || typeof Blob !== "undefined" && object instanceof Blob;
}
function cloneArrayBuffer$1(buff) {
if (typeof buff.slice === "function") {
return buff.slice(0);
}
var target2 = new ArrayBuffer(buff.byteLength);
var targetArray = new Uint8Array(target2);
var sourceArray = new Uint8Array(buff);
targetArray.set(sourceArray);
return target2;
}
function cloneBinaryObject$1(object) {
if (object instanceof ArrayBuffer) {
return cloneArrayBuffer$1(object);
}
var size = object.size;
var type = object.type;
if (typeof object.slice === "function") {
return object.slice(0, size, type);
}
return object.webkitSlice(0, size, type);
}
var funcToString$1 = Function.prototype.toString;
var objectCtorString$1 = funcToString$1.call(Object);
function isPlainObject$1(value2) {
var proto = Object.getPrototypeOf(value2);
if (proto === null) {
return true;
}
var Ctor = proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString$1.call(Ctor) == objectCtorString$1;
}
function clone$1(object) {
var newObject;
var i;
var len2;
if (!object || typeof object !== "object") {
return object;
}
if (Array.isArray(object)) {
newObject = [];
for (i = 0, len2 = object.length; i < len2; i++) {
newObject[i] = clone$1(object[i]);
}
return newObject;
}
if (object instanceof Date && isFinite(object)) {
return object.toISOString();
}
if (isBinaryObject$1(object)) {
return cloneBinaryObject$1(object);
}
if (!isPlainObject$1(object)) {
return object;
}
newObject = {};
for (i in object) {
if (Object.prototype.hasOwnProperty.call(object, i)) {
var value2 = clone$1(object[i]);
if (typeof value2 !== "undefined") {
newObject[i] = value2;
}
}
}
return newObject;
}
function once$1(fun) {
var called = false;
return function(...args) {
if (called) {
throw new Error("once called more than once");
} else {
called = true;
fun.apply(this, args);
}
};
}
function toPromise$1(func) {
return function(...args) {
args = clone$1(args);
var self2 = this;
var usedCB = typeof args[args.length - 1] === "function" ? args.pop() : false;
var promise = new Promise(function(fulfill, reject) {
var resp;
try {
var callback = once$1(function(err, mesg) {
if (err) {
reject(err);
} else {
fulfill(mesg);
}
});
args.push(callback);
resp = func.apply(self2, args);
if (resp && typeof resp.then === "function") {
fulfill(resp);
}
} catch (e) {
reject(e);
}
});
if (usedCB) {
promise.then(function(result) {
usedCB(null, result);
}, usedCB);
}
return promise;
};
}
function logApiCall(self2, name, args) {
if (self2.constructor.listeners("debug").length) {
var logArgs = ["api", self2.name, name];
for (var i = 0; i < args.length - 1; i++) {
logArgs.push(args[i]);
}
self2.constructor.emit("debug", logArgs);
var origCallback = args[args.length - 1];
args[args.length - 1] = function(err, res) {
var responseArgs = ["api", self2.name, name];
responseArgs = responseArgs.concat(
err ? ["error", err] : ["success", res]
);
self2.constructor.emit("debug", responseArgs);
origCallback(err, res);
};
}
}
function adapterFun(name, callback) {
return toPromise$1(function(...args) {
if (this._closed) {
return Promise.reject(new Error("database is closed"));
}
if (this._destroyed) {
return Promise.reject(new Error("database is destroyed"));
}
var self2 = this;
logApiCall(self2, name, args);
if (!this.taskqueue.isReady) {
return new Promise(function(fulfill, reject) {
self2.taskqueue.addTask(function(failed) {
if (failed) {
reject(failed);
} else {
fulfill(self2[name].apply(self2, args));
}
});
});
}
return callback.apply(this, args);
});
}
function pick$1(obj, arr) {
var res = {};
for (var i = 0, len2 = arr.length; i < len2; i++) {
var prop = arr[i];
if (prop in obj) {
res[prop] = obj[prop];
}
}
return res;
}
var MAX_NUM_CONCURRENT_REQUESTS = 6;
function identityFunction(x) {
return x;
}
function formatResultForOpenRevsGet(result) {
return [{
ok: result
}];
}
function bulkGet(db, opts, callback) {
var requests = opts.docs;
var requestsById = new ExportedMap$1();
requests.forEach(function(request) {
if (requestsById.has(request.id)) {
requestsById.get(request.id).push(request);
} else {
requestsById.set(request.id, [request]);
}
});
var numDocs = requestsById.size;
var numDone = 0;
var perDocResults = new Array(numDocs);
function collapseResultsAndFinish() {
var results = [];
perDocResults.forEach(function(res) {
res.docs.forEach(function(info) {
results.push({
id: res.id,
docs: [info]
});
});
});
callback(null, { results });
}
function checkDone() {
if (++numDone === numDocs) {
collapseResultsAndFinish();
}
}
function gotResult(docIndex, id, docs) {
perDocResults[docIndex] = { id, docs };
checkDone();
}
var allRequests = [];
requestsById.forEach(function(value2, key) {
allRequests.push(key);
});
var i = 0;
function nextBatch() {
if (i >= allRequests.length) {
return;
}
var upTo = Math.min(i + MAX_NUM_CONCURRENT_REQUESTS, allRequests.length);
var batch = allRequests.slice(i, upTo);
processBatch(batch, i);
i += batch.length;
}
function processBatch(batch, offset) {
batch.forEach(function(docId, j) {
var docIdx = offset + j;
var docRequests = requestsById.get(docId);
var docOpts = pick$1(docRequests[0], ["atts_since", "attachments"]);
docOpts.open_revs = docRequests.map(function(request) {
return request.rev;
});
docOpts.open_revs = docOpts.open_revs.filter(identityFunction);
var formatResult = identityFunction;
if (docOpts.open_revs.length === 0) {
delete docOpts.open_revs;
formatResult = formatResultForOpenRevsGet;
}
["revs", "attachments", "binary", "ajax", "latest"].forEach(function(param) {
if (param in opts) {
docOpts[param] = opts[param];
}
});
db.get(docId, docOpts, function(err, res) {
var result;
if (err) {
result = [{ error: err }];
} else {
result = formatResult(res);
}
gotResult(docIdx, docId, result);
nextBatch();
});
});
}
nextBatch();
}
var hasLocal$1;
try {
localStorage.setItem("_pouch_check_localstorage", 1);
hasLocal$1 = !!localStorage.getItem("_pouch_check_localstorage");
} catch (e) {
hasLocal$1 = false;
}
function hasLocalStorage() {
return hasLocal$1;
}
class Changes extends eventsExports {
constructor() {
super();
this._listeners = {};
if (hasLocalStorage()) {
addEventListener("storage", (e) => {
this.emit(e.key);
});
}
}
addListener(dbName, id, db, opts) {
if (this._listeners[id]) {
return;
}
var inprogress = false;
var self2 = this;
function eventFunction() {
if (!self2._listeners[id]) {
return;
}
if (inprogress) {
inprogress = "waiting";
return;
}
inprogress = true;
var changesOpts = pick$1(opts, [
"style",
"include_docs",
"attachments",
"conflicts",
"filter",
"doc_ids",
"view",
"since",
"query_params",
"binary",
"return_docs"
]);
function onError() {
inprogress = false;
}
db.changes(changesOpts).on("change", function(c) {
if (c.seq > opts.since && !opts.cancelled) {
opts.since = c.seq;
opts.onChange(c);
}
}).on("complete", function() {
if (inprogress === "waiting") {
lib(eventFunction);
}
inprogress = false;
}).on("error", onError);
}
this._listeners[id] = eventFunction;
this.on(dbName, eventFunction);
}
removeListener(dbName, id) {
if (!(id in this._listeners)) {
return;
}
super.removeListener(dbName, this._listeners[id]);
delete this._listeners[id];
}
notifyLocalWindows(dbName) {
if (hasLocalStorage()) {
localStorage[dbName] = localStorage[dbName] === "a" ? "b" : "a";
}
}
notify(dbName) {
this.emit(dbName);
this.notifyLocalWindows(dbName);
}
}
function guardedConsole$1(method) {
if (typeof console !== "undefined" && typeof console[method] === "function") {
var args = Array.prototype.slice.call(arguments, 1);
console[method].apply(console, args);
}
}
function randomNumber(min, max2) {
var maxTimeout = 6e5;
min = parseInt(min, 10) || 0;
max2 = parseInt(max2, 10);
if (max2 !== max2 || max2 <= min) {
max2 = (min || 1) << 1;
} else {
max2 = max2 + 1;
}
if (max2 > maxTimeout) {
min = maxTimeout >> 1;
max2 = maxTimeout;
}
var ratio = Math.random();
var range = max2 - min;
return ~~(range * ratio + min);
}
function defaultBackOff(min) {
var max2 = 0;
if (!min) {
max2 = 2e3;
}
return randomNumber(min, max2);
}
function explainError(status, str) {
guardedConsole$1("info", "The above " + status + " is totally normal. " + str);
}
var assign;
{
if (typeof Object.assign === "function") {
assign = Object.assign;
} else {
assign = function(target2) {
var to = Object(target2);
for (var index2 = 1; index2 < arguments.length; index2++) {
var nextSource = arguments[index2];
if (nextSource != null) {
for (var nextKey in nextSource) {
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
to[nextKey] = nextSource[nextKey];
}
}
}
}
return to;
};
}
}
var $inject_Object_assign = assign;
let PouchError$1 = class PouchError extends Error {
constructor(status, error, reason) {
super();
this.status = status;
this.name = error;
this.message = reason;
this.error = true;
}
toString() {
return JSON.stringify({
status: this.status,
name: this.name,
message: this.message,
reason: this.reason
});
}
};
new PouchError$1(401, "unauthorized", "Name or password is incorrect.");
var MISSING_BULK_DOCS = new PouchError$1(400, "bad_request", "Missing JSON list of 'docs'");
var MISSING_DOC = new PouchError$1(404, "not_found", "missing");
var REV_CONFLICT = new PouchError$1(409, "conflict", "Document update conflict");
var INVALID_ID = new PouchError$1(400, "bad_request", "_id field must contain a string");
var MISSING_ID = new PouchError$1(412, "missing_id", "_id is required for puts");
var RESERVED_ID = new PouchError$1(400, "bad_request", "Only reserved document ids may start with underscore.");
new PouchError$1(412, "precondition_failed", "Database not open");
var UNKNOWN_ERROR$1 = new PouchError$1(500, "unknown_error", "Database encountered an unknown error");
var BAD_ARG = new PouchError$1(500, "badarg", "Some query argument is invalid");
new PouchError$1(400, "invalid_request", "Request was invalid");
var QUERY_PARSE_ERROR = new PouchError$1(400, "query_parse_error", "Some query parameter is invalid");
var DOC_VALIDATION = new PouchError$1(500, "doc_validation", "Bad special document member");
var BAD_REQUEST = new PouchError$1(400, "bad_request", "Something wrong with the request");
var NOT_AN_OBJECT = new PouchError$1(400, "bad_request", "Document must be a JSON object");
new PouchError$1(404, "not_found", "Database not found");
var IDB_ERROR = new PouchError$1(500, "indexed_db_went_bad", "unknown");
new PouchError$1(500, "web_sql_went_bad", "unknown");
new PouchError$1(500, "levelDB_went_went_bad", "unknown");
new PouchError$1(403, "forbidden", "Forbidden by design doc validate_doc_update function");
var INVALID_REV = new PouchError$1(400, "bad_request", "Invalid rev format");
new PouchError$1(412, "file_exists", "The database could not be created, the file already exists.");
var MISSING_STUB = new PouchError$1(412, "missing_stub", "A pre-existing attachment stub wasn't found");
new PouchError$1(413, "invalid_url", "Provided URL is invalid");
function createError(error, reason) {
function CustomPouchError(reason2) {
var names = Object.getOwnPropertyNames(error);
for (var i = 0, len2 = names.length; i < len2; i++) {
if (typeof error[names[i]] !== "function") {
this[names[i]] = error[names[i]];
}
}
if (this.stack === void 0) {
this.stack = new Error().stack;
}
if (reason2 !== void 0) {
this.reason = reason2;
}
}
CustomPouchError.prototype = PouchError$1.prototype;
return new CustomPouchError(reason);
}
function generateErrorFromResponse$1(err) {
if (typeof err !== "object") {
var data = err;
err = UNKNOWN_ERROR$1;
err.data = data;
}
if ("error" in err && err.error === "conflict") {
err.name = "conflict";
err.status = 409;
}
if (!("name" in err)) {
err.name = err.error || "unknown";
}
if (!("status" in err)) {
err.status = 500;
}
if (!("message" in err)) {
err.message = err.message || err.reason;
}
if (!("stack" in err)) {
err.stack = new Error().stack;
}
return err;
}
function tryFilter(filter2, doc, req) {
try {
return !filter2(doc, req);
} catch (err) {
var msg = "Filter function threw: " + err.toString();
return createError(BAD_REQUEST, msg);
}
}
function filterChange(opts) {
var req = {};
var hasFilter = opts.filter && typeof opts.filter === "function";
req.query = opts.query_params;
return function filter2(change) {
if (!change.doc) {
change.doc = {};
}
var filterReturn = hasFilter && tryFilter(opts.filter, change.doc, req);
if (typeof filterReturn === "object") {
return filterReturn;
}
if (filterReturn) {
return false;
}
if (!opts.include_docs) {
delete change.doc;
} else if (!opts.attachments) {
for (var att in change.doc._attachments) {
if (Object.prototype.hasOwnProperty.call(change.doc._attachments, att)) {
change.doc._attachments[att].stub = true;
}
}
}
return true;
};
}
function flatten$2(arrs) {
var res = [];
for (var i = 0, len2 = arrs.length; i < len2; i++) {
res = res.concat(arrs[i]);
}
return res;
}
function invalidIdError(id) {
var err;
if (!id) {
err = createError(MISSING_ID);
} else if (typeof id !== "string") {
err = createError(INVALID_ID);
} else if (/^_/.test(id) && !/^_(design|local)/.test(id)) {
err = createError(RESERVED_ID);
}
if (err) {
throw err;
}
}
function isRemote$1(db) {
if (typeof db._remote === "boolean") {
return db._remote;
}
if (typeof db.type === "function") {
guardedConsole$1(
"warn",
"db.type() is deprecated and will be removed in a future version of PouchDB"
);
return db.type() === "http";
}
return false;
}
function listenerCount(ee, type) {
return "listenerCount" in ee ? ee.listenerCount(type) : eventsExports.listenerCount(ee, type);
}
function parseDesignDocFunctionName(s) {
if (!s) {
return null;
}
var parts = s.split("/");
if (parts.length === 2) {
return parts;
}
if (parts.length === 1) {
return [s, s];
}
return null;
}
function normalizeDesignDocFunctionName(s) {
var normalized = parseDesignDocFunctionName(s);
return normalized ? normalized.join("/") : null;
}
var keys = [
"source",
"protocol",
"authority",
"userInfo",
"user",
"password",
"host",
"port",
"relative",
"path",
"directory",
"file",
"query",
"anchor"
];
var qName = "queryKey";
var qParser = /(?:^|&)([^&=]*)=?([^&]*)/g;
var parser = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
function parseUri(str) {
var m = parser.exec(str);
var uri = {};
var i = 14;
while (i--) {
var key = keys[i];
var value2 = m[i] || "";
var encoded = ["user", "password"].indexOf(key) !== -1;
uri[key] = encoded ? decodeURIComponent(value2) : value2;
}
uri[qName] = {};
uri[keys[12]].replace(qParser, function($0, $1, $2) {
if ($1) {
uri[qName][$1] = $2;
}
});
return uri;
}
function scopeEval(source, scope) {
var keys2 = [];
var values = [];
for (var key in scope) {
if (Object.prototype.hasOwnProperty.call(scope, key)) {
keys2.push(key);
values.push(scope[key]);
}
}
keys2.push(source);
return Function.apply(null, keys2).apply(null, values);
}
function upsert$1(db, docId, diffFun) {
return db.get(docId).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return {};
}).then(function(doc) {
var docRev = doc._rev;
var newDoc = diffFun(doc);
if (!newDoc) {
return { updated: false, rev: docRev };
}
newDoc._id = docId;
newDoc._rev = docRev;
return tryAndPut$1(db, newDoc, diffFun);
});
}
function tryAndPut$1(db, doc, diffFun) {
return db.put(doc).then(function(res) {
return {
updated: true,
rev: res.rev
};
}, function(err) {
if (err.status !== 409) {
throw err;
}
return upsert$1(db, doc._id, diffFun);
});
}
var thisAtob$1 = function(str) {
return atob(str);
};
var thisBtoa = function(str) {
return btoa(str);
};
function createBlob$1(parts, properties) {
parts = parts || [];
properties = properties || {};
try {
return new Blob(parts, properties);
} catch (e) {
if (e.name !== "TypeError") {
throw e;
}
var Builder = typeof BlobBuilder !== "undefined" ? BlobBuilder : typeof MSBlobBuilder !== "undefined" ? MSBlobBuilder : typeof MozBlobBuilder !== "undefined" ? MozBlobBuilder : WebKitBlobBuilder;
var builder = new Builder();
for (var i = 0; i < parts.length; i += 1) {
builder.append(parts[i]);
}
return builder.getBlob(properties.type);
}
}
function binaryStringToArrayBuffer$1(bin) {
var length = bin.length;
var buf2 = new ArrayBuffer(length);
var arr = new Uint8Array(buf2);
for (var i = 0; i < length; i++) {
arr[i] = bin.charCodeAt(i);
}
return buf2;
}
function binStringToBluffer$1(binString, type) {
return createBlob$1([binaryStringToArrayBuffer$1(binString)], { type });
}
function b64ToBluffer$1(b64, type) {
return binStringToBluffer$1(thisAtob$1(b64), type);
}
function arrayBufferToBinaryString(buffer) {
var binary = "";
var bytes = new Uint8Array(buffer);
var length = bytes.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(bytes[i]);
}
return binary;
}
function readAsBinaryString(blob, callback) {
var reader = new FileReader();
var hasBinaryString = typeof reader.readAsBinaryString === "function";
reader.onloadend = function(e) {
var result = e.target.result || "";
if (hasBinaryString) {
return callback(result);
}
callback(arrayBufferToBinaryString(result));
};
if (hasBinaryString) {
reader.readAsBinaryString(blob);
} else {
reader.readAsArrayBuffer(blob);
}
}
function blobToBinaryString(blobOrBuffer, callback) {
readAsBinaryString(blobOrBuffer, function(bin) {
callback(bin);
});
}
function blobToBase64(blobOrBuffer, callback) {
blobToBinaryString(blobOrBuffer, function(base64) {
callback(thisBtoa(base64));
});
}
function readAsArrayBuffer(blob, callback) {
var reader = new FileReader();
reader.onloadend = function(e) {
var result = e.target.result || new ArrayBuffer(0);
callback(result);
};
reader.readAsArrayBuffer(blob);
}
var setImmediateShim = self.setImmediate || self.setTimeout;
var MD5_CHUNK_SIZE = 32768;
function rawToBase64(raw) {
return thisBtoa(raw);
}
function sliceBlob(blob, start, end) {
if (blob.webkitSlice) {
return blob.webkitSlice(start, end);
}
return blob.slice(start, end);
}
function appendBlob(buffer, blob, start, end, callback) {
if (start > 0 || end < blob.size) {
blob = sliceBlob(blob, start, end);
}
readAsArrayBuffer(blob, function(arrayBuffer) {
buffer.append(arrayBuffer);
callback();
});
}
function appendString(buffer, string, start, end, callback) {
if (start > 0 || end < string.length) {
string = string.substring(start, end);
}
buffer.appendBinary(string);
callback();
}
function binaryMd5(data, callback) {
var inputIsString = typeof data === "string";
var len2 = inputIsString ? data.length : data.size;
var chunkSize = Math.min(MD5_CHUNK_SIZE, len2);
var chunks = Math.ceil(len2 / chunkSize);
var currentChunk = 0;
var buffer = inputIsString ? new Md5() : new Md5.ArrayBuffer();
var append = inputIsString ? appendString : appendBlob;
function next() {
setImmediateShim(loadNextChunk);
}
function done() {
var raw = buffer.end(true);
var base64 = rawToBase64(raw);
callback(base64);
buffer.destroy();
}
function loadNextChunk() {
var start = currentChunk * chunkSize;
var end = start + chunkSize;
currentChunk++;
if (currentChunk < chunks) {
append(buffer, data, start, end, next);
} else {
append(buffer, data, start, end, done);
}
}
loadNextChunk();
}
function stringMd5$1(string) {
return Md5.hash(string);
}
function rev$$1(doc, deterministic_revs) {
if (!deterministic_revs) {
return v4().replace(/-/g, "").toLowerCase();
}
var mutateableDoc = $inject_Object_assign({}, doc);
delete mutateableDoc._rev_tree;
return stringMd5$1(JSON.stringify(mutateableDoc));
}
var uuid = v4;
function winningRev(metadata) {
var winningId;
var winningPos;
var winningDeleted;
var toVisit = metadata.rev_tree.slice();
var node;
while (node = toVisit.pop()) {
var tree = node.ids;
var branches = tree[2];
var pos = node.pos;
if (branches.length) {
for (var i = 0, len2 = branches.length; i < len2; i++) {
toVisit.push({ pos: pos + 1, ids: branches[i] });
}
continue;
}
var deleted = !!tree[1].deleted;
var id = tree[0];
if (!winningId || (winningDeleted !== deleted ? winningDeleted : winningPos !== pos ? winningPos < pos : winningId < id)) {
winningId = id;
winningPos = pos;
winningDeleted = deleted;
}
}
return winningPos + "-" + winningId;
}
function traverseRevTree(revs, callback) {
var toVisit = revs.slice();
var node;
while (node = toVisit.pop()) {
var pos = node.pos;
var tree = node.ids;
var branches = tree[2];
var newCtx = callback(branches.length === 0, pos, tree[0], node.ctx, tree[1]);
for (var i = 0, len2 = branches.length; i < len2; i++) {
toVisit.push({ pos: pos + 1, ids: branches[i], ctx: newCtx });
}
}
}
function sortByPos(a2, b) {
return a2.pos - b.pos;
}
function collectLeaves(revs) {
var leaves = [];
traverseRevTree(revs, function(isLeaf, pos, id, acc, opts) {
if (isLeaf) {
leaves.push({ rev: pos + "-" + id, pos, opts });
}
});
leaves.sort(sortByPos).reverse();
for (var i = 0, len2 = leaves.length; i < len2; i++) {
delete leaves[i].pos;
}
return leaves;
}
function collectConflicts(metadata) {
var win = winningRev(metadata);
var leaves = collectLeaves(metadata.rev_tree);
var conflicts = [];
for (var i = 0, len2 = leaves.length; i < len2; i++) {
var leaf = leaves[i];
if (leaf.rev !== win && !leaf.opts.deleted) {
conflicts.push(leaf.rev);
}
}
return conflicts;
}
function compactTree(metadata) {
var revs = [];
traverseRevTree(metadata.rev_tree, function(isLeaf, pos, revHash, ctx, opts) {
if (opts.status === "available" && !isLeaf) {
revs.push(pos + "-" + revHash);
opts.status = "missing";
}
});
return revs;
}
function findPathToLeaf(revs, targetRev) {
let path = [];
const toVisit = revs.slice();
let node;
while (node = toVisit.pop()) {
const { pos, ids: tree } = node;
const rev = `${pos}-${tree[0]}`;
const branches = tree[2];
path.push(rev);
if (rev === targetRev) {
if (branches.length !== 0) {
throw new Error("The requested revision is not a leaf");
}
return path.reverse();
}
if (branches.length === 0 || branches.length > 1) {
path = [];
}
for (let i = 0, len2 = branches.length; i < len2; i++) {
toVisit.push({ pos: pos + 1, ids: branches[i] });
}
}
if (path.length === 0) {
throw new Error("The requested revision does not exist");
}
return path.reverse();
}
function rootToLeaf(revs) {
var paths = [];
var toVisit = revs.slice();
var node;
while (node = toVisit.pop()) {
var pos = node.pos;
var tree = node.ids;
var id = tree[0];
var opts = tree[1];
var branches = tree[2];
var isLeaf = branches.length === 0;
var history = node.history ? node.history.slice() : [];
history.push({ id, opts });
if (isLeaf) {
paths.push({ pos: pos + 1 - history.length, ids: history });
}
for (var i = 0, len2 = branches.length; i < len2; i++) {
toVisit.push({ pos: pos + 1, ids: branches[i], history });
}
}
return paths.reverse();
}
function sortByPos$1(a2, b) {
return a2.pos - b.pos;
}
function binarySearch(arr, item, comparator) {
var low = 0;
var high = arr.length;
var mid;
while (low < high) {
mid = low + high >>> 1;
if (comparator(arr[mid], item) < 0) {
low = mid + 1;
} else {
high = mid;
}
}
return low;
}
function insertSorted(arr, item, comparator) {
var idx = binarySearch(arr, item, comparator);
arr.splice(idx, 0, item);
}
function pathToTree(path, numStemmed) {
var root;
var leaf;
for (var i = numStemmed, len2 = path.length; i < len2; i++) {
var node = path[i];
var currentLeaf = [node.id, node.opts, []];
if (leaf) {
leaf[2].push(currentLeaf);
leaf = currentLeaf;
} else {
root = leaf = currentLeaf;
}
}
return root;
}
function compareTree(a2, b) {
return a2[0] < b[0] ? -1 : 1;
}
function mergeTree(in_tree1, in_tree2) {
var queue2 = [{ tree1: in_tree1, tree2: in_tree2 }];
var conflicts = false;
while (queue2.length > 0) {
var item = queue2.pop();
var tree1 = item.tree1;
var tree2 = item.tree2;
if (tree1[1].status || tree2[1].status) {
tree1[1].status = tree1[1].status === "available" || tree2[1].status === "available" ? "available" : "missing";
}
for (var i = 0; i < tree2[2].length; i++) {
if (!tree1[2][0]) {
conflicts = "new_leaf";
tree1[2][0] = tree2[2][i];
continue;
}
var merged = false;
for (var j = 0; j < tree1[2].length; j++) {
if (tree1[2][j][0] === tree2[2][i][0]) {
queue2.push({ tree1: tree1[2][j], tree2: tree2[2][i] });
merged = true;
}
}
if (!merged) {
conflicts = "new_branch";
insertSorted(tree1[2], tree2[2][i], compareTree);
}
}
}
return { conflicts, tree: in_tree1 };
}
function doMerge(tree, path, dontExpand) {
var restree = [];
var conflicts = false;
var merged = false;
var res;
if (!tree.length) {
return { tree: [path], conflicts: "new_leaf" };
}
for (var i = 0, len2 = tree.length; i < len2; i++) {
var branch = tree[i];
if (branch.pos === path.pos && branch.ids[0] === path.ids[0]) {
res = mergeTree(branch.ids, path.ids);
restree.push({ pos: branch.pos, ids: res.tree });
conflicts = conflicts || res.conflicts;
merged = true;
} else if (dontExpand !== true) {
var t1 = branch.pos < path.pos ? branch : path;
var t2 = branch.pos < path.pos ? path : branch;
var diff = t2.pos - t1.pos;
var candidateParents = [];
var trees = [];
trees.push({ ids: t1.ids, diff, parent: null, parentIdx: null });
while (trees.length > 0) {
var item = trees.pop();
if (item.diff === 0) {
if (item.ids[0] === t2.ids[0]) {
candidateParents.push(item);
}
continue;
}
var elements = item.ids[2];
for (var j = 0, elementsLen = elements.length; j < elementsLen; j++) {
trees.push({
ids: elements[j],
diff: item.diff - 1,
parent: item.ids,
parentIdx: j
});
}
}
var el = candidateParents[0];
if (!el) {
restree.push(branch);
} else {
res = mergeTree(el.ids, t2.ids);
el.parent[2][el.parentIdx] = res.tree;
restree.push({ pos: t1.pos, ids: t1.ids });
conflicts = conflicts || res.conflicts;
merged = true;
}
} else {
restree.push(branch);
}
}
if (!merged) {
restree.push(path);
}
restree.sort(sortByPos$1);
return {
tree: restree,
conflicts: conflicts || "internal_node"
};
}
function stem(tree, depth) {
var paths = rootToLeaf(tree);
var stemmedRevs;
var result;
for (var i = 0, len2 = paths.length; i < len2; i++) {
var path = paths[i];
var stemmed = path.ids;
var node;
if (stemmed.length > depth) {
if (!stemmedRevs) {
stemmedRevs = {};
}
var numStemmed = stemmed.length - depth;
node = {
pos: path.pos + numStemmed,
ids: pathToTree(stemmed, numStemmed)
};
for (var s = 0; s < numStemmed; s++) {
var rev = path.pos + s + "-" + stemmed[s].id;
stemmedRevs[rev] = true;
}
} else {
node = {
pos: path.pos,
ids: pathToTree(stemmed, 0)
};
}
if (result) {
result = doMerge(result, node, true).tree;
} else {
result = [node];
}
}
if (stemmedRevs) {
traverseRevTree(result, function(isLeaf, pos, revHash) {
delete stemmedRevs[pos + "-" + revHash];
});
}
return {
tree: result,
revs: stemmedRevs ? Object.keys(stemmedRevs) : []
};
}
function merge(tree, path, depth) {
var newTree = doMerge(tree, path);
var stemmed = stem(newTree.tree, depth);
return {
tree: stemmed.tree,
stemmedRevs: stemmed.revs,
conflicts: newTree.conflicts
};
}
function revExists(revs, rev) {
var toVisit = revs.slice();
var splitRev = rev.split("-");
var targetPos = parseInt(splitRev[0], 10);
var targetId = splitRev[1];
var node;
while (node = toVisit.pop()) {
if (node.pos === targetPos && node.ids[0] === targetId) {
return true;
}
var branches = node.ids[2];
for (var i = 0, len2 = branches.length; i < len2; i++) {
toVisit.push({ pos: node.pos + 1, ids: branches[i] });
}
}
return false;
}
function getTrees(node) {
return node.ids;
}
function isDeleted(metadata, rev) {
if (!rev) {
rev = winningRev(metadata);
}
var id = rev.substring(rev.indexOf("-") + 1);
var toVisit = metadata.rev_tree.map(getTrees);
var tree;
while (tree = toVisit.pop()) {
if (tree[0] === id) {
return !!tree[1].deleted;
}
toVisit = toVisit.concat(tree[2]);
}
}
function isLocalId(id) {
return /^_local/.test(id);
}
function latest(rev, metadata) {
var toVisit = metadata.rev_tree.slice();
var node;
while (node = toVisit.pop()) {
var pos = node.pos;
var tree = node.ids;
var id = tree[0];
var opts = tree[1];
var branches = tree[2];
var isLeaf = branches.length === 0;
var history = node.history ? node.history.slice() : [];
history.push({ id, pos, opts });
if (isLeaf) {
for (var i = 0, len2 = history.length; i < len2; i++) {
var historyNode = history[i];
var historyRev = historyNode.pos + "-" + historyNode.id;
if (historyRev === rev) {
return pos + "-" + id;
}
}
}
for (var j = 0, l = branches.length; j < l; j++) {
toVisit.push({ pos: pos + 1, ids: branches[j], history });
}
}
throw new Error("Unable to resolve latest revision for id " + metadata.id + ", rev " + rev);
}
function tryCatchInChangeListener(self2, change, pending, lastSeq) {
try {
self2.emit("change", change, pending, lastSeq);
} catch (e) {
guardedConsole$1("error", 'Error in .on("change", function):', e);
}
}
function processChange(doc, metadata, opts) {
var changeList = [{ rev: doc._rev }];
if (opts.style === "all_docs") {
changeList = collectLeaves(metadata.rev_tree).map(function(x) {
return { rev: x.rev };
});
}
var change = {
id: metadata.id,
changes: changeList,
doc
};
if (isDeleted(metadata, doc._rev)) {
change.deleted = true;
}
if (opts.conflicts) {
change.doc._conflicts = collectConflicts(metadata);
if (!change.doc._conflicts.length) {
delete change.doc._conflicts;
}
}
return change;
}
class Changes$1 extends eventsExports {
constructor(db, opts, callback) {
super();
this.db = db;
opts = opts ? clone$1(opts) : {};
var complete = opts.complete = once$1((err, resp) => {
if (err) {
if (listenerCount(this, "error") > 0) {
this.emit("error", err);
}
} else {
this.emit("complete", resp);
}
this.removeAllListeners();
db.removeListener("destroyed", onDestroy);
});
if (callback) {
this.on("complete", function(resp) {
callback(null, resp);
});
this.on("error", callback);
}
const onDestroy = () => {
this.cancel();
};
db.once("destroyed", onDestroy);
opts.onChange = (change, pending, lastSeq) => {
if (this.isCancelled) {
return;
}
tryCatchInChangeListener(this, change, pending, lastSeq);
};
var promise = new Promise(function(fulfill, reject) {
opts.complete = function(err, res) {
if (err) {
reject(err);
} else {
fulfill(res);
}
};
});
this.once("cancel", function() {
db.removeListener("destroyed", onDestroy);
opts.complete(null, { status: "cancelled" });
});
this.then = promise.then.bind(promise);
this["catch"] = promise["catch"].bind(promise);
this.then(function(result) {
complete(null, result);
}, complete);
if (!db.taskqueue.isReady) {
db.taskqueue.addTask((failed) => {
if (failed) {
opts.complete(failed);
} else if (this.isCancelled) {
this.emit("cancel");
} else {
this.validateChanges(opts);
}
});
} else {
this.validateChanges(opts);
}
}
cancel() {
this.isCancelled = true;
if (this.db.taskqueue.isReady) {
this.emit("cancel");
}
}
validateChanges(opts) {
var callback = opts.complete;
if (PouchDB._changesFilterPlugin) {
PouchDB._changesFilterPlugin.validate(opts, (err) => {
if (err) {
return callback(err);
}
this.doChanges(opts);
});
} else {
this.doChanges(opts);
}
}
doChanges(opts) {
var callback = opts.complete;
opts = clone$1(opts);
if ("live" in opts && !("continuous" in opts)) {
opts.continuous = opts.live;
}
opts.processChange = processChange;
if (opts.since === "latest") {
opts.since = "now";
}
if (!opts.since) {
opts.since = 0;
}
if (opts.since === "now") {
this.db.info().then((info) => {
if (this.isCancelled) {
callback(null, { status: "cancelled" });
return;
}
opts.since = info.update_seq;
this.doChanges(opts);
}, callback);
return;
}
if (PouchDB._changesFilterPlugin) {
PouchDB._changesFilterPlugin.normalize(opts);
if (PouchDB._changesFilterPlugin.shouldFilter(this, opts)) {
return PouchDB._changesFilterPlugin.filter(this, opts);
}
} else {
["doc_ids", "filter", "selector", "view"].forEach(function(key) {
if (key in opts) {
guardedConsole$1(
"warn",
'The "' + key + '" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.'
);
}
});
}
if (!("descending" in opts)) {
opts.descending = false;
}
opts.limit = opts.limit === 0 ? 1 : opts.limit;
opts.complete = callback;
var newPromise = this.db._changes(opts);
if (newPromise && typeof newPromise.cancel === "function") {
const cancel = this.cancel;
this.cancel = (...args) => {
newPromise.cancel();
cancel.apply(this, args);
};
}
}
}
function compare$1(left, right) {
return left < right ? -1 : left > right ? 1 : 0;
}
function yankError(callback, docId) {
return function(err, results) {
if (err || results[0] && results[0].error) {
err = err || results[0];
err.docId = docId;
callback(err);
} else {
callback(null, results.length ? results[0] : results);
}
};
}
function cleanDocs(docs) {
for (var i = 0; i < docs.length; i++) {
var doc = docs[i];
if (doc._deleted) {
delete doc._attachments;
} else if (doc._attachments) {
var atts = Object.keys(doc._attachments);
for (var j = 0; j < atts.length; j++) {
var att = atts[j];
doc._attachments[att] = pick$1(
doc._attachments[att],
["data", "digest", "content_type", "length", "revpos", "stub"]
);
}
}
}
}
function compareByIdThenRev(a2, b) {
var idCompare = compare$1(a2._id, b._id);
if (idCompare !== 0) {
return idCompare;
}
var aStart = a2._revisions ? a2._revisions.start : 0;
var bStart = b._revisions ? b._revisions.start : 0;
return compare$1(aStart, bStart);
}
function computeHeight(revs) {
var height = {};
var edges = [];
traverseRevTree(revs, function(isLeaf, pos, id, prnt) {
var rev = pos + "-" + id;
if (isLeaf) {
height[rev] = 0;
}
if (prnt !== void 0) {
edges.push({ from: prnt, to: rev });
}
return rev;
});
edges.reverse();
edges.forEach(function(edge) {
if (height[edge.from] === void 0) {
height[edge.from] = 1 + height[edge.to];
} else {
height[edge.from] = Math.min(height[edge.from], 1 + height[edge.to]);
}
});
return height;
}
function allDocsKeysParse(opts) {
var keys2 = "limit" in opts ? opts.keys.slice(opts.skip, opts.limit + opts.skip) : opts.skip > 0 ? opts.keys.slice(opts.skip) : opts.keys;
opts.keys = keys2;
opts.skip = 0;
delete opts.limit;
if (opts.descending) {
keys2.reverse();
opts.descending = false;
}
}
function doNextCompaction(self2) {
var task = self2._compactionQueue[0];
var opts = task.opts;
var callback = task.callback;
self2.get("_local/compaction").catch(function() {
return false;
}).then(function(doc) {
if (doc && doc.last_seq) {
opts.last_seq = doc.last_seq;
}
self2._compact(opts, function(err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
lib(function() {
self2._compactionQueue.shift();
if (self2._compactionQueue.length) {
doNextCompaction(self2);
}
});
});
});
}
function appendPurgeSeq(db, docId, rev) {
return db.get("_local/purges").then(function(doc) {
const purgeSeq = doc.purgeSeq + 1;
doc.purges.push({
docId,
rev,
purgeSeq
});
if (doc.purges.length > self.purged_infos_limit) {
doc.purges.splice(0, doc.purges.length - self.purged_infos_limit);
}
doc.purgeSeq = purgeSeq;
return doc;
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return {
_id: "_local/purges",
purges: [{
docId,
rev,
purgeSeq: 0
}],
purgeSeq: 0
};
}).then(function(doc) {
return db.put(doc);
});
}
function attachmentNameError(name) {
if (name.charAt(0) === "_") {
return name + " is not a valid attachment name, attachment names cannot start with '_'";
}
return false;
}
class AbstractPouchDB extends eventsExports {
_setup() {
this.post = adapterFun("post", function(doc, opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
if (typeof doc !== "object" || Array.isArray(doc)) {
return callback(createError(NOT_AN_OBJECT));
}
this.bulkDocs({ docs: [doc] }, opts, yankError(callback, doc._id));
}).bind(this);
this.put = adapterFun("put", function(doc, opts, cb) {
if (typeof opts === "function") {
cb = opts;
opts = {};
}
if (typeof doc !== "object" || Array.isArray(doc)) {
return cb(createError(NOT_AN_OBJECT));
}
invalidIdError(doc._id);
if (isLocalId(doc._id) && typeof this._putLocal === "function") {
if (doc._deleted) {
return this._removeLocal(doc, cb);
} else {
return this._putLocal(doc, cb);
}
}
const putDoc = (next) => {
if (typeof this._put === "function" && opts.new_edits !== false) {
this._put(doc, opts, next);
} else {
this.bulkDocs({ docs: [doc] }, opts, yankError(next, doc._id));
}
};
if (opts.force && doc._rev) {
transformForceOptionToNewEditsOption();
putDoc(function(err) {
var result = err ? null : { ok: true, id: doc._id, rev: doc._rev };
cb(err, result);
});
} else {
putDoc(cb);
}
function transformForceOptionToNewEditsOption() {
var parts = doc._rev.split("-");
var oldRevId = parts[1];
var oldRevNum = parseInt(parts[0], 10);
var newRevNum = oldRevNum + 1;
var newRevId = rev$$1();
doc._revisions = {
start: newRevNum,
ids: [newRevId, oldRevId]
};
doc._rev = newRevNum + "-" + newRevId;
opts.new_edits = false;
}
}).bind(this);
this.putAttachment = adapterFun("putAttachment", function(docId, attachmentId, rev, blob, type) {
var api = this;
if (typeof type === "function") {
type = blob;
blob = rev;
rev = null;
}
if (typeof type === "undefined") {
type = blob;
blob = rev;
rev = null;
}
if (!type) {
guardedConsole$1("warn", "Attachment", attachmentId, "on document", docId, "is missing content_type");
}
function createAttachment(doc) {
var prevrevpos = "_rev" in doc ? parseInt(doc._rev, 10) : 0;
doc._attachments = doc._attachments || {};
doc._attachments[attachmentId] = {
content_type: type,
data: blob,
revpos: ++prevrevpos
};
return api.put(doc);
}
return api.get(docId).then(function(doc) {
if (doc._rev !== rev) {
throw createError(REV_CONFLICT);
}
return createAttachment(doc);
}, function(err) {
if (err.reason === MISSING_DOC.message) {
return createAttachment({ _id: docId });
} else {
throw err;
}
});
}).bind(this);
this.removeAttachment = adapterFun("removeAttachment", function(docId, attachmentId, rev, callback) {
this.get(docId, (err, obj) => {
if (err) {
callback(err);
return;
}
if (obj._rev !== rev) {
callback(createError(REV_CONFLICT));
return;
}
if (!obj._attachments) {
return callback();
}
delete obj._attachments[attachmentId];
if (Object.keys(obj._attachments).length === 0) {
delete obj._attachments;
}
this.put(obj, callback);
});
}).bind(this);
this.remove = adapterFun("remove", function(docOrId, optsOrRev, opts, callback) {
var doc;
if (typeof optsOrRev === "string") {
doc = {
_id: docOrId,
_rev: optsOrRev
};
if (typeof opts === "function") {
callback = opts;
opts = {};
}
} else {
doc = docOrId;
if (typeof optsOrRev === "function") {
callback = optsOrRev;
opts = {};
} else {
callback = opts;
opts = optsOrRev;
}
}
opts = opts || {};
opts.was_delete = true;
var newDoc = { _id: doc._id, _rev: doc._rev || opts.rev };
newDoc._deleted = true;
if (isLocalId(newDoc._id) && typeof this._removeLocal === "function") {
return this._removeLocal(doc, callback);
}
this.bulkDocs({ docs: [newDoc] }, opts, yankError(callback, newDoc._id));
}).bind(this);
this.revsDiff = adapterFun("revsDiff", function(req, opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
var ids = Object.keys(req);
if (!ids.length) {
return callback(null, {});
}
var count = 0;
var missing = new ExportedMap$1();
function addToMissing(id, revId) {
if (!missing.has(id)) {
missing.set(id, { missing: [] });
}
missing.get(id).missing.push(revId);
}
function processDoc(id, rev_tree) {
var missingForId = req[id].slice(0);
traverseRevTree(rev_tree, function(isLeaf, pos, revHash, ctx, opts2) {
var rev = pos + "-" + revHash;
var idx = missingForId.indexOf(rev);
if (idx === -1) {
return;
}
missingForId.splice(idx, 1);
if (opts2.status !== "available") {
addToMissing(id, rev);
}
});
missingForId.forEach(function(rev) {
addToMissing(id, rev);
});
}
ids.map(function(id) {
this._getRevisionTree(id, function(err, rev_tree) {
if (err && err.status === 404 && err.message === "missing") {
missing.set(id, { missing: req[id] });
} else if (err) {
return callback(err);
} else {
processDoc(id, rev_tree);
}
if (++count === ids.length) {
var missingObj = {};
missing.forEach(function(value2, key) {
missingObj[key] = value2;
});
return callback(null, missingObj);
}
});
}, this);
}).bind(this);
this.bulkGet = adapterFun("bulkGet", function(opts, callback) {
bulkGet(this, opts, callback);
}).bind(this);
this.compactDocument = adapterFun("compactDocument", function(docId, maxHeight, callback) {
this._getRevisionTree(docId, (err, revTree) => {
if (err) {
return callback(err);
}
var height = computeHeight(revTree);
var candidates = [];
var revs = [];
Object.keys(height).forEach(function(rev) {
if (height[rev] > maxHeight) {
candidates.push(rev);
}
});
traverseRevTree(revTree, function(isLeaf, pos, revHash, ctx, opts) {
var rev = pos + "-" + revHash;
if (opts.status === "available" && candidates.indexOf(rev) !== -1) {
revs.push(rev);
}
});
this._doCompaction(docId, revs, callback);
});
}).bind(this);
this.compact = adapterFun("compact", function(opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts = opts || {};
this._compactionQueue = this._compactionQueue || [];
this._compactionQueue.push({ opts, callback });
if (this._compactionQueue.length === 1) {
doNextCompaction(this);
}
}).bind(this);
this.get = adapterFun("get", function(id, opts, cb) {
if (typeof opts === "function") {
cb = opts;
opts = {};
}
if (typeof id !== "string") {
return cb(createError(INVALID_ID));
}
if (isLocalId(id) && typeof this._getLocal === "function") {
return this._getLocal(id, cb);
}
var leaves = [];
const finishOpenRevs = () => {
var result = [];
var count = leaves.length;
if (!count) {
return cb(null, result);
}
leaves.forEach((leaf) => {
this.get(id, {
rev: leaf,
revs: opts.revs,
latest: opts.latest,
attachments: opts.attachments,
binary: opts.binary
}, function(err, doc) {
if (!err) {
var existing;
for (var i2 = 0, l2 = result.length; i2 < l2; i2++) {
if (result[i2].ok && result[i2].ok._rev === doc._rev) {
existing = true;
break;
}
}
if (!existing) {
result.push({ ok: doc });
}
} else {
result.push({ missing: leaf });
}
count--;
if (!count) {
cb(null, result);
}
});
});
};
if (opts.open_revs) {
if (opts.open_revs === "all") {
this._getRevisionTree(id, function(err, rev_tree) {
if (err) {
return cb(err);
}
leaves = collectLeaves(rev_tree).map(function(leaf) {
return leaf.rev;
});
finishOpenRevs();
});
} else {
if (Array.isArray(opts.open_revs)) {
leaves = opts.open_revs;
for (var i = 0; i < leaves.length; i++) {
var l = leaves[i];
if (!(typeof l === "string" && /^\d+-/.test(l))) {
return cb(createError(INVALID_REV));
}
}
finishOpenRevs();
} else {
return cb(createError(UNKNOWN_ERROR$1, "function_clause"));
}
}
return;
}
return this._get(id, opts, (err, result) => {
if (err) {
err.docId = id;
return cb(err);
}
var doc = result.doc;
var metadata = result.metadata;
var ctx = result.ctx;
if (opts.conflicts) {
var conflicts = collectConflicts(metadata);
if (conflicts.length) {
doc._conflicts = conflicts;
}
}
if (isDeleted(metadata, doc._rev)) {
doc._deleted = true;
}
if (opts.revs || opts.revs_info) {
var splittedRev = doc._rev.split("-");
var revNo = parseInt(splittedRev[0], 10);
var revHash = splittedRev[1];
var paths = rootToLeaf(metadata.rev_tree);
var path = null;
for (var i2 = 0; i2 < paths.length; i2++) {
var currentPath = paths[i2];
var hashIndex = currentPath.ids.map(function(x) {
return x.id;
}).indexOf(revHash);
var hashFoundAtRevPos = hashIndex === revNo - 1;
if (hashFoundAtRevPos || !path && hashIndex !== -1) {
path = currentPath;
}
}
if (!path) {
err = new Error("invalid rev tree");
err.docId = id;
return cb(err);
}
var indexOfRev = path.ids.map(function(x) {
return x.id;
}).indexOf(doc._rev.split("-")[1]) + 1;
var howMany = path.ids.length - indexOfRev;
path.ids.splice(indexOfRev, howMany);
path.ids.reverse();
if (opts.revs) {
doc._revisions = {
start: path.pos + path.ids.length - 1,
ids: path.ids.map(function(rev) {
return rev.id;
})
};
}
if (opts.revs_info) {
var pos = path.pos + path.ids.length;
doc._revs_info = path.ids.map(function(rev) {
pos--;
return {
rev: pos + "-" + rev.id,
status: rev.opts.status
};
});
}
}
if (opts.attachments && doc._attachments) {
var attachments = doc._attachments;
var count = Object.keys(attachments).length;
if (count === 0) {
return cb(null, doc);
}
Object.keys(attachments).forEach((key2) => {
this._getAttachment(doc._id, key2, attachments[key2], {
// Previously the revision handling was done in adapter.js
// getAttachment, however since idb-next doesnt we need to
// pass the rev through
rev: doc._rev,
binary: opts.binary,
ctx
}, function(err2, data) {
var att = doc._attachments[key2];
att.data = data;
delete att.stub;
delete att.length;
if (!--count) {
cb(null, doc);
}
});
});
} else {
if (doc._attachments) {
for (var key in doc._attachments) {
if (Object.prototype.hasOwnProperty.call(doc._attachments, key)) {
doc._attachments[key].stub = true;
}
}
}
cb(null, doc);
}
});
}).bind(this);
this.getAttachment = adapterFun("getAttachment", function(docId, attachmentId, opts, callback) {
if (opts instanceof Function) {
callback = opts;
opts = {};
}
this._get(docId, opts, (err, res) => {
if (err) {
return callback(err);
}
if (res.doc._attachments && res.doc._attachments[attachmentId]) {
opts.ctx = res.ctx;
opts.binary = true;
this._getAttachment(
docId,
attachmentId,
res.doc._attachments[attachmentId],
opts,
callback
);
} else {
return callback(createError(MISSING_DOC));
}
});
}).bind(this);
this.allDocs = adapterFun("allDocs", function(opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts.skip = typeof opts.skip !== "undefined" ? opts.skip : 0;
if (opts.start_key) {
opts.startkey = opts.start_key;
}
if (opts.end_key) {
opts.endkey = opts.end_key;
}
if ("keys" in opts) {
if (!Array.isArray(opts.keys)) {
return callback(new TypeError("options.keys must be an array"));
}
var incompatibleOpt = ["startkey", "endkey", "key"].filter(function(incompatibleOpt2) {
return incompatibleOpt2 in opts;
})[0];
if (incompatibleOpt) {
callback(createError(
QUERY_PARSE_ERROR,
"Query parameter `" + incompatibleOpt + "` is not compatible with multi-get"
));
return;
}
if (!isRemote$1(this)) {
allDocsKeysParse(opts);
if (opts.keys.length === 0) {
return this._allDocs({ limit: 0 }, callback);
}
}
}
return this._allDocs(opts, callback);
}).bind(this);
this.close = adapterFun("close", function(callback) {
this._closed = true;
this.emit("closed");
return this._close(callback);
}).bind(this);
this.info = adapterFun("info", function(callback) {
this._info((err, info) => {
if (err) {
return callback(err);
}
info.db_name = info.db_name || this.name;
info.auto_compaction = !!(this.auto_compaction && !isRemote$1(this));
info.adapter = this.adapter;
callback(null, info);
});
}).bind(this);
this.id = adapterFun("id", function(callback) {
return this._id(callback);
}).bind(this);
this.bulkDocs = adapterFun("bulkDocs", function(req, opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts = opts || {};
if (Array.isArray(req)) {
req = {
docs: req
};
}
if (!req || !req.docs || !Array.isArray(req.docs)) {
return callback(createError(MISSING_BULK_DOCS));
}
for (var i = 0; i < req.docs.length; ++i) {
if (typeof req.docs[i] !== "object" || Array.isArray(req.docs[i])) {
return callback(createError(NOT_AN_OBJECT));
}
}
var attachmentError;
req.docs.forEach(function(doc) {
if (doc._attachments) {
Object.keys(doc._attachments).forEach(function(name) {
attachmentError = attachmentError || attachmentNameError(name);
if (!doc._attachments[name].content_type) {
guardedConsole$1("warn", "Attachment", name, "on document", doc._id, "is missing content_type");
}
});
}
});
if (attachmentError) {
return callback(createError(BAD_REQUEST, attachmentError));
}
if (!("new_edits" in opts)) {
if ("new_edits" in req) {
opts.new_edits = req.new_edits;
} else {
opts.new_edits = true;
}
}
var adapter = this;
if (!opts.new_edits && !isRemote$1(adapter)) {
req.docs.sort(compareByIdThenRev);
}
cleanDocs(req.docs);
var ids = req.docs.map(function(doc) {
return doc._id;
});
this._bulkDocs(req, opts, function(err, res) {
if (err) {
return callback(err);
}
if (!opts.new_edits) {
res = res.filter(function(x) {
return x.error;
});
}
if (!isRemote$1(adapter)) {
for (var i2 = 0, l = res.length; i2 < l; i2++) {
res[i2].id = res[i2].id || ids[i2];
}
}
callback(null, res);
});
}).bind(this);
this.registerDependentDatabase = adapterFun("registerDependentDatabase", function(dependentDb, callback) {
var dbOptions = clone$1(this.__opts);
if (this.__opts.view_adapter) {
dbOptions.adapter = this.__opts.view_adapter;
}
var depDB = new this.constructor(dependentDb, dbOptions);
function diffFun(doc) {
doc.dependentDbs = doc.dependentDbs || {};
if (doc.dependentDbs[dependentDb]) {
return false;
}
doc.dependentDbs[dependentDb] = true;
return doc;
}
upsert$1(this, "_local/_pouch_dependentDbs", diffFun).then(function() {
callback(null, { db: depDB });
}).catch(callback);
}).bind(this);
this.destroy = adapterFun("destroy", function(opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
var usePrefix = "use_prefix" in this ? this.use_prefix : true;
const destroyDb = () => {
this._destroy(opts, (err, resp) => {
if (err) {
return callback(err);
}
this._destroyed = true;
this.emit("destroyed");
callback(null, resp || { "ok": true });
});
};
if (isRemote$1(this)) {
return destroyDb();
}
this.get("_local/_pouch_dependentDbs", (err, localDoc) => {
if (err) {
if (err.status !== 404) {
return callback(err);
} else {
return destroyDb();
}
}
var dependentDbs = localDoc.dependentDbs;
var PouchDB2 = this.constructor;
var deletedMap = Object.keys(dependentDbs).map((name) => {
var trueName = usePrefix ? name.replace(new RegExp("^" + PouchDB2.prefix), "") : name;
return new PouchDB2(trueName, this.__opts).destroy();
});
Promise.all(deletedMap).then(destroyDb, callback);
});
}).bind(this);
}
_compact(opts, callback) {
var changesOpts = {
return_docs: false,
last_seq: opts.last_seq || 0
};
var promises = [];
var taskId;
var compactedDocs = 0;
const onChange = (row) => {
this.activeTasks.update(taskId, {
completed_items: ++compactedDocs
});
promises.push(this.compactDocument(row.id, 0));
};
const onError = (err) => {
this.activeTasks.remove(taskId, err);
callback(err);
};
const onComplete = (resp) => {
var lastSeq = resp.last_seq;
Promise.all(promises).then(() => {
return upsert$1(this, "_local/compaction", (doc) => {
if (!doc.last_seq || doc.last_seq < lastSeq) {
doc.last_seq = lastSeq;
return doc;
}
return false;
});
}).then(() => {
this.activeTasks.remove(taskId);
callback(null, { ok: true });
}).catch(onError);
};
this.info().then((info) => {
taskId = this.activeTasks.add({
name: "database_compaction",
total_items: info.update_seq - changesOpts.last_seq
});
this.changes(changesOpts).on("change", onChange).on("complete", onComplete).on("error", onError);
});
}
changes(opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts = opts || {};
opts.return_docs = "return_docs" in opts ? opts.return_docs : !opts.live;
return new Changes$1(this, opts, callback);
}
type() {
return typeof this._type === "function" ? this._type() : this.adapter;
}
}
AbstractPouchDB.prototype.purge = adapterFun("_purge", function(docId, rev, callback) {
if (typeof this._purge === "undefined") {
return callback(createError(UNKNOWN_ERROR$1, "Purge is not implemented in the " + this.adapter + " adapter."));
}
var self2 = this;
self2._getRevisionTree(docId, (error, revs) => {
if (error) {
return callback(error);
}
if (!revs) {
return callback(createError(MISSING_DOC));
}
let path;
try {
path = findPathToLeaf(revs, rev);
} catch (error2) {
return callback(error2.message || error2);
}
self2._purge(docId, path, (error2, result) => {
if (error2) {
return callback(error2);
} else {
appendPurgeSeq(self2, docId, rev).then(function() {
return callback(null, result);
});
}
});
});
});
let TaskQueue$1 = class TaskQueue {
constructor() {
this.isReady = false;
this.failed = false;
this.queue = [];
}
execute() {
var fun;
if (this.failed) {
while (fun = this.queue.shift()) {
fun(this.failed);
}
} else {
while (fun = this.queue.shift()) {
fun();
}
}
}
fail(err) {
this.failed = err;
this.execute();
}
ready(db) {
this.isReady = true;
this.db = db;
this.execute();
}
addTask(fun) {
this.queue.push(fun);
if (this.failed) {
this.execute();
}
}
};
function parseAdapter(name, opts) {
var match2 = name.match(/([a-z-]*):\/\/(.*)/);
if (match2) {
return {
name: /https?/.test(match2[1]) ? match2[1] + "://" + match2[2] : match2[2],
adapter: match2[1]
};
}
var adapters = PouchDB.adapters;
var preferredAdapters = PouchDB.preferredAdapters;
var prefix = PouchDB.prefix;
var adapterName = opts.adapter;
if (!adapterName) {
for (var i = 0; i < preferredAdapters.length; ++i) {
adapterName = preferredAdapters[i];
if (adapterName === "idb" && "websql" in adapters && hasLocalStorage() && localStorage["_pouch__websqldb_" + prefix + name]) {
guardedConsole$1("log", 'PouchDB is downgrading "' + name + '" to WebSQL to avoid data loss, because it was already opened with WebSQL.');
continue;
}
break;
}
}
var adapter = adapters[adapterName];
var usePrefix = adapter && "use_prefix" in adapter ? adapter.use_prefix : true;
return {
name: usePrefix ? prefix + name : name,
adapter: adapterName
};
}
function inherits(A, B) {
A.prototype = Object.create(B.prototype, {
constructor: { value: A }
});
}
function createClass(parent, init2) {
let klass = function(...args) {
if (!(this instanceof klass)) {
return new klass(...args);
}
init2.apply(this, args);
};
inherits(klass, parent);
return klass;
}
function prepareForDestruction(self2) {
function onDestroyed(from_constructor) {
self2.removeListener("closed", onClosed);
if (!from_constructor) {
self2.constructor.emit("destroyed", self2.name);
}
}
function onClosed() {
self2.removeListener("destroyed", onDestroyed);
self2.constructor.emit("unref", self2);
}
self2.once("destroyed", onDestroyed);
self2.once("closed", onClosed);
self2.constructor.emit("ref", self2);
}
class PouchInternal extends AbstractPouchDB {
constructor(name, opts) {
super();
this._setup(name, opts);
}
_setup(name, opts) {
super._setup();
opts = opts || {};
if (name && typeof name === "object") {
opts = name;
name = opts.name;
delete opts.name;
}
if (opts.deterministic_revs === void 0) {
opts.deterministic_revs = true;
}
this.__opts = opts = clone$1(opts);
this.auto_compaction = opts.auto_compaction;
this.purged_infos_limit = opts.purged_infos_limit || 1e3;
this.prefix = PouchDB.prefix;
if (typeof name !== "string") {
throw new Error("Missing/invalid DB name");
}
var prefixedName = (opts.prefix || "") + name;
var backend = parseAdapter(prefixedName, opts);
opts.name = backend.name;
opts.adapter = opts.adapter || backend.adapter;
this.name = name;
this._adapter = opts.adapter;
PouchDB.emit("debug", ["adapter", "Picked adapter: ", opts.adapter]);
if (!PouchDB.adapters[opts.adapter] || !PouchDB.adapters[opts.adapter].valid()) {
throw new Error("Invalid Adapter: " + opts.adapter);
}
if (opts.view_adapter) {
if (!PouchDB.adapters[opts.view_adapter] || !PouchDB.adapters[opts.view_adapter].valid()) {
throw new Error("Invalid View Adapter: " + opts.view_adapter);
}
}
this.taskqueue = new TaskQueue$1();
this.adapter = opts.adapter;
PouchDB.adapters[opts.adapter].call(this, opts, (err) => {
if (err) {
return this.taskqueue.fail(err);
}
prepareForDestruction(this);
this.emit("created", this);
PouchDB.emit("created", this.name);
this.taskqueue.ready(this);
});
}
}
const PouchDB = createClass(PouchInternal, function(name, opts) {
PouchInternal.prototype._setup.call(this, name, opts);
});
var a = typeof AbortController !== "undefined" ? AbortController : function() {
return { abort: function() {
} };
};
var f$1 = fetch;
var h$1 = Headers;
class ActiveTasks {
constructor() {
this.tasks = {};
}
list() {
return Object.values(this.tasks);
}
add(task) {
const id = v4();
this.tasks[id] = {
id,
name: task.name,
total_items: task.total_items,
created_at: (/* @__PURE__ */ new Date()).toJSON()
};
return id;
}
get(id) {
return this.tasks[id];
}
/* eslint-disable no-unused-vars */
remove(id, reason) {
delete this.tasks[id];
return this.tasks;
}
update(id, updatedTask) {
const task = this.tasks[id];
if (typeof task !== "undefined") {
const mergedTask = {
id: task.id,
name: task.name,
created_at: task.created_at,
total_items: updatedTask.total_items || task.total_items,
completed_items: updatedTask.completed_items || task.completed_items,
updated_at: (/* @__PURE__ */ new Date()).toJSON()
};
this.tasks[id] = mergedTask;
}
return this.tasks;
}
}
PouchDB.adapters = {};
PouchDB.preferredAdapters = [];
PouchDB.prefix = "_pouch_";
var eventEmitter = new eventsExports();
function setUpEventEmitter(Pouch) {
Object.keys(eventsExports.prototype).forEach(function(key) {
if (typeof eventsExports.prototype[key] === "function") {
Pouch[key] = eventEmitter[key].bind(eventEmitter);
}
});
var destructListeners = Pouch._destructionListeners = new ExportedMap$1();
Pouch.on("ref", function onConstructorRef(db) {
if (!destructListeners.has(db.name)) {
destructListeners.set(db.name, []);
}
destructListeners.get(db.name).push(db);
});
Pouch.on("unref", function onConstructorUnref(db) {
if (!destructListeners.has(db.name)) {
return;
}
var dbList = destructListeners.get(db.name);
var pos = dbList.indexOf(db);
if (pos < 0) {
return;
}
dbList.splice(pos, 1);
if (dbList.length > 1) {
destructListeners.set(db.name, dbList);
} else {
destructListeners.delete(db.name);
}
});
Pouch.on("destroyed", function onConstructorDestroyed(name) {
if (!destructListeners.has(name)) {
return;
}
var dbList = destructListeners.get(name);
destructListeners.delete(name);
dbList.forEach(function(db) {
db.emit("destroyed", true);
});
});
}
setUpEventEmitter(PouchDB);
PouchDB.adapter = function(id, obj, addToPreferredAdapters) {
if (obj.valid()) {
PouchDB.adapters[id] = obj;
if (addToPreferredAdapters) {
PouchDB.preferredAdapters.push(id);
}
}
};
PouchDB.plugin = function(obj) {
if (typeof obj === "function") {
obj(PouchDB);
} else if (typeof obj !== "object" || Object.keys(obj).length === 0) {
throw new Error('Invalid plugin: got "' + obj + '", expected an object or a function');
} else {
Object.keys(obj).forEach(function(id) {
PouchDB.prototype[id] = obj[id];
});
}
if (this.__defaults) {
PouchDB.__defaults = $inject_Object_assign({}, this.__defaults);
}
return PouchDB;
};
PouchDB.defaults = function(defaultOpts) {
let PouchWithDefaults = createClass(PouchDB, function(name, opts) {
opts = opts || {};
if (name && typeof name === "object") {
opts = name;
name = opts.name;
delete opts.name;
}
opts = $inject_Object_assign({}, PouchWithDefaults.__defaults, opts);
PouchDB.call(this, name, opts);
});
PouchWithDefaults.preferredAdapters = PouchDB.preferredAdapters.slice();
Object.keys(PouchDB).forEach(function(key) {
if (!(key in PouchWithDefaults)) {
PouchWithDefaults[key] = PouchDB[key];
}
});
PouchWithDefaults.__defaults = $inject_Object_assign({}, this.__defaults, defaultOpts);
return PouchWithDefaults;
};
PouchDB.fetch = function(url, opts) {
return f$1(url, opts);
};
PouchDB.prototype.activeTasks = PouchDB.activeTasks = new ActiveTasks();
var version = "8.0.1";
function getFieldFromDoc$1(doc, parsedField) {
var value2 = doc;
for (var i = 0, len2 = parsedField.length; i < len2; i++) {
var key = parsedField[i];
value2 = value2[key];
if (!value2) {
break;
}
}
return value2;
}
function compare$1$1(left, right) {
return left < right ? -1 : left > right ? 1 : 0;
}
function parseField$1(fieldName) {
var fields = [];
var current = "";
for (var i = 0, len2 = fieldName.length; i < len2; i++) {
var ch = fieldName[i];
if (i > 0 && fieldName[i - 1] === "\\" && (ch === "$" || ch === ".")) {
current = current.substring(0, current.length - 1) + ch;
} else if (ch === ".") {
fields.push(current);
current = "";
} else {
current += ch;
}
}
fields.push(current);
return fields;
}
var combinationFields$1 = ["$or", "$nor", "$not"];
function isCombinationalField$1(field) {
return combinationFields$1.indexOf(field) > -1;
}
function getKey$1(obj) {
return Object.keys(obj)[0];
}
function getValue$1(obj) {
return obj[getKey$1(obj)];
}
function mergeAndedSelectors$1(selectors) {
var res = {};
var first = { $or: true, $nor: true };
selectors.forEach(function(selector) {
Object.keys(selector).forEach(function(field) {
var matcher = selector[field];
if (typeof matcher !== "object") {
matcher = { $eq: matcher };
}
if (isCombinationalField$1(field)) {
if (matcher instanceof Array) {
if (first[field]) {
first[field] = false;
res[field] = matcher;
return;
}
var entries = [];
res[field].forEach(function(existing) {
Object.keys(matcher).forEach(function(key) {
var m = matcher[key];
var longest = Math.max(Object.keys(existing).length, Object.keys(m).length);
var merged = mergeAndedSelectors$1([existing, m]);
if (Object.keys(merged).length <= longest) {
return;
}
entries.push(merged);
});
});
res[field] = entries;
} else {
res[field] = mergeAndedSelectors$1([matcher]);
}
} else {
var fieldMatchers = res[field] = res[field] || {};
Object.keys(matcher).forEach(function(operator) {
var value2 = matcher[operator];
if (operator === "$gt" || operator === "$gte") {
return mergeGtGte$1(operator, value2, fieldMatchers);
} else if (operator === "$lt" || operator === "$lte") {
return mergeLtLte$1(operator, value2, fieldMatchers);
} else if (operator === "$ne") {
return mergeNe$1(value2, fieldMatchers);
} else if (operator === "$eq") {
return mergeEq$1(value2, fieldMatchers);
} else if (operator === "$regex") {
return mergeRegex$1(value2, fieldMatchers);
}
fieldMatchers[operator] = value2;
});
}
});
});
return res;
}
function mergeGtGte$1(operator, value2, fieldMatchers) {
if (typeof fieldMatchers.$eq !== "undefined") {
return;
}
if (typeof fieldMatchers.$gte !== "undefined") {
if (operator === "$gte") {
if (value2 > fieldMatchers.$gte) {
fieldMatchers.$gte = value2;
}
} else {
if (value2 >= fieldMatchers.$gte) {
delete fieldMatchers.$gte;
fieldMatchers.$gt = value2;
}
}
} else if (typeof fieldMatchers.$gt !== "undefined") {
if (operator === "$gte") {
if (value2 > fieldMatchers.$gt) {
delete fieldMatchers.$gt;
fieldMatchers.$gte = value2;
}
} else {
if (value2 > fieldMatchers.$gt) {
fieldMatchers.$gt = value2;
}
}
} else {
fieldMatchers[operator] = value2;
}
}
function mergeLtLte$1(operator, value2, fieldMatchers) {
if (typeof fieldMatchers.$eq !== "undefined") {
return;
}
if (typeof fieldMatchers.$lte !== "undefined") {
if (operator === "$lte") {
if (value2 < fieldMatchers.$lte) {
fieldMatchers.$lte = value2;
}
} else {
if (value2 <= fieldMatchers.$lte) {
delete fieldMatchers.$lte;
fieldMatchers.$lt = value2;
}
}
} else if (typeof fieldMatchers.$lt !== "undefined") {
if (operator === "$lte") {
if (value2 < fieldMatchers.$lt) {
delete fieldMatchers.$lt;
fieldMatchers.$lte = value2;
}
} else {
if (value2 < fieldMatchers.$lt) {
fieldMatchers.$lt = value2;
}
}
} else {
fieldMatchers[operator] = value2;
}
}
function mergeNe$1(value2, fieldMatchers) {
if ("$ne" in fieldMatchers) {
fieldMatchers.$ne.push(value2);
} else {
fieldMatchers.$ne = [value2];
}
}
function mergeEq$1(value2, fieldMatchers) {
delete fieldMatchers.$gt;
delete fieldMatchers.$gte;
delete fieldMatchers.$lt;
delete fieldMatchers.$lte;
delete fieldMatchers.$ne;
fieldMatchers.$eq = value2;
}
function mergeRegex$1(value2, fieldMatchers) {
if ("$regex" in fieldMatchers) {
fieldMatchers.$regex.push(value2);
} else {
fieldMatchers.$regex = [value2];
}
}
function mergeAndedSelectorsNested$1(obj) {
for (var prop in obj) {
if (Array.isArray(obj)) {
for (var i in obj) {
if (obj[i]["$and"]) {
obj[i] = mergeAndedSelectors$1(obj[i]["$and"]);
}
}
}
var value2 = obj[prop];
if (typeof value2 === "object") {
mergeAndedSelectorsNested$1(value2);
}
}
return obj;
}
function isAndInSelector$1(obj, isAnd) {
for (var prop in obj) {
if (prop === "$and") {
isAnd = true;
}
var value2 = obj[prop];
if (typeof value2 === "object") {
isAnd = isAndInSelector$1(value2, isAnd);
}
}
return isAnd;
}
function massageSelector$1(input) {
var result = clone$1(input);
if (isAndInSelector$1(result, false)) {
result = mergeAndedSelectorsNested$1(result);
if ("$and" in result) {
result = mergeAndedSelectors$1(result["$and"]);
}
}
["$or", "$nor"].forEach(function(orOrNor) {
if (orOrNor in result) {
result[orOrNor].forEach(function(subSelector) {
var fields2 = Object.keys(subSelector);
for (var i2 = 0; i2 < fields2.length; i2++) {
var field2 = fields2[i2];
var matcher2 = subSelector[field2];
if (typeof matcher2 !== "object" || matcher2 === null) {
subSelector[field2] = { $eq: matcher2 };
}
}
});
}
});
if ("$not" in result) {
result["$not"] = mergeAndedSelectors$1([result["$not"]]);
}
var fields = Object.keys(result);
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var matcher = result[field];
if (typeof matcher !== "object" || matcher === null) {
matcher = { $eq: matcher };
}
result[field] = matcher;
}
normalizeArrayOperators$1(result);
return result;
}
function normalizeArrayOperators$1(selector) {
Object.keys(selector).forEach(function(field) {
var matcher = selector[field];
if (Array.isArray(matcher)) {
matcher.forEach(function(matcherItem) {
if (matcherItem && typeof matcherItem === "object") {
normalizeArrayOperators$1(matcherItem);
}
});
} else if (field === "$ne") {
selector.$ne = [matcher];
} else if (field === "$regex") {
selector.$regex = [matcher];
} else if (matcher && typeof matcher === "object") {
normalizeArrayOperators$1(matcher);
}
});
}
function pad$1(str, padWith, upToLength) {
var padding = "";
var targetLength = upToLength - str.length;
while (padding.length < targetLength) {
padding += padWith;
}
return padding;
}
function padLeft$1(str, padWith, upToLength) {
var padding = pad$1(str, padWith, upToLength);
return padding + str;
}
var MIN_MAGNITUDE$1 = -324;
var MAGNITUDE_DIGITS$1 = 3;
var SEP$1 = "";
function collate$1(a2, b) {
if (a2 === b) {
return 0;
}
a2 = normalizeKey$1(a2);
b = normalizeKey$1(b);
var ai = collationIndex$1(a2);
var bi = collationIndex$1(b);
if (ai - bi !== 0) {
return ai - bi;
}
switch (typeof a2) {
case "number":
return a2 - b;
case "boolean":
return a2 < b ? -1 : 1;
case "string":
return stringCollate$1(a2, b);
}
return Array.isArray(a2) ? arrayCollate$1(a2, b) : objectCollate$1(a2, b);
}
function normalizeKey$1(key) {
switch (typeof key) {
case "undefined":
return null;
case "number":
if (key === Infinity || key === -Infinity || isNaN(key)) {
return null;
}
return key;
case "object":
var origKey = key;
if (Array.isArray(key)) {
var len2 = key.length;
key = new Array(len2);
for (var i = 0; i < len2; i++) {
key[i] = normalizeKey$1(origKey[i]);
}
} else if (key instanceof Date) {
return key.toJSON();
} else if (key !== null) {
key = {};
for (var k in origKey) {
if (Object.prototype.hasOwnProperty.call(origKey, k)) {
var val = origKey[k];
if (typeof val !== "undefined") {
key[k] = normalizeKey$1(val);
}
}
}
}
}
return key;
}
function indexify$1(key) {
if (key !== null) {
switch (typeof key) {
case "boolean":
return key ? 1 : 0;
case "number":
return numToIndexableString$1(key);
case "string":
return key.replace(/\u0002/g, "").replace(/\u0001/g, "").replace(/\u0000/g, "");
case "object":
var isArray2 = Array.isArray(key);
var arr = isArray2 ? key : Object.keys(key);
var i = -1;
var len2 = arr.length;
var result = "";
if (isArray2) {
while (++i < len2) {
result += toIndexableString$1(arr[i]);
}
} else {
while (++i < len2) {
var objKey = arr[i];
result += toIndexableString$1(objKey) + toIndexableString$1(key[objKey]);
}
}
return result;
}
}
return "";
}
function toIndexableString$1(key) {
var zero = "\0";
key = normalizeKey$1(key);
return collationIndex$1(key) + SEP$1 + indexify$1(key) + zero;
}
function parseNumber$1(str, i) {
var originalIdx = i;
var num;
var zero = str[i] === "1";
if (zero) {
num = 0;
i++;
} else {
var neg = str[i] === "0";
i++;
var numAsString = "";
var magAsString = str.substring(i, i + MAGNITUDE_DIGITS$1);
var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE$1;
if (neg) {
magnitude = -magnitude;
}
i += MAGNITUDE_DIGITS$1;
while (true) {
var ch = str[i];
if (ch === "\0") {
break;
} else {
numAsString += ch;
}
i++;
}
numAsString = numAsString.split(".");
if (numAsString.length === 1) {
num = parseInt(numAsString, 10);
} else {
num = parseFloat(numAsString[0] + "." + numAsString[1]);
}
if (neg) {
num = num - 10;
}
if (magnitude !== 0) {
num = parseFloat(num + "e" + magnitude);
}
}
return { num, length: i - originalIdx };
}
function pop$1(stack, metaStack) {
var obj = stack.pop();
if (metaStack.length) {
var lastMetaElement = metaStack[metaStack.length - 1];
if (obj === lastMetaElement.element) {
metaStack.pop();
lastMetaElement = metaStack[metaStack.length - 1];
}
var element = lastMetaElement.element;
var lastElementIndex = lastMetaElement.index;
if (Array.isArray(element)) {
element.push(obj);
} else if (lastElementIndex === stack.length - 2) {
var key = stack.pop();
element[key] = obj;
} else {
stack.push(obj);
}
}
}
function parseIndexableString$1(str) {
var stack = [];
var metaStack = [];
var i = 0;
while (true) {
var collationIndex2 = str[i++];
if (collationIndex2 === "\0") {
if (stack.length === 1) {
return stack.pop();
} else {
pop$1(stack, metaStack);
continue;
}
}
switch (collationIndex2) {
case "1":
stack.push(null);
break;
case "2":
stack.push(str[i] === "1");
i++;
break;
case "3":
var parsedNum = parseNumber$1(str, i);
stack.push(parsedNum.num);
i += parsedNum.length;
break;
case "4":
var parsedStr = "";
while (true) {
var ch = str[i];
if (ch === "\0") {
break;
}
parsedStr += ch;
i++;
}
parsedStr = parsedStr.replace(/\u0001\u0001/g, "\0").replace(/\u0001\u0002/g, "").replace(/\u0002\u0002/g, "");
stack.push(parsedStr);
break;
case "5":
var arrayElement = { element: [], index: stack.length };
stack.push(arrayElement.element);
metaStack.push(arrayElement);
break;
case "6":
var objElement = { element: {}, index: stack.length };
stack.push(objElement.element);
metaStack.push(objElement);
break;
default:
throw new Error(
"bad collationIndex or unexpectedly reached end of input: " + collationIndex2
);
}
}
}
function arrayCollate$1(a2, b) {
var len2 = Math.min(a2.length, b.length);
for (var i = 0; i < len2; i++) {
var sort = collate$1(a2[i], b[i]);
if (sort !== 0) {
return sort;
}
}
return a2.length === b.length ? 0 : a2.length > b.length ? 1 : -1;
}
function stringCollate$1(a2, b) {
return a2 === b ? 0 : a2 > b ? 1 : -1;
}
function objectCollate$1(a2, b) {
var ak = Object.keys(a2), bk = Object.keys(b);
var len2 = Math.min(ak.length, bk.length);
for (var i = 0; i < len2; i++) {
var sort = collate$1(ak[i], bk[i]);
if (sort !== 0) {
return sort;
}
sort = collate$1(a2[ak[i]], b[bk[i]]);
if (sort !== 0) {
return sort;
}
}
return ak.length === bk.length ? 0 : ak.length > bk.length ? 1 : -1;
}
function collationIndex$1(x) {
var id = ["boolean", "number", "string", "object"];
var idx = id.indexOf(typeof x);
if (~idx) {
if (x === null) {
return 1;
}
if (Array.isArray(x)) {
return 5;
}
return idx < 3 ? idx + 2 : idx + 3;
}
if (Array.isArray(x)) {
return 5;
}
}
function numToIndexableString$1(num) {
if (num === 0) {
return "1";
}
var expFormat = num.toExponential().split(/e\+?/);
var magnitude = parseInt(expFormat[1], 10);
var neg = num < 0;
var result = neg ? "0" : "2";
var magForComparison = (neg ? -magnitude : magnitude) - MIN_MAGNITUDE$1;
var magString = padLeft$1(magForComparison.toString(), "0", MAGNITUDE_DIGITS$1);
result += SEP$1 + magString;
var factor = Math.abs(parseFloat(expFormat[0]));
if (neg) {
factor = 10 - factor;
}
var factorStr = factor.toFixed(20);
factorStr = factorStr.replace(/\.?0+$/, "");
result += SEP$1 + factorStr;
return result;
}
function createFieldSorter$1(sort) {
function getFieldValuesAsArray(doc) {
return sort.map(function(sorting) {
var fieldName = getKey$1(sorting);
var parsedField = parseField$1(fieldName);
var docFieldValue = getFieldFromDoc$1(doc, parsedField);
return docFieldValue;
});
}
return function(aRow, bRow) {
var aFieldValues = getFieldValuesAsArray(aRow.doc);
var bFieldValues = getFieldValuesAsArray(bRow.doc);
var collation = collate$1(aFieldValues, bFieldValues);
if (collation !== 0) {
return collation;
}
return compare$1$1(aRow.doc._id, bRow.doc._id);
};
}
function filterInMemoryFields$1(rows, requestDef, inMemoryFields) {
rows = rows.filter(function(row) {
return rowFilter$1(row.doc, requestDef.selector, inMemoryFields);
});
if (requestDef.sort) {
var fieldSorter = createFieldSorter$1(requestDef.sort);
rows = rows.sort(fieldSorter);
if (typeof requestDef.sort[0] !== "string" && getValue$1(requestDef.sort[0]) === "desc") {
rows = rows.reverse();
}
}
if ("limit" in requestDef || "skip" in requestDef) {
var skip = requestDef.skip || 0;
var limit = ("limit" in requestDef ? requestDef.limit : rows.length) + skip;
rows = rows.slice(skip, limit);
}
return rows;
}
function rowFilter$1(doc, selector, inMemoryFields) {
return inMemoryFields.every(function(field) {
var matcher = selector[field];
var parsedField = parseField$1(field);
var docFieldValue = getFieldFromDoc$1(doc, parsedField);
if (isCombinationalField$1(field)) {
return matchCominationalSelector$1(field, matcher, doc);
}
return matchSelector$1(matcher, doc, parsedField, docFieldValue);
});
}
function matchSelector$1(matcher, doc, parsedField, docFieldValue) {
if (!matcher) {
return true;
}
if (typeof matcher === "object") {
return Object.keys(matcher).every(function(maybeUserOperator) {
var userValue = matcher[maybeUserOperator];
if (maybeUserOperator.indexOf("$") === 0) {
return match$1(maybeUserOperator, doc, userValue, parsedField, docFieldValue);
} else {
var subParsedField = parseField$1(maybeUserOperator);
if (docFieldValue === void 0 && typeof userValue !== "object" && subParsedField.length > 0) {
return false;
}
var subDocFieldValue = getFieldFromDoc$1(docFieldValue, subParsedField);
if (typeof userValue === "object") {
return matchSelector$1(userValue, doc, parsedField, subDocFieldValue);
}
return match$1("$eq", doc, userValue, subParsedField, subDocFieldValue);
}
});
}
return matcher === docFieldValue;
}
function matchCominationalSelector$1(field, matcher, doc) {
if (field === "$or") {
return matcher.some(function(orMatchers) {
return rowFilter$1(doc, orMatchers, Object.keys(orMatchers));
});
}
if (field === "$not") {
return !rowFilter$1(doc, matcher, Object.keys(matcher));
}
return !matcher.find(function(orMatchers) {
return rowFilter$1(doc, orMatchers, Object.keys(orMatchers));
});
}
function match$1(userOperator, doc, userValue, parsedField, docFieldValue) {
if (!matchers$1[userOperator]) {
throw new Error('unknown operator "' + userOperator + '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');
}
return matchers$1[userOperator](doc, userValue, parsedField, docFieldValue);
}
function fieldExists$1(docFieldValue) {
return typeof docFieldValue !== "undefined" && docFieldValue !== null;
}
function fieldIsNotUndefined$1(docFieldValue) {
return typeof docFieldValue !== "undefined";
}
function modField$1(docFieldValue, userValue) {
if (typeof docFieldValue !== "number" || parseInt(docFieldValue, 10) !== docFieldValue) {
return false;
}
var divisor = userValue[0];
var mod = userValue[1];
return docFieldValue % divisor === mod;
}
function arrayContainsValue$1(docFieldValue, userValue) {
return userValue.some(function(val) {
if (docFieldValue instanceof Array) {
return docFieldValue.some(function(docFieldValueItem) {
return collate$1(val, docFieldValueItem) === 0;
});
}
return collate$1(val, docFieldValue) === 0;
});
}
function arrayContainsAllValues$1(docFieldValue, userValue) {
return userValue.every(function(val) {
return docFieldValue.some(function(docFieldValueItem) {
return collate$1(val, docFieldValueItem) === 0;
});
});
}
function arraySize$1(docFieldValue, userValue) {
return docFieldValue.length === userValue;
}
function regexMatch$1(docFieldValue, userValue) {
var re = new RegExp(userValue);
return re.test(docFieldValue);
}
function typeMatch$1(docFieldValue, userValue) {
switch (userValue) {
case "null":
return docFieldValue === null;
case "boolean":
return typeof docFieldValue === "boolean";
case "number":
return typeof docFieldValue === "number";
case "string":
return typeof docFieldValue === "string";
case "array":
return docFieldValue instanceof Array;
case "object":
return {}.toString.call(docFieldValue) === "[object Object]";
}
}
var matchers$1 = {
"$elemMatch": function(doc, userValue, parsedField, docFieldValue) {
if (!Array.isArray(docFieldValue)) {
return false;
}
if (docFieldValue.length === 0) {
return false;
}
if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) {
return docFieldValue.some(function(val) {
return rowFilter$1(val, userValue, Object.keys(userValue));
});
}
return docFieldValue.some(function(val) {
return matchSelector$1(userValue, doc, parsedField, val);
});
},
"$allMatch": function(doc, userValue, parsedField, docFieldValue) {
if (!Array.isArray(docFieldValue)) {
return false;
}
if (docFieldValue.length === 0) {
return false;
}
if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) {
return docFieldValue.every(function(val) {
return rowFilter$1(val, userValue, Object.keys(userValue));
});
}
return docFieldValue.every(function(val) {
return matchSelector$1(userValue, doc, parsedField, val);
});
},
"$eq": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined$1(docFieldValue) && collate$1(docFieldValue, userValue) === 0;
},
"$gte": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined$1(docFieldValue) && collate$1(docFieldValue, userValue) >= 0;
},
"$gt": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined$1(docFieldValue) && collate$1(docFieldValue, userValue) > 0;
},
"$lte": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined$1(docFieldValue) && collate$1(docFieldValue, userValue) <= 0;
},
"$lt": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined$1(docFieldValue) && collate$1(docFieldValue, userValue) < 0;
},
"$exists": function(doc, userValue, parsedField, docFieldValue) {
if (userValue) {
return fieldIsNotUndefined$1(docFieldValue);
}
return !fieldIsNotUndefined$1(docFieldValue);
},
"$mod": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists$1(docFieldValue) && modField$1(docFieldValue, userValue);
},
"$ne": function(doc, userValue, parsedField, docFieldValue) {
return userValue.every(function(neValue) {
return collate$1(docFieldValue, neValue) !== 0;
});
},
"$in": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists$1(docFieldValue) && arrayContainsValue$1(docFieldValue, userValue);
},
"$nin": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists$1(docFieldValue) && !arrayContainsValue$1(docFieldValue, userValue);
},
"$size": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists$1(docFieldValue) && Array.isArray(docFieldValue) && arraySize$1(docFieldValue, userValue);
},
"$all": function(doc, userValue, parsedField, docFieldValue) {
return Array.isArray(docFieldValue) && arrayContainsAllValues$1(docFieldValue, userValue);
},
"$regex": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists$1(docFieldValue) && typeof docFieldValue == "string" && userValue.every(function(regexValue) {
return regexMatch$1(docFieldValue, regexValue);
});
},
"$type": function(doc, userValue, parsedField, docFieldValue) {
return typeMatch$1(docFieldValue, userValue);
}
};
function matchesSelector$1(doc, selector) {
if (typeof selector !== "object") {
throw new Error("Selector error: expected a JSON object");
}
selector = massageSelector$1(selector);
var row = {
"doc": doc
};
var rowsMatched = filterInMemoryFields$1([row], { "selector": selector }, Object.keys(selector));
return rowsMatched && rowsMatched.length === 1;
}
function evalFilter(input) {
return scopeEval('"use strict";\nreturn ' + input + ";", {});
}
function evalView(input) {
var code = [
"return function(doc) {",
' "use strict";',
" var emitted = false;",
" var emit = function (a, b) {",
" emitted = true;",
" };",
" var view = " + input + ";",
" view(doc);",
" if (emitted) {",
" return true;",
" }",
"};"
].join("\n");
return scopeEval(code, {});
}
function validate(opts, callback) {
if (opts.selector) {
if (opts.filter && opts.filter !== "_selector") {
var filterName = typeof opts.filter === "string" ? opts.filter : "function";
return callback(new Error('selector invalid for filter "' + filterName + '"'));
}
}
callback();
}
function normalize(opts) {
if (opts.view && !opts.filter) {
opts.filter = "_view";
}
if (opts.selector && !opts.filter) {
opts.filter = "_selector";
}
if (opts.filter && typeof opts.filter === "string") {
if (opts.filter === "_view") {
opts.view = normalizeDesignDocFunctionName(opts.view);
} else {
opts.filter = normalizeDesignDocFunctionName(opts.filter);
}
}
}
function shouldFilter(changesHandler2, opts) {
return opts.filter && typeof opts.filter === "string" && !opts.doc_ids && !isRemote$1(changesHandler2.db);
}
function filter(changesHandler2, opts) {
var callback = opts.complete;
if (opts.filter === "_view") {
if (!opts.view || typeof opts.view !== "string") {
var err = createError(
BAD_REQUEST,
"`view` filter parameter not found or invalid."
);
return callback(err);
}
var viewName = parseDesignDocFunctionName(opts.view);
changesHandler2.db.get("_design/" + viewName[0], function(err2, ddoc) {
if (changesHandler2.isCancelled) {
return callback(null, { status: "cancelled" });
}
if (err2) {
return callback(generateErrorFromResponse$1(err2));
}
var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] && ddoc.views[viewName[1]].map;
if (!mapFun) {
return callback(createError(
MISSING_DOC,
ddoc.views ? "missing json key: " + viewName[1] : "missing json key: views"
));
}
opts.filter = evalView(mapFun);
changesHandler2.doChanges(opts);
});
} else if (opts.selector) {
opts.filter = function(doc) {
return matchesSelector$1(doc, opts.selector);
};
changesHandler2.doChanges(opts);
} else {
var filterName = parseDesignDocFunctionName(opts.filter);
changesHandler2.db.get("_design/" + filterName[0], function(err2, ddoc) {
if (changesHandler2.isCancelled) {
return callback(null, { status: "cancelled" });
}
if (err2) {
return callback(generateErrorFromResponse$1(err2));
}
var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]];
if (!filterFun) {
return callback(createError(
MISSING_DOC,
ddoc && ddoc.filters ? "missing json key: " + filterName[1] : "missing json key: filters"
));
}
opts.filter = evalFilter(filterFun);
changesHandler2.doChanges(opts);
});
}
}
function applyChangesFilterPlugin(PouchDB2) {
PouchDB2._changesFilterPlugin = {
validate,
normalize,
shouldFilter,
filter
};
}
PouchDB.plugin(applyChangesFilterPlugin);
PouchDB.version = version;
function toObject(array) {
return array.reduce(function(obj, item) {
obj[item] = true;
return obj;
}, {});
}
var reservedWords = toObject([
"_id",
"_rev",
"_access",
"_attachments",
"_deleted",
"_revisions",
"_revs_info",
"_conflicts",
"_deleted_conflicts",
"_local_seq",
"_rev_tree",
// replication documents
"_replication_id",
"_replication_state",
"_replication_state_time",
"_replication_state_reason",
"_replication_stats",
// Specific to Couchbase Sync Gateway
"_removed"
]);
var dataWords = toObject([
"_access",
"_attachments",
// replication documents
"_replication_id",
"_replication_state",
"_replication_state_time",
"_replication_state_reason",
"_replication_stats"
]);
function parseRevisionInfo(rev) {
if (!/^\d+-/.test(rev)) {
return createError(INVALID_REV);
}
var idx = rev.indexOf("-");
var left = rev.substring(0, idx);
var right = rev.substring(idx + 1);
return {
prefix: parseInt(left, 10),
id: right
};
}
function makeRevTreeFromRevisions(revisions, opts) {
var pos = revisions.start - revisions.ids.length + 1;
var revisionIds = revisions.ids;
var ids = [revisionIds[0], opts, []];
for (var i = 1, len2 = revisionIds.length; i < len2; i++) {
ids = [revisionIds[i], { status: "missing" }, [ids]];
}
return [{
pos,
ids
}];
}
function parseDoc(doc, newEdits, dbOpts) {
if (!dbOpts) {
dbOpts = {
deterministic_revs: true
};
}
var nRevNum;
var newRevId;
var revInfo;
var opts = { status: "available" };
if (doc._deleted) {
opts.deleted = true;
}
if (newEdits) {
if (!doc._id) {
doc._id = uuid();
}
newRevId = rev$$1(doc, dbOpts.deterministic_revs);
if (doc._rev) {
revInfo = parseRevisionInfo(doc._rev);
if (revInfo.error) {
return revInfo;
}
doc._rev_tree = [{
pos: revInfo.prefix,
ids: [revInfo.id, { status: "missing" }, [[newRevId, opts, []]]]
}];
nRevNum = revInfo.prefix + 1;
} else {
doc._rev_tree = [{
pos: 1,
ids: [newRevId, opts, []]
}];
nRevNum = 1;
}
} else {
if (doc._revisions) {
doc._rev_tree = makeRevTreeFromRevisions(doc._revisions, opts);
nRevNum = doc._revisions.start;
newRevId = doc._revisions.ids[0];
}
if (!doc._rev_tree) {
revInfo = parseRevisionInfo(doc._rev);
if (revInfo.error) {
return revInfo;
}
nRevNum = revInfo.prefix;
newRevId = revInfo.id;
doc._rev_tree = [{
pos: nRevNum,
ids: [newRevId, opts, []]
}];
}
}
invalidIdError(doc._id);
doc._rev = nRevNum + "-" + newRevId;
var result = { metadata: {}, data: {} };
for (var key in doc) {
if (Object.prototype.hasOwnProperty.call(doc, key)) {
var specialKey = key[0] === "_";
if (specialKey && !reservedWords[key]) {
var error = createError(DOC_VALIDATION, key);
error.message = DOC_VALIDATION.message + ": " + key;
throw error;
} else if (specialKey && !dataWords[key]) {
result.metadata[key.slice(1)] = doc[key];
} else {
result.data[key] = doc[key];
}
}
}
return result;
}
function parseBase64(data) {
try {
return thisAtob$1(data);
} catch (e) {
var err = createError(
BAD_ARG,
"Attachment is not a valid base64 string"
);
return { error: err };
}
}
function preprocessString(att, blobType, callback) {
var asBinary = parseBase64(att.data);
if (asBinary.error) {
return callback(asBinary.error);
}
att.length = asBinary.length;
if (blobType === "blob") {
att.data = binStringToBluffer$1(asBinary, att.content_type);
} else if (blobType === "base64") {
att.data = thisBtoa(asBinary);
} else {
att.data = asBinary;
}
binaryMd5(asBinary, function(result) {
att.digest = "md5-" + result;
callback();
});
}
function preprocessBlob(att, blobType, callback) {
binaryMd5(att.data, function(md5) {
att.digest = "md5-" + md5;
att.length = att.data.size || att.data.length || 0;
if (blobType === "binary") {
blobToBinaryString(att.data, function(binString) {
att.data = binString;
callback();
});
} else if (blobType === "base64") {
blobToBase64(att.data, function(b64) {
att.data = b64;
callback();
});
} else {
callback();
}
});
}
function preprocessAttachment(att, blobType, callback) {
if (att.stub) {
return callback();
}
if (typeof att.data === "string") {
preprocessString(att, blobType, callback);
} else {
preprocessBlob(att, blobType, callback);
}
}
function preprocessAttachments(docInfos, blobType, callback) {
if (!docInfos.length) {
return callback();
}
var docv = 0;
var overallErr;
docInfos.forEach(function(docInfo) {
var attachments = docInfo.data && docInfo.data._attachments ? Object.keys(docInfo.data._attachments) : [];
var recv = 0;
if (!attachments.length) {
return done();
}
function processedAttachment(err) {
overallErr = err;
recv++;
if (recv === attachments.length) {
done();
}
}
for (var key in docInfo.data._attachments) {
if (Object.prototype.hasOwnProperty.call(docInfo.data._attachments, key)) {
preprocessAttachment(
docInfo.data._attachments[key],
blobType,
processedAttachment
);
}
}
});
function done() {
docv++;
if (docInfos.length === docv) {
if (overallErr) {
callback(overallErr);
} else {
callback();
}
}
}
}
function updateDoc(revLimit, prev, docInfo, results, i, cb, writeDoc, newEdits) {
if (revExists(prev.rev_tree, docInfo.metadata.rev) && !newEdits) {
results[i] = docInfo;
return cb();
}
var previousWinningRev = prev.winningRev || winningRev(prev);
var previouslyDeleted = "deleted" in prev ? prev.deleted : isDeleted(prev, previousWinningRev);
var deleted = "deleted" in docInfo.metadata ? docInfo.metadata.deleted : isDeleted(docInfo.metadata);
var isRoot = /^1-/.test(docInfo.metadata.rev);
if (previouslyDeleted && !deleted && newEdits && isRoot) {
var newDoc = docInfo.data;
newDoc._rev = previousWinningRev;
newDoc._id = docInfo.metadata.id;
docInfo = parseDoc(newDoc, newEdits);
}
var merged = merge(prev.rev_tree, docInfo.metadata.rev_tree[0], revLimit);
var inConflict = newEdits && (previouslyDeleted && deleted && merged.conflicts !== "new_leaf" || !previouslyDeleted && merged.conflicts !== "new_leaf" || previouslyDeleted && !deleted && merged.conflicts === "new_branch");
if (inConflict) {
var err = createError(REV_CONFLICT);
results[i] = err;
return cb();
}
var newRev = docInfo.metadata.rev;
docInfo.metadata.rev_tree = merged.tree;
docInfo.stemmedRevs = merged.stemmedRevs || [];
if (prev.rev_map) {
docInfo.metadata.rev_map = prev.rev_map;
}
var winningRev$$1 = winningRev(docInfo.metadata);
var winningRevIsDeleted = isDeleted(docInfo.metadata, winningRev$$1);
var delta = previouslyDeleted === winningRevIsDeleted ? 0 : previouslyDeleted < winningRevIsDeleted ? -1 : 1;
var newRevIsDeleted;
if (newRev === winningRev$$1) {
newRevIsDeleted = winningRevIsDeleted;
} else {
newRevIsDeleted = isDeleted(docInfo.metadata, newRev);
}
writeDoc(
docInfo,
winningRev$$1,
winningRevIsDeleted,
newRevIsDeleted,
true,
delta,
i,
cb
);
}
function rootIsMissing(docInfo) {
return docInfo.metadata.rev_tree[0].ids[1].status === "missing";
}
function processDocs(revLimit, docInfos, api, fetchedDocs, tx, results, writeDoc, opts, overallCallback) {
revLimit = revLimit || 1e3;
function insertDoc(docInfo, resultsIdx, callback) {
var winningRev$$1 = winningRev(docInfo.metadata);
var deleted = isDeleted(docInfo.metadata, winningRev$$1);
if ("was_delete" in opts && deleted) {
results[resultsIdx] = createError(MISSING_DOC, "deleted");
return callback();
}
var inConflict = newEdits && rootIsMissing(docInfo);
if (inConflict) {
var err = createError(REV_CONFLICT);
results[resultsIdx] = err;
return callback();
}
var delta = deleted ? 0 : 1;
writeDoc(
docInfo,
winningRev$$1,
deleted,
deleted,
false,
delta,
resultsIdx,
callback
);
}
var newEdits = opts.new_edits;
var idsToDocs = new ExportedMap$1();
var docsDone = 0;
var docsToDo = docInfos.length;
function checkAllDocsDone() {
if (++docsDone === docsToDo && overallCallback) {
overallCallback();
}
}
docInfos.forEach(function(currentDoc, resultsIdx) {
if (currentDoc._id && isLocalId(currentDoc._id)) {
var fun = currentDoc._deleted ? "_removeLocal" : "_putLocal";
api[fun](currentDoc, { ctx: tx }, function(err, res) {
results[resultsIdx] = err || res;
checkAllDocsDone();
});
return;
}
var id = currentDoc.metadata.id;
if (idsToDocs.has(id)) {
docsToDo--;
idsToDocs.get(id).push([currentDoc, resultsIdx]);
} else {
idsToDocs.set(id, [[currentDoc, resultsIdx]]);
}
});
idsToDocs.forEach(function(docs, id) {
var numDone = 0;
function docWritten() {
if (++numDone < docs.length) {
nextDoc();
} else {
checkAllDocsDone();
}
}
function nextDoc() {
var value2 = docs[numDone];
var currentDoc = value2[0];
var resultsIdx = value2[1];
if (fetchedDocs.has(id)) {
updateDoc(
revLimit,
fetchedDocs.get(id),
currentDoc,
results,
resultsIdx,
docWritten,
writeDoc,
newEdits
);
} else {
var merged = merge([], currentDoc.metadata.rev_tree[0], revLimit);
currentDoc.metadata.rev_tree = merged.tree;
currentDoc.stemmedRevs = merged.stemmedRevs || [];
insertDoc(currentDoc, resultsIdx, docWritten);
}
}
nextDoc();
});
}
var ADAPTER_VERSION = 5;
var DOC_STORE = "document-store";
var BY_SEQ_STORE = "by-sequence";
var ATTACH_STORE = "attach-store";
var ATTACH_AND_SEQ_STORE = "attach-seq-store";
var META_STORE = "meta-store";
var LOCAL_STORE = "local-store";
var DETECT_BLOB_SUPPORT_STORE = "detect-blob-support";
function safeJsonParse(str) {
try {
return JSON.parse(str);
} catch (e) {
return vuvuzela.parse(str);
}
}
function safeJsonStringify(json) {
try {
return JSON.stringify(json);
} catch (e) {
return vuvuzela.stringify(json);
}
}
function idbError(callback) {
return function(evt) {
var message = "unknown_error";
if (evt.target && evt.target.error) {
message = evt.target.error.name || evt.target.error.message;
}
callback(createError(IDB_ERROR, message, evt.type));
};
}
function encodeMetadata(metadata, winningRev2, deleted) {
return {
data: safeJsonStringify(metadata),
winningRev: winningRev2,
deletedOrLocal: deleted ? "1" : "0",
seq: metadata.seq,
// highest seq for this doc
id: metadata.id
};
}
function decodeMetadata(storedObject) {
if (!storedObject) {
return null;
}
var metadata = safeJsonParse(storedObject.data);
metadata.winningRev = storedObject.winningRev;
metadata.deleted = storedObject.deletedOrLocal === "1";
metadata.seq = storedObject.seq;
return metadata;
}
function decodeDoc(doc) {
if (!doc) {
return doc;
}
var idx = doc._doc_id_rev.lastIndexOf(":");
doc._id = doc._doc_id_rev.substring(0, idx - 1);
doc._rev = doc._doc_id_rev.substring(idx + 1);
delete doc._doc_id_rev;
return doc;
}
function readBlobData(body, type, asBlob, callback) {
if (asBlob) {
if (!body) {
callback(createBlob$1([""], { type }));
} else if (typeof body !== "string") {
callback(body);
} else {
callback(b64ToBluffer$1(body, type));
}
} else {
if (!body) {
callback("");
} else if (typeof body !== "string") {
readAsBinaryString(body, function(binary) {
callback(thisBtoa(binary));
});
} else {
callback(body);
}
}
}
function fetchAttachmentsIfNecessary(doc, opts, txn, cb) {
var attachments = Object.keys(doc._attachments || {});
if (!attachments.length) {
return cb && cb();
}
var numDone = 0;
function checkDone() {
if (++numDone === attachments.length && cb) {
cb();
}
}
function fetchAttachment(doc2, att) {
var attObj = doc2._attachments[att];
var digest = attObj.digest;
var req = txn.objectStore(ATTACH_STORE).get(digest);
req.onsuccess = function(e) {
attObj.body = e.target.result.body;
checkDone();
};
}
attachments.forEach(function(att) {
if (opts.attachments && opts.include_docs) {
fetchAttachment(doc, att);
} else {
doc._attachments[att].stub = true;
checkDone();
}
});
}
function postProcessAttachments(results, asBlob) {
return Promise.all(results.map(function(row) {
if (row.doc && row.doc._attachments) {
var attNames = Object.keys(row.doc._attachments);
return Promise.all(attNames.map(function(att) {
var attObj = row.doc._attachments[att];
if (!("body" in attObj)) {
return;
}
var body = attObj.body;
var type = attObj.content_type;
return new Promise(function(resolve) {
readBlobData(body, type, asBlob, function(data) {
row.doc._attachments[att] = $inject_Object_assign(
pick$1(attObj, ["digest", "content_type"]),
{ data }
);
resolve();
});
});
}));
}
}));
}
function compactRevs(revs, docId, txn) {
var possiblyOrphanedDigests = [];
var seqStore = txn.objectStore(BY_SEQ_STORE);
var attStore = txn.objectStore(ATTACH_STORE);
var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
var count = revs.length;
function checkDone() {
count--;
if (!count) {
deleteOrphanedAttachments();
}
}
function deleteOrphanedAttachments() {
if (!possiblyOrphanedDigests.length) {
return;
}
possiblyOrphanedDigests.forEach(function(digest) {
var countReq = attAndSeqStore.index("digestSeq").count(
IDBKeyRange.bound(
digest + "::",
digest + "::",
false,
false
)
);
countReq.onsuccess = function(e) {
var count2 = e.target.result;
if (!count2) {
attStore.delete(digest);
}
};
});
}
revs.forEach(function(rev) {
var index2 = seqStore.index("_doc_id_rev");
var key = docId + "::" + rev;
index2.getKey(key).onsuccess = function(e) {
var seq = e.target.result;
if (typeof seq !== "number") {
return checkDone();
}
seqStore.delete(seq);
var cursor = attAndSeqStore.index("seq").openCursor(IDBKeyRange.only(seq));
cursor.onsuccess = function(event) {
var cursor2 = event.target.result;
if (cursor2) {
var digest = cursor2.value.digestSeq.split("::")[0];
possiblyOrphanedDigests.push(digest);
attAndSeqStore.delete(cursor2.primaryKey);
cursor2.continue();
} else {
checkDone();
}
};
};
});
}
function openTransactionSafely(idb, stores, mode) {
try {
return {
txn: idb.transaction(stores, mode)
};
} catch (err) {
return {
error: err
};
}
}
var changesHandler = new Changes();
function idbBulkDocs(dbOpts, req, opts, api, idb, callback) {
var docInfos = req.docs;
var txn;
var docStore;
var bySeqStore;
var attachStore;
var attachAndSeqStore;
var metaStore;
var docInfoError;
var metaDoc;
for (var i = 0, len2 = docInfos.length; i < len2; i++) {
var doc = docInfos[i];
if (doc._id && isLocalId(doc._id)) {
continue;
}
doc = docInfos[i] = parseDoc(doc, opts.new_edits, dbOpts);
if (doc.error && !docInfoError) {
docInfoError = doc;
}
}
if (docInfoError) {
return callback(docInfoError);
}
var allDocsProcessed = false;
var docCountDelta = 0;
var results = new Array(docInfos.length);
var fetchedDocs = new ExportedMap$1();
var preconditionErrored = false;
var blobType = api._meta.blobSupport ? "blob" : "base64";
preprocessAttachments(docInfos, blobType, function(err) {
if (err) {
return callback(err);
}
startTransaction();
});
function startTransaction() {
var stores = [
DOC_STORE,
BY_SEQ_STORE,
ATTACH_STORE,
LOCAL_STORE,
ATTACH_AND_SEQ_STORE,
META_STORE
];
var txnResult = openTransactionSafely(idb, stores, "readwrite");
if (txnResult.error) {
return callback(txnResult.error);
}
txn = txnResult.txn;
txn.onabort = idbError(callback);
txn.ontimeout = idbError(callback);
txn.oncomplete = complete;
docStore = txn.objectStore(DOC_STORE);
bySeqStore = txn.objectStore(BY_SEQ_STORE);
attachStore = txn.objectStore(ATTACH_STORE);
attachAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
metaStore = txn.objectStore(META_STORE);
metaStore.get(META_STORE).onsuccess = function(e) {
metaDoc = e.target.result;
updateDocCountIfReady();
};
verifyAttachments(function(err) {
if (err) {
preconditionErrored = true;
return callback(err);
}
fetchExistingDocs();
});
}
function onAllDocsProcessed() {
allDocsProcessed = true;
updateDocCountIfReady();
}
function idbProcessDocs() {
processDocs(
dbOpts.revs_limit,
docInfos,
api,
fetchedDocs,
txn,
results,
writeDoc,
opts,
onAllDocsProcessed
);
}
function updateDocCountIfReady() {
if (!metaDoc || !allDocsProcessed) {
return;
}
metaDoc.docCount += docCountDelta;
metaStore.put(metaDoc);
}
function fetchExistingDocs() {
if (!docInfos.length) {
return;
}
var numFetched = 0;
function checkDone() {
if (++numFetched === docInfos.length) {
idbProcessDocs();
}
}
function readMetadata(event) {
var metadata = decodeMetadata(event.target.result);
if (metadata) {
fetchedDocs.set(metadata.id, metadata);
}
checkDone();
}
for (var i2 = 0, len3 = docInfos.length; i2 < len3; i2++) {
var docInfo = docInfos[i2];
if (docInfo._id && isLocalId(docInfo._id)) {
checkDone();
continue;
}
var req2 = docStore.get(docInfo.metadata.id);
req2.onsuccess = readMetadata;
}
}
function complete() {
if (preconditionErrored) {
return;
}
changesHandler.notify(api._meta.name);
callback(null, results);
}
function verifyAttachment(digest, callback2) {
var req2 = attachStore.get(digest);
req2.onsuccess = function(e) {
if (!e.target.result) {
var err = createError(
MISSING_STUB,
"unknown stub attachment with digest " + digest
);
err.status = 412;
callback2(err);
} else {
callback2();
}
};
}
function verifyAttachments(finish) {
var digests = [];
docInfos.forEach(function(docInfo) {
if (docInfo.data && docInfo.data._attachments) {
Object.keys(docInfo.data._attachments).forEach(function(filename) {
var att = docInfo.data._attachments[filename];
if (att.stub) {
digests.push(att.digest);
}
});
}
});
if (!digests.length) {
return finish();
}
var numDone = 0;
var err;
function checkDone() {
if (++numDone === digests.length) {
finish(err);
}
}
digests.forEach(function(digest) {
verifyAttachment(digest, function(attErr) {
if (attErr && !err) {
err = attErr;
}
checkDone();
});
});
}
function writeDoc(docInfo, winningRev$$1, winningRevIsDeleted, newRevIsDeleted, isUpdate, delta, resultsIdx, callback2) {
docInfo.metadata.winningRev = winningRev$$1;
docInfo.metadata.deleted = winningRevIsDeleted;
var doc2 = docInfo.data;
doc2._id = docInfo.metadata.id;
doc2._rev = docInfo.metadata.rev;
if (newRevIsDeleted) {
doc2._deleted = true;
}
var hasAttachments = doc2._attachments && Object.keys(doc2._attachments).length;
if (hasAttachments) {
return writeAttachments(
docInfo,
winningRev$$1,
winningRevIsDeleted,
isUpdate,
resultsIdx,
callback2
);
}
docCountDelta += delta;
updateDocCountIfReady();
finishDoc(
docInfo,
winningRev$$1,
winningRevIsDeleted,
isUpdate,
resultsIdx,
callback2
);
}
function finishDoc(docInfo, winningRev$$1, winningRevIsDeleted, isUpdate, resultsIdx, callback2) {
var doc2 = docInfo.data;
var metadata = docInfo.metadata;
doc2._doc_id_rev = metadata.id + "::" + metadata.rev;
delete doc2._id;
delete doc2._rev;
function afterPutDoc(e) {
var revsToDelete = docInfo.stemmedRevs || [];
if (isUpdate && api.auto_compaction) {
revsToDelete = revsToDelete.concat(compactTree(docInfo.metadata));
}
if (revsToDelete && revsToDelete.length) {
compactRevs(revsToDelete, docInfo.metadata.id, txn);
}
metadata.seq = e.target.result;
var metadataToStore = encodeMetadata(
metadata,
winningRev$$1,
winningRevIsDeleted
);
var metaDataReq = docStore.put(metadataToStore);
metaDataReq.onsuccess = afterPutMetadata;
}
function afterPutDocError(e) {
e.preventDefault();
e.stopPropagation();
var index2 = bySeqStore.index("_doc_id_rev");
var getKeyReq = index2.getKey(doc2._doc_id_rev);
getKeyReq.onsuccess = function(e2) {
var putReq2 = bySeqStore.put(doc2, e2.target.result);
putReq2.onsuccess = afterPutDoc;
};
}
function afterPutMetadata() {
results[resultsIdx] = {
ok: true,
id: metadata.id,
rev: metadata.rev
};
fetchedDocs.set(docInfo.metadata.id, docInfo.metadata);
insertAttachmentMappings(docInfo, metadata.seq, callback2);
}
var putReq = bySeqStore.put(doc2);
putReq.onsuccess = afterPutDoc;
putReq.onerror = afterPutDocError;
}
function writeAttachments(docInfo, winningRev$$1, winningRevIsDeleted, isUpdate, resultsIdx, callback2) {
var doc2 = docInfo.data;
var numDone = 0;
var attachments = Object.keys(doc2._attachments);
function collectResults() {
if (numDone === attachments.length) {
finishDoc(
docInfo,
winningRev$$1,
winningRevIsDeleted,
isUpdate,
resultsIdx,
callback2
);
}
}
function attachmentSaved() {
numDone++;
collectResults();
}
attachments.forEach(function(key) {
var att = docInfo.data._attachments[key];
if (!att.stub) {
var data = att.data;
delete att.data;
att.revpos = parseInt(winningRev$$1, 10);
var digest = att.digest;
saveAttachment(digest, data, attachmentSaved);
} else {
numDone++;
collectResults();
}
});
}
function insertAttachmentMappings(docInfo, seq, callback2) {
var attsAdded = 0;
var attsToAdd = Object.keys(docInfo.data._attachments || {});
if (!attsToAdd.length) {
return callback2();
}
function checkDone() {
if (++attsAdded === attsToAdd.length) {
callback2();
}
}
function add(att) {
var digest = docInfo.data._attachments[att].digest;
var req2 = attachAndSeqStore.put({
seq,
digestSeq: digest + "::" + seq
});
req2.onsuccess = checkDone;
req2.onerror = function(e) {
e.preventDefault();
e.stopPropagation();
checkDone();
};
}
for (var i2 = 0; i2 < attsToAdd.length; i2++) {
add(attsToAdd[i2]);
}
}
function saveAttachment(digest, data, callback2) {
var getKeyReq = attachStore.count(digest);
getKeyReq.onsuccess = function(e) {
var count = e.target.result;
if (count) {
return callback2();
}
var newAtt = {
digest,
body: data
};
var putReq = attachStore.put(newAtt);
putReq.onsuccess = callback2;
};
}
}
function runBatchedCursor(objectStore, keyRange, descending, batchSize, onBatch) {
if (batchSize === -1) {
batchSize = 1e3;
}
var useGetAll = typeof objectStore.getAll === "function" && typeof objectStore.getAllKeys === "function" && batchSize > 1 && !descending;
var keysBatch;
var valuesBatch;
var pseudoCursor;
function onGetAll(e) {
valuesBatch = e.target.result;
if (keysBatch) {
onBatch(keysBatch, valuesBatch, pseudoCursor);
}
}
function onGetAllKeys(e) {
keysBatch = e.target.result;
if (valuesBatch) {
onBatch(keysBatch, valuesBatch, pseudoCursor);
}
}
function continuePseudoCursor() {
if (!keysBatch.length) {
return onBatch();
}
var lastKey = keysBatch[keysBatch.length - 1];
var newKeyRange;
if (keyRange && keyRange.upper) {
try {
newKeyRange = IDBKeyRange.bound(
lastKey,
keyRange.upper,
true,
keyRange.upperOpen
);
} catch (e) {
if (e.name === "DataError" && e.code === 0) {
return onBatch();
}
}
} else {
newKeyRange = IDBKeyRange.lowerBound(lastKey, true);
}
keyRange = newKeyRange;
keysBatch = null;
valuesBatch = null;
objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
}
function onCursor(e) {
var cursor = e.target.result;
if (!cursor) {
return onBatch();
}
onBatch([cursor.key], [cursor.value], cursor);
}
if (useGetAll) {
pseudoCursor = { "continue": continuePseudoCursor };
objectStore.getAll(keyRange, batchSize).onsuccess = onGetAll;
objectStore.getAllKeys(keyRange, batchSize).onsuccess = onGetAllKeys;
} else if (descending) {
objectStore.openCursor(keyRange, "prev").onsuccess = onCursor;
} else {
objectStore.openCursor(keyRange).onsuccess = onCursor;
}
}
function getAll(objectStore, keyRange, onSuccess) {
if (typeof objectStore.getAll === "function") {
objectStore.getAll(keyRange).onsuccess = onSuccess;
return;
}
var values = [];
function onCursor(e) {
var cursor = e.target.result;
if (cursor) {
values.push(cursor.value);
cursor.continue();
} else {
onSuccess({
target: {
result: values
}
});
}
}
objectStore.openCursor(keyRange).onsuccess = onCursor;
}
function allDocsKeys(keys2, docStore, onBatch) {
var valuesBatch = new Array(keys2.length);
var count = 0;
keys2.forEach(function(key, index2) {
docStore.get(key).onsuccess = function(event) {
if (event.target.result) {
valuesBatch[index2] = event.target.result;
} else {
valuesBatch[index2] = { key, error: "not_found" };
}
count++;
if (count === keys2.length) {
onBatch(keys2, valuesBatch, {});
}
};
});
}
function createKeyRange(start, end, inclusiveEnd, key, descending) {
try {
if (start && end) {
if (descending) {
return IDBKeyRange.bound(end, start, !inclusiveEnd, false);
} else {
return IDBKeyRange.bound(start, end, false, !inclusiveEnd);
}
} else if (start) {
if (descending) {
return IDBKeyRange.upperBound(start);
} else {
return IDBKeyRange.lowerBound(start);
}
} else if (end) {
if (descending) {
return IDBKeyRange.lowerBound(end, !inclusiveEnd);
} else {
return IDBKeyRange.upperBound(end, !inclusiveEnd);
}
} else if (key) {
return IDBKeyRange.only(key);
}
} catch (e) {
return { error: e };
}
return null;
}
function idbAllDocs(opts, idb, callback) {
var start = "startkey" in opts ? opts.startkey : false;
var end = "endkey" in opts ? opts.endkey : false;
var key = "key" in opts ? opts.key : false;
var keys2 = "keys" in opts ? opts.keys : false;
var skip = opts.skip || 0;
var limit = typeof opts.limit === "number" ? opts.limit : -1;
var inclusiveEnd = opts.inclusive_end !== false;
var keyRange;
var keyRangeError;
if (!keys2) {
keyRange = createKeyRange(start, end, inclusiveEnd, key, opts.descending);
keyRangeError = keyRange && keyRange.error;
if (keyRangeError && !(keyRangeError.name === "DataError" && keyRangeError.code === 0)) {
return callback(createError(
IDB_ERROR,
keyRangeError.name,
keyRangeError.message
));
}
}
var stores = [DOC_STORE, BY_SEQ_STORE, META_STORE];
if (opts.attachments) {
stores.push(ATTACH_STORE);
}
var txnResult = openTransactionSafely(idb, stores, "readonly");
if (txnResult.error) {
return callback(txnResult.error);
}
var txn = txnResult.txn;
txn.oncomplete = onTxnComplete;
txn.onabort = idbError(callback);
var docStore = txn.objectStore(DOC_STORE);
var seqStore = txn.objectStore(BY_SEQ_STORE);
var metaStore = txn.objectStore(META_STORE);
var docIdRevIndex = seqStore.index("_doc_id_rev");
var results = [];
var docCount;
var updateSeq;
metaStore.get(META_STORE).onsuccess = function(e) {
docCount = e.target.result.docCount;
};
if (opts.update_seq) {
getMaxUpdateSeq(seqStore, function(e) {
if (e.target.result && e.target.result.length > 0) {
updateSeq = e.target.result[0];
}
});
}
function getMaxUpdateSeq(objectStore, onSuccess) {
function onCursor(e) {
var cursor = e.target.result;
var maxKey = void 0;
if (cursor && cursor.key) {
maxKey = cursor.key;
}
return onSuccess({
target: {
result: [maxKey]
}
});
}
objectStore.openCursor(null, "prev").onsuccess = onCursor;
}
function fetchDocAsynchronously(metadata, row, winningRev$$1) {
var key2 = metadata.id + "::" + winningRev$$1;
docIdRevIndex.get(key2).onsuccess = function onGetDoc(e) {
row.doc = decodeDoc(e.target.result) || {};
if (opts.conflicts) {
var conflicts = collectConflicts(metadata);
if (conflicts.length) {
row.doc._conflicts = conflicts;
}
}
fetchAttachmentsIfNecessary(row.doc, opts, txn);
};
}
function allDocsInner(winningRev$$1, metadata) {
var row = {
id: metadata.id,
key: metadata.id,
value: {
rev: winningRev$$1
}
};
var deleted = metadata.deleted;
if (deleted) {
if (keys2) {
results.push(row);
row.value.deleted = true;
row.doc = null;
}
} else if (skip-- <= 0) {
results.push(row);
if (opts.include_docs) {
fetchDocAsynchronously(metadata, row, winningRev$$1);
}
}
}
function processBatch(batchValues) {
for (var i = 0, len2 = batchValues.length; i < len2; i++) {
if (results.length === limit) {
break;
}
var batchValue = batchValues[i];
if (batchValue.error && keys2) {
results.push(batchValue);
continue;
}
var metadata = decodeMetadata(batchValue);
var winningRev$$1 = metadata.winningRev;
allDocsInner(winningRev$$1, metadata);
}
}
function onBatch(batchKeys, batchValues, cursor) {
if (!cursor) {
return;
}
processBatch(batchValues);
if (results.length < limit) {
cursor.continue();
}
}
function onGetAll(e) {
var values = e.target.result;
if (opts.descending) {
values = values.reverse();
}
processBatch(values);
}
function onResultsReady() {
var returnVal = {
total_rows: docCount,
offset: opts.skip,
rows: results
};
if (opts.update_seq && updateSeq !== void 0) {
returnVal.update_seq = updateSeq;
}
callback(null, returnVal);
}
function onTxnComplete() {
if (opts.attachments) {
postProcessAttachments(results, opts.binary).then(onResultsReady);
} else {
onResultsReady();
}
}
if (keyRangeError || limit === 0) {
return;
}
if (keys2) {
return allDocsKeys(opts.keys, docStore, onBatch);
}
if (limit === -1) {
return getAll(docStore, keyRange, onGetAll);
}
runBatchedCursor(docStore, keyRange, opts.descending, limit + skip, onBatch);
}
function checkBlobSupport(txn) {
return new Promise(function(resolve) {
var blob$$1 = createBlob$1([""]);
var req = txn.objectStore(DETECT_BLOB_SUPPORT_STORE).put(blob$$1, "key");
req.onsuccess = function() {
var matchedChrome = navigator.userAgent.match(/Chrome\/(\d+)/);
var matchedEdge = navigator.userAgent.match(/Edge\//);
resolve(matchedEdge || !matchedChrome || parseInt(matchedChrome[1], 10) >= 43);
};
req.onerror = txn.onabort = function(e) {
e.preventDefault();
e.stopPropagation();
resolve(false);
};
}).catch(function() {
return false;
});
}
function countDocs(txn, cb) {
var index2 = txn.objectStore(DOC_STORE).index("deletedOrLocal");
index2.count(IDBKeyRange.only("0")).onsuccess = function(e) {
cb(e.target.result);
};
}
var running = false;
var queue = [];
function tryCode(fun, err, res, PouchDB2) {
try {
fun(err, res);
} catch (err2) {
PouchDB2.emit("error", err2);
}
}
function applyNext() {
if (running || !queue.length) {
return;
}
running = true;
queue.shift()();
}
function enqueueTask(action, callback, PouchDB2) {
queue.push(function runAction() {
action(function runCallback(err, res) {
tryCode(callback, err, res, PouchDB2);
running = false;
lib(function runNext() {
applyNext();
});
});
});
applyNext();
}
function changes(opts, api, dbName, idb) {
opts = clone$1(opts);
if (opts.continuous) {
var id = dbName + ":" + uuid();
changesHandler.addListener(dbName, id, api, opts);
changesHandler.notify(dbName);
return {
cancel: function() {
changesHandler.removeListener(dbName, id);
}
};
}
var docIds = opts.doc_ids && new ExportedSet$1(opts.doc_ids);
opts.since = opts.since || 0;
var lastSeq = opts.since;
var limit = "limit" in opts ? opts.limit : -1;
if (limit === 0) {
limit = 1;
}
var results = [];
var numResults = 0;
var filter2 = filterChange(opts);
var docIdsToMetadata = new ExportedMap$1();
var txn;
var bySeqStore;
var docStore;
var docIdRevIndex;
function onBatch(batchKeys, batchValues, cursor) {
if (!cursor || !batchKeys.length) {
return;
}
var winningDocs = new Array(batchKeys.length);
var metadatas = new Array(batchKeys.length);
function processMetadataAndWinningDoc(metadata, winningDoc) {
var change = opts.processChange(winningDoc, metadata, opts);
lastSeq = change.seq = metadata.seq;
var filtered = filter2(change);
if (typeof filtered === "object") {
return Promise.reject(filtered);
}
if (!filtered) {
return Promise.resolve();
}
numResults++;
if (opts.return_docs) {
results.push(change);
}
if (opts.attachments && opts.include_docs) {
return new Promise(function(resolve) {
fetchAttachmentsIfNecessary(winningDoc, opts, txn, function() {
postProcessAttachments([change], opts.binary).then(function() {
resolve(change);
});
});
});
} else {
return Promise.resolve(change);
}
}
function onBatchDone() {
var promises = [];
for (var i = 0, len2 = winningDocs.length; i < len2; i++) {
if (numResults === limit) {
break;
}
var winningDoc = winningDocs[i];
if (!winningDoc) {
continue;
}
var metadata = metadatas[i];
promises.push(processMetadataAndWinningDoc(metadata, winningDoc));
}
Promise.all(promises).then(function(changes2) {
for (var i2 = 0, len3 = changes2.length; i2 < len3; i2++) {
if (changes2[i2]) {
opts.onChange(changes2[i2]);
}
}
}).catch(opts.complete);
if (numResults !== limit) {
cursor.continue();
}
}
var numDone = 0;
batchValues.forEach(function(value2, i) {
var doc = decodeDoc(value2);
var seq = batchKeys[i];
fetchWinningDocAndMetadata(doc, seq, function(metadata, winningDoc) {
metadatas[i] = metadata;
winningDocs[i] = winningDoc;
if (++numDone === batchKeys.length) {
onBatchDone();
}
});
});
}
function onGetMetadata(doc, seq, metadata, cb) {
if (metadata.seq !== seq) {
return cb();
}
if (metadata.winningRev === doc._rev) {
return cb(metadata, doc);
}
var docIdRev = doc._id + "::" + metadata.winningRev;
var req = docIdRevIndex.get(docIdRev);
req.onsuccess = function(e) {
cb(metadata, decodeDoc(e.target.result));
};
}
function fetchWinningDocAndMetadata(doc, seq, cb) {
if (docIds && !docIds.has(doc._id)) {
return cb();
}
var metadata = docIdsToMetadata.get(doc._id);
if (metadata) {
return onGetMetadata(doc, seq, metadata, cb);
}
docStore.get(doc._id).onsuccess = function(e) {
metadata = decodeMetadata(e.target.result);
docIdsToMetadata.set(doc._id, metadata);
onGetMetadata(doc, seq, metadata, cb);
};
}
function finish() {
opts.complete(null, {
results,
last_seq: lastSeq
});
}
function onTxnComplete() {
if (!opts.continuous && opts.attachments) {
postProcessAttachments(results).then(finish);
} else {
finish();
}
}
var objectStores = [DOC_STORE, BY_SEQ_STORE];
if (opts.attachments) {
objectStores.push(ATTACH_STORE);
}
var txnResult = openTransactionSafely(idb, objectStores, "readonly");
if (txnResult.error) {
return opts.complete(txnResult.error);
}
txn = txnResult.txn;
txn.onabort = idbError(opts.complete);
txn.oncomplete = onTxnComplete;
bySeqStore = txn.objectStore(BY_SEQ_STORE);
docStore = txn.objectStore(DOC_STORE);
docIdRevIndex = bySeqStore.index("_doc_id_rev");
var keyRange = opts.since && !opts.descending ? IDBKeyRange.lowerBound(opts.since, true) : null;
runBatchedCursor(bySeqStore, keyRange, opts.descending, limit, onBatch);
}
var cachedDBs = new ExportedMap$1();
var blobSupportPromise;
var openReqList = new ExportedMap$1();
function IdbPouch(opts, callback) {
var api = this;
enqueueTask(function(thisCallback) {
init(api, opts, thisCallback);
}, callback, api.constructor);
}
function init(api, opts, callback) {
var dbName = opts.name;
var idb = null;
var idbGlobalFailureError = null;
api._meta = null;
function enrichCallbackError(callback2) {
return function(error, result) {
if (error && error instanceof Error && !error.reason) {
if (idbGlobalFailureError) {
error.reason = idbGlobalFailureError;
}
}
callback2(error, result);
};
}
function createSchema(db) {
var docStore = db.createObjectStore(DOC_STORE, { keyPath: "id" });
db.createObjectStore(BY_SEQ_STORE, { autoIncrement: true }).createIndex("_doc_id_rev", "_doc_id_rev", { unique: true });
db.createObjectStore(ATTACH_STORE, { keyPath: "digest" });
db.createObjectStore(META_STORE, { keyPath: "id", autoIncrement: false });
db.createObjectStore(DETECT_BLOB_SUPPORT_STORE);
docStore.createIndex("deletedOrLocal", "deletedOrLocal", { unique: false });
db.createObjectStore(LOCAL_STORE, { keyPath: "_id" });
var attAndSeqStore = db.createObjectStore(
ATTACH_AND_SEQ_STORE,
{ autoIncrement: true }
);
attAndSeqStore.createIndex("seq", "seq");
attAndSeqStore.createIndex("digestSeq", "digestSeq", { unique: true });
}
function addDeletedOrLocalIndex(txn, callback2) {
var docStore = txn.objectStore(DOC_STORE);
docStore.createIndex("deletedOrLocal", "deletedOrLocal", { unique: false });
docStore.openCursor().onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
var metadata = cursor.value;
var deleted = isDeleted(metadata);
metadata.deletedOrLocal = deleted ? "1" : "0";
docStore.put(metadata);
cursor.continue();
} else {
callback2();
}
};
}
function createLocalStoreSchema(db) {
db.createObjectStore(LOCAL_STORE, { keyPath: "_id" }).createIndex("_doc_id_rev", "_doc_id_rev", { unique: true });
}
function migrateLocalStore(txn, cb) {
var localStore = txn.objectStore(LOCAL_STORE);
var docStore = txn.objectStore(DOC_STORE);
var seqStore = txn.objectStore(BY_SEQ_STORE);
var cursor = docStore.openCursor();
cursor.onsuccess = function(event) {
var cursor2 = event.target.result;
if (cursor2) {
var metadata = cursor2.value;
var docId = metadata.id;
var local = isLocalId(docId);
var rev = winningRev(metadata);
if (local) {
var docIdRev = docId + "::" + rev;
var start = docId + "::";
var end = docId + "::~";
var index2 = seqStore.index("_doc_id_rev");
var range = IDBKeyRange.bound(start, end, false, false);
var seqCursor = index2.openCursor(range);
seqCursor.onsuccess = function(e) {
seqCursor = e.target.result;
if (!seqCursor) {
docStore.delete(cursor2.primaryKey);
cursor2.continue();
} else {
var data = seqCursor.value;
if (data._doc_id_rev === docIdRev) {
localStore.put(data);
}
seqStore.delete(seqCursor.primaryKey);
seqCursor.continue();
}
};
} else {
cursor2.continue();
}
} else if (cb) {
cb();
}
};
}
function addAttachAndSeqStore(db) {
var attAndSeqStore = db.createObjectStore(
ATTACH_AND_SEQ_STORE,
{ autoIncrement: true }
);
attAndSeqStore.createIndex("seq", "seq");
attAndSeqStore.createIndex("digestSeq", "digestSeq", { unique: true });
}
function migrateAttsAndSeqs(txn, callback2) {
var seqStore = txn.objectStore(BY_SEQ_STORE);
var attStore = txn.objectStore(ATTACH_STORE);
var attAndSeqStore = txn.objectStore(ATTACH_AND_SEQ_STORE);
var req2 = attStore.count();
req2.onsuccess = function(e) {
var count = e.target.result;
if (!count) {
return callback2();
}
seqStore.openCursor().onsuccess = function(e2) {
var cursor = e2.target.result;
if (!cursor) {
return callback2();
}
var doc = cursor.value;
var seq = cursor.primaryKey;
var atts = Object.keys(doc._attachments || {});
var digestMap = {};
for (var j = 0; j < atts.length; j++) {
var att = doc._attachments[atts[j]];
digestMap[att.digest] = true;
}
var digests = Object.keys(digestMap);
for (j = 0; j < digests.length; j++) {
var digest = digests[j];
attAndSeqStore.put({
seq,
digestSeq: digest + "::" + seq
});
}
cursor.continue();
};
};
}
function migrateMetadata(txn) {
function decodeMetadataCompat(storedObject) {
if (!storedObject.data) {
storedObject.deleted = storedObject.deletedOrLocal === "1";
return storedObject;
}
return decodeMetadata(storedObject);
}
var bySeqStore = txn.objectStore(BY_SEQ_STORE);
var docStore = txn.objectStore(DOC_STORE);
var cursor = docStore.openCursor();
cursor.onsuccess = function(e) {
var cursor2 = e.target.result;
if (!cursor2) {
return;
}
var metadata = decodeMetadataCompat(cursor2.value);
metadata.winningRev = metadata.winningRev || winningRev(metadata);
function fetchMetadataSeq() {
var start = metadata.id + "::";
var end = metadata.id + "::";
var req2 = bySeqStore.index("_doc_id_rev").openCursor(
IDBKeyRange.bound(start, end)
);
var metadataSeq = 0;
req2.onsuccess = function(e2) {
var cursor3 = e2.target.result;
if (!cursor3) {
metadata.seq = metadataSeq;
return onGetMetadataSeq();
}
var seq = cursor3.primaryKey;
if (seq > metadataSeq) {
metadataSeq = seq;
}
cursor3.continue();
};
}
function onGetMetadataSeq() {
var metadataToStore = encodeMetadata(
metadata,
metadata.winningRev,
metadata.deleted
);
var req2 = docStore.put(metadataToStore);
req2.onsuccess = function() {
cursor2.continue();
};
}
if (metadata.seq) {
return onGetMetadataSeq();
}
fetchMetadataSeq();
};
}
api._remote = false;
api.type = function() {
return "idb";
};
api._id = toPromise$1(function(callback2) {
callback2(null, api._meta.instanceId);
});
api._bulkDocs = function idb_bulkDocs(req2, reqOpts, callback2) {
idbBulkDocs(opts, req2, reqOpts, api, idb, enrichCallbackError(callback2));
};
api._get = function idb_get(id, opts2, callback2) {
var doc;
var metadata;
var err;
var txn = opts2.ctx;
if (!txn) {
var txnResult = openTransactionSafely(
idb,
[DOC_STORE, BY_SEQ_STORE, ATTACH_STORE],
"readonly"
);
if (txnResult.error) {
return callback2(txnResult.error);
}
txn = txnResult.txn;
}
function finish() {
callback2(err, { doc, metadata, ctx: txn });
}
txn.objectStore(DOC_STORE).get(id).onsuccess = function(e) {
metadata = decodeMetadata(e.target.result);
if (!metadata) {
err = createError(MISSING_DOC, "missing");
return finish();
}
var rev;
if (!opts2.rev) {
rev = metadata.winningRev;
var deleted = isDeleted(metadata);
if (deleted) {
err = createError(MISSING_DOC, "deleted");
return finish();
}
} else {
rev = opts2.latest ? latest(opts2.rev, metadata) : opts2.rev;
}
var objectStore = txn.objectStore(BY_SEQ_STORE);
var key = metadata.id + "::" + rev;
objectStore.index("_doc_id_rev").get(key).onsuccess = function(e2) {
doc = e2.target.result;
if (doc) {
doc = decodeDoc(doc);
}
if (!doc) {
err = createError(MISSING_DOC, "missing");
return finish();
}
finish();
};
};
};
api._getAttachment = function(docId, attachId, attachment, opts2, callback2) {
var txn;
if (opts2.ctx) {
txn = opts2.ctx;
} else {
var txnResult = openTransactionSafely(
idb,
[DOC_STORE, BY_SEQ_STORE, ATTACH_STORE],
"readonly"
);
if (txnResult.error) {
return callback2(txnResult.error);
}
txn = txnResult.txn;
}
var digest = attachment.digest;
var type = attachment.content_type;
txn.objectStore(ATTACH_STORE).get(digest).onsuccess = function(e) {
var body = e.target.result.body;
readBlobData(body, type, opts2.binary, function(blobData) {
callback2(null, blobData);
});
};
};
api._info = function idb_info(callback2) {
var updateSeq;
var docCount;
var txnResult = openTransactionSafely(idb, [META_STORE, BY_SEQ_STORE], "readonly");
if (txnResult.error) {
return callback2(txnResult.error);
}
var txn = txnResult.txn;
txn.objectStore(META_STORE).get(META_STORE).onsuccess = function(e) {
docCount = e.target.result.docCount;
};
txn.objectStore(BY_SEQ_STORE).openCursor(null, "prev").onsuccess = function(e) {
var cursor = e.target.result;
updateSeq = cursor ? cursor.key : 0;
};
txn.oncomplete = function() {
callback2(null, {
doc_count: docCount,
update_seq: updateSeq,
// for debugging
idb_attachment_format: api._meta.blobSupport ? "binary" : "base64"
});
};
};
api._allDocs = function idb_allDocs(opts2, callback2) {
idbAllDocs(opts2, idb, enrichCallbackError(callback2));
};
api._changes = function idbChanges(opts2) {
return changes(opts2, api, dbName, idb);
};
api._close = function(callback2) {
idb.close();
cachedDBs.delete(dbName);
callback2();
};
api._getRevisionTree = function(docId, callback2) {
var txnResult = openTransactionSafely(idb, [DOC_STORE], "readonly");
if (txnResult.error) {
return callback2(txnResult.error);
}
var txn = txnResult.txn;
var req2 = txn.objectStore(DOC_STORE).get(docId);
req2.onsuccess = function(event) {
var doc = decodeMetadata(event.target.result);
if (!doc) {
callback2(createError(MISSING_DOC));
} else {
callback2(null, doc.rev_tree);
}
};
};
api._doCompaction = function(docId, revs, callback2) {
var stores = [
DOC_STORE,
BY_SEQ_STORE,
ATTACH_STORE,
ATTACH_AND_SEQ_STORE
];
var txnResult = openTransactionSafely(idb, stores, "readwrite");
if (txnResult.error) {
return callback2(txnResult.error);
}
var txn = txnResult.txn;
var docStore = txn.objectStore(DOC_STORE);
docStore.get(docId).onsuccess = function(event) {
var metadata = decodeMetadata(event.target.result);
traverseRevTree(metadata.rev_tree, function(isLeaf, pos, revHash, ctx, opts2) {
var rev = pos + "-" + revHash;
if (revs.indexOf(rev) !== -1) {
opts2.status = "missing";
}
});
compactRevs(revs, docId, txn);
var winningRev$$1 = metadata.winningRev;
var deleted = metadata.deleted;
txn.objectStore(DOC_STORE).put(
encodeMetadata(metadata, winningRev$$1, deleted)
);
};
txn.onabort = idbError(callback2);
txn.oncomplete = function() {
callback2();
};
};
api._getLocal = function(id, callback2) {
var txnResult = openTransactionSafely(idb, [LOCAL_STORE], "readonly");
if (txnResult.error) {
return callback2(txnResult.error);
}
var tx = txnResult.txn;
var req2 = tx.objectStore(LOCAL_STORE).get(id);
req2.onerror = idbError(callback2);
req2.onsuccess = function(e) {
var doc = e.target.result;
if (!doc) {
callback2(createError(MISSING_DOC));
} else {
delete doc["_doc_id_rev"];
callback2(null, doc);
}
};
};
api._putLocal = function(doc, opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
delete doc._revisions;
var oldRev = doc._rev;
var id = doc._id;
if (!oldRev) {
doc._rev = "0-1";
} else {
doc._rev = "0-" + (parseInt(oldRev.split("-")[1], 10) + 1);
}
var tx = opts2.ctx;
var ret;
if (!tx) {
var txnResult = openTransactionSafely(idb, [LOCAL_STORE], "readwrite");
if (txnResult.error) {
return callback2(txnResult.error);
}
tx = txnResult.txn;
tx.onerror = idbError(callback2);
tx.oncomplete = function() {
if (ret) {
callback2(null, ret);
}
};
}
var oStore = tx.objectStore(LOCAL_STORE);
var req2;
if (oldRev) {
req2 = oStore.get(id);
req2.onsuccess = function(e) {
var oldDoc = e.target.result;
if (!oldDoc || oldDoc._rev !== oldRev) {
callback2(createError(REV_CONFLICT));
} else {
var req3 = oStore.put(doc);
req3.onsuccess = function() {
ret = { ok: true, id: doc._id, rev: doc._rev };
if (opts2.ctx) {
callback2(null, ret);
}
};
}
};
} else {
req2 = oStore.add(doc);
req2.onerror = function(e) {
callback2(createError(REV_CONFLICT));
e.preventDefault();
e.stopPropagation();
};
req2.onsuccess = function() {
ret = { ok: true, id: doc._id, rev: doc._rev };
if (opts2.ctx) {
callback2(null, ret);
}
};
}
};
api._removeLocal = function(doc, opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
var tx = opts2.ctx;
if (!tx) {
var txnResult = openTransactionSafely(idb, [LOCAL_STORE], "readwrite");
if (txnResult.error) {
return callback2(txnResult.error);
}
tx = txnResult.txn;
tx.oncomplete = function() {
if (ret) {
callback2(null, ret);
}
};
}
var ret;
var id = doc._id;
var oStore = tx.objectStore(LOCAL_STORE);
var req2 = oStore.get(id);
req2.onerror = idbError(callback2);
req2.onsuccess = function(e) {
var oldDoc = e.target.result;
if (!oldDoc || oldDoc._rev !== doc._rev) {
callback2(createError(MISSING_DOC));
} else {
oStore.delete(id);
ret = { ok: true, id, rev: "0-0" };
if (opts2.ctx) {
callback2(null, ret);
}
}
};
};
api._destroy = function(opts2, callback2) {
changesHandler.removeAllListeners(dbName);
var openReq = openReqList.get(dbName);
if (openReq && openReq.result) {
openReq.result.close();
cachedDBs.delete(dbName);
}
var req2 = indexedDB.deleteDatabase(dbName);
req2.onsuccess = function() {
openReqList.delete(dbName);
if (hasLocalStorage() && dbName in localStorage) {
delete localStorage[dbName];
}
callback2(null, { "ok": true });
};
req2.onerror = idbError(callback2);
};
var cached = cachedDBs.get(dbName);
if (cached) {
idb = cached.idb;
api._meta = cached.global;
return lib(function() {
callback(null, api);
});
}
var req = indexedDB.open(dbName, ADAPTER_VERSION);
openReqList.set(dbName, req);
req.onupgradeneeded = function(e) {
var db = e.target.result;
if (e.oldVersion < 1) {
return createSchema(db);
}
var txn = e.currentTarget.transaction;
if (e.oldVersion < 3) {
createLocalStoreSchema(db);
}
if (e.oldVersion < 4) {
addAttachAndSeqStore(db);
}
var migrations = [
addDeletedOrLocalIndex,
// v1 -> v2
migrateLocalStore,
// v2 -> v3
migrateAttsAndSeqs,
// v3 -> v4
migrateMetadata
// v4 -> v5
];
var i = e.oldVersion;
function next() {
var migration = migrations[i - 1];
i++;
if (migration) {
migration(txn, next);
}
}
next();
};
req.onsuccess = function(e) {
idb = e.target.result;
idb.onversionchange = function() {
idb.close();
cachedDBs.delete(dbName);
};
idb.onabort = function(e2) {
guardedConsole$1("error", "Database has a global failure", e2.target.error);
idbGlobalFailureError = e2.target.error;
idb.close();
cachedDBs.delete(dbName);
};
var txn = idb.transaction([
META_STORE,
DETECT_BLOB_SUPPORT_STORE,
DOC_STORE
], "readwrite");
var storedMetaDoc = false;
var metaDoc;
var docCount;
var blobSupport;
var instanceId;
function completeSetup() {
if (typeof blobSupport === "undefined" || !storedMetaDoc) {
return;
}
api._meta = {
name: dbName,
instanceId,
blobSupport
};
cachedDBs.set(dbName, {
idb,
global: api._meta
});
callback(null, api);
}
function storeMetaDocIfReady() {
if (typeof docCount === "undefined" || typeof metaDoc === "undefined") {
return;
}
var instanceKey = dbName + "_id";
if (instanceKey in metaDoc) {
instanceId = metaDoc[instanceKey];
} else {
metaDoc[instanceKey] = instanceId = uuid();
}
metaDoc.docCount = docCount;
txn.objectStore(META_STORE).put(metaDoc);
}
txn.objectStore(META_STORE).get(META_STORE).onsuccess = function(e2) {
metaDoc = e2.target.result || { id: META_STORE };
storeMetaDocIfReady();
};
countDocs(txn, function(count) {
docCount = count;
storeMetaDocIfReady();
});
if (!blobSupportPromise) {
blobSupportPromise = checkBlobSupport(txn);
}
blobSupportPromise.then(function(val) {
blobSupport = val;
completeSetup();
});
txn.oncomplete = function() {
storedMetaDoc = true;
completeSetup();
};
txn.onabort = idbError(callback);
};
req.onerror = function(e) {
var msg = e.target.error && e.target.error.message;
if (!msg) {
msg = "Failed to open indexedDB, are you in private browsing mode?";
} else if (msg.indexOf("stored database is a higher version") !== -1) {
msg = new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter');
}
guardedConsole$1("error", msg);
callback(createError(IDB_ERROR, msg));
};
}
IdbPouch.valid = function() {
try {
return typeof indexedDB !== "undefined" && typeof IDBKeyRange !== "undefined";
} catch (e) {
return false;
}
};
function IDBPouch(PouchDB2) {
PouchDB2.adapter("idb", IdbPouch, true);
}
function pool(promiseFactories, limit) {
return new Promise(function(resolve, reject) {
var running2 = 0;
var current = 0;
var done = 0;
var len2 = promiseFactories.length;
var err;
function runNext() {
running2++;
promiseFactories[current++]().then(onSuccess, onError);
}
function doNext() {
if (++done === len2) {
if (err) {
reject(err);
} else {
resolve();
}
} else {
runNextBatch();
}
}
function onSuccess() {
running2--;
doNext();
}
function onError(thisErr) {
running2--;
err = err || thisErr;
doNext();
}
function runNextBatch() {
while (running2 < limit && current < len2) {
runNext();
}
}
runNextBatch();
});
}
const CHANGES_BATCH_SIZE$1 = 25;
const MAX_SIMULTANEOUS_REVS = 50;
const CHANGES_TIMEOUT_BUFFER = 5e3;
const DEFAULT_HEARTBEAT = 1e4;
let supportsBulkGetMap = {};
function readAttachmentsAsBlobOrBuffer(row) {
let doc = row.doc || row.ok;
let atts = doc && doc._attachments;
if (!atts) {
return;
}
Object.keys(atts).forEach(function(filename) {
let att = atts[filename];
att.data = b64ToBluffer$1(att.data, att.content_type);
});
}
function encodeDocId(id) {
if (/^_design/.test(id)) {
return "_design/" + encodeURIComponent(id.slice(8));
}
if (/^_local/.test(id)) {
return "_local/" + encodeURIComponent(id.slice(7));
}
return encodeURIComponent(id);
}
function preprocessAttachments$1(doc) {
if (!doc._attachments || !Object.keys(doc._attachments)) {
return Promise.resolve();
}
return Promise.all(Object.keys(doc._attachments).map(function(key) {
let attachment = doc._attachments[key];
if (attachment.data && typeof attachment.data !== "string") {
return new Promise(function(resolve) {
blobToBase64(attachment.data, resolve);
}).then(function(b64) {
attachment.data = b64;
});
}
}));
}
function hasUrlPrefix(opts) {
if (!opts.prefix) {
return false;
}
let protocol = parseUri(opts.prefix).protocol;
return protocol === "http" || protocol === "https";
}
function getHost(name, opts) {
if (hasUrlPrefix(opts)) {
let dbName = opts.name.substr(opts.prefix.length);
let prefix = opts.prefix.replace(/\/?$/, "/");
name = prefix + encodeURIComponent(dbName);
}
let uri = parseUri(name);
if (uri.user || uri.password) {
uri.auth = { username: uri.user, password: uri.password };
}
let parts = uri.path.replace(/(^\/|\/$)/g, "").split("/");
uri.db = parts.pop();
if (uri.db.indexOf("%") === -1) {
uri.db = encodeURIComponent(uri.db);
}
uri.path = parts.join("/");
return uri;
}
function genDBUrl(opts, path) {
return genUrl(opts, opts.db + "/" + path);
}
function genUrl(opts, path) {
let pathDel = !opts.path ? "" : "/";
return opts.protocol + "://" + opts.host + (opts.port ? ":" + opts.port : "") + "/" + opts.path + pathDel + path;
}
function paramsToStr(params) {
return "?" + Object.keys(params).map(function(k) {
return k + "=" + encodeURIComponent(params[k]);
}).join("&");
}
function shouldCacheBust(opts) {
let ua = typeof navigator !== "undefined" && navigator.userAgent ? navigator.userAgent.toLowerCase() : "";
let isIE = ua.indexOf("msie") !== -1;
let isTrident = ua.indexOf("trident") !== -1;
let isEdge = ua.indexOf("edge") !== -1;
let isGET = !("method" in opts) || opts.method === "GET";
return (isIE || isTrident || isEdge) && isGET;
}
function HttpPouch(opts, callback) {
let api = this;
let host = getHost(opts.name, opts);
let dbUrl = genDBUrl(host, "");
opts = clone$1(opts);
const ourFetch = async function(url, options) {
options = options || {};
options.headers = options.headers || new h$1();
options.credentials = "include";
if (opts.auth || host.auth) {
let nAuth = opts.auth || host.auth;
let str = nAuth.username + ":" + nAuth.password;
let token = thisBtoa(unescape(encodeURIComponent(str)));
options.headers.set("Authorization", "Basic " + token);
}
let headers = opts.headers || {};
Object.keys(headers).forEach(function(key) {
options.headers.append(key, headers[key]);
});
if (shouldCacheBust(options)) {
url += (url.indexOf("?") === -1 ? "?" : "&") + "_nonce=" + Date.now();
}
let fetchFun = opts.fetch || f$1;
return await fetchFun(url, options);
};
function adapterFun$$1(name, fun) {
return adapterFun(name, function(...args) {
setup().then(function() {
return fun.apply(this, args);
}).catch(function(e) {
let callback2 = args.pop();
callback2(e);
});
}).bind(api);
}
async function fetchJSON(url, options) {
let result = {};
options = options || {};
options.headers = options.headers || new h$1();
if (!options.headers.get("Content-Type")) {
options.headers.set("Content-Type", "application/json");
}
if (!options.headers.get("Accept")) {
options.headers.set("Accept", "application/json");
}
const response = await ourFetch(url, options);
result.ok = response.ok;
result.status = response.status;
const json = await response.json();
result.data = json;
if (!result.ok) {
result.data.status = result.status;
let err = generateErrorFromResponse$1(result.data);
throw err;
}
if (Array.isArray(result.data)) {
result.data = result.data.map(function(v) {
if (v.error || v.missing) {
return generateErrorFromResponse$1(v);
} else {
return v;
}
});
}
return result;
}
let setupPromise;
async function setup() {
if (opts.skip_setup) {
return Promise.resolve();
}
if (setupPromise) {
return setupPromise;
}
setupPromise = fetchJSON(dbUrl).catch(function(err) {
if (err && err.status && err.status === 404) {
explainError(404, "PouchDB is just detecting if the remote exists.");
return fetchJSON(dbUrl, { method: "PUT" });
} else {
return Promise.reject(err);
}
}).catch(function(err) {
if (err && err.status && err.status === 412) {
return true;
}
return Promise.reject(err);
});
setupPromise.catch(function() {
setupPromise = null;
});
return setupPromise;
}
lib(function() {
callback(null, api);
});
api._remote = true;
api.type = function() {
return "http";
};
api.id = adapterFun$$1("id", async function(callback2) {
let result;
try {
const response = await ourFetch(genUrl(host, ""));
result = await response.json();
} catch (err) {
result = {};
}
let uuid$$1 = result && result.uuid ? result.uuid + host.db : genDBUrl(host, "");
callback2(null, uuid$$1);
});
api.compact = adapterFun$$1("compact", async function(opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
opts2 = clone$1(opts2);
await fetchJSON(genDBUrl(host, "_compact"), { method: "POST" });
function ping() {
api.info(function(err, res) {
if (res && !res.compact_running) {
callback2(null, { ok: true });
} else {
setTimeout(ping, opts2.interval || 200);
}
});
}
ping();
});
api.bulkGet = adapterFun("bulkGet", function(opts2, callback2) {
let self2 = this;
async function doBulkGet(cb) {
let params = {};
if (opts2.revs) {
params.revs = true;
}
if (opts2.attachments) {
params.attachments = true;
}
if (opts2.latest) {
params.latest = true;
}
try {
const result = await fetchJSON(genDBUrl(host, "_bulk_get" + paramsToStr(params)), {
method: "POST",
body: JSON.stringify({ docs: opts2.docs })
});
if (opts2.attachments && opts2.binary) {
result.data.results.forEach(function(res) {
res.docs.forEach(readAttachmentsAsBlobOrBuffer);
});
}
cb(null, result.data);
} catch (error) {
cb(error);
}
}
function doBulkGetShim() {
let batchSize = MAX_SIMULTANEOUS_REVS;
let numBatches = Math.ceil(opts2.docs.length / batchSize);
let numDone = 0;
let results = new Array(numBatches);
function onResult(batchNum) {
return function(err, res) {
results[batchNum] = res.results;
if (++numDone === numBatches) {
callback2(null, { results: flatten$2(results) });
}
};
}
for (let i = 0; i < numBatches; i++) {
let subOpts = pick$1(opts2, ["revs", "attachments", "binary", "latest"]);
subOpts.docs = opts2.docs.slice(
i * batchSize,
Math.min(opts2.docs.length, (i + 1) * batchSize)
);
bulkGet(self2, subOpts, onResult(i));
}
}
let dbUrl2 = genUrl(host, "");
let supportsBulkGet = supportsBulkGetMap[dbUrl2];
if (typeof supportsBulkGet !== "boolean") {
doBulkGet(function(err, res) {
if (err) {
supportsBulkGetMap[dbUrl2] = false;
explainError(
err.status,
"PouchDB is just detecting if the remote supports the _bulk_get API."
);
doBulkGetShim();
} else {
supportsBulkGetMap[dbUrl2] = true;
callback2(null, res);
}
});
} else if (supportsBulkGet) {
doBulkGet(callback2);
} else {
doBulkGetShim();
}
});
api._info = async function(callback2) {
try {
await setup();
const response = await ourFetch(genDBUrl(host, ""));
const info = await response.json();
info.host = genDBUrl(host, "");
callback2(null, info);
} catch (err) {
callback2(err);
}
};
api.fetch = async function(path, options) {
await setup();
const url = path.substring(0, 1) === "/" ? genUrl(host, path.substring(1)) : genDBUrl(host, path);
return ourFetch(url, options);
};
api.get = adapterFun$$1("get", async function(id, opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
opts2 = clone$1(opts2);
let params = {};
if (opts2.revs) {
params.revs = true;
}
if (opts2.revs_info) {
params.revs_info = true;
}
if (opts2.latest) {
params.latest = true;
}
if (opts2.open_revs) {
if (opts2.open_revs !== "all") {
opts2.open_revs = JSON.stringify(opts2.open_revs);
}
params.open_revs = opts2.open_revs;
}
if (opts2.rev) {
params.rev = opts2.rev;
}
if (opts2.conflicts) {
params.conflicts = opts2.conflicts;
}
if (opts2.update_seq) {
params.update_seq = opts2.update_seq;
}
id = encodeDocId(id);
function fetchAttachments(doc) {
let atts = doc._attachments;
let filenames = atts && Object.keys(atts);
if (!atts || !filenames.length) {
return;
}
async function fetchData(filename) {
const att = atts[filename];
const path = encodeDocId(doc._id) + "/" + encodeAttachmentId(filename) + "?rev=" + doc._rev;
const response = await ourFetch(genDBUrl(host, path));
let blob;
if ("buffer" in response) {
blob = await response.buffer();
} else {
blob = await response.blob();
}
let data;
if (opts2.binary) {
let typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, "type");
if (!typeFieldDescriptor || typeFieldDescriptor.set) {
blob.type = att.content_type;
}
data = blob;
} else {
data = await new Promise(function(resolve) {
blobToBase64(blob, resolve);
});
}
delete att.stub;
delete att.length;
att.data = data;
}
let promiseFactories = filenames.map(function(filename) {
return function() {
return fetchData(filename);
};
});
return pool(promiseFactories, 5);
}
function fetchAllAttachments(docOrDocs) {
if (Array.isArray(docOrDocs)) {
return Promise.all(docOrDocs.map(function(doc) {
if (doc.ok) {
return fetchAttachments(doc.ok);
}
}));
}
return fetchAttachments(docOrDocs);
}
const url = genDBUrl(host, id + paramsToStr(params));
try {
const res = await fetchJSON(url);
if (opts2.attachments) {
await fetchAllAttachments(res.data);
}
callback2(null, res.data);
} catch (error) {
error.docId = id;
callback2(error);
}
});
api.remove = adapterFun$$1("remove", async function(docOrId, optsOrRev, opts2, cb) {
let doc;
if (typeof optsOrRev === "string") {
doc = {
_id: docOrId,
_rev: optsOrRev
};
if (typeof opts2 === "function") {
cb = opts2;
opts2 = {};
}
} else {
doc = docOrId;
if (typeof optsOrRev === "function") {
cb = optsOrRev;
opts2 = {};
} else {
cb = opts2;
opts2 = optsOrRev;
}
}
const rev = doc._rev || opts2.rev;
const url = genDBUrl(host, encodeDocId(doc._id)) + "?rev=" + rev;
try {
const result = await fetchJSON(url, { method: "DELETE" });
cb(null, result.data);
} catch (error) {
cb(error);
}
});
function encodeAttachmentId(attachmentId) {
return attachmentId.split("/").map(encodeURIComponent).join("/");
}
api.getAttachment = adapterFun$$1("getAttachment", async function(docId, attachmentId, opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
const params = opts2.rev ? "?rev=" + opts2.rev : "";
const url = genDBUrl(host, encodeDocId(docId)) + "/" + encodeAttachmentId(attachmentId) + params;
let contentType;
try {
const response = await ourFetch(url, { method: "GET" });
if (!response.ok) {
throw response;
}
contentType = response.headers.get("content-type");
let blob;
if (typeof process !== "undefined" && !process.browser && typeof response.buffer === "function") {
blob = await response.buffer();
} else {
blob = await response.blob();
}
if (typeof process !== "undefined" && !process.browser) {
var typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, "type");
if (!typeFieldDescriptor || typeFieldDescriptor.set) {
blob.type = contentType;
}
}
callback2(null, blob);
} catch (err) {
callback2(err);
}
});
api.removeAttachment = adapterFun$$1("removeAttachment", async function(docId, attachmentId, rev, callback2) {
const url = genDBUrl(host, encodeDocId(docId) + "/" + encodeAttachmentId(attachmentId)) + "?rev=" + rev;
try {
const result = await fetchJSON(url, { method: "DELETE" });
callback2(null, result.data);
} catch (error) {
callback2(error);
}
});
api.putAttachment = adapterFun$$1("putAttachment", async function(docId, attachmentId, rev, blob, type, callback2) {
if (typeof type === "function") {
callback2 = type;
type = blob;
blob = rev;
rev = null;
}
const id = encodeDocId(docId) + "/" + encodeAttachmentId(attachmentId);
let url = genDBUrl(host, id);
if (rev) {
url += "?rev=" + rev;
}
if (typeof blob === "string") {
let binary;
try {
binary = thisAtob$1(blob);
} catch (err) {
return callback2(createError(
BAD_ARG,
"Attachment is not a valid base64 string"
));
}
blob = binary ? binStringToBluffer$1(binary, type) : "";
}
try {
const result = await fetchJSON(url, {
headers: new h$1({ "Content-Type": type }),
method: "PUT",
body: blob
});
callback2(null, result.data);
} catch (error) {
callback2(error);
}
});
api._bulkDocs = async function(req, opts2, callback2) {
req.new_edits = opts2.new_edits;
try {
await setup();
await Promise.all(req.docs.map(preprocessAttachments$1));
const result = await fetchJSON(genDBUrl(host, "_bulk_docs"), {
method: "POST",
body: JSON.stringify(req)
});
callback2(null, result.data);
} catch (error) {
callback2(error);
}
};
api._put = async function(doc, opts2, callback2) {
try {
await setup();
await preprocessAttachments$1(doc);
const result = await fetchJSON(genDBUrl(host, encodeDocId(doc._id)), {
method: "PUT",
body: JSON.stringify(doc)
});
callback2(null, result.data);
} catch (error) {
error.docId = doc && doc._id;
callback2(error);
}
};
api.allDocs = adapterFun$$1("allDocs", async function(opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
opts2 = clone$1(opts2);
let params = {};
let body;
let method = "GET";
if (opts2.conflicts) {
params.conflicts = true;
}
if (opts2.update_seq) {
params.update_seq = true;
}
if (opts2.descending) {
params.descending = true;
}
if (opts2.include_docs) {
params.include_docs = true;
}
if (opts2.attachments) {
params.attachments = true;
}
if (opts2.key) {
params.key = JSON.stringify(opts2.key);
}
if (opts2.start_key) {
opts2.startkey = opts2.start_key;
}
if (opts2.startkey) {
params.startkey = JSON.stringify(opts2.startkey);
}
if (opts2.end_key) {
opts2.endkey = opts2.end_key;
}
if (opts2.endkey) {
params.endkey = JSON.stringify(opts2.endkey);
}
if (typeof opts2.inclusive_end !== "undefined") {
params.inclusive_end = !!opts2.inclusive_end;
}
if (typeof opts2.limit !== "undefined") {
params.limit = opts2.limit;
}
if (typeof opts2.skip !== "undefined") {
params.skip = opts2.skip;
}
let paramStr = paramsToStr(params);
if (typeof opts2.keys !== "undefined") {
method = "POST";
body = { keys: opts2.keys };
}
try {
const result = await fetchJSON(genDBUrl(host, "_all_docs" + paramStr), {
method,
body: JSON.stringify(body)
});
if (opts2.include_docs && opts2.attachments && opts2.binary) {
result.data.rows.forEach(readAttachmentsAsBlobOrBuffer);
}
callback2(null, result.data);
} catch (error) {
callback2(error);
}
});
api._changes = function(opts2) {
let batchSize = "batch_size" in opts2 ? opts2.batch_size : CHANGES_BATCH_SIZE$1;
opts2 = clone$1(opts2);
if (opts2.continuous && !("heartbeat" in opts2)) {
opts2.heartbeat = DEFAULT_HEARTBEAT;
}
let requestTimeout = "timeout" in opts2 ? opts2.timeout : 30 * 1e3;
if ("timeout" in opts2 && opts2.timeout && requestTimeout - opts2.timeout < CHANGES_TIMEOUT_BUFFER) {
requestTimeout = opts2.timeout + CHANGES_TIMEOUT_BUFFER;
}
if ("heartbeat" in opts2 && opts2.heartbeat && requestTimeout - opts2.heartbeat < CHANGES_TIMEOUT_BUFFER) {
requestTimeout = opts2.heartbeat + CHANGES_TIMEOUT_BUFFER;
}
let params = {};
if ("timeout" in opts2 && opts2.timeout) {
params.timeout = opts2.timeout;
}
let limit = typeof opts2.limit !== "undefined" ? opts2.limit : false;
let leftToFetch = limit;
if (opts2.style) {
params.style = opts2.style;
}
if (opts2.include_docs || opts2.filter && typeof opts2.filter === "function") {
params.include_docs = true;
}
if (opts2.attachments) {
params.attachments = true;
}
if (opts2.continuous) {
params.feed = "longpoll";
}
if (opts2.seq_interval) {
params.seq_interval = opts2.seq_interval;
}
if (opts2.conflicts) {
params.conflicts = true;
}
if (opts2.descending) {
params.descending = true;
}
if (opts2.update_seq) {
params.update_seq = true;
}
if ("heartbeat" in opts2) {
if (opts2.heartbeat) {
params.heartbeat = opts2.heartbeat;
}
}
if (opts2.filter && typeof opts2.filter === "string") {
params.filter = opts2.filter;
}
if (opts2.view && typeof opts2.view === "string") {
params.filter = "_view";
params.view = opts2.view;
}
if (opts2.query_params && typeof opts2.query_params === "object") {
for (let param_name in opts2.query_params) {
if (Object.prototype.hasOwnProperty.call(opts2.query_params, param_name)) {
params[param_name] = opts2.query_params[param_name];
}
}
}
let method = "GET";
let body;
if (opts2.doc_ids) {
params.filter = "_doc_ids";
method = "POST";
body = { doc_ids: opts2.doc_ids };
} else if (opts2.selector) {
params.filter = "_selector";
method = "POST";
body = { selector: opts2.selector };
}
let controller = new a();
let lastFetchedSeq;
const fetchData = async function(since, callback2) {
if (opts2.aborted) {
return;
}
params.since = since;
if (typeof params.since === "object") {
params.since = JSON.stringify(params.since);
}
if (opts2.descending) {
if (limit) {
params.limit = leftToFetch;
}
} else {
params.limit = !limit || leftToFetch > batchSize ? batchSize : leftToFetch;
}
let url = genDBUrl(host, "_changes" + paramsToStr(params));
let fetchOpts = {
signal: controller.signal,
method,
body: JSON.stringify(body)
};
lastFetchedSeq = since;
if (opts2.aborted) {
return;
}
try {
await setup();
const result = await fetchJSON(url, fetchOpts);
callback2(null, result.data);
} catch (error) {
callback2(error);
}
};
let results = { results: [] };
const fetched = function(err, res) {
if (opts2.aborted) {
return;
}
let raw_results_length = 0;
if (res && res.results) {
raw_results_length = res.results.length;
results.last_seq = res.last_seq;
let pending = null;
let lastSeq = null;
if (typeof res.pending === "number") {
pending = res.pending;
}
if (typeof results.last_seq === "string" || typeof results.last_seq === "number") {
lastSeq = results.last_seq;
}
opts2.query_params;
res.results = res.results.filter(function(c) {
leftToFetch--;
let ret = filterChange(opts2)(c);
if (ret) {
if (opts2.include_docs && opts2.attachments && opts2.binary) {
readAttachmentsAsBlobOrBuffer(c);
}
if (opts2.return_docs) {
results.results.push(c);
}
opts2.onChange(c, pending, lastSeq);
}
return ret;
});
} else if (err) {
opts2.aborted = true;
opts2.complete(err);
return;
}
if (res && res.last_seq) {
lastFetchedSeq = res.last_seq;
}
let finished = limit && leftToFetch <= 0 || res && raw_results_length < batchSize || opts2.descending;
if (opts2.continuous && !(limit && leftToFetch <= 0) || !finished) {
lib(function() {
fetchData(lastFetchedSeq, fetched);
});
} else {
opts2.complete(null, results);
}
};
fetchData(opts2.since || 0, fetched);
return {
cancel: function() {
opts2.aborted = true;
controller.abort();
}
};
};
api.revsDiff = adapterFun$$1("revsDiff", async function(req, opts2, callback2) {
if (typeof opts2 === "function") {
callback2 = opts2;
opts2 = {};
}
try {
const result = await fetchJSON(genDBUrl(host, "_revs_diff"), {
method: "POST",
body: JSON.stringify(req)
});
callback2(null, result.data);
} catch (error) {
callback2(error);
}
});
api._close = function(callback2) {
callback2();
};
api._destroy = async function(options, callback2) {
try {
const json = await fetchJSON(genDBUrl(host, ""), { method: "DELETE" });
callback2(null, json);
} catch (error) {
if (error.status === 404) {
callback2(null, { ok: true });
} else {
callback2(error);
}
}
};
}
HttpPouch.valid = function() {
return true;
};
function HttpPouch$1(PouchDB2) {
PouchDB2.adapter("http", HttpPouch, false);
PouchDB2.adapter("https", HttpPouch, false);
}
let QueryParseError$1 = class QueryParseError extends Error {
constructor(message) {
super();
this.status = 400;
this.name = "query_parse_error";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, QueryParseError);
} catch (e) {
}
}
};
let NotFoundError$1 = class NotFoundError extends Error {
constructor(message) {
super();
this.status = 404;
this.name = "not_found";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, NotFoundError);
} catch (e) {
}
}
};
let BuiltInError$1 = class BuiltInError extends Error {
constructor(message) {
super();
this.status = 500;
this.name = "invalid_value";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, BuiltInError);
} catch (e) {
}
}
};
function promisedCallback$2(promise, callback) {
if (callback) {
promise.then(function(res) {
lib(function() {
callback(null, res);
});
}, function(reason) {
lib(function() {
callback(reason);
});
});
}
return promise;
}
function callbackify$2(fun) {
return function(...args) {
var cb = args.pop();
var promise = fun.apply(this, args);
if (typeof cb === "function") {
promisedCallback$2(promise, cb);
}
return promise;
};
}
function fin$1(promise, finalPromiseFactory) {
return promise.then(function(res) {
return finalPromiseFactory().then(function() {
return res;
});
}, function(reason) {
return finalPromiseFactory().then(function() {
throw reason;
});
});
}
function sequentialize$1(queue2, promiseFactory) {
return function() {
var args = arguments;
var that = this;
return queue2.add(function() {
return promiseFactory.apply(that, args);
});
};
}
function uniq$2(arr) {
var theSet = new ExportedSet$1(arr);
var result = new Array(theSet.size);
var index2 = -1;
theSet.forEach(function(value2) {
result[++index2] = value2;
});
return result;
}
function mapToKeysArray$1(map) {
var result = new Array(map.size);
var index2 = -1;
map.forEach(function(value2, key) {
result[++index2] = key;
});
return result;
}
function createBuiltInError(name) {
var message = "builtin " + name + " function requires map values to be numbers or number arrays";
return new BuiltInError$1(message);
}
function sum(values) {
var result = 0;
for (var i = 0, len2 = values.length; i < len2; i++) {
var num = values[i];
if (typeof num !== "number") {
if (Array.isArray(num)) {
result = typeof result === "number" ? [result] : result;
for (var j = 0, jLen = num.length; j < jLen; j++) {
var jNum = num[j];
if (typeof jNum !== "number") {
throw createBuiltInError("_sum");
} else if (typeof result[j] === "undefined") {
result.push(jNum);
} else {
result[j] += jNum;
}
}
} else {
throw createBuiltInError("_sum");
}
} else if (typeof result === "number") {
result += num;
} else {
result[0] += num;
}
}
return result;
}
var log = guardedConsole$1.bind(null, "log");
var isArray = Array.isArray;
var toJSON = JSON.parse;
function evalFunctionWithEval(func, emit2) {
return scopeEval(
"return (" + func.replace(/;\s*$/, "") + ");",
{
emit: emit2,
sum,
log,
isArray,
toJSON
}
);
}
let TaskQueue$1$1 = class TaskQueue$12 {
constructor() {
this.promise = new Promise(function(fulfill) {
fulfill();
});
}
add(promiseFactory) {
this.promise = this.promise.catch(function() {
}).then(function() {
return promiseFactory();
});
return this.promise;
}
finish() {
return this.promise;
}
};
function stringify$1(input) {
if (!input) {
return "undefined";
}
switch (typeof input) {
case "function":
return input.toString();
case "string":
return input.toString();
default:
return JSON.stringify(input);
}
}
function createViewSignature$1(mapFun, reduceFun) {
return stringify$1(mapFun) + stringify$1(reduceFun) + "undefined";
}
async function createView$1(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName2) {
const viewSignature = createViewSignature$1(mapFun, reduceFun);
let cachedViews;
if (!temporary) {
cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};
if (cachedViews[viewSignature]) {
return cachedViews[viewSignature];
}
}
const promiseForView = sourceDB.info().then(async function(info) {
const depDbName = info.db_name + "-mrview-" + (temporary ? "temp" : stringMd5$1(viewSignature));
function diffFunction(doc) {
doc.views = doc.views || {};
let fullViewName = viewName;
if (fullViewName.indexOf("/") === -1) {
fullViewName = viewName + "/" + viewName;
}
const depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};
if (depDbs[depDbName]) {
return;
}
depDbs[depDbName] = true;
return doc;
}
await upsert$1(sourceDB, "_local/" + localDocName2, diffFunction);
const res = await sourceDB.registerDependentDatabase(depDbName);
const db = res.db;
db.auto_compaction = true;
const view = {
name: depDbName,
db,
sourceDB,
adapter: sourceDB.adapter,
mapFun,
reduceFun
};
let lastSeqDoc;
try {
lastSeqDoc = await view.db.get("_local/lastSeq");
} catch (err) {
if (err.status !== 404) {
throw err;
}
}
view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;
if (cachedViews) {
view.db.once("destroyed", function() {
delete cachedViews[viewSignature];
});
}
return view;
});
if (cachedViews) {
cachedViews[viewSignature] = promiseForView;
}
return promiseForView;
}
var persistentQueues$1 = {};
var tempViewQueue$1 = new TaskQueue$1$1();
var CHANGES_BATCH_SIZE$1$1 = 50;
function parseViewName$1(name) {
return name.indexOf("/") === -1 ? [name, name] : name.split("/");
}
function isGenOne$1(changes2) {
return changes2.length === 1 && /^1-/.test(changes2[0].rev);
}
function emitError$1(db, e, data) {
try {
db.emit("error", e);
} catch (err) {
guardedConsole$1(
"error",
"The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."
);
guardedConsole$1("error", e, data);
}
}
function createAbstractMapReduce$1(localDocName2, mapper2, reducer2, ddocValidator2) {
function tryMap(db, fun, doc) {
try {
fun(doc);
} catch (e) {
emitError$1(db, e, { fun, doc });
}
}
function tryReduce(db, fun, keys2, values, rereduce) {
try {
return { output: fun(keys2, values, rereduce) };
} catch (e) {
emitError$1(db, e, { fun, keys: keys2, values, rereduce });
return { error: e };
}
}
function sortByKeyThenValue(x, y) {
const keyCompare = collate$1(x.key, y.key);
return keyCompare !== 0 ? keyCompare : collate$1(x.value, y.value);
}
function sliceResults(results, limit, skip) {
skip = skip || 0;
if (typeof limit === "number") {
return results.slice(skip, limit + skip);
} else if (skip > 0) {
return results.slice(skip);
}
return results;
}
function rowToDocId(row) {
const val = row.value;
const docId = val && typeof val === "object" && val._id || row.id;
return docId;
}
function readAttachmentsAsBlobOrBuffer2(res) {
res.rows.forEach(function(row) {
const atts = row.doc && row.doc._attachments;
if (!atts) {
return;
}
Object.keys(atts).forEach(function(filename) {
const att = atts[filename];
atts[filename].data = b64ToBluffer$1(att.data, att.content_type);
});
});
}
function postprocessAttachments(opts) {
return function(res) {
if (opts.include_docs && opts.attachments && opts.binary) {
readAttachmentsAsBlobOrBuffer2(res);
}
return res;
};
}
function addHttpParam(paramName, opts, params, asJson) {
let val = opts[paramName];
if (typeof val !== "undefined") {
if (asJson) {
val = encodeURIComponent(JSON.stringify(val));
}
params.push(paramName + "=" + val);
}
}
function coerceInteger(integerCandidate) {
if (typeof integerCandidate !== "undefined") {
const asNumber = Number(integerCandidate);
if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {
return asNumber;
} else {
return integerCandidate;
}
}
}
function coerceOptions(opts) {
opts.group_level = coerceInteger(opts.group_level);
opts.limit = coerceInteger(opts.limit);
opts.skip = coerceInteger(opts.skip);
return opts;
}
function checkPositiveInteger(number) {
if (number) {
if (typeof number !== "number") {
return new QueryParseError$1(`Invalid value for integer: "${number}"`);
}
if (number < 0) {
return new QueryParseError$1(`Invalid value for positive integer: "${number}"`);
}
}
}
function checkQueryParseError(options, fun) {
const startkeyName = options.descending ? "endkey" : "startkey";
const endkeyName = options.descending ? "startkey" : "endkey";
if (typeof options[startkeyName] !== "undefined" && typeof options[endkeyName] !== "undefined" && collate$1(options[startkeyName], options[endkeyName]) > 0) {
throw new QueryParseError$1("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");
} else if (fun.reduce && options.reduce !== false) {
if (options.include_docs) {
throw new QueryParseError$1("{include_docs:true} is invalid for reduce");
} else if (options.keys && options.keys.length > 1 && !options.group && !options.group_level) {
throw new QueryParseError$1("Multi-key fetches for reduce views must use {group: true}");
}
}
["group_level", "limit", "skip"].forEach(function(optionName) {
const error = checkPositiveInteger(options[optionName]);
if (error) {
throw error;
}
});
}
async function httpQuery(db, fun, opts) {
let params = [];
let body;
let method = "GET";
let ok;
addHttpParam("reduce", opts, params);
addHttpParam("include_docs", opts, params);
addHttpParam("attachments", opts, params);
addHttpParam("limit", opts, params);
addHttpParam("descending", opts, params);
addHttpParam("group", opts, params);
addHttpParam("group_level", opts, params);
addHttpParam("skip", opts, params);
addHttpParam("stale", opts, params);
addHttpParam("conflicts", opts, params);
addHttpParam("startkey", opts, params, true);
addHttpParam("start_key", opts, params, true);
addHttpParam("endkey", opts, params, true);
addHttpParam("end_key", opts, params, true);
addHttpParam("inclusive_end", opts, params);
addHttpParam("key", opts, params, true);
addHttpParam("update_seq", opts, params);
params = params.join("&");
params = params === "" ? "" : "?" + params;
if (typeof opts.keys !== "undefined") {
const MAX_URL_LENGTH = 2e3;
const keysAsString = `keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;
if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {
params += (params[0] === "?" ? "&" : "?") + keysAsString;
} else {
method = "POST";
if (typeof fun === "string") {
body = { keys: opts.keys };
} else {
fun.keys = opts.keys;
}
}
}
if (typeof fun === "string") {
const parts = parseViewName$1(fun);
const response2 = await db.fetch("_design/" + parts[0] + "/_view/" + parts[1] + params, {
headers: new h$1({ "Content-Type": "application/json" }),
method,
body: JSON.stringify(body)
});
ok = response2.ok;
const result2 = await response2.json();
if (!ok) {
result2.status = response2.status;
throw generateErrorFromResponse$1(result2);
}
result2.rows.forEach(function(row) {
if (row.value && row.value.error && row.value.error === "builtin_reduce_error") {
throw new Error(row.reason);
}
});
return new Promise(function(resolve) {
resolve(result2);
}).then(postprocessAttachments(opts));
}
body = body || {};
Object.keys(fun).forEach(function(key) {
if (Array.isArray(fun[key])) {
body[key] = fun[key];
} else {
body[key] = fun[key].toString();
}
});
const response = await db.fetch("_temp_view" + params, {
headers: new h$1({ "Content-Type": "application/json" }),
method: "POST",
body: JSON.stringify(body)
});
ok = response.ok;
const result = await response.json();
if (!ok) {
result.status = response.status;
throw generateErrorFromResponse$1(result);
}
return new Promise(function(resolve) {
resolve(result);
}).then(postprocessAttachments(opts));
}
function customQuery(db, fun, opts) {
return new Promise(function(resolve, reject) {
db._query(fun, opts, function(err, res) {
if (err) {
return reject(err);
}
resolve(res);
});
});
}
function customViewCleanup(db) {
return new Promise(function(resolve, reject) {
db._viewCleanup(function(err, res) {
if (err) {
return reject(err);
}
resolve(res);
});
});
}
function defaultsTo(value2) {
return function(reason) {
if (reason.status === 404) {
return value2;
} else {
throw reason;
}
};
}
async function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {
const metaDocId = "_local/doc_" + docId;
const defaultMetaDoc = { _id: metaDocId, keys: [] };
const docData = docIdsToChangesAndEmits.get(docId);
const indexableKeysToKeyValues = docData[0];
const changes2 = docData[1];
function getMetaDoc() {
if (isGenOne$1(changes2)) {
return Promise.resolve(defaultMetaDoc);
}
return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));
}
function getKeyValueDocs(metaDoc2) {
if (!metaDoc2.keys.length) {
return Promise.resolve({ rows: [] });
}
return view.db.allDocs({
keys: metaDoc2.keys,
include_docs: true
});
}
function processKeyValueDocs(metaDoc2, kvDocsRes) {
const kvDocs = [];
const oldKeys = new ExportedSet$1();
for (let i = 0, len2 = kvDocsRes.rows.length; i < len2; i++) {
const row = kvDocsRes.rows[i];
const doc = row.doc;
if (!doc) {
continue;
}
kvDocs.push(doc);
oldKeys.add(doc._id);
doc._deleted = !indexableKeysToKeyValues.has(doc._id);
if (!doc._deleted) {
const keyValue = indexableKeysToKeyValues.get(doc._id);
if ("value" in keyValue) {
doc.value = keyValue.value;
}
}
}
const newKeys = mapToKeysArray$1(indexableKeysToKeyValues);
newKeys.forEach(function(key) {
if (!oldKeys.has(key)) {
const kvDoc = {
_id: key
};
const keyValue = indexableKeysToKeyValues.get(key);
if ("value" in keyValue) {
kvDoc.value = keyValue.value;
}
kvDocs.push(kvDoc);
}
});
metaDoc2.keys = uniq$2(newKeys.concat(metaDoc2.keys));
kvDocs.push(metaDoc2);
return kvDocs;
}
const metaDoc = await getMetaDoc();
const keyValueDocs = await getKeyValueDocs(metaDoc);
return processKeyValueDocs(metaDoc, keyValueDocs);
}
function updatePurgeSeq(view) {
return view.sourceDB.get("_local/purges").then(function(res) {
const purgeSeq = res.purgeSeq;
return view.db.get("_local/purgeSeq").then(function(res2) {
return res2._rev;
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return void 0;
}).then(function(rev) {
return view.db.put({
_id: "_local/purgeSeq",
_rev: rev,
purgeSeq
});
});
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
});
}
function saveKeyValues(view, docIdsToChangesAndEmits, seq) {
var seqDocId = "_local/lastSeq";
return view.db.get(seqDocId).catch(defaultsTo({ _id: seqDocId, seq: 0 })).then(function(lastSeqDoc) {
var docIds = mapToKeysArray$1(docIdsToChangesAndEmits);
return Promise.all(docIds.map(function(docId) {
return getDocsToPersist(docId, view, docIdsToChangesAndEmits);
})).then(function(listOfDocsToPersist) {
var docsToPersist = flatten$2(listOfDocsToPersist);
lastSeqDoc.seq = seq;
docsToPersist.push(lastSeqDoc);
return view.db.bulkDocs({ docs: docsToPersist });
}).then(() => updatePurgeSeq(view));
});
}
function getQueue(view) {
const viewName = typeof view === "string" ? view : view.name;
let queue2 = persistentQueues$1[viewName];
if (!queue2) {
queue2 = persistentQueues$1[viewName] = new TaskQueue$1$1();
}
return queue2;
}
async function updateView(view, opts) {
return sequentialize$1(getQueue(view), function() {
return updateViewInQueue(view, opts);
})();
}
async function updateViewInQueue(view, opts) {
let mapResults;
let doc;
let taskId;
function emit2(key, value2) {
const output = { id: doc._id, key: normalizeKey$1(key) };
if (typeof value2 !== "undefined" && value2 !== null) {
output.value = normalizeKey$1(value2);
}
mapResults.push(output);
}
const mapFun = mapper2(view.mapFun, emit2);
let currentSeq = view.seq || 0;
function createTask() {
return view.sourceDB.info().then(function(info) {
taskId = view.sourceDB.activeTasks.add({
name: "view_indexing",
total_items: info.update_seq - currentSeq
});
});
}
function processChange2(docIdsToChangesAndEmits, seq) {
return function() {
return saveKeyValues(view, docIdsToChangesAndEmits, seq);
};
}
let indexed_docs = 0;
const progress = {
view: view.name,
indexed_docs
};
view.sourceDB.emit("indexing", progress);
const queue2 = new TaskQueue$1$1();
async function processNextBatch() {
const response = await view.sourceDB.changes({
return_docs: true,
conflicts: true,
include_docs: true,
style: "all_docs",
since: currentSeq,
limit: opts.changes_batch_size
});
const purges = await getRecentPurges();
return processBatch(response, purges);
}
function getRecentPurges() {
return view.db.get("_local/purgeSeq").then(function(res) {
return res.purgeSeq;
}).catch(function(err) {
if (err && err.status !== 404) {
throw err;
}
return -1;
}).then(function(purgeSeq) {
return view.sourceDB.get("_local/purges").then(function(res) {
const recentPurges = res.purges.filter(function(purge, index2) {
return index2 > purgeSeq;
}).map((purge) => purge.docId);
const uniquePurges = recentPurges.filter(function(docId, index2) {
return recentPurges.indexOf(docId) === index2;
});
return Promise.all(uniquePurges.map(function(docId) {
return view.sourceDB.get(docId).then(function(doc2) {
return { docId, doc: doc2 };
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return { docId };
});
}));
}).catch(function(err) {
if (err && err.status !== 404) {
throw err;
}
return [];
});
});
}
function processBatch(response, purges) {
var results = response.results;
if (!results.length && !purges.length) {
return;
}
for (let purge of purges) {
const index2 = results.findIndex(function(change) {
return change.id === purge.docId;
});
if (index2 < 0) {
const entry = {
_id: purge.docId,
doc: {
_id: purge.docId,
_deleted: 1
},
changes: []
};
if (purge.doc) {
entry.doc = purge.doc;
entry.changes.push({ rev: purge.doc._rev });
}
results.push(entry);
}
}
var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);
queue2.add(processChange2(docIdsToChangesAndEmits, currentSeq));
indexed_docs = indexed_docs + results.length;
const progress2 = {
view: view.name,
last_seq: response.last_seq,
results_count: results.length,
indexed_docs
};
view.sourceDB.emit("indexing", progress2);
view.sourceDB.activeTasks.update(taskId, { completed_items: indexed_docs });
if (results.length < opts.changes_batch_size) {
return;
}
return processNextBatch();
}
function createDocIdsToChangesAndEmits(results) {
const docIdsToChangesAndEmits = new ExportedMap$1();
for (let i = 0, len2 = results.length; i < len2; i++) {
const change = results[i];
if (change.doc._id[0] !== "_") {
mapResults = [];
doc = change.doc;
if (!doc._deleted) {
tryMap(view.sourceDB, mapFun, doc);
}
mapResults.sort(sortByKeyThenValue);
const indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);
docIdsToChangesAndEmits.set(change.doc._id, [
indexableKeysToKeyValues,
change.changes
]);
}
currentSeq = change.seq;
}
return docIdsToChangesAndEmits;
}
function createIndexableKeysToKeyValues(mapResults2) {
const indexableKeysToKeyValues = new ExportedMap$1();
let lastKey;
for (let i = 0, len2 = mapResults2.length; i < len2; i++) {
const emittedKeyValue = mapResults2[i];
const complexKey = [emittedKeyValue.key, emittedKeyValue.id];
if (i > 0 && collate$1(emittedKeyValue.key, lastKey) === 0) {
complexKey.push(i);
}
indexableKeysToKeyValues.set(toIndexableString$1(complexKey), emittedKeyValue);
lastKey = emittedKeyValue.key;
}
return indexableKeysToKeyValues;
}
try {
await createTask();
await processNextBatch();
await queue2.finish();
view.seq = currentSeq;
view.sourceDB.activeTasks.remove(taskId);
} catch (error) {
view.sourceDB.activeTasks.remove(taskId, error);
}
}
function reduceView(view, results, options) {
if (options.group_level === 0) {
delete options.group_level;
}
const shouldGroup = options.group || options.group_level;
const reduceFun = reducer2(view.reduceFun);
const groups = [];
const lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY : options.group_level;
results.forEach(function(e) {
const last = groups[groups.length - 1];
let groupKey = shouldGroup ? e.key : null;
if (shouldGroup && Array.isArray(groupKey)) {
groupKey = groupKey.slice(0, lvl);
}
if (last && collate$1(last.groupKey, groupKey) === 0) {
last.keys.push([e.key, e.id]);
last.values.push(e.value);
return;
}
groups.push({
keys: [[e.key, e.id]],
values: [e.value],
groupKey
});
});
results = [];
for (let i = 0, len2 = groups.length; i < len2; i++) {
const e = groups[i];
const reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);
if (reduceTry.error && reduceTry.error instanceof BuiltInError$1) {
throw reduceTry.error;
}
results.push({
// CouchDB just sets the value to null if a non-built-in errors out
value: reduceTry.error ? null : reduceTry.output,
key: e.groupKey
});
}
return { rows: sliceResults(results, options.limit, options.skip) };
}
function queryView(view, opts) {
return sequentialize$1(getQueue(view), function() {
return queryViewInQueue(view, opts);
})();
}
async function queryViewInQueue(view, opts) {
let totalRows;
const shouldReduce = view.reduceFun && opts.reduce !== false;
const skip = opts.skip || 0;
if (typeof opts.keys !== "undefined" && !opts.keys.length) {
opts.limit = 0;
delete opts.keys;
}
async function fetchFromView(viewOpts) {
viewOpts.include_docs = true;
const res = await view.db.allDocs(viewOpts);
totalRows = res.total_rows;
return res.rows.map(function(result) {
if ("value" in result.doc && typeof result.doc.value === "object" && result.doc.value !== null) {
const keys2 = Object.keys(result.doc.value).sort();
const expectedKeys = ["id", "key", "value"];
if (!(keys2 < expectedKeys || keys2 > expectedKeys)) {
return result.doc.value;
}
}
const parsedKeyAndDocId = parseIndexableString$1(result.doc._id);
return {
key: parsedKeyAndDocId[0],
id: parsedKeyAndDocId[1],
value: "value" in result.doc ? result.doc.value : null
};
});
}
async function onMapResultsReady(rows) {
let finalResults;
if (shouldReduce) {
finalResults = reduceView(view, rows, opts);
} else if (typeof opts.keys === "undefined") {
finalResults = {
total_rows: totalRows,
offset: skip,
rows
};
} else {
finalResults = {
total_rows: totalRows,
offset: skip,
rows: sliceResults(rows, opts.limit, opts.skip)
};
}
if (opts.update_seq) {
finalResults.update_seq = view.seq;
}
if (opts.include_docs) {
const docIds = uniq$2(rows.map(rowToDocId));
const allDocsRes = await view.sourceDB.allDocs({
keys: docIds,
include_docs: true,
conflicts: opts.conflicts,
attachments: opts.attachments,
binary: opts.binary
});
var docIdsToDocs = new ExportedMap$1();
allDocsRes.rows.forEach(function(row) {
docIdsToDocs.set(row.id, row.doc);
});
rows.forEach(function(row) {
var docId = rowToDocId(row);
var doc = docIdsToDocs.get(docId);
if (doc) {
row.doc = doc;
}
});
return finalResults;
} else {
return finalResults;
}
}
if (typeof opts.keys !== "undefined") {
const keys2 = opts.keys;
const fetchPromises = keys2.map(function(key) {
const viewOpts = {
startkey: toIndexableString$1([key]),
endkey: toIndexableString$1([key, {}])
};
if (opts.update_seq) {
viewOpts.update_seq = true;
}
return fetchFromView(viewOpts);
});
const result = await Promise.all(fetchPromises);
const flattenedResult = flatten$2(result);
return onMapResultsReady(flattenedResult);
} else {
const viewOpts = {
descending: opts.descending
};
if (opts.update_seq) {
viewOpts.update_seq = true;
}
let startkey;
let endkey;
if ("start_key" in opts) {
startkey = opts.start_key;
}
if ("startkey" in opts) {
startkey = opts.startkey;
}
if ("end_key" in opts) {
endkey = opts.end_key;
}
if ("endkey" in opts) {
endkey = opts.endkey;
}
if (typeof startkey !== "undefined") {
viewOpts.startkey = opts.descending ? toIndexableString$1([startkey, {}]) : toIndexableString$1([startkey]);
}
if (typeof endkey !== "undefined") {
let inclusiveEnd = opts.inclusive_end !== false;
if (opts.descending) {
inclusiveEnd = !inclusiveEnd;
}
viewOpts.endkey = toIndexableString$1(
inclusiveEnd ? [endkey, {}] : [endkey]
);
}
if (typeof opts.key !== "undefined") {
const keyStart = toIndexableString$1([opts.key]);
const keyEnd = toIndexableString$1([opts.key, {}]);
if (viewOpts.descending) {
viewOpts.endkey = keyStart;
viewOpts.startkey = keyEnd;
} else {
viewOpts.startkey = keyStart;
viewOpts.endkey = keyEnd;
}
}
if (!shouldReduce) {
if (typeof opts.limit === "number") {
viewOpts.limit = opts.limit;
}
viewOpts.skip = skip;
}
const result = await fetchFromView(viewOpts);
return onMapResultsReady(result);
}
}
async function httpViewCleanup(db) {
const response = await db.fetch("_view_cleanup", {
headers: new h$1({ "Content-Type": "application/json" }),
method: "POST"
});
return response.json();
}
async function localViewCleanup(db) {
try {
const metaDoc = await db.get("_local/" + localDocName2);
const docsToViews = new ExportedMap$1();
Object.keys(metaDoc.views).forEach(function(fullViewName) {
const parts = parseViewName$1(fullViewName);
const designDocName = "_design/" + parts[0];
const viewName = parts[1];
let views = docsToViews.get(designDocName);
if (!views) {
views = new ExportedSet$1();
docsToViews.set(designDocName, views);
}
views.add(viewName);
});
const opts = {
keys: mapToKeysArray$1(docsToViews),
include_docs: true
};
const res = await db.allDocs(opts);
const viewsToStatus = {};
res.rows.forEach(function(row) {
const ddocName = row.key.substring(8);
docsToViews.get(row.key).forEach(function(viewName) {
let fullViewName = ddocName + "/" + viewName;
if (!metaDoc.views[fullViewName]) {
fullViewName = viewName;
}
const viewDBNames = Object.keys(metaDoc.views[fullViewName]);
const statusIsGood = row.doc && row.doc.views && row.doc.views[viewName];
viewDBNames.forEach(function(viewDBName) {
viewsToStatus[viewDBName] = viewsToStatus[viewDBName] || statusIsGood;
});
});
});
const dbsToDelete = Object.keys(viewsToStatus).filter(function(viewDBName) {
return !viewsToStatus[viewDBName];
});
const destroyPromises = dbsToDelete.map(function(viewDBName) {
return sequentialize$1(getQueue(viewDBName), function() {
return new db.constructor(viewDBName, db.__opts).destroy();
})();
});
return Promise.all(destroyPromises).then(function() {
return { ok: true };
});
} catch (err) {
if (err.status === 404) {
return { ok: true };
} else {
throw err;
}
}
}
async function queryPromised(db, fun, opts) {
if (typeof db._query === "function") {
return customQuery(db, fun, opts);
}
if (isRemote$1(db)) {
return httpQuery(db, fun, opts);
}
const updateViewOpts = {
changes_batch_size: db.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE$1$1
};
if (typeof fun !== "string") {
checkQueryParseError(opts, fun);
tempViewQueue$1.add(async function() {
const view = await createView$1(
/* sourceDB */
db,
/* viewName */
"temp_view/temp_view",
/* mapFun */
fun.map,
/* reduceFun */
fun.reduce,
/* temporary */
true,
/* localDocName */
localDocName2
);
return fin$1(
updateView(view, updateViewOpts).then(
function() {
return queryView(view, opts);
}
),
function() {
return view.db.destroy();
}
);
});
return tempViewQueue$1.finish();
} else {
const fullViewName = fun;
const parts = parseViewName$1(fullViewName);
const designDocName = parts[0];
const viewName = parts[1];
const doc = await db.get("_design/" + designDocName);
fun = doc.views && doc.views[viewName];
if (!fun) {
throw new NotFoundError$1(`ddoc ${doc._id} has no view named ${viewName}`);
}
ddocValidator2(doc, viewName);
checkQueryParseError(opts, fun);
const view = await createView$1(
/* sourceDB */
db,
/* viewName */
fullViewName,
/* mapFun */
fun.map,
/* reduceFun */
fun.reduce,
/* temporary */
false,
/* localDocName */
localDocName2
);
if (opts.stale === "ok" || opts.stale === "update_after") {
if (opts.stale === "update_after") {
lib(function() {
updateView(view, updateViewOpts);
});
}
return queryView(view, opts);
} else {
await updateView(view, updateViewOpts);
return queryView(view, opts);
}
}
}
function abstractQuery(fun, opts, callback) {
const db = this;
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts = opts ? coerceOptions(opts) : {};
if (typeof fun === "function") {
fun = { map: fun };
}
const promise = Promise.resolve().then(function() {
return queryPromised(db, fun, opts);
});
promisedCallback$2(promise, callback);
return promise;
}
const abstractViewCleanup = callbackify$2(function() {
const db = this;
if (typeof db._viewCleanup === "function") {
return customViewCleanup(db);
}
if (isRemote$1(db)) {
return httpViewCleanup(db);
}
return localViewCleanup(db);
});
return {
query: abstractQuery,
viewCleanup: abstractViewCleanup
};
}
var builtInReduce = {
_sum: function(keys2, values) {
return sum(values);
},
_count: function(keys2, values) {
return values.length;
},
_stats: function(keys2, values) {
function sumsqr(values2) {
var _sumsqr = 0;
for (var i = 0, len2 = values2.length; i < len2; i++) {
var num = values2[i];
_sumsqr += num * num;
}
return _sumsqr;
}
return {
sum: sum(values),
min: Math.min.apply(null, values),
max: Math.max.apply(null, values),
count: values.length,
sumsqr: sumsqr(values)
};
}
};
function getBuiltIn(reduceFunString) {
if (/^_sum/.test(reduceFunString)) {
return builtInReduce._sum;
} else if (/^_count/.test(reduceFunString)) {
return builtInReduce._count;
} else if (/^_stats/.test(reduceFunString)) {
return builtInReduce._stats;
} else if (/^_/.test(reduceFunString)) {
throw new Error(reduceFunString + " is not a supported reduce function.");
}
}
function mapper$1(mapFun, emit2) {
if (typeof mapFun === "function" && mapFun.length === 2) {
var origMap = mapFun;
return function(doc) {
return origMap(doc, emit2);
};
} else {
return evalFunctionWithEval(mapFun.toString(), emit2);
}
}
function reducer$1(reduceFun) {
var reduceFunString = reduceFun.toString();
var builtIn = getBuiltIn(reduceFunString);
if (builtIn) {
return builtIn;
} else {
return evalFunctionWithEval(reduceFunString);
}
}
function ddocValidator$1(ddoc, viewName) {
var fun = ddoc.views && ddoc.views[viewName];
if (typeof fun.map !== "string") {
throw new NotFoundError$1("ddoc " + ddoc._id + " has no string view named " + viewName + ", instead found object of type: " + typeof fun.map);
}
}
var localDocName = "mrviews";
var abstract = createAbstractMapReduce$1(localDocName, mapper$1, reducer$1, ddocValidator$1);
function query(fun, opts, callback) {
return abstract.query.call(this, fun, opts, callback);
}
function viewCleanup(callback) {
return abstract.viewCleanup.call(this, callback);
}
var mapreduce = {
query,
viewCleanup
};
function fileHasChanged(localDoc, remoteDoc, filename) {
return !localDoc._attachments || !localDoc._attachments[filename] || localDoc._attachments[filename].digest !== remoteDoc._attachments[filename].digest;
}
function getDocAttachments(db, doc) {
var filenames = Object.keys(doc._attachments);
return Promise.all(filenames.map(function(filename) {
return db.getAttachment(doc._id, filename, { rev: doc._rev });
}));
}
function getDocAttachmentsFromTargetOrSource(target2, src, doc) {
var doCheckForLocalAttachments = isRemote$1(src) && !isRemote$1(target2);
var filenames = Object.keys(doc._attachments);
if (!doCheckForLocalAttachments) {
return getDocAttachments(src, doc);
}
return target2.get(doc._id).then(function(localDoc) {
return Promise.all(filenames.map(function(filename) {
if (fileHasChanged(localDoc, doc, filename)) {
return src.getAttachment(doc._id, filename);
}
return target2.getAttachment(localDoc._id, filename);
}));
}).catch(function(error) {
if (error.status !== 404) {
throw error;
}
return getDocAttachments(src, doc);
});
}
function createBulkGetOpts(diffs) {
var requests = [];
Object.keys(diffs).forEach(function(id) {
var missingRevs = diffs[id].missing;
missingRevs.forEach(function(missingRev) {
requests.push({
id,
rev: missingRev
});
});
});
return {
docs: requests,
revs: true,
latest: true
};
}
function getDocs(src, target2, diffs, state) {
diffs = clone$1(diffs);
var resultDocs = [], ok = true;
function getAllDocs() {
var bulkGetOpts = createBulkGetOpts(diffs);
if (!bulkGetOpts.docs.length) {
return;
}
return src.bulkGet(bulkGetOpts).then(function(bulkGetResponse) {
if (state.cancelled) {
throw new Error("cancelled");
}
return Promise.all(bulkGetResponse.results.map(function(bulkGetInfo) {
return Promise.all(bulkGetInfo.docs.map(function(doc) {
var remoteDoc = doc.ok;
if (doc.error) {
ok = false;
}
if (!remoteDoc || !remoteDoc._attachments) {
return remoteDoc;
}
return getDocAttachmentsFromTargetOrSource(target2, src, remoteDoc).then(function(attachments) {
var filenames = Object.keys(remoteDoc._attachments);
attachments.forEach(function(attachment, i) {
var att = remoteDoc._attachments[filenames[i]];
delete att.stub;
delete att.length;
att.data = attachment;
});
return remoteDoc;
});
}));
})).then(function(results) {
resultDocs = resultDocs.concat(flatten$2(results).filter(Boolean));
});
});
}
function returnResult() {
return { ok, docs: resultDocs };
}
return Promise.resolve().then(getAllDocs).then(returnResult);
}
var CHECKPOINT_VERSION = 1;
var REPLICATOR = "pouchdb";
var CHECKPOINT_HISTORY_SIZE = 5;
var LOWEST_SEQ = 0;
function updateCheckpoint(db, id, checkpoint, session, returnValue) {
return db.get(id).catch(function(err) {
if (err.status === 404) {
if (db.adapter === "http" || db.adapter === "https") {
explainError(
404,
"PouchDB is just checking if a remote checkpoint exists."
);
}
return {
session_id: session,
_id: id,
history: [],
replicator: REPLICATOR,
version: CHECKPOINT_VERSION
};
}
throw err;
}).then(function(doc) {
if (returnValue.cancelled) {
return;
}
if (doc.last_seq === checkpoint) {
return;
}
doc.history = (doc.history || []).filter(function(item) {
return item.session_id !== session;
});
doc.history.unshift({
last_seq: checkpoint,
session_id: session
});
doc.history = doc.history.slice(0, CHECKPOINT_HISTORY_SIZE);
doc.version = CHECKPOINT_VERSION;
doc.replicator = REPLICATOR;
doc.session_id = session;
doc.last_seq = checkpoint;
return db.put(doc).catch(function(err) {
if (err.status === 409) {
return updateCheckpoint(db, id, checkpoint, session, returnValue);
}
throw err;
});
});
}
class CheckpointerInternal {
constructor(src, target2, id, returnValue, opts) {
this.src = src;
this.target = target2;
this.id = id;
this.returnValue = returnValue;
this.opts = opts || {};
}
writeCheckpoint(checkpoint, session) {
var self2 = this;
return this.updateTarget(checkpoint, session).then(function() {
return self2.updateSource(checkpoint, session);
});
}
updateTarget(checkpoint, session) {
if (this.opts.writeTargetCheckpoint) {
return updateCheckpoint(
this.target,
this.id,
checkpoint,
session,
this.returnValue
);
} else {
return Promise.resolve(true);
}
}
updateSource(checkpoint, session) {
if (this.opts.writeSourceCheckpoint) {
var self2 = this;
return updateCheckpoint(
this.src,
this.id,
checkpoint,
session,
this.returnValue
).catch(function(err) {
if (isForbiddenError(err)) {
self2.opts.writeSourceCheckpoint = false;
return true;
}
throw err;
});
} else {
return Promise.resolve(true);
}
}
getCheckpoint() {
var self2 = this;
if (self2.opts && self2.opts.writeSourceCheckpoint && !self2.opts.writeTargetCheckpoint) {
return self2.src.get(self2.id).then(function(sourceDoc) {
return sourceDoc.last_seq || LOWEST_SEQ;
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return LOWEST_SEQ;
});
}
return self2.target.get(self2.id).then(function(targetDoc) {
if (self2.opts && self2.opts.writeTargetCheckpoint && !self2.opts.writeSourceCheckpoint) {
return targetDoc.last_seq || LOWEST_SEQ;
}
return self2.src.get(self2.id).then(function(sourceDoc) {
if (targetDoc.version !== sourceDoc.version) {
return LOWEST_SEQ;
}
var version2;
if (targetDoc.version) {
version2 = targetDoc.version.toString();
} else {
version2 = "undefined";
}
if (version2 in comparisons) {
return comparisons[version2](targetDoc, sourceDoc);
}
return LOWEST_SEQ;
}, function(err) {
if (err.status === 404 && targetDoc.last_seq) {
return self2.src.put({
_id: self2.id,
last_seq: LOWEST_SEQ
}).then(function() {
return LOWEST_SEQ;
}, function(err2) {
if (isForbiddenError(err2)) {
self2.opts.writeSourceCheckpoint = false;
return targetDoc.last_seq;
}
return LOWEST_SEQ;
});
}
throw err;
});
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return LOWEST_SEQ;
});
}
}
var comparisons = {
"undefined": function(targetDoc, sourceDoc) {
if (collate$1(targetDoc.last_seq, sourceDoc.last_seq) === 0) {
return sourceDoc.last_seq;
}
return 0;
},
"1": function(targetDoc, sourceDoc) {
return compareReplicationLogs(sourceDoc, targetDoc).last_seq;
}
};
function compareReplicationLogs(srcDoc, tgtDoc) {
if (srcDoc.session_id === tgtDoc.session_id) {
return {
last_seq: srcDoc.last_seq,
history: srcDoc.history
};
}
return compareReplicationHistory(srcDoc.history, tgtDoc.history);
}
function compareReplicationHistory(sourceHistory, targetHistory) {
var S = sourceHistory[0];
var sourceRest = sourceHistory.slice(1);
var T = targetHistory[0];
var targetRest = targetHistory.slice(1);
if (!S || targetHistory.length === 0) {
return {
last_seq: LOWEST_SEQ,
history: []
};
}
var sourceId = S.session_id;
if (hasSessionId(sourceId, targetHistory)) {
return {
last_seq: S.last_seq,
history: sourceHistory
};
}
var targetId = T.session_id;
if (hasSessionId(targetId, sourceRest)) {
return {
last_seq: T.last_seq,
history: targetRest
};
}
return compareReplicationHistory(sourceRest, targetRest);
}
function hasSessionId(sessionId, history) {
var props = history[0];
var rest = history.slice(1);
if (!sessionId || history.length === 0) {
return false;
}
if (sessionId === props.session_id) {
return true;
}
return hasSessionId(sessionId, rest);
}
function isForbiddenError(err) {
return typeof err.status === "number" && Math.floor(err.status / 100) === 4;
}
function Checkpointer(src, target2, id, returnValue, opts) {
if (!(this instanceof CheckpointerInternal)) {
return new CheckpointerInternal(src, target2, id, returnValue, opts);
}
return Checkpointer;
}
var STARTING_BACK_OFF = 0;
function backOff(opts, returnValue, error, callback) {
if (opts.retry === false) {
returnValue.emit("error", error);
returnValue.removeAllListeners();
return;
}
if (typeof opts.back_off_function !== "function") {
opts.back_off_function = defaultBackOff;
}
returnValue.emit("requestError", error);
if (returnValue.state === "active" || returnValue.state === "pending") {
returnValue.emit("paused", error);
returnValue.state = "stopped";
var backOffSet = function backoffTimeSet() {
opts.current_back_off = STARTING_BACK_OFF;
};
var removeBackOffSetter = function removeBackOffTimeSet() {
returnValue.removeListener("active", backOffSet);
};
returnValue.once("paused", removeBackOffSetter);
returnValue.once("active", backOffSet);
}
opts.current_back_off = opts.current_back_off || STARTING_BACK_OFF;
opts.current_back_off = opts.back_off_function(opts.current_back_off);
setTimeout(callback, opts.current_back_off);
}
function sortObjectPropertiesByKey(queryParams) {
return Object.keys(queryParams).sort(collate$1).reduce(function(result, key) {
result[key] = queryParams[key];
return result;
}, {});
}
function generateReplicationId(src, target2, opts) {
var docIds = opts.doc_ids ? opts.doc_ids.sort(collate$1) : "";
var filterFun = opts.filter ? opts.filter.toString() : "";
var queryParams = "";
var filterViewName = "";
var selector = "";
if (opts.selector) {
selector = JSON.stringify(opts.selector);
}
if (opts.filter && opts.query_params) {
queryParams = JSON.stringify(sortObjectPropertiesByKey(opts.query_params));
}
if (opts.filter && opts.filter === "_view") {
filterViewName = opts.view.toString();
}
return Promise.all([src.id(), target2.id()]).then(function(res) {
var queryData = res[0] + res[1] + filterFun + filterViewName + queryParams + docIds + selector;
return new Promise(function(resolve) {
binaryMd5(queryData, resolve);
});
}).then(function(md5sum) {
md5sum = md5sum.replace(/\//g, ".").replace(/\+/g, "_");
return "_local/" + md5sum;
});
}
function replicate(src, target2, opts, returnValue, result) {
var batches = [];
var currentBatch;
var pendingBatch = {
seq: 0,
changes: [],
docs: []
};
var writingCheckpoint = false;
var changesCompleted = false;
var replicationCompleted = false;
var initial_last_seq = 0;
var last_seq = 0;
var continuous = opts.continuous || opts.live || false;
var batch_size = opts.batch_size || 100;
var batches_limit = opts.batches_limit || 10;
var style2 = opts.style || "all_docs";
var changesPending = false;
var doc_ids = opts.doc_ids;
var selector = opts.selector;
var repId;
var checkpointer;
var changedDocs = [];
var session = uuid();
var taskId;
result = result || {
ok: true,
start_time: (/* @__PURE__ */ new Date()).toISOString(),
docs_read: 0,
docs_written: 0,
doc_write_failures: 0,
errors: []
};
var changesOpts = {};
returnValue.ready(src, target2);
function initCheckpointer() {
if (checkpointer) {
return Promise.resolve();
}
return generateReplicationId(src, target2, opts).then(function(res) {
repId = res;
var checkpointOpts = {};
if (opts.checkpoint === false) {
checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: false };
} else if (opts.checkpoint === "source") {
checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: false };
} else if (opts.checkpoint === "target") {
checkpointOpts = { writeSourceCheckpoint: false, writeTargetCheckpoint: true };
} else {
checkpointOpts = { writeSourceCheckpoint: true, writeTargetCheckpoint: true };
}
checkpointer = new Checkpointer(src, target2, repId, returnValue, checkpointOpts);
});
}
function writeDocs() {
changedDocs = [];
if (currentBatch.docs.length === 0) {
return;
}
var docs = currentBatch.docs;
var bulkOpts = { timeout: opts.timeout };
return target2.bulkDocs({ docs, new_edits: false }, bulkOpts).then(function(res) {
if (returnValue.cancelled) {
completeReplication();
throw new Error("cancelled");
}
var errorsById = /* @__PURE__ */ Object.create(null);
res.forEach(function(res2) {
if (res2.error) {
errorsById[res2.id] = res2;
}
});
var errorsNo = Object.keys(errorsById).length;
result.doc_write_failures += errorsNo;
result.docs_written += docs.length - errorsNo;
docs.forEach(function(doc) {
var error = errorsById[doc._id];
if (error) {
result.errors.push(error);
var errorName = (error.name || "").toLowerCase();
if (errorName === "unauthorized" || errorName === "forbidden") {
returnValue.emit("denied", clone$1(error));
} else {
throw error;
}
} else {
changedDocs.push(doc);
}
});
}, function(err) {
result.doc_write_failures += docs.length;
throw err;
});
}
function finishBatch() {
if (currentBatch.error) {
throw new Error("There was a problem getting docs.");
}
result.last_seq = last_seq = currentBatch.seq;
var outResult = clone$1(result);
if (changedDocs.length) {
outResult.docs = changedDocs;
if (typeof currentBatch.pending === "number") {
outResult.pending = currentBatch.pending;
delete currentBatch.pending;
}
returnValue.emit("change", outResult);
}
writingCheckpoint = true;
src.info().then(function(info) {
var task = src.activeTasks.get(taskId);
if (!currentBatch || !task) {
return;
}
var completed = task.completed_items || 0;
var total_items = parseInt(info.update_seq, 10) - parseInt(initial_last_seq, 10);
src.activeTasks.update(taskId, {
completed_items: completed + currentBatch.changes.length,
total_items
});
});
return checkpointer.writeCheckpoint(
currentBatch.seq,
session
).then(function() {
returnValue.emit("checkpoint", { "checkpoint": currentBatch.seq });
writingCheckpoint = false;
if (returnValue.cancelled) {
completeReplication();
throw new Error("cancelled");
}
currentBatch = void 0;
getChanges2();
}).catch(function(err) {
onCheckpointError(err);
throw err;
});
}
function getDiffs() {
var diff = {};
currentBatch.changes.forEach(function(change) {
returnValue.emit("checkpoint", { "revs_diff": change });
if (change.id === "_user/") {
return;
}
diff[change.id] = change.changes.map(function(x) {
return x.rev;
});
});
return target2.revsDiff(diff).then(function(diffs) {
if (returnValue.cancelled) {
completeReplication();
throw new Error("cancelled");
}
currentBatch.diffs = diffs;
});
}
function getBatchDocs() {
return getDocs(src, target2, currentBatch.diffs, returnValue).then(function(got) {
currentBatch.error = !got.ok;
got.docs.forEach(function(doc) {
delete currentBatch.diffs[doc._id];
result.docs_read++;
currentBatch.docs.push(doc);
});
});
}
function startNextBatch() {
if (returnValue.cancelled || currentBatch) {
return;
}
if (batches.length === 0) {
processPendingBatch(true);
return;
}
currentBatch = batches.shift();
returnValue.emit("checkpoint", { "start_next_batch": currentBatch.seq });
getDiffs().then(getBatchDocs).then(writeDocs).then(finishBatch).then(startNextBatch).catch(function(err) {
abortReplication("batch processing terminated with error", err);
});
}
function processPendingBatch(immediate$$1) {
if (pendingBatch.changes.length === 0) {
if (batches.length === 0 && !currentBatch) {
if (continuous && changesOpts.live || changesCompleted) {
returnValue.state = "pending";
returnValue.emit("paused");
}
if (changesCompleted) {
completeReplication();
}
}
return;
}
if (immediate$$1 || changesCompleted || pendingBatch.changes.length >= batch_size) {
batches.push(pendingBatch);
pendingBatch = {
seq: 0,
changes: [],
docs: []
};
if (returnValue.state === "pending" || returnValue.state === "stopped") {
returnValue.state = "active";
returnValue.emit("active");
}
startNextBatch();
}
}
function abortReplication(reason, err) {
if (replicationCompleted) {
return;
}
if (!err.message) {
err.message = reason;
}
result.ok = false;
result.status = "aborting";
batches = [];
pendingBatch = {
seq: 0,
changes: [],
docs: []
};
completeReplication(err);
}
function completeReplication(fatalError) {
if (replicationCompleted) {
return;
}
if (returnValue.cancelled) {
result.status = "cancelled";
if (writingCheckpoint) {
return;
}
}
result.status = result.status || "complete";
result.end_time = (/* @__PURE__ */ new Date()).toISOString();
result.last_seq = last_seq;
replicationCompleted = true;
src.activeTasks.remove(taskId, fatalError);
if (fatalError) {
fatalError = createError(fatalError);
fatalError.result = result;
var errorName = (fatalError.name || "").toLowerCase();
if (errorName === "unauthorized" || errorName === "forbidden") {
returnValue.emit("error", fatalError);
returnValue.removeAllListeners();
} else {
backOff(opts, returnValue, fatalError, function() {
replicate(src, target2, opts, returnValue);
});
}
} else {
returnValue.emit("complete", result);
returnValue.removeAllListeners();
}
}
function onChange(change, pending, lastSeq) {
if (returnValue.cancelled) {
return completeReplication();
}
if (typeof pending === "number") {
pendingBatch.pending = pending;
}
var filter2 = filterChange(opts)(change);
if (!filter2) {
var task = src.activeTasks.get(taskId);
if (task) {
var completed = task.completed_items || 0;
src.activeTasks.update(taskId, { completed_items: ++completed });
}
return;
}
pendingBatch.seq = change.seq || lastSeq;
pendingBatch.changes.push(change);
returnValue.emit("checkpoint", { "pending_batch": pendingBatch.seq });
lib(function() {
processPendingBatch(batches.length === 0 && changesOpts.live);
});
}
function onChangesComplete(changes2) {
changesPending = false;
if (returnValue.cancelled) {
return completeReplication();
}
if (changes2.results.length > 0) {
changesOpts.since = changes2.results[changes2.results.length - 1].seq;
getChanges2();
processPendingBatch(true);
} else {
var complete = function() {
if (continuous) {
changesOpts.live = true;
getChanges2();
} else {
changesCompleted = true;
}
processPendingBatch(true);
};
if (!currentBatch && changes2.results.length === 0) {
writingCheckpoint = true;
checkpointer.writeCheckpoint(
changes2.last_seq,
session
).then(function() {
writingCheckpoint = false;
result.last_seq = last_seq = changes2.last_seq;
if (returnValue.cancelled) {
completeReplication();
throw new Error("cancelled");
} else {
complete();
}
}).catch(onCheckpointError);
} else {
complete();
}
}
}
function onChangesError(err) {
changesPending = false;
if (returnValue.cancelled) {
return completeReplication();
}
abortReplication("changes rejected", err);
}
function getChanges2() {
if (!(!changesPending && !changesCompleted && batches.length < batches_limit)) {
return;
}
changesPending = true;
function abortChanges() {
changes2.cancel();
}
function removeListener2() {
returnValue.removeListener("cancel", abortChanges);
}
if (returnValue._changes) {
returnValue.removeListener("cancel", returnValue._abortChanges);
returnValue._changes.cancel();
}
returnValue.once("cancel", abortChanges);
var changes2 = src.changes(changesOpts).on("change", onChange);
changes2.then(removeListener2, removeListener2);
changes2.then(onChangesComplete).catch(onChangesError);
if (opts.retry) {
returnValue._changes = changes2;
returnValue._abortChanges = abortChanges;
}
}
function createTask(checkpoint) {
return src.info().then(function(info) {
var total_items = typeof opts.since === "undefined" ? parseInt(info.update_seq, 10) - parseInt(checkpoint, 10) : parseInt(info.update_seq, 10);
taskId = src.activeTasks.add({
name: `${continuous ? "continuous " : ""}replication from ${info.db_name}`,
total_items
});
return checkpoint;
});
}
function startChanges() {
initCheckpointer().then(function() {
if (returnValue.cancelled) {
completeReplication();
return;
}
return checkpointer.getCheckpoint().then(createTask).then(function(checkpoint) {
last_seq = checkpoint;
initial_last_seq = checkpoint;
changesOpts = {
since: last_seq,
limit: batch_size,
batch_size,
style: style2,
doc_ids,
selector,
return_docs: true
// required so we know when we're done
};
if (opts.filter) {
if (typeof opts.filter !== "string") {
changesOpts.include_docs = true;
} else {
changesOpts.filter = opts.filter;
}
}
if ("heartbeat" in opts) {
changesOpts.heartbeat = opts.heartbeat;
}
if ("timeout" in opts) {
changesOpts.timeout = opts.timeout;
}
if (opts.query_params) {
changesOpts.query_params = opts.query_params;
}
if (opts.view) {
changesOpts.view = opts.view;
}
getChanges2();
});
}).catch(function(err) {
abortReplication("getCheckpoint rejected with ", err);
});
}
function onCheckpointError(err) {
writingCheckpoint = false;
abortReplication("writeCheckpoint completed with error", err);
}
if (returnValue.cancelled) {
completeReplication();
return;
}
if (!returnValue._addedListeners) {
returnValue.once("cancel", completeReplication);
if (typeof opts.complete === "function") {
returnValue.once("error", opts.complete);
returnValue.once("complete", function(result2) {
opts.complete(null, result2);
});
}
returnValue._addedListeners = true;
}
if (typeof opts.since === "undefined") {
startChanges();
} else {
initCheckpointer().then(function() {
writingCheckpoint = true;
return checkpointer.writeCheckpoint(opts.since, session);
}).then(function() {
writingCheckpoint = false;
if (returnValue.cancelled) {
completeReplication();
return;
}
last_seq = opts.since;
startChanges();
}).catch(onCheckpointError);
}
}
class Replication extends eventsExports {
constructor() {
super();
this.cancelled = false;
this.state = "pending";
const promise = new Promise((fulfill, reject) => {
this.once("complete", fulfill);
this.once("error", reject);
});
this.then = function(resolve, reject) {
return promise.then(resolve, reject);
};
this.catch = function(reject) {
return promise.catch(reject);
};
this.catch(function() {
});
}
cancel() {
this.cancelled = true;
this.state = "cancelled";
this.emit("cancel");
}
ready(src, target2) {
if (this._readyCalled) {
return;
}
this._readyCalled = true;
const onDestroy = () => {
this.cancel();
};
src.once("destroyed", onDestroy);
target2.once("destroyed", onDestroy);
function cleanup() {
src.removeListener("destroyed", onDestroy);
target2.removeListener("destroyed", onDestroy);
}
this.once("complete", cleanup);
this.once("error", cleanup);
}
}
function toPouch(db, opts) {
var PouchConstructor = opts.PouchConstructor;
if (typeof db === "string") {
return new PouchConstructor(db, opts);
} else {
return db;
}
}
function replicateWrapper(src, target2, opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
if (typeof opts === "undefined") {
opts = {};
}
if (opts.doc_ids && !Array.isArray(opts.doc_ids)) {
throw createError(
BAD_REQUEST,
"`doc_ids` filter parameter is not a list."
);
}
opts.complete = callback;
opts = clone$1(opts);
opts.continuous = opts.continuous || opts.live;
opts.retry = "retry" in opts ? opts.retry : false;
opts.PouchConstructor = opts.PouchConstructor || this;
var replicateRet = new Replication(opts);
var srcPouch = toPouch(src, opts);
var targetPouch = toPouch(target2, opts);
replicate(srcPouch, targetPouch, opts, replicateRet);
return replicateRet;
}
function sync(src, target2, opts, callback) {
if (typeof opts === "function") {
callback = opts;
opts = {};
}
if (typeof opts === "undefined") {
opts = {};
}
opts = clone$1(opts);
opts.PouchConstructor = opts.PouchConstructor || this;
src = toPouch(src, opts);
target2 = toPouch(target2, opts);
return new Sync(src, target2, opts, callback);
}
class Sync extends eventsExports {
constructor(src, target2, opts, callback) {
super();
this.canceled = false;
const optsPush = opts.push ? $inject_Object_assign({}, opts, opts.push) : opts;
const optsPull = opts.pull ? $inject_Object_assign({}, opts, opts.pull) : opts;
this.push = replicateWrapper(src, target2, optsPush);
this.pull = replicateWrapper(target2, src, optsPull);
this.pushPaused = true;
this.pullPaused = true;
const pullChange = (change) => {
this.emit("change", {
direction: "pull",
change
});
};
const pushChange = (change) => {
this.emit("change", {
direction: "push",
change
});
};
const pushDenied = (doc) => {
this.emit("denied", {
direction: "push",
doc
});
};
const pullDenied = (doc) => {
this.emit("denied", {
direction: "pull",
doc
});
};
const pushPaused = () => {
this.pushPaused = true;
if (this.pullPaused) {
this.emit("paused");
}
};
const pullPaused = () => {
this.pullPaused = true;
if (this.pushPaused) {
this.emit("paused");
}
};
const pushActive = () => {
this.pushPaused = false;
if (this.pullPaused) {
this.emit("active", {
direction: "push"
});
}
};
const pullActive = () => {
this.pullPaused = false;
if (this.pushPaused) {
this.emit("active", {
direction: "pull"
});
}
};
let removed = {};
const removeAll = (type) => {
return (event, func) => {
const isChange = event === "change" && (func === pullChange || func === pushChange);
const isDenied = event === "denied" && (func === pullDenied || func === pushDenied);
const isPaused = event === "paused" && (func === pullPaused || func === pushPaused);
const isActive = event === "active" && (func === pullActive || func === pushActive);
if (isChange || isDenied || isPaused || isActive) {
if (!(event in removed)) {
removed[event] = {};
}
removed[event][type] = true;
if (Object.keys(removed[event]).length === 2) {
this.removeAllListeners(event);
}
}
};
};
if (opts.live) {
this.push.on("complete", this.pull.cancel.bind(this.pull));
this.pull.on("complete", this.push.cancel.bind(this.push));
}
function addOneListener(ee, event, listener) {
if (ee.listeners(event).indexOf(listener) == -1) {
ee.on(event, listener);
}
}
this.on("newListener", function(event) {
if (event === "change") {
addOneListener(this.pull, "change", pullChange);
addOneListener(this.push, "change", pushChange);
} else if (event === "denied") {
addOneListener(this.pull, "denied", pullDenied);
addOneListener(this.push, "denied", pushDenied);
} else if (event === "active") {
addOneListener(this.pull, "active", pullActive);
addOneListener(this.push, "active", pushActive);
} else if (event === "paused") {
addOneListener(this.pull, "paused", pullPaused);
addOneListener(this.push, "paused", pushPaused);
}
});
this.on("removeListener", function(event) {
if (event === "change") {
this.pull.removeListener("change", pullChange);
this.push.removeListener("change", pushChange);
} else if (event === "denied") {
this.pull.removeListener("denied", pullDenied);
this.push.removeListener("denied", pushDenied);
} else if (event === "active") {
this.pull.removeListener("active", pullActive);
this.push.removeListener("active", pushActive);
} else if (event === "paused") {
this.pull.removeListener("paused", pullPaused);
this.push.removeListener("paused", pushPaused);
}
});
this.pull.on("removeListener", removeAll("pull"));
this.push.on("removeListener", removeAll("push"));
const promise = Promise.all([
this.push,
this.pull
]).then((resp) => {
const out = {
push: resp[0],
pull: resp[1]
};
this.emit("complete", out);
if (callback) {
callback(null, out);
}
this.removeAllListeners();
return out;
}, (err) => {
this.cancel();
if (callback) {
callback(err);
} else {
this.emit("error", err);
}
this.removeAllListeners();
if (callback) {
throw err;
}
});
this.then = function(success, err) {
return promise.then(success, err);
};
this.catch = function(err) {
return promise.catch(err);
};
}
cancel() {
if (!this.canceled) {
this.canceled = true;
this.push.cancel();
this.pull.cancel();
}
}
}
function replication(PouchDB2) {
PouchDB2.replicate = replicateWrapper;
PouchDB2.sync = sync;
Object.defineProperty(PouchDB2.prototype, "replicate", {
get: function() {
var self2 = this;
if (typeof this.replicateMethods === "undefined") {
this.replicateMethods = {
from: function(other, opts, callback) {
return self2.constructor.replicate(other, self2, opts, callback);
},
to: function(other, opts, callback) {
return self2.constructor.replicate(self2, other, opts, callback);
}
};
}
return this.replicateMethods;
}
});
PouchDB2.prototype.sync = function(dbName, opts, callback) {
return this.constructor.sync(this, dbName, opts, callback);
};
}
PouchDB.plugin(IDBPouch).plugin(HttpPouch$1).plugin(mapreduce).plugin(replication);
class PouchError2 extends Error {
constructor(status, error, reason) {
super();
this.status = status;
this.name = error;
this.message = reason;
this.error = true;
}
toString() {
return JSON.stringify({
status: this.status,
name: this.name,
message: this.message,
reason: this.reason
});
}
}
new PouchError2(401, "unauthorized", "Name or password is incorrect.");
new PouchError2(400, "bad_request", "Missing JSON list of 'docs'");
new PouchError2(404, "not_found", "missing");
new PouchError2(409, "conflict", "Document update conflict");
new PouchError2(400, "bad_request", "_id field must contain a string");
new PouchError2(412, "missing_id", "_id is required for puts");
new PouchError2(400, "bad_request", "Only reserved document ids may start with underscore.");
new PouchError2(412, "precondition_failed", "Database not open");
var UNKNOWN_ERROR = new PouchError2(500, "unknown_error", "Database encountered an unknown error");
new PouchError2(500, "badarg", "Some query argument is invalid");
new PouchError2(400, "invalid_request", "Request was invalid");
new PouchError2(400, "query_parse_error", "Some query parameter is invalid");
new PouchError2(500, "doc_validation", "Bad special document member");
new PouchError2(400, "bad_request", "Something wrong with the request");
new PouchError2(400, "bad_request", "Document must be a JSON object");
new PouchError2(404, "not_found", "Database not found");
new PouchError2(500, "indexed_db_went_bad", "unknown");
new PouchError2(500, "web_sql_went_bad", "unknown");
new PouchError2(500, "levelDB_went_went_bad", "unknown");
new PouchError2(403, "forbidden", "Forbidden by design doc validate_doc_update function");
new PouchError2(400, "bad_request", "Invalid rev format");
new PouchError2(412, "file_exists", "The database could not be created, the file already exists.");
new PouchError2(412, "missing_stub", "A pre-existing attachment stub wasn't found");
new PouchError2(413, "invalid_url", "Provided URL is invalid");
function generateErrorFromResponse(err) {
if (typeof err !== "object") {
var data = err;
err = UNKNOWN_ERROR;
err.data = data;
}
if ("error" in err && err.error === "conflict") {
err.name = "conflict";
err.status = 409;
}
if (!("name" in err)) {
err.name = err.error || "unknown";
}
if (!("status" in err)) {
err.status = 500;
}
if (!("message" in err)) {
err.message = err.message || err.reason;
}
if (!("stack" in err)) {
err.stack = new Error().stack;
}
return err;
}
var h = Headers;
function mangle(key) {
return "$" + key;
}
function unmangle(key) {
return key.substring(1);
}
function Map$1() {
this._store = {};
}
Map$1.prototype.get = function(key) {
var mangled = mangle(key);
return this._store[mangled];
};
Map$1.prototype.set = function(key, value2) {
var mangled = mangle(key);
this._store[mangled] = value2;
return true;
};
Map$1.prototype.has = function(key) {
var mangled = mangle(key);
return mangled in this._store;
};
Map$1.prototype.keys = function() {
return Object.keys(this._store).map((k) => unmangle(k));
};
Map$1.prototype.delete = function(key) {
var mangled = mangle(key);
var res = mangled in this._store;
delete this._store[mangled];
return res;
};
Map$1.prototype.forEach = function(cb) {
var keys2 = Object.keys(this._store);
for (var i = 0, len2 = keys2.length; i < len2; i++) {
var key = keys2[i];
var value2 = this._store[key];
key = unmangle(key);
cb(value2, key);
}
};
Object.defineProperty(Map$1.prototype, "size", {
get: function() {
return Object.keys(this._store).length;
}
});
function Set$1(array) {
this._store = new Map$1();
if (array && Array.isArray(array)) {
for (var i = 0, len2 = array.length; i < len2; i++) {
this.add(array[i]);
}
}
}
Set$1.prototype.add = function(key) {
return this._store.set(key, true);
};
Set$1.prototype.has = function(key) {
return this._store.has(key);
};
Set$1.prototype.forEach = function(cb) {
this._store.forEach(function(value2, key) {
cb(key);
});
};
Object.defineProperty(Set$1.prototype, "size", {
get: function() {
return this._store.size;
}
});
function supportsMapAndSet() {
if (typeof Symbol === "undefined" || typeof Map === "undefined" || typeof Set === "undefined") {
return false;
}
var prop = Object.getOwnPropertyDescriptor(Map, Symbol.species);
return prop && "get" in prop && Map[Symbol.species] === Map;
}
var ExportedSet;
var ExportedMap;
{
if (supportsMapAndSet()) {
ExportedSet = Set;
ExportedMap = Map;
} else {
ExportedSet = Set$1;
ExportedMap = Map$1;
}
}
var thisAtob = function(str) {
return atob(str);
};
function createBlob(parts, properties) {
parts = parts || [];
properties = properties || {};
try {
return new Blob(parts, properties);
} catch (e) {
if (e.name !== "TypeError") {
throw e;
}
var Builder = typeof BlobBuilder !== "undefined" ? BlobBuilder : typeof MSBlobBuilder !== "undefined" ? MSBlobBuilder : typeof MozBlobBuilder !== "undefined" ? MozBlobBuilder : WebKitBlobBuilder;
var builder = new Builder();
for (var i = 0; i < parts.length; i += 1) {
builder.append(parts[i]);
}
return builder.getBlob(properties.type);
}
}
function binaryStringToArrayBuffer(bin) {
var length = bin.length;
var buf2 = new ArrayBuffer(length);
var arr = new Uint8Array(buf2);
for (var i = 0; i < length; i++) {
arr[i] = bin.charCodeAt(i);
}
return buf2;
}
function binStringToBluffer(binString, type) {
return createBlob([binaryStringToArrayBuffer(binString)], { type });
}
function b64ToBluffer(b64, type) {
return binStringToBluffer(thisAtob(b64), type);
}
function pad(str, padWith, upToLength) {
var padding = "";
var targetLength = upToLength - str.length;
while (padding.length < targetLength) {
padding += padWith;
}
return padding;
}
function padLeft(str, padWith, upToLength) {
var padding = pad(str, padWith, upToLength);
return padding + str;
}
var MIN_MAGNITUDE = -324;
var MAGNITUDE_DIGITS = 3;
var SEP = "";
function collate(a2, b) {
if (a2 === b) {
return 0;
}
a2 = normalizeKey(a2);
b = normalizeKey(b);
var ai = collationIndex(a2);
var bi = collationIndex(b);
if (ai - bi !== 0) {
return ai - bi;
}
switch (typeof a2) {
case "number":
return a2 - b;
case "boolean":
return a2 < b ? -1 : 1;
case "string":
return stringCollate(a2, b);
}
return Array.isArray(a2) ? arrayCollate(a2, b) : objectCollate(a2, b);
}
function normalizeKey(key) {
switch (typeof key) {
case "undefined":
return null;
case "number":
if (key === Infinity || key === -Infinity || isNaN(key)) {
return null;
}
return key;
case "object":
var origKey = key;
if (Array.isArray(key)) {
var len2 = key.length;
key = new Array(len2);
for (var i = 0; i < len2; i++) {
key[i] = normalizeKey(origKey[i]);
}
} else if (key instanceof Date) {
return key.toJSON();
} else if (key !== null) {
key = {};
for (var k in origKey) {
if (Object.prototype.hasOwnProperty.call(origKey, k)) {
var val = origKey[k];
if (typeof val !== "undefined") {
key[k] = normalizeKey(val);
}
}
}
}
}
return key;
}
function indexify(key) {
if (key !== null) {
switch (typeof key) {
case "boolean":
return key ? 1 : 0;
case "number":
return numToIndexableString(key);
case "string":
return key.replace(/\u0002/g, "").replace(/\u0001/g, "").replace(/\u0000/g, "");
case "object":
var isArray2 = Array.isArray(key);
var arr = isArray2 ? key : Object.keys(key);
var i = -1;
var len2 = arr.length;
var result = "";
if (isArray2) {
while (++i < len2) {
result += toIndexableString(arr[i]);
}
} else {
while (++i < len2) {
var objKey = arr[i];
result += toIndexableString(objKey) + toIndexableString(key[objKey]);
}
}
return result;
}
}
return "";
}
function toIndexableString(key) {
var zero = "\0";
key = normalizeKey(key);
return collationIndex(key) + SEP + indexify(key) + zero;
}
function parseNumber(str, i) {
var originalIdx = i;
var num;
var zero = str[i] === "1";
if (zero) {
num = 0;
i++;
} else {
var neg = str[i] === "0";
i++;
var numAsString = "";
var magAsString = str.substring(i, i + MAGNITUDE_DIGITS);
var magnitude = parseInt(magAsString, 10) + MIN_MAGNITUDE;
if (neg) {
magnitude = -magnitude;
}
i += MAGNITUDE_DIGITS;
while (true) {
var ch = str[i];
if (ch === "\0") {
break;
} else {
numAsString += ch;
}
i++;
}
numAsString = numAsString.split(".");
if (numAsString.length === 1) {
num = parseInt(numAsString, 10);
} else {
num = parseFloat(numAsString[0] + "." + numAsString[1]);
}
if (neg) {
num = num - 10;
}
if (magnitude !== 0) {
num = parseFloat(num + "e" + magnitude);
}
}
return { num, length: i - originalIdx };
}
function pop(stack, metaStack) {
var obj = stack.pop();
if (metaStack.length) {
var lastMetaElement = metaStack[metaStack.length - 1];
if (obj === lastMetaElement.element) {
metaStack.pop();
lastMetaElement = metaStack[metaStack.length - 1];
}
var element = lastMetaElement.element;
var lastElementIndex = lastMetaElement.index;
if (Array.isArray(element)) {
element.push(obj);
} else if (lastElementIndex === stack.length - 2) {
var key = stack.pop();
element[key] = obj;
} else {
stack.push(obj);
}
}
}
function parseIndexableString(str) {
var stack = [];
var metaStack = [];
var i = 0;
while (true) {
var collationIndex2 = str[i++];
if (collationIndex2 === "\0") {
if (stack.length === 1) {
return stack.pop();
} else {
pop(stack, metaStack);
continue;
}
}
switch (collationIndex2) {
case "1":
stack.push(null);
break;
case "2":
stack.push(str[i] === "1");
i++;
break;
case "3":
var parsedNum = parseNumber(str, i);
stack.push(parsedNum.num);
i += parsedNum.length;
break;
case "4":
var parsedStr = "";
while (true) {
var ch = str[i];
if (ch === "\0") {
break;
}
parsedStr += ch;
i++;
}
parsedStr = parsedStr.replace(/\u0001\u0001/g, "\0").replace(/\u0001\u0002/g, "").replace(/\u0002\u0002/g, "");
stack.push(parsedStr);
break;
case "5":
var arrayElement = { element: [], index: stack.length };
stack.push(arrayElement.element);
metaStack.push(arrayElement);
break;
case "6":
var objElement = { element: {}, index: stack.length };
stack.push(objElement.element);
metaStack.push(objElement);
break;
default:
throw new Error(
"bad collationIndex or unexpectedly reached end of input: " + collationIndex2
);
}
}
}
function arrayCollate(a2, b) {
var len2 = Math.min(a2.length, b.length);
for (var i = 0; i < len2; i++) {
var sort = collate(a2[i], b[i]);
if (sort !== 0) {
return sort;
}
}
return a2.length === b.length ? 0 : a2.length > b.length ? 1 : -1;
}
function stringCollate(a2, b) {
return a2 === b ? 0 : a2 > b ? 1 : -1;
}
function objectCollate(a2, b) {
var ak = Object.keys(a2), bk = Object.keys(b);
var len2 = Math.min(ak.length, bk.length);
for (var i = 0; i < len2; i++) {
var sort = collate(ak[i], bk[i]);
if (sort !== 0) {
return sort;
}
sort = collate(a2[ak[i]], b[bk[i]]);
if (sort !== 0) {
return sort;
}
}
return ak.length === bk.length ? 0 : ak.length > bk.length ? 1 : -1;
}
function collationIndex(x) {
var id = ["boolean", "number", "string", "object"];
var idx = id.indexOf(typeof x);
if (~idx) {
if (x === null) {
return 1;
}
if (Array.isArray(x)) {
return 5;
}
return idx < 3 ? idx + 2 : idx + 3;
}
if (Array.isArray(x)) {
return 5;
}
}
function numToIndexableString(num) {
if (num === 0) {
return "1";
}
var expFormat = num.toExponential().split(/e\+?/);
var magnitude = parseInt(expFormat[1], 10);
var neg = num < 0;
var result = neg ? "0" : "2";
var magForComparison = (neg ? -magnitude : magnitude) - MIN_MAGNITUDE;
var magString = padLeft(magForComparison.toString(), "0", MAGNITUDE_DIGITS);
result += SEP + magString;
var factor = Math.abs(parseFloat(expFormat[0]));
if (neg) {
factor = 10 - factor;
}
var factorStr = factor.toFixed(20);
factorStr = factorStr.replace(/\.?0+$/, "");
result += SEP + factorStr;
return result;
}
function stringMd5(string) {
return Md5.hash(string);
}
function isBinaryObject(object) {
return typeof ArrayBuffer !== "undefined" && object instanceof ArrayBuffer || typeof Blob !== "undefined" && object instanceof Blob;
}
function cloneArrayBuffer(buff) {
if (typeof buff.slice === "function") {
return buff.slice(0);
}
var target2 = new ArrayBuffer(buff.byteLength);
var targetArray = new Uint8Array(target2);
var sourceArray = new Uint8Array(buff);
targetArray.set(sourceArray);
return target2;
}
function cloneBinaryObject(object) {
if (object instanceof ArrayBuffer) {
return cloneArrayBuffer(object);
}
var size = object.size;
var type = object.type;
if (typeof object.slice === "function") {
return object.slice(0, size, type);
}
return object.webkitSlice(0, size, type);
}
var funcToString = Function.prototype.toString;
var objectCtorString = funcToString.call(Object);
function isPlainObject(value2) {
var proto = Object.getPrototypeOf(value2);
if (proto === null) {
return true;
}
var Ctor = proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
function clone(object) {
var newObject;
var i;
var len2;
if (!object || typeof object !== "object") {
return object;
}
if (Array.isArray(object)) {
newObject = [];
for (i = 0, len2 = object.length; i < len2; i++) {
newObject[i] = clone(object[i]);
}
return newObject;
}
if (object instanceof Date && isFinite(object)) {
return object.toISOString();
}
if (isBinaryObject(object)) {
return cloneBinaryObject(object);
}
if (!isPlainObject(object)) {
return object;
}
newObject = {};
for (i in object) {
if (Object.prototype.hasOwnProperty.call(object, i)) {
var value2 = clone(object[i]);
if (typeof value2 !== "undefined") {
newObject[i] = value2;
}
}
}
return newObject;
}
function once2(fun) {
var called = false;
return function(...args) {
if (called) {
throw new Error("once called more than once");
} else {
called = true;
fun.apply(this, args);
}
};
}
function toPromise(func) {
return function(...args) {
args = clone(args);
var self2 = this;
var usedCB = typeof args[args.length - 1] === "function" ? args.pop() : false;
var promise = new Promise(function(fulfill, reject) {
var resp;
try {
var callback = once2(function(err, mesg) {
if (err) {
reject(err);
} else {
fulfill(mesg);
}
});
args.push(callback);
resp = func.apply(self2, args);
if (resp && typeof resp.then === "function") {
fulfill(resp);
}
} catch (e) {
reject(e);
}
});
if (usedCB) {
promise.then(function(result) {
usedCB(null, result);
}, usedCB);
}
return promise;
};
}
var hasLocal;
try {
localStorage.setItem("_pouch_check_localstorage", 1);
hasLocal = !!localStorage.getItem("_pouch_check_localstorage");
} catch (e) {
hasLocal = false;
}
function guardedConsole(method) {
if (typeof console !== "undefined" && typeof console[method] === "function") {
var args = Array.prototype.slice.call(arguments, 1);
console[method].apply(console, args);
}
}
var assign$1;
{
if (typeof Object.assign === "function") {
assign$1 = Object.assign;
} else {
assign$1 = function(target2) {
var to = Object(target2);
for (var index2 = 1; index2 < arguments.length; index2++) {
var nextSource = arguments[index2];
if (nextSource != null) {
for (var nextKey in nextSource) {
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
to[nextKey] = nextSource[nextKey];
}
}
}
}
return to;
};
}
}
var assign$2 = assign$1;
function flatten$1(arrs) {
var res = [];
for (var i = 0, len2 = arrs.length; i < len2; i++) {
res = res.concat(arrs[i]);
}
return res;
}
function isRemote(db) {
if (typeof db._remote === "boolean") {
return db._remote;
}
if (typeof db.type === "function") {
guardedConsole(
"warn",
"db.type() is deprecated and will be removed in a future version of PouchDB"
);
return db.type() === "http";
}
return false;
}
function upsert(db, docId, diffFun) {
return db.get(docId).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return {};
}).then(function(doc) {
var docRev = doc._rev;
var newDoc = diffFun(doc);
if (!newDoc) {
return { updated: false, rev: docRev };
}
newDoc._id = docId;
newDoc._rev = docRev;
return tryAndPut(db, newDoc, diffFun);
});
}
function tryAndPut(db, doc, diffFun) {
return db.put(doc).then(function(res) {
return {
updated: true,
rev: res.rev
};
}, function(err) {
if (err.status !== 409) {
throw err;
}
return upsert(db, doc._id, diffFun);
});
}
class QueryParseError2 extends Error {
constructor(message) {
super();
this.status = 400;
this.name = "query_parse_error";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, QueryParseError2);
} catch (e) {
}
}
}
class NotFoundError2 extends Error {
constructor(message) {
super();
this.status = 404;
this.name = "not_found";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, NotFoundError2);
} catch (e) {
}
}
}
class BuiltInError2 extends Error {
constructor(message) {
super();
this.status = 500;
this.name = "invalid_value";
this.message = message;
this.error = true;
try {
Error.captureStackTrace(this, BuiltInError2);
} catch (e) {
}
}
}
function promisedCallback$1(promise, callback) {
if (callback) {
promise.then(function(res) {
lib(function() {
callback(null, res);
});
}, function(reason) {
lib(function() {
callback(reason);
});
});
}
return promise;
}
function callbackify$1(fun) {
return function(...args) {
var cb = args.pop();
var promise = fun.apply(this, args);
if (typeof cb === "function") {
promisedCallback$1(promise, cb);
}
return promise;
};
}
function fin(promise, finalPromiseFactory) {
return promise.then(function(res) {
return finalPromiseFactory().then(function() {
return res;
});
}, function(reason) {
return finalPromiseFactory().then(function() {
throw reason;
});
});
}
function sequentialize(queue2, promiseFactory) {
return function() {
var args = arguments;
var that = this;
return queue2.add(function() {
return promiseFactory.apply(that, args);
});
};
}
function uniq$1(arr) {
var theSet = new ExportedSet(arr);
var result = new Array(theSet.size);
var index2 = -1;
theSet.forEach(function(value2) {
result[++index2] = value2;
});
return result;
}
function mapToKeysArray(map) {
var result = new Array(map.size);
var index2 = -1;
map.forEach(function(value2, key) {
result[++index2] = key;
});
return result;
}
class TaskQueue2 {
constructor() {
this.promise = new Promise(function(fulfill) {
fulfill();
});
}
add(promiseFactory) {
this.promise = this.promise.catch(function() {
}).then(function() {
return promiseFactory();
});
return this.promise;
}
finish() {
return this.promise;
}
}
function stringify2(input) {
if (!input) {
return "undefined";
}
switch (typeof input) {
case "function":
return input.toString();
case "string":
return input.toString();
default:
return JSON.stringify(input);
}
}
function createViewSignature(mapFun, reduceFun) {
return stringify2(mapFun) + stringify2(reduceFun) + "undefined";
}
async function createView(sourceDB, viewName, mapFun, reduceFun, temporary, localDocName2) {
const viewSignature = createViewSignature(mapFun, reduceFun);
let cachedViews;
if (!temporary) {
cachedViews = sourceDB._cachedViews = sourceDB._cachedViews || {};
if (cachedViews[viewSignature]) {
return cachedViews[viewSignature];
}
}
const promiseForView = sourceDB.info().then(async function(info) {
const depDbName = info.db_name + "-mrview-" + (temporary ? "temp" : stringMd5(viewSignature));
function diffFunction(doc) {
doc.views = doc.views || {};
let fullViewName = viewName;
if (fullViewName.indexOf("/") === -1) {
fullViewName = viewName + "/" + viewName;
}
const depDbs = doc.views[fullViewName] = doc.views[fullViewName] || {};
if (depDbs[depDbName]) {
return;
}
depDbs[depDbName] = true;
return doc;
}
await upsert(sourceDB, "_local/" + localDocName2, diffFunction);
const res = await sourceDB.registerDependentDatabase(depDbName);
const db = res.db;
db.auto_compaction = true;
const view = {
name: depDbName,
db,
sourceDB,
adapter: sourceDB.adapter,
mapFun,
reduceFun
};
let lastSeqDoc;
try {
lastSeqDoc = await view.db.get("_local/lastSeq");
} catch (err) {
if (err.status !== 404) {
throw err;
}
}
view.seq = lastSeqDoc ? lastSeqDoc.seq : 0;
if (cachedViews) {
view.db.once("destroyed", function() {
delete cachedViews[viewSignature];
});
}
return view;
});
if (cachedViews) {
cachedViews[viewSignature] = promiseForView;
}
return promiseForView;
}
var persistentQueues = {};
var tempViewQueue = new TaskQueue2();
var CHANGES_BATCH_SIZE = 50;
function parseViewName(name) {
return name.indexOf("/") === -1 ? [name, name] : name.split("/");
}
function isGenOne(changes2) {
return changes2.length === 1 && /^1-/.test(changes2[0].rev);
}
function emitError(db, e, data) {
try {
db.emit("error", e);
} catch (err) {
guardedConsole(
"error",
"The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."
);
guardedConsole("error", e, data);
}
}
function createAbstractMapReduce(localDocName2, mapper2, reducer2, ddocValidator2) {
function tryMap(db, fun, doc) {
try {
fun(doc);
} catch (e) {
emitError(db, e, { fun, doc });
}
}
function tryReduce(db, fun, keys2, values, rereduce) {
try {
return { output: fun(keys2, values, rereduce) };
} catch (e) {
emitError(db, e, { fun, keys: keys2, values, rereduce });
return { error: e };
}
}
function sortByKeyThenValue(x, y) {
const keyCompare = collate(x.key, y.key);
return keyCompare !== 0 ? keyCompare : collate(x.value, y.value);
}
function sliceResults(results, limit, skip) {
skip = skip || 0;
if (typeof limit === "number") {
return results.slice(skip, limit + skip);
} else if (skip > 0) {
return results.slice(skip);
}
return results;
}
function rowToDocId(row) {
const val = row.value;
const docId = val && typeof val === "object" && val._id || row.id;
return docId;
}
function readAttachmentsAsBlobOrBuffer2(res) {
res.rows.forEach(function(row) {
const atts = row.doc && row.doc._attachments;
if (!atts) {
return;
}
Object.keys(atts).forEach(function(filename) {
const att = atts[filename];
atts[filename].data = b64ToBluffer(att.data, att.content_type);
});
});
}
function postprocessAttachments(opts) {
return function(res) {
if (opts.include_docs && opts.attachments && opts.binary) {
readAttachmentsAsBlobOrBuffer2(res);
}
return res;
};
}
function addHttpParam(paramName, opts, params, asJson) {
let val = opts[paramName];
if (typeof val !== "undefined") {
if (asJson) {
val = encodeURIComponent(JSON.stringify(val));
}
params.push(paramName + "=" + val);
}
}
function coerceInteger(integerCandidate) {
if (typeof integerCandidate !== "undefined") {
const asNumber = Number(integerCandidate);
if (!isNaN(asNumber) && asNumber === parseInt(integerCandidate, 10)) {
return asNumber;
} else {
return integerCandidate;
}
}
}
function coerceOptions(opts) {
opts.group_level = coerceInteger(opts.group_level);
opts.limit = coerceInteger(opts.limit);
opts.skip = coerceInteger(opts.skip);
return opts;
}
function checkPositiveInteger(number) {
if (number) {
if (typeof number !== "number") {
return new QueryParseError2(`Invalid value for integer: "${number}"`);
}
if (number < 0) {
return new QueryParseError2(`Invalid value for positive integer: "${number}"`);
}
}
}
function checkQueryParseError(options, fun) {
const startkeyName = options.descending ? "endkey" : "startkey";
const endkeyName = options.descending ? "startkey" : "endkey";
if (typeof options[startkeyName] !== "undefined" && typeof options[endkeyName] !== "undefined" && collate(options[startkeyName], options[endkeyName]) > 0) {
throw new QueryParseError2("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");
} else if (fun.reduce && options.reduce !== false) {
if (options.include_docs) {
throw new QueryParseError2("{include_docs:true} is invalid for reduce");
} else if (options.keys && options.keys.length > 1 && !options.group && !options.group_level) {
throw new QueryParseError2("Multi-key fetches for reduce views must use {group: true}");
}
}
["group_level", "limit", "skip"].forEach(function(optionName) {
const error = checkPositiveInteger(options[optionName]);
if (error) {
throw error;
}
});
}
async function httpQuery(db, fun, opts) {
let params = [];
let body;
let method = "GET";
let ok;
addHttpParam("reduce", opts, params);
addHttpParam("include_docs", opts, params);
addHttpParam("attachments", opts, params);
addHttpParam("limit", opts, params);
addHttpParam("descending", opts, params);
addHttpParam("group", opts, params);
addHttpParam("group_level", opts, params);
addHttpParam("skip", opts, params);
addHttpParam("stale", opts, params);
addHttpParam("conflicts", opts, params);
addHttpParam("startkey", opts, params, true);
addHttpParam("start_key", opts, params, true);
addHttpParam("endkey", opts, params, true);
addHttpParam("end_key", opts, params, true);
addHttpParam("inclusive_end", opts, params);
addHttpParam("key", opts, params, true);
addHttpParam("update_seq", opts, params);
params = params.join("&");
params = params === "" ? "" : "?" + params;
if (typeof opts.keys !== "undefined") {
const MAX_URL_LENGTH = 2e3;
const keysAsString = `keys=${encodeURIComponent(JSON.stringify(opts.keys))}`;
if (keysAsString.length + params.length + 1 <= MAX_URL_LENGTH) {
params += (params[0] === "?" ? "&" : "?") + keysAsString;
} else {
method = "POST";
if (typeof fun === "string") {
body = { keys: opts.keys };
} else {
fun.keys = opts.keys;
}
}
}
if (typeof fun === "string") {
const parts = parseViewName(fun);
const response2 = await db.fetch("_design/" + parts[0] + "/_view/" + parts[1] + params, {
headers: new h({ "Content-Type": "application/json" }),
method,
body: JSON.stringify(body)
});
ok = response2.ok;
const result2 = await response2.json();
if (!ok) {
result2.status = response2.status;
throw generateErrorFromResponse(result2);
}
result2.rows.forEach(function(row) {
if (row.value && row.value.error && row.value.error === "builtin_reduce_error") {
throw new Error(row.reason);
}
});
return new Promise(function(resolve) {
resolve(result2);
}).then(postprocessAttachments(opts));
}
body = body || {};
Object.keys(fun).forEach(function(key) {
if (Array.isArray(fun[key])) {
body[key] = fun[key];
} else {
body[key] = fun[key].toString();
}
});
const response = await db.fetch("_temp_view" + params, {
headers: new h({ "Content-Type": "application/json" }),
method: "POST",
body: JSON.stringify(body)
});
ok = response.ok;
const result = await response.json();
if (!ok) {
result.status = response.status;
throw generateErrorFromResponse(result);
}
return new Promise(function(resolve) {
resolve(result);
}).then(postprocessAttachments(opts));
}
function customQuery(db, fun, opts) {
return new Promise(function(resolve, reject) {
db._query(fun, opts, function(err, res) {
if (err) {
return reject(err);
}
resolve(res);
});
});
}
function customViewCleanup(db) {
return new Promise(function(resolve, reject) {
db._viewCleanup(function(err, res) {
if (err) {
return reject(err);
}
resolve(res);
});
});
}
function defaultsTo(value2) {
return function(reason) {
if (reason.status === 404) {
return value2;
} else {
throw reason;
}
};
}
async function getDocsToPersist(docId, view, docIdsToChangesAndEmits) {
const metaDocId = "_local/doc_" + docId;
const defaultMetaDoc = { _id: metaDocId, keys: [] };
const docData = docIdsToChangesAndEmits.get(docId);
const indexableKeysToKeyValues = docData[0];
const changes2 = docData[1];
function getMetaDoc() {
if (isGenOne(changes2)) {
return Promise.resolve(defaultMetaDoc);
}
return view.db.get(metaDocId).catch(defaultsTo(defaultMetaDoc));
}
function getKeyValueDocs(metaDoc2) {
if (!metaDoc2.keys.length) {
return Promise.resolve({ rows: [] });
}
return view.db.allDocs({
keys: metaDoc2.keys,
include_docs: true
});
}
function processKeyValueDocs(metaDoc2, kvDocsRes) {
const kvDocs = [];
const oldKeys = new ExportedSet();
for (let i = 0, len2 = kvDocsRes.rows.length; i < len2; i++) {
const row = kvDocsRes.rows[i];
const doc = row.doc;
if (!doc) {
continue;
}
kvDocs.push(doc);
oldKeys.add(doc._id);
doc._deleted = !indexableKeysToKeyValues.has(doc._id);
if (!doc._deleted) {
const keyValue = indexableKeysToKeyValues.get(doc._id);
if ("value" in keyValue) {
doc.value = keyValue.value;
}
}
}
const newKeys = mapToKeysArray(indexableKeysToKeyValues);
newKeys.forEach(function(key) {
if (!oldKeys.has(key)) {
const kvDoc = {
_id: key
};
const keyValue = indexableKeysToKeyValues.get(key);
if ("value" in keyValue) {
kvDoc.value = keyValue.value;
}
kvDocs.push(kvDoc);
}
});
metaDoc2.keys = uniq$1(newKeys.concat(metaDoc2.keys));
kvDocs.push(metaDoc2);
return kvDocs;
}
const metaDoc = await getMetaDoc();
const keyValueDocs = await getKeyValueDocs(metaDoc);
return processKeyValueDocs(metaDoc, keyValueDocs);
}
function updatePurgeSeq(view) {
return view.sourceDB.get("_local/purges").then(function(res) {
const purgeSeq = res.purgeSeq;
return view.db.get("_local/purgeSeq").then(function(res2) {
return res2._rev;
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return void 0;
}).then(function(rev) {
return view.db.put({
_id: "_local/purgeSeq",
_rev: rev,
purgeSeq
});
});
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
});
}
function saveKeyValues(view, docIdsToChangesAndEmits, seq) {
var seqDocId = "_local/lastSeq";
return view.db.get(seqDocId).catch(defaultsTo({ _id: seqDocId, seq: 0 })).then(function(lastSeqDoc) {
var docIds = mapToKeysArray(docIdsToChangesAndEmits);
return Promise.all(docIds.map(function(docId) {
return getDocsToPersist(docId, view, docIdsToChangesAndEmits);
})).then(function(listOfDocsToPersist) {
var docsToPersist = flatten$1(listOfDocsToPersist);
lastSeqDoc.seq = seq;
docsToPersist.push(lastSeqDoc);
return view.db.bulkDocs({ docs: docsToPersist });
}).then(() => updatePurgeSeq(view));
});
}
function getQueue(view) {
const viewName = typeof view === "string" ? view : view.name;
let queue2 = persistentQueues[viewName];
if (!queue2) {
queue2 = persistentQueues[viewName] = new TaskQueue2();
}
return queue2;
}
async function updateView(view, opts) {
return sequentialize(getQueue(view), function() {
return updateViewInQueue(view, opts);
})();
}
async function updateViewInQueue(view, opts) {
let mapResults;
let doc;
let taskId;
function emit2(key, value2) {
const output = { id: doc._id, key: normalizeKey(key) };
if (typeof value2 !== "undefined" && value2 !== null) {
output.value = normalizeKey(value2);
}
mapResults.push(output);
}
const mapFun = mapper2(view.mapFun, emit2);
let currentSeq = view.seq || 0;
function createTask() {
return view.sourceDB.info().then(function(info) {
taskId = view.sourceDB.activeTasks.add({
name: "view_indexing",
total_items: info.update_seq - currentSeq
});
});
}
function processChange2(docIdsToChangesAndEmits, seq) {
return function() {
return saveKeyValues(view, docIdsToChangesAndEmits, seq);
};
}
let indexed_docs = 0;
const progress = {
view: view.name,
indexed_docs
};
view.sourceDB.emit("indexing", progress);
const queue2 = new TaskQueue2();
async function processNextBatch() {
const response = await view.sourceDB.changes({
return_docs: true,
conflicts: true,
include_docs: true,
style: "all_docs",
since: currentSeq,
limit: opts.changes_batch_size
});
const purges = await getRecentPurges();
return processBatch(response, purges);
}
function getRecentPurges() {
return view.db.get("_local/purgeSeq").then(function(res) {
return res.purgeSeq;
}).catch(function(err) {
if (err && err.status !== 404) {
throw err;
}
return -1;
}).then(function(purgeSeq) {
return view.sourceDB.get("_local/purges").then(function(res) {
const recentPurges = res.purges.filter(function(purge, index2) {
return index2 > purgeSeq;
}).map((purge) => purge.docId);
const uniquePurges = recentPurges.filter(function(docId, index2) {
return recentPurges.indexOf(docId) === index2;
});
return Promise.all(uniquePurges.map(function(docId) {
return view.sourceDB.get(docId).then(function(doc2) {
return { docId, doc: doc2 };
}).catch(function(err) {
if (err.status !== 404) {
throw err;
}
return { docId };
});
}));
}).catch(function(err) {
if (err && err.status !== 404) {
throw err;
}
return [];
});
});
}
function processBatch(response, purges) {
var results = response.results;
if (!results.length && !purges.length) {
return;
}
for (let purge of purges) {
const index2 = results.findIndex(function(change) {
return change.id === purge.docId;
});
if (index2 < 0) {
const entry = {
_id: purge.docId,
doc: {
_id: purge.docId,
_deleted: 1
},
changes: []
};
if (purge.doc) {
entry.doc = purge.doc;
entry.changes.push({ rev: purge.doc._rev });
}
results.push(entry);
}
}
var docIdsToChangesAndEmits = createDocIdsToChangesAndEmits(results);
queue2.add(processChange2(docIdsToChangesAndEmits, currentSeq));
indexed_docs = indexed_docs + results.length;
const progress2 = {
view: view.name,
last_seq: response.last_seq,
results_count: results.length,
indexed_docs
};
view.sourceDB.emit("indexing", progress2);
view.sourceDB.activeTasks.update(taskId, { completed_items: indexed_docs });
if (results.length < opts.changes_batch_size) {
return;
}
return processNextBatch();
}
function createDocIdsToChangesAndEmits(results) {
const docIdsToChangesAndEmits = new ExportedMap();
for (let i = 0, len2 = results.length; i < len2; i++) {
const change = results[i];
if (change.doc._id[0] !== "_") {
mapResults = [];
doc = change.doc;
if (!doc._deleted) {
tryMap(view.sourceDB, mapFun, doc);
}
mapResults.sort(sortByKeyThenValue);
const indexableKeysToKeyValues = createIndexableKeysToKeyValues(mapResults);
docIdsToChangesAndEmits.set(change.doc._id, [
indexableKeysToKeyValues,
change.changes
]);
}
currentSeq = change.seq;
}
return docIdsToChangesAndEmits;
}
function createIndexableKeysToKeyValues(mapResults2) {
const indexableKeysToKeyValues = new ExportedMap();
let lastKey;
for (let i = 0, len2 = mapResults2.length; i < len2; i++) {
const emittedKeyValue = mapResults2[i];
const complexKey = [emittedKeyValue.key, emittedKeyValue.id];
if (i > 0 && collate(emittedKeyValue.key, lastKey) === 0) {
complexKey.push(i);
}
indexableKeysToKeyValues.set(toIndexableString(complexKey), emittedKeyValue);
lastKey = emittedKeyValue.key;
}
return indexableKeysToKeyValues;
}
try {
await createTask();
await processNextBatch();
await queue2.finish();
view.seq = currentSeq;
view.sourceDB.activeTasks.remove(taskId);
} catch (error) {
view.sourceDB.activeTasks.remove(taskId, error);
}
}
function reduceView(view, results, options) {
if (options.group_level === 0) {
delete options.group_level;
}
const shouldGroup = options.group || options.group_level;
const reduceFun = reducer2(view.reduceFun);
const groups = [];
const lvl = isNaN(options.group_level) ? Number.POSITIVE_INFINITY : options.group_level;
results.forEach(function(e) {
const last = groups[groups.length - 1];
let groupKey = shouldGroup ? e.key : null;
if (shouldGroup && Array.isArray(groupKey)) {
groupKey = groupKey.slice(0, lvl);
}
if (last && collate(last.groupKey, groupKey) === 0) {
last.keys.push([e.key, e.id]);
last.values.push(e.value);
return;
}
groups.push({
keys: [[e.key, e.id]],
values: [e.value],
groupKey
});
});
results = [];
for (let i = 0, len2 = groups.length; i < len2; i++) {
const e = groups[i];
const reduceTry = tryReduce(view.sourceDB, reduceFun, e.keys, e.values, false);
if (reduceTry.error && reduceTry.error instanceof BuiltInError2) {
throw reduceTry.error;
}
results.push({
// CouchDB just sets the value to null if a non-built-in errors out
value: reduceTry.error ? null : reduceTry.output,
key: e.groupKey
});
}
return { rows: sliceResults(results, options.limit, options.skip) };
}
function queryView(view, opts) {
return sequentialize(getQueue(view), function() {
return queryViewInQueue(view, opts);
})();
}
async function queryViewInQueue(view, opts) {
let totalRows;
const shouldReduce = view.reduceFun && opts.reduce !== false;
const skip = opts.skip || 0;
if (typeof opts.keys !== "undefined" && !opts.keys.length) {
opts.limit = 0;
delete opts.keys;
}
async function fetchFromView(viewOpts) {
viewOpts.include_docs = true;
const res = await view.db.allDocs(viewOpts);
totalRows = res.total_rows;
return res.rows.map(function(result) {
if ("value" in result.doc && typeof result.doc.value === "object" && result.doc.value !== null) {
const keys2 = Object.keys(result.doc.value).sort();
const expectedKeys = ["id", "key", "value"];
if (!(keys2 < expectedKeys || keys2 > expectedKeys)) {
return result.doc.value;
}
}
const parsedKeyAndDocId = parseIndexableString(result.doc._id);
return {
key: parsedKeyAndDocId[0],
id: parsedKeyAndDocId[1],
value: "value" in result.doc ? result.doc.value : null
};
});
}
async function onMapResultsReady(rows) {
let finalResults;
if (shouldReduce) {
finalResults = reduceView(view, rows, opts);
} else if (typeof opts.keys === "undefined") {
finalResults = {
total_rows: totalRows,
offset: skip,
rows
};
} else {
finalResults = {
total_rows: totalRows,
offset: skip,
rows: sliceResults(rows, opts.limit, opts.skip)
};
}
if (opts.update_seq) {
finalResults.update_seq = view.seq;
}
if (opts.include_docs) {
const docIds = uniq$1(rows.map(rowToDocId));
const allDocsRes = await view.sourceDB.allDocs({
keys: docIds,
include_docs: true,
conflicts: opts.conflicts,
attachments: opts.attachments,
binary: opts.binary
});
var docIdsToDocs = new ExportedMap();
allDocsRes.rows.forEach(function(row) {
docIdsToDocs.set(row.id, row.doc);
});
rows.forEach(function(row) {
var docId = rowToDocId(row);
var doc = docIdsToDocs.get(docId);
if (doc) {
row.doc = doc;
}
});
return finalResults;
} else {
return finalResults;
}
}
if (typeof opts.keys !== "undefined") {
const keys2 = opts.keys;
const fetchPromises = keys2.map(function(key) {
const viewOpts = {
startkey: toIndexableString([key]),
endkey: toIndexableString([key, {}])
};
if (opts.update_seq) {
viewOpts.update_seq = true;
}
return fetchFromView(viewOpts);
});
const result = await Promise.all(fetchPromises);
const flattenedResult = flatten$1(result);
return onMapResultsReady(flattenedResult);
} else {
const viewOpts = {
descending: opts.descending
};
if (opts.update_seq) {
viewOpts.update_seq = true;
}
let startkey;
let endkey;
if ("start_key" in opts) {
startkey = opts.start_key;
}
if ("startkey" in opts) {
startkey = opts.startkey;
}
if ("end_key" in opts) {
endkey = opts.end_key;
}
if ("endkey" in opts) {
endkey = opts.endkey;
}
if (typeof startkey !== "undefined") {
viewOpts.startkey = opts.descending ? toIndexableString([startkey, {}]) : toIndexableString([startkey]);
}
if (typeof endkey !== "undefined") {
let inclusiveEnd = opts.inclusive_end !== false;
if (opts.descending) {
inclusiveEnd = !inclusiveEnd;
}
viewOpts.endkey = toIndexableString(
inclusiveEnd ? [endkey, {}] : [endkey]
);
}
if (typeof opts.key !== "undefined") {
const keyStart = toIndexableString([opts.key]);
const keyEnd = toIndexableString([opts.key, {}]);
if (viewOpts.descending) {
viewOpts.endkey = keyStart;
viewOpts.startkey = keyEnd;
} else {
viewOpts.startkey = keyStart;
viewOpts.endkey = keyEnd;
}
}
if (!shouldReduce) {
if (typeof opts.limit === "number") {
viewOpts.limit = opts.limit;
}
viewOpts.skip = skip;
}
const result = await fetchFromView(viewOpts);
return onMapResultsReady(result);
}
}
async function httpViewCleanup(db) {
const response = await db.fetch("_view_cleanup", {
headers: new h({ "Content-Type": "application/json" }),
method: "POST"
});
return response.json();
}
async function localViewCleanup(db) {
try {
const metaDoc = await db.get("_local/" + localDocName2);
const docsToViews = new ExportedMap();
Object.keys(metaDoc.views).forEach(function(fullViewName) {
const parts = parseViewName(fullViewName);
const designDocName = "_design/" + parts[0];
const viewName = parts[1];
let views = docsToViews.get(designDocName);
if (!views) {
views = new ExportedSet();
docsToViews.set(designDocName, views);
}
views.add(viewName);
});
const opts = {
keys: mapToKeysArray(docsToViews),
include_docs: true
};
const res = await db.allDocs(opts);
const viewsToStatus = {};
res.rows.forEach(function(row) {
const ddocName = row.key.substring(8);
docsToViews.get(row.key).forEach(function(viewName) {
let fullViewName = ddocName + "/" + viewName;
if (!metaDoc.views[fullViewName]) {
fullViewName = viewName;
}
const viewDBNames = Object.keys(metaDoc.views[fullViewName]);
const statusIsGood = row.doc && row.doc.views && row.doc.views[viewName];
viewDBNames.forEach(function(viewDBName) {
viewsToStatus[viewDBName] = viewsToStatus[viewDBName] || statusIsGood;
});
});
});
const dbsToDelete = Object.keys(viewsToStatus).filter(function(viewDBName) {
return !viewsToStatus[viewDBName];
});
const destroyPromises = dbsToDelete.map(function(viewDBName) {
return sequentialize(getQueue(viewDBName), function() {
return new db.constructor(viewDBName, db.__opts).destroy();
})();
});
return Promise.all(destroyPromises).then(function() {
return { ok: true };
});
} catch (err) {
if (err.status === 404) {
return { ok: true };
} else {
throw err;
}
}
}
async function queryPromised(db, fun, opts) {
if (typeof db._query === "function") {
return customQuery(db, fun, opts);
}
if (isRemote(db)) {
return httpQuery(db, fun, opts);
}
const updateViewOpts = {
changes_batch_size: db.__opts.view_update_changes_batch_size || CHANGES_BATCH_SIZE
};
if (typeof fun !== "string") {
checkQueryParseError(opts, fun);
tempViewQueue.add(async function() {
const view = await createView(
/* sourceDB */
db,
/* viewName */
"temp_view/temp_view",
/* mapFun */
fun.map,
/* reduceFun */
fun.reduce,
/* temporary */
true,
/* localDocName */
localDocName2
);
return fin(
updateView(view, updateViewOpts).then(
function() {
return queryView(view, opts);
}
),
function() {
return view.db.destroy();
}
);
});
return tempViewQueue.finish();
} else {
const fullViewName = fun;
const parts = parseViewName(fullViewName);
const designDocName = parts[0];
const viewName = parts[1];
const doc = await db.get("_design/" + designDocName);
fun = doc.views && doc.views[viewName];
if (!fun) {
throw new NotFoundError2(`ddoc ${doc._id} has no view named ${viewName}`);
}
ddocValidator2(doc, viewName);
checkQueryParseError(opts, fun);
const view = await createView(
/* sourceDB */
db,
/* viewName */
fullViewName,
/* mapFun */
fun.map,
/* reduceFun */
fun.reduce,
/* temporary */
false,
/* localDocName */
localDocName2
);
if (opts.stale === "ok" || opts.stale === "update_after") {
if (opts.stale === "update_after") {
lib(function() {
updateView(view, updateViewOpts);
});
}
return queryView(view, opts);
} else {
await updateView(view, updateViewOpts);
return queryView(view, opts);
}
}
}
function abstractQuery(fun, opts, callback) {
const db = this;
if (typeof opts === "function") {
callback = opts;
opts = {};
}
opts = opts ? coerceOptions(opts) : {};
if (typeof fun === "function") {
fun = { map: fun };
}
const promise = Promise.resolve().then(function() {
return queryPromised(db, fun, opts);
});
promisedCallback$1(promise, callback);
return promise;
}
const abstractViewCleanup = callbackify$1(function() {
const db = this;
if (typeof db._viewCleanup === "function") {
return customViewCleanup(db);
}
if (isRemote(db)) {
return httpViewCleanup(db);
}
return localViewCleanup(db);
});
return {
query: abstractQuery,
viewCleanup: abstractViewCleanup
};
}
function getFieldFromDoc(doc, parsedField) {
var value2 = doc;
for (var i = 0, len2 = parsedField.length; i < len2; i++) {
var key = parsedField[i];
value2 = value2[key];
if (!value2) {
break;
}
}
return value2;
}
function setFieldInDoc(doc, parsedField, value2) {
for (var i = 0, len2 = parsedField.length; i < len2 - 1; i++) {
var elem = parsedField[i];
doc = doc[elem] = doc[elem] || {};
}
doc[parsedField[len2 - 1]] = value2;
}
function compare(left, right) {
return left < right ? -1 : left > right ? 1 : 0;
}
function parseField(fieldName) {
var fields = [];
var current = "";
for (var i = 0, len2 = fieldName.length; i < len2; i++) {
var ch = fieldName[i];
if (i > 0 && fieldName[i - 1] === "\\" && (ch === "$" || ch === ".")) {
current = current.substring(0, current.length - 1) + ch;
} else if (ch === ".") {
fields.push(current);
current = "";
} else {
current += ch;
}
}
fields.push(current);
return fields;
}
var combinationFields = ["$or", "$nor", "$not"];
function isCombinationalField(field) {
return combinationFields.indexOf(field) > -1;
}
function getKey(obj) {
return Object.keys(obj)[0];
}
function getValue(obj) {
return obj[getKey(obj)];
}
function mergeAndedSelectors(selectors) {
var res = {};
var first = { $or: true, $nor: true };
selectors.forEach(function(selector) {
Object.keys(selector).forEach(function(field) {
var matcher = selector[field];
if (typeof matcher !== "object") {
matcher = { $eq: matcher };
}
if (isCombinationalField(field)) {
if (matcher instanceof Array) {
if (first[field]) {
first[field] = false;
res[field] = matcher;
return;
}
var entries = [];
res[field].forEach(function(existing) {
Object.keys(matcher).forEach(function(key) {
var m = matcher[key];
var longest = Math.max(Object.keys(existing).length, Object.keys(m).length);
var merged = mergeAndedSelectors([existing, m]);
if (Object.keys(merged).length <= longest) {
return;
}
entries.push(merged);
});
});
res[field] = entries;
} else {
res[field] = mergeAndedSelectors([matcher]);
}
} else {
var fieldMatchers = res[field] = res[field] || {};
Object.keys(matcher).forEach(function(operator) {
var value2 = matcher[operator];
if (operator === "$gt" || operator === "$gte") {
return mergeGtGte(operator, value2, fieldMatchers);
} else if (operator === "$lt" || operator === "$lte") {
return mergeLtLte(operator, value2, fieldMatchers);
} else if (operator === "$ne") {
return mergeNe(value2, fieldMatchers);
} else if (operator === "$eq") {
return mergeEq(value2, fieldMatchers);
} else if (operator === "$regex") {
return mergeRegex(value2, fieldMatchers);
}
fieldMatchers[operator] = value2;
});
}
});
});
return res;
}
function mergeGtGte(operator, value2, fieldMatchers) {
if (typeof fieldMatchers.$eq !== "undefined") {
return;
}
if (typeof fieldMatchers.$gte !== "undefined") {
if (operator === "$gte") {
if (value2 > fieldMatchers.$gte) {
fieldMatchers.$gte = value2;
}
} else {
if (value2 >= fieldMatchers.$gte) {
delete fieldMatchers.$gte;
fieldMatchers.$gt = value2;
}
}
} else if (typeof fieldMatchers.$gt !== "undefined") {
if (operator === "$gte") {
if (value2 > fieldMatchers.$gt) {
delete fieldMatchers.$gt;
fieldMatchers.$gte = value2;
}
} else {
if (value2 > fieldMatchers.$gt) {
fieldMatchers.$gt = value2;
}
}
} else {
fieldMatchers[operator] = value2;
}
}
function mergeLtLte(operator, value2, fieldMatchers) {
if (typeof fieldMatchers.$eq !== "undefined") {
return;
}
if (typeof fieldMatchers.$lte !== "undefined") {
if (operator === "$lte") {
if (value2 < fieldMatchers.$lte) {
fieldMatchers.$lte = value2;
}
} else {
if (value2 <= fieldMatchers.$lte) {
delete fieldMatchers.$lte;
fieldMatchers.$lt = value2;
}
}
} else if (typeof fieldMatchers.$lt !== "undefined") {
if (operator === "$lte") {
if (value2 < fieldMatchers.$lt) {
delete fieldMatchers.$lt;
fieldMatchers.$lte = value2;
}
} else {
if (value2 < fieldMatchers.$lt) {
fieldMatchers.$lt = value2;
}
}
} else {
fieldMatchers[operator] = value2;
}
}
function mergeNe(value2, fieldMatchers) {
if ("$ne" in fieldMatchers) {
fieldMatchers.$ne.push(value2);
} else {
fieldMatchers.$ne = [value2];
}
}
function mergeEq(value2, fieldMatchers) {
delete fieldMatchers.$gt;
delete fieldMatchers.$gte;
delete fieldMatchers.$lt;
delete fieldMatchers.$lte;
delete fieldMatchers.$ne;
fieldMatchers.$eq = value2;
}
function mergeRegex(value2, fieldMatchers) {
if ("$regex" in fieldMatchers) {
fieldMatchers.$regex.push(value2);
} else {
fieldMatchers.$regex = [value2];
}
}
function mergeAndedSelectorsNested(obj) {
for (var prop in obj) {
if (Array.isArray(obj)) {
for (var i in obj) {
if (obj[i]["$and"]) {
obj[i] = mergeAndedSelectors(obj[i]["$and"]);
}
}
}
var value2 = obj[prop];
if (typeof value2 === "object") {
mergeAndedSelectorsNested(value2);
}
}
return obj;
}
function isAndInSelector(obj, isAnd) {
for (var prop in obj) {
if (prop === "$and") {
isAnd = true;
}
var value2 = obj[prop];
if (typeof value2 === "object") {
isAnd = isAndInSelector(value2, isAnd);
}
}
return isAnd;
}
function massageSelector(input) {
var result = clone(input);
if (isAndInSelector(result, false)) {
result = mergeAndedSelectorsNested(result);
if ("$and" in result) {
result = mergeAndedSelectors(result["$and"]);
}
}
["$or", "$nor"].forEach(function(orOrNor) {
if (orOrNor in result) {
result[orOrNor].forEach(function(subSelector) {
var fields2 = Object.keys(subSelector);
for (var i2 = 0; i2 < fields2.length; i2++) {
var field2 = fields2[i2];
var matcher2 = subSelector[field2];
if (typeof matcher2 !== "object" || matcher2 === null) {
subSelector[field2] = { $eq: matcher2 };
}
}
});
}
});
if ("$not" in result) {
result["$not"] = mergeAndedSelectors([result["$not"]]);
}
var fields = Object.keys(result);
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var matcher = result[field];
if (typeof matcher !== "object" || matcher === null) {
matcher = { $eq: matcher };
}
result[field] = matcher;
}
normalizeArrayOperators(result);
return result;
}
function normalizeArrayOperators(selector) {
Object.keys(selector).forEach(function(field) {
var matcher = selector[field];
if (Array.isArray(matcher)) {
matcher.forEach(function(matcherItem) {
if (matcherItem && typeof matcherItem === "object") {
normalizeArrayOperators(matcherItem);
}
});
} else if (field === "$ne") {
selector.$ne = [matcher];
} else if (field === "$regex") {
selector.$regex = [matcher];
} else if (matcher && typeof matcher === "object") {
normalizeArrayOperators(matcher);
}
});
}
function createFieldSorter(sort) {
function getFieldValuesAsArray(doc) {
return sort.map(function(sorting) {
var fieldName = getKey(sorting);
var parsedField = parseField(fieldName);
var docFieldValue = getFieldFromDoc(doc, parsedField);
return docFieldValue;
});
}
return function(aRow, bRow) {
var aFieldValues = getFieldValuesAsArray(aRow.doc);
var bFieldValues = getFieldValuesAsArray(bRow.doc);
var collation = collate(aFieldValues, bFieldValues);
if (collation !== 0) {
return collation;
}
return compare(aRow.doc._id, bRow.doc._id);
};
}
function filterInMemoryFields(rows, requestDef, inMemoryFields) {
rows = rows.filter(function(row) {
return rowFilter(row.doc, requestDef.selector, inMemoryFields);
});
if (requestDef.sort) {
var fieldSorter = createFieldSorter(requestDef.sort);
rows = rows.sort(fieldSorter);
if (typeof requestDef.sort[0] !== "string" && getValue(requestDef.sort[0]) === "desc") {
rows = rows.reverse();
}
}
if ("limit" in requestDef || "skip" in requestDef) {
var skip = requestDef.skip || 0;
var limit = ("limit" in requestDef ? requestDef.limit : rows.length) + skip;
rows = rows.slice(skip, limit);
}
return rows;
}
function rowFilter(doc, selector, inMemoryFields) {
return inMemoryFields.every(function(field) {
var matcher = selector[field];
var parsedField = parseField(field);
var docFieldValue = getFieldFromDoc(doc, parsedField);
if (isCombinationalField(field)) {
return matchCominationalSelector(field, matcher, doc);
}
return matchSelector(matcher, doc, parsedField, docFieldValue);
});
}
function matchSelector(matcher, doc, parsedField, docFieldValue) {
if (!matcher) {
return true;
}
if (typeof matcher === "object") {
return Object.keys(matcher).every(function(maybeUserOperator) {
var userValue = matcher[maybeUserOperator];
if (maybeUserOperator.indexOf("$") === 0) {
return match(maybeUserOperator, doc, userValue, parsedField, docFieldValue);
} else {
var subParsedField = parseField(maybeUserOperator);
if (docFieldValue === void 0 && typeof userValue !== "object" && subParsedField.length > 0) {
return false;
}
var subDocFieldValue = getFieldFromDoc(docFieldValue, subParsedField);
if (typeof userValue === "object") {
return matchSelector(userValue, doc, parsedField, subDocFieldValue);
}
return match("$eq", doc, userValue, subParsedField, subDocFieldValue);
}
});
}
return matcher === docFieldValue;
}
function matchCominationalSelector(field, matcher, doc) {
if (field === "$or") {
return matcher.some(function(orMatchers) {
return rowFilter(doc, orMatchers, Object.keys(orMatchers));
});
}
if (field === "$not") {
return !rowFilter(doc, matcher, Object.keys(matcher));
}
return !matcher.find(function(orMatchers) {
return rowFilter(doc, orMatchers, Object.keys(orMatchers));
});
}
function match(userOperator, doc, userValue, parsedField, docFieldValue) {
if (!matchers[userOperator]) {
throw new Error('unknown operator "' + userOperator + '" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');
}
return matchers[userOperator](doc, userValue, parsedField, docFieldValue);
}
function fieldExists(docFieldValue) {
return typeof docFieldValue !== "undefined" && docFieldValue !== null;
}
function fieldIsNotUndefined(docFieldValue) {
return typeof docFieldValue !== "undefined";
}
function modField(docFieldValue, userValue) {
if (typeof docFieldValue !== "number" || parseInt(docFieldValue, 10) !== docFieldValue) {
return false;
}
var divisor = userValue[0];
var mod = userValue[1];
return docFieldValue % divisor === mod;
}
function arrayContainsValue(docFieldValue, userValue) {
return userValue.some(function(val) {
if (docFieldValue instanceof Array) {
return docFieldValue.some(function(docFieldValueItem) {
return collate(val, docFieldValueItem) === 0;
});
}
return collate(val, docFieldValue) === 0;
});
}
function arrayContainsAllValues(docFieldValue, userValue) {
return userValue.every(function(val) {
return docFieldValue.some(function(docFieldValueItem) {
return collate(val, docFieldValueItem) === 0;
});
});
}
function arraySize(docFieldValue, userValue) {
return docFieldValue.length === userValue;
}
function regexMatch(docFieldValue, userValue) {
var re = new RegExp(userValue);
return re.test(docFieldValue);
}
function typeMatch(docFieldValue, userValue) {
switch (userValue) {
case "null":
return docFieldValue === null;
case "boolean":
return typeof docFieldValue === "boolean";
case "number":
return typeof docFieldValue === "number";
case "string":
return typeof docFieldValue === "string";
case "array":
return docFieldValue instanceof Array;
case "object":
return {}.toString.call(docFieldValue) === "[object Object]";
}
}
var matchers = {
"$elemMatch": function(doc, userValue, parsedField, docFieldValue) {
if (!Array.isArray(docFieldValue)) {
return false;
}
if (docFieldValue.length === 0) {
return false;
}
if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) {
return docFieldValue.some(function(val) {
return rowFilter(val, userValue, Object.keys(userValue));
});
}
return docFieldValue.some(function(val) {
return matchSelector(userValue, doc, parsedField, val);
});
},
"$allMatch": function(doc, userValue, parsedField, docFieldValue) {
if (!Array.isArray(docFieldValue)) {
return false;
}
if (docFieldValue.length === 0) {
return false;
}
if (typeof docFieldValue[0] === "object" && docFieldValue[0] !== null) {
return docFieldValue.every(function(val) {
return rowFilter(val, userValue, Object.keys(userValue));
});
}
return docFieldValue.every(function(val) {
return matchSelector(userValue, doc, parsedField, val);
});
},
"$eq": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) === 0;
},
"$gte": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) >= 0;
},
"$gt": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) > 0;
},
"$lte": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) <= 0;
},
"$lt": function(doc, userValue, parsedField, docFieldValue) {
return fieldIsNotUndefined(docFieldValue) && collate(docFieldValue, userValue) < 0;
},
"$exists": function(doc, userValue, parsedField, docFieldValue) {
if (userValue) {
return fieldIsNotUndefined(docFieldValue);
}
return !fieldIsNotUndefined(docFieldValue);
},
"$mod": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists(docFieldValue) && modField(docFieldValue, userValue);
},
"$ne": function(doc, userValue, parsedField, docFieldValue) {
return userValue.every(function(neValue) {
return collate(docFieldValue, neValue) !== 0;
});
},
"$in": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists(docFieldValue) && arrayContainsValue(docFieldValue, userValue);
},
"$nin": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists(docFieldValue) && !arrayContainsValue(docFieldValue, userValue);
},
"$size": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists(docFieldValue) && Array.isArray(docFieldValue) && arraySize(docFieldValue, userValue);
},
"$all": function(doc, userValue, parsedField, docFieldValue) {
return Array.isArray(docFieldValue) && arrayContainsAllValues(docFieldValue, userValue);
},
"$regex": function(doc, userValue, parsedField, docFieldValue) {
return fieldExists(docFieldValue) && typeof docFieldValue == "string" && userValue.every(function(regexValue) {
return regexMatch(docFieldValue, regexValue);
});
},
"$type": function(doc, userValue, parsedField, docFieldValue) {
return typeMatch(docFieldValue, userValue);
}
};
function matchesSelector(doc, selector) {
if (typeof selector !== "object") {
throw new Error("Selector error: expected a JSON object");
}
selector = massageSelector(selector);
var row = {
"doc": doc
};
var rowsMatched = filterInMemoryFields([row], { "selector": selector }, Object.keys(selector));
return rowsMatched && rowsMatched.length === 1;
}
function massageCreateIndexRequest(requestDef) {
requestDef = clone(requestDef);
if (!requestDef.index) {
requestDef.index = {};
}
["type", "name", "ddoc"].forEach(function(key) {
if (requestDef.index[key]) {
requestDef[key] = requestDef.index[key];
delete requestDef.index[key];
}
});
if (requestDef.fields) {
requestDef.index.fields = requestDef.fields;
delete requestDef.fields;
}
if (!requestDef.type) {
requestDef.type = "json";
}
return requestDef;
}
function checkFieldValueType(name, value2, isHttp) {
var message = "";
var received = value2;
var addReceived = true;
if (["$in", "$nin", "$or", "$and", "$mod", "$nor", "$all"].indexOf(name) !== -1) {
if (!Array.isArray(value2)) {
message = "Query operator " + name + " must be an array.";
}
}
if (["$not", "$elemMatch", "$allMatch"].indexOf(name) !== -1) {
if (!(!Array.isArray(value2) && typeof value2 === "object" && value2 !== null)) {
message = "Query operator " + name + " must be an object.";
}
}
if (name === "$mod" && Array.isArray(value2)) {
if (value2.length !== 2) {
message = "Query operator $mod must be in the format [divisor, remainder], where divisor and remainder are both integers.";
} else {
var divisor = value2[0];
var mod = value2[1];
if (divisor === 0) {
message = "Query operator $mod's divisor cannot be 0, cannot divide by zero.";
addReceived = false;
}
if (typeof divisor !== "number" || parseInt(divisor, 10) !== divisor) {
message = "Query operator $mod's divisor is not an integer.";
received = divisor;
}
if (parseInt(mod, 10) !== mod) {
message = "Query operator $mod's remainder is not an integer.";
received = mod;
}
}
}
if (name === "$exists") {
if (typeof value2 !== "boolean") {
message = "Query operator $exists must be a boolean.";
}
}
if (name === "$type") {
var allowed = ["null", "boolean", "number", "string", "array", "object"];
var allowedStr = '"' + allowed.slice(0, allowed.length - 1).join('", "') + '", or "' + allowed[allowed.length - 1] + '"';
if (typeof value2 !== "string") {
message = "Query operator $type must be a string. Supported values: " + allowedStr + ".";
} else if (allowed.indexOf(value2) == -1) {
message = "Query operator $type must be a string. Supported values: " + allowedStr + ".";
}
}
if (name === "$size") {
if (parseInt(value2, 10) !== value2) {
message = "Query operator $size must be a integer.";
}
}
if (name === "$regex") {
if (typeof value2 !== "string") {
if (isHttp) {
message = "Query operator $regex must be a string.";
} else if (!(value2 instanceof RegExp)) {
message = "Query operator $regex must be a string or an instance of a javascript regular expression.";
}
}
}
if (message) {
if (addReceived) {
var type = received === null ? " " : Array.isArray(received) ? " array" : " " + typeof received;
var receivedStr = typeof received === "object" && received !== null ? JSON.stringify(received, null, " ") : received;
message += " Received" + type + ": " + receivedStr;
}
throw new Error(message);
}
}
var requireValidation = ["$all", "$allMatch", "$and", "$elemMatch", "$exists", "$in", "$mod", "$nin", "$nor", "$not", "$or", "$regex", "$size", "$type"];
var arrayTypeComparisonOperators = ["$in", "$nin", "$mod", "$all"];
var equalityOperators = ["$eq", "$gt", "$gte", "$lt", "$lte"];
function validateSelector(input, isHttp) {
if (Array.isArray(input)) {
for (var entry of input) {
if (typeof entry === "object" && value2 !== null) {
validateSelector(entry, isHttp);
}
}
} else {
var fields = Object.keys(input);
for (var i = 0; i < fields.length; i++) {
var key = fields[i];
var value2 = input[key];
if (requireValidation.indexOf(key) !== -1) {
checkFieldValueType(key, value2, isHttp);
}
if (equalityOperators.indexOf(key) !== -1) {
continue;
}
if (arrayTypeComparisonOperators.indexOf(key) !== -1) {
continue;
}
if (typeof value2 === "object" && value2 !== null) {
validateSelector(value2, isHttp);
}
}
}
}
function dbFetch(db, path, opts, callback) {
var status, ok;
opts.headers = new h({ "Content-type": "application/json" });
db.fetch(path, opts).then(function(response) {
status = response.status;
ok = response.ok;
return response.json();
}).then(function(json) {
if (!ok) {
json.status = status;
var err = generateErrorFromResponse(json);
callback(err);
} else {
callback(null, json);
}
}).catch(callback);
}
function createIndex(db, requestDef, callback) {
requestDef = massageCreateIndexRequest(requestDef);
dbFetch(db, "_index", {
method: "POST",
body: JSON.stringify(requestDef)
}, callback);
}
function find(db, requestDef, callback) {
validateSelector(requestDef.selector, true);
dbFetch(db, "_find", {
method: "POST",
body: JSON.stringify(requestDef)
}, callback);
}
function explain(db, requestDef, callback) {
dbFetch(db, "_explain", {
method: "POST",
body: JSON.stringify(requestDef)
}, callback);
}
function getIndexes(db, callback) {
dbFetch(db, "_index", {
method: "GET"
}, callback);
}
function deleteIndex(db, indexDef, callback) {
var ddoc = indexDef.ddoc;
var type = indexDef.type || "json";
var name = indexDef.name;
if (!ddoc) {
return callback(new Error("you must provide an index's ddoc"));
}
if (!name) {
return callback(new Error("you must provide an index's name"));
}
var url = "_index/" + [ddoc, type, name].map(encodeURIComponent).join("/");
dbFetch(db, url, { method: "DELETE" }, callback);
}
function callbackify(fun) {
return function(...args) {
var cb = args.pop();
var promise = fun.apply(this, args);
promisedCallback(promise, cb);
return promise;
};
}
function promisedCallback(promise, callback) {
promise.then(function(res) {
lib(function() {
callback(null, res);
});
}, function(reason) {
lib(function() {
callback(reason);
});
});
return promise;
}
var flatten = function(...args) {
var res = [];
for (var i = 0, len2 = args.length; i < len2; i++) {
var subArr = args[i];
if (Array.isArray(subArr)) {
res = res.concat(flatten.apply(null, subArr));
} else {
res.push(subArr);
}
}
return res;
};
function mergeObjects(arr) {
var res = {};
for (var i = 0, len2 = arr.length; i < len2; i++) {
res = assign$2(res, arr[i]);
}
return res;
}
function pick(obj, arr) {
var res = {};
for (var i = 0, len2 = arr.length; i < len2; i++) {
var parsedField = parseField(arr[i]);
var value2 = getFieldFromDoc(obj, parsedField);
if (typeof value2 !== "undefined") {
setFieldInDoc(res, parsedField, value2);
}
}
return res;
}
function oneArrayIsSubArrayOfOther(left, right) {
for (var i = 0, len2 = Math.min(left.length, right.length); i < len2; i++) {
if (left[i] !== right[i]) {
return false;
}
}
return true;
}
function oneArrayIsStrictSubArrayOfOther(left, right) {
if (left.length > right.length) {
return false;
}
return oneArrayIsSubArrayOfOther(left, right);
}
function oneSetIsSubArrayOfOther(left, right) {
left = left.slice();
for (var i = 0, len2 = right.length; i < len2; i++) {
var field = right[i];
if (!left.length) {
break;
}
var leftIdx = left.indexOf(field);
if (leftIdx === -1) {
return false;
} else {
left.splice(leftIdx, 1);
}
}
return true;
}
function arrayToObject(arr) {
var res = {};
for (var i = 0, len2 = arr.length; i < len2; i++) {
res[arr[i]] = true;
}
return res;
}
function max(arr, fun) {
var max2 = null;
var maxScore = -1;
for (var i = 0, len2 = arr.length; i < len2; i++) {
var element = arr[i];
var score = fun(element);
if (score > maxScore) {
maxScore = score;
max2 = element;
}
}
return max2;
}
function arrayEquals(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
for (var i = 0, len2 = arr1.length; i < len2; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
return true;
}
function uniq(arr) {
var obj = {};
for (var i = 0; i < arr.length; i++) {
obj["$" + arr[i]] = true;
}
return Object.keys(obj).map(function(key) {
return key.substring(1);
});
}
function createDeepMultiMapper(fields, emit2, selector) {
return function(doc) {
if (selector && !matchesSelector(doc, selector)) {
return;
}
var toEmit = [];
for (var i = 0, iLen = fields.length; i < iLen; i++) {
var parsedField = parseField(fields[i]);
var value2 = doc;
for (var j = 0, jLen = parsedField.length; j < jLen; j++) {
var key = parsedField[j];
value2 = value2[key];
if (typeof value2 === "undefined") {
return;
}
}
toEmit.push(value2);
}
emit2(toEmit);
};
}
function createDeepSingleMapper(field, emit2, selector) {
var parsedField = parseField(field);
return function(doc) {
if (selector && !matchesSelector(doc, selector)) {
return;
}
var value2 = doc;
for (var i = 0, len2 = parsedField.length; i < len2; i++) {
var key = parsedField[i];
value2 = value2[key];
if (typeof value2 === "undefined") {
return;
}
}
emit2(value2);
};
}
function createShallowSingleMapper(field, emit2, selector) {
return function(doc) {
if (selector && !matchesSelector(doc, selector)) {
return;
}
emit2(doc[field]);
};
}
function createShallowMultiMapper(fields, emit2, selector) {
return function(doc) {
if (selector && !matchesSelector(doc, selector)) {
return;
}
var toEmit = [];
for (var i = 0, len2 = fields.length; i < len2; i++) {
toEmit.push(doc[fields[i]]);
}
emit2(toEmit);
};
}
function checkShallow(fields) {
for (var i = 0, len2 = fields.length; i < len2; i++) {
var field = fields[i];
if (field.indexOf(".") !== -1) {
return false;
}
}
return true;
}
function createMapper(fields, emit2, selector) {
var isShallow = checkShallow(fields);
var isSingle = fields.length === 1;
if (isShallow) {
if (isSingle) {
return createShallowSingleMapper(fields[0], emit2, selector);
} else {
return createShallowMultiMapper(fields, emit2, selector);
}
} else {
if (isSingle) {
return createDeepSingleMapper(fields[0], emit2, selector);
} else {
return createDeepMultiMapper(fields, emit2, selector);
}
}
}
function mapper(mapFunDef, emit2) {
const fields = Object.keys(mapFunDef.fields);
const partialSelector = mapFunDef.partial_filter_selector;
return createMapper(fields, emit2, partialSelector);
}
function reducer() {
throw new Error("reduce not supported");
}
function ddocValidator(ddoc, viewName) {
var view = ddoc.views[viewName];
if (!view.map || !view.map.fields) {
throw new Error("ddoc " + ddoc._id + " with view " + viewName + " doesn't have map.fields defined. maybe it wasn't created by this plugin?");
}
}
var abstractMapper = createAbstractMapReduce(
/* localDocName */
"indexes",
mapper,
reducer,
ddocValidator
);
function abstractMapper$1(db) {
if (db._customFindAbstractMapper) {
return {
// Calls the _customFindAbstractMapper, but with a third argument:
// the standard findAbstractMapper query/viewCleanup.
// This allows the indexeddb adapter to support partial_filter_selector.
query: function addQueryFallback(signature, opts) {
var fallback = abstractMapper.query.bind(this);
return db._customFindAbstractMapper.query.call(this, signature, opts, fallback);
},
viewCleanup: function addViewCleanupFallback() {
var fallback = abstractMapper.viewCleanup.bind(this);
return db._customFindAbstractMapper.viewCleanup.call(this, fallback);
}
};
}
return abstractMapper;
}
function massageSort(sort) {
if (!Array.isArray(sort)) {
throw new Error("invalid sort json - should be an array");
}
return sort.map(function(sorting) {
if (typeof sorting === "string") {
var obj = {};
obj[sorting] = "asc";
return obj;
} else {
return sorting;
}
});
}
function massageUseIndex(useIndex) {
var cleanedUseIndex = [];
if (typeof useIndex === "string") {
cleanedUseIndex.push(useIndex);
} else {
cleanedUseIndex = useIndex;
}
return cleanedUseIndex.map(function(name) {
return name.replace("_design/", "");
});
}
function massageIndexDef(indexDef) {
indexDef.fields = indexDef.fields.map(function(field) {
if (typeof field === "string") {
var obj = {};
obj[field] = "asc";
return obj;
}
return field;
});
if (indexDef.partial_filter_selector) {
indexDef.partial_filter_selector = massageSelector(
indexDef.partial_filter_selector
);
}
return indexDef;
}
function getKeyFromDoc(doc, index2) {
var res = [];
for (var i = 0; i < index2.def.fields.length; i++) {
var field = getKey(index2.def.fields[i]);
res.push(getFieldFromDoc(doc, parseField(field)));
}
return res;
}
function filterInclusiveStart(rows, targetValue, index2) {
var indexFields = index2.def.fields;
for (var i = 0, len2 = rows.length; i < len2; i++) {
var row = rows[i];
var docKey = getKeyFromDoc(row.doc, index2);
if (indexFields.length === 1) {
docKey = docKey[0];
} else {
while (docKey.length > targetValue.length) {
docKey.pop();
}
}
if (Math.abs(collate(docKey, targetValue)) > 0) {
break;
}
}
return i > 0 ? rows.slice(i) : rows;
}
function reverseOptions(opts) {
var newOpts = clone(opts);
delete newOpts.startkey;
delete newOpts.endkey;
delete newOpts.inclusive_start;
delete newOpts.inclusive_end;
if ("endkey" in opts) {
newOpts.startkey = opts.endkey;
}
if ("startkey" in opts) {
newOpts.endkey = opts.startkey;
}
if ("inclusive_start" in opts) {
newOpts.inclusive_end = opts.inclusive_start;
}
if ("inclusive_end" in opts) {
newOpts.inclusive_start = opts.inclusive_end;
}
return newOpts;
}
function validateIndex(index2) {
var ascFields = index2.fields.filter(function(field) {
return getValue(field) === "asc";
});
if (ascFields.length !== 0 && ascFields.length !== index2.fields.length) {
throw new Error("unsupported mixed sorting");
}
}
function validateSort(requestDef, index2) {
if (index2.defaultUsed && requestDef.sort) {
var noneIdSorts = requestDef.sort.filter(function(sortItem) {
return Object.keys(sortItem)[0] !== "_id";
}).map(function(sortItem) {
return Object.keys(sortItem)[0];
});
if (noneIdSorts.length > 0) {
throw new Error('Cannot sort on field(s) "' + noneIdSorts.join(",") + '" when using the default index');
}
}
if (index2.defaultUsed) {
return;
}
}
function validateFindRequest(requestDef) {
if (typeof requestDef.selector !== "object") {
throw new Error("you must provide a selector when you find()");
}
}
function getUserFields(selector, sort) {
var selectorFields = Object.keys(selector);
var sortFields = sort ? sort.map(getKey) : [];
var userFields;
if (selectorFields.length >= sortFields.length) {
userFields = selectorFields;
} else {
userFields = sortFields;
}
if (sortFields.length === 0) {
return {
fields: userFields
};
}
userFields = userFields.sort(function(left, right) {
var leftIdx = sortFields.indexOf(left);
if (leftIdx === -1) {
leftIdx = Number.MAX_VALUE;
}
var rightIdx = sortFields.indexOf(right);
if (rightIdx === -1) {
rightIdx = Number.MAX_VALUE;
}
return leftIdx < rightIdx ? -1 : leftIdx > rightIdx ? 1 : 0;
});
return {
fields: userFields,
sortOrder: sort.map(getKey)
};
}
function createIndex$1(db, requestDef) {
requestDef = massageCreateIndexRequest(requestDef);
var originalIndexDef = clone(requestDef.index);
requestDef.index = massageIndexDef(requestDef.index);
validateIndex(requestDef.index);
var md5;
function getMd5() {
return md5 || (md5 = stringMd5(JSON.stringify(requestDef)));
}
var viewName = requestDef.name || "idx-" + getMd5();
var ddocName = requestDef.ddoc || "idx-" + getMd5();
var ddocId = "_design/" + ddocName;
var hasInvalidLanguage = false;
var viewExists = false;
function updateDdoc(doc) {
if (doc._rev && doc.language !== "query") {
hasInvalidLanguage = true;
}
doc.language = "query";
doc.views = doc.views || {};
viewExists = !!doc.views[viewName];
if (viewExists) {
return false;
}
doc.views[viewName] = {
map: {
fields: mergeObjects(requestDef.index.fields),
partial_filter_selector: requestDef.index.partial_filter_selector
},
reduce: "_count",
options: {
def: originalIndexDef
}
};
return doc;
}
db.constructor.emit("debug", ["find", "creating index", ddocId]);
return upsert(db, ddocId, updateDdoc).then(function() {
if (hasInvalidLanguage) {
throw new Error('invalid language for ddoc with id "' + ddocId + '" (should be "query")');
}
}).then(function() {
var signature = ddocName + "/" + viewName;
return abstractMapper$1(db).query.call(db, signature, {
limit: 0,
reduce: false
}).then(function() {
return {
id: ddocId,
name: viewName,
result: viewExists ? "exists" : "created"
};
});
});
}
function getIndexes$1(db) {
return db.allDocs({
startkey: "_design/",
endkey: "_design/",
include_docs: true
}).then(function(allDocsRes) {
var res = {
indexes: [{
ddoc: null,
name: "_all_docs",
type: "special",
def: {
fields: [{ _id: "asc" }]
}
}]
};
res.indexes = flatten(res.indexes, allDocsRes.rows.filter(function(row) {
return row.doc.language === "query";
}).map(function(row) {
var viewNames = row.doc.views !== void 0 ? Object.keys(row.doc.views) : [];
return viewNames.map(function(viewName) {
var view = row.doc.views[viewName];
return {
ddoc: row.id,
name: viewName,
type: "json",
def: massageIndexDef(view.options.def)
};
});
}));
res.indexes.sort(function(left, right) {
return compare(left.name, right.name);
});
res.total_rows = res.indexes.length;
return res;
});
}
var COLLATE_LO = null;
var COLLATE_HI = { "": {} };
const SHORT_CIRCUIT_QUERY = {
queryOpts: { limit: 0, startkey: COLLATE_HI, endkey: COLLATE_LO },
inMemoryFields: []
};
function checkFieldInIndex(index2, field) {
var indexFields = index2.def.fields.map(getKey);
for (var i = 0, len2 = indexFields.length; i < len2; i++) {
var indexField = indexFields[i];
if (field === indexField) {
return true;
}
}
return false;
}
function userOperatorLosesPrecision(selector, field) {
var matcher = selector[field];
var userOperator = getKey(matcher);
return userOperator !== "$eq";
}
function sortFieldsByIndex(userFields, index2) {
var indexFields = index2.def.fields.map(getKey);
return userFields.slice().sort(function(a2, b) {
var aIdx = indexFields.indexOf(a2);
var bIdx = indexFields.indexOf(b);
if (aIdx === -1) {
aIdx = Number.MAX_VALUE;
}
if (bIdx === -1) {
bIdx = Number.MAX_VALUE;
}
return compare(aIdx, bIdx);
});
}
function getBasicInMemoryFields(index2, selector, userFields) {
userFields = sortFieldsByIndex(userFields, index2);
var needToFilterInMemory = false;
for (var i = 0, len2 = userFields.length; i < len2; i++) {
var field = userFields[i];
if (needToFilterInMemory || !checkFieldInIndex(index2, field)) {
return userFields.slice(i);
}
if (i < len2 - 1 && userOperatorLosesPrecision(selector, field)) {
needToFilterInMemory = true;
}
}
return [];
}
function getInMemoryFieldsFromNe(selector) {
var fields = [];
Object.keys(selector).forEach(function(field) {
var matcher = selector[field];
Object.keys(matcher).forEach(function(operator) {
if (operator === "$ne") {
fields.push(field);
}
});
});
return fields;
}
function getInMemoryFields(coreInMemoryFields, index2, selector, userFields) {
var result = flatten(
// in-memory fields reported as necessary by the query planner
coreInMemoryFields,
// combine with another pass that checks for any we may have missed
getBasicInMemoryFields(index2, selector, userFields),
// combine with another pass that checks for $ne's
getInMemoryFieldsFromNe(selector)
);
return sortFieldsByIndex(uniq(result), index2);
}
function checkIndexFieldsMatch(indexFields, sortOrder, fields) {
if (sortOrder) {
var sortMatches = oneArrayIsStrictSubArrayOfOther(sortOrder, indexFields);
var selectorMatches = oneArrayIsSubArrayOfOther(fields, indexFields);
return sortMatches && selectorMatches;
}
return oneSetIsSubArrayOfOther(fields, indexFields);
}
var logicalMatchers = ["$eq", "$gt", "$gte", "$lt", "$lte"];
function isNonLogicalMatcher(matcher) {
return logicalMatchers.indexOf(matcher) === -1;
}
function checkFieldsLogicallySound(indexFields, selector) {
var firstField = indexFields[0];
var matcher = selector[firstField];
if (typeof matcher === "undefined") {
return true;
}
var isInvalidNe = Object.keys(matcher).length === 1 && getKey(matcher) === "$ne";
return !isInvalidNe;
}
function checkIndexMatches(index2, sortOrder, fields, selector) {
var indexFields = index2.def.fields.map(getKey);
var fieldsMatch = checkIndexFieldsMatch(indexFields, sortOrder, fields);
if (!fieldsMatch) {
return false;
}
return checkFieldsLogicallySound(indexFields, selector);
}
function findMatchingIndexes(selector, userFields, sortOrder, indexes) {
return indexes.filter(function(index2) {
return checkIndexMatches(index2, sortOrder, userFields, selector);
});
}
function findBestMatchingIndex(selector, userFields, sortOrder, indexes, useIndex) {
var matchingIndexes = findMatchingIndexes(selector, userFields, sortOrder, indexes);
if (matchingIndexes.length === 0) {
if (useIndex) {
throw {
error: "no_usable_index",
message: "There is no index available for this selector."
};
}
var defaultIndex = indexes[0];
defaultIndex.defaultUsed = true;
return defaultIndex;
}
if (matchingIndexes.length === 1 && !useIndex) {
return matchingIndexes[0];
}
var userFieldsMap = arrayToObject(userFields);
function scoreIndex(index3) {
var indexFields = index3.def.fields.map(getKey);
var score = 0;
for (var i = 0, len2 = indexFields.length; i < len2; i++) {
var indexField = indexFields[i];
if (userFieldsMap[indexField]) {
score++;
}
}
return score;
}
if (useIndex) {
var useIndexDdoc = "_design/" + useIndex[0];
var useIndexName = useIndex.length === 2 ? useIndex[1] : false;
var index2 = matchingIndexes.find(function(index3) {
if (useIndexName && index3.ddoc === useIndexDdoc && useIndexName === index3.name) {
return true;
}
if (index3.ddoc === useIndexDdoc) {
return true;
}
return false;
});
if (!index2) {
throw {
error: "unknown_error",
message: "Could not find that index or could not use that index for the query"
};
}
return index2;
}
return max(matchingIndexes, scoreIndex);
}
function getSingleFieldQueryOptsFor(userOperator, userValue) {
switch (userOperator) {
case "$eq":
return { key: userValue };
case "$lte":
return { endkey: userValue };
case "$gte":
return { startkey: userValue };
case "$lt":
return {
endkey: userValue,
inclusive_end: false
};
case "$gt":
return {
startkey: userValue,
inclusive_start: false
};
}
return {
startkey: COLLATE_LO
};
}
function getSingleFieldCoreQueryPlan(selector, index2) {
var field = getKey(index2.def.fields[0]);
var matcher = selector[field] || {};
var inMemoryFields = [];
var userOperators = Object.keys(matcher);
var combinedOpts;
userOperators.forEach(function(userOperator) {
if (isNonLogicalMatcher(userOperator)) {
inMemoryFields.push(field);
}
var userValue = matcher[userOperator];
var newQueryOpts = getSingleFieldQueryOptsFor(userOperator, userValue);
if (combinedOpts) {
combinedOpts = mergeObjects([combinedOpts, newQueryOpts]);
} else {
combinedOpts = newQueryOpts;
}
});
return {
queryOpts: combinedOpts,
inMemoryFields
};
}
function getMultiFieldCoreQueryPlan(userOperator, userValue) {
switch (userOperator) {
case "$eq":
return {
startkey: userValue,
endkey: userValue
};
case "$lte":
return {
endkey: userValue
};
case "$gte":
return {
startkey: userValue
};
case "$lt":
return {
endkey: userValue,
inclusive_end: false
};
case "$gt":
return {
startkey: userValue,
inclusive_start: false
};
}
}
function getMultiFieldQueryOpts(selector, index2) {
var indexFields = index2.def.fields.map(getKey);
var inMemoryFields = [];
var startkey = [];
var endkey = [];
var inclusiveStart;
var inclusiveEnd;
function finish(i2) {
if (inclusiveStart !== false) {
startkey.push(COLLATE_LO);
}
if (inclusiveEnd !== false) {
endkey.push(COLLATE_HI);
}
inMemoryFields = indexFields.slice(i2);
}
for (var i = 0, len2 = indexFields.length; i < len2; i++) {
var indexField = indexFields[i];
var matcher = selector[indexField];
if (!matcher || !Object.keys(matcher).length) {
finish(i);
break;
} else if (Object.keys(matcher).some(isNonLogicalMatcher)) {
finish(i);
break;
} else if (i > 0) {
var usingGtlt = "$gt" in matcher || "$gte" in matcher || "$lt" in matcher || "$lte" in matcher;
var previousKeys = Object.keys(selector[indexFields[i - 1]]);
var previousWasEq = arrayEquals(previousKeys, ["$eq"]);
var previousWasSame = arrayEquals(previousKeys, Object.keys(matcher));
var gtltLostSpecificity = usingGtlt && !previousWasEq && !previousWasSame;
if (gtltLostSpecificity) {
finish(i);
break;
}
}
var userOperators = Object.keys(matcher);
var combinedOpts = null;
for (var j = 0; j < userOperators.length; j++) {
var userOperator = userOperators[j];
var userValue = matcher[userOperator];
var newOpts = getMultiFieldCoreQueryPlan(userOperator, userValue);
if (combinedOpts) {
combinedOpts = mergeObjects([combinedOpts, newOpts]);
} else {
combinedOpts = newOpts;
}
}
startkey.push("startkey" in combinedOpts ? combinedOpts.startkey : COLLATE_LO);
endkey.push("endkey" in combinedOpts ? combinedOpts.endkey : COLLATE_HI);
if ("inclusive_start" in combinedOpts) {
inclusiveStart = combinedOpts.inclusive_start;
}
if ("inclusive_end" in combinedOpts) {
inclusiveEnd = combinedOpts.inclusive_end;
}
}
var res = {
startkey,
endkey
};
if (typeof inclusiveStart !== "undefined") {
res.inclusive_start = inclusiveStart;
}
if (typeof inclusiveEnd !== "undefined") {
res.inclusive_end = inclusiveEnd;
}
return {
queryOpts: res,
inMemoryFields
};
}
function shouldShortCircuit(selector) {
const values = Object.keys(selector).map(function(key) {
return selector[key];
});
return values.some(function(val) {
return typeof val === "object" && Object.keys(val).length === 0;
});
}
function getDefaultQueryPlan(selector) {
return {
queryOpts: { startkey: null },
inMemoryFields: [Object.keys(selector)]
};
}
function getCoreQueryPlan(selector, index2) {
if (index2.defaultUsed) {
return getDefaultQueryPlan(selector);
}
if (index2.def.fields.length === 1) {
return getSingleFieldCoreQueryPlan(selector, index2);
}
return getMultiFieldQueryOpts(selector, index2);
}
function planQuery(request, indexes) {
var selector = request.selector;
var sort = request.sort;
if (shouldShortCircuit(selector)) {
return assign$2({}, SHORT_CIRCUIT_QUERY, { index: indexes[0] });
}
var userFieldsRes = getUserFields(selector, sort);
var userFields = userFieldsRes.fields;
var sortOrder = userFieldsRes.sortOrder;
var index2 = findBestMatchingIndex(selector, userFields, sortOrder, indexes, request.use_index);
var coreQueryPlan = getCoreQueryPlan(selector, index2);
var queryOpts = coreQueryPlan.queryOpts;
var coreInMemoryFields = coreQueryPlan.inMemoryFields;
var inMemoryFields = getInMemoryFields(coreInMemoryFields, index2, selector, userFields);
var res = {
queryOpts,
index: index2,
inMemoryFields
};
return res;
}
function indexToSignature(index2) {
return index2.ddoc.substring(8) + "/" + index2.name;
}
function doAllDocs(db, originalOpts) {
var opts = clone(originalOpts);
if (opts.descending) {
if ("endkey" in opts && typeof opts.endkey !== "string") {
opts.endkey = "";
}
if ("startkey" in opts && typeof opts.startkey !== "string") {
opts.limit = 0;
}
} else {
if ("startkey" in opts && typeof opts.startkey !== "string") {
opts.startkey = "";
}
if ("endkey" in opts && typeof opts.endkey !== "string") {
opts.limit = 0;
}
}
if ("key" in opts && typeof opts.key !== "string") {
opts.limit = 0;
}
if (opts.limit > 0 && opts.indexes_count) {
opts.original_limit = opts.limit;
opts.limit += opts.indexes_count;
}
return db.allDocs(opts).then(function(res) {
res.rows = res.rows.filter(function(row) {
return !/^_design\//.test(row.id);
});
if (opts.original_limit) {
opts.limit = opts.original_limit;
}
res.rows = res.rows.slice(0, opts.limit);
return res;
});
}
function find$1(db, requestDef, explain2) {
if (requestDef.selector) {
validateSelector(requestDef.selector, false);
requestDef.selector = massageSelector(requestDef.selector);
}
if (requestDef.sort) {
requestDef.sort = massageSort(requestDef.sort);
}
if (requestDef.use_index) {
requestDef.use_index = massageUseIndex(requestDef.use_index);
}
validateFindRequest(requestDef);
return getIndexes$1(db).then(function(getIndexesRes) {
db.constructor.emit("debug", ["find", "planning query", requestDef]);
var queryPlan = planQuery(requestDef, getIndexesRes.indexes);
db.constructor.emit("debug", ["find", "query plan", queryPlan]);
var indexToUse = queryPlan.index;
validateSort(requestDef, indexToUse);
var opts = assign$2({
include_docs: true,
reduce: false,
// Add amount of index for doAllDocs to use (related to issue #7810)
indexes_count: getIndexesRes.total_rows
}, queryPlan.queryOpts);
if ("startkey" in opts && "endkey" in opts && collate(opts.startkey, opts.endkey) > 0) {
return { docs: [] };
}
var isDescending = requestDef.sort && typeof requestDef.sort[0] !== "string" && getValue(requestDef.sort[0]) === "desc";
if (isDescending) {
opts.descending = true;
opts = reverseOptions(opts);
}
if (!queryPlan.inMemoryFields.length) {
if ("limit" in requestDef) {
opts.limit = requestDef.limit;
}
if ("skip" in requestDef) {
opts.skip = requestDef.skip;
}
}
if (explain2) {
return Promise.resolve(queryPlan, opts);
}
return Promise.resolve().then(function() {
if (indexToUse.name === "_all_docs") {
return doAllDocs(db, opts);
} else {
var signature = indexToSignature(indexToUse);
return abstractMapper$1(db).query.call(db, signature, opts);
}
}).then(function(res) {
if (opts.inclusive_start === false) {
res.rows = filterInclusiveStart(res.rows, opts.startkey, indexToUse);
}
if (queryPlan.inMemoryFields.length) {
res.rows = filterInMemoryFields(res.rows, requestDef, queryPlan.inMemoryFields);
}
var resp = {
docs: res.rows.map(function(row) {
var doc = row.doc;
if (requestDef.fields) {
return pick(doc, requestDef.fields);
}
return doc;
})
};
if (indexToUse.defaultUsed) {
resp.warning = "No matching index found, create an index to optimize query time.";
}
return resp;
});
});
}
function explain$1(db, requestDef) {
return find$1(db, requestDef, true).then(function(queryPlan) {
return {
dbname: db.name,
index: queryPlan.index,
selector: requestDef.selector,
range: {
start_key: queryPlan.queryOpts.startkey,
end_key: queryPlan.queryOpts.endkey
},
opts: {
use_index: requestDef.use_index || [],
bookmark: "nil",
//hardcoded to match CouchDB since its not supported,
limit: requestDef.limit,
skip: requestDef.skip,
sort: requestDef.sort || {},
fields: requestDef.fields,
conflicts: false,
//hardcoded to match CouchDB since its not supported,
r: [49]
// hardcoded to match CouchDB since its not support
},
limit: requestDef.limit,
skip: requestDef.skip || 0,
fields: requestDef.fields
};
});
}
function deleteIndex$1(db, index2) {
if (!index2.ddoc) {
throw new Error("you must supply an index.ddoc when deleting");
}
if (!index2.name) {
throw new Error("you must supply an index.name when deleting");
}
var docId = index2.ddoc;
var viewName = index2.name;
function deltaFun(doc) {
if (Object.keys(doc.views).length === 1 && doc.views[viewName]) {
return { _id: docId, _deleted: true };
}
delete doc.views[viewName];
return doc;
}
return upsert(db, docId, deltaFun).then(function() {
return abstractMapper$1(db).viewCleanup.apply(db);
}).then(function() {
return { ok: true };
});
}
var createIndexAsCallback = callbackify(createIndex$1);
var findAsCallback = callbackify(find$1);
var explainAsCallback = callbackify(explain$1);
var getIndexesAsCallback = callbackify(getIndexes$1);
var deleteIndexAsCallback = callbackify(deleteIndex$1);
var plugin = {};
plugin.createIndex = toPromise(function(requestDef, callback) {
if (typeof requestDef !== "object") {
return callback(new Error("you must provide an index to create"));
}
var createIndex$$1 = isRemote(this) ? createIndex : createIndexAsCallback;
createIndex$$1(this, requestDef, callback);
});
plugin.find = toPromise(function(requestDef, callback) {
if (typeof callback === "undefined") {
callback = requestDef;
requestDef = void 0;
}
if (typeof requestDef !== "object") {
return callback(new Error("you must provide search parameters to find()"));
}
var find$$1 = isRemote(this) ? find : findAsCallback;
find$$1(this, requestDef, callback);
});
plugin.explain = toPromise(function(requestDef, callback) {
if (typeof callback === "undefined") {
callback = requestDef;
requestDef = void 0;
}
if (typeof requestDef !== "object") {
return callback(new Error("you must provide search parameters to explain()"));
}
var find$$1 = isRemote(this) ? explain : explainAsCallback;
find$$1(this, requestDef, callback);
});
plugin.getIndexes = toPromise(function(callback) {
var getIndexes$$1 = isRemote(this) ? getIndexes : getIndexesAsCallback;
getIndexes$$1(this, callback);
});
plugin.deleteIndex = toPromise(function(indexDef, callback) {
if (typeof indexDef !== "object") {
return callback(new Error("you must provide an index to delete"));
}
var deleteIndex$$1 = isRemote(this) ? deleteIndex : deleteIndexAsCallback;
deleteIndex$$1(this, indexDef, callback);
});
const _export_sfc = (sfc, props) => {
const target2 = sfc.__vccOpts || sfc;
for (const [key, val] of props) {
target2[key] = val;
}
return target2;
};
const _withScopeId = (n) => (vue.pushScopeId("data-v-cec3ba6f"), n = n(), vue.popScopeId(), n);
const _hoisted_1$1 = /* @__PURE__ */ _withScopeId(() => /* @__PURE__ */ vue.createElementVNode("i", {
class: "q-icon fas fa-tag",
size: "xs"
}, null, -1));
const _sfc_main$1 = {
__name: "Tagger",
props: {
path: String
},
setup(__props) {
const props = __props;
PouchDB.plugin(plugin);
let db = null;
const curItem = vue.ref(props.path);
const tags = vue.ref([]);
const inputValue = vue.ref();
const docId = vue.ref();
const docRev = vue.ref();
const couchUsername = vue.ref();
const couchPassword = vue.ref();
const couchDbHost = vue.ref();
const dialogVis = vue.ref(true);
const dialogArea = vue.ref({
width: 56,
height: 50
});
const dialogPos = vue.ref({
x: 0,
y: 0
});
const dialogStyle = vue.computed(() => {
return `transform: translate(${dialogPos.value.x}px, ${dialogPos.value.y}px); width:${dialogArea.value.width}px; height:${dialogArea.value.height}px;`;
});
const contentVisible = vue.ref(false);
const forceConfig = vue.ref(false);
const onPan = (evt) => {
dialogPos.value.x = dialogPos.value.x + evt.delta.x;
dialogPos.value.y = dialogPos.value.y + evt.delta.y;
};
let commonGM_setValue = null;
let commonGM_getValue = null;
if (typeof GM_setValue !== "undefined") {
commonGM_setValue = GM_setValue;
commonGM_getValue = GM_getValue;
} else {
commonGM_setValue = document.__monkeyWindow.GM_setValue;
commonGM_getValue = document.__monkeyWindow.GM_getValue;
}
function storeBaseConfig(name, value2) {
commonGM_setValue(name, value2);
// console.log("stored: ", commonGM_getValue(name));
}
function loadBaseConfig(name) {
// console.log("loaded: ", commonGM_getValue(name));
return commonGM_getValue(name);
}
let configs = {
couchPassword,
couchUsername,
couchDbHost
};
function loadConfigFromStorage() {
for (let key in configs) {
configs[key].value = loadBaseConfig(key);
}
}
loadConfigFromStorage();
function isConfigured() {
for (let p in configs) {
if (!configs[p].value)
return false;
}
return true;
}
function initDb() {
const serverUrl = "https://" + couchUsername.value + ":" + couchPassword.value + "@" + couchDbHost.value + ":6984/testing";
console.log("server: ", serverUrl);
db = new PouchDB(serverUrl);
storeBaseConfig("couchDbHost", couchDbHost.value);
storeBaseConfig("couchPassword", couchPassword.value);
storeBaseConfig("couchUsername", couchUsername.value);
}
function updateTagsFor(path) {
console.log("get tags for path: ", path);
if (!isDbInitCompleted())
return;
db.find({
selector: {
"path": path
}
}).then(function(result) {
console.log(result);
if (result.docs.length > 0) {
console.log("returning", result.docs[0].tags);
tags.value = result.docs[0].tags;
docId.value = result.docs[0]._id;
docRev.value = result.docs[0]._rev;
}
});
tags.value = [];
}
function isDbInitCompleted() {
// console.log(couchDbHost.value, couchPassword.value, couchUsername.value);
if (couchDbHost.value && couchPassword.value && couchUsername.value) {
initDb();
forceConfig.value = false;
return true;
}
return false;
}
const showMoreContent = function() {
if (contentVisible.value) {
dialogArea.value.width = 56;
dialogArea.value.height = 50;
contentVisible.value = false;
} else {
dialogArea.value.width = 200;
dialogArea.value.height = 220;
contentVisible.value = true;
console.log(dialogArea.value);
}
};
const postTags = function(postingTags) {
let data = { tags: postingTags, path: curItem.value, type: "file" };
let res = null;
if (docId.value) {
data = Object.assign(data, {
_id: docId.value,
_rev: docRev.value
});
res = db.put(data);
} else {
res = db.post(data);
}
res.then(function (response) {console.log(response);docId.value=response.id;docRev.value=response.rev;})
};
const removeTag = function(removingTag) {
tags.value.pop(removingTag);
postTags(tags.value);
};
const handleInputConfirm = function() {
console.log("input: ", inputValue.value);
if (!isDbInitCompleted() || !inputValue.value)
return;
console.log(tags.value, tags.value.value);
let postingTags = tags.value;
postingTags.push(inputValue.value);
postTags(postingTags);
inputValue.value = "";
};
vue.watch(
() => props.path,
(newValue, oldValue) => {
curItem.value = newValue;
updateTagsFor(newValue);
}
);
updateTagsFor(curItem.value);
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(QDialog, {
modelValue: dialogVis.value,
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => dialogVis.value = $event),
seamless: "",
position: "bottom"
}, {
default: vue.withCtx(() => [
vue.createVNode(QCard, {
style: vue.normalizeStyle(vue.unref(dialogStyle))
}, {
default: vue.withCtx(() => [
vue.withDirectives((vue.openBlock(), vue.createBlock(QToolbar, {
class: "bg-primary text-white cursor-pointer",
onClick: _cache[0] || (_cache[0] = ($event) => showMoreContent())
}, {
default: vue.withCtx(() => [
_hoisted_1$1
]),
_: 1
})), [
[
TouchPan,
onPan,
void 0,
{ mouse: true }
]
]),
vue.withDirectives(vue.createElementVNode("div", null, [
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(tags.value, (singleTag) => {
return vue.openBlock(), vue.createBlock(QChip, {
removable: "",
onRemove: ($event) => removeTag(singleTag),
key: singleTag
}, {
default: vue.withCtx(() => [
vue.createTextVNode(vue.toDisplayString(singleTag), 1)
]),
_: 2
}, 1032, ["onRemove"]);
}), 128)),
vue.createVNode(QBtn, {
onClick: _cache[1] || (_cache[1] = ($event) => forceConfig.value = !forceConfig.value)
}, {
default: vue.withCtx(() => [
vue.createTextVNode("Show Config")
]),
_: 1
}),
vue.createElementVNode("p", null, vue.toDisplayString(curItem.value), 1),
vue.createVNode(QInput, {
modelValue: inputValue.value,
"onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => inputValue.value = $event),
class: "input-new-tag",
"aria-autocomplete": "false",
onBlur: handleInputConfirm,
onKeydown: vue.withKeys(handleInputConfirm, ["enter"])
}, null, 8, ["modelValue", "onKeydown"]),
vue.withDirectives(vue.createElementVNode("div", null, [
vue.createVNode(QInput, {
modelValue: couchDbHost.value,
"onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => couchDbHost.value = $event),
placeholder: "couchDbHost"
}, null, 8, ["modelValue"]),
vue.createVNode(QInput, {
modelValue: couchUsername.value,
"onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => couchUsername.value = $event),
placeholder: "couchUsername"
}, null, 8, ["modelValue"]),
vue.createVNode(QInput, {
modelValue: couchPassword.value,
"onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => couchPassword.value = $event),
type: "password",
placeholder: "couchPassword"
}, null, 8, ["modelValue"]),
vue.createVNode(QBtn, { onClick: isDbInitCompleted }, {
default: vue.withCtx(() => [
vue.createTextVNode("Save")
]),
_: 1
})
], 512), [
[vue.vShow, forceConfig.value || !isConfigured()]
])
], 512), [
[vue.vShow, contentVisible.value]
])
]),
_: 1
}, 8, ["style"])
]),
_: 1
}, 8, ["modelValue"]);
};
}
};
const Tagger = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-cec3ba6f"]]);
const _hoisted_1 = /* @__PURE__ */ vue.createElementVNode("link", {
rel: "stylesheet",
href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/fontawesome.min.css"
}, null, -1);
const _hoisted_2 = /* @__PURE__ */ vue.createElementVNode("link", {
rel: "stylesheet",
href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/solid.min.css"
}, null, -1);
const _sfc_main = {
__name: "App",
setup(__props) {
const curPath = vue.ref(decodeURI(window.location).replace("http://localhost:5244", ""));
console.log("register change");
(function(history) {
var pushState = history.pushState;
history.pushState = function(state) {
curPath.value = decodeURI(arguments[2]);
return pushState.apply(history, arguments);
};
})(window.history);
return (_ctx, _cache) => {
return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
_hoisted_1,
_hoisted_2,
vue.createVNode(Tagger, { path: curPath.value }, null, 8, ["path"])
], 64);
};
}
};
const defineReactivePlugin = (state, plugin2) => {
const reactiveState = vue.reactive(state);
for (const name in state) {
injectProp(
plugin2,
name,
() => reactiveState[name],
(val) => {
reactiveState[name] = val;
}
);
}
return plugin2;
};
const SIZE_LIST = ["sm", "md", "lg", "xl"];
const { passive } = listenOpts;
const Screen = defineReactivePlugin({
width: 0,
height: 0,
name: "xs",
sizes: {
sm: 600,
md: 1024,
lg: 1440,
xl: 1920
},
lt: {
sm: true,
md: true,
lg: true,
xl: true
},
gt: {
xs: false,
sm: false,
md: false,
lg: false
},
xs: true,
sm: false,
md: false,
lg: false,
xl: false
}, {
setSizes: noop,
setDebounce: noop,
install({ $q, onSSRHydrated }) {
$q.screen = this;
if (this.__installed === true) {
if ($q.config.screen !== void 0) {
if ($q.config.screen.bodyClasses === false) {
document.body.classList.remove(`screen--${this.name}`);
} else {
this.__update(true);
}
}
return;
}
const { visualViewport } = window;
const target2 = visualViewport || window;
const scrollingElement = document.scrollingElement || document.documentElement;
const getSize = visualViewport === void 0 || client.is.mobile === true ? () => [
Math.max(window.innerWidth, scrollingElement.clientWidth),
Math.max(window.innerHeight, scrollingElement.clientHeight)
] : () => [
visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth,
visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight
];
const classes = $q.config.screen !== void 0 && $q.config.screen.bodyClasses === true;
this.__update = (force) => {
const [w, h2] = getSize();
if (h2 !== this.height) {
this.height = h2;
}
if (w !== this.width) {
this.width = w;
} else if (force !== true) {
return;
}
let s = this.sizes;
this.gt.xs = w >= s.sm;
this.gt.sm = w >= s.md;
this.gt.md = w >= s.lg;
this.gt.lg = w >= s.xl;
this.lt.sm = w < s.sm;
this.lt.md = w < s.md;
this.lt.lg = w < s.lg;
this.lt.xl = w < s.xl;
this.xs = this.lt.sm;
this.sm = this.gt.xs === true && this.lt.md === true;
this.md = this.gt.sm === true && this.lt.lg === true;
this.lg = this.gt.md === true && this.lt.xl === true;
this.xl = this.gt.lg;
s = this.xs === true && "xs" || this.sm === true && "sm" || this.md === true && "md" || this.lg === true && "lg" || "xl";
if (s !== this.name) {
if (classes === true) {
document.body.classList.remove(`screen--${this.name}`);
document.body.classList.add(`screen--${s}`);
}
this.name = s;
}
};
let updateEvt, updateSizes = {}, updateDebounce = 16;
this.setSizes = (sizes) => {
SIZE_LIST.forEach((name) => {
if (sizes[name] !== void 0) {
updateSizes[name] = sizes[name];
}
});
};
this.setDebounce = (deb) => {
updateDebounce = deb;
};
const start = () => {
const style2 = getComputedStyle(document.body);
if (style2.getPropertyValue("--q-size-sm")) {
SIZE_LIST.forEach((name) => {
this.sizes[name] = parseInt(style2.getPropertyValue(`--q-size-${name}`), 10);
});
}
this.setSizes = (sizes) => {
SIZE_LIST.forEach((name) => {
if (sizes[name]) {
this.sizes[name] = sizes[name];
}
});
this.__update(true);
};
this.setDebounce = (delay) => {
updateEvt !== void 0 && target2.removeEventListener("resize", updateEvt, passive);
updateEvt = delay > 0 ? debounce(this.__update, delay) : this.__update;
target2.addEventListener("resize", updateEvt, passive);
};
this.setDebounce(updateDebounce);
if (Object.keys(updateSizes).length > 0) {
this.setSizes(updateSizes);
updateSizes = void 0;
} else {
this.__update();
}
classes === true && this.name === "xs" && document.body.classList.add("screen--xs");
};
if (isRuntimeSsrPreHydration.value === true) {
onSSRHydrated.push(start);
} else {
start();
}
}
});
const Plugin$2 = defineReactivePlugin({
isActive: false,
mode: false
}, {
__media: void 0,
set(val) {
Plugin$2.mode = val;
if (val === "auto") {
if (Plugin$2.__media === void 0) {
Plugin$2.__media = window.matchMedia("(prefers-color-scheme: dark)");
Plugin$2.__updateMedia = () => {
Plugin$2.set("auto");
};
Plugin$2.__media.addListener(Plugin$2.__updateMedia);
}
val = Plugin$2.__media.matches;
} else if (Plugin$2.__media !== void 0) {
Plugin$2.__media.removeListener(Plugin$2.__updateMedia);
Plugin$2.__media = void 0;
}
Plugin$2.isActive = val === true;
document.body.classList.remove(`body--${val === true ? "light" : "dark"}`);
document.body.classList.add(`body--${val === true ? "dark" : "light"}`);
},
toggle() {
{
Plugin$2.set(Plugin$2.isActive === false);
}
},
install({ $q, onSSRHydrated, ssrContext }) {
const { dark } = $q.config;
$q.dark = this;
if (this.__installed === true && dark === void 0) {
return;
}
this.isActive = dark === true;
const initialVal = dark !== void 0 ? dark : false;
if (isRuntimeSsrPreHydration.value === true) {
const ssrSet = (val) => {
this.__fromSSR = val;
};
const originalSet = this.set;
this.set = ssrSet;
ssrSet(initialVal);
onSSRHydrated.push(() => {
this.set = originalSet;
this.set(this.__fromSSR);
});
} else {
this.set(initialVal);
}
}
});
const defaultLang = {
isoName: "en-US",
nativeName: "English (US)",
label: {
clear: "Clear",
ok: "OK",
cancel: "Cancel",
close: "Close",
set: "Set",
select: "Select",
reset: "Reset",
remove: "Remove",
update: "Update",
create: "Create",
search: "Search",
filter: "Filter",
refresh: "Refresh",
expand: (label) => label ? `Expand "${label}"` : "Expand",
collapse: (label) => label ? `Collapse "${label}"` : "Collapse"
},
date: {
days: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),
daysShort: "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),
months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"),
monthsShort: "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),
firstDayOfWeek: 0,
// 0-6, 0 - Sunday, 1 Monday, ...
format24h: false,
pluralDay: "days"
},
table: {
noData: "No data available",
noResults: "No matching records found",
loading: "Loading...",
selectedRecords: (rows) => rows === 1 ? "1 record selected." : (rows === 0 ? "No" : rows) + " records selected.",
recordsPerPage: "Records per page:",
allRows: "All",
pagination: (start, end, total) => start + "-" + end + " of " + total,
columns: "Columns"
},
editor: {
url: "URL",
bold: "Bold",
italic: "Italic",
strikethrough: "Strikethrough",
underline: "Underline",
unorderedList: "Unordered List",
orderedList: "Ordered List",
subscript: "Subscript",
superscript: "Superscript",
hyperlink: "Hyperlink",
toggleFullscreen: "Toggle Fullscreen",
quote: "Quote",
left: "Left align",
center: "Center align",
right: "Right align",
justify: "Justify align",
print: "Print",
outdent: "Decrease indentation",
indent: "Increase indentation",
removeFormat: "Remove formatting",
formatting: "Formatting",
fontSize: "Font Size",
align: "Align",
hr: "Insert Horizontal Rule",
undo: "Undo",
redo: "Redo",
heading1: "Heading 1",
heading2: "Heading 2",
heading3: "Heading 3",
heading4: "Heading 4",
heading5: "Heading 5",
heading6: "Heading 6",
paragraph: "Paragraph",
code: "Code",
size1: "Very small",
size2: "A bit small",
size3: "Normal",
size4: "Medium-large",
size5: "Big",
size6: "Very big",
size7: "Maximum",
defaultFont: "Default Font",
viewSource: "View Source"
},
tree: {
noNodes: "No nodes available",
noResults: "No matching nodes found"
}
};
function getLocale() {
const val = Array.isArray(navigator.languages) === true && navigator.languages.length > 0 ? navigator.languages[0] : navigator.language;
if (typeof val === "string") {
return val.split(/[-_]/).map((v, i) => i === 0 ? v.toLowerCase() : i > 1 || v.length < 4 ? v.toUpperCase() : v[0].toUpperCase() + v.slice(1).toLowerCase()).join("-");
}
}
const Plugin$1 = defineReactivePlugin({
__langPack: {}
}, {
getLocale,
set(langObject = defaultLang, ssrContext) {
const lang = {
...langObject,
rtl: langObject.rtl === true,
getLocale
};
{
lang.set = Plugin$1.set;
if (Plugin$1.__langConfig === void 0 || Plugin$1.__langConfig.noHtmlAttrs !== true) {
const el = document.documentElement;
el.setAttribute("dir", lang.rtl === true ? "rtl" : "ltr");
el.setAttribute("lang", lang.isoName);
}
Object.assign(Plugin$1.__langPack, lang);
Plugin$1.props = lang;
Plugin$1.isoName = lang.isoName;
Plugin$1.nativeName = lang.nativeName;
}
},
install({ $q, lang, ssrContext }) {
{
$q.lang = Plugin$1.__langPack;
Plugin$1.__langConfig = $q.config.lang;
if (this.__installed === true) {
lang !== void 0 && this.set(lang);
} else {
this.set(lang || defaultLang);
}
}
}
});
function setCssVar(propName, value2, element = document.body) {
if (typeof propName !== "string") {
throw new TypeError("Expected a string as propName");
}
if (typeof value2 !== "string") {
throw new TypeError("Expected a string as value");
}
if (!(element instanceof Element)) {
throw new TypeError("Expected a DOM element");
}
element.style.setProperty(`--q-${propName}`, value2);
}
function getMobilePlatform(is) {
if (is.ios === true)
return "ios";
if (is.android === true)
return "android";
}
function getBodyClasses({ is, has, within }, cfg) {
const cls = [
is.desktop === true ? "desktop" : "mobile",
`${has.touch === false ? "no-" : ""}touch`
];
if (is.mobile === true) {
const mobile = getMobilePlatform(is);
mobile !== void 0 && cls.push("platform-" + mobile);
}
if (is.nativeMobile === true) {
const type = is.nativeMobileWrapper;
cls.push(type);
cls.push("native-mobile");
if (is.ios === true && (cfg[type] === void 0 || cfg[type].iosStatusBarPadding !== false)) {
cls.push("q-ios-padding");
}
} else if (is.electron === true) {
cls.push("electron");
} else if (is.bex === true) {
cls.push("bex");
}
within.iframe === true && cls.push("within-iframe");
return cls;
}
function applyClientSsrCorrections() {
const { is } = client;
const classes = document.body.className;
const classList = new Set(classes.replace(/ {2}/g, " ").split(" "));
if (iosCorrection !== void 0) {
classList.delete("desktop");
classList.add("platform-ios");
classList.add("mobile");
} else if (is.nativeMobile !== true && is.electron !== true && is.bex !== true) {
if (is.desktop === true) {
classList.delete("mobile");
classList.delete("platform-ios");
classList.delete("platform-android");
classList.add("desktop");
} else if (is.mobile === true) {
classList.delete("desktop");
classList.add("mobile");
const mobile = getMobilePlatform(is);
if (mobile !== void 0) {
classList.add(`platform-${mobile}`);
classList.delete(`platform-${mobile === "ios" ? "android" : "ios"}`);
} else {
classList.delete("platform-ios");
classList.delete("platform-android");
}
}
}
if (client.has.touch === true) {
classList.delete("no-touch");
classList.add("touch");
}
if (client.within.iframe === true) {
classList.add("within-iframe");
}
const newCls = Array.from(classList).join(" ");
if (classes !== newCls) {
document.body.className = newCls;
}
}
function setColors(brand) {
for (const color in brand) {
setCssVar(color, brand[color]);
}
}
const Body = {
install(opts) {
if (this.__installed === true) {
return;
}
if (isRuntimeSsrPreHydration.value === true) {
applyClientSsrCorrections();
} else {
const { $q } = opts;
$q.config.brand !== void 0 && setColors($q.config.brand);
const cls = getBodyClasses(client, $q.config);
document.body.classList.add.apply(document.body.classList, cls);
}
if (client.is.ios === true) {
document.body.addEventListener("touchstart", noop);
}
window.addEventListener("keydown", onKeyDownComposition, true);
}
};
const materialIcons$1 = {
name: "material-icons",
type: {
positive: "check_circle",
negative: "warning",
info: "info",
warning: "priority_high"
},
arrow: {
up: "arrow_upward",
right: "arrow_forward",
down: "arrow_downward",
left: "arrow_back",
dropdown: "arrow_drop_down"
},
chevron: {
left: "chevron_left",
right: "chevron_right"
},
colorPicker: {
spectrum: "gradient",
tune: "tune",
palette: "style"
},
pullToRefresh: {
icon: "refresh"
},
carousel: {
left: "chevron_left",
right: "chevron_right",
up: "keyboard_arrow_up",
down: "keyboard_arrow_down",
navigationIcon: "lens"
},
chip: {
remove: "cancel",
selected: "check"
},
datetime: {
arrowLeft: "chevron_left",
arrowRight: "chevron_right",
now: "access_time",
today: "today"
},
editor: {
bold: "format_bold",
italic: "format_italic",
strikethrough: "strikethrough_s",
underline: "format_underlined",
unorderedList: "format_list_bulleted",
orderedList: "format_list_numbered",
subscript: "vertical_align_bottom",
superscript: "vertical_align_top",
hyperlink: "link",
toggleFullscreen: "fullscreen",
quote: "format_quote",
left: "format_align_left",
center: "format_align_center",
right: "format_align_right",
justify: "format_align_justify",
print: "print",
outdent: "format_indent_decrease",
indent: "format_indent_increase",
removeFormat: "format_clear",
formatting: "text_format",
fontSize: "format_size",
align: "format_align_left",
hr: "remove",
undo: "undo",
redo: "redo",
heading: "format_size",
code: "code",
size: "format_size",
font: "font_download",
viewSource: "code"
},
expansionItem: {
icon: "keyboard_arrow_down",
denseIcon: "arrow_drop_down"
},
fab: {
icon: "add",
activeIcon: "close"
},
field: {
clear: "cancel",
error: "error"
},
pagination: {
first: "first_page",
prev: "keyboard_arrow_left",
next: "keyboard_arrow_right",
last: "last_page"
},
rating: {
icon: "grade"
},
stepper: {
done: "check",
active: "edit",
error: "warning"
},
tabs: {
left: "chevron_left",
right: "chevron_right",
up: "keyboard_arrow_up",
down: "keyboard_arrow_down"
},
table: {
arrowUp: "arrow_upward",
warning: "warning",
firstPage: "first_page",
prevPage: "chevron_left",
nextPage: "chevron_right",
lastPage: "last_page"
},
tree: {
icon: "play_arrow"
},
uploader: {
done: "done",
clear: "clear",
add: "add_box",
upload: "cloud_upload",
removeQueue: "clear_all",
removeUploaded: "done_all"
}
};
const Plugin = defineReactivePlugin({
iconMapFn: null,
__icons: {}
}, {
set(setObject, ssrContext) {
const def = { ...setObject, rtl: setObject.rtl === true };
{
def.set = Plugin.set;
Object.assign(Plugin.__icons, def);
}
},
install({ $q, iconSet: iconSet2, ssrContext }) {
{
if ($q.config.iconMapFn !== void 0) {
this.iconMapFn = $q.config.iconMapFn;
}
$q.iconSet = this.__icons;
injectProp($q, "iconMapFn", () => this.iconMapFn, (val) => {
this.iconMapFn = val;
});
if (this.__installed === true) {
iconSet2 !== void 0 && this.set(iconSet2);
} else {
this.set(iconSet2 || materialIcons$1);
}
}
}
});
function isObject(v) {
return v !== null && typeof v === "object" && Array.isArray(v) !== true;
}
const autoInstalledPlugins = [
Platform,
Body,
Plugin$2,
Screen,
History,
Plugin$1,
Plugin
];
function installPlugins(pluginOpts, pluginList) {
pluginList.forEach((Plugin2) => {
Plugin2.install(pluginOpts);
Plugin2.__installed = true;
});
}
function prepareApp(app2, uiOpts, pluginOpts) {
app2.config.globalProperties.$q = pluginOpts.$q;
app2.provide(quasarKey, pluginOpts.$q);
installPlugins(pluginOpts, autoInstalledPlugins);
uiOpts.components !== void 0 && Object.values(uiOpts.components).forEach((c) => {
if (isObject(c) === true && c.name !== void 0) {
app2.component(c.name, c);
}
});
uiOpts.directives !== void 0 && Object.values(uiOpts.directives).forEach((d) => {
if (isObject(d) === true && d.name !== void 0) {
app2.directive(d.name, d);
}
});
uiOpts.plugins !== void 0 && installPlugins(
pluginOpts,
Object.values(uiOpts.plugins).filter(
(p) => typeof p.install === "function" && autoInstalledPlugins.includes(p) === false
)
);
if (isRuntimeSsrPreHydration.value === true) {
pluginOpts.$q.onSSRHydrated = () => {
pluginOpts.onSSRHydrated.forEach((fn) => {
fn();
});
pluginOpts.$q.onSSRHydrated = () => {
};
};
}
}
const installQuasar = function(parentApp, opts = {}) {
const $q = { version: "2.11.10" };
if (globalConfigIsFrozen === false) {
if (opts.config !== void 0) {
Object.assign(globalConfig, opts.config);
}
$q.config = { ...globalConfig };
freezeGlobalConfig();
} else {
$q.config = opts.config || {};
}
prepareApp(parentApp, opts, {
parentApp,
$q,
lang: opts.lang,
iconSet: opts.iconSet,
onSSRHydrated: []
});
};
const Quasar = {
version: "2.11.10",
install: installQuasar,
lang: Plugin$1,
iconSet: Plugin
};
const iconSet = {
name: "fontawesome-v6",
type: {
positive: "fas fa-check",
negative: "fas fa-triangle-exclamation",
info: "fas fa-circle-info",
warning: "fas fa-exclamation"
},
arrow: {
up: "fas fa-arrow-up",
right: "fas fa-arrow-right",
down: "fas fa-arrow-down",
left: "fas fa-arrow-left",
dropdown: "fas fa-caret-down"
},
chevron: {
left: "fas fa-chevron-left",
right: "fas fa-chevron-right"
},
colorPicker: {
spectrum: "fas fa-eye-dropper",
tune: "fas fa-sliders",
palette: "fas fa-swatchbook"
},
pullToRefresh: {
icon: "fas fa-rotate"
},
carousel: {
left: "fas fa-chevron-left",
right: "fas fa-chevron-right",
up: "fas fa-chevron-up",
down: "fas fa-chevron-down",
navigationIcon: "fas fa-circle"
},
chip: {
remove: "fas fa-circle-xmark",
selected: "fas fa-check"
},
datetime: {
arrowLeft: "fas fa-chevron-left",
arrowRight: "fas fa-chevron-right",
now: "far fa-clock",
today: "far fa-calendar-check"
},
editor: {
bold: "fas fa-bold",
italic: "fas fa-italic",
strikethrough: "fas fa-strikethrough",
underline: "fas fa-underline",
unorderedList: "fas fa-list-ul",
orderedList: "fas fa-list-ol",
subscript: "fas fa-subscript",
superscript: "fas fa-superscript",
hyperlink: "fas fa-link",
toggleFullscreen: "fas fa-maximize",
quote: "fas fa-quote-right",
left: "fas fa-align-left",
center: "fas fa-align-center",
right: "fas fa-align-right",
justify: "fas fa-align-justify",
print: "fas fa-print",
outdent: "fas fa-outdent",
indent: "fas fa-indent",
removeFormat: "fas fa-eraser",
formatting: "fas fa-heading",
fontSize: "fas fa-text-height",
align: "fas fa-align-left",
hr: "far fa-square-minus",
undo: "fas fa-rotate-left",
redo: "fas fa-rotate-right",
heading: "fas fa-heading",
code: "fas fa-code",
size: "fas fa-text-height",
font: "fas fa-font",
viewSource: "fas fa-code"
},
expansionItem: {
icon: "fas fa-chevron-down",
denseIcon: "fas fa-caret-down"
},
fab: {
icon: "fas fa-plus",
activeIcon: "fas fa-xmark"
},
field: {
clear: "fas fa-circle-xmark",
error: "fas fa-circle-exclamation"
},
pagination: {
first: "fas fa-backward-step",
prev: "fas fa-chevron-left",
next: "fas fa-chevron-right",
last: "fas fa-forward-step"
},
rating: {
icon: "fas fa-star"
},
stepper: {
done: "fas fa-check",
active: "fas fa-pencil",
error: "fas fa-triangle-exclamation"
},
tabs: {
left: "fas fa-chevron-left",
right: "fas fa-chevron-right",
up: "fas fa-chevron-up",
down: "fas fa-chevron-down"
},
table: {
arrowUp: "fas fa-arrow-up",
warning: "fas fa-triangle-exclamation",
firstPage: "fas fa-backward-step",
prevPage: "fas fa-chevron-left",
nextPage: "fas fa-chevron-right",
lastPage: "fas fa-forward-step"
},
tree: {
icon: "fas fa-play"
},
uploader: {
done: "fas fa-check",
clear: "fas fa-xmark",
add: "fas fa-square-plus",
upload: "fas fa-upload",
removeQueue: "fas fa-bars-staggered",
removeUploaded: "fas fa-clipboard-check"
}
};
const app = vue.createApp(_sfc_main);
app.use(Quasar, {
plugins: {},
// import Quasar plugins and add here
iconSet
});
app.mount(
(() => {
const app2 = document.createElement("div");
app2.className = "vue-root";
document.body.append(app2);
return app2;
})()
);
})(Vue);