diff --git a/app/assets/plutonium.css b/app/assets/plutonium.css index fb47b952..b4b2553b 100644 --- a/app/assets/plutonium.css +++ b/app/assets/plutonium.css @@ -1,11 +1 @@ -/*! tailwindcss v4.0.9 | MIT License | https://tailwindcss.com */.pu-color-input::-webkit-color-swatch-wrapper{padding:calc(var(--spacing)*0)}.pu-color-input::-webkit-color-swatch{border-radius:var(--radius-lg);--tw-border-style:none;border-style:none}.pu-color-input::-moz-color-swatch{border-radius:var(--radius-lg);--tw-border-style:none;border-style:none}.EasyMDEContainer .CodeMirror{background-color:var(--color-white);border-color:var(--color-gray-300);color:var(--color-gray-900);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-100)}}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-selected{background-color:var(--color-gray-200);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-gutters{background-color:var(--color-gray-50);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.CodeMirror-linenumber{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.CodeMirror-cursor{border-color:var(--color-gray-900);&:where(.dark,.dark *){border-color:var(--color-gray-100)}}.editor-toolbar{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.editor-toolbar.fullscreen{background-color:var(--color-white);&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.editor-toolbar button{color:var(--color-gray-700);&:hover{@media (hover:hover){border-color:var(--color-gray-400)}}&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}&:where(.dark,.dark *){color:var(--color-gray-300)}&:where(.dark,.dark *){&:hover{@media (hover:hover){border-color:var(--color-gray-500)}}}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.editor-toolbar button.active,.editor-toolbar button:hover{background-color:var(--color-gray-100);border-color:var(--color-gray-400);&:where(.dark,.dark *){border-color:var(--color-gray-500)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.editor-toolbar i.separator{border-left-color:var(--color-gray-300);border-right-color:var(--color-white);&:where(.dark,.dark *){border-right-color:var(--color-gray-800)}&:where(.dark,.dark *){border-left-color:var(--color-gray-600)}}.editor-statusbar{color:var(--color-gray-600);&:where(.dark,.dark *){color:var(--color-gray-400)}}.editor-preview{background-color:var(--color-gray-50);color:var(--color-gray-900);&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-100)}}.editor-preview pre{background-color:var(--color-gray-200);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.editor-preview table td,.editor-preview table th{border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.editor-preview-side{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.dark .cm-s-easymde .cm-header-1,.dark .cm-s-easymde .cm-header-2,.dark .cm-s-easymde .cm-header-3,.dark .cm-s-easymde .cm-header-4,.dark .cm-s-easymde .cm-header-5,.dark .cm-s-easymde .cm-header-6{color:var(--color-blue-300)}.dark .cm-s-easymde .cm-quote{color:var(--color-green-400)}.dark .cm-s-easymde .cm-comment{background-color:var(--color-gray-700)}.dark .cm-s-easymde .cm-link{color:var(--color-blue-400)}.dark .cm-s-easymde .cm-url{color:var(--color-blue-300)}.dark .cm-s-easymde .cm-tag{color:var(--color-green-400)}.dark .cm-s-easymde .cm-attribute{color:var(--color-purple-400)}.dark .cm-s-easymde .cm-string{color:var(--color-orange-400)}.editor-toolbar .easymde-dropdown{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.easymde-dropdown-content{background-color:var(--color-white);border-color:var(--color-gray-200);border-style:var(--tw-border-style);border-width:1px;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab,var(--color-gray-900) 20%,transparent)}}.easymde-dropdown-content button{color:var(--color-gray-700);&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}&:where(.dark,.dark *){color:var(--color-gray-300)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.dark .CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}.dark .EasyMDEContainer .CodeMirror-placeholder{color:var(--color-gray-500)}.dark .CodeMirror-activeline-background{background-color:color-mix(in oklab,var(--color-gray-700) 50%,transparent)}.dark div.CodeMirror span.CodeMirror-matchingbracket{color:var(--color-green-400)}.dark div.CodeMirror span.CodeMirror-nonmatchingbracket{color:var(--color-red-400)}.dark .cm-searching{background-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}@keyframes ss-valueIn{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes ss-valueOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}.ss-hide{display:none!important}.ss-main{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;cursor:pointer;display:flex;flex-direction:row;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));min-height:calc(var(--spacing)*8);overflow:hidden;padding:calc(var(--spacing)*2);position:relative;width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;--tw-outline-style:none;outline-style:none;-webkit-user-select:none;user-select:none;&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.ss-main.ss-disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-900)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-main.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-values{display:inline-flex;flex:1;flex-wrap:wrap;gap:calc(var(--spacing)*1)}.ss-main .ss-values .ss-placeholder{align-items:center;display:flex;margin-block:auto;overflow:hidden;padding-block:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*0);width:100%;--tw-leading:1;color:var(--color-gray-400);line-height:1;text-overflow:ellipsis;white-space:nowrap;&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-main .ss-values .ss-max{align-items:center;background-color:#17b8be;border-radius:.25rem;display:flex;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);width:fit-content;--tw-leading:1;color:var(--color-white);line-height:1;-webkit-user-select:none;user-select:none}.ss-main .ss-values .ss-single{display:flex;margin-block:auto}.ss-main .ss-values .ss-value{align-items:center;animation:ss-valueIn .2s ease-out forwards;background-color:#17b8be;border-radius:.25rem;color:var(--color-white);display:flex;-webkit-user-select:none;user-select:none;width:fit-content}.ss-main .ss-values .ss-value.ss-value-out{animation:ss-valueOut .2s ease-out forwards}.ss-main .ss-values .ss-value .ss-value-text{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);--tw-leading:1;line-height:1}.ss-main .ss-values .ss-value .ss-value-delete{align-items:center;border-left-width:1px;cursor:pointer;display:flex;height:calc(var(--spacing)*2);width:calc(var(--spacing)*2);--tw-border-style:solid;border-color:var(--color-white);border-style:solid;box-sizing:content-box;padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2)}.ss-main .ss-values .ss-value .ss-value-delete svg{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.ss-main .ss-values .ss-value .ss-value-delete svg path{fill:none;stroke:var(--color-white);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-deselect{align-items:center;display:flex;flex:none;height:auto;justify-content:center;padding-inline:calc(var(--spacing)*2);width:fit-content}.ss-main .ss-deselect svg{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.ss-main .ss-deselect svg path{fill:none;stroke:var(--color-gray-700);stroke-width:20;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-main .ss-arrow{align-items:center;display:flex;flex:none;height:calc(var(--spacing)*3);justify-content:flex-end;margin-block:auto;margin-inline:calc(var(--spacing)*2);width:calc(var(--spacing)*3)}.ss-main .ss-arrow path{fill:none;stroke:var(--color-gray-700);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content{background-color:var(--color-white);border-color:var(--color-gray-300);border-style:var(--tw-border-style);border-width:1px;display:flex;flex-direction:column;height:auto;max-height:calc(var(--spacing)*72);opacity:0;overflow:hidden;position:absolute;width:auto;z-index:10000;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transform:scaleY(0);transform-origin:top;transition-duration:.2s;&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.ss-content.ss-relative{height:100%;position:relative}.ss-content.ss-fixed{position:fixed}.ss-content.ss-open-above{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md);flex-direction:column-reverse;opacity:100%;transform:scaleY(1);transform-origin:bottom}.ss-content.ss-open-below{border-bottom-left-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md);opacity:100%;transform:scaleY(1);transform-origin:top}.ss-content .ss-search{display:flex;flex:none;flex-direction:row;padding:calc(var(--spacing)*2)}.ss-content .ss-search input{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;display:inline-flex;flex:auto;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin:calc(var(--spacing)*0);min-width:calc(var(--spacing)*0);padding:calc(var(--spacing)*2);text-align:left;width:100%;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;box-sizing:border-box;font-size:inherit;line-height:inherit;outline-style:none;&::placeholder{color:var(--color-gray-400)}&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.ss-content .ss-search .ss-addable{align-items:center;border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;cursor:pointer;display:inline-flex;flex:none;height:auto;justify-content:center;margin-left:calc(var(--spacing)*2);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.ss-content .ss-search .ss-addable svg{align-items:center;display:flex;flex:none;height:calc(var(--spacing)*3);justify-content:flex-end;margin-block:auto;margin-inline:calc(var(--spacing)*2);width:calc(var(--spacing)*3)}.ss-content .ss-search .ss-addable svg path{fill:none;stroke:var(--color-gray-700);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content .ss-list{flex:auto;height:auto;overflow-x:hidden;overflow-y:auto}.ss-content .ss-list .ss-error{color:var(--color-red-500);padding:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-red-400)}}.ss-content .ss-list .ss-searching{color:var(--color-gray-700);padding:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-white)}}.ss-content .ss-list .ss-optgroup.ss-close .ss-option{display:none!important}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{align-items:center;background-color:var(--color-gray-50);display:flex;flex-direction:row;justify-content:space-between;padding:calc(var(--spacing)*2);&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-label-text{flex:auto;--tw-font-weight:var(--font-weight-bold);color:var(--color-gray-700);font-weight:var(--font-weight-bold);&:where(.dark,.dark *){color:var(--color-white)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label:has(.ss-arrow){cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions{align-items:center;display:flex;flex:none;flex-direction:row;gap:calc(var(--spacing)*1);justify-content:center}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall{cursor:pointer;display:flex;flex:none;flex-direction:row;&:hover{@media (hover:hover){opacity:50%}}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall.ss-selected svg path{stroke:var(--color-red-500);&:where(.dark,.dark *){stroke:var(--color-red-400)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall span{align-items:center;display:flex;flex:none;font-size:60%;justify-content:center;padding-right:calc(var(--spacing)*1);text-align:center}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg{flex:none;height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg path{fill:none;stroke:var(--color-green-500);stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-green-400)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:first-child{stroke-width:5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:last-child{stroke-width:11}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable{cursor:pointer;display:flex;flex:none;flex-direction:row}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow{flex:auto;height:calc(var(--spacing)*2.5);width:calc(var(--spacing)*2.5)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow path{fill:none;stroke:var(--color-gray-700);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content .ss-list .ss-optgroup .ss-option{padding:calc(var(--spacing)*1);padding-left:calc(var(--spacing)*6)}.ss-content .ss-list .ss-option{color:var(--color-gray-700);cursor:pointer;display:block;min-height:0;padding:calc(var(--spacing)*2);-webkit-user-select:none;user-select:none;white-space:normal;&:hover{@media (hover:hover){background-color:#17b8be}}&:hover{@media (hover:hover){color:var(--color-white)}}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#17b8be}}}&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-white)}}}}.ss-content .ss-list .ss-option:empty{display:none;margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0)}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:not(.ss-disabled).ss-selected{background-color:#17b8be;color:var(--color-white)}.ss-content .ss-list .ss-option.ss-disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-content .ss-list .ss-option.ss-disabled:hover{background-color:var(--color-gray-100);color:var(--color-gray-500);&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:var(--color-yellow-200);display:inline-block;&:where(.dark,.dark *){background-color:var(--color-yellow-300)}}.ss-main.ss-invalid{background-color:var(--color-red-50);border-color:var(--color-red-500);color:var(--color-red-900);&:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}&:where(.dark,.dark *){border-color:var(--color-red-500)}&:where(.dark,.dark *){color:var(--color-red-500)}}.ss-main.ss-invalid .ss-values .ss-placeholder{color:var(--color-red-700);&:where(.dark,.dark *){color:var(--color-red-500)}}.ss-main.ss-valid{background-color:var(--color-green-50);border-color:var(--color-green-500);color:var(--color-green-900);&:focus{border-color:var(--color-green-500);--tw-ring-color:var(--color-green-500)}&:where(.dark,.dark *){border-color:var(--color-green-500)}&:where(.dark,.dark *){color:var(--color-green-400)}}.ss-main.ss-valid .ss-values .ss-placeholder{color:var(--color-green-700);&:where(.dark,.dark *){color:var(--color-green-500)}}.ss-dropdown-container{inset:40% 0 auto;position:absolute;z-index:9999}.ss-dropdown-container .ss-content{border-radius:0!important;margin:0!important;pointer-events:none!important;position:static!important;transform:none!important;width:100%!important}.ss-dropdown-container.ss-active .ss-content{pointer-events:auto!important}.ss-dropdown-container .ss-list{max-height:250px!important;overflow-y:auto!important}.ss-dropdown-container:not(.ss-active),.ss-dropdown-container:not(:has(.ss-content)){pointer-events:none!important}.ss-dropdown-container:not(.ss-active) *{pointer-events:none!important}:root{--iti-hover-color:#f0fdfd;--iti-border-color:oklch(0.872 0.01 258.338);--iti-dialcode-color:oklch(0.551 0.027 264.364);--iti-dropdown-bg:#fff;--iti-arrow-color:oklch(0.373 0.034 259.733)}@media (prefers-color-scheme:dark){:root{--iti-hover-color:color-mix(in oklab,#084547 30%,transparent);--iti-border-color:oklch(0.446 0.03 256.802);--iti-dialcode-color:oklch(0.707 0.022 261.325);--iti-dropdown-bg:oklch(0.373 0.034 259.733);--iti-arrow-color:#fff}}.dark{--iti-hover-color:color-mix(in oklab,#084547 30%,transparent);--iti-border-color:oklch(0.446 0.03 256.802);--iti-dialcode-color:oklch(0.707 0.022 261.325);--iti-dropdown-bg:oklch(0.373 0.034 259.733);--iti-arrow-color:#fff}.iti{width:100%}.iti input.iti__tel-input,.iti input.iti__tel-input[type=tel],.iti input.iti__tel-input[type=text]{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;--tw-outline-style:none;outline-style:none;padding:.5rem .5rem .5rem 52px;&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.iti .iti__country-container{bottom:calc(var(--spacing)*0);left:calc(var(--spacing)*0);padding:.5rem;position:absolute;top:calc(var(--spacing)*0);width:52px;z-index:10}.iti .iti__selected-country{background-color:transparent;border-style:var(--tw-border-style);border-width:0;color:var(--color-gray-700);&:where(.dark,.dark *){color:var(--color-white)}}.iti .iti__selected-country-primary{color:var(--color-gray-700);padding-inline:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-white)}}.iti .iti__arrow{border-top-color:oklch(.373 .034 259.733);margin-left:calc(var(--spacing)*1)}.dark .iti .iti__arrow{border-top-color:#fff}.iti .iti__arrow--up{border-bottom-color:oklch(.373 .034 259.733);border-top-color:transparent}.dark .iti .iti__arrow--up{border-bottom-color:#fff}.iti .iti__dropdown-content{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.iti .iti__search-input{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*2);width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;margin:.5rem;outline-style:none;width:calc(100% - 1rem);&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.iti .iti__search-input+.iti__country-list{border-color:var(--color-gray-300);border-top-style:var(--tw-border-style);border-top-width:1px;&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.iti .iti__country-list{max-height:calc(var(--spacing)*48);overflow-y:auto}.iti .iti__country{color:var(--color-gray-700);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2);&:hover{@media (hover:hover){background-color:#17b8be}}&:hover{@media (hover:hover){color:var(--color-white)}}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#17b8be}}}}.iti .iti__country-list .iti__flag,.iti .iti__country-name{margin-right:calc(var(--spacing)*2);&:where(.dark,.dark *){margin-right:calc(var(--spacing)*2)}}[dir=rtl] .iti .iti__country-list .iti__flag,[dir=rtl] .iti .iti__country-name{margin-left:calc(var(--spacing)*2);margin-right:calc(var(--spacing)*0)}.iti .iti__dial-code{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti .iti__selected-dial-code{color:var(--color-gray-500);margin-left:calc(var(--spacing)*1);&:where(.dark,.dark *){color:var(--color-gray-400)}}[dir=rtl] .iti .iti__selected-dial-code{margin-left:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*1)}.iti .iti__selected-country-primary[aria-activedescendant],.iti .iti__selected-country[aria-activedescendant]{background-color:transparent!important}.iti .iti__selected-country-primary:has(~.iti__dropdown-content:hover),.iti .iti__selected-country:has(+.iti__dropdown-content:hover){background-color:transparent!important}.iti .iti__country-container:hover .iti__flag,.iti .iti__flag,.iti .iti__selected-country-primary[aria-activedescendant] .iti__flag,.iti .iti__selected-country[aria-activedescendant] .iti__flag,.iti--allow-dropdown .iti__country-container:hover,.iti--allow-dropdown .iti__country-container:hover .iti__selected-country,.iti--allow-dropdown .iti__country-container:hover .iti__selected-country-primary{background-color:transparent!important}.iti .iti__flag.iti__globe{background-color:oklch(.967 .003 264.542)!important;&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark .iti .iti__flag.iti__globe{background-color:oklch(.446 .03 256.802)!important}.iti .iti__country.iti__highlight{background-color:#17b8be;color:var(--color-white)}.iti--fullscreen-popup.iti--container{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}.iti--fullscreen-popup .iti__dropdown-content{background-color:var(--color-white);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.iti--fullscreen-popup .iti__country{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));padding-block:calc(var(--spacing)*3)}.iti .iti__flag.iti__globe{background-blend-mode:multiply;background-color:var(--color-gray-100);&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark .iti .iti__flag.iti__globe{filter:invert(1) brightness(.8)}.iti.iti-invalid input.iti__tel-input,.iti.iti-invalid input.iti__tel-input[type=tel],.iti.iti-invalid input.iti__tel-input[type=text]{background-color:var(--color-red-50);border-color:var(--color-red-500);color:var(--color-red-900);&:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}&:where(.dark,.dark *){border-color:var(--color-red-500)}&:where(.dark,.dark *){color:var(--color-red-500)}}.iti.iti-valid input.iti__tel-input,.iti.iti-valid input.iti__tel-input[type=tel],.iti.iti-valid input.iti__tel-input[type=text]{background-color:var(--color-green-50);border-color:var(--color-green-500);color:var(--color-green-900);&:focus{border-color:var(--color-green-500);--tw-ring-color:var(--color-green-500)}&:where(.dark,.dark *){border-color:var(--color-green-500)}&:where(.dark,.dark *){color:var(--color-green-400)}}.iti.iti-invalid .iti__arrow{border-top-color:oklch(.637 .237 25.331)}.iti.iti-invalid .iti__arrow--up{border-bottom-color:oklch(.637 .237 25.331);border-top-color:transparent}.iti.iti-valid .iti__arrow{border-top-color:oklch(.723 .219 149.579)}.iti.iti-valid .iti__arrow--up{border-bottom-color:oklch(.723 .219 149.579);border-top-color:transparent}.iti input.iti__tel-input:disabled,.iti input.iti__tel-input[type=tel]:disabled,.iti input.iti__tel-input[type=text]:disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-900)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti input.iti__tel-input:disabled+.iti__country-container{cursor:not-allowed}.iti input.iti__tel-input:disabled+.iti__country-container .iti__selected-country{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti input.iti__tel-input:disabled+.iti__country-container .iti__arrow{border-top-color:oklch(.707 .022 261.325)}.dark .iti input.iti__tel-input:disabled+.iti__country-container .iti__arrow{border-top-color:oklch(.446 .03 256.802)}.flatpickr-calendar{-webkit-animation:none;animation:none;background:transparent;background:#fff;border:0;border-radius:5px;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr;display:none;font-size:14px;line-height:24px;opacity:0;padding:0;position:absolute;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;visibility:hidden;width:307.875px}.flatpickr-calendar.inline,.flatpickr-calendar.open{max-height:640px;opacity:1;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{display:block;z-index:999}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{border-top:1px solid #e6e6e6;height:40px}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{border:solid transparent;content:"";display:block;height:0;left:22px;pointer-events:none;position:absolute;width:0}.flatpickr-calendar.arrowRight:after,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar.arrowCenter:after,.flatpickr-calendar.arrowCenter:before{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{display:inline-block;position:relative}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;line-height:1;overflow:hidden;position:relative;text-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{cursor:pointer;padding:10px;position:absolute;text-decoration:none;top:0;z-index:3}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{height:14px;width:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{height:auto;position:relative}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.numInputWrapper span{border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;height:50%;line-height:50%;opacity:0;padding:0 4px 0 2px;position:absolute;right:0;width:14px}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{content:"";display:block;position:absolute}.numInputWrapper span.arrowUp{border-bottom:0;top:0}.numInputWrapper span.arrowUp:after{border-bottom:4px solid rgba(57,57,57,.6);border-left:4px solid transparent;border-right:4px solid transparent;top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{height:auto;width:inherit}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{color:inherit;display:inline-block;font-size:135%;font-weight:300;height:34px;left:12.5%;line-height:inherit;line-height:1;padding:7.48px 0 0;position:absolute;text-align:center;-webkit-transform:translateZ(0);transform:translateZ(0);width:75%}.flatpickr-current-month span.cur-month{color:inherit;display:inline-block;font-family:inherit;font-weight:700;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{display:inline-block;width:6ch;width:7ch\0}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;display:inline-block;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:0;padding:0 0 0 .5ch;vertical-align:initial}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{background:transparent;color:rgba(0,0,0,.5);font-size:100%;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;-webkit-appearance:menulist;-moz-appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;-webkit-box-sizing:border-box;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;text-align:center;width:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{background:transparent;color:rgba(0,0,0,.54);cursor:default;display:block;font-size:90%;line-height:1;margin:0;text-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:relative;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;max-width:307.875px;min-width:307.875px;outline:0;padding:0;text-align:left;width:307.875px;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;-webkit-flex-basis:14.2857143%;font-weight:400;width:14.2857143%;-ms-flex-preferred-size:14.2857143%;display:inline-block;flex-basis:14.2857143%;height:39px;line-height:39px;margin:0;max-width:39px;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{background:#e6e6e6;border-color:#e6e6e6;cursor:pointer;outline:0}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{background:#959ea9;border-color:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;border-color:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{background:transparent;border-color:transparent;color:rgba(57,57,57,.3);cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{color:rgba(57,57,57,.1);cursor:not-allowed}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6;padding:0 12px}.flatpickr-weekwrapper .flatpickr-weekday{float:none;line-height:28px;width:100%}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{background:transparent;border:none;color:rgba(57,57,57,.3);cursor:default;display:block;max-width:none;width:100%}.flatpickr-innerContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden}.flatpickr-rContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding:0}.flatpickr-time{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0;line-height:40px;max-height:40px;outline:0;overflow:hidden;text-align:center}.flatpickr-time:after{clear:both;content:"";display:table}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;float:left;height:40px;width:40%}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;font-size:14px;height:inherit;line-height:inherit;margin:0;padding:0;position:relative;text-align:center}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{border:0;outline:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{-webkit-align-self:center;color:#393939;float:left;font-weight:700;height:inherit;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:2%;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{cursor:pointer;font-weight:400;outline:0;text-align:center;width:18%}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}[data-controller=remote-modal]>.flatpickr-calendar{left:auto!important}@layer theme, base, components, utilities;@layer theme{:host,:root{--color-red-50:oklch(0.971 0.013 17.38);--color-red-100:oklch(0.936 0.032 17.717);--color-red-200:oklch(0.885 0.062 18.334);--color-red-300:oklch(0.808 0.114 19.571);--color-red-400:oklch(0.704 0.191 22.216);--color-red-500:oklch(0.637 0.237 25.331);--color-red-600:oklch(0.577 0.245 27.325);--color-red-700:oklch(0.505 0.213 27.518);--color-red-800:oklch(0.444 0.177 26.899);--color-red-900:oklch(0.396 0.141 25.723);--color-orange-400:oklch(0.75 0.183 55.934);--color-yellow-50:oklch(0.987 0.026 102.212);--color-yellow-100:oklch(0.973 0.071 103.193);--color-yellow-200:oklch(0.945 0.129 101.54);--color-yellow-300:oklch(0.905 0.182 98.111);--color-yellow-400:oklch(0.852 0.199 91.936);--color-yellow-500:oklch(0.795 0.184 86.047);--color-yellow-600:oklch(0.681 0.162 75.834);--color-yellow-700:oklch(0.554 0.135 66.442);--color-yellow-800:oklch(0.476 0.114 61.907);--color-green-50:oklch(0.982 0.018 155.826);--color-green-100:oklch(0.962 0.044 156.743);--color-green-200:oklch(0.925 0.084 155.995);--color-green-300:oklch(0.871 0.15 154.449);--color-green-400:oklch(0.792 0.209 151.711);--color-green-500:oklch(0.723 0.219 149.579);--color-green-700:oklch(0.527 0.154 150.069);--color-green-800:oklch(0.448 0.119 151.328);--color-green-900:oklch(0.393 0.095 152.535);--color-emerald-400:oklch(0.765 0.177 163.223);--color-blue-50:oklch(0.97 0.014 254.604);--color-blue-100:oklch(0.932 0.032 255.585);--color-blue-200:oklch(0.882 0.059 254.128);--color-blue-300:oklch(0.809 0.105 251.813);--color-blue-400:oklch(0.707 0.165 254.624);--color-blue-500:oklch(0.623 0.214 259.815);--color-blue-600:oklch(0.546 0.245 262.881);--color-blue-700:oklch(0.488 0.243 264.376);--color-blue-800:oklch(0.424 0.199 265.638);--color-blue-900:oklch(0.379 0.146 265.522);--color-violet-400:oklch(0.702 0.183 293.541);--color-violet-500:oklch(0.606 0.25 292.717);--color-purple-400:oklch(0.714 0.203 305.504);--color-gray-50:oklch(0.985 0.002 247.839);--color-gray-100:oklch(0.967 0.003 264.542);--color-gray-200:oklch(0.928 0.006 264.531);--color-gray-300:oklch(0.872 0.01 258.338);--color-gray-400:oklch(0.707 0.022 261.325);--color-gray-500:oklch(0.551 0.027 264.364);--color-gray-600:oklch(0.446 0.03 256.802);--color-gray-700:oklch(0.373 0.034 259.733);--color-gray-800:oklch(0.278 0.033 256.848);--color-gray-900:oklch(0.21 0.034 264.665);--color-stone-300:oklch(0.869 0.005 56.366);--color-black:#000;--color-white:#fff;--spacing:0.25rem;--container-sm:24rem;--container-md:28rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:0.75rem;--text-xs--line-height:1.33333;--text-sm:0.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--text-4xl:2.25rem;--text-4xl--line-height:1.11111;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-0.025em;--tracking-wider:0.05em;--leading-tight:1.25;--radius-sm:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--ease-in:cubic-bezier(0.4,0,1,1);--ease-out:cubic-bezier(0,0,0.2,1);--ease-in-out:cubic-bezier(0.4,0,0.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(0.4,0,0.6,1) infinite;--blur-sm:8px;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-family:Lato,ui-sans-serif,system-ui,-apple-system,system-ui,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--default-font-feature-settings:normal;--default-font-variation-settings:normal;--default-mono-font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--default-mono-font-feature-settings:normal;--default-mono-font-variation-settings:normal}}@layer base{*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:var( - --default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji" - );font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var( - --default-font-variation-settings,normal - );tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var( - --default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace - );font-feature-settings:var( - --default-mono-font-feature-settings,normal - );font-size:1em;font-variation-settings:var( - --default-mono-font-variation-settings,normal - )}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{background-color:transparent;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{color:color-mix(in oklab,currentColor 50%,transparent);opacity:1}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.top-16{top:calc(var(--spacing)*16)}.top-auto{top:auto}.right-0{right:calc(var(--spacing)*0)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-\[-2px\]{bottom:-2px}.bottom-\[60px\]{bottom:60px}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[10000\]{z-index:10000}.col-span-1{grid-column:span 1/span 1}.col-span-full{grid-column:1/-1}.container{width:100%;@media (width >= 475px){max-width:475px}@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.format{color:var(--tw-format-body);max-width:65ch;--tw-format-body:oklch(0.551 0.027 264.364);--tw-format-headings:oklch(0.21 0.034 264.665);--tw-format-lead:oklch(0.551 0.027 264.364);--tw-format-links:oklch(0.446 0.03 256.802);--tw-format-bold:oklch(0.21 0.034 264.665);--tw-format-counters:oklch(0.551 0.027 264.364);--tw-format-bullets:oklch(0.551 0.027 264.364);--tw-format-hr:oklch(0.928 0.006 264.531);--tw-format-quotes:oklch(0.21 0.034 264.665);--tw-format-quote-borders:oklch(0.928 0.006 264.531);--tw-format-captions:oklch(0.551 0.027 264.364);--tw-format-code:oklch(0.21 0.034 264.665);--tw-format-code-bg:oklch(0.967 0.003 264.542);--tw-format-pre-code:oklch(0.446 0.03 256.802);--tw-format-pre-bg:oklch(0.967 0.003 264.542);--tw-format-th-borders:oklch(0.928 0.006 264.531);--tw-format-th-bg:oklch(0.985 0.002 247.839);--tw-format-td-borders:oklch(0.928 0.006 264.531);--tw-format-invert-body:oklch(0.707 0.022 261.325);--tw-format-invert-headings:#fff;--tw-format-invert-lead:oklch(0.707 0.022 261.325);--tw-format-invert-links:#fff;--tw-format-invert-bold:#fff;--tw-format-invert-counters:oklch(0.707 0.022 261.325);--tw-format-invert-bullets:oklch(0.446 0.03 256.802);--tw-format-invert-hr:oklch(0.373 0.034 259.733);--tw-format-invert-quotes:oklch(0.967 0.003 264.542);--tw-format-invert-quote-borders:oklch(0.373 0.034 259.733);--tw-format-invert-captions:oklch(0.707 0.022 261.325);--tw-format-invert-code:#fff;--tw-format-invert-code-bg:oklch(0.278 0.033 256.848);--tw-format-invert-pre-code:oklch(0.872 0.01 258.338);--tw-format-invert-pre-bg:oklch(0.373 0.034 259.733);--tw-format-invert-th-borders:oklch(0.446 0.03 256.802);--tw-format-invert-td-borders:oklch(0.373 0.034 259.733);--tw-format-invert-th-bg:oklch(0.373 0.034 259.733);font-size:1rem;line-height:1.75;:where([class~=lead]):not(:where([class~=not-format] *)){color:var(--tw-format-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}:where(a):not(:where([class~=not-format] *)){color:var(--tw-format-links);font-weight:500;text-decoration:underline;&:hover{text-decoration:none}}:where(strong):not(:where([class~=not-format] *)){color:var(--tw-format-bold);font-weight:700}:where(a strong):not(:where([class~=not-format] *)){color:inherit}:where(blockquote strong):not(:where([class~=not-format] *)){color:inherit}:where(thead th strong):not(:where([class~=not-format] *)){color:inherit}:where(ol):not(:where([class~=not-format] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol[type=A]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}:where(ol[type=a]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}:where(ol[type=A s]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}:where(ol[type=a s]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}:where(ol[type=I]):not(:where([class~=not-format] *)){list-style-type:upper-roman}:where(ol[type=i]):not(:where([class~=not-format] *)){list-style-type:lower-roman}:where(ol[type=I s]):not(:where([class~=not-format] *)){list-style-type:upper-roman}:where(ol[type=i s]):not(:where([class~=not-format] *)){list-style-type:lower-roman}:where(ol[type="1"]):not(:where([class~=not-format] *)){list-style-type:decimal}:where(ul):not(:where([class~=not-format] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol>li):not(:where([class~=not-format] *))::marker{color:var(--tw-format-counters);font-weight:400}:where(ul>li):not(:where([class~=not-format] *))::marker{color:var(--tw-format-bullets)}:where(hr):not(:where([class~=not-format] *)){border-color:var(--tw-format-hr);border-top-width:1;margin-bottom:3em;margin-top:3em}:where(blockquote):not(:where([class~=not-format] *)){color:var(--tw-format-quotes);font-size:1.1111111em;font-style:italic;font-weight:700;margin-bottom:1.6em;quotes:"\201C""\201D""\2018""\2019"}:where(blockquote):not(:where([class~=not-format] *)):before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='24' fill='none' viewBox='0 0 32 24'%3E%3Cpath fill='%239CA3AF' d='M18.69 24v-9.855C18.69 6.54 23.663 1.385 30.666 0l1.326 2.868c-3.242 1.223-5.326 4.85-5.326 7.799H32V24zM0 24v-9.855C0 6.54 4.997 1.384 12 0l1.328 2.868C10.084 4.091 8 7.718 8 10.667h5.31V24z'/%3E%3C/svg%3E");background-repeat:no-repeat;color:var(--tw-format-quotes);content:"";display:block;height:1.3333333em;margin-top:1.6em;width:1.7777778em}:where(blockquote p:first-of-type):not(:where([class~=not-format] *)):before{content:open-quote}:where(blockquote p:last-of-type):not(:where([class~=not-format] *)):after{content:close-quote}:where(h1):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}:where(h1 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:900}:where(h2):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:0}:where(h2 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:800}:where(h3):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:1.25em;font-weight:700;line-height:1.6;margin-bottom:.6em;margin-top:0}:where(h3 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:800}:where(h4):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:0}:where(h4 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:700}:where(img):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(figure>*):not(:where([class~=not-format] *)){margin-bottom:0;margin-top:0}:where(figcaption):not(:where([class~=not-format] *)){color:var(--tw-format-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}:where(code):not(:where([class~=not-format] *)){background-color:var(--tw-format-code-bg);border-radius:.2222222em;color:var(--tw-format-code);font-size:.875em;font-weight:600;padding:.3333333em .5555556em}:where(a code):not(:where([class~=not-format] *)){color:inherit}:where(h1 code):not(:where([class~=not-format] *)){color:inherit}:where(h2 code):not(:where([class~=not-format] *)){color:inherit;font-size:.875em}:where(h3 code):not(:where([class~=not-format] *)){color:inherit;font-size:.9em}:where(h4 code):not(:where([class~=not-format] *)){color:inherit}:where(blockquote code):not(:where([class~=not-format] *)){color:inherit}:where(thead th code):not(:where([class~=not-format] *)){color:inherit}:where(pre):not(:where([class~=not-format] *)){background-color:var(--tw-format-pre-bg);border-radius:.375rem;color:var(--tw-format-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}:where(pre code):not(:where([class~=not-format] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}:where(pre code):not(:where([class~=not-format] *)):before{content:none}:where(pre code):not(:where([class~=not-format] *)):after{content:none}:where(table):not(:where([class~=not-format] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}:where(thead):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);border-radius:.2777778em}:where(thead th):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em .5714286em .5714286em;vertical-align:bottom}:where(tbody th):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em;vertical-align:bottom}:where(tbody tr th p,tbody tr td p):not(:where([class~=not-format] *)){margin:0 !important}:where(tbody tr th,tbody tr td):not(:where([class~=not-format] *)){padding:.6666667em !important}:where(tbody tr):not(:where([class~=not-format] *)){border-bottom-color:var(--tw-format-td-borders);border-bottom-width:1px}:where(tbody tr:last-child):not(:where([class~=not-format] *)){border-bottom-width:0}:where(tbody td):not(:where([class~=not-format] *)){vertical-align:baseline}:where(tfoot):not(:where([class~=not-format] *)){border-top-color:var(--tw-format-th-borders);border-top-width:1px}:where(tfoot td):not(:where([class~=not-format] *)){vertical-align:top}:where(p):not(:where([class~=not-format] *)){margin-bottom:1.25em;margin-top:1.25em}:where(blockquote>p:first-child):not(:where([class~=not-format] *)){margin-top:0}:where(video):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(figure):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(li):not(:where([class~=not-format] *)){margin-bottom:.5em;margin-top:.5em}:where(ol>li):not(:where([class~=not-format] *)){padding-left:.375em}:where(ul>li):not(:where([class~=not-format] *)){padding-left:.375em}:where(.format>ul>li p):not(:where([class~=not-format] *)){margin-bottom:.75em;margin-top:.75em}:where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}:where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}:where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}:where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-format] *)){margin-bottom:.75em;margin-top:.75em}:where(hr+*):not(:where([class~=not-format] *)){margin-top:0}:where(h2+*):not(:where([class~=not-format] *)){margin-top:0}:where(h3+*):not(:where([class~=not-format] *)){margin-top:0}:where(h4+*):not(:where([class~=not-format] *)){margin-top:0}:where(thead th:last-child):not(:where([class~=not-format] *)){padding-right:0}:where(tbody td,tfoot td):not(:where([class~=not-format] *)){padding:.5714286em}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-format] *)){padding-right:0}:where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}:where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}}.prose{color:var(--tw-format-body);max-width:65ch;--tw-format-body:oklch(0.551 0.027 264.364);--tw-format-headings:oklch(0.21 0.034 264.665);--tw-format-lead:oklch(0.551 0.027 264.364);--tw-format-links:oklch(0.446 0.03 256.802);--tw-format-bold:oklch(0.21 0.034 264.665);--tw-format-counters:oklch(0.551 0.027 264.364);--tw-format-bullets:oklch(0.551 0.027 264.364);--tw-format-hr:oklch(0.928 0.006 264.531);--tw-format-quotes:oklch(0.21 0.034 264.665);--tw-format-quote-borders:oklch(0.928 0.006 264.531);--tw-format-captions:oklch(0.551 0.027 264.364);--tw-format-code:oklch(0.21 0.034 264.665);--tw-format-code-bg:oklch(0.967 0.003 264.542);--tw-format-pre-code:oklch(0.446 0.03 256.802);--tw-format-pre-bg:oklch(0.967 0.003 264.542);--tw-format-th-borders:oklch(0.928 0.006 264.531);--tw-format-th-bg:oklch(0.985 0.002 247.839);--tw-format-td-borders:oklch(0.928 0.006 264.531);--tw-format-invert-body:oklch(0.707 0.022 261.325);--tw-format-invert-headings:#fff;--tw-format-invert-lead:oklch(0.707 0.022 261.325);--tw-format-invert-links:#fff;--tw-format-invert-bold:#fff;--tw-format-invert-counters:oklch(0.707 0.022 261.325);--tw-format-invert-bullets:oklch(0.446 0.03 256.802);--tw-format-invert-hr:oklch(0.373 0.034 259.733);--tw-format-invert-quotes:oklch(0.967 0.003 264.542);--tw-format-invert-quote-borders:oklch(0.373 0.034 259.733);--tw-format-invert-captions:oklch(0.707 0.022 261.325);--tw-format-invert-code:#fff;--tw-format-invert-code-bg:oklch(0.278 0.033 256.848);--tw-format-invert-pre-code:oklch(0.872 0.01 258.338);--tw-format-invert-pre-bg:oklch(0.373 0.034 259.733);--tw-format-invert-th-borders:oklch(0.446 0.03 256.802);--tw-format-invert-td-borders:oklch(0.373 0.034 259.733);--tw-format-invert-th-bg:oklch(0.373 0.034 259.733);font-size:1rem;line-height:1.75;:where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}:where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-links);font-weight:500;text-decoration:underline;&:hover{text-decoration:none}}:where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-bold);font-weight:700}:where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}:where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-format-counters);font-weight:400}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-format-bullets)}:where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-format-hr);border-top-width:1;margin-bottom:3em;margin-top:3em}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-quotes);font-size:1.1111111em;font-style:italic;font-weight:700;margin-bottom:1.6em;quotes:"\201C""\201D""\2018""\2019"}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='24' fill='none' viewBox='0 0 32 24'%3E%3Cpath fill='%239CA3AF' d='M18.69 24v-9.855C18.69 6.54 23.663 1.385 30.666 0l1.326 2.868c-3.242 1.223-5.326 4.85-5.326 7.799H32V24zM0 24v-9.855C0 6.54 4.997 1.384 12 0l1.328 2.868C10.084 4.091 8 7.718 8 10.667h5.31V24z'/%3E%3C/svg%3E");background-repeat:no-repeat;color:var(--tw-format-quotes);content:"";display:block;height:1.3333333em;margin-top:1.6em;width:1.7777778em}:where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}:where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}:where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}:where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}:where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:0}:where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}:where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:1.25em;font-weight:700;line-height:1.6;margin-bottom:.6em;margin-top:0}:where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}:where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:0}:where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}:where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}:where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-code-bg);border-radius:.2222222em;color:var(--tw-format-code);font-size:.875em;font-weight:600;padding:.3333333em .5555556em}:where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}:where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}:where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-pre-bg);border-radius:.375rem;color:var(--tw-format-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}:where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}:where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);border-radius:.2777778em}:where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em .5714286em .5714286em;vertical-align:bottom}:where(tbody th):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em;vertical-align:bottom}:where(tbody tr th p,tbody tr td p):not(:where([class~=not-prose],[class~=not-prose] *)){margin:0 !important}:where(tbody tr th,tbody tr td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.6666667em !important}:where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-format-td-borders);border-bottom-width:1px}:where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}:where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}:where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-format-th-borders);border-top-width:1px}:where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}:where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}:where(blockquote>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}:where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}:where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}:where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}:where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}:where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1\.5{margin-inline:calc(var(--spacing)*-1.5)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.-my-1\.5{margin-block:calc(var(--spacing)*-1.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.my-auto{margin-block:auto}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-auto{margin-inline-start:auto}.me-2\.5{margin-inline-end:calc(var(--spacing)*2.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-2\.5{margin-left:calc(var(--spacing)*2.5)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-9{margin-left:calc(var(--spacing)*9)}.ml-auto{margin-left:auto}.\!hidden{display:none!important}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1/1}.size-1{height:calc(var(--spacing)*1);width:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-4\/5{height:80%}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[80\%\]{max-height:80%}.max-h-\[150px\]{max-height:150px}.max-h-\[300px\]{max-height:300px}.max-h-fit{max-height:fit-content}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[450px\]{max-width:450px}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[5em\]{min-width:5em}.flex-1{flex:1}.flex-auto{flex:auto}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%}.translate-x-full{--tw-translate-x:100%}.-translate-y-full,.translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y)}.transform\!{transform:var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y)!important}.transform-none{transform:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[repeat\(auto-fill\,minmax\(0\,180px\)\)\]{grid-template-columns:repeat(auto-fill,minmax(0,180px))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}}.space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}}.space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}}.gap-x-4{column-gap:calc(var(--spacing)*4)}.-space-x-px{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(-1px*var(--tw-space-x-reverse))}}.space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}}.space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}.space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.divide-y{:where(&>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}}.divide-gray-100{:where(&>:not(:last-child)){border-color:var(--color-gray-100)}}.divide-gray-200{:where(&>:not(:last-child)){border-color:var(--color-gray-200)}}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:calc(infinity*1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s-lg{border-end-start-radius:var(--radius-lg);border-start-start-radius:var(--radius-lg)}.rounded-e-lg{border-end-end-radius:var(--radius-lg);border-start-end-radius:var(--radius-lg)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-none{border-top-left-radius:0;border-top-right-radius:0}.rounded-b-lg{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.rounded-b-md{border-bottom-left-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-900{border-color:var(--color-gray-900)}.border-green-200{border-color:var(--color-green-200)}.border-green-500{border-color:var(--color-green-500)}.border-primary-600{border-color:#0e8f94}.border-primary-700{border-color:#0b6d71}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.border-transparent{border-color:transparent}.border-white{border-color:var(--color-white)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-r-white{border-right-color:var(--color-white)}.border-l-gray-300{border-left-color:var(--color-gray-300)}.bg-accent-100{background-color:#ffe4e7}.bg-accent-700{background-color:#e73d55}.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-800{background-color:var(--color-blue-800)}.bg-danger-100{background-color:#fee2e2}.bg-danger-700{background-color:#b91c1c}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-700\/50{background-color:color-mix(in oklab,var(--color-gray-700) 50%,transparent)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900) 50%,transparent)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-800{background-color:var(--color-green-800)}.bg-info-100{background-color:#e0f2fe}.bg-info-700{background-color:#0369a1}.bg-primary-50{background-color:#f0fdfd}.bg-primary-100{background-color:#e0fafa}.bg-primary-500{background-color:#17b8be}.bg-primary-600{background-color:#0e8f94}.bg-primary-700{background-color:#0b6d71}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-secondary-100{background-color:#e6ecf1}.bg-secondary-600{background-color:#1a3549}.bg-secondary-700{background-color:#152c3d}.bg-success-100{background-color:#dcfce7}.bg-success-700{background-color:#15803d}.bg-transparent{background-color:transparent}.bg-warning-100{background-color:#fef3c7}.bg-warning-700{background-color:#b45309}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-200{background-color:var(--color-yellow-200)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-yellow-500\/30{background-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}.bg-yellow-700{background-color:var(--color-yellow-700)}.bg-yellow-800{background-color:var(--color-yellow-800)}.fill-none{fill:none}.stroke-gray-700{stroke:var(--color-gray-700)}.stroke-green-500{stroke:var(--color-green-500)}.stroke-red-500{stroke:var(--color-red-500)}.stroke-white{stroke:var(--color-white)}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-8{padding-block:calc(var(--spacing)*8)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-14{padding-top:calc(var(--spacing)*14)}.pt-20{padding-top:calc(var(--spacing)*20)}.pr-1{padding-right:calc(var(--spacing)*1)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-start{text-align:start}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[60\%\]{font-size:60%}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.text-accent-700{color:#e73d55}.text-blue-200{color:var(--color-blue-200)}.text-blue-300{color:var(--color-blue-300)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-danger-700{color:#b91c1c}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-200{color:var(--color-green-200)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-info-700{color:#0369a1}.text-orange-400{color:var(--color-orange-400)}.text-primary-500{color:#17b8be}.text-primary-600{color:#0e8f94}.text-primary-700{color:#0b6d71}.text-primary-800{color:#0a5558}.text-purple-400{color:var(--color-purple-400)}.text-red-200{color:var(--color-red-200)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-secondary-600{color:#1a3549}.text-secondary-700{color:#152c3d}.text-success-700{color:#15803d}.text-warning-700{color:#b45309}.text-white{color:var(--color-white)}.text-yellow-200{color:var(--color-yellow-200)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-green-700{&::placeholder{color:var(--color-green-700)}}.placeholder-red-700{&::placeholder{color:var(--color-red-700)}}.opacity-0{opacity:0}.opacity-50{opacity:50%}.opacity-100{opacity:100%}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow,.shadow-inner{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,rgba(0,0,0,.05))}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-green-400{--tw-ring-color:var(--color-green-400)}.ring-red-400{--tw-ring-color:var(--color-red-400)}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\!invert{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.\!invert,.invert{--tw-invert:invert(100%)}.invert{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:200ms;transition-duration:.2s}.duration-300{--tw-duration:300ms;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.format-primary{--tw-prose-body:oklch(0.21 0.034 264.665);--tw-prose-headings:oklch(0.21 0.034 264.665);--tw-prose-lead:oklch(0.446 0.03 256.802);--tw-prose-links:#0b6d71;--tw-prose-bold:oklch(0.21 0.034 264.665);--tw-prose-counters:oklch(0.446 0.03 256.802);--tw-prose-bullets:oklch(0.446 0.03 256.802);--tw-prose-hr:oklch(0.928 0.006 264.531);--tw-prose-quotes:oklch(0.21 0.034 264.665);--tw-prose-quote-borders:oklch(0.872 0.01 258.338);--tw-prose-captions:oklch(0.373 0.034 259.733);--tw-prose-code:oklch(0.21 0.034 264.665);--tw-prose-code-bg:#f0fdfd;--tw-prose-pre-code:#e0fafa;--tw-prose-pre-bg:oklch(0.21 0.034 264.665);--tw-prose-th-borders:oklch(0.872 0.01 258.338);--tw-prose-td-borders:oklch(0.928 0.006 264.531);--tw-prose-th-bg:oklch(0.967 0.003 264.542);--tw-prose-invert-body:#fff;--tw-prose-invert-headings:#e6ecf1;--tw-prose-invert-lead:#678cab;--tw-prose-invert-links:#17b8be;--tw-prose-invert-bold:#e6ecf1;--tw-prose-invert-counters:oklch(0.707 0.022 261.325);--tw-prose-invert-bullets:oklch(0.707 0.022 261.325);--tw-prose-invert-hr:#0a5558;--tw-prose-invert-quotes:#e6ecf1;--tw-prose-invert-quote-borders:oklch(0.551 0.027 264.364);--tw-prose-invert-captions:#9db3c7;--tw-prose-invert-code:#e6ecf1;--tw-prose-invert-code-bg:#042f30;--tw-prose-invert-pre-code:#084547;--tw-prose-invert-pre-bg:#e6ecf1;--tw-prose-invert-th-borders:oklch(0.446 0.03 256.802);--tw-prose-invert-td-borders:oklch(0.373 0.034 259.733);--tw-prose-invert-th-bg:oklch(0.278 0.033 256.848)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-hover\:text-gray-500{&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-500)}}}.group-hover\:text-gray-900{&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-900)}}}.placeholder\:text-gray-400{&::placeholder{color:var(--color-gray-400)}}.backdrop\:bg-black\/60{&::backdrop{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.backdrop\:backdrop-blur-sm{&::backdrop{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}.last\:border-r-0{&:last-child{border-right-style:var(--tw-border-style);border-right-width:0}}.last\:border-none{&:last-child{--tw-border-style:none;border-style:none}}.open\:flex{&:is([open],:popover-open,:open){display:flex}}.open\:opacity-100{&:is([open],:popover-open,:open){opacity:100%}}.checked\:bg-primary-500{&:checked{background-color:#17b8be}}.valid\:border-green-500{&:valid{border-color:var(--color-green-500)}}.invalid\:border-red-500{&:invalid{border-color:var(--color-red-500)}}.invalid\:text-red-600{&:invalid{color:var(--color-red-600)}}.hover\:translate-y-\[-2px\]{&:hover{@media (hover:hover){--tw-translate-y:-2px;translate:var(--tw-translate-x) var(--tw-translate-y)}}}.hover\:border-gray-300{&:hover{@media (hover:hover){border-color:var(--color-gray-300)}}}.hover\:border-gray-400{&:hover{@media (hover:hover){border-color:var(--color-gray-400)}}}.hover\:bg-accent-200{&:hover{@media (hover:hover){background-color:#ffccd2}}}.hover\:bg-accent-800{&:hover{@media (hover:hover){background-color:#d12d44}}}.hover\:bg-blue-100{&:hover{@media (hover:hover){background-color:var(--color-blue-100)}}}.hover\:bg-blue-700{&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}.hover\:bg-blue-800{&:hover{@media (hover:hover){background-color:var(--color-blue-800)}}}.hover\:bg-danger-200{&:hover{@media (hover:hover){background-color:#fecaca}}}.hover\:bg-danger-800{&:hover{@media (hover:hover){background-color:#991b1b}}}.hover\:bg-gray-50{&:hover{@media (hover:hover){background-color:var(--color-gray-50)}}}.hover\:bg-gray-100{&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}}.hover\:bg-gray-200{&:hover{@media (hover:hover){background-color:var(--color-gray-200)}}}.hover\:bg-info-200{&:hover{@media (hover:hover){background-color:#bae6fd}}}.hover\:bg-info-800{&:hover{@media (hover:hover){background-color:#075985}}}.hover\:bg-primary-200{&:hover{@media (hover:hover){background-color:#baf3f5}}}.hover\:bg-primary-500{&:hover{@media (hover:hover){background-color:#17b8be}}}.hover\:bg-primary-700{&:hover{@media (hover:hover){background-color:#0b6d71}}}.hover\:bg-primary-800{&:hover{@media (hover:hover){background-color:#0a5558}}}.hover\:bg-red-50{&:hover{@media (hover:hover){background-color:var(--color-red-50)}}}.hover\:bg-red-700{&:hover{@media (hover:hover){background-color:var(--color-red-700)}}}.hover\:bg-red-800{&:hover{@media (hover:hover){background-color:var(--color-red-800)}}}.hover\:bg-secondary-200{&:hover{@media (hover:hover){background-color:#c7d5e1}}}.hover\:bg-secondary-700{&:hover{@media (hover:hover){background-color:#152c3d}}}.hover\:bg-secondary-800{&:hover{@media (hover:hover){background-color:#102231}}}.hover\:bg-success-200{&:hover{@media (hover:hover){background-color:#bbf7d0}}}.hover\:bg-success-800{&:hover{@media (hover:hover){background-color:#166534}}}.hover\:bg-warning-200{&:hover{@media (hover:hover){background-color:#fde68a}}}.hover\:bg-warning-800{&:hover{@media (hover:hover){background-color:#92400e}}}.hover\:bg-yellow-400{&:hover{@media (hover:hover){background-color:var(--color-yellow-400)}}}.hover\:bg-yellow-800{&:hover{@media (hover:hover){background-color:var(--color-yellow-800)}}}.hover\:text-blue-700{&:hover{@media (hover:hover){color:var(--color-blue-700)}}}.hover\:text-blue-800{&:hover{@media (hover:hover){color:var(--color-blue-800)}}}.hover\:text-gray-600{&:hover{@media (hover:hover){color:var(--color-gray-600)}}}.hover\:text-gray-700{&:hover{@media (hover:hover){color:var(--color-gray-700)}}}.hover\:text-gray-900{&:hover{@media (hover:hover){color:var(--color-gray-900)}}}.hover\:text-primary-600{&:hover{@media (hover:hover){color:#0e8f94}}}.hover\:text-primary-800{&:hover{@media (hover:hover){color:#0a5558}}}.hover\:text-red-800{&:hover{@media (hover:hover){color:var(--color-red-800)}}}.hover\:text-white{&:hover{@media (hover:hover){color:var(--color-white)}}}.hover\:underline{&:hover{@media (hover:hover){text-decoration-line:underline}}}.hover\:opacity-50{&:hover{@media (hover:hover){opacity:50%}}}.hover\:shadow-lg{&:hover{@media (hover:hover){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\:shadow-md{&:hover{@media (hover:hover){--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.focus\:z-10{&:focus{z-index:10}}.focus\:border-blue-500{&:focus{border-color:var(--color-blue-500)}}.focus\:border-green-500{&:focus{border-color:var(--color-green-500)}}.focus\:border-primary-500{&:focus{border-color:#17b8be}}.focus\:border-primary-600{&:focus{border-color:#0e8f94}}.focus\:border-red-500{&:focus{border-color:var(--color-red-500)}}.focus\:border-red-600{&:focus{border-color:var(--color-red-600)}}.focus\:bg-gray-100{&:focus{background-color:var(--color-gray-100)}}.focus\:text-gray-700{&:focus{color:var(--color-gray-700)}}.focus\:text-white{&:focus{color:var(--color-white)}}.focus\:ring-2{&:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-4{&:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-accent-300{&:focus{--tw-ring-color:#ffb1ba}}.focus\:ring-blue-300{&:focus{--tw-ring-color:var(--color-blue-300)}}.focus\:ring-blue-500{&:focus{--tw-ring-color:var(--color-blue-500)}}.focus\:ring-danger-300{&:focus{--tw-ring-color:#fca5a5}}.focus\:ring-gray-100{&:focus{--tw-ring-color:var(--color-gray-100)}}.focus\:ring-gray-200{&:focus{--tw-ring-color:var(--color-gray-200)}}.focus\:ring-gray-300{&:focus{--tw-ring-color:var(--color-gray-300)}}.focus\:ring-green-500{&:focus{--tw-ring-color:var(--color-green-500)}}.focus\:ring-info-300{&:focus{--tw-ring-color:#7dd3fc}}.focus\:ring-primary-300{&:focus{--tw-ring-color:#7de8ec}}.focus\:ring-primary-500{&:focus{--tw-ring-color:#17b8be}}.focus\:ring-primary-600{&:focus{--tw-ring-color:#0e8f94}}.focus\:ring-primary-700{&:focus{--tw-ring-color:#0b6d71}}.focus\:ring-red-300{&:focus{--tw-ring-color:var(--color-red-300)}}.focus\:ring-red-500{&:focus{--tw-ring-color:var(--color-red-500)}}.focus\:ring-red-600{&:focus{--tw-ring-color:var(--color-red-600)}}.focus\:ring-secondary-300{&:focus{--tw-ring-color:#9db3c7}}.focus\:ring-secondary-500{&:focus{--tw-ring-color:#1e3d59}}.focus\:ring-success-300{&:focus{--tw-ring-color:#86efac}}.focus\:ring-warning-300{&:focus{--tw-ring-color:#fcd34d}}.focus\:ring-yellow-300{&:focus{--tw-ring-color:var(--color-yellow-300)}}.focus\:ring-offset-2{&:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus\:outline-none{&:focus{--tw-outline-style:none;outline-style:none}}.focus\:invalid\:border-red-500{&:focus{&:invalid{border-color:var(--color-red-500)}}}.focus\:invalid\:ring-red-500{&:focus{&:invalid{--tw-ring-color:var(--color-red-500)}}}.focus-visible\:ring-2{&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus-visible\:ring-blue-600{&:focus-visible{--tw-ring-color:var(--color-blue-600)}}.focus-visible\:ring-primary-600{&:focus-visible{--tw-ring-color:#0e8f94}}.focus-visible\:outline-none{&:focus-visible{--tw-outline-style:none;outline-style:none}}.motion-safe\:animate-pulse{@media (prefers-reduced-motion:no-preference){animation:var(--animate-pulse)}}.motion-safe\:animate-spin{@media (prefers-reduced-motion:no-preference){animation:var(--animate-spin)}}.xs\:block{@media (width >= 475px){display:block}}.sm\:flex{@media (width >= 40rem){display:flex}}.sm\:max-w-md{@media (width >= 40rem){max-width:var(--container-md)}}.sm\:flex-row{@media (width >= 40rem){flex-direction:row}}.sm\:space-y-0{@media (width >= 40rem){:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*0*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*0*var(--tw-space-y-reverse))}}}.sm\:space-x-4{@media (width >= 40rem){:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}}}.sm\:rounded-lg{@media (width >= 40rem){border-radius:var(--radius-lg)}}.sm\:p-8{@media (width >= 40rem){padding:calc(var(--spacing)*8)}}.sm\:text-lg{@media (width >= 40rem){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}.md\:top-1\/2{@media (width >= 48rem){top:50%}}.md\:ms-2{@media (width >= 48rem){margin-inline-start:calc(var(--spacing)*2)}}.md\:mt-0{@media (width >= 48rem){margin-top:calc(var(--spacing)*0)}}.md\:mr-0{@media (width >= 48rem){margin-right:calc(var(--spacing)*0)}}.md\:min-w-60{@media (width >= 48rem){min-width:calc(var(--spacing)*60)}}.md\:-translate-y-1\/2{@media (width >= 48rem){--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}}.md\:grid-cols-2{@media (width >= 48rem){grid-template-columns:repeat(2,minmax(0,1fr))}}.md\:grid-cols-4{@media (width >= 48rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.md\:flex-row{@media (width >= 48rem){flex-direction:row}}.md\:space-y-6{@media (width >= 48rem){:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}}}.md\:space-x-2{@media (width >= 48rem){:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}}.md\:p-6{@media (width >= 48rem){padding:calc(var(--spacing)*6)}}.md\:text-4xl{@media (width >= 48rem){font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}.md\:text-xl{@media (width >= 48rem){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}.lg\:sticky{@media (width >= 64rem){position:sticky}}.lg\:order-2{@media (width >= 64rem){order:2}}.lg\:col-span-1{@media (width >= 64rem){grid-column:span 1/span 1}}.lg\:col-span-2{@media (width >= 64rem){grid-column:span 2/span 2}}.lg\:ml-64{@media (width >= 64rem){margin-left:calc(var(--spacing)*64)}}.lg\:hidden{@media (width >= 64rem){display:none}}.lg\:translate-x-0{@media (width >= 64rem){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.lg\:grid-cols-3{@media (width >= 64rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.lg\:py-0{@media (width >= 64rem){padding-block:calc(var(--spacing)*0)}}.xl\:p-0{@media (width >= 80rem){padding:calc(var(--spacing)*0)}}.\32 xl\:grid-cols-4{@media (width >= 96rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.rtl\:rotate-180{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}}.rtl\:space-x-reverse{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){:where(&>:not(:last-child)){--tw-space-x-reverse:1}}}.rtl\:text-right{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}}.dark\:mr-2{&:where(.dark,.dark *){margin-right:calc(var(--spacing)*2)}}.dark\:divide-gray-600{&:where(.dark,.dark *){:where(&>:not(:last-child)){border-color:var(--color-gray-600)}}}.dark\:divide-gray-700{&:where(.dark,.dark *){:where(&>:not(:last-child)){border-color:var(--color-gray-700)}}}.dark\:border{&:where(.dark,.dark *){border-style:var(--tw-border-style);border-width:1px}}.dark\:border-blue-700{&:where(.dark,.dark *){border-color:var(--color-blue-700)}}.dark\:border-gray-100{&:where(.dark,.dark *){border-color:var(--color-gray-100)}}.dark\:border-gray-500{&:where(.dark,.dark *){border-color:var(--color-gray-500)}}.dark\:border-gray-600{&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.dark\:border-gray-700{&:where(.dark,.dark *){border-color:var(--color-gray-700)}}.dark\:border-gray-800{&:where(.dark,.dark *){border-color:var(--color-gray-800)}}.dark\:border-green-500{&:where(.dark,.dark *){border-color:var(--color-green-500)}}.dark\:border-green-700{&:where(.dark,.dark *){border-color:var(--color-green-700)}}.dark\:border-primary-500{&:where(.dark,.dark *){border-color:#17b8be}}.dark\:border-primary-600{&:where(.dark,.dark *){border-color:#0e8f94}}.dark\:border-red-400{&:where(.dark,.dark *){border-color:var(--color-red-400)}}.dark\:border-red-500{&:where(.dark,.dark *){border-color:var(--color-red-500)}}.dark\:border-red-700{&:where(.dark,.dark *){border-color:var(--color-red-700)}}.dark\:border-transparent{&:where(.dark,.dark *){border-color:transparent}}.dark\:border-yellow-700{&:where(.dark,.dark *){border-color:var(--color-yellow-700)}}.dark\:border-r-gray-800{&:where(.dark,.dark *){border-right-color:var(--color-gray-800)}}.dark\:border-l-gray-600{&:where(.dark,.dark *){border-left-color:var(--color-gray-600)}}.dark\:bg-accent-600{&:where(.dark,.dark *){background-color:#ff647a}}.dark\:bg-accent-700{&:where(.dark,.dark *){background-color:#e73d55}}.dark\:bg-blue-600{&:where(.dark,.dark *){background-color:var(--color-blue-600)}}.dark\:bg-blue-900{&:where(.dark,.dark *){background-color:var(--color-blue-900)}}.dark\:bg-danger-600{&:where(.dark,.dark *){background-color:#dc2626}}.dark\:bg-danger-700{&:where(.dark,.dark *){background-color:#b91c1c}}.dark\:bg-emerald-400{&:where(.dark,.dark *){background-color:var(--color-emerald-400)}}.dark\:bg-gray-600{&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark\:bg-gray-700{&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.dark\:bg-gray-700\/50{&:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-gray-700) 50%,transparent)}}.dark\:bg-gray-800{&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.dark\:bg-gray-900{&:where(.dark,.dark *){background-color:var(--color-gray-900)}}.dark\:bg-gray-900\/80{&:where(.dark,.dark *){background-color:color-mix(in oklab,var(--color-gray-900) 80%,transparent)}}.dark\:bg-green-900{&:where(.dark,.dark *){background-color:var(--color-green-900)}}.dark\:bg-info-600{&:where(.dark,.dark *){background-color:#0284c7}}.dark\:bg-info-700{&:where(.dark,.dark *){background-color:#0369a1}}.dark\:bg-primary-200{&:where(.dark,.dark *){background-color:#baf3f5}}.dark\:bg-primary-600{&:where(.dark,.dark *){background-color:#0e8f94}}.dark\:bg-primary-700{&:where(.dark,.dark *){background-color:#0b6d71}}.dark\:bg-primary-900{&:where(.dark,.dark *){background-color:#084547}}.dark\:bg-primary-900\/30{&:where(.dark,.dark *){background-color:color-mix(in oklab,#084547 30%,transparent)}}.dark\:bg-red-400{&:where(.dark,.dark *){background-color:var(--color-red-400)}}.dark\:bg-red-600{&:where(.dark,.dark *){background-color:var(--color-red-600)}}.dark\:bg-red-900{&:where(.dark,.dark *){background-color:var(--color-red-900)}}.dark\:bg-secondary-600{&:where(.dark,.dark *){background-color:#1a3549}}.dark\:bg-secondary-700{&:where(.dark,.dark *){background-color:#152c3d}}.dark\:bg-stone-300{&:where(.dark,.dark *){background-color:var(--color-stone-300)}}.dark\:bg-success-600{&:where(.dark,.dark *){background-color:#16a34a}}.dark\:bg-success-700{&:where(.dark,.dark *){background-color:#15803d}}.dark\:bg-violet-400{&:where(.dark,.dark *){background-color:var(--color-violet-400)}}.dark\:bg-warning-600{&:where(.dark,.dark *){background-color:#d97706}}.dark\:bg-warning-700{&:where(.dark,.dark *){background-color:#b45309}}.dark\:bg-yellow-300{&:where(.dark,.dark *){background-color:var(--color-yellow-300)}}.dark\:bg-yellow-600{&:where(.dark,.dark *){background-color:var(--color-yellow-600)}}.dark\:stroke-green-400{&:where(.dark,.dark *){stroke:var(--color-green-400)}}.dark\:stroke-red-400{&:where(.dark,.dark *){stroke:var(--color-red-400)}}.dark\:stroke-white{&:where(.dark,.dark *){stroke:var(--color-white)}}.dark\:text-accent-100{&:where(.dark,.dark *){color:#ffe4e7}}.dark\:text-blue-300{&:where(.dark,.dark *){color:var(--color-blue-300)}}.dark\:text-danger-100{&:where(.dark,.dark *){color:#fee2e2}}.dark\:text-gray-100{&:where(.dark,.dark *){color:var(--color-gray-100)}}.dark\:text-gray-200{&:where(.dark,.dark *){color:var(--color-gray-200)}}.dark\:text-gray-300{&:where(.dark,.dark *){color:var(--color-gray-300)}}.dark\:text-gray-400{&:where(.dark,.dark *){color:var(--color-gray-400)}}.dark\:text-gray-500{&:where(.dark,.dark *){color:var(--color-gray-500)}}.dark\:text-gray-900{&:where(.dark,.dark *){color:var(--color-gray-900)}}.dark\:text-green-300{&:where(.dark,.dark *){color:var(--color-green-300)}}.dark\:text-green-400{&:where(.dark,.dark *){color:var(--color-green-400)}}.dark\:text-green-500{&:where(.dark,.dark *){color:var(--color-green-500)}}.dark\:text-info-100{&:where(.dark,.dark *){color:#e0f2fe}}.dark\:text-primary-100{&:where(.dark,.dark *){color:#e0fafa}}.dark\:text-primary-200{&:where(.dark,.dark *){color:#baf3f5}}.dark\:text-primary-300{&:where(.dark,.dark *){color:#7de8ec}}.dark\:text-primary-400{&:where(.dark,.dark *){color:#40d9de}}.dark\:text-primary-500{&:where(.dark,.dark *){color:#17b8be}}.dark\:text-primary-800{&:where(.dark,.dark *){color:#0a5558}}.dark\:text-red-300{&:where(.dark,.dark *){color:var(--color-red-300)}}.dark\:text-red-400{&:where(.dark,.dark *){color:var(--color-red-400)}}.dark\:text-red-500{&:where(.dark,.dark *){color:var(--color-red-500)}}.dark\:text-secondary-100{&:where(.dark,.dark *){color:#e6ecf1}}.dark\:text-secondary-400{&:where(.dark,.dark *){color:#678cab}}.dark\:text-success-100{&:where(.dark,.dark *){color:#dcfce7}}.dark\:text-warning-100{&:where(.dark,.dark *){color:#fef3c7}}.dark\:text-white{&:where(.dark,.dark *){color:var(--color-white)}}.dark\:placeholder-gray-400{&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.dark\:placeholder-green-500{&:where(.dark,.dark *){&::placeholder{color:var(--color-green-500)}}}.dark\:placeholder-red-500{&:where(.dark,.dark *){&::placeholder{color:var(--color-red-500)}}}.dark\:shadow-none{&:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.dark\:shadow-gray-900\/20{&:where(.dark,.dark *){--tw-shadow-color:color-mix(in oklab,var(--color-gray-900) 20%,transparent)}}.dark\:ring-offset-gray-800{&:where(.dark,.dark *){--tw-ring-offset-color:var(--color-gray-800)}}.dark\:format-invert{&:where(.dark,.dark *){--tw-format-body:var(--tw-format-invert-body);--tw-format-headings:var(--tw-format-invert-headings);--tw-format-lead:var(--tw-format-invert-lead);--tw-format-links:var(--tw-format-invert-links);--tw-format-bold:var(--tw-format-invert-bold);--tw-format-counters:var(--tw-format-invert-counters);--tw-format-bullets:var(--tw-format-invert-bullets);--tw-format-hr:var(--tw-format-invert-hr);--tw-format-quotes:var(--tw-format-invert-quotes);--tw-format-quote-borders:var(--tw-format-invert-quote-borders);--tw-format-captions:var(--tw-format-invert-captions);--tw-format-code:var(--tw-format-invert-code);--tw-format-code-bg:var(--tw-format-invert-code-bg);--tw-format-pre-code:var(--tw-format-invert-pre-code);--tw-format-pre-bg:var(--tw-format-invert-pre-bg);--tw-format-th-borders:var(--tw-format-invert-th-borders);--tw-format-td-borders:var(--tw-format-invert-td-borders);--tw-format-th-bg:var(--tw-format-invert-th-bg)}}.dark\:group-hover\:text-gray-400{&:where(.dark,.dark *){&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-400)}}}}.dark\:group-hover\:text-white{&:where(.dark,.dark *){&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-white)}}}}.dark\:checked\:border-current{&:where(.dark,.dark *){&:checked{border-color:currentColor}}}.dark\:checked\:bg-current{&:where(.dark,.dark *){&:checked{background-color:currentColor}}}.dark\:checked\:text-emerald-400{&:where(.dark,.dark *){&:checked{color:var(--color-emerald-400)}}}.dark\:hover\:border-gray-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){border-color:var(--color-gray-500)}}}}.dark\:hover\:border-gray-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){border-color:var(--color-gray-600)}}}}.dark\:hover\:bg-accent-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#ff647a}}}}.dark\:hover\:bg-accent-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#e73d55}}}}.dark\:hover\:bg-blue-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}}.dark\:hover\:bg-blue-800{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-blue-800)}}}}.dark\:hover\:bg-danger-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#dc2626}}}}.dark\:hover\:bg-danger-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#b91c1c}}}}.dark\:hover\:bg-gray-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-600)}}}}.dark\:hover\:bg-gray-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.dark\:hover\:bg-info-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0284c7}}}}.dark\:hover\:bg-info-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0369a1}}}}.dark\:hover\:bg-primary-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#17b8be}}}}.dark\:hover\:bg-primary-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0e8f94}}}}.dark\:hover\:bg-primary-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0b6d71}}}}.dark\:hover\:bg-red-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-red-500)}}}}.dark\:hover\:bg-red-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-red-700)}}}}.dark\:hover\:bg-red-900\/50{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:color-mix(in oklab,var(--color-red-900) 50%,transparent)}}}}.dark\:hover\:bg-secondary-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#1a3549}}}}.dark\:hover\:bg-secondary-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#152c3d}}}}.dark\:hover\:bg-success-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#16a34a}}}}.dark\:hover\:bg-success-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#15803d}}}}.dark\:hover\:bg-violet-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-violet-500)}}}}.dark\:hover\:bg-warning-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#d97706}}}}.dark\:hover\:bg-warning-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#b45309}}}}.dark\:hover\:bg-yellow-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-yellow-700)}}}}.dark\:hover\:text-blue-400{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-blue-400)}}}}.dark\:hover\:text-gray-300{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-gray-300)}}}}.dark\:hover\:text-primary-400{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:#40d9de}}}}.dark\:hover\:text-primary-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:#17b8be}}}}.dark\:hover\:text-white{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-white)}}}}.dark\:focus\:border-blue-500{&:where(.dark,.dark *){&:focus{border-color:var(--color-blue-500)}}}.dark\:focus\:border-emerald-400{&:where(.dark,.dark *){&:focus{border-color:var(--color-emerald-400)}}}.dark\:focus\:border-primary-500{&:where(.dark,.dark *){&:focus{border-color:#17b8be}}}.focus\:dark\:border-emerald-400{&:focus{&:where(.dark,.dark *){border-color:var(--color-emerald-400)}}}.dark\:focus\:bg-gray-700{&:where(.dark,.dark *){&:focus{background-color:var(--color-gray-700)}}}.dark\:focus\:bg-gray-800{&:where(.dark,.dark *){&:focus{background-color:var(--color-gray-800)}}}.focus\:dark\:bg-gray-700{&:focus{&:where(.dark,.dark *){background-color:var(--color-gray-700)}}}.dark\:focus\:text-white{&:where(.dark,.dark *){&:focus{color:var(--color-white)}}}.dark\:focus\:ring-accent-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#ff647a}}}.dark\:focus\:ring-accent-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#d12d44}}}.dark\:focus\:ring-blue-500{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-500)}}}.dark\:focus\:ring-blue-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-600)}}}.dark\:focus\:ring-blue-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-800)}}}.dark\:focus\:ring-danger-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#dc2626}}}.dark\:focus\:ring-danger-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#991b1b}}}.dark\:focus\:ring-emerald-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-emerald-400)}}}.dark\:focus\:ring-gray-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-gray-600)}}}.dark\:focus\:ring-gray-700{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-gray-700)}}}.dark\:focus\:ring-info-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0284c7}}}.dark\:focus\:ring-info-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#075985}}}.dark\:focus\:ring-primary-500{&:where(.dark,.dark *){&:focus{--tw-ring-color:#17b8be}}}.dark\:focus\:ring-primary-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0e8f94}}}.dark\:focus\:ring-primary-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0a5558}}}.dark\:focus\:ring-red-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-400)}}}.dark\:focus\:ring-red-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-600)}}}.dark\:focus\:ring-red-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-800)}}}.dark\:focus\:ring-secondary-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#1a3549}}}.dark\:focus\:ring-secondary-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#102231}}}.dark\:focus\:ring-success-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#16a34a}}}.dark\:focus\:ring-success-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#166534}}}.dark\:focus\:ring-violet-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-violet-400)}}}.dark\:focus\:ring-warning-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#d97706}}}.dark\:focus\:ring-warning-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#92400e}}}.dark\:focus\:ring-yellow-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-yellow-800)}}}.dark\:focus\:ring-offset-current{&:where(.dark,.dark *){&:focus{--tw-ring-offset-color:currentColor}}}.dark\:focus\:ring-offset-gray-900{&:where(.dark,.dark *){&:focus{--tw-ring-offset-color:var(--color-gray-900)}}}.dark\:focus-visible\:ring-2{&:where(.dark,.dark *){&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.dark\:focus-visible\:ring-blue-300{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color:var(--color-blue-300)}}}.dark\:focus-visible\:ring-primary-300{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color:#7de8ec}}}.lg\:dyna\:static{@media (width >= 64rem){:where(.dyna,.dyna *) &{position:static}}}.\[\&\:\:file-selector-button\]\:mr-3{&::file-selector-button{margin-right:calc(var(--spacing)*3)}}.\[\&\:\:file-selector-button\]\:cursor-pointer{&::file-selector-button{cursor:pointer}}.\[\&\:\:file-selector-button\]\:rounded-l-md{&::file-selector-button{border-bottom-left-radius:var(--radius-md);border-top-left-radius:var(--radius-md)}}.\[\&\:\:file-selector-button\]\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0}}.\[\&\:\:file-selector-button\]\:bg-gray-50{&::file-selector-button{background-color:var(--color-gray-50)}}.\[\&\:\:file-selector-button\]\:px-4{&::file-selector-button{padding-inline:calc(var(--spacing)*4)}}.\[\&\:\:file-selector-button\]\:py-2{&::file-selector-button{padding-block:calc(var(--spacing)*2)}}.\[\&\:\:file-selector-button\]\:text-sm{&::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.\[\&\:\:file-selector-button\]\:font-medium{&::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.\[\&\:\:file-selector-button\]\:text-gray-700{&::file-selector-button{color:var(--color-gray-700)}}.\[\&\:\:file-selector-button\]\:hover\:bg-gray-100{&::file-selector-button{&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}}}.dark\:\[\&\:\:file-selector-button\]\:bg-gray-600{&:where(.dark,.dark *){&::file-selector-button{background-color:var(--color-gray-600)}}}.dark\:\[\&\:\:file-selector-button\]\:text-gray-200{&:where(.dark,.dark *){&::file-selector-button{color:var(--color-gray-200)}}}.dark\:\[\&\:\:file-selector-button\]\:hover\:bg-gray-500{&:where(.dark,.dark *){&::file-selector-button{&:hover{@media (hover:hover){background-color:var(--color-gray-500)}}}}}}@layer base{[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{appearance:none;background-color:#fff;border-color:oklch(.551 .027 264.364);border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem;--tw-shadow:0 0 #0000;&:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(0.546 0.245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:oklch(.546 .245 262.881);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}input::placeholder,textarea::placeholder{color:oklch(.551 .027 264.364);opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='oklch(0.551 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;print-color-adjust:unset}[type=checkbox],[type=radio]{appearance:none;background-color:#fff;background-origin:border-box;border-color:oklch(.551 .027 264.364);border-width:1px;color:oklch(.546 .245 262.881);display:inline-block;flex-shrink:0;height:1rem;padding:0;print-color-adjust:exact;user-select:none;vertical-align:middle;width:1rem;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(0.546 0.245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E");@media (forced-colors:active){appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");@media (forced-colors:active){appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent;@media (forced-colors:active){appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */@layer properties;@layer theme, base, components, utilities;.pu-color-input::-webkit-color-swatch-wrapper{padding:calc(var(--spacing)*0)}.pu-color-input::-webkit-color-swatch{border-radius:var(--radius-lg);--tw-border-style:none;border-style:none}.pu-color-input::-moz-color-swatch{border-radius:var(--radius-lg);--tw-border-style:none;border-style:none}.EasyMDEContainer .CodeMirror{background-color:var(--color-white);border-color:var(--color-gray-300);color:var(--color-gray-900);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-100)}}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-selected{background-color:var(--color-gray-200);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background-color:#e0fafa;&:where(.dark,.dark *){background-color:#084547}}.CodeMirror-gutters{background-color:var(--color-gray-50);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.CodeMirror-linenumber{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.CodeMirror-cursor{border-color:var(--color-gray-900);&:where(.dark,.dark *){border-color:var(--color-gray-100)}}.editor-toolbar{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.editor-toolbar.fullscreen{background-color:var(--color-white);&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.editor-toolbar button{color:var(--color-gray-700);&:hover{@media (hover:hover){border-color:var(--color-gray-400)}}&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}&:where(.dark,.dark *){color:var(--color-gray-300)}&:where(.dark,.dark *){&:hover{@media (hover:hover){border-color:var(--color-gray-500)}}}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.editor-toolbar button.active,.editor-toolbar button:hover{background-color:var(--color-gray-100);border-color:var(--color-gray-400);&:where(.dark,.dark *){border-color:var(--color-gray-500)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.editor-toolbar i.separator{border-left-color:var(--color-gray-300);border-right-color:var(--color-white);&:where(.dark,.dark *){border-right-color:var(--color-gray-800)}&:where(.dark,.dark *){border-left-color:var(--color-gray-600)}}.editor-statusbar{color:var(--color-gray-600);&:where(.dark,.dark *){color:var(--color-gray-400)}}.editor-preview{background-color:var(--color-gray-50);color:var(--color-gray-900);&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-100)}}.editor-preview pre{background-color:var(--color-gray-200);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.editor-preview table td,.editor-preview table th{border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.editor-preview-side{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.dark .cm-s-easymde .cm-header-1,.dark .cm-s-easymde .cm-header-2,.dark .cm-s-easymde .cm-header-3,.dark .cm-s-easymde .cm-header-4,.dark .cm-s-easymde .cm-header-5,.dark .cm-s-easymde .cm-header-6{color:var(--color-blue-300)}.dark .cm-s-easymde .cm-quote{color:var(--color-green-400)}.dark .cm-s-easymde .cm-comment{background-color:var(--color-gray-700)}.dark .cm-s-easymde .cm-link{color:var(--color-blue-400)}.dark .cm-s-easymde .cm-url{color:var(--color-blue-300)}.dark .cm-s-easymde .cm-tag{color:var(--color-green-400)}.dark .cm-s-easymde .cm-attribute{color:var(--color-purple-400)}.dark .cm-s-easymde .cm-string{color:var(--color-orange-400)}.editor-toolbar .easymde-dropdown{background-color:var(--color-white);border-color:var(--color-gray-300);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.easymde-dropdown-content{background-color:var(--color-white);border-color:var(--color-gray-200);border-style:var(--tw-border-style);border-width:1px;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){--tw-shadow-color:color-mix(in srgb,oklch(21% 0.034 264.665) 20%,transparent);@supports (color:color-mix(in lab,red,red)){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-gray-900) 20%,transparent) var(--tw-shadow-alpha),transparent)}}}.easymde-dropdown-content button{color:var(--color-gray-700);&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}&:where(.dark,.dark *){color:var(--color-gray-300)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.dark .CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 20%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.dark .EasyMDEContainer .CodeMirror-placeholder{color:var(--color-gray-500)}.dark .CodeMirror-activeline-background{background-color:color-mix(in srgb,oklch(37.3% .034 259.733) 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-700) 50%,transparent)}}.dark div.CodeMirror span.CodeMirror-matchingbracket{color:var(--color-green-400)}.dark div.CodeMirror span.CodeMirror-nonmatchingbracket{color:var(--color-red-400)}.dark .cm-searching{background-color:color-mix(in srgb,oklch(79.5% .184 86.047) 30%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}@keyframes ss-valueIn{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes ss-valueOut{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(0)}}.ss-hide{display:none!important}.ss-main{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;cursor:pointer;display:flex;flex-direction:row;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));min-height:calc(var(--spacing)*8);overflow:hidden;padding:calc(var(--spacing)*2);position:relative;width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;--tw-outline-style:none;outline-style:none;-webkit-user-select:none;user-select:none;&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.ss-main.ss-disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-900)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-main.ss-disabled .ss-values .ss-value .ss-value-delete{cursor:not-allowed}.ss-main.ss-open-above{border-top-left-radius:0;border-top-right-radius:0}.ss-main.ss-open-below{border-bottom-left-radius:0;border-bottom-right-radius:0}.ss-main .ss-values{display:inline-flex;flex:1;flex-wrap:wrap;gap:calc(var(--spacing)*1)}.ss-main .ss-values .ss-placeholder{align-items:center;display:flex;margin-block:auto;overflow:hidden;padding-block:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*0);width:100%;--tw-leading:1;color:var(--color-gray-400);line-height:1;text-overflow:ellipsis;white-space:nowrap;&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-main .ss-values .ss-max{align-items:center;background-color:#17b8be;border-radius:.25rem;display:flex;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);width:fit-content;--tw-leading:1;color:var(--color-white);line-height:1;-webkit-user-select:none;user-select:none}.ss-main .ss-values .ss-single{display:flex;margin-block:auto}.ss-main .ss-values .ss-value{align-items:center;animation:ss-valueIn .2s ease-out forwards;background-color:#17b8be;border-radius:.25rem;color:var(--color-white);display:flex;-webkit-user-select:none;user-select:none;width:fit-content}.ss-main .ss-values .ss-value.ss-value-out{animation:ss-valueOut .2s ease-out forwards}.ss-main .ss-values .ss-value .ss-value-text{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);--tw-leading:1;line-height:1}.ss-main .ss-values .ss-value .ss-value-delete{align-items:center;border-left-width:1px;cursor:pointer;display:flex;height:calc(var(--spacing)*2);width:calc(var(--spacing)*2);--tw-border-style:solid;border-color:var(--color-white);border-style:solid;box-sizing:content-box;padding-block:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2)}.ss-main .ss-values .ss-value .ss-value-delete svg{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.ss-main .ss-values .ss-value .ss-value-delete svg path{fill:none;stroke:var(--color-white);stroke-width:18;stroke-linecap:round;stroke-linejoin:round}.ss-main .ss-deselect{align-items:center;display:flex;flex:none;height:auto;justify-content:center;padding-inline:calc(var(--spacing)*2);width:fit-content}.ss-main .ss-deselect svg{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.ss-main .ss-deselect svg path{fill:none;stroke:var(--color-gray-700);stroke-width:20;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-main .ss-arrow{align-items:center;display:flex;flex:none;height:calc(var(--spacing)*3);justify-content:flex-end;margin-block:auto;margin-inline:calc(var(--spacing)*2);width:calc(var(--spacing)*3)}.ss-main .ss-arrow path{fill:none;stroke:var(--color-gray-700);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content{background-color:var(--color-white);border-color:var(--color-gray-300);border-style:var(--tw-border-style);border-width:1px;display:flex;flex-direction:column;height:auto;max-height:calc(var(--spacing)*72);opacity:0;overflow:hidden;position:absolute;width:auto;z-index:10000;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transform:scaleY(0);transform-origin:top;transition-duration:.2s;&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.ss-content.ss-relative{height:100%;position:relative}.ss-content.ss-fixed{position:fixed}.ss-content.ss-open-above{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md);flex-direction:column-reverse;opacity:100%;transform:scaleY(1);transform-origin:bottom}.ss-content.ss-open-below{border-bottom-left-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md);opacity:100%;transform:scaleY(1);transform-origin:top}.ss-content .ss-search{display:flex;flex:none;flex-direction:row;padding:calc(var(--spacing)*2)}.ss-content .ss-search input{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;display:inline-flex;flex:auto;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));margin:calc(var(--spacing)*0);min-width:calc(var(--spacing)*0);padding:calc(var(--spacing)*2);text-align:left;width:100%;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;box-sizing:border-box;font-size:inherit;line-height:inherit;outline-style:none;&::placeholder{color:var(--color-gray-400)}&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.ss-content .ss-search .ss-addable{align-items:center;border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;cursor:pointer;display:inline-flex;flex:none;height:auto;justify-content:center;margin-left:calc(var(--spacing)*2);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.ss-content .ss-search .ss-addable svg{align-items:center;display:flex;flex:none;height:calc(var(--spacing)*3);justify-content:flex-end;margin-block:auto;margin-inline:calc(var(--spacing)*2);width:calc(var(--spacing)*3)}.ss-content .ss-search .ss-addable svg path{fill:none;stroke:var(--color-gray-700);stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content .ss-list{flex:auto;height:auto;overflow-x:hidden;overflow-y:auto}.ss-content .ss-list .ss-error{color:var(--color-red-500);padding:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-red-400)}}.ss-content .ss-list .ss-searching{color:var(--color-gray-700);padding:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-white)}}.ss-content .ss-list .ss-optgroup.ss-close .ss-option{display:none!important}.ss-content .ss-list .ss-optgroup .ss-optgroup-label{align-items:center;background-color:var(--color-gray-50);display:flex;flex-direction:row;justify-content:space-between;padding:calc(var(--spacing)*2);&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-label-text{flex:auto;--tw-font-weight:var(--font-weight-bold);color:var(--color-gray-700);font-weight:var(--font-weight-bold);&:where(.dark,.dark *){color:var(--color-white)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label:has(.ss-arrow){cursor:pointer}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions{align-items:center;display:flex;flex:none;flex-direction:row;gap:calc(var(--spacing)*1);justify-content:center}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall{cursor:pointer;display:flex;flex:none;flex-direction:row;&:hover{@media (hover:hover){opacity:50%}}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall.ss-selected svg path{stroke:var(--color-red-500);&:where(.dark,.dark *){stroke:var(--color-red-400)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall span{align-items:center;display:flex;flex:none;font-size:60%;justify-content:center;padding-right:calc(var(--spacing)*1);text-align:center}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg{flex:none;height:calc(var(--spacing)*3);width:calc(var(--spacing)*3)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg path{fill:none;stroke:var(--color-green-500);stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-green-400)}}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:first-child{stroke-width:5}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-selectall svg:last-child{stroke-width:11}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable{cursor:pointer;display:flex;flex:none;flex-direction:row}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow{flex:auto;height:calc(var(--spacing)*2.5);width:calc(var(--spacing)*2.5)}.ss-content .ss-list .ss-optgroup .ss-optgroup-label .ss-optgroup-actions .ss-closable .ss-arrow path{fill:none;stroke:var(--color-gray-700);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;stroke-width:18;stroke-linecap:round;stroke-linejoin:round;&:where(.dark,.dark *){stroke:var(--color-white)}}.ss-content .ss-list .ss-optgroup .ss-option{padding:calc(var(--spacing)*1);padding-left:calc(var(--spacing)*6)}.ss-content .ss-list .ss-option{color:var(--color-gray-700);cursor:pointer;display:block;min-height:0;padding:calc(var(--spacing)*2);-webkit-user-select:none;user-select:none;white-space:normal;&:hover{@media (hover:hover){background-color:#17b8be}}&:hover{@media (hover:hover){color:var(--color-white)}}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#17b8be}}}&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-white)}}}}.ss-content .ss-list .ss-option:empty{display:none;margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0)}.ss-content .ss-list .ss-option.ss-highlighted,.ss-content .ss-list .ss-option:not(.ss-disabled).ss-selected{background-color:#17b8be;color:var(--color-white)}.ss-content .ss-list .ss-option.ss-disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-content .ss-list .ss-option.ss-disabled:hover{background-color:var(--color-gray-100);color:var(--color-gray-500);&:where(.dark,.dark *){background-color:var(--color-gray-800)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.ss-content .ss-list .ss-option .ss-search-highlight{background-color:var(--color-yellow-200);display:inline-block;&:where(.dark,.dark *){background-color:var(--color-yellow-300)}}.ss-main.ss-invalid{background-color:var(--color-red-50);border-color:var(--color-red-500);color:var(--color-red-900);&:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}&:where(.dark,.dark *){border-color:var(--color-red-500)}&:where(.dark,.dark *){color:var(--color-red-500)}}.ss-main.ss-invalid .ss-values .ss-placeholder{color:var(--color-red-700);&:where(.dark,.dark *){color:var(--color-red-500)}}.ss-main.ss-valid{background-color:var(--color-green-50);border-color:var(--color-green-500);color:var(--color-green-900);&:focus{border-color:var(--color-green-500);--tw-ring-color:var(--color-green-500)}&:where(.dark,.dark *){border-color:var(--color-green-500)}&:where(.dark,.dark *){color:var(--color-green-400)}}.ss-main.ss-valid .ss-values .ss-placeholder{color:var(--color-green-700);&:where(.dark,.dark *){color:var(--color-green-500)}}.ss-dropdown-container{inset:40% 0 auto;position:absolute;z-index:9999}.ss-dropdown-container .ss-content{border-radius:0!important;margin:0!important;pointer-events:none!important;position:static!important;transform:none!important;width:100%!important}.ss-dropdown-container.ss-active .ss-content{pointer-events:auto!important}.ss-dropdown-container .ss-list{max-height:250px!important;overflow-y:auto!important}.ss-dropdown-container:not(.ss-active),.ss-dropdown-container:not(:has(.ss-content)){pointer-events:none!important}.ss-dropdown-container:not(.ss-active) *{pointer-events:none!important}:root{--iti-hover-color:#f0fdfd;--iti-border-color:oklch(87.2% 0.01 258.338);--iti-dialcode-color:oklch(55.1% 0.027 264.364);--iti-dropdown-bg:#fff;--iti-arrow-color:oklch(37.3% 0.034 259.733)}@media (prefers-color-scheme:dark){:root{--iti-hover-color:color-mix(in oklab,#084547 30%,transparent);--iti-border-color:oklch(44.6% 0.03 256.802);--iti-dialcode-color:oklch(70.7% 0.022 261.325);--iti-dropdown-bg:oklch(37.3% 0.034 259.733);--iti-arrow-color:#fff}}.dark{--iti-hover-color:color-mix(in oklab,#084547 30%,transparent);--iti-border-color:oklch(44.6% 0.03 256.802);--iti-dialcode-color:oklch(70.7% 0.022 261.325);--iti-dropdown-bg:oklch(37.3% 0.034 259.733);--iti-arrow-color:#fff}.iti{width:100%}.iti input.iti__tel-input,.iti input.iti__tel-input[type=tel],.iti input.iti__tel-input[type=text]{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));--tw-duration:200ms;transition-duration:.2s;--tw-outline-style:none;outline-style:none;padding:.5rem .5rem .5rem 52px;&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.iti .iti__country-container{bottom:calc(var(--spacing)*0);left:calc(var(--spacing)*0);padding:.5rem;position:absolute;top:calc(var(--spacing)*0);width:52px;z-index:10}.iti .iti__selected-country{background-color:transparent;border-style:var(--tw-border-style);border-width:0;color:var(--color-gray-700);&:where(.dark,.dark *){color:var(--color-white)}}.iti .iti__selected-country-primary{color:var(--color-gray-700);padding-inline:calc(var(--spacing)*2);&:where(.dark,.dark *){color:var(--color-white)}}.iti .iti__arrow{border-top-color:oklch(37.3% .034 259.733);margin-left:calc(var(--spacing)*1)}.dark .iti .iti__arrow{border-top-color:#fff}.iti .iti__arrow--up{border-bottom-color:oklch(37.3% .034 259.733);border-top-color:transparent}.dark .iti .iti__arrow--up{border-bottom-color:#fff}.iti .iti__dropdown-content{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.iti .iti__search-input{background-color:var(--color-white);border-color:var(--color-gray-300);border-radius:var(--radius-md);border-style:var(--tw-border-style);border-width:1px;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding:calc(var(--spacing)*2);width:100%;--tw-font-weight:var(--font-weight-medium);color:var(--color-gray-700);font-weight:var(--font-weight-medium);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-outline-style:none;margin:.5rem;outline-style:none;width:calc(100% - 1rem);&:focus{border-color:#17b8be;--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:#17b8be}&:where(.dark,.dark *){border-color:var(--color-gray-600)}&:where(.dark,.dark *){background-color:var(--color-gray-700)}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.iti .iti__search-input+.iti__country-list{border-color:var(--color-gray-300);border-top-style:var(--tw-border-style);border-top-width:1px;&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.iti .iti__country-list{max-height:calc(var(--spacing)*48);overflow-y:auto}.iti .iti__country{color:var(--color-gray-700);padding-block:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*2);&:hover{@media (hover:hover){background-color:#17b8be}}&:hover{@media (hover:hover){color:var(--color-white)}}&:where(.dark,.dark *){color:var(--color-white)}&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#17b8be}}}}.iti .iti__country-list .iti__flag,.iti .iti__country-name{margin-right:calc(var(--spacing)*2);&:where(.dark,.dark *){margin-right:calc(var(--spacing)*2)}}[dir=rtl] .iti .iti__country-list .iti__flag,[dir=rtl] .iti .iti__country-name{margin-left:calc(var(--spacing)*2);margin-right:calc(var(--spacing)*0)}.iti .iti__dial-code{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti .iti__selected-dial-code{color:var(--color-gray-500);margin-left:calc(var(--spacing)*1);&:where(.dark,.dark *){color:var(--color-gray-400)}}[dir=rtl] .iti .iti__selected-dial-code{margin-left:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*1)}.iti .iti__selected-country-primary[aria-activedescendant],.iti .iti__selected-country[aria-activedescendant]{background-color:transparent!important}.iti .iti__selected-country-primary:has(~.iti__dropdown-content:hover),.iti .iti__selected-country:has(+.iti__dropdown-content:hover){background-color:transparent!important}.iti .iti__country-container:hover .iti__flag,.iti .iti__flag,.iti .iti__selected-country-primary[aria-activedescendant] .iti__flag,.iti .iti__selected-country[aria-activedescendant] .iti__flag,.iti--allow-dropdown .iti__country-container:hover,.iti--allow-dropdown .iti__country-container:hover .iti__selected-country,.iti--allow-dropdown .iti__country-container:hover .iti__selected-country-primary{background-color:transparent!important}.iti .iti__flag.iti__globe{background-color:oklch(96.7% .003 264.542)!important;&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark .iti .iti__flag.iti__globe{background-color:oklch(44.6% .03 256.802)!important}.iti .iti__country.iti__highlight{background-color:#17b8be;color:var(--color-white)}.iti--fullscreen-popup.iti--container{background-color:color-mix(in srgb,#000 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.iti--fullscreen-popup .iti__dropdown-content{background-color:var(--color-white);&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.iti--fullscreen-popup .iti__country{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));padding-block:calc(var(--spacing)*3)}.iti .iti__flag.iti__globe{background-blend-mode:multiply;background-color:var(--color-gray-100);&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark .iti .iti__flag.iti__globe{filter:invert(1) brightness(.8)}.iti.iti-invalid input.iti__tel-input,.iti.iti-invalid input.iti__tel-input[type=tel],.iti.iti-invalid input.iti__tel-input[type=text]{background-color:var(--color-red-50);border-color:var(--color-red-500);color:var(--color-red-900);&:focus{border-color:var(--color-red-500);--tw-ring-color:var(--color-red-500)}&:where(.dark,.dark *){border-color:var(--color-red-500)}&:where(.dark,.dark *){color:var(--color-red-500)}}.iti.iti-valid input.iti__tel-input,.iti.iti-valid input.iti__tel-input[type=tel],.iti.iti-valid input.iti__tel-input[type=text]{background-color:var(--color-green-50);border-color:var(--color-green-500);color:var(--color-green-900);&:focus{border-color:var(--color-green-500);--tw-ring-color:var(--color-green-500)}&:where(.dark,.dark *){border-color:var(--color-green-500)}&:where(.dark,.dark *){color:var(--color-green-400)}}.iti.iti-invalid .iti__arrow{border-top-color:oklch(63.7% .237 25.331)}.iti.iti-invalid .iti__arrow--up{border-bottom-color:oklch(63.7% .237 25.331);border-top-color:transparent}.iti.iti-valid .iti__arrow{border-top-color:oklch(72.3% .219 149.579)}.iti.iti-valid .iti__arrow--up{border-bottom-color:oklch(72.3% .219 149.579);border-top-color:transparent}.iti input.iti__tel-input:disabled,.iti input.iti__tel-input[type=tel]:disabled,.iti input.iti__tel-input[type=text]:disabled{background-color:var(--color-gray-100);color:var(--color-gray-500);cursor:not-allowed;&:where(.dark,.dark *){background-color:var(--color-gray-900)}&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti input.iti__tel-input:disabled+.iti__country-container{cursor:not-allowed}.iti input.iti__tel-input:disabled+.iti__country-container .iti__selected-country{color:var(--color-gray-500);&:where(.dark,.dark *){color:var(--color-gray-400)}}.iti input.iti__tel-input:disabled+.iti__country-container .iti__arrow{border-top-color:oklch(70.7% .022 261.325)}.dark .iti input.iti__tel-input:disabled+.iti__country-container .iti__arrow{border-top-color:oklch(44.6% .03 256.802)}.flatpickr-calendar{-webkit-animation:none;animation:none;background:transparent;background:#fff;border:0;border-radius:5px;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr;display:none;font-size:14px;line-height:24px;opacity:0;padding:0;position:absolute;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;visibility:hidden;width:307.875px}.flatpickr-calendar.inline,.flatpickr-calendar.open{max-height:640px;opacity:1;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{display:block;z-index:999}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{border-top:1px solid #e6e6e6;height:40px}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{border:solid transparent;content:"";display:block;height:0;left:22px;pointer-events:none;position:absolute;width:0}.flatpickr-calendar.arrowRight:after,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar.arrowCenter:after,.flatpickr-calendar.arrowCenter:before{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{display:inline-block;position:relative}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{background:transparent;line-height:1;overflow:hidden;position:relative;text-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.flatpickr-months .flatpickr-month,.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{color:rgba(0,0,0,.9);fill:rgba(0,0,0,.9);height:34px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{cursor:pointer;padding:10px;position:absolute;text-decoration:none;top:0;z-index:3}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{height:14px;width:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{-webkit-transition:fill .1s;transition:fill .1s;fill:inherit}.numInputWrapper{height:auto;position:relative}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.numInputWrapper span{border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;height:50%;line-height:50%;opacity:0;padding:0 4px 0 2px;position:absolute;right:0;width:14px}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{content:"";display:block;position:absolute}.numInputWrapper span.arrowUp{border-bottom:0;top:0}.numInputWrapper span.arrowUp:after{border-bottom:4px solid rgba(57,57,57,.6);border-left:4px solid transparent;border-right:4px solid transparent;top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{height:auto;width:inherit}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{color:inherit;display:inline-block;font-size:135%;font-weight:300;height:34px;left:12.5%;line-height:inherit;line-height:1;padding:7.48px 0 0;position:absolute;text-align:center;-webkit-transform:translateZ(0);transform:translateZ(0);width:75%}.flatpickr-current-month span.cur-month{color:inherit;display:inline-block;font-family:inherit;font-weight:700;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{display:inline-block;width:6ch;width:7ch\0}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;display:inline-block;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:0;padding:0 0 0 .5ch;vertical-align:initial}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{background:transparent;color:rgba(0,0,0,.5);font-size:100%;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;-webkit-appearance:menulist;-moz-appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;-webkit-box-sizing:border-box;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{background:transparent;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;text-align:center;width:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{background:transparent;color:rgba(0,0,0,.54);cursor:default;display:block;font-size:90%;line-height:1;margin:0;text-align:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:relative;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;max-width:307.875px;min-width:307.875px;outline:0;padding:0;text-align:left;width:307.875px;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;-webkit-flex-basis:14.2857143%;font-weight:400;width:14.2857143%;-ms-flex-preferred-size:14.2857143%;display:inline-block;flex-basis:14.2857143%;height:39px;line-height:39px;margin:0;max-width:39px;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{background:#e6e6e6;border-color:#e6e6e6;cursor:pointer;outline:0}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{background:#959ea9;border-color:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;border-color:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{background:transparent;border-color:transparent;color:rgba(57,57,57,.3);cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{color:rgba(57,57,57,.1);cursor:not-allowed}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6;padding:0 12px}.flatpickr-weekwrapper .flatpickr-weekday{float:none;line-height:28px;width:100%}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{background:transparent;border:none;color:rgba(57,57,57,.3);cursor:default;display:block;max-width:none;width:100%}.flatpickr-innerContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden}.flatpickr-rContainer{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;padding:0}.flatpickr-time{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0;line-height:40px;max-height:40px;outline:0;overflow:hidden;text-align:center}.flatpickr-time:after{clear:both;content:"";display:table}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;float:left;height:40px;width:40%}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;font-size:14px;height:inherit;line-height:inherit;margin:0;padding:0;position:relative;text-align:center}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{border:0;outline:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{-webkit-align-self:center;color:#393939;float:left;font-weight:700;height:inherit;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:2%;-ms-flex-item-align:center;align-self:center}.flatpickr-time .flatpickr-am-pm{cursor:pointer;font-weight:400;outline:0;text-align:center;width:18%}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}[data-controller=remote-modal]>.flatpickr-calendar{left:auto!important}@layer theme{:host,:root{--color-red-50:oklch(97.1% 0.013 17.38);--color-red-100:oklch(93.6% 0.032 17.717);--color-red-200:oklch(88.5% 0.062 18.334);--color-red-300:oklch(80.8% 0.114 19.571);--color-red-400:oklch(70.4% 0.191 22.216);--color-red-500:oklch(63.7% 0.237 25.331);--color-red-600:oklch(57.7% 0.245 27.325);--color-red-700:oklch(50.5% 0.213 27.518);--color-red-800:oklch(44.4% 0.177 26.899);--color-red-900:oklch(39.6% 0.141 25.723);--color-orange-400:oklch(75% 0.183 55.934);--color-yellow-50:oklch(98.7% 0.026 102.212);--color-yellow-100:oklch(97.3% 0.071 103.193);--color-yellow-200:oklch(94.5% 0.129 101.54);--color-yellow-300:oklch(90.5% 0.182 98.111);--color-yellow-400:oklch(85.2% 0.199 91.936);--color-yellow-500:oklch(79.5% 0.184 86.047);--color-yellow-600:oklch(68.1% 0.162 75.834);--color-yellow-700:oklch(55.4% 0.135 66.442);--color-yellow-800:oklch(47.6% 0.114 61.907);--color-green-50:oklch(98.2% 0.018 155.826);--color-green-100:oklch(96.2% 0.044 156.743);--color-green-200:oklch(92.5% 0.084 155.995);--color-green-300:oklch(87.1% 0.15 154.449);--color-green-400:oklch(79.2% 0.209 151.711);--color-green-500:oklch(72.3% 0.219 149.579);--color-green-700:oklch(52.7% 0.154 150.069);--color-green-800:oklch(44.8% 0.119 151.328);--color-green-900:oklch(39.3% 0.095 152.535);--color-emerald-400:oklch(76.5% 0.177 163.223);--color-blue-50:oklch(97% 0.014 254.604);--color-blue-100:oklch(93.2% 0.032 255.585);--color-blue-200:oklch(88.2% 0.059 254.128);--color-blue-300:oklch(80.9% 0.105 251.813);--color-blue-400:oklch(70.7% 0.165 254.624);--color-blue-500:oklch(62.3% 0.214 259.815);--color-blue-600:oklch(54.6% 0.245 262.881);--color-blue-700:oklch(48.8% 0.243 264.376);--color-blue-800:oklch(42.4% 0.199 265.638);--color-blue-900:oklch(37.9% 0.146 265.522);--color-violet-400:oklch(70.2% 0.183 293.541);--color-violet-500:oklch(60.6% 0.25 292.717);--color-purple-400:oklch(71.4% 0.203 305.504);--color-gray-50:oklch(98.5% 0.002 247.839);--color-gray-100:oklch(96.7% 0.003 264.542);--color-gray-200:oklch(92.8% 0.006 264.531);--color-gray-300:oklch(87.2% 0.01 258.338);--color-gray-400:oklch(70.7% 0.022 261.325);--color-gray-500:oklch(55.1% 0.027 264.364);--color-gray-600:oklch(44.6% 0.03 256.802);--color-gray-700:oklch(37.3% 0.034 259.733);--color-gray-800:oklch(27.8% 0.033 256.848);--color-gray-900:oklch(21% 0.034 264.665);--color-stone-300:oklch(86.9% 0.005 56.366);--color-black:#000;--color-white:#fff;--spacing:0.25rem;--container-sm:24rem;--container-md:28rem;--container-3xl:48rem;--container-4xl:56rem;--text-xs:0.75rem;--text-xs--line-height:1.33333;--text-sm:0.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-xl:1.25rem;--text-xl--line-height:1.4;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--text-3xl:1.875rem;--text-3xl--line-height:1.2;--text-4xl:2.25rem;--text-4xl--line-height:1.11111;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-0.025em;--tracking-wider:0.05em;--leading-tight:1.25;--radius-sm:0.25rem;--radius-md:0.375rem;--radius-lg:0.5rem;--radius-xl:0.75rem;--ease-in:cubic-bezier(0.4,0,1,1);--ease-out:cubic-bezier(0,0,0.2,1);--ease-in-out:cubic-bezier(0.4,0,0.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(0.4,0,0.6,1) infinite;--blur-sm:8px;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-feature-settings:normal}}@layer base{*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:Lato,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;tab-size:4;-webkit-tap-highlight-color:transparent}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{background-color:transparent;border-radius:0;color:inherit;font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance:-apple-pay-button)) or (contain-intrinsic-size:1px){::placeholder{color:currentcolor;@supports (color:color-mix(in lab,red,red)){color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.absolute,.sr-only{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-4{top:calc(var(--spacing)*4)}.top-16{top:calc(var(--spacing)*16)}.top-auto{top:auto}.right-0{right:calc(var(--spacing)*0)}.right-4{right:calc(var(--spacing)*4)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-\[-2px\]{bottom:-2px}.bottom-\[60px\]{bottom:60px}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.col-span-1{grid-column:span 1/span 1}.col-span-full{grid-column:1/-1}.container{width:100%;@media (width >= 475px){max-width:475px}@media (width >= 40rem){max-width:40rem}@media (width >= 48rem){max-width:48rem}@media (width >= 64rem){max-width:64rem}@media (width >= 80rem){max-width:80rem}@media (width >= 96rem){max-width:96rem}}.format{color:var(--tw-format-body);max-width:65ch;--tw-format-body:oklch(55.1% 0.027 264.364);--tw-format-headings:oklch(21% 0.034 264.665);--tw-format-lead:oklch(55.1% 0.027 264.364);--tw-format-links:oklch(44.6% 0.03 256.802);--tw-format-bold:oklch(21% 0.034 264.665);--tw-format-counters:oklch(55.1% 0.027 264.364);--tw-format-bullets:oklch(55.1% 0.027 264.364);--tw-format-hr:oklch(92.8% 0.006 264.531);--tw-format-quotes:oklch(21% 0.034 264.665);--tw-format-quote-borders:oklch(92.8% 0.006 264.531);--tw-format-captions:oklch(55.1% 0.027 264.364);--tw-format-code:oklch(21% 0.034 264.665);--tw-format-code-bg:oklch(96.7% 0.003 264.542);--tw-format-pre-code:oklch(44.6% 0.03 256.802);--tw-format-pre-bg:oklch(96.7% 0.003 264.542);--tw-format-th-borders:oklch(92.8% 0.006 264.531);--tw-format-th-bg:oklch(98.5% 0.002 247.839);--tw-format-td-borders:oklch(92.8% 0.006 264.531);--tw-format-invert-body:oklch(70.7% 0.022 261.325);--tw-format-invert-headings:#fff;--tw-format-invert-lead:oklch(70.7% 0.022 261.325);--tw-format-invert-links:#fff;--tw-format-invert-bold:#fff;--tw-format-invert-counters:oklch(70.7% 0.022 261.325);--tw-format-invert-bullets:oklch(44.6% 0.03 256.802);--tw-format-invert-hr:oklch(37.3% 0.034 259.733);--tw-format-invert-quotes:oklch(96.7% 0.003 264.542);--tw-format-invert-quote-borders:oklch(37.3% 0.034 259.733);--tw-format-invert-captions:oklch(70.7% 0.022 261.325);--tw-format-invert-code:#fff;--tw-format-invert-code-bg:oklch(27.8% 0.033 256.848);--tw-format-invert-pre-code:oklch(87.2% 0.01 258.338);--tw-format-invert-pre-bg:oklch(37.3% 0.034 259.733);--tw-format-invert-th-borders:oklch(44.6% 0.03 256.802);--tw-format-invert-td-borders:oklch(37.3% 0.034 259.733);--tw-format-invert-th-bg:oklch(37.3% 0.034 259.733);font-size:1rem;line-height:1.75;:where([class~=lead]):not(:where([class~=not-format] *)){color:var(--tw-format-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}:where(a):not(:where([class~=not-format] *)){color:var(--tw-format-links);font-weight:500;text-decoration:underline;&:hover{text-decoration:none}}:where(strong):not(:where([class~=not-format] *)){color:var(--tw-format-bold);font-weight:700}:where(a strong):not(:where([class~=not-format] *)){color:inherit}:where(blockquote strong):not(:where([class~=not-format] *)){color:inherit}:where(thead th strong):not(:where([class~=not-format] *)){color:inherit}:where(ol):not(:where([class~=not-format] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol[type=A]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}:where(ol[type=a]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}:where(ol[type=A s]):not(:where([class~=not-format] *)){list-style-type:upper-alpha}:where(ol[type=a s]):not(:where([class~=not-format] *)){list-style-type:lower-alpha}:where(ol[type=I]):not(:where([class~=not-format] *)){list-style-type:upper-roman}:where(ol[type=i]):not(:where([class~=not-format] *)){list-style-type:lower-roman}:where(ol[type=I s]):not(:where([class~=not-format] *)){list-style-type:upper-roman}:where(ol[type=i s]):not(:where([class~=not-format] *)){list-style-type:lower-roman}:where(ol[type="1"]):not(:where([class~=not-format] *)){list-style-type:decimal}:where(ul):not(:where([class~=not-format] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol>li):not(:where([class~=not-format] *))::marker{color:var(--tw-format-counters);font-weight:400}:where(ul>li):not(:where([class~=not-format] *))::marker{color:var(--tw-format-bullets)}:where(hr):not(:where([class~=not-format] *)){border-color:var(--tw-format-hr);border-top-width:1;margin-bottom:3em;margin-top:3em}:where(blockquote):not(:where([class~=not-format] *)){color:var(--tw-format-quotes);font-size:1.1111111em;font-style:italic;font-weight:700;margin-bottom:1.6em;quotes:"\201C""\201D""\2018""\2019"}:where(blockquote):not(:where([class~=not-format] *)):before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='24' fill='none' viewBox='0 0 32 24'%3E%3Cpath fill='%239CA3AF' d='M18.69 24v-9.855C18.69 6.54 23.663 1.385 30.666 0l1.326 2.868c-3.242 1.223-5.326 4.85-5.326 7.799H32V24zM0 24v-9.855C0 6.54 4.997 1.384 12 0l1.328 2.868C10.084 4.091 8 7.718 8 10.667h5.31V24z'/%3E%3C/svg%3E");background-repeat:no-repeat;color:var(--tw-format-quotes);content:"";display:block;height:1.3333333em;margin-top:1.6em;width:1.7777778em}:where(blockquote p:first-of-type):not(:where([class~=not-format] *)):before{content:open-quote}:where(blockquote p:last-of-type):not(:where([class~=not-format] *)):after{content:close-quote}:where(h1):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}:where(h1 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:900}:where(h2):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:0}:where(h2 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:800}:where(h3):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-size:1.25em;font-weight:700;line-height:1.6;margin-bottom:.6em;margin-top:0}:where(h3 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:800}:where(h4):not(:where([class~=not-format] *)){color:var(--tw-format-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:0}:where(h4 strong):not(:where([class~=not-format] *)){color:inherit;font-weight:700}:where(img):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(figure>*):not(:where([class~=not-format] *)){margin-bottom:0;margin-top:0}:where(figcaption):not(:where([class~=not-format] *)){color:var(--tw-format-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}:where(code):not(:where([class~=not-format] *)){background-color:var(--tw-format-code-bg);border-radius:.2222222em;color:var(--tw-format-code);font-size:.875em;font-weight:600;padding:.3333333em .5555556em}:where(a code):not(:where([class~=not-format] *)){color:inherit}:where(h1 code):not(:where([class~=not-format] *)){color:inherit}:where(h2 code):not(:where([class~=not-format] *)){color:inherit;font-size:.875em}:where(h3 code):not(:where([class~=not-format] *)){color:inherit;font-size:.9em}:where(h4 code):not(:where([class~=not-format] *)){color:inherit}:where(blockquote code):not(:where([class~=not-format] *)){color:inherit}:where(thead th code):not(:where([class~=not-format] *)){color:inherit}:where(pre):not(:where([class~=not-format] *)){background-color:var(--tw-format-pre-bg);border-radius:.375rem;color:var(--tw-format-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}:where(pre code):not(:where([class~=not-format] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}:where(pre code):not(:where([class~=not-format] *)):before{content:none}:where(pre code):not(:where([class~=not-format] *)):after{content:none}:where(table):not(:where([class~=not-format] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}:where(thead):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);border-radius:.2777778em}:where(thead th):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em .5714286em .5714286em;vertical-align:bottom}:where(tbody th):not(:where([class~=not-format] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em;vertical-align:bottom}:where(tbody tr th p,tbody tr td p):not(:where([class~=not-format] *)){margin:0 !important}:where(tbody tr th,tbody tr td):not(:where([class~=not-format] *)){padding:.6666667em !important}:where(tbody tr):not(:where([class~=not-format] *)){border-bottom-color:var(--tw-format-td-borders);border-bottom-width:1px}:where(tbody tr:last-child):not(:where([class~=not-format] *)){border-bottom-width:0}:where(tbody td):not(:where([class~=not-format] *)){vertical-align:baseline}:where(tfoot):not(:where([class~=not-format] *)){border-top-color:var(--tw-format-th-borders);border-top-width:1px}:where(tfoot td):not(:where([class~=not-format] *)){vertical-align:top}:where(p):not(:where([class~=not-format] *)){margin-bottom:1.25em;margin-top:1.25em}:where(blockquote>p:first-child):not(:where([class~=not-format] *)){margin-top:0}:where(video):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(figure):not(:where([class~=not-format] *)){margin-bottom:2em;margin-top:2em}:where(li):not(:where([class~=not-format] *)){margin-bottom:.5em;margin-top:.5em}:where(ol>li):not(:where([class~=not-format] *)){padding-left:.375em}:where(ul>li):not(:where([class~=not-format] *)){padding-left:.375em}:where(.format>ul>li p):not(:where([class~=not-format] *)){margin-bottom:.75em;margin-top:.75em}:where(.format>ul>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}:where(.format>ul>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}:where(.format>ol>li>:first-child):not(:where([class~=not-format] *)){margin-top:1.25em}:where(.format>ol>li>:last-child):not(:where([class~=not-format] *)){margin-bottom:1.25em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-format] *)){margin-bottom:.75em;margin-top:.75em}:where(hr+*):not(:where([class~=not-format] *)){margin-top:0}:where(h2+*):not(:where([class~=not-format] *)){margin-top:0}:where(h3+*):not(:where([class~=not-format] *)){margin-top:0}:where(h4+*):not(:where([class~=not-format] *)){margin-top:0}:where(thead th:last-child):not(:where([class~=not-format] *)){padding-right:0}:where(tbody td,tfoot td):not(:where([class~=not-format] *)){padding:.5714286em}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-format] *)){padding-right:0}:where(.format>:first-child):not(:where([class~=not-format] *)){margin-top:0}:where(.format>:last-child):not(:where([class~=not-format] *)){margin-bottom:0}}.prose{color:var(--tw-format-body);max-width:65ch;--tw-format-body:oklch(55.1% 0.027 264.364);--tw-format-headings:oklch(21% 0.034 264.665);--tw-format-lead:oklch(55.1% 0.027 264.364);--tw-format-links:oklch(44.6% 0.03 256.802);--tw-format-bold:oklch(21% 0.034 264.665);--tw-format-counters:oklch(55.1% 0.027 264.364);--tw-format-bullets:oklch(55.1% 0.027 264.364);--tw-format-hr:oklch(92.8% 0.006 264.531);--tw-format-quotes:oklch(21% 0.034 264.665);--tw-format-quote-borders:oklch(92.8% 0.006 264.531);--tw-format-captions:oklch(55.1% 0.027 264.364);--tw-format-code:oklch(21% 0.034 264.665);--tw-format-code-bg:oklch(96.7% 0.003 264.542);--tw-format-pre-code:oklch(44.6% 0.03 256.802);--tw-format-pre-bg:oklch(96.7% 0.003 264.542);--tw-format-th-borders:oklch(92.8% 0.006 264.531);--tw-format-th-bg:oklch(98.5% 0.002 247.839);--tw-format-td-borders:oklch(92.8% 0.006 264.531);--tw-format-invert-body:oklch(70.7% 0.022 261.325);--tw-format-invert-headings:#fff;--tw-format-invert-lead:oklch(70.7% 0.022 261.325);--tw-format-invert-links:#fff;--tw-format-invert-bold:#fff;--tw-format-invert-counters:oklch(70.7% 0.022 261.325);--tw-format-invert-bullets:oklch(44.6% 0.03 256.802);--tw-format-invert-hr:oklch(37.3% 0.034 259.733);--tw-format-invert-quotes:oklch(96.7% 0.003 264.542);--tw-format-invert-quote-borders:oklch(37.3% 0.034 259.733);--tw-format-invert-captions:oklch(70.7% 0.022 261.325);--tw-format-invert-code:#fff;--tw-format-invert-code-bg:oklch(27.8% 0.033 256.848);--tw-format-invert-pre-code:oklch(87.2% 0.01 258.338);--tw-format-invert-pre-bg:oklch(37.3% 0.034 259.733);--tw-format-invert-th-borders:oklch(44.6% 0.03 256.802);--tw-format-invert-td-borders:oklch(37.3% 0.034 259.733);--tw-format-invert-th-bg:oklch(37.3% 0.034 259.733);font-size:1rem;line-height:1.75;:where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}:where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-links);font-weight:500;text-decoration:underline;&:hover{text-decoration:none}}:where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-bold);font-weight:700}:where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}:where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}:where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}:where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}:where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}:where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-format-counters);font-weight:400}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-format-bullets)}:where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-format-hr);border-top-width:1;margin-bottom:3em;margin-top:3em}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-quotes);font-size:1.1111111em;font-style:italic;font-weight:700;margin-bottom:1.6em;quotes:"\201C""\201D""\2018""\2019"}:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)):before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='24' fill='none' viewBox='0 0 32 24'%3E%3Cpath fill='%239CA3AF' d='M18.69 24v-9.855C18.69 6.54 23.663 1.385 30.666 0l1.326 2.868c-3.242 1.223-5.326 4.85-5.326 7.799H32V24zM0 24v-9.855C0 6.54 4.997 1.384 12 0l1.328 2.868C10.084 4.091 8 7.718 8 10.667h5.31V24z'/%3E%3C/svg%3E");background-repeat:no-repeat;color:var(--tw-format-quotes);content:"";display:block;height:1.3333333em;margin-top:1.6em;width:1.7777778em}:where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}:where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}:where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}:where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}:where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:0}:where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}:where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-size:1.25em;font-weight:700;line-height:1.6;margin-bottom:.6em;margin-top:0}:where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}:where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:0}:where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}:where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}:where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-format-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}:where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-code-bg);border-radius:.2222222em;color:var(--tw-format-code);font-size:.875em;font-weight:600;padding:.3333333em .5555556em}:where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}:where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}:where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}:where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-pre-bg);border-radius:.375rem;color:var(--tw-format-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}:where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}:where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}:where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);border-radius:.2777778em}:where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em .5714286em .5714286em;vertical-align:bottom}:where(tbody th):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-format-th-bg);color:var(--tw-format-headings);font-weight:600;padding:.5555556em;vertical-align:bottom}:where(tbody tr th p,tbody tr td p):not(:where([class~=not-prose],[class~=not-prose] *)){margin:0 !important}:where(tbody tr th,tbody tr td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.6666667em !important}:where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-format-td-borders);border-bottom-width:1px}:where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}:where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}:where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-format-th-borders);border-top-width:1px}:where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}:where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}:where(blockquote>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}:where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}:where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}:where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-left:.375em}:where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}:where(.prose>ul>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ul>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(.prose>ol>li>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}:where(.prose>ol>li>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}:where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}:where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}:where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding:.5714286em}:where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-right:0}:where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}:where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1\.5{margin-inline:calc(var(--spacing)*-1.5)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.-my-1\.5{margin-block:calc(var(--spacing)*-1.5)}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.ms-1{margin-inline-start:calc(var(--spacing)*1)}.ms-2{margin-inline-start:calc(var(--spacing)*2)}.ms-3{margin-inline-start:calc(var(--spacing)*3)}.ms-auto{margin-inline-start:auto}.me-2\.5{margin-inline-end:calc(var(--spacing)*2.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-auto{margin-right:auto}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-2\.5{margin-left:calc(var(--spacing)*2.5)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-9{margin-left:calc(var(--spacing)*9)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.aspect-square{aspect-ratio:1/1}.size-1{height:calc(var(--spacing)*1);width:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-4\/5{height:80%}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[80\%\]{max-height:80%}.max-h-\[150px\]{max-height:150px}.max-h-\[300px\]{max-height:300px}.max-h-fit{max-height:fit-content}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/5{width:60%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[450px\]{max-width:450px}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-\[5em\]{min-width:5em}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%}.translate-x-full{--tw-translate-x:100%}.-translate-y-full,.translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%}.translate-y-full{--tw-translate-y:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.transform\!{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)!important}.transform-none{transform:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-flow-row-dense{grid-auto-flow:row dense}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[repeat\(auto-fill\,minmax\(0\,180px\)\)\]{grid-template-columns:repeat(auto-fill,minmax(0,180px))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}}.space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}}.space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}}.gap-x-4{column-gap:calc(var(--spacing)*4)}.-space-x-px{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(-1px*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(-1px*var(--tw-space-x-reverse))}}.space-x-1{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*1*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*1*var(--tw-space-x-reverse))}}.space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}.space-x-4{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-10{row-gap:calc(var(--spacing)*10)}.divide-y{:where(&>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-bottom-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse))}}.divide-gray-100{:where(&>:not(:last-child)){border-color:var(--color-gray-100)}}.divide-gray-200{:where(&>:not(:last-child)){border-color:var(--color-gray-200)}}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:calc(infinity*1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s-lg{border-end-start-radius:var(--radius-lg);border-start-start-radius:var(--radius-lg)}.rounded-e-lg{border-end-end-radius:var(--radius-lg);border-start-end-radius:var(--radius-lg)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-400{border-color:var(--color-gray-400)}.border-gray-600{border-color:var(--color-gray-600)}.border-green-200{border-color:var(--color-green-200)}.border-green-500{border-color:var(--color-green-500)}.border-primary-600{border-color:#0e8f94}.border-primary-700{border-color:#0b6d71}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-red-500{border-color:var(--color-red-500)}.border-red-600{border-color:var(--color-red-600)}.border-transparent{border-color:transparent}.border-yellow-200{border-color:var(--color-yellow-200)}.bg-accent-100{background-color:#ffe4e7}.bg-accent-700{background-color:#e73d55}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-blue-800{background-color:var(--color-blue-800)}.bg-danger-100{background-color:#fee2e2}.bg-danger-700{background-color:#b91c1c}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900\/50{background-color:color-mix(in srgb,oklch(21% .034 264.665) 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-900) 50%,transparent)}}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-800{background-color:var(--color-green-800)}.bg-info-100{background-color:#e0f2fe}.bg-info-700{background-color:#0369a1}.bg-primary-50{background-color:#f0fdfd}.bg-primary-100{background-color:#e0fafa}.bg-primary-600{background-color:#0e8f94}.bg-primary-700{background-color:#0b6d71}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-700{background-color:var(--color-red-700)}.bg-red-800{background-color:var(--color-red-800)}.bg-secondary-100{background-color:#e6ecf1}.bg-secondary-600{background-color:#1a3549}.bg-secondary-700{background-color:#152c3d}.bg-success-100{background-color:#dcfce7}.bg-success-700{background-color:#15803d}.bg-transparent{background-color:transparent}.bg-warning-100{background-color:#fef3c7}.bg-warning-700{background-color:#b45309}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-300{background-color:var(--color-yellow-300)}.bg-yellow-700{background-color:var(--color-yellow-700)}.bg-yellow-800{background-color:var(--color-yellow-800)}.object-cover{object-fit:cover}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-2\.5{padding:calc(var(--spacing)*2.5)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-8{padding-block:calc(var(--spacing)*8)}.ps-0{padding-inline-start:calc(var(--spacing)*0)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-14{padding-top:calc(var(--spacing)*14)}.pt-20{padding-top:calc(var(--spacing)*20)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-end{text-align:end}.text-left{text-align:left}.text-start{text-align:start}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.text-accent-700{color:#e73d55}.text-blue-200{color:var(--color-blue-200)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-800{color:var(--color-blue-800)}.text-danger-700{color:#b91c1c}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-200{color:var(--color-green-200)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-green-900{color:var(--color-green-900)}.text-info-700{color:#0369a1}.text-primary-500{color:#17b8be}.text-primary-600{color:#0e8f94}.text-primary-700{color:#0b6d71}.text-primary-800{color:#0a5558}.text-red-200{color:var(--color-red-200)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-red-900{color:var(--color-red-900)}.text-secondary-600{color:#1a3549}.text-secondary-700{color:#152c3d}.text-success-700{color:#15803d}.text-warning-700{color:#b45309}.text-white{color:var(--color-white)}.text-yellow-200{color:var(--color-yellow-200)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-800{color:var(--color-yellow-800)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-green-700{&::placeholder{color:var(--color-green-700)}}.placeholder-red-700{&::placeholder{color:var(--color-red-700)}}.opacity-0{opacity:0}.opacity-50{opacity:50%}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow,.shadow-inner{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,rgba(0,0,0,.05))}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow-lg,.shadow-md{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,rgba(0,0,0,.1)),0 1px 2px -1px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-blue-400{--tw-ring-color:var(--color-blue-400)}.ring-green-400{--tw-ring-color:var(--color-green-400)}.ring-red-400{--tw-ring-color:var(--color-red-400)}.ring-yellow-400{--tw-ring-color:var(--color-yellow-400)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.invert{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter\!{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.transition{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-all{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-colors{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-opacity{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-transform{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-200{--tw-duration:200ms;transition-duration:.2s}.duration-300{--tw-duration:300ms;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.format-primary{--tw-prose-body:oklch(21% 0.034 264.665);--tw-prose-headings:oklch(21% 0.034 264.665);--tw-prose-lead:oklch(44.6% 0.03 256.802);--tw-prose-links:#0b6d71;--tw-prose-bold:oklch(21% 0.034 264.665);--tw-prose-counters:oklch(44.6% 0.03 256.802);--tw-prose-bullets:oklch(44.6% 0.03 256.802);--tw-prose-hr:oklch(92.8% 0.006 264.531);--tw-prose-quotes:oklch(21% 0.034 264.665);--tw-prose-quote-borders:oklch(87.2% 0.01 258.338);--tw-prose-captions:oklch(37.3% 0.034 259.733);--tw-prose-code:oklch(21% 0.034 264.665);--tw-prose-code-bg:#f0fdfd;--tw-prose-pre-code:#e0fafa;--tw-prose-pre-bg:oklch(21% 0.034 264.665);--tw-prose-th-borders:oklch(87.2% 0.01 258.338);--tw-prose-td-borders:oklch(92.8% 0.006 264.531);--tw-prose-th-bg:oklch(96.7% 0.003 264.542);--tw-prose-invert-body:#fff;--tw-prose-invert-headings:#e6ecf1;--tw-prose-invert-lead:#678cab;--tw-prose-invert-links:#17b8be;--tw-prose-invert-bold:#e6ecf1;--tw-prose-invert-counters:oklch(70.7% 0.022 261.325);--tw-prose-invert-bullets:oklch(70.7% 0.022 261.325);--tw-prose-invert-hr:#0a5558;--tw-prose-invert-quotes:#e6ecf1;--tw-prose-invert-quote-borders:oklch(55.1% 0.027 264.364);--tw-prose-invert-captions:#9db3c7;--tw-prose-invert-code:#e6ecf1;--tw-prose-invert-code-bg:#042f30;--tw-prose-invert-pre-code:#084547;--tw-prose-invert-pre-bg:#e6ecf1;--tw-prose-invert-th-borders:oklch(44.6% 0.03 256.802);--tw-prose-invert-td-borders:oklch(37.3% 0.034 259.733);--tw-prose-invert-th-bg:oklch(27.8% 0.033 256.848)}.group-hover\:text-gray-500{&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-500)}}}.group-hover\:text-gray-900{&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-900)}}}.backdrop\:bg-black\/60{&::backdrop{background-color:color-mix(in srgb,#000 60%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}}.backdrop\:backdrop-blur-sm{&::backdrop{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}.last\:border-r-0{&:last-child{border-right-style:var(--tw-border-style);border-right-width:0}}.last\:border-none{&:last-child{--tw-border-style:none;border-style:none}}.open\:flex{&:is([open],:popover-open,:open){display:flex}}.open\:opacity-100{&:is([open],:popover-open,:open){opacity:100%}}.checked\:bg-primary-500{&:checked{background-color:#17b8be}}.valid\:border-green-500{&:valid{border-color:var(--color-green-500)}}.invalid\:border-red-500{&:invalid{border-color:var(--color-red-500)}}.invalid\:text-red-600{&:invalid{color:var(--color-red-600)}}.hover\:translate-y-\[-2px\]{&:hover{@media (hover:hover){--tw-translate-y:-2px;translate:var(--tw-translate-x) var(--tw-translate-y)}}}.hover\:border-gray-300{&:hover{@media (hover:hover){border-color:var(--color-gray-300)}}}.hover\:bg-accent-200{&:hover{@media (hover:hover){background-color:#ffccd2}}}.hover\:bg-accent-800{&:hover{@media (hover:hover){background-color:#d12d44}}}.hover\:bg-blue-100{&:hover{@media (hover:hover){background-color:var(--color-blue-100)}}}.hover\:bg-blue-700{&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}.hover\:bg-blue-800{&:hover{@media (hover:hover){background-color:var(--color-blue-800)}}}.hover\:bg-danger-200{&:hover{@media (hover:hover){background-color:#fecaca}}}.hover\:bg-danger-800{&:hover{@media (hover:hover){background-color:#991b1b}}}.hover\:bg-gray-50{&:hover{@media (hover:hover){background-color:var(--color-gray-50)}}}.hover\:bg-gray-100{&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}}.hover\:bg-gray-200{&:hover{@media (hover:hover){background-color:var(--color-gray-200)}}}.hover\:bg-info-200{&:hover{@media (hover:hover){background-color:#bae6fd}}}.hover\:bg-info-800{&:hover{@media (hover:hover){background-color:#075985}}}.hover\:bg-primary-200{&:hover{@media (hover:hover){background-color:#baf3f5}}}.hover\:bg-primary-700{&:hover{@media (hover:hover){background-color:#0b6d71}}}.hover\:bg-primary-800{&:hover{@media (hover:hover){background-color:#0a5558}}}.hover\:bg-red-50{&:hover{@media (hover:hover){background-color:var(--color-red-50)}}}.hover\:bg-red-700{&:hover{@media (hover:hover){background-color:var(--color-red-700)}}}.hover\:bg-red-800{&:hover{@media (hover:hover){background-color:var(--color-red-800)}}}.hover\:bg-secondary-200{&:hover{@media (hover:hover){background-color:#c7d5e1}}}.hover\:bg-secondary-700{&:hover{@media (hover:hover){background-color:#152c3d}}}.hover\:bg-secondary-800{&:hover{@media (hover:hover){background-color:#102231}}}.hover\:bg-success-200{&:hover{@media (hover:hover){background-color:#bbf7d0}}}.hover\:bg-success-800{&:hover{@media (hover:hover){background-color:#166534}}}.hover\:bg-warning-200{&:hover{@media (hover:hover){background-color:#fde68a}}}.hover\:bg-warning-800{&:hover{@media (hover:hover){background-color:#92400e}}}.hover\:bg-yellow-400{&:hover{@media (hover:hover){background-color:var(--color-yellow-400)}}}.hover\:bg-yellow-800{&:hover{@media (hover:hover){background-color:var(--color-yellow-800)}}}.hover\:text-blue-700{&:hover{@media (hover:hover){color:var(--color-blue-700)}}}.hover\:text-blue-800{&:hover{@media (hover:hover){color:var(--color-blue-800)}}}.hover\:text-gray-600{&:hover{@media (hover:hover){color:var(--color-gray-600)}}}.hover\:text-gray-700{&:hover{@media (hover:hover){color:var(--color-gray-700)}}}.hover\:text-gray-900{&:hover{@media (hover:hover){color:var(--color-gray-900)}}}.hover\:text-primary-600{&:hover{@media (hover:hover){color:#0e8f94}}}.hover\:text-primary-800{&:hover{@media (hover:hover){color:#0a5558}}}.hover\:text-red-800{&:hover{@media (hover:hover){color:var(--color-red-800)}}}.hover\:underline{&:hover{@media (hover:hover){text-decoration-line:underline}}}.hover\:shadow-lg{&:hover{@media (hover:hover){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,rgba(0,0,0,.1)),0 4px 6px -4px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.hover\:shadow-md{&:hover{@media (hover:hover){--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--tw-shadow-color,rgba(0,0,0,.1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.focus\:z-10{&:focus{z-index:10}}.focus\:border-blue-500{&:focus{border-color:var(--color-blue-500)}}.focus\:border-green-500{&:focus{border-color:var(--color-green-500)}}.focus\:border-primary-500{&:focus{border-color:#17b8be}}.focus\:border-primary-600{&:focus{border-color:#0e8f94}}.focus\:border-red-500{&:focus{border-color:var(--color-red-500)}}.focus\:border-red-600{&:focus{border-color:var(--color-red-600)}}.focus\:bg-gray-100{&:focus{background-color:var(--color-gray-100)}}.focus\:text-gray-700{&:focus{color:var(--color-gray-700)}}.focus\:text-white{&:focus{color:var(--color-white)}}.focus\:ring-2{&:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-4{&:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus\:ring-accent-300{&:focus{--tw-ring-color:#ffb1ba}}.focus\:ring-blue-300{&:focus{--tw-ring-color:var(--color-blue-300)}}.focus\:ring-blue-500{&:focus{--tw-ring-color:var(--color-blue-500)}}.focus\:ring-danger-300{&:focus{--tw-ring-color:#fca5a5}}.focus\:ring-gray-100{&:focus{--tw-ring-color:var(--color-gray-100)}}.focus\:ring-gray-200{&:focus{--tw-ring-color:var(--color-gray-200)}}.focus\:ring-gray-300{&:focus{--tw-ring-color:var(--color-gray-300)}}.focus\:ring-green-500{&:focus{--tw-ring-color:var(--color-green-500)}}.focus\:ring-info-300{&:focus{--tw-ring-color:#7dd3fc}}.focus\:ring-primary-300{&:focus{--tw-ring-color:#7de8ec}}.focus\:ring-primary-500{&:focus{--tw-ring-color:#17b8be}}.focus\:ring-primary-600{&:focus{--tw-ring-color:#0e8f94}}.focus\:ring-primary-700{&:focus{--tw-ring-color:#0b6d71}}.focus\:ring-red-300{&:focus{--tw-ring-color:var(--color-red-300)}}.focus\:ring-red-500{&:focus{--tw-ring-color:var(--color-red-500)}}.focus\:ring-red-600{&:focus{--tw-ring-color:var(--color-red-600)}}.focus\:ring-secondary-300{&:focus{--tw-ring-color:#9db3c7}}.focus\:ring-secondary-500{&:focus{--tw-ring-color:#1e3d59}}.focus\:ring-success-300{&:focus{--tw-ring-color:#86efac}}.focus\:ring-warning-300{&:focus{--tw-ring-color:#fcd34d}}.focus\:ring-yellow-300{&:focus{--tw-ring-color:var(--color-yellow-300)}}.focus\:ring-offset-2{&:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}}.focus\:outline-none{&:focus{--tw-outline-style:none;outline-style:none}}.focus\:invalid\:border-red-500{&:focus{&:invalid{border-color:var(--color-red-500)}}}.focus\:invalid\:ring-red-500{&:focus{&:invalid{--tw-ring-color:var(--color-red-500)}}}.focus-visible\:ring-2{&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus-visible\:ring-blue-600{&:focus-visible{--tw-ring-color:var(--color-blue-600)}}.focus-visible\:ring-primary-600{&:focus-visible{--tw-ring-color:#0e8f94}}.focus-visible\:outline-none{&:focus-visible{--tw-outline-style:none;outline-style:none}}.motion-safe\:animate-pulse{@media (prefers-reduced-motion:no-preference){animation:var(--animate-pulse)}}.motion-safe\:animate-spin{@media (prefers-reduced-motion:no-preference){animation:var(--animate-spin)}}.xs\:block{@media (width >= 475px){display:block}}.sm\:flex{@media (width >= 40rem){display:flex}}.sm\:max-w-md{@media (width >= 40rem){max-width:var(--container-md)}}.sm\:flex-row{@media (width >= 40rem){flex-direction:row}}.sm\:space-y-0{@media (width >= 40rem){:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*0*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*0*var(--tw-space-y-reverse))}}}.sm\:space-x-4{@media (width >= 40rem){:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*4*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*4*var(--tw-space-x-reverse))}}}.sm\:rounded-lg{@media (width >= 40rem){border-radius:var(--radius-lg)}}.sm\:p-8{@media (width >= 40rem){padding:calc(var(--spacing)*8)}}.sm\:text-lg{@media (width >= 40rem){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}.md\:top-1\/2{@media (width >= 48rem){top:50%}}.md\:ms-2{@media (width >= 48rem){margin-inline-start:calc(var(--spacing)*2)}}.md\:mt-0{@media (width >= 48rem){margin-top:calc(var(--spacing)*0)}}.md\:mr-0{@media (width >= 48rem){margin-right:calc(var(--spacing)*0)}}.md\:min-w-60{@media (width >= 48rem){min-width:calc(var(--spacing)*60)}}.md\:-translate-y-1\/2{@media (width >= 48rem){--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}}.md\:grid-cols-2{@media (width >= 48rem){grid-template-columns:repeat(2,minmax(0,1fr))}}.md\:grid-cols-4{@media (width >= 48rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.md\:flex-row{@media (width >= 48rem){flex-direction:row}}.md\:space-y-6{@media (width >= 48rem){:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}}}.md\:space-x-2{@media (width >= 48rem){:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}}.md\:p-6{@media (width >= 48rem){padding:calc(var(--spacing)*6)}}.md\:text-4xl{@media (width >= 48rem){font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}}.md\:text-xl{@media (width >= 48rem){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}.lg\:sticky{@media (width >= 64rem){position:sticky}}.lg\:order-2{@media (width >= 64rem){order:2}}.lg\:col-span-1{@media (width >= 64rem){grid-column:span 1/span 1}}.lg\:col-span-2{@media (width >= 64rem){grid-column:span 2/span 2}}.lg\:ml-64{@media (width >= 64rem){margin-left:calc(var(--spacing)*64)}}.lg\:hidden{@media (width >= 64rem){display:none}}.lg\:translate-x-0{@media (width >= 64rem){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x) var(--tw-translate-y)}}.lg\:grid-cols-3{@media (width >= 64rem){grid-template-columns:repeat(3,minmax(0,1fr))}}.lg\:py-0{@media (width >= 64rem){padding-block:calc(var(--spacing)*0)}}.xl\:p-0{@media (width >= 80rem){padding:calc(var(--spacing)*0)}}.\32 xl\:grid-cols-4{@media (width >= 96rem){grid-template-columns:repeat(4,minmax(0,1fr))}}.rtl\:rotate-180{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){rotate:180deg}}.rtl\:space-x-reverse{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){:where(&>:not(:last-child)){--tw-space-x-reverse:1}}}.rtl\:text-right{&:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}}.dark\:divide-gray-600{&:where(.dark,.dark *){:where(&>:not(:last-child)){border-color:var(--color-gray-600)}}}.dark\:divide-gray-700{&:where(.dark,.dark *){:where(&>:not(:last-child)){border-color:var(--color-gray-700)}}}.dark\:border{&:where(.dark,.dark *){border-style:var(--tw-border-style);border-width:1px}}.dark\:border-blue-700{&:where(.dark,.dark *){border-color:var(--color-blue-700)}}.dark\:border-gray-500{&:where(.dark,.dark *){border-color:var(--color-gray-500)}}.dark\:border-gray-600{&:where(.dark,.dark *){border-color:var(--color-gray-600)}}.dark\:border-gray-700{&:where(.dark,.dark *){border-color:var(--color-gray-700)}}.dark\:border-gray-800{&:where(.dark,.dark *){border-color:var(--color-gray-800)}}.dark\:border-green-500{&:where(.dark,.dark *){border-color:var(--color-green-500)}}.dark\:border-green-700{&:where(.dark,.dark *){border-color:var(--color-green-700)}}.dark\:border-primary-500{&:where(.dark,.dark *){border-color:#17b8be}}.dark\:border-primary-600{&:where(.dark,.dark *){border-color:#0e8f94}}.dark\:border-red-400{&:where(.dark,.dark *){border-color:var(--color-red-400)}}.dark\:border-red-500{&:where(.dark,.dark *){border-color:var(--color-red-500)}}.dark\:border-red-700{&:where(.dark,.dark *){border-color:var(--color-red-700)}}.dark\:border-transparent{&:where(.dark,.dark *){border-color:transparent}}.dark\:border-yellow-700{&:where(.dark,.dark *){border-color:var(--color-yellow-700)}}.dark\:bg-accent-600{&:where(.dark,.dark *){background-color:#ff647a}}.dark\:bg-accent-700{&:where(.dark,.dark *){background-color:#e73d55}}.dark\:bg-blue-600{&:where(.dark,.dark *){background-color:var(--color-blue-600)}}.dark\:bg-blue-900{&:where(.dark,.dark *){background-color:var(--color-blue-900)}}.dark\:bg-danger-600{&:where(.dark,.dark *){background-color:#dc2626}}.dark\:bg-danger-700{&:where(.dark,.dark *){background-color:#b91c1c}}.dark\:bg-emerald-400{&:where(.dark,.dark *){background-color:var(--color-emerald-400)}}.dark\:bg-gray-600{&:where(.dark,.dark *){background-color:var(--color-gray-600)}}.dark\:bg-gray-700{&:where(.dark,.dark *){background-color:var(--color-gray-700)}}.dark\:bg-gray-700\/50{&:where(.dark,.dark *){background-color:color-mix(in srgb,oklch(37.3% .034 259.733) 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-700) 50%,transparent)}}}.dark\:bg-gray-800{&:where(.dark,.dark *){background-color:var(--color-gray-800)}}.dark\:bg-gray-900{&:where(.dark,.dark *){background-color:var(--color-gray-900)}}.dark\:bg-gray-900\/80{&:where(.dark,.dark *){background-color:color-mix(in srgb,oklch(21% .034 264.665) 80%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-gray-900) 80%,transparent)}}}.dark\:bg-green-900{&:where(.dark,.dark *){background-color:var(--color-green-900)}}.dark\:bg-info-600{&:where(.dark,.dark *){background-color:#0284c7}}.dark\:bg-info-700{&:where(.dark,.dark *){background-color:#0369a1}}.dark\:bg-primary-200{&:where(.dark,.dark *){background-color:#baf3f5}}.dark\:bg-primary-600{&:where(.dark,.dark *){background-color:#0e8f94}}.dark\:bg-primary-700{&:where(.dark,.dark *){background-color:#0b6d71}}.dark\:bg-primary-900{&:where(.dark,.dark *){background-color:#084547}}.dark\:bg-primary-900\/30{&:where(.dark,.dark *){background-color:color-mix(in oklab,#084547 30%,transparent)}}.dark\:bg-red-400{&:where(.dark,.dark *){background-color:var(--color-red-400)}}.dark\:bg-red-600{&:where(.dark,.dark *){background-color:var(--color-red-600)}}.dark\:bg-red-900{&:where(.dark,.dark *){background-color:var(--color-red-900)}}.dark\:bg-secondary-600{&:where(.dark,.dark *){background-color:#1a3549}}.dark\:bg-secondary-700{&:where(.dark,.dark *){background-color:#152c3d}}.dark\:bg-stone-300{&:where(.dark,.dark *){background-color:var(--color-stone-300)}}.dark\:bg-success-600{&:where(.dark,.dark *){background-color:#16a34a}}.dark\:bg-success-700{&:where(.dark,.dark *){background-color:#15803d}}.dark\:bg-violet-400{&:where(.dark,.dark *){background-color:var(--color-violet-400)}}.dark\:bg-warning-600{&:where(.dark,.dark *){background-color:#d97706}}.dark\:bg-warning-700{&:where(.dark,.dark *){background-color:#b45309}}.dark\:bg-yellow-600{&:where(.dark,.dark *){background-color:var(--color-yellow-600)}}.dark\:text-accent-100{&:where(.dark,.dark *){color:#ffe4e7}}.dark\:text-blue-300{&:where(.dark,.dark *){color:var(--color-blue-300)}}.dark\:text-danger-100{&:where(.dark,.dark *){color:#fee2e2}}.dark\:text-gray-100{&:where(.dark,.dark *){color:var(--color-gray-100)}}.dark\:text-gray-200{&:where(.dark,.dark *){color:var(--color-gray-200)}}.dark\:text-gray-300{&:where(.dark,.dark *){color:var(--color-gray-300)}}.dark\:text-gray-400{&:where(.dark,.dark *){color:var(--color-gray-400)}}.dark\:text-gray-500{&:where(.dark,.dark *){color:var(--color-gray-500)}}.dark\:text-gray-900{&:where(.dark,.dark *){color:var(--color-gray-900)}}.dark\:text-green-300{&:where(.dark,.dark *){color:var(--color-green-300)}}.dark\:text-green-400{&:where(.dark,.dark *){color:var(--color-green-400)}}.dark\:text-green-500{&:where(.dark,.dark *){color:var(--color-green-500)}}.dark\:text-info-100{&:where(.dark,.dark *){color:#e0f2fe}}.dark\:text-primary-100{&:where(.dark,.dark *){color:#e0fafa}}.dark\:text-primary-200{&:where(.dark,.dark *){color:#baf3f5}}.dark\:text-primary-300{&:where(.dark,.dark *){color:#7de8ec}}.dark\:text-primary-400{&:where(.dark,.dark *){color:#40d9de}}.dark\:text-primary-500{&:where(.dark,.dark *){color:#17b8be}}.dark\:text-primary-800{&:where(.dark,.dark *){color:#0a5558}}.dark\:text-red-300{&:where(.dark,.dark *){color:var(--color-red-300)}}.dark\:text-red-400{&:where(.dark,.dark *){color:var(--color-red-400)}}.dark\:text-red-500{&:where(.dark,.dark *){color:var(--color-red-500)}}.dark\:text-secondary-100{&:where(.dark,.dark *){color:#e6ecf1}}.dark\:text-secondary-400{&:where(.dark,.dark *){color:#678cab}}.dark\:text-success-100{&:where(.dark,.dark *){color:#dcfce7}}.dark\:text-warning-100{&:where(.dark,.dark *){color:#fef3c7}}.dark\:text-white{&:where(.dark,.dark *){color:var(--color-white)}}.dark\:placeholder-gray-400{&:where(.dark,.dark *){&::placeholder{color:var(--color-gray-400)}}}.dark\:placeholder-green-500{&:where(.dark,.dark *){&::placeholder{color:var(--color-green-500)}}}.dark\:placeholder-red-500{&:where(.dark,.dark *){&::placeholder{color:var(--color-red-500)}}}.dark\:shadow-none{&:where(.dark,.dark *){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.dark\:shadow-gray-900\/20{&:where(.dark,.dark *){--tw-shadow-color:color-mix(in srgb,oklch(21% 0.034 264.665) 20%,transparent);@supports (color:color-mix(in lab,red,red)){--tw-shadow-color:color-mix(in oklab,color-mix(in oklab,var(--color-gray-900) 20%,transparent) var(--tw-shadow-alpha),transparent)}}}.dark\:ring-offset-gray-800{&:where(.dark,.dark *){--tw-ring-offset-color:var(--color-gray-800)}}.dark\:format-invert{&:where(.dark,.dark *){--tw-format-body:var(--tw-format-invert-body);--tw-format-headings:var(--tw-format-invert-headings);--tw-format-lead:var(--tw-format-invert-lead);--tw-format-links:var(--tw-format-invert-links);--tw-format-bold:var(--tw-format-invert-bold);--tw-format-counters:var(--tw-format-invert-counters);--tw-format-bullets:var(--tw-format-invert-bullets);--tw-format-hr:var(--tw-format-invert-hr);--tw-format-quotes:var(--tw-format-invert-quotes);--tw-format-quote-borders:var(--tw-format-invert-quote-borders);--tw-format-captions:var(--tw-format-invert-captions);--tw-format-code:var(--tw-format-invert-code);--tw-format-code-bg:var(--tw-format-invert-code-bg);--tw-format-pre-code:var(--tw-format-invert-pre-code);--tw-format-pre-bg:var(--tw-format-invert-pre-bg);--tw-format-th-borders:var(--tw-format-invert-th-borders);--tw-format-td-borders:var(--tw-format-invert-td-borders);--tw-format-th-bg:var(--tw-format-invert-th-bg)}}.dark\:group-hover\:text-gray-400{&:where(.dark,.dark *){&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-gray-400)}}}}.dark\:group-hover\:text-white{&:where(.dark,.dark *){&:is(:where(.group):hover *){@media (hover:hover){color:var(--color-white)}}}}.dark\:checked\:border-current{&:where(.dark,.dark *){&:checked{border-color:currentcolor}}}.dark\:checked\:bg-current{&:where(.dark,.dark *){&:checked{background-color:currentcolor}}}.dark\:checked\:text-emerald-400{&:where(.dark,.dark *){&:checked{color:var(--color-emerald-400)}}}.dark\:hover\:border-gray-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){border-color:var(--color-gray-600)}}}}.dark\:hover\:bg-accent-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#ff647a}}}}.dark\:hover\:bg-accent-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#e73d55}}}}.dark\:hover\:bg-blue-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}}.dark\:hover\:bg-blue-800{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-blue-800)}}}}.dark\:hover\:bg-danger-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#dc2626}}}}.dark\:hover\:bg-danger-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#b91c1c}}}}.dark\:hover\:bg-gray-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-600)}}}}.dark\:hover\:bg-gray-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-gray-700)}}}}.dark\:hover\:bg-info-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0284c7}}}}.dark\:hover\:bg-info-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0369a1}}}}.dark\:hover\:bg-primary-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0e8f94}}}}.dark\:hover\:bg-primary-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#0b6d71}}}}.dark\:hover\:bg-red-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-red-500)}}}}.dark\:hover\:bg-red-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-red-700)}}}}.dark\:hover\:bg-red-900\/50{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:color-mix(in srgb,oklch(39.6% .141 25.723) 50%,transparent);@supports (color:color-mix(in lab,red,red)){background-color:color-mix(in oklab,var(--color-red-900) 50%,transparent)}}}}}.dark\:hover\:bg-secondary-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#1a3549}}}}.dark\:hover\:bg-secondary-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#152c3d}}}}.dark\:hover\:bg-success-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#16a34a}}}}.dark\:hover\:bg-success-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#15803d}}}}.dark\:hover\:bg-violet-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-violet-500)}}}}.dark\:hover\:bg-warning-600{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#d97706}}}}.dark\:hover\:bg-warning-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:#b45309}}}}.dark\:hover\:bg-yellow-700{&:where(.dark,.dark *){&:hover{@media (hover:hover){background-color:var(--color-yellow-700)}}}}.dark\:hover\:text-blue-400{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-blue-400)}}}}.dark\:hover\:text-gray-300{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-gray-300)}}}}.dark\:hover\:text-primary-400{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:#40d9de}}}}.dark\:hover\:text-primary-500{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:#17b8be}}}}.dark\:hover\:text-white{&:where(.dark,.dark *){&:hover{@media (hover:hover){color:var(--color-white)}}}}.dark\:focus\:border-blue-500{&:where(.dark,.dark *){&:focus{border-color:var(--color-blue-500)}}}.dark\:focus\:border-emerald-400{&:where(.dark,.dark *){&:focus{border-color:var(--color-emerald-400)}}}.dark\:focus\:border-primary-500{&:where(.dark,.dark *){&:focus{border-color:#17b8be}}}.focus\:dark\:border-emerald-400{&:focus{&:where(.dark,.dark *){border-color:var(--color-emerald-400)}}}.dark\:focus\:bg-gray-700{&:where(.dark,.dark *){&:focus{background-color:var(--color-gray-700)}}}.dark\:focus\:bg-gray-800{&:where(.dark,.dark *){&:focus{background-color:var(--color-gray-800)}}}.focus\:dark\:bg-gray-700{&:focus{&:where(.dark,.dark *){background-color:var(--color-gray-700)}}}.dark\:focus\:text-white{&:where(.dark,.dark *){&:focus{color:var(--color-white)}}}.dark\:focus\:ring-accent-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#ff647a}}}.dark\:focus\:ring-accent-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#d12d44}}}.dark\:focus\:ring-blue-500{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-500)}}}.dark\:focus\:ring-blue-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-600)}}}.dark\:focus\:ring-blue-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-blue-800)}}}.dark\:focus\:ring-danger-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#dc2626}}}.dark\:focus\:ring-danger-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#991b1b}}}.dark\:focus\:ring-emerald-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-emerald-400)}}}.dark\:focus\:ring-gray-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-gray-600)}}}.dark\:focus\:ring-gray-700{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-gray-700)}}}.dark\:focus\:ring-info-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0284c7}}}.dark\:focus\:ring-info-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#075985}}}.dark\:focus\:ring-primary-500{&:where(.dark,.dark *){&:focus{--tw-ring-color:#17b8be}}}.dark\:focus\:ring-primary-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0e8f94}}}.dark\:focus\:ring-primary-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#0a5558}}}.dark\:focus\:ring-red-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-400)}}}.dark\:focus\:ring-red-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-600)}}}.dark\:focus\:ring-red-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-red-800)}}}.dark\:focus\:ring-secondary-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#1a3549}}}.dark\:focus\:ring-secondary-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#102231}}}.dark\:focus\:ring-success-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#16a34a}}}.dark\:focus\:ring-success-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#166534}}}.dark\:focus\:ring-violet-400{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-violet-400)}}}.dark\:focus\:ring-warning-600{&:where(.dark,.dark *){&:focus{--tw-ring-color:#d97706}}}.dark\:focus\:ring-warning-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:#92400e}}}.dark\:focus\:ring-yellow-800{&:where(.dark,.dark *){&:focus{--tw-ring-color:var(--color-yellow-800)}}}.dark\:focus\:ring-offset-current{&:where(.dark,.dark *){&:focus{--tw-ring-offset-color:currentcolor}}}.dark\:focus\:ring-offset-gray-900{&:where(.dark,.dark *){&:focus{--tw-ring-offset-color:var(--color-gray-900)}}}.dark\:focus-visible\:ring-2{&:where(.dark,.dark *){&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}.dark\:focus-visible\:ring-blue-300{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color:var(--color-blue-300)}}}.dark\:focus-visible\:ring-primary-300{&:where(.dark,.dark *){&:focus-visible{--tw-ring-color:#7de8ec}}}.lg\:dyna\:static{@media (width >= 64rem){:where(.dyna,.dyna *) &{position:static}}}.\[\&\:\:file-selector-button\]\:mr-3{&::file-selector-button{margin-right:calc(var(--spacing)*3)}}.\[\&\:\:file-selector-button\]\:cursor-pointer{&::file-selector-button{cursor:pointer}}.\[\&\:\:file-selector-button\]\:rounded-l-md{&::file-selector-button{border-bottom-left-radius:var(--radius-md);border-top-left-radius:var(--radius-md)}}.\[\&\:\:file-selector-button\]\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0}}.\[\&\:\:file-selector-button\]\:bg-gray-50{&::file-selector-button{background-color:var(--color-gray-50)}}.\[\&\:\:file-selector-button\]\:px-4{&::file-selector-button{padding-inline:calc(var(--spacing)*4)}}.\[\&\:\:file-selector-button\]\:py-2{&::file-selector-button{padding-block:calc(var(--spacing)*2)}}.\[\&\:\:file-selector-button\]\:text-sm{&::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.\[\&\:\:file-selector-button\]\:font-medium{&::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.\[\&\:\:file-selector-button\]\:text-gray-700{&::file-selector-button{color:var(--color-gray-700)}}.\[\&\:\:file-selector-button\]\:hover\:bg-gray-100{&::file-selector-button{&:hover{@media (hover:hover){background-color:var(--color-gray-100)}}}}.dark\:\[\&\:\:file-selector-button\]\:bg-gray-600{&:where(.dark,.dark *){&::file-selector-button{background-color:var(--color-gray-600)}}}.dark\:\[\&\:\:file-selector-button\]\:text-gray-200{&:where(.dark,.dark *){&::file-selector-button{color:var(--color-gray-200)}}}.dark\:\[\&\:\:file-selector-button\]\:hover\:bg-gray-500{&:where(.dark,.dark *){&::file-selector-button{&:hover{@media (hover:hover){background-color:var(--color-gray-500)}}}}}}@layer base{[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{appearance:none;background-color:#fff;border-color:oklch(55.1% .027 264.364);border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem;--tw-shadow:0 0 #0000;&:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(54.6% 0.245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:oklch(54.6% .245 262.881);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}input::placeholder,textarea::placeholder{color:oklch(55.1% .027 264.364);opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='oklch(55.1%25 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;print-color-adjust:unset}[type=checkbox],[type=radio]{appearance:none;background-color:#fff;background-origin:border-box;border-color:oklch(55.1% .027 264.364);border-width:1px;color:oklch(54.6% .245 262.881);display:inline-block;flex-shrink:0;height:1rem;padding:0;print-color-adjust:exact;user-select:none;vertical-align:middle;width:1rem;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:oklch(54.6% 0.245 262.881);--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0'/%3E%3C/svg%3E");@media (forced-colors:active){appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");@media (forced-colors:active){appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent;@media (forced-colors:active){appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens:none) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-duration:initial;--tw-leading:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-tracking:initial;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}} \ No newline at end of file diff --git a/app/assets/plutonium.js b/app/assets/plutonium.js index 5f46732d..30e5944d 100644 --- a/app/assets/plutonium.js +++ b/app/assets/plutonium.js @@ -37,27 +37,27 @@ emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6]); } }; - emitter.on = function on(event, fn2) { + emitter.on = function on2(event, fn3) { if (!_fns[event]) { _fns[event] = []; } - _fns[event].push(fn2); + _fns[event].push(fn3); }; - emitter.once = function once(event, fn2) { + emitter.once = function once(event, fn3) { function one() { - fn2.apply(this, arguments); + fn3.apply(this, arguments); emitter.off(event, one); } this.on(event, one); }; - emitter.off = function off(event, fn2) { + emitter.off = function off(event, fn3) { var keep = []; - if (event && fn2) { + if (event && fn3) { var fns = this._fns[event]; var i4 = 0; var l4 = fns ? fns.length : 0; for (i4; i4 < l4; i4++) { - if (fns[i4] !== fn2) { + if (fns[i4] !== fn3) { keep.push(fns[i4]); } } @@ -580,16 +580,16 @@ if (!new Events().__proto__) prefix = false; } - function EE(fn2, context, once) { - this.fn = fn2; + function EE(fn3, context, once) { + this.fn = fn3; this.context = context; this.once = once || false; } - function addListener(emitter, event, fn2, context, once) { - if (typeof fn2 !== "function") { + function addListener(emitter, event, fn3, context, once) { + if (typeof fn3 !== "function") { throw new TypeError("The listener must be a function"); } - var listener = new EE(fn2, context || emitter, once), evt = prefix ? prefix + event : event; + var listener = new EE(fn3, context || emitter, once), evt = prefix ? prefix + event : event; if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++; else if (!emitter._events[evt].fn) @@ -667,7 +667,7 @@ } listeners.fn.apply(listeners.context, args); } else { - var length = listeners.length, j4; + var length = listeners.length, j5; for (i4 = 0; i4 < length; i4++) { if (listeners[i4].once) this.removeListener(event, listeners[i4].fn, void 0, true); @@ -686,8 +686,8 @@ break; default: if (!args) - for (j4 = 1, args = new Array(len - 1); j4 < len; j4++) { - args[j4 - 1] = arguments[j4]; + for (j5 = 1, args = new Array(len - 1); j5 < len; j5++) { + args[j5 - 1] = arguments[j5]; } listeners[i4].fn.apply(listeners[i4].context, args); } @@ -695,28 +695,28 @@ } return true; }; - EventEmitter2.prototype.on = function on(event, fn2, context) { - return addListener(this, event, fn2, context, false); + EventEmitter2.prototype.on = function on2(event, fn3, context) { + return addListener(this, event, fn3, context, false); }; - EventEmitter2.prototype.once = function once(event, fn2, context) { - return addListener(this, event, fn2, context, true); + EventEmitter2.prototype.once = function once(event, fn3, context) { + return addListener(this, event, fn3, context, true); }; - EventEmitter2.prototype.removeListener = function removeListener(event, fn2, context, once) { + EventEmitter2.prototype.removeListener = function removeListener(event, fn3, context, once) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return this; - if (!fn2) { + if (!fn3) { clearEvent(this, evt); return this; } var listeners = this._events[evt]; if (listeners.fn) { - if (listeners.fn === fn2 && (!once || listeners.once) && (!context || listeners.context === context)) { + if (listeners.fn === fn3 && (!once || listeners.once) && (!context || listeners.context === context)) { clearEvent(this, evt); } } else { for (var i4 = 0, events = [], length = listeners.length; i4 < length; i4++) { - if (listeners[i4].fn !== fn2 || once && !listeners[i4].once || context && listeners[i4].context !== context) { + if (listeners[i4].fn !== fn3 || once && !listeners[i4].once || context && listeners[i4].context !== context) { events.push(listeners[i4]); } } @@ -2683,15 +2683,15 @@ * @param {number} [y=x] - The y-axis coordinate. * @returns {Cropper} this */ - moveTo: function moveTo(x3) { - var y4 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : x3; + moveTo: function moveTo(x4) { + var y4 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : x4; var canvasData = this.canvasData; var changed = false; - x3 = Number(x3); + x4 = Number(x4); y4 = Number(y4); if (this.ready && !this.disabled && this.options.movable) { - if (isNumber(x3)) { - canvasData.left = x3; + if (isNumber(x4)) { + canvasData.left = x4; changed = true; } if (isNumber(y4)) { @@ -3840,7 +3840,7 @@ }, ""); } function uuid() { - return Array.from({ length: 36 }).map((_3, i4) => { + return Array.from({ length: 36 }).map((_4, i4) => { if (i4 == 8 || i4 == 13 || i4 == 18 || i4 == 23) { return "-"; } else if (i4 == 14) { @@ -3968,10 +3968,10 @@ function getLocationForLink(link2) { return expandURL(link2.getAttribute("href") || ""); } - function debounce(fn2, delay) { + function debounce(fn3, delay) { let timeoutId = null; return (...args) => { - const callback = () => fn2.apply(this, args); + const callback = () => fn3.apply(this, args); clearTimeout(timeoutId); timeoutId = setTimeout(callback, delay); }; @@ -4746,8 +4746,8 @@ } } } - scrollToPosition({ x: x3, y: y4 }) { - this.scrollRoot.scrollTo(x3, y4); + scrollToPosition({ x: x4, y: y4 }) { + this.scrollRoot.scrollTo(x4, y4); } scrollToTop() { this.scrollToPosition({ x: 0, y: 0 }); @@ -5144,9 +5144,10 @@ return defaultValue; } } - var Idiomorph = /* @__PURE__ */ function() { - let EMPTY_SET = /* @__PURE__ */ new Set(); - let defaults = { + var Idiomorph = function() { + const noOp = () => { + }; + const defaults = { morphStyle: "outerHTML", callbacks: { beforeNodeAdded: noOp, @@ -5159,245 +5160,423 @@ }, head: { style: "merge", - shouldPreserve: function(elt) { - return elt.getAttribute("im-preserve") === "true"; - }, - shouldReAppend: function(elt) { - return elt.getAttribute("im-re-append") === "true"; - }, + shouldPreserve: (elt) => elt.getAttribute("im-preserve") === "true", + shouldReAppend: (elt) => elt.getAttribute("im-re-append") === "true", shouldRemove: noOp, afterHeadMorphed: noOp - } + }, + restoreFocus: true }; function morph(oldNode, newContent, config2 = {}) { - if (oldNode instanceof Document) { - oldNode = oldNode.documentElement; - } - if (typeof newContent === "string") { - newContent = parseContent(newContent); + oldNode = normalizeElement(oldNode); + const newNode = normalizeParent(newContent); + const ctx = createMorphContext(oldNode, newNode, config2); + const morphedNodes = saveAndRestoreFocus(ctx, () => { + return withHeadBlocking( + ctx, + oldNode, + newNode, + /** @param {MorphContext} ctx */ + (ctx2) => { + if (ctx2.morphStyle === "innerHTML") { + morphChildren2(ctx2, oldNode, newNode); + return Array.from(oldNode.childNodes); + } else { + return morphOuterHTML(ctx2, oldNode, newNode); + } + } + ); + }); + ctx.pantry.remove(); + return morphedNodes; + } + function morphOuterHTML(ctx, oldNode, newNode) { + const oldParent = normalizeParent(oldNode); + let childNodes = Array.from(oldParent.childNodes); + const index = childNodes.indexOf(oldNode); + const rightMargin = childNodes.length - (index + 1); + morphChildren2( + ctx, + oldParent, + newNode, + // these two optional params are the secret sauce + oldNode, + // start point for iteration + oldNode.nextSibling + // end point for iteration + ); + childNodes = Array.from(oldParent.childNodes); + return childNodes.slice(index, childNodes.length - rightMargin); + } + function saveAndRestoreFocus(ctx, fn3) { + if (!ctx.config.restoreFocus) + return fn3(); + let activeElement = ( + /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ + document.activeElement + ); + if (!(activeElement instanceof HTMLInputElement || activeElement instanceof HTMLTextAreaElement)) { + return fn3(); + } + const { id: activeElementId, selectionStart, selectionEnd } = activeElement; + const results = fn3(); + if (activeElementId && activeElementId !== document.activeElement?.id) { + activeElement = ctx.target.querySelector(`#${activeElementId}`); + activeElement?.focus(); + } + if (activeElement && !activeElement.selectionEnd && selectionEnd) { + activeElement.setSelectionRange(selectionStart, selectionEnd); + } + return results; + } + const morphChildren2 = /* @__PURE__ */ function() { + function morphChildren3(ctx, oldParent, newParent, insertionPoint = null, endPoint = null) { + if (oldParent instanceof HTMLTemplateElement && newParent instanceof HTMLTemplateElement) { + oldParent = oldParent.content; + newParent = newParent.content; + } + insertionPoint ||= oldParent.firstChild; + for (const newChild of newParent.childNodes) { + if (insertionPoint && insertionPoint != endPoint) { + const bestMatch = findBestMatch( + ctx, + newChild, + insertionPoint, + endPoint + ); + if (bestMatch) { + if (bestMatch !== insertionPoint) { + removeNodesBetween(ctx, insertionPoint, bestMatch); + } + morphNode(bestMatch, newChild, ctx); + insertionPoint = bestMatch.nextSibling; + continue; + } + } + if (newChild instanceof Element && ctx.persistentIds.has(newChild.id)) { + const movedChild = moveBeforeById( + oldParent, + newChild.id, + insertionPoint, + ctx + ); + morphNode(movedChild, newChild, ctx); + insertionPoint = movedChild.nextSibling; + continue; + } + const insertedNode = createNode( + oldParent, + newChild, + insertionPoint, + ctx + ); + if (insertedNode) { + insertionPoint = insertedNode.nextSibling; + } + } + while (insertionPoint && insertionPoint != endPoint) { + const tempNode = insertionPoint; + insertionPoint = insertionPoint.nextSibling; + removeNode(ctx, tempNode); + } } - let normalizedContent = normalizeContent(newContent); - let ctx = createMorphContext(oldNode, normalizedContent, config2); - return morphNormalizedContent(oldNode, normalizedContent, ctx); - } - function morphNormalizedContent(oldNode, normalizedNewContent, ctx) { - if (ctx.head.block) { - let oldHead = oldNode.querySelector("head"); - let newHead = normalizedNewContent.querySelector("head"); - if (oldHead && newHead) { - let promises = handleHeadElement(newHead, oldHead, ctx); - Promise.all(promises).then(function() { - morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, { - head: { - block: false, - ignore: true + function createNode(oldParent, newChild, insertionPoint, ctx) { + if (ctx.callbacks.beforeNodeAdded(newChild) === false) + return null; + if (ctx.idMap.has(newChild)) { + const newEmptyChild = document.createElement( + /** @type {Element} */ + newChild.tagName + ); + oldParent.insertBefore(newEmptyChild, insertionPoint); + morphNode(newEmptyChild, newChild, ctx); + ctx.callbacks.afterNodeAdded(newEmptyChild); + return newEmptyChild; + } else { + const newClonedChild = document.importNode(newChild, true); + oldParent.insertBefore(newClonedChild, insertionPoint); + ctx.callbacks.afterNodeAdded(newClonedChild); + return newClonedChild; + } + } + const findBestMatch = /* @__PURE__ */ function() { + function findBestMatch2(ctx, node, startPoint, endPoint) { + let softMatch = null; + let nextSibling = node.nextSibling; + let siblingSoftMatchCount = 0; + let cursor = startPoint; + while (cursor && cursor != endPoint) { + if (isSoftMatch(cursor, node)) { + if (isIdSetMatch(ctx, cursor, node)) { + return cursor; } - })); - }); - return; + if (softMatch === null) { + if (!ctx.idMap.has(cursor)) { + softMatch = cursor; + } + } + } + if (softMatch === null && nextSibling && isSoftMatch(cursor, nextSibling)) { + siblingSoftMatchCount++; + nextSibling = nextSibling.nextSibling; + if (siblingSoftMatchCount >= 2) { + softMatch = void 0; + } + } + if (cursor.contains(document.activeElement)) + break; + cursor = cursor.nextSibling; + } + return softMatch || null; + } + function isIdSetMatch(ctx, oldNode, newNode) { + let oldSet = ctx.idMap.get(oldNode); + let newSet = ctx.idMap.get(newNode); + if (!newSet || !oldSet) + return false; + for (const id12 of oldSet) { + if (newSet.has(id12)) { + return true; + } + } + return false; + } + function isSoftMatch(oldNode, newNode) { + const oldElt = ( + /** @type {Element} */ + oldNode + ); + const newElt = ( + /** @type {Element} */ + newNode + ); + return oldElt.nodeType === newElt.nodeType && oldElt.tagName === newElt.tagName && // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing. + // We'll still match an anonymous node with an IDed newElt, though, because if it got this far, + // its not persistent, and new nodes can't have any hidden state. + (!oldElt.id || oldElt.id === newElt.id); + } + return findBestMatch2; + }(); + function removeNode(ctx, node) { + if (ctx.idMap.has(node)) { + moveBefore(ctx.pantry, node, null); + } else { + if (ctx.callbacks.beforeNodeRemoved(node) === false) + return; + node.parentNode?.removeChild(node); + ctx.callbacks.afterNodeRemoved(node); + } + } + function removeNodesBetween(ctx, startInclusive, endExclusive) { + let cursor = startInclusive; + while (cursor && cursor !== endExclusive) { + let tempNode = ( + /** @type {Node} */ + cursor + ); + cursor = cursor.nextSibling; + removeNode(ctx, tempNode); + } + return cursor; + } + function moveBeforeById(parentNode, id12, after, ctx) { + const target = ( + /** @type {Element} - will always be found */ + ctx.target.querySelector(`#${id12}`) || ctx.pantry.querySelector(`#${id12}`) + ); + removeElementFromAncestorsIdMaps(target, ctx); + moveBefore(parentNode, target, after); + return target; + } + function removeElementFromAncestorsIdMaps(element, ctx) { + const id12 = element.id; + while (element = element.parentNode) { + let idSet = ctx.idMap.get(element); + if (idSet) { + idSet.delete(id12); + if (!idSet.size) { + ctx.idMap.delete(element); + } + } } } - if (ctx.morphStyle === "innerHTML") { - morphChildren2(normalizedNewContent, oldNode, ctx); - return oldNode.children; - } else if (ctx.morphStyle === "outerHTML" || ctx.morphStyle == null) { - let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx); - let previousSibling = bestMatch?.previousSibling; - let nextSibling = bestMatch?.nextSibling; - let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx); - if (bestMatch) { - return insertSiblings(previousSibling, morphedNode, nextSibling); + function moveBefore(parentNode, element, after) { + if (parentNode.moveBefore) { + try { + parentNode.moveBefore(element, after); + } catch (e4) { + parentNode.insertBefore(element, after); + } } else { - return []; + parentNode.insertBefore(element, after); } - } else { - throw "Do not understand how to morph style " + ctx.morphStyle; } - } - function ignoreValueOfActiveElement(possibleActiveElement, ctx) { - return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body; - } - function morphOldNodeTo(oldNode, newContent, ctx) { - if (ctx.ignoreActive && oldNode === document.activeElement) - ; - else if (newContent == null) { - if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) - return oldNode; - oldNode.remove(); - ctx.callbacks.afterNodeRemoved(oldNode); - return null; - } else if (!isSoftMatch(oldNode, newContent)) { - if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) - return oldNode; - if (ctx.callbacks.beforeNodeAdded(newContent) === false) - return oldNode; - oldNode.parentElement.replaceChild(newContent, oldNode); - ctx.callbacks.afterNodeAdded(newContent); - ctx.callbacks.afterNodeRemoved(oldNode); - return newContent; - } else { - if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) + return morphChildren3; + }(); + const morphNode = /* @__PURE__ */ function() { + function morphNode2(oldNode, newContent, ctx) { + if (ctx.ignoreActive && oldNode === document.activeElement) { + return null; + } + if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) { return oldNode; + } if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== "morph") { - handleHeadElement(newContent, oldNode, ctx); + handleHeadElement( + oldNode, + /** @type {HTMLHeadElement} */ + newContent, + ctx + ); } else { - syncNodeFrom(newContent, oldNode, ctx); + morphAttributes(oldNode, newContent, ctx); if (!ignoreValueOfActiveElement(oldNode, ctx)) { - morphChildren2(newContent, oldNode, ctx); + morphChildren2(ctx, oldNode, newContent); } } ctx.callbacks.afterNodeMorphed(oldNode, newContent); return oldNode; } - } - function morphChildren2(newParent, oldParent, ctx) { - let nextNewChild = newParent.firstChild; - let insertionPoint = oldParent.firstChild; - let newChild; - while (nextNewChild) { - newChild = nextNewChild; - nextNewChild = newChild.nextSibling; - if (insertionPoint == null) { - if (ctx.callbacks.beforeNodeAdded(newChild) === false) - return; - oldParent.appendChild(newChild); - ctx.callbacks.afterNodeAdded(newChild); - removeIdsFromConsideration(ctx, newChild); - continue; - } - if (isIdSetMatch(newChild, insertionPoint, ctx)) { - morphOldNodeTo(insertionPoint, newChild, ctx); - insertionPoint = insertionPoint.nextSibling; - removeIdsFromConsideration(ctx, newChild); - continue; - } - let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx); - if (idSetMatch) { - insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx); - morphOldNodeTo(idSetMatch, newChild, ctx); - removeIdsFromConsideration(ctx, newChild); - continue; + function morphAttributes(oldNode, newNode, ctx) { + let type = newNode.nodeType; + if (type === 1) { + const oldElt = ( + /** @type {Element} */ + oldNode + ); + const newElt = ( + /** @type {Element} */ + newNode + ); + const oldAttributes = oldElt.attributes; + const newAttributes = newElt.attributes; + for (const newAttribute of newAttributes) { + if (ignoreAttribute(newAttribute.name, oldElt, "update", ctx)) { + continue; + } + if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) { + oldElt.setAttribute(newAttribute.name, newAttribute.value); + } + } + for (let i4 = oldAttributes.length - 1; 0 <= i4; i4--) { + const oldAttribute = oldAttributes[i4]; + if (!oldAttribute) + continue; + if (!newElt.hasAttribute(oldAttribute.name)) { + if (ignoreAttribute(oldAttribute.name, oldElt, "remove", ctx)) { + continue; + } + oldElt.removeAttribute(oldAttribute.name); + } + } + if (!ignoreValueOfActiveElement(oldElt, ctx)) { + syncInputValue(oldElt, newElt, ctx); + } } - let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx); - if (softMatch) { - insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx); - morphOldNodeTo(softMatch, newChild, ctx); - removeIdsFromConsideration(ctx, newChild); - continue; + if (type === 8 || type === 3) { + if (oldNode.nodeValue !== newNode.nodeValue) { + oldNode.nodeValue = newNode.nodeValue; + } } - if (ctx.callbacks.beforeNodeAdded(newChild) === false) - return; - oldParent.insertBefore(newChild, insertionPoint); - ctx.callbacks.afterNodeAdded(newChild); - removeIdsFromConsideration(ctx, newChild); - } - while (insertionPoint !== null) { - let tempNode = insertionPoint; - insertionPoint = insertionPoint.nextSibling; - removeNode(tempNode, ctx); } - } - function ignoreAttribute(attr, to, updateType, ctx) { - if (attr === "value" && ctx.ignoreActiveValue && to === document.activeElement) { - return true; - } - return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false; - } - function syncNodeFrom(from, to, ctx) { - let type = from.nodeType; - if (type === 1) { - const fromAttributes = from.attributes; - const toAttributes = to.attributes; - for (const fromAttribute of fromAttributes) { - if (ignoreAttribute(fromAttribute.name, to, "update", ctx)) { - continue; + function syncInputValue(oldElement, newElement, ctx) { + if (oldElement instanceof HTMLInputElement && newElement instanceof HTMLInputElement && newElement.type !== "file") { + let newValue = newElement.value; + let oldValue = oldElement.value; + syncBooleanAttribute(oldElement, newElement, "checked", ctx); + syncBooleanAttribute(oldElement, newElement, "disabled", ctx); + if (!newElement.hasAttribute("value")) { + if (!ignoreAttribute("value", oldElement, "remove", ctx)) { + oldElement.value = ""; + oldElement.removeAttribute("value"); + } + } else if (oldValue !== newValue) { + if (!ignoreAttribute("value", oldElement, "update", ctx)) { + oldElement.setAttribute("value", newValue); + oldElement.value = newValue; + } } - if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) { - to.setAttribute(fromAttribute.name, fromAttribute.value); + } else if (oldElement instanceof HTMLOptionElement && newElement instanceof HTMLOptionElement) { + syncBooleanAttribute(oldElement, newElement, "selected", ctx); + } else if (oldElement instanceof HTMLTextAreaElement && newElement instanceof HTMLTextAreaElement) { + let newValue = newElement.value; + let oldValue = oldElement.value; + if (ignoreAttribute("value", oldElement, "update", ctx)) { + return; } - } - for (let i4 = toAttributes.length - 1; 0 <= i4; i4--) { - const toAttribute = toAttributes[i4]; - if (ignoreAttribute(toAttribute.name, to, "remove", ctx)) { - continue; + if (newValue !== oldValue) { + oldElement.value = newValue; } - if (!from.hasAttribute(toAttribute.name)) { - to.removeAttribute(toAttribute.name); + if (oldElement.firstChild && oldElement.firstChild.nodeValue !== newValue) { + oldElement.firstChild.nodeValue = newValue; } } } - if (type === 8 || type === 3) { - if (to.nodeValue !== from.nodeValue) { - to.nodeValue = from.nodeValue; - } - } - if (!ignoreValueOfActiveElement(to, ctx)) { - syncInputValue(from, to, ctx); - } - } - function syncBooleanAttribute(from, to, attributeName, ctx) { - if (from[attributeName] !== to[attributeName]) { - let ignoreUpdate = ignoreAttribute(attributeName, to, "update", ctx); - if (!ignoreUpdate) { - to[attributeName] = from[attributeName]; - } - if (from[attributeName]) { + function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) { + const newLiveValue = newElement[attributeName], oldLiveValue = oldElement[attributeName]; + if (newLiveValue !== oldLiveValue) { + const ignoreUpdate = ignoreAttribute( + attributeName, + oldElement, + "update", + ctx + ); if (!ignoreUpdate) { - to.setAttribute(attributeName, from[attributeName]); + oldElement[attributeName] = newElement[attributeName]; } - } else { - if (!ignoreAttribute(attributeName, to, "remove", ctx)) { - to.removeAttribute(attributeName); + if (newLiveValue) { + if (!ignoreUpdate) { + oldElement.setAttribute(attributeName, ""); + } + } else { + if (!ignoreAttribute(attributeName, oldElement, "remove", ctx)) { + oldElement.removeAttribute(attributeName); + } } } } - } - function syncInputValue(from, to, ctx) { - if (from instanceof HTMLInputElement && to instanceof HTMLInputElement && from.type !== "file") { - let fromValue = from.value; - let toValue = to.value; - syncBooleanAttribute(from, to, "checked", ctx); - syncBooleanAttribute(from, to, "disabled", ctx); - if (!from.hasAttribute("value")) { - if (!ignoreAttribute("value", to, "remove", ctx)) { - to.value = ""; - to.removeAttribute("value"); - } - } else if (fromValue !== toValue) { - if (!ignoreAttribute("value", to, "update", ctx)) { - to.setAttribute("value", fromValue); - to.value = fromValue; - } - } - } else if (from instanceof HTMLOptionElement) { - syncBooleanAttribute(from, to, "selected", ctx); - } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) { - let fromValue = from.value; - let toValue = to.value; - if (ignoreAttribute("value", to, "update", ctx)) { - return; - } - if (fromValue !== toValue) { - to.value = fromValue; + function ignoreAttribute(attr, element, updateType, ctx) { + if (attr === "value" && ctx.ignoreActiveValue && element === document.activeElement) { + return true; } - if (to.firstChild && to.firstChild.nodeValue !== fromValue) { - to.firstChild.nodeValue = fromValue; + return ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) === false; + } + function ignoreValueOfActiveElement(possibleActiveElement, ctx) { + return !!ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body; + } + return morphNode2; + }(); + function withHeadBlocking(ctx, oldNode, newNode, callback) { + if (ctx.head.block) { + const oldHead = oldNode.querySelector("head"); + const newHead = newNode.querySelector("head"); + if (oldHead && newHead) { + const promises = handleHeadElement(oldHead, newHead, ctx); + return Promise.all(promises).then(() => { + const newCtx = Object.assign(ctx, { + head: { + block: false, + ignore: true + } + }); + return callback(newCtx); + }); } } + return callback(ctx); } - function handleHeadElement(newHeadTag, currentHead, ctx) { + function handleHeadElement(oldHead, newHead, ctx) { let added = []; let removed = []; let preserved = []; let nodesToAppend = []; - let headMergeStyle = ctx.head.style; let srcToNewHeadNodes = /* @__PURE__ */ new Map(); - for (const newHeadChild of newHeadTag.children) { + for (const newHeadChild of newHead.children) { srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild); } - for (const currentHeadElt of currentHead.children) { + for (const currentHeadElt of oldHead.children) { let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML); let isReAppended = ctx.head.shouldReAppend(currentHeadElt); let isPreserved = ctx.head.shouldPreserve(currentHeadElt); @@ -5409,7 +5588,7 @@ preserved.push(currentHeadElt); } } else { - if (headMergeStyle === "append") { + if (ctx.head.style === "append") { if (isReAppended) { removed.push(currentHeadElt); nodesToAppend.push(currentHeadElt); @@ -5424,10 +5603,13 @@ nodesToAppend.push(...srcToNewHeadNodes.values()); let promises = []; for (const newNode of nodesToAppend) { - let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild; + let newElt = ( + /** @type {ChildNode} */ + document.createRange().createContextualFragment(newNode.outerHTML).firstChild + ); if (ctx.callbacks.beforeNodeAdded(newElt) !== false) { - if (newElt.href || newElt.src) { - let resolve = null; + if ("href" in newElt && newElt.href || "src" in newElt && newElt.src) { + let resolve; let promise = new Promise(function(_resolve) { resolve = _resolve; }); @@ -5436,256 +5618,217 @@ }); promises.push(promise); } - currentHead.appendChild(newElt); + oldHead.appendChild(newElt); ctx.callbacks.afterNodeAdded(newElt); added.push(newElt); } } for (const removedElement of removed) { if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) { - currentHead.removeChild(removedElement); + oldHead.removeChild(removedElement); ctx.callbacks.afterNodeRemoved(removedElement); } } - ctx.head.afterHeadMorphed(currentHead, { added, kept: preserved, removed }); + ctx.head.afterHeadMorphed(oldHead, { + added, + kept: preserved, + removed + }); return promises; } - function noOp() { - } - function mergeDefaults(config2) { - let finalConfig = {}; - Object.assign(finalConfig, defaults); - Object.assign(finalConfig, config2); - finalConfig.callbacks = {}; - Object.assign(finalConfig.callbacks, defaults.callbacks); - Object.assign(finalConfig.callbacks, config2.callbacks); - finalConfig.head = {}; - Object.assign(finalConfig.head, defaults.head); - Object.assign(finalConfig.head, config2.head); - return finalConfig; - } - function createMorphContext(oldNode, newContent, config2) { - config2 = mergeDefaults(config2); - return { - target: oldNode, - newContent, - config: config2, - morphStyle: config2.morphStyle, - ignoreActive: config2.ignoreActive, - ignoreActiveValue: config2.ignoreActiveValue, - idMap: createIdMap(oldNode, newContent), - deadIds: /* @__PURE__ */ new Set(), - callbacks: config2.callbacks, - head: config2.head - }; - } - function isIdSetMatch(node1, node2, ctx) { - if (node1 == null || node2 == null) { - return false; - } - if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) { - if (node1.id !== "" && node1.id === node2.id) { - return true; - } else { - return getIdIntersectionCount(ctx, node1, node2) > 0; + const createMorphContext = /* @__PURE__ */ function() { + function createMorphContext2(oldNode, newContent, config2) { + const { persistentIds, idMap } = createIdMaps(oldNode, newContent); + const mergedConfig = mergeDefaults(config2); + const morphStyle = mergedConfig.morphStyle || "outerHTML"; + if (!["innerHTML", "outerHTML"].includes(morphStyle)) { + throw `Do not understand how to morph style ${morphStyle}`; } + return { + target: oldNode, + newContent, + config: mergedConfig, + morphStyle, + ignoreActive: mergedConfig.ignoreActive, + ignoreActiveValue: mergedConfig.ignoreActiveValue, + restoreFocus: mergedConfig.restoreFocus, + idMap, + persistentIds, + pantry: createPantry(), + callbacks: mergedConfig.callbacks, + head: mergedConfig.head + }; } - return false; - } - function isSoftMatch(node1, node2) { - if (node1 == null || node2 == null) { - return false; - } - return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName; - } - function removeNodesBetween(startInclusive, endExclusive, ctx) { - while (startInclusive !== endExclusive) { - let tempNode = startInclusive; - startInclusive = startInclusive.nextSibling; - removeNode(tempNode, ctx); - } - removeIdsFromConsideration(ctx, endExclusive); - return endExclusive.nextSibling; - } - function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) { - let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent); - let potentialMatch = null; - if (newChildPotentialIdCount > 0) { - let potentialMatch2 = insertionPoint; - let otherMatchCount = 0; - while (potentialMatch2 != null) { - if (isIdSetMatch(newChild, potentialMatch2, ctx)) { - return potentialMatch2; - } - otherMatchCount += getIdIntersectionCount(ctx, potentialMatch2, newContent); - if (otherMatchCount > newChildPotentialIdCount) { - return null; + function mergeDefaults(config2) { + let finalConfig = Object.assign({}, defaults); + Object.assign(finalConfig, config2); + finalConfig.callbacks = Object.assign( + {}, + defaults.callbacks, + config2.callbacks + ); + finalConfig.head = Object.assign({}, defaults.head, config2.head); + return finalConfig; + } + function createPantry() { + const pantry = document.createElement("div"); + pantry.hidden = true; + document.body.insertAdjacentElement("afterend", pantry); + return pantry; + } + function findIdElements(root) { + let elements = Array.from(root.querySelectorAll("[id]")); + if (root.id) { + elements.push(root); + } + return elements; + } + function populateIdMapWithTree(idMap, persistentIds, root, elements) { + for (const elt of elements) { + if (persistentIds.has(elt.id)) { + let current = elt; + while (current) { + let idSet = idMap.get(current); + if (idSet == null) { + idSet = /* @__PURE__ */ new Set(); + idMap.set(current, idSet); + } + idSet.add(elt.id); + if (current === root) + break; + current = current.parentElement; + } } - potentialMatch2 = potentialMatch2.nextSibling; } } - return potentialMatch; - } - function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) { - let potentialSoftMatch = insertionPoint; - let nextSibling = newChild.nextSibling; - let siblingSoftMatchCount = 0; - while (potentialSoftMatch != null) { - if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) { - return null; - } - if (isSoftMatch(newChild, potentialSoftMatch)) { - return potentialSoftMatch; - } - if (isSoftMatch(nextSibling, potentialSoftMatch)) { - siblingSoftMatchCount++; - nextSibling = nextSibling.nextSibling; - if (siblingSoftMatchCount >= 2) { - return null; - } - } - potentialSoftMatch = potentialSoftMatch.nextSibling; + function createIdMaps(oldContent, newContent) { + const oldIdElements = findIdElements(oldContent); + const newIdElements = findIdElements(newContent); + const persistentIds = createPersistentIds(oldIdElements, newIdElements); + let idMap = /* @__PURE__ */ new Map(); + populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements); + const newRoot = newContent.__idiomorphRoot || newContent; + populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements); + return { persistentIds, idMap }; } - return potentialSoftMatch; - } - function parseContent(newContent) { - let parser2 = new DOMParser(); - let contentWithSvgsRemoved = newContent.replace(/]*>|>)([\s\S]*?)<\/svg>/gim, ""); - if (contentWithSvgsRemoved.match(/<\/html>/) || contentWithSvgsRemoved.match(/<\/head>/) || contentWithSvgsRemoved.match(/<\/body>/)) { - let content = parser2.parseFromString(newContent, "text/html"); - if (contentWithSvgsRemoved.match(/<\/html>/)) { - content.generatedByIdiomorph = true; - return content; - } else { - let htmlElement = content.firstChild; - if (htmlElement) { - htmlElement.generatedByIdiomorph = true; - return htmlElement; + function createPersistentIds(oldIdElements, newIdElements) { + let duplicateIds = /* @__PURE__ */ new Set(); + let oldIdTagNameMap = /* @__PURE__ */ new Map(); + for (const { id: id12, tagName } of oldIdElements) { + if (oldIdTagNameMap.has(id12)) { + duplicateIds.add(id12); } else { - return null; + oldIdTagNameMap.set(id12, tagName); } } - } else { - let responseDoc = parser2.parseFromString("", "text/html"); - let content = responseDoc.body.querySelector("template").content; - content.generatedByIdiomorph = true; - return content; - } - } - function normalizeContent(newContent) { - if (newContent == null) { - const dummyParent = document.createElement("div"); - return dummyParent; - } else if (newContent.generatedByIdiomorph) { - return newContent; - } else if (newContent instanceof Node) { - const dummyParent = document.createElement("div"); - dummyParent.append(newContent); - return dummyParent; - } else { - const dummyParent = document.createElement("div"); - for (const elt of [...newContent]) { - dummyParent.append(elt); + let persistentIds = /* @__PURE__ */ new Set(); + for (const { id: id12, tagName } of newIdElements) { + if (persistentIds.has(id12)) { + duplicateIds.add(id12); + } else if (oldIdTagNameMap.get(id12) === tagName) { + persistentIds.add(id12); + } } - return dummyParent; - } - } - function insertSiblings(previousSibling, morphedNode, nextSibling) { - let stack = []; - let added = []; - while (previousSibling != null) { - stack.push(previousSibling); - previousSibling = previousSibling.previousSibling; - } - while (stack.length > 0) { - let node = stack.pop(); - added.push(node); - morphedNode.parentElement.insertBefore(node, morphedNode); - } - added.push(morphedNode); - while (nextSibling != null) { - stack.push(nextSibling); - added.push(nextSibling); - nextSibling = nextSibling.nextSibling; - } - while (stack.length > 0) { - morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling); - } - return added; - } - function findBestNodeMatch(newContent, oldNode, ctx) { - let currentElement; - currentElement = newContent.firstChild; - let bestElement = currentElement; - let score = 0; - while (currentElement) { - let newScore = scoreElement(currentElement, oldNode, ctx); - if (newScore > score) { - bestElement = currentElement; - score = newScore; + for (const id12 of duplicateIds) { + persistentIds.delete(id12); } - currentElement = currentElement.nextSibling; - } - return bestElement; - } - function scoreElement(node1, node2, ctx) { - if (isSoftMatch(node1, node2)) { - return 0.5 + getIdIntersectionCount(ctx, node1, node2); + return persistentIds; } - return 0; - } - function removeNode(tempNode, ctx) { - removeIdsFromConsideration(ctx, tempNode); - if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) - return; - tempNode.remove(); - ctx.callbacks.afterNodeRemoved(tempNode); - } - function isIdInConsideration(ctx, id12) { - return !ctx.deadIds.has(id12); - } - function idIsWithinNode(ctx, id12, targetNode) { - let idSet = ctx.idMap.get(targetNode) || EMPTY_SET; - return idSet.has(id12); - } - function removeIdsFromConsideration(ctx, node) { - let idSet = ctx.idMap.get(node) || EMPTY_SET; - for (const id12 of idSet) { - ctx.deadIds.add(id12); + return createMorphContext2; + }(); + const { normalizeElement, normalizeParent } = /* @__PURE__ */ function() { + const generatedByIdiomorph = /* @__PURE__ */ new WeakSet(); + function normalizeElement2(content) { + if (content instanceof Document) { + return content.documentElement; + } else { + return content; + } } - } - function getIdIntersectionCount(ctx, node1, node2) { - let sourceSet = ctx.idMap.get(node1) || EMPTY_SET; - let matchCount = 0; - for (const id12 of sourceSet) { - if (isIdInConsideration(ctx, id12) && idIsWithinNode(ctx, id12, node2)) { - ++matchCount; + function normalizeParent2(newContent) { + if (newContent == null) { + return document.createElement("div"); + } else if (typeof newContent === "string") { + return normalizeParent2(parseContent(newContent)); + } else if (generatedByIdiomorph.has( + /** @type {Element} */ + newContent + )) { + return ( + /** @type {Element} */ + newContent + ); + } else if (newContent instanceof Node) { + if (newContent.parentNode) { + return createDuckTypedParent(newContent); + } else { + const dummyParent = document.createElement("div"); + dummyParent.append(newContent); + return dummyParent; + } + } else { + const dummyParent = document.createElement("div"); + for (const elt of [...newContent]) { + dummyParent.append(elt); + } + return dummyParent; } } - return matchCount; - } - function populateIdMapForNode(node, idMap) { - let nodeParent = node.parentElement; - let idElements = node.querySelectorAll("[id]"); - for (const elt of idElements) { - let current = elt; - while (current !== nodeParent && current != null) { - let idSet = idMap.get(current); - if (idSet == null) { - idSet = /* @__PURE__ */ new Set(); - idMap.set(current, idSet); + function createDuckTypedParent(newContent) { + return ( + /** @type {Element} */ + /** @type {unknown} */ + { + childNodes: [newContent], + /** @ts-ignore - cover your eyes for a minute, tsc */ + querySelectorAll: (s4) => { + const elements = newContent.querySelectorAll(s4); + return newContent.matches(s4) ? [newContent, ...elements] : elements; + }, + /** @ts-ignore */ + insertBefore: (n3, r4) => newContent.parentNode.insertBefore(n3, r4), + /** @ts-ignore */ + moveBefore: (n3, r4) => newContent.parentNode.moveBefore(n3, r4), + // for later use with populateIdMapWithTree to halt upwards iteration + get __idiomorphRoot() { + return newContent; + } + } + ); + } + function parseContent(newContent) { + let parser2 = new DOMParser(); + let contentWithSvgsRemoved = newContent.replace( + /]*>|>)([\s\S]*?)<\/svg>/gim, + "" + ); + if (contentWithSvgsRemoved.match(/<\/html>/) || contentWithSvgsRemoved.match(/<\/head>/) || contentWithSvgsRemoved.match(/<\/body>/)) { + let content = parser2.parseFromString(newContent, "text/html"); + if (contentWithSvgsRemoved.match(/<\/html>/)) { + generatedByIdiomorph.add(content); + return content; + } else { + let htmlElement = content.firstChild; + if (htmlElement) { + generatedByIdiomorph.add(htmlElement); + } + return htmlElement; } - idSet.add(elt.id); - current = current.parentElement; + } else { + let responseDoc = parser2.parseFromString( + "", + "text/html" + ); + let content = ( + /** @type {HTMLTemplateElement} */ + responseDoc.body.querySelector("template").content + ); + generatedByIdiomorph.add(content); + return content; } } - } - function createIdMap(oldContent, newContent) { - let idMap = /* @__PURE__ */ new Map(); - populateIdMapForNode(oldContent, idMap); - populateIdMapForNode(newContent, idMap); - return idMap; - } + return { normalizeElement: normalizeElement2, normalizeParent: normalizeParent2 }; + }(); return { morph, defaults @@ -5698,7 +5841,7 @@ }); } function morphChildren(currentElement, newElement) { - morphElements(currentElement, newElement.children, { + morphElements(currentElement, newElement.childNodes, { morphStyle: "innerHTML" }); } @@ -6362,15 +6505,6 @@ return { ...this.timingMetrics }; } // Private - getHistoryMethodForAction(action) { - switch (action) { - case "replace": - return history.replaceState; - case "advance": - case "restore": - return history.pushState; - } - } hasPreloadedResponse() { return typeof this.response == "object"; } @@ -6472,6 +6606,10 @@ } visitRendered(_visit) { } + // Link prefetching + linkPrefetchingIsEnabledForLocation(location2) { + return true; + } // Form Submission Delegate formSubmissionStarted(_formSubmission) { this.progressBar.setValue(0); @@ -6949,6 +7087,13 @@ this.adapter.formSubmissionFinished(formSubmission); } } + // Link prefetching + linkPrefetchingIsEnabledForLocation(location2) { + if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === "function") { + return this.adapter.linkPrefetchingIsEnabledForLocation(location2); + } + return true; + } // Visit delegate visitStarted(visit2) { this.delegate.visitStarted(visit2); @@ -7564,7 +7709,7 @@ const responseHTML = await fetchResponse.responseHTML; const snapshot = PageSnapshot.fromHTMLString(responseHTML); this.snapshotCache.put(fetchRequest.url, snapshot); - } catch (_3) { + } catch (_4) { } } requestStarted(fetchRequest) { @@ -7677,7 +7822,8 @@ } refresh(url, requestId) { const isRecentRequest = requestId && this.recentRequests.has(requestId); - if (!isRecentRequest && !this.navigator.currentVisit) { + const isCurrentUrl = url === document.baseURI; + if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) { this.visit(url, { action: "replace", shouldCacheSnapshot: false }); } } @@ -7769,7 +7915,7 @@ } // Link hover observer delegate canPrefetchRequestToLocation(link2, location2) { - return this.elementIsNavigatable(link2) && locationIsVisitable(location2, this.snapshot.rootLocation); + return this.elementIsNavigatable(link2) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.navigator.linkPrefetchingIsEnabledForLocation(location2); } // Link click observer delegate willFollowLinkToLocation(link2, location2, event) { @@ -8578,9 +8724,9 @@ * Gets the list of duplicate children (i.e. those with the same ID) */ get duplicateChildren() { - const existingChildren = this.targetElements.flatMap((e4) => [...e4.children]).filter((c4) => !!c4.id); - const newChildrenIds = [...this.templateContent?.children || []].filter((c4) => !!c4.id).map((c4) => c4.id); - return existingChildren.filter((c4) => newChildrenIds.includes(c4.id)); + const existingChildren = this.targetElements.flatMap((e4) => [...e4.children]).filter((c4) => !!c4.getAttribute("id")); + const newChildrenIds = [...this.templateContent?.children || []].filter((c4) => !!c4.getAttribute("id")).map((c4) => c4.getAttribute("id")); + return existingChildren.filter((c4) => newChildrenIds.includes(c4.getAttribute("id"))); } /** * Gets the action function to be performed. @@ -8930,7 +9076,7 @@ } } function camelize(value) { - return value.replace(/(?:[_-])([a-z0-9])/g, (_3, char) => char.toUpperCase()); + return value.replace(/(?:[_-])([a-z0-9])/g, (_4, char) => char.toUpperCase()); } function namespaceCamelize(value) { return camelize(value.replace(/--/g, "-").replace(/__/g, "_")); @@ -8939,7 +9085,7 @@ return value.charAt(0).toUpperCase() + value.slice(1); } function dasherize(value) { - return value.replace(/([A-Z])/g, (_3, char) => `-${char.toLowerCase()}`); + return value.replace(/([A-Z])/g, (_4, char) => `-${char.toLowerCase()}`); } function tokenize(value) { return value.match(/[^\s]+/g) || []; @@ -9628,7 +9774,7 @@ } function zip(left2, right2) { const length = Math.max(left2.length, right2.length); - return Array.from({ length }, (_3, index) => [left2[index], right2[index]]); + return Array.from({ length }, (_4, index) => [left2[index], right2[index]]); } function tokensAreEqual(left2, right2) { return left2 && right2 && left2.index == right2.index && left2.content == right2.content; @@ -11576,7 +11722,7 @@ } var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport; var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; - var x3 = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; + var x4 = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; var y4 = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; var width = clientRect.width / scaleX; var height = clientRect.height / scaleY; @@ -11584,10 +11730,10 @@ width, height, top: y4, - right: x3 + width, + right: x4 + width, bottom: y4 + height, - left: x3, - x: x3, + left: x4, + x: x4, y: y4 }; } @@ -11818,25 +11964,25 @@ left: "auto" }; function roundOffsetsByDPR(_ref, win) { - var x3 = _ref.x, y4 = _ref.y; + var x4 = _ref.x, y4 = _ref.y; var dpr = win.devicePixelRatio || 1; return { - x: round(x3 * dpr) / dpr || 0, + x: round(x4 * dpr) / dpr || 0, y: round(y4 * dpr) / dpr || 0 }; } function mapToStyles(_ref2) { var _Object$assign2; var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed; - var _offsets$x = offsets.x, x3 = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y4 = _offsets$y === void 0 ? 0 : _offsets$y; + var _offsets$x = offsets.x, x4 = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y4 = _offsets$y === void 0 ? 0 : _offsets$y; var _ref3 = typeof roundOffsets === "function" ? roundOffsets({ - x: x3, + x: x4, y: y4 }) : { - x: x3, + x: x4, y: y4 }; - x3 = _ref3.x; + x4 = _ref3.x; y4 = _ref3.y; var hasX = offsets.hasOwnProperty("x"); var hasY = offsets.hasOwnProperty("y"); @@ -11870,27 +12016,27 @@ // $FlowFixMe[prop-missing] offsetParent[widthProp] ); - x3 -= offsetX - popperRect.width; - x3 *= gpuAcceleration ? 1 : -1; + x4 -= offsetX - popperRect.width; + x4 *= gpuAcceleration ? 1 : -1; } } var commonStyles = Object.assign({ position }, adaptive && unsetSides); var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ - x: x3, + x: x4, y: y4 }, getWindow(popper2)) : { - x: x3, + x: x4, y: y4 }; - x3 = _ref4.x; + x4 = _ref4.x; y4 = _ref4.y; if (gpuAcceleration) { var _Object$assign; - return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x3 + "px, " + y4 + "px)" : "translate3d(" + x3 + "px, " + y4 + "px, 0)", _Object$assign)); + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x4 + "px, " + y4 + "px)" : "translate3d(" + x4 + "px, " + y4 + "px, 0)", _Object$assign)); } - return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y4 + "px" : "", _Object$assign2[sideX] = hasX ? x3 + "px" : "", _Object$assign2.transform = "", _Object$assign2)); + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y4 + "px" : "", _Object$assign2[sideX] = hasX ? x4 + "px" : "", _Object$assign2.transform = "", _Object$assign2)); } function computeStyles(_ref5) { var state = _ref5.state, options2 = _ref5.options; @@ -12016,21 +12162,21 @@ var visualViewport = win.visualViewport; var width = html3.clientWidth; var height = html3.clientHeight; - var x3 = 0; + var x4 = 0; var y4 = 0; if (visualViewport) { width = visualViewport.width; height = visualViewport.height; var layoutViewport = isLayoutViewport(); if (layoutViewport || !layoutViewport && strategy === "fixed") { - x3 = visualViewport.offsetLeft; + x4 = visualViewport.offsetLeft; y4 = visualViewport.offsetTop; } } return { width, height, - x: x3 + getWindowScrollBarX(element), + x: x4 + getWindowScrollBarX(element), y: y4 }; } @@ -12043,15 +12189,15 @@ var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; var width = max(html3.scrollWidth, html3.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); var height = max(html3.scrollHeight, html3.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); - var x3 = -winScroll.scrollLeft + getWindowScrollBarX(element); + var x4 = -winScroll.scrollLeft + getWindowScrollBarX(element); var y4 = -winScroll.scrollTop; if (getComputedStyle2(body || html3).direction === "rtl") { - x3 += max(html3.clientWidth, body ? body.clientWidth : 0) - width; + x4 += max(html3.clientWidth, body ? body.clientWidth : 0) - width; } return { width, height, - x: x3, + x: x4, y: y4 }; } @@ -12453,9 +12599,9 @@ acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2); return acc; }, {}); - var _data$state$placement = data[state.placement], x3 = _data$state$placement.x, y4 = _data$state$placement.y; + var _data$state$placement = data[state.placement], x4 = _data$state$placement.x, y4 = _data$state$placement.y; if (state.modifiersData.popperOffsets != null) { - state.modifiersData.popperOffsets.x += x3; + state.modifiersData.popperOffsets.x += x4; state.modifiersData.popperOffsets.y += y4; } state.modifiersData[name] = data; @@ -12683,14 +12829,14 @@ } // node_modules/@popperjs/core/lib/utils/debounce.js - function debounce2(fn2) { + function debounce2(fn3) { var pending; return function() { if (!pending) { pending = new Promise(function(resolve) { Promise.resolve().then(function() { pending = void 0; - resolve(fn2()); + resolve(fn3()); }); }); } @@ -12795,9 +12941,9 @@ index = -1; continue; } - var _state$orderedModifie = state.orderedModifiers[index], fn2 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; - if (typeof fn2 === "function") { - state = fn2({ + var _state$orderedModifie = state.orderedModifiers[index], fn3 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name; + if (typeof fn3 === "function") { + state = fn3({ state, options: _options, name, @@ -12844,8 +12990,8 @@ }); } function cleanupModifierEffects() { - effectCleanupFns.forEach(function(fn2) { - return fn2(); + effectCleanupFns.forEach(function(fn3) { + return fn3(); }); effectCleanupFns = []; } @@ -13170,6 +13316,7 @@ localStorage.theme = "light"; } this.currentValue = mode; + this.dispatch("changed", { detail: { mode }, target: document }); this.toggleIcons(mode); } toggleIcons(mode) { @@ -13205,13 +13352,13 @@ construct } = typeof Reflect !== "undefined" && Reflect; if (!freeze) { - freeze = function freeze2(x3) { - return x3; + freeze = function freeze2(x4) { + return x4; }; } if (!seal) { - seal = function seal2(x3) { - return x3; + seal = function seal2(x4) { + return x4; }; } if (!apply) { @@ -13240,6 +13387,9 @@ var typeErrorCreate = unconstruct(TypeError); function unapply(func) { return function(thisArg) { + if (thisArg instanceof RegExp) { + thisArg.lastIndex = 0; + } for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } @@ -13335,7 +13485,7 @@ var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/); var ARIA_ATTR = seal(/^aria-[\-\w]+$/); var IS_ALLOWED_URI = seal( - /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i + /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape ); var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); @@ -13397,7 +13547,7 @@ return scriptUrl; } }); - } catch (_3) { + } catch (_4) { console.warn("TrustedTypes policy " + policyName + " could not be created."); return null; } @@ -13418,7 +13568,7 @@ function createDOMPurify() { let window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal(); const DOMPurify = (root) => createDOMPurify(root); - DOMPurify.version = "3.2.4"; + DOMPurify.version = "3.2.6"; DOMPurify.removed = []; if (!window2 || !window2.document || window2.document.nodeType !== NODE_TYPE.document || !window2.Element) { DOMPurify.isSupported = false; @@ -13565,8 +13715,8 @@ URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES; DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS; FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; - FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; - FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; + FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({}); + FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({}); USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false; ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; @@ -13732,7 +13882,7 @@ }); try { getParentNode2(node).removeChild(node); - } catch (_3) { + } catch (_4) { remove(node); } }; @@ -13742,7 +13892,7 @@ attribute: element.getAttributeNode(name), from: element }); - } catch (_3) { + } catch (_4) { arrayPush(DOMPurify.removed, { attribute: null, from: element @@ -13753,12 +13903,12 @@ if (RETURN_DOM || RETURN_DOM_FRAGMENT) { try { _forceRemove(element); - } catch (_3) { + } catch (_4) { } } else { try { element.setAttribute(name, ""); - } catch (_3) { + } catch (_4) { } } } @@ -13779,14 +13929,14 @@ if (NAMESPACE === HTML_NAMESPACE) { try { doc = new DOMParser2().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); - } catch (_3) { + } catch (_4) { } } if (!doc || !doc.documentElement) { doc = implementation.createDocument(NAMESPACE, "template", null); try { doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; - } catch (_3) { + } catch (_4) { } } const body = doc.body || doc.documentElement; @@ -13830,7 +13980,7 @@ tagName, allowedTags: ALLOWED_TAGS }); - if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { + if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) { _forceRemove(currentNode); return true; } @@ -13951,7 +14101,8 @@ value: attrValue } = attr; const lcName = transformCaseFunc(name); - let value = name === "value" ? attrValue : stringTrim(attrValue); + const initValue = attrValue; + let value = name === "value" ? initValue : stringTrim(initValue); hookEvent.attrName = lcName; hookEvent.attrValue = value; hookEvent.keepAttr = true; @@ -13969,8 +14120,8 @@ if (hookEvent.forceKeepAttr) { continue; } - _removeAttribute(name, currentNode); if (!hookEvent.keepAttr) { + _removeAttribute(name, currentNode); continue; } if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { @@ -13984,6 +14135,7 @@ } const lcTag = transformCaseFunc(currentNode.nodeName); if (!_isValidAttribute(lcTag, lcName, value)) { + _removeAttribute(name, currentNode); continue; } if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") { @@ -14002,18 +14154,21 @@ } } } - try { - if (namespaceURI) { - currentNode.setAttributeNS(namespaceURI, name, value); - } else { - currentNode.setAttribute(name, value); - } - if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - } else { - arrayPop(DOMPurify.removed); + if (value !== initValue) { + try { + if (namespaceURI) { + currentNode.setAttributeNS(namespaceURI, name, value); + } else { + currentNode.setAttribute(name, value); + } + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + } else { + arrayPop(DOMPurify.removed); + } + } catch (_4) { + _removeAttribute(name, currentNode); } - } catch (_3) { } } _executeHooks(hooks.afterSanitizeAttributes, currentNode, null); @@ -14277,7 +14432,10 @@ var list = edit(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g, bullet).getRegex(); var _tag = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul"; var _comment = /|$))/; - var html2 = edit("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", _comment).replace("tag", _tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); + var html2 = edit( + "^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", + "i" + ).replace("comment", _comment).replace("tag", _tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(); var paragraph = edit(_paragraph).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex(); var blockquote = edit(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", paragraph).getRegex(); var blockNormal = { @@ -14295,7 +14453,9 @@ table: noopTest, text: blockText }; - var gfmTable = edit("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex(); + var gfmTable = edit( + "^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)" + ).replace("hr", hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", ")|<(?:script|pre|style|textarea|!--)").replace("tag", _tag).getRegex(); var blockGfm = { ...blockNormal, lheading: lheadingGfm, @@ -14304,7 +14464,9 @@ }; var blockPedantic = { ...blockNormal, - html: edit(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", _comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), + html: edit( + `^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))` + ).replace("comment", _comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: noopTest, @@ -14312,7 +14474,7 @@ lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: edit(_paragraph).replace("hr", hr).replace("heading", " *#{1,6} *[^\n]").replace("lheading", lheading).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }; - var escape$1 = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; + var escape2 = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/; var inlineCode = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/; var br = /^( {2,}|\\)\n(?!\s*$)/; var inlineText = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(); var _inlineComment = edit(_comment).replace("(?:-->|$)", "-->").getRegex(); - var tag = edit("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment", _inlineComment).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(); + var tag = edit( + "^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^" + ).replace("comment", _inlineComment).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(); var _inlineLabel = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/; - var link = edit(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label", _inlineLabel).replace("href", /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(); + var link = edit(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label", _inlineLabel).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(); var reflink = edit(/^!?\[(label)\]\[(ref)\]/).replace("label", _inlineLabel).replace("ref", _blockLabel).getRegex(); var nolink = edit(/^!?\[(ref)\](?:\[\])?/).replace("ref", _blockLabel).getRegex(); var reflinkSearch = edit("reflink|nolink(?!\\()", "g").replace("reflink", reflink).replace("nolink", nolink).getRegex(); @@ -14352,7 +14519,7 @@ emStrongLDelim, emStrongRDelimAst, emStrongRDelimUnd, - escape: escape$1, + escape: escape2, link, nolink, punctuation, @@ -14400,17 +14567,17 @@ "'": "'" }; var getEscapeReplacement = (ch) => escapeReplacements[ch]; - function escape2(html3, encode) { + function escape22(html22, encode) { if (encode) { - if (other.escapeTest.test(html3)) { - return html3.replace(other.escapeReplace, getEscapeReplacement); + if (other.escapeTest.test(html22)) { + return html22.replace(other.escapeReplace, getEscapeReplacement); } } else { - if (other.escapeTestNoEncode.test(html3)) { - return html3.replace(other.escapeReplaceNoEncode, getEscapeReplacement); + if (other.escapeTestNoEncode.test(html22)) { + return html22.replace(other.escapeReplaceNoEncode, getEscapeReplacement); } } - return html3; + return html22; } function cleanUrl(href) { try { @@ -14460,7 +14627,9 @@ let suffLen = 0; while (suffLen < l4) { const currChar = str.charAt(l4 - suffLen - 1); - if (currChar === c4 && true) { + if (currChar === c4 && !invert) { + suffLen++; + } else if (currChar !== c4 && invert) { suffLen++; } else { break; @@ -14485,32 +14654,26 @@ } } } + if (level > 0) { + return -2; + } return -1; } function outputLink(cap, link2, raw, lexer2, rules) { const href = link2.href; const title = link2.title || null; const text2 = cap[1].replace(rules.other.outputLinkReplace, "$1"); - if (cap[0].charAt(0) !== "!") { - lexer2.state.inLink = true; - const token = { - type: "link", - raw, - href, - title, - text: text2, - tokens: lexer2.inlineTokens(text2) - }; - lexer2.state.inLink = false; - return token; - } - return { - type: "image", + lexer2.state.inLink = true; + const token = { + type: cap[0].charAt(0) === "!" ? "image" : "link", raw, href, title, - text: text2 + text: text2, + tokens: lexer2.inlineTokens(text2) }; + lexer2.state.inLink = false; + return token; } function indentCodeCompensation(raw, text2, rules) { const matchIndentToCode = raw.match(rules.other.indentCodeCompensation); @@ -14992,6 +15155,9 @@ ${currentText}` : currentText; } } else { const lastParenIndex = findClosingBracket(cap[2], "()"); + if (lastParenIndex === -2) { + return; + } if (lastParenIndex > -1) { const start3 = cap[0].indexOf("!") === 0 ? 5 : 4; const linkLen = start3 + cap[1].length + lastParenIndex; @@ -15075,12 +15241,12 @@ ${currentText}` : currentText; const lastCharLength = [...match2[0]][0].length; const raw = src.slice(0, lLength + match2.index + lastCharLength + rLength); if (Math.min(lLength, rLength) % 2) { - const text3 = raw.slice(1, -1); + const text22 = raw.slice(1, -1); return { type: "em", raw, - text: text3, - tokens: this.lexer.inlineTokens(text3) + text: text22, + tokens: this.lexer.inlineTokens(text22) }; } const text2 = raw.slice(2, -2); @@ -15445,12 +15611,12 @@ ${currentText}` : currentText; } } } - while ((match2 = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { - maskedSrc = maskedSrc.slice(0, match2.index) + "[" + "a".repeat(match2[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); - } while ((match2 = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) { maskedSrc = maskedSrc.slice(0, match2.index) + "++" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex); } + while ((match2 = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) { + maskedSrc = maskedSrc.slice(0, match2.index) + "[" + "a".repeat(match2[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex); + } let keepPrevChar = false; let prevChar = ""; while (src) { @@ -15582,9 +15748,9 @@ ${currentText}` : currentText; const langString = (lang || "").match(other.notSpaceStart)?.[0]; const code = text2.replace(other.endingNewline, "") + "\n"; if (!langString) { - return "
" + (escaped ? code : escape2(code, true)) + "
\n"; + return "
" + (escaped ? code : escape22(code, true)) + "
\n"; } - return '
' + (escaped ? code : escape2(code, true)) + "
\n"; + return '
' + (escaped ? code : escape22(code, true)) + "
\n"; } blockquote({ tokens }) { const body = this.parser.parse(tokens); @@ -15606,8 +15772,8 @@ ${body} const ordered = token.ordered; const start3 = token.start; let body = ""; - for (let j4 = 0; j4 < token.items.length; j4++) { - const item = token.items[j4]; + for (let j5 = 0; j5 < token.items.length; j5++) { + const item = token.items[j5]; body += this.listitem(item); } const type = ordered ? "ol" : "ul"; @@ -15622,7 +15788,7 @@ ${body} if (item.tokens[0]?.type === "paragraph") { item.tokens[0].text = checkbox + " " + item.tokens[0].text; if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === "text") { - item.tokens[0].tokens[0].text = checkbox + " " + escape2(item.tokens[0].tokens[0].text); + item.tokens[0].tokens[0].text = checkbox + " " + escape22(item.tokens[0].tokens[0].text); item.tokens[0].tokens[0].escaped = true; } } else { @@ -15651,13 +15817,13 @@ ${body} table(token) { let header = ""; let cell = ""; - for (let j4 = 0; j4 < token.header.length; j4++) { - cell += this.tablecell(token.header[j4]); + for (let j5 = 0; j5 < token.header.length; j5++) { + cell += this.tablecell(token.header[j5]); } header += this.tablerow({ text: cell }); let body = ""; - for (let j4 = 0; j4 < token.rows.length; j4++) { - const row = token.rows[j4]; + for (let j5 = 0; j5 < token.rows.length; j5++) { + const row = token.rows[j5]; cell = ""; for (let k4 = 0; k4 < row.length; k4++) { cell += this.tablecell(row[k4]); @@ -15690,7 +15856,7 @@ ${text2} return `${this.parser.parseInline(tokens)}`; } codespan({ text: text2 }) { - return `${escape2(text2, true)}`; + return `${escape22(text2, true)}`; } br(token) { return "
"; @@ -15707,26 +15873,29 @@ ${text2} href = cleanHref; let out = '"; return out; } - image({ href, title, text: text2 }) { + image({ href, title, text: text2, tokens }) { + if (tokens) { + text2 = this.parser.parseInline(tokens, this.parser.textRenderer); + } const cleanHref = cleanUrl(href); if (cleanHref === null) { - return escape2(text2); + return escape22(text2); } href = cleanHref; let out = `${text2} /** * Process HTML after marked is finished */ - postprocess(html3) { - return html3; + postprocess(html22) { + return html22; } /** * Process all tokens before walk tokens @@ -16197,7 +16366,7 @@ ${text2} return _Parser.parse(tokens, options2 ?? this.defaults); } parseMarkdown(blockType) { - const parse = (src, options2) => { + const parse2 = (src, options2) => { const origOpt = { ...options2 }; const opt = { ...this.defaults, ...origOpt }; const throwError = this.onError(!!opt.silent, !!opt.async); @@ -16217,7 +16386,7 @@ ${text2} const lexer2 = opt.hooks ? opt.hooks.provideLexer() : blockType ? _Lexer.lex : _Lexer.lexInline; const parser2 = opt.hooks ? opt.hooks.provideParser() : blockType ? _Parser.parse : _Parser.parseInline; if (opt.async) { - return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html3) => opt.hooks ? opt.hooks.postprocess(html3) : html3).catch(throwError); + return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src2) => lexer2(src2, opt)).then((tokens) => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser2(tokens, opt)).then((html22) => opt.hooks ? opt.hooks.postprocess(html22) : html22).catch(throwError); } try { if (opt.hooks) { @@ -16230,22 +16399,22 @@ ${text2} if (opt.walkTokens) { this.walkTokens(tokens, opt.walkTokens); } - let html3 = parser2(tokens, opt); + let html22 = parser2(tokens, opt); if (opt.hooks) { - html3 = opt.hooks.postprocess(html3); + html22 = opt.hooks.postprocess(html22); } - return html3; + return html22; } catch (e4) { return throwError(e4); } }; - return parse; + return parse2; } onError(silent, async) { return (e4) => { e4.message += "\nPlease report this to https://github.com/markedjs/marked."; if (silent) { - const msg = "

An error occurred:

" + escape2(e4.message + "", true) + "
"; + const msg = "

An error occurred:

" + escape22(e4.message + "", true) + "
"; if (async) { return Promise.resolve(msg); } @@ -16630,7 +16799,7 @@ ${text2} // src/js/controllers/select_navigator.js var select_navigator_default = class extends Controller { static targets = ["select"]; - navigate(_3) { + navigate(_4) { const url = this.selectTarget.value; const anchor = document.createElement("a"); anchor.href = url; @@ -16930,6 +17099,7 @@ ${text2} mov: "video/quicktime", dicom: "application/dicom", doc: "application/msword", + msg: "application/vnd.ms-outlook", docm: "application/vnd.ms-word.document.macroenabled.12", docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document", dot: "application/msword", @@ -17320,7 +17490,7 @@ ${text2} return "__private_" + id3++ + "_" + e4; } var packageJson2 = { - "version": "4.4.2" + "version": "4.4.7" }; var defaultUploadState = { totalProgress: 0, @@ -17342,6 +17512,8 @@ ${text2} var _transformFile = /* @__PURE__ */ _classPrivateFieldLooseKey3("transformFile"); var _startIfAutoProceed = /* @__PURE__ */ _classPrivateFieldLooseKey3("startIfAutoProceed"); var _checkAndUpdateFileState = /* @__PURE__ */ _classPrivateFieldLooseKey3("checkAndUpdateFileState"); + var _getFilesToRetry = /* @__PURE__ */ _classPrivateFieldLooseKey3("getFilesToRetry"); + var _doRetryAll = /* @__PURE__ */ _classPrivateFieldLooseKey3("doRetryAll"); var _handleUploadProgress = /* @__PURE__ */ _classPrivateFieldLooseKey3("handleUploadProgress"); var _updateTotalProgress = /* @__PURE__ */ _classPrivateFieldLooseKey3("updateTotalProgress"); var _updateTotalProgressThrottled = /* @__PURE__ */ _classPrivateFieldLooseKey3("updateTotalProgressThrottled"); @@ -17379,6 +17551,12 @@ ${text2} Object.defineProperty(this, _updateTotalProgress, { value: _updateTotalProgress2 }); + Object.defineProperty(this, _doRetryAll, { + value: _doRetryAll2 + }); + Object.defineProperty(this, _getFilesToRetry, { + value: _getFilesToRetry2 + }); Object.defineProperty(this, _checkAndUpdateFileState, { value: _checkAndUpdateFileState2 }); @@ -17677,23 +17855,23 @@ ${text2} files: {} }); } - addPreProcessor(fn2) { - _classPrivateFieldLooseBase3(this, _preProcessors)[_preProcessors].add(fn2); + addPreProcessor(fn3) { + _classPrivateFieldLooseBase3(this, _preProcessors)[_preProcessors].add(fn3); } - removePreProcessor(fn2) { - return _classPrivateFieldLooseBase3(this, _preProcessors)[_preProcessors].delete(fn2); + removePreProcessor(fn3) { + return _classPrivateFieldLooseBase3(this, _preProcessors)[_preProcessors].delete(fn3); } - addPostProcessor(fn2) { - _classPrivateFieldLooseBase3(this, _postProcessors)[_postProcessors].add(fn2); + addPostProcessor(fn3) { + _classPrivateFieldLooseBase3(this, _postProcessors)[_postProcessors].add(fn3); } - removePostProcessor(fn2) { - return _classPrivateFieldLooseBase3(this, _postProcessors)[_postProcessors].delete(fn2); + removePostProcessor(fn3) { + return _classPrivateFieldLooseBase3(this, _postProcessors)[_postProcessors].delete(fn3); } - addUploader(fn2) { - _classPrivateFieldLooseBase3(this, _uploaders)[_uploaders].add(fn2); + addUploader(fn3) { + _classPrivateFieldLooseBase3(this, _uploaders)[_uploaders].add(fn3); } - removeUploader(fn2) { - return _classPrivateFieldLooseBase3(this, _uploaders)[_uploaders].delete(fn2); + removeUploader(fn3) { + return _classPrivateFieldLooseBase3(this, _uploaders)[_uploaders].delete(fn3); } setMeta(data) { const updatedMeta = { @@ -18057,37 +18235,10 @@ ${text2} }); this.emit("resume-all"); } - retryAll() { - const updatedFiles = { - ...this.getState().files - }; - const filesToRetry = Object.keys(updatedFiles).filter((file) => { - return updatedFiles[file].error; - }); - filesToRetry.forEach((file) => { - const updatedFile = { - ...updatedFiles[file], - isPaused: false, - error: null - }; - updatedFiles[file] = updatedFile; - }); - this.setState({ - files: updatedFiles, - error: null - }); - this.emit("retry-all", Object.values(updatedFiles)); - if (filesToRetry.length === 0) { - return Promise.resolve({ - successful: [], - failed: [] - }); - } - const uploadID = _classPrivateFieldLooseBase3(this, _createUpload)[_createUpload](filesToRetry, { - forceAllowNewUpload: true - // create new upload even if allowNewUpload: false - }); - return _classPrivateFieldLooseBase3(this, _runUpload)[_runUpload](uploadID); + async retryAll() { + const result = await _classPrivateFieldLooseBase3(this, _doRetryAll)[_doRetryAll](); + this.emit("complete", result); + return result; } cancelAll() { this.emit("cancel-all"); @@ -18345,7 +18496,7 @@ Uppy plugins must have unique \`id\` options.`; /** * Start an upload for all the files that are not currently being uploaded. */ - upload() { + async upload() { var _classPrivateFieldLoo; if (!((_classPrivateFieldLoo = _classPrivateFieldLooseBase3(this, _plugins)[_plugins]["uploader"]) != null && _classPrivateFieldLoo.length)) { this.log("No uploader type plugins are used", "warning"); @@ -18353,6 +18504,19 @@ Uppy plugins must have unique \`id\` options.`; let { files } = this.getState(); + const filesToRetry = _classPrivateFieldLooseBase3(this, _getFilesToRetry)[_getFilesToRetry](); + if (filesToRetry.length > 0) { + const retryResult = await _classPrivateFieldLooseBase3(this, _doRetryAll)[_doRetryAll](); + const hasNewFiles = this.getFiles().filter((file) => file.progress.uploadStarted == null).length > 0; + if (!hasNewFiles) { + this.emit("complete", retryResult); + return retryResult; + } + ; + ({ + files + } = this.getState()); + } const onBeforeUploadResult = this.opts.onBeforeUpload(files); if (onBeforeUploadResult === false) { return Promise.reject(new Error("Not starting the upload because onBeforeUpload returned false")); @@ -18372,7 +18536,7 @@ Uppy plugins must have unique \`id\` options.`; } }).catch((err) => { throw err; - }).then(() => { + }).then(async () => { const { currentUploads } = this.getState(); @@ -18385,7 +18549,9 @@ Uppy plugins must have unique \`id\` options.`; } }); const uploadID = _classPrivateFieldLooseBase3(this, _createUpload)[_createUpload](waitingFileIDs); - return _classPrivateFieldLooseBase3(this, _runUpload)[_runUpload](uploadID); + const result = await _classPrivateFieldLooseBase3(this, _runUpload)[_runUpload](uploadID); + this.emit("complete", result); + return result; }).catch((err) => { this.emit("error", err); this.log(err, "error"); @@ -18437,6 +18603,11 @@ Uppy plugins must have unique \`id\` options.`; this.emit("restriction-failed", file, error2); return false; } + if (missingFields.length === 0 && file.missingRequiredMetaFields) { + this.setFileState(file.id, { + missingRequiredMetaFields: [] + }); + } return true; } function _checkRequiredMetaFields2(files) { @@ -18575,6 +18746,43 @@ Uppy plugins must have unique \`id\` options.`; errors }; } + function _getFilesToRetry2() { + const { + files + } = this.getState(); + return Object.keys(files).filter((file) => { + return files[file].error; + }); + } + async function _doRetryAll2() { + const filesToRetry = _classPrivateFieldLooseBase3(this, _getFilesToRetry)[_getFilesToRetry](); + const updatedFiles = { + ...this.getState().files + }; + filesToRetry.forEach((fileID) => { + updatedFiles[fileID] = { + ...updatedFiles[fileID], + isPaused: false, + error: null + }; + }); + this.setState({ + files: updatedFiles, + error: null + }); + this.emit("retry-all", this.getFilesByIds(filesToRetry)); + if (filesToRetry.length === 0) { + return { + successful: [], + failed: [] + }; + } + const uploadID = _classPrivateFieldLooseBase3(this, _createUpload)[_createUpload](filesToRetry, { + forceAllowNewUpload: true + // create new upload even if allowNewUpload: false + }); + return _classPrivateFieldLooseBase3(this, _runUpload)[_runUpload](uploadID); + } function _updateTotalProgress2() { var _totalProgressPercent, _totalProgressPercent2; const totalProgress = _classPrivateFieldLooseBase3(this, _calculateTotalProgress)[_calculateTotalProgress](); @@ -18852,7 +19060,7 @@ Uppy plugins must have unique \`id\` options.`; if (!currentUpload) { break; } - const fn2 = steps[step]; + const fn3 = steps[step]; this.setState({ currentUploads: { ...this.getState().currentUploads, @@ -18865,7 +19073,7 @@ Uppy plugins must have unique \`id\` options.`; const { fileIDs } = currentUpload; - await fn2(fileIDs, uploadID); + await fn3(fileIDs, uploadID); currentUpload = getCurrentUpload(); } } catch (err) { @@ -18892,11 +19100,15 @@ Uppy plugins must have unique \`id\` options.`; let result; if (currentUpload) { result = currentUpload.result; - this.emit("complete", result); _classPrivateFieldLooseBase3(this, _removeUpload)[_removeUpload](uploadID); } if (result == null) { this.log(`Not setting result for an upload that has been removed: ${uploadID}`); + result = { + successful: [], + failed: [], + uploadID + }; } return result; } @@ -18906,8 +19118,8 @@ Uppy plugins must have unique \`id\` options.`; // node_modules/preact/dist/preact.module.js var n; var l; - var t; var u; + var t; var i; var r; var o; @@ -18920,26 +19132,26 @@ Uppy plugins must have unique \`id\` options.`; var p = {}; var v = []; var y = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i; - var d = Array.isArray; - function w(n3, l4) { - for (var t4 in l4) - n3[t4] = l4[t4]; + var w = Array.isArray; + function d(n3, l4) { + for (var u4 in l4) + n3[u4] = l4[u4]; return n3; } function g(n3) { n3 && n3.parentNode && n3.parentNode.removeChild(n3); } - function _(l4, t4, u4) { + function _(l4, u4, t4) { var i4, r4, o4, e4 = {}; - for (o4 in t4) - "key" == o4 ? i4 = t4[o4] : "ref" == o4 ? r4 = t4[o4] : e4[o4] = t4[o4]; - if (arguments.length > 2 && (e4.children = arguments.length > 3 ? n.call(arguments, 2) : u4), "function" == typeof l4 && null != l4.defaultProps) + for (o4 in u4) + "key" == o4 ? i4 = u4[o4] : "ref" == o4 ? r4 = u4[o4] : e4[o4] = u4[o4]; + if (arguments.length > 2 && (e4.children = arguments.length > 3 ? n.call(arguments, 2) : t4), "function" == typeof l4 && null != l4.defaultProps) for (o4 in l4.defaultProps) void 0 === e4[o4] && (e4[o4] = l4.defaultProps[o4]); return m(l4, e4, i4, r4, null); } - function m(n3, u4, i4, r4, o4) { - var e4 = { type: n3, props: u4, key: i4, ref: r4, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: null == o4 ? ++t : o4, __i: -1, __u: 0 }; + function m(n3, t4, i4, r4, o4) { + var e4 = { type: n3, props: t4, key: i4, ref: r4, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: null == o4 ? ++u : o4, __i: -1, __u: 0 }; return null == o4 && null != l.vnode && l.vnode(e4), e4; } function b() { @@ -18954,292 +19166,627 @@ Uppy plugins must have unique \`id\` options.`; function S(n3, l4) { if (null == l4) return n3.__ ? S(n3.__, n3.__i + 1) : null; - for (var t4; l4 < n3.__k.length; l4++) - if (null != (t4 = n3.__k[l4]) && null != t4.__e) - return t4.__e; + for (var u4; l4 < n3.__k.length; l4++) + if (null != (u4 = n3.__k[l4]) && null != u4.__e) + return u4.__e; return "function" == typeof n3.type ? S(n3) : null; } function C(n3) { - var l4, t4; + var l4, u4; if (null != (n3 = n3.__) && null != n3.__c) { for (n3.__e = n3.__c.base = null, l4 = 0; l4 < n3.__k.length; l4++) - if (null != (t4 = n3.__k[l4]) && null != t4.__e) { - n3.__e = n3.__c.base = t4.__e; + if (null != (u4 = n3.__k[l4]) && null != u4.__e) { + n3.__e = n3.__c.base = u4.__e; break; } return C(n3); } } function M(n3) { - (!n3.__d && (n3.__d = true) && i.push(n3) && !$.__r++ || r !== l.debounceRendering) && ((r = l.debounceRendering) || o)($); + (!n3.__d && (n3.__d = true) && i.push(n3) && !$.__r++ || r != l.debounceRendering) && ((r = l.debounceRendering) || o)($); } function $() { - for (var n3, t4, u4, r4, o4, f4, c4, s4 = 1; i.length; ) - i.length > s4 && i.sort(e), n3 = i.shift(), s4 = i.length, n3.__d && (u4 = void 0, o4 = (r4 = (t4 = n3).__v).__e, f4 = [], c4 = [], t4.__P && ((u4 = w({}, r4)).__v = r4.__v + 1, l.vnode && l.vnode(u4), O(t4.__P, u4, r4, t4.__n, t4.__P.namespaceURI, 32 & r4.__u ? [o4] : null, f4, null == o4 ? S(r4) : o4, !!(32 & r4.__u), c4), u4.__v = r4.__v, u4.__.__k[u4.__i] = u4, z(f4, u4, c4), u4.__e != o4 && C(u4))); + for (var n3, u4, t4, r4, o4, f4, c4, s4 = 1; i.length; ) + i.length > s4 && i.sort(e), n3 = i.shift(), s4 = i.length, n3.__d && (t4 = void 0, o4 = (r4 = (u4 = n3).__v).__e, f4 = [], c4 = [], u4.__P && ((t4 = d({}, r4)).__v = r4.__v + 1, l.vnode && l.vnode(t4), O(u4.__P, t4, r4, u4.__n, u4.__P.namespaceURI, 32 & r4.__u ? [o4] : null, f4, null == o4 ? S(r4) : o4, !!(32 & r4.__u), c4), t4.__v = r4.__v, t4.__.__k[t4.__i] = t4, z(f4, t4, c4), t4.__e != o4 && C(t4))); $.__r = 0; } - function I(n3, l4, t4, u4, i4, r4, o4, e4, f4, c4, s4) { - var a4, h4, y4, d4, w4, g3, _3 = u4 && u4.__k || v, m4 = l4.length; - for (f4 = P(t4, l4, _3, f4, m4), a4 = 0; a4 < m4; a4++) - null != (y4 = t4.__k[a4]) && (h4 = -1 === y4.__i ? p : _3[y4.__i] || p, y4.__i = a4, g3 = O(n3, y4, h4, i4, r4, o4, e4, f4, c4, s4), d4 = y4.__e, y4.ref && h4.ref != y4.ref && (h4.ref && q(h4.ref, null, y4), s4.push(y4.ref, y4.__c || d4, y4)), null == w4 && null != d4 && (w4 = d4), 4 & y4.__u || h4.__k === y4.__k ? f4 = A(y4, f4, n3) : "function" == typeof y4.type && void 0 !== g3 ? f4 = g3 : d4 && (f4 = d4.nextSibling), y4.__u &= -7); - return t4.__e = w4, f4; + function I(n3, l4, u4, t4, i4, r4, o4, e4, f4, c4, s4) { + var a4, h4, y4, w4, d4, g5, _4 = t4 && t4.__k || v, m4 = l4.length; + for (f4 = P(u4, l4, _4, f4, m4), a4 = 0; a4 < m4; a4++) + null != (y4 = u4.__k[a4]) && (h4 = -1 == y4.__i ? p : _4[y4.__i] || p, y4.__i = a4, g5 = O(n3, y4, h4, i4, r4, o4, e4, f4, c4, s4), w4 = y4.__e, y4.ref && h4.ref != y4.ref && (h4.ref && q(h4.ref, null, y4), s4.push(y4.ref, y4.__c || w4, y4)), null == d4 && null != w4 && (d4 = w4), 4 & y4.__u || h4.__k === y4.__k ? f4 = A(y4, f4, n3) : "function" == typeof y4.type && void 0 !== g5 ? f4 = g5 : w4 && (f4 = w4.nextSibling), y4.__u &= -7); + return u4.__e = d4, f4; } - function P(n3, l4, t4, u4, i4) { - var r4, o4, e4, f4, c4, s4 = t4.length, a4 = s4, h4 = 0; + function P(n3, l4, u4, t4, i4) { + var r4, o4, e4, f4, c4, s4 = u4.length, a4 = s4, h4 = 0; for (n3.__k = new Array(i4), r4 = 0; r4 < i4; r4++) - null != (o4 = l4[r4]) && "boolean" != typeof o4 && "function" != typeof o4 ? (f4 = r4 + h4, (o4 = n3.__k[r4] = "string" == typeof o4 || "number" == typeof o4 || "bigint" == typeof o4 || o4.constructor == String ? m(null, o4, null, null, null) : d(o4) ? m(k, { children: o4 }, null, null, null) : void 0 === o4.constructor && o4.__b > 0 ? m(o4.type, o4.props, o4.key, o4.ref ? o4.ref : null, o4.__v) : o4).__ = n3, o4.__b = n3.__b + 1, e4 = null, -1 !== (c4 = o4.__i = L(o4, t4, f4, a4)) && (a4--, (e4 = t4[c4]) && (e4.__u |= 2)), null == e4 || null === e4.__v ? (-1 == c4 && (i4 > s4 ? h4-- : i4 < s4 && h4++), "function" != typeof o4.type && (o4.__u |= 4)) : c4 != f4 && (c4 == f4 - 1 ? h4-- : c4 == f4 + 1 ? h4++ : (c4 > f4 ? h4-- : h4++, o4.__u |= 4))) : n3.__k[r4] = null; + null != (o4 = l4[r4]) && "boolean" != typeof o4 && "function" != typeof o4 ? (f4 = r4 + h4, (o4 = n3.__k[r4] = "string" == typeof o4 || "number" == typeof o4 || "bigint" == typeof o4 || o4.constructor == String ? m(null, o4, null, null, null) : w(o4) ? m(k, { children: o4 }, null, null, null) : null == o4.constructor && o4.__b > 0 ? m(o4.type, o4.props, o4.key, o4.ref ? o4.ref : null, o4.__v) : o4).__ = n3, o4.__b = n3.__b + 1, e4 = null, -1 != (c4 = o4.__i = L(o4, u4, f4, a4)) && (a4--, (e4 = u4[c4]) && (e4.__u |= 2)), null == e4 || null == e4.__v ? (-1 == c4 && (i4 > s4 ? h4-- : i4 < s4 && h4++), "function" != typeof o4.type && (o4.__u |= 4)) : c4 != f4 && (c4 == f4 - 1 ? h4-- : c4 == f4 + 1 ? h4++ : (c4 > f4 ? h4-- : h4++, o4.__u |= 4))) : n3.__k[r4] = null; if (a4) for (r4 = 0; r4 < s4; r4++) - null != (e4 = t4[r4]) && 0 == (2 & e4.__u) && (e4.__e == u4 && (u4 = S(e4)), B(e4, e4)); - return u4; + null != (e4 = u4[r4]) && 0 == (2 & e4.__u) && (e4.__e == t4 && (t4 = S(e4)), B(e4, e4)); + return t4; } - function A(n3, l4, t4) { - var u4, i4; + function A(n3, l4, u4) { + var t4, i4; if ("function" == typeof n3.type) { - for (u4 = n3.__k, i4 = 0; u4 && i4 < u4.length; i4++) - u4[i4] && (u4[i4].__ = n3, l4 = A(u4[i4], l4, t4)); + for (t4 = n3.__k, i4 = 0; t4 && i4 < t4.length; i4++) + t4[i4] && (t4[i4].__ = n3, l4 = A(t4[i4], l4, u4)); return l4; } - n3.__e != l4 && (l4 && n3.type && !t4.contains(l4) && (l4 = S(n3)), t4.insertBefore(n3.__e, l4 || null), l4 = n3.__e); + n3.__e != l4 && (l4 && n3.type && !u4.contains(l4) && (l4 = S(n3)), u4.insertBefore(n3.__e, l4 || null), l4 = n3.__e); do { l4 = l4 && l4.nextSibling; } while (null != l4 && 8 == l4.nodeType); return l4; } function H(n3, l4) { - return l4 = l4 || [], null == n3 || "boolean" == typeof n3 || (d(n3) ? n3.some(function(n4) { + return l4 = l4 || [], null == n3 || "boolean" == typeof n3 || (w(n3) ? n3.some(function(n4) { H(n4, l4); }) : l4.push(n3)), l4; } - function L(n3, l4, t4, u4) { - var i4, r4, o4 = n3.key, e4 = n3.type, f4 = l4[t4]; - if (null === f4 && null == n3.key || f4 && o4 == f4.key && e4 === f4.type && 0 == (2 & f4.__u)) - return t4; - if (u4 > (null != f4 && 0 == (2 & f4.__u) ? 1 : 0)) - for (i4 = t4 - 1, r4 = t4 + 1; i4 >= 0 || r4 < l4.length; ) { + function L(n3, l4, u4, t4) { + var i4, r4, o4 = n3.key, e4 = n3.type, f4 = l4[u4]; + if (null === f4 && null == n3.key || f4 && o4 == f4.key && e4 == f4.type && 0 == (2 & f4.__u)) + return u4; + if (t4 > (null != f4 && 0 == (2 & f4.__u) ? 1 : 0)) + for (i4 = u4 - 1, r4 = u4 + 1; i4 >= 0 || r4 < l4.length; ) { if (i4 >= 0) { - if ((f4 = l4[i4]) && 0 == (2 & f4.__u) && o4 == f4.key && e4 === f4.type) + if ((f4 = l4[i4]) && 0 == (2 & f4.__u) && o4 == f4.key && e4 == f4.type) return i4; i4--; } if (r4 < l4.length) { - if ((f4 = l4[r4]) && 0 == (2 & f4.__u) && o4 == f4.key && e4 === f4.type) + if ((f4 = l4[r4]) && 0 == (2 & f4.__u) && o4 == f4.key && e4 == f4.type) return r4; r4++; } } return -1; } - function T(n3, l4, t4) { - "-" == l4[0] ? n3.setProperty(l4, null == t4 ? "" : t4) : n3[l4] = null == t4 ? "" : "number" != typeof t4 || y.test(l4) ? t4 : t4 + "px"; + function T(n3, l4, u4) { + "-" == l4[0] ? n3.setProperty(l4, null == u4 ? "" : u4) : n3[l4] = null == u4 ? "" : "number" != typeof u4 || y.test(l4) ? u4 : u4 + "px"; } - function j(n3, l4, t4, u4, i4) { - var r4; + function j(n3, l4, u4, t4, i4) { + var r4, o4; n: if ("style" == l4) - if ("string" == typeof t4) - n3.style.cssText = t4; + if ("string" == typeof u4) + n3.style.cssText = u4; else { - if ("string" == typeof u4 && (n3.style.cssText = u4 = ""), u4) - for (l4 in u4) - t4 && l4 in t4 || T(n3.style, l4, ""); - if (t4) + if ("string" == typeof t4 && (n3.style.cssText = t4 = ""), t4) for (l4 in t4) - u4 && t4[l4] === u4[l4] || T(n3.style, l4, t4[l4]); + u4 && l4 in u4 || T(n3.style, l4, ""); + if (u4) + for (l4 in u4) + t4 && u4[l4] == t4[l4] || T(n3.style, l4, u4[l4]); } else if ("o" == l4[0] && "n" == l4[1]) - r4 = l4 != (l4 = l4.replace(f, "$1")), l4 = l4.toLowerCase() in n3 || "onFocusOut" == l4 || "onFocusIn" == l4 ? l4.toLowerCase().slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + r4] = t4, t4 ? u4 ? t4.t = u4.t : (t4.t = c, n3.addEventListener(l4, r4 ? a : s, r4)) : n3.removeEventListener(l4, r4 ? a : s, r4); + r4 = l4 != (l4 = l4.replace(f, "$1")), o4 = l4.toLowerCase(), l4 = o4 in n3 || "onFocusOut" == l4 || "onFocusIn" == l4 ? o4.slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + r4] = u4, u4 ? t4 ? u4.u = t4.u : (u4.u = c, n3.addEventListener(l4, r4 ? a : s, r4)) : n3.removeEventListener(l4, r4 ? a : s, r4); else { if ("http://www.w3.org/2000/svg" == i4) l4 = l4.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s"); else if ("width" != l4 && "height" != l4 && "href" != l4 && "list" != l4 && "form" != l4 && "tabIndex" != l4 && "download" != l4 && "rowSpan" != l4 && "colSpan" != l4 && "role" != l4 && "popover" != l4 && l4 in n3) try { - n3[l4] = null == t4 ? "" : t4; + n3[l4] = null == u4 ? "" : u4; break n; } catch (n4) { } - "function" == typeof t4 || (null == t4 || false === t4 && "-" != l4[4] ? n3.removeAttribute(l4) : n3.setAttribute(l4, "popover" == l4 && 1 == t4 ? "" : t4)); + "function" == typeof u4 || (null == u4 || false === u4 && "-" != l4[4] ? n3.removeAttribute(l4) : n3.setAttribute(l4, "popover" == l4 && 1 == u4 ? "" : u4)); } } function F(n3) { - return function(t4) { + return function(u4) { if (this.l) { - var u4 = this.l[t4.type + n3]; - if (null == t4.u) - t4.u = c++; - else if (t4.u < u4.t) + var t4 = this.l[u4.type + n3]; + if (null == u4.t) + u4.t = c++; + else if (u4.t < t4.u) return; - return u4(l.event ? l.event(t4) : t4); + return t4(l.event ? l.event(u4) : u4); } }; } - function O(n3, t4, u4, i4, r4, o4, e4, f4, c4, s4) { - var a4, h4, p4, v4, y4, _3, m4, b3, S3, C4, M3, $3, P3, A4, H3, L3, T4, j4 = t4.type; - if (void 0 !== t4.constructor) + function O(n3, u4, t4, i4, r4, o4, e4, f4, c4, s4) { + var a4, h4, p4, v4, y4, _4, m4, b3, S3, C4, M3, $3, P5, A5, H4, L3, T5, j5 = u4.type; + if (null != u4.constructor) return null; - 128 & u4.__u && (c4 = !!(32 & u4.__u), o4 = [f4 = t4.__e = u4.__e]), (a4 = l.__b) && a4(t4); + 128 & t4.__u && (c4 = !!(32 & t4.__u), o4 = [f4 = u4.__e = t4.__e]), (a4 = l.__b) && a4(u4); n: - if ("function" == typeof j4) + if ("function" == typeof j5) try { - if (b3 = t4.props, S3 = "prototype" in j4 && j4.prototype.render, C4 = (a4 = j4.contextType) && i4[a4.__c], M3 = a4 ? C4 ? C4.props.value : a4.__ : i4, u4.__c ? m4 = (h4 = t4.__c = u4.__c).__ = h4.__E : (S3 ? t4.__c = h4 = new j4(b3, M3) : (t4.__c = h4 = new x(b3, M3), h4.constructor = j4, h4.render = D), C4 && C4.sub(h4), h4.props = b3, h4.state || (h4.state = {}), h4.context = M3, h4.__n = i4, p4 = h4.__d = true, h4.__h = [], h4._sb = []), S3 && null == h4.__s && (h4.__s = h4.state), S3 && null != j4.getDerivedStateFromProps && (h4.__s == h4.state && (h4.__s = w({}, h4.__s)), w(h4.__s, j4.getDerivedStateFromProps(b3, h4.__s))), v4 = h4.props, y4 = h4.state, h4.__v = t4, p4) - S3 && null == j4.getDerivedStateFromProps && null != h4.componentWillMount && h4.componentWillMount(), S3 && null != h4.componentDidMount && h4.__h.push(h4.componentDidMount); + if (b3 = u4.props, S3 = "prototype" in j5 && j5.prototype.render, C4 = (a4 = j5.contextType) && i4[a4.__c], M3 = a4 ? C4 ? C4.props.value : a4.__ : i4, t4.__c ? m4 = (h4 = u4.__c = t4.__c).__ = h4.__E : (S3 ? u4.__c = h4 = new j5(b3, M3) : (u4.__c = h4 = new x(b3, M3), h4.constructor = j5, h4.render = D), C4 && C4.sub(h4), h4.props = b3, h4.state || (h4.state = {}), h4.context = M3, h4.__n = i4, p4 = h4.__d = true, h4.__h = [], h4._sb = []), S3 && null == h4.__s && (h4.__s = h4.state), S3 && null != j5.getDerivedStateFromProps && (h4.__s == h4.state && (h4.__s = d({}, h4.__s)), d(h4.__s, j5.getDerivedStateFromProps(b3, h4.__s))), v4 = h4.props, y4 = h4.state, h4.__v = u4, p4) + S3 && null == j5.getDerivedStateFromProps && null != h4.componentWillMount && h4.componentWillMount(), S3 && null != h4.componentDidMount && h4.__h.push(h4.componentDidMount); else { - if (S3 && null == j4.getDerivedStateFromProps && b3 !== v4 && null != h4.componentWillReceiveProps && h4.componentWillReceiveProps(b3, M3), !h4.__e && (null != h4.shouldComponentUpdate && false === h4.shouldComponentUpdate(b3, h4.__s, M3) || t4.__v == u4.__v)) { - for (t4.__v != u4.__v && (h4.props = b3, h4.state = h4.__s, h4.__d = false), t4.__e = u4.__e, t4.__k = u4.__k, t4.__k.some(function(n4) { - n4 && (n4.__ = t4); + if (S3 && null == j5.getDerivedStateFromProps && b3 !== v4 && null != h4.componentWillReceiveProps && h4.componentWillReceiveProps(b3, M3), !h4.__e && null != h4.shouldComponentUpdate && false === h4.shouldComponentUpdate(b3, h4.__s, M3) || u4.__v == t4.__v) { + for (u4.__v != t4.__v && (h4.props = b3, h4.state = h4.__s, h4.__d = false), u4.__e = t4.__e, u4.__k = t4.__k, u4.__k.some(function(n4) { + n4 && (n4.__ = u4); }), $3 = 0; $3 < h4._sb.length; $3++) h4.__h.push(h4._sb[$3]); h4._sb = [], h4.__h.length && e4.push(h4); break n; } null != h4.componentWillUpdate && h4.componentWillUpdate(b3, h4.__s, M3), S3 && null != h4.componentDidUpdate && h4.__h.push(function() { - h4.componentDidUpdate(v4, y4, _3); + h4.componentDidUpdate(v4, y4, _4); }); } - if (h4.context = M3, h4.props = b3, h4.__P = n3, h4.__e = false, P3 = l.__r, A4 = 0, S3) { - for (h4.state = h4.__s, h4.__d = false, P3 && P3(t4), a4 = h4.render(h4.props, h4.state, h4.context), H3 = 0; H3 < h4._sb.length; H3++) - h4.__h.push(h4._sb[H3]); + if (h4.context = M3, h4.props = b3, h4.__P = n3, h4.__e = false, P5 = l.__r, A5 = 0, S3) { + for (h4.state = h4.__s, h4.__d = false, P5 && P5(u4), a4 = h4.render(h4.props, h4.state, h4.context), H4 = 0; H4 < h4._sb.length; H4++) + h4.__h.push(h4._sb[H4]); h4._sb = []; } else do { - h4.__d = false, P3 && P3(t4), a4 = h4.render(h4.props, h4.state, h4.context), h4.state = h4.__s; - } while (h4.__d && ++A4 < 25); - h4.state = h4.__s, null != h4.getChildContext && (i4 = w(w({}, i4), h4.getChildContext())), S3 && !p4 && null != h4.getSnapshotBeforeUpdate && (_3 = h4.getSnapshotBeforeUpdate(v4, y4)), L3 = a4, null != a4 && a4.type === k && null == a4.key && (L3 = N(a4.props.children)), f4 = I(n3, d(L3) ? L3 : [L3], t4, u4, i4, r4, o4, e4, f4, c4, s4), h4.base = t4.__e, t4.__u &= -161, h4.__h.length && e4.push(h4), m4 && (h4.__E = h4.__ = null); + h4.__d = false, P5 && P5(u4), a4 = h4.render(h4.props, h4.state, h4.context), h4.state = h4.__s; + } while (h4.__d && ++A5 < 25); + h4.state = h4.__s, null != h4.getChildContext && (i4 = d(d({}, i4), h4.getChildContext())), S3 && !p4 && null != h4.getSnapshotBeforeUpdate && (_4 = h4.getSnapshotBeforeUpdate(v4, y4)), L3 = a4, null != a4 && a4.type === k && null == a4.key && (L3 = N(a4.props.children)), f4 = I(n3, w(L3) ? L3 : [L3], u4, t4, i4, r4, o4, e4, f4, c4, s4), h4.base = u4.__e, u4.__u &= -161, h4.__h.length && e4.push(h4), m4 && (h4.__E = h4.__ = null); } catch (n4) { - if (t4.__v = null, c4 || null != o4) + if (u4.__v = null, c4 || null != o4) if (n4.then) { - for (t4.__u |= c4 ? 160 : 128; f4 && 8 == f4.nodeType && f4.nextSibling; ) + for (u4.__u |= c4 ? 160 : 128; f4 && 8 == f4.nodeType && f4.nextSibling; ) f4 = f4.nextSibling; - o4[o4.indexOf(f4)] = null, t4.__e = f4; + o4[o4.indexOf(f4)] = null, u4.__e = f4; } else - for (T4 = o4.length; T4--; ) - g(o4[T4]); + for (T5 = o4.length; T5--; ) + g(o4[T5]); else - t4.__e = u4.__e, t4.__k = u4.__k; - l.__e(n4, t4, u4); + u4.__e = t4.__e, u4.__k = t4.__k; + l.__e(n4, u4, t4); } else - null == o4 && t4.__v == u4.__v ? (t4.__k = u4.__k, t4.__e = u4.__e) : f4 = t4.__e = V(u4.__e, t4, u4, i4, r4, o4, e4, c4, s4); - return (a4 = l.diffed) && a4(t4), 128 & t4.__u ? void 0 : f4; + null == o4 && u4.__v == t4.__v ? (u4.__k = t4.__k, u4.__e = t4.__e) : f4 = u4.__e = V(t4.__e, u4, t4, i4, r4, o4, e4, c4, s4); + return (a4 = l.diffed) && a4(u4), 128 & u4.__u ? void 0 : f4; } - function z(n3, t4, u4) { - for (var i4 = 0; i4 < u4.length; i4++) - q(u4[i4], u4[++i4], u4[++i4]); - l.__c && l.__c(t4, n3), n3.some(function(t5) { + function z(n3, u4, t4) { + for (var i4 = 0; i4 < t4.length; i4++) + q(t4[i4], t4[++i4], t4[++i4]); + l.__c && l.__c(u4, n3), n3.some(function(u5) { try { - n3 = t5.__h, t5.__h = [], n3.some(function(n4) { - n4.call(t5); + n3 = u5.__h, u5.__h = [], n3.some(function(n4) { + n4.call(u5); }); } catch (n4) { - l.__e(n4, t5.__v); + l.__e(n4, u5.__v); } }); } function N(n3) { - return "object" != typeof n3 || null == n3 ? n3 : d(n3) ? n3.map(N) : w({}, n3); + return "object" != typeof n3 || null == n3 || n3.__b && n3.__b > 0 ? n3 : w(n3) ? n3.map(N) : d({}, n3); } - function V(t4, u4, i4, r4, o4, e4, f4, c4, s4) { - var a4, h4, v4, y4, w4, _3, m4, b3 = i4.props, k4 = u4.props, x3 = u4.type; - if ("svg" == x3 ? o4 = "http://www.w3.org/2000/svg" : "math" == x3 ? o4 = "http://www.w3.org/1998/Math/MathML" : o4 || (o4 = "http://www.w3.org/1999/xhtml"), null != e4) { + function V(u4, t4, i4, r4, o4, e4, f4, c4, s4) { + var a4, h4, v4, y4, d4, _4, m4, b3 = i4.props, k4 = t4.props, x4 = t4.type; + if ("svg" == x4 ? o4 = "http://www.w3.org/2000/svg" : "math" == x4 ? o4 = "http://www.w3.org/1998/Math/MathML" : o4 || (o4 = "http://www.w3.org/1999/xhtml"), null != e4) { for (a4 = 0; a4 < e4.length; a4++) - if ((w4 = e4[a4]) && "setAttribute" in w4 == !!x3 && (x3 ? w4.localName == x3 : 3 == w4.nodeType)) { - t4 = w4, e4[a4] = null; + if ((d4 = e4[a4]) && "setAttribute" in d4 == !!x4 && (x4 ? d4.localName == x4 : 3 == d4.nodeType)) { + u4 = d4, e4[a4] = null; break; } } - if (null == t4) { - if (null == x3) + if (null == u4) { + if (null == x4) return document.createTextNode(k4); - t4 = document.createElementNS(o4, x3, k4.is && k4), c4 && (l.__m && l.__m(u4, e4), c4 = false), e4 = null; + u4 = document.createElementNS(o4, x4, k4.is && k4), c4 && (l.__m && l.__m(t4, e4), c4 = false), e4 = null; } - if (null === x3) - b3 === k4 || c4 && t4.data === k4 || (t4.data = k4); + if (null == x4) + b3 === k4 || c4 && u4.data == k4 || (u4.data = k4); else { - if (e4 = e4 && n.call(t4.childNodes), b3 = i4.props || p, !c4 && null != e4) - for (b3 = {}, a4 = 0; a4 < t4.attributes.length; a4++) - b3[(w4 = t4.attributes[a4]).name] = w4.value; + if (e4 = e4 && n.call(u4.childNodes), b3 = i4.props || p, !c4 && null != e4) + for (b3 = {}, a4 = 0; a4 < u4.attributes.length; a4++) + b3[(d4 = u4.attributes[a4]).name] = d4.value; for (a4 in b3) - if (w4 = b3[a4], "children" == a4) + if (d4 = b3[a4], "children" == a4) ; else if ("dangerouslySetInnerHTML" == a4) - v4 = w4; + v4 = d4; else if (!(a4 in k4)) { if ("value" == a4 && "defaultValue" in k4 || "checked" == a4 && "defaultChecked" in k4) continue; - j(t4, a4, null, w4, o4); + j(u4, a4, null, d4, o4); } for (a4 in k4) - w4 = k4[a4], "children" == a4 ? y4 = w4 : "dangerouslySetInnerHTML" == a4 ? h4 = w4 : "value" == a4 ? _3 = w4 : "checked" == a4 ? m4 = w4 : c4 && "function" != typeof w4 || b3[a4] === w4 || j(t4, a4, w4, b3[a4], o4); + d4 = k4[a4], "children" == a4 ? y4 = d4 : "dangerouslySetInnerHTML" == a4 ? h4 = d4 : "value" == a4 ? _4 = d4 : "checked" == a4 ? m4 = d4 : c4 && "function" != typeof d4 || b3[a4] === d4 || j(u4, a4, d4, b3[a4], o4); if (h4) - c4 || v4 && (h4.__html === v4.__html || h4.__html === t4.innerHTML) || (t4.innerHTML = h4.__html), u4.__k = []; - else if (v4 && (t4.innerHTML = ""), I("template" === u4.type ? t4.content : t4, d(y4) ? y4 : [y4], u4, i4, r4, "foreignObject" == x3 ? "http://www.w3.org/1999/xhtml" : o4, e4, f4, e4 ? e4[0] : i4.__k && S(i4, 0), c4, s4), null != e4) + c4 || v4 && (h4.__html == v4.__html || h4.__html == u4.innerHTML) || (u4.innerHTML = h4.__html), t4.__k = []; + else if (v4 && (u4.innerHTML = ""), I("template" == t4.type ? u4.content : u4, w(y4) ? y4 : [y4], t4, i4, r4, "foreignObject" == x4 ? "http://www.w3.org/1999/xhtml" : o4, e4, f4, e4 ? e4[0] : i4.__k && S(i4, 0), c4, s4), null != e4) for (a4 = e4.length; a4--; ) g(e4[a4]); - c4 || (a4 = "value", "progress" == x3 && null == _3 ? t4.removeAttribute("value") : void 0 !== _3 && (_3 !== t4[a4] || "progress" == x3 && !_3 || "option" == x3 && _3 !== b3[a4]) && j(t4, a4, _3, b3[a4], o4), a4 = "checked", void 0 !== m4 && m4 !== t4[a4] && j(t4, a4, m4, b3[a4], o4)); + c4 || (a4 = "value", "progress" == x4 && null == _4 ? u4.removeAttribute("value") : null != _4 && (_4 !== u4[a4] || "progress" == x4 && !_4 || "option" == x4 && _4 != b3[a4]) && j(u4, a4, _4, b3[a4], o4), a4 = "checked", null != m4 && m4 != u4[a4] && j(u4, a4, m4, b3[a4], o4)); } - return t4; + return u4; } - function q(n3, t4, u4) { + function q(n3, u4, t4) { try { if ("function" == typeof n3) { var i4 = "function" == typeof n3.__u; - i4 && n3.__u(), i4 && null == t4 || (n3.__u = n3(t4)); + i4 && n3.__u(), i4 && null == u4 || (n3.__u = n3(u4)); } else - n3.current = t4; + n3.current = u4; } catch (n4) { - l.__e(n4, u4); + l.__e(n4, t4); } } - function B(n3, t4, u4) { + function B(n3, u4, t4) { var i4, r4; - if (l.unmount && l.unmount(n3), (i4 = n3.ref) && (i4.current && i4.current !== n3.__e || q(i4, null, t4)), null != (i4 = n3.__c)) { + if (l.unmount && l.unmount(n3), (i4 = n3.ref) && (i4.current && i4.current != n3.__e || q(i4, null, u4)), null != (i4 = n3.__c)) { if (i4.componentWillUnmount) try { i4.componentWillUnmount(); } catch (n4) { - l.__e(n4, t4); + l.__e(n4, u4); } i4.base = i4.__P = null; } if (i4 = n3.__k) for (r4 = 0; r4 < i4.length; r4++) - i4[r4] && B(i4[r4], t4, u4 || "function" != typeof n3.type); - u4 || g(n3.__e), n3.__c = n3.__ = n3.__e = void 0; + i4[r4] && B(i4[r4], u4, t4 || "function" != typeof n3.type); + t4 || g(n3.__e), n3.__c = n3.__ = n3.__e = void 0; } - function D(n3, l4, t4) { - return this.constructor(n3, t4); + function D(n3, l4, u4) { + return this.constructor(n3, u4); } - function E(t4, u4, i4) { + function E(u4, t4, i4) { var r4, o4, e4, f4; - u4 == document && (u4 = document.documentElement), l.__ && l.__(t4, u4), o4 = (r4 = "function" == typeof i4) ? null : i4 && i4.__k || u4.__k, e4 = [], f4 = [], O(u4, t4 = (!r4 && i4 || u4).__k = _(k, null, [t4]), o4 || p, p, u4.namespaceURI, !r4 && i4 ? [i4] : o4 ? null : u4.firstChild ? n.call(u4.childNodes) : null, e4, !r4 && i4 ? i4 : o4 ? o4.__e : u4.firstChild, r4, f4), z(e4, t4, f4); + t4 == document && (t4 = document.documentElement), l.__ && l.__(u4, t4), o4 = (r4 = "function" == typeof i4) ? null : i4 && i4.__k || t4.__k, e4 = [], f4 = [], O(t4, u4 = (!r4 && i4 || t4).__k = _(k, null, [u4]), o4 || p, p, t4.namespaceURI, !r4 && i4 ? [i4] : o4 ? null : t4.firstChild ? n.call(t4.childNodes) : null, e4, !r4 && i4 ? i4 : o4 ? o4.__e : t4.firstChild, r4, f4), z(e4, u4, f4); } - function J(l4, t4, u4) { - var i4, r4, o4, e4, f4 = w({}, l4.props); - for (o4 in l4.type && l4.type.defaultProps && (e4 = l4.type.defaultProps), t4) - "key" == o4 ? i4 = t4[o4] : "ref" == o4 ? r4 = t4[o4] : f4[o4] = void 0 === t4[o4] && void 0 !== e4 ? e4[o4] : t4[o4]; - return arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : u4), m(l4.type, f4, i4 || l4.key, r4 || l4.ref, null); + function J(l4, u4, t4) { + var i4, r4, o4, e4, f4 = d({}, l4.props); + for (o4 in l4.type && l4.type.defaultProps && (e4 = l4.type.defaultProps), u4) + "key" == o4 ? i4 = u4[o4] : "ref" == o4 ? r4 = u4[o4] : f4[o4] = void 0 === u4[o4] && null != e4 ? e4[o4] : u4[o4]; + return arguments.length > 2 && (f4.children = arguments.length > 3 ? n.call(arguments, 2) : t4), m(l4.type, f4, i4 || l4.key, r4 || l4.ref, null); } - n = v.slice, l = { __e: function(n3, l4, t4, u4) { + n = v.slice, l = { __e: function(n3, l4, u4, t4) { for (var i4, r4, o4; l4 = l4.__; ) if ((i4 = l4.__c) && !i4.__) try { - if ((r4 = i4.constructor) && null != r4.getDerivedStateFromError && (i4.setState(r4.getDerivedStateFromError(n3)), o4 = i4.__d), null != i4.componentDidCatch && (i4.componentDidCatch(n3, u4 || {}), o4 = i4.__d), o4) + if ((r4 = i4.constructor) && null != r4.getDerivedStateFromError && (i4.setState(r4.getDerivedStateFromError(n3)), o4 = i4.__d), null != i4.componentDidCatch && (i4.componentDidCatch(n3, t4 || {}), o4 = i4.__d), o4) return i4.__E = i4; } catch (l5) { n3 = l5; } throw n3; - } }, t = 0, u = function(n3) { + } }, u = 0, t = function(n3) { return null != n3 && null == n3.constructor; }, x.prototype.setState = function(n3, l4) { - var t4; - t4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = w({}, this.state), "function" == typeof n3 && (n3 = n3(w({}, t4), this.props)), n3 && w(t4, n3), null != n3 && this.__v && (l4 && this._sb.push(l4), M(this)); + var u4; + u4 = null != this.__s && this.__s != this.state ? this.__s : this.__s = d({}, this.state), "function" == typeof n3 && (n3 = n3(d({}, u4), this.props)), n3 && d(u4, n3), null != n3 && this.__v && (l4 && this._sb.push(l4), M(this)); }, x.prototype.forceUpdate = function(n3) { this.__v && (this.__e = true, n3 && this.__h.push(n3), M(this)); }, x.prototype.render = k, i = [], o = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, e = function(n3, l4) { return n3.__v.__b - l4.__v.__b; }, $.__r = 0, f = /(PointerCapture)$|Capture$/i, c = 0, s = F(false), a = F(true), h = 0; + // node_modules/preact/hooks/dist/hooks.module.js + var t2; + var r2; + var u2; + var i2; + var o2 = 0; + var f2 = []; + var c2 = l; + var e2 = c2.__b; + var a2 = c2.__r; + var v2 = c2.diffed; + var l2 = c2.__c; + var m2 = c2.unmount; + var s2 = c2.__; + function p2(n3, t4) { + c2.__h && c2.__h(r2, n3, o2 || t4), o2 = 0; + var u4 = r2.__H || (r2.__H = { __: [], __h: [] }); + return n3 >= u4.__.length && u4.__.push({}), u4.__[n3]; + } + function d2(n3) { + return o2 = 1, h2(D2, n3); + } + function h2(n3, u4, i4) { + var o4 = p2(t2++, 2); + if (o4.t = n3, !o4.__c && (o4.__ = [i4 ? i4(u4) : D2(void 0, u4), function(n4) { + var t4 = o4.__N ? o4.__N[0] : o4.__[0], r4 = o4.t(t4, n4); + t4 !== r4 && (o4.__N = [r4, o4.__[1]], o4.__c.setState({})); + }], o4.__c = r2, !r2.__f)) { + var f4 = function(n4, t4, r4) { + if (!o4.__c.__H) + return true; + var u5 = o4.__c.__H.__.filter(function(n5) { + return !!n5.__c; + }); + if (u5.every(function(n5) { + return !n5.__N; + })) + return !c4 || c4.call(this, n4, t4, r4); + var i5 = o4.__c.props !== n4; + return u5.forEach(function(n5) { + if (n5.__N) { + var t5 = n5.__[0]; + n5.__ = n5.__N, n5.__N = void 0, t5 !== n5.__[0] && (i5 = true); + } + }), c4 && c4.call(this, n4, t4, r4) || i5; + }; + r2.__f = true; + var c4 = r2.shouldComponentUpdate, e4 = r2.componentWillUpdate; + r2.componentWillUpdate = function(n4, t4, r4) { + if (this.__e) { + var u5 = c4; + c4 = void 0, f4(n4, t4, r4), c4 = u5; + } + e4 && e4.call(this, n4, t4, r4); + }, r2.shouldComponentUpdate = f4; + } + return o4.__N || o4.__; + } + function y2(n3, u4) { + var i4 = p2(t2++, 3); + !c2.__s && C2(i4.__H, u4) && (i4.__ = n3, i4.u = u4, r2.__H.__h.push(i4)); + } + function A2(n3) { + return o2 = 5, T2(function() { + return { current: n3 }; + }, []); + } + function T2(n3, r4) { + var u4 = p2(t2++, 7); + return C2(u4.__H, r4) && (u4.__ = n3(), u4.__H = r4, u4.__h = n3), u4.__; + } + function q2(n3, t4) { + return o2 = 8, T2(function() { + return n3; + }, t4); + } + function j2() { + for (var n3; n3 = f2.shift(); ) + if (n3.__P && n3.__H) + try { + n3.__H.__h.forEach(z2), n3.__H.__h.forEach(B2), n3.__H.__h = []; + } catch (t4) { + n3.__H.__h = [], c2.__e(t4, n3.__v); + } + } + c2.__b = function(n3) { + r2 = null, e2 && e2(n3); + }, c2.__ = function(n3, t4) { + n3 && t4.__k && t4.__k.__m && (n3.__m = t4.__k.__m), s2 && s2(n3, t4); + }, c2.__r = function(n3) { + a2 && a2(n3), t2 = 0; + var i4 = (r2 = n3.__c).__H; + i4 && (u2 === r2 ? (i4.__h = [], r2.__h = [], i4.__.forEach(function(n4) { + n4.__N && (n4.__ = n4.__N), n4.u = n4.__N = void 0; + })) : (i4.__h.forEach(z2), i4.__h.forEach(B2), i4.__h = [], t2 = 0)), u2 = r2; + }, c2.diffed = function(n3) { + v2 && v2(n3); + var t4 = n3.__c; + t4 && t4.__H && (t4.__H.__h.length && (1 !== f2.push(t4) && i2 === c2.requestAnimationFrame || ((i2 = c2.requestAnimationFrame) || w2)(j2)), t4.__H.__.forEach(function(n4) { + n4.u && (n4.__H = n4.u), n4.u = void 0; + })), u2 = r2 = null; + }, c2.__c = function(n3, t4) { + t4.some(function(n4) { + try { + n4.__h.forEach(z2), n4.__h = n4.__h.filter(function(n5) { + return !n5.__ || B2(n5); + }); + } catch (r4) { + t4.some(function(n5) { + n5.__h && (n5.__h = []); + }), t4 = [], c2.__e(r4, n4.__v); + } + }), l2 && l2(n3, t4); + }, c2.unmount = function(n3) { + m2 && m2(n3); + var t4, r4 = n3.__c; + r4 && r4.__H && (r4.__H.__.forEach(function(n4) { + try { + z2(n4); + } catch (n5) { + t4 = n5; + } + }), r4.__H = void 0, t4 && c2.__e(t4, r4.__v)); + }; + var k2 = "function" == typeof requestAnimationFrame; + function w2(n3) { + var t4, r4 = function() { + clearTimeout(u4), k2 && cancelAnimationFrame(t4), setTimeout(n3); + }, u4 = setTimeout(r4, 35); + k2 && (t4 = requestAnimationFrame(r4)); + } + function z2(n3) { + var t4 = r2, u4 = n3.__c; + "function" == typeof u4 && (n3.__c = void 0, u4()), r2 = t4; + } + function B2(n3) { + var t4 = r2; + n3.__c = n3.__(), r2 = t4; + } + function C2(n3, t4) { + return !n3 || n3.length !== t4.length || t4.some(function(t5, r4) { + return t5 !== n3[r4]; + }); + } + function D2(n3, t4) { + return "function" == typeof t4 ? t4(n3) : t4; + } + + // node_modules/preact/compat/dist/compat.module.js + function g3(n3, t4) { + for (var e4 in t4) + n3[e4] = t4[e4]; + return n3; + } + function E2(n3, t4) { + for (var e4 in n3) + if ("__source" !== e4 && !(e4 in t4)) + return true; + for (var r4 in t4) + if ("__source" !== r4 && n3[r4] !== t4[r4]) + return true; + return false; + } + function N2(n3, t4) { + this.props = n3, this.context = t4; + } + (N2.prototype = new x()).isPureReactComponent = true, N2.prototype.shouldComponentUpdate = function(n3, t4) { + return E2(this.props, n3) || E2(this.state, t4); + }; + var T3 = l.__b; + l.__b = function(n3) { + n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), T3 && T3(n3); + }; + var A3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911; + var F3 = l.__e; + l.__e = function(n3, t4, e4, r4) { + if (n3.then) { + for (var u4, o4 = t4; o4 = o4.__; ) + if ((u4 = o4.__c) && u4.__c) + return null == t4.__e && (t4.__e = e4.__e, t4.__k = e4.__k), u4.__c(n3, t4); + } + F3(n3, t4, e4, r4); + }; + var U = l.unmount; + function V2(n3, t4, e4) { + return n3 && (n3.__c && n3.__c.__H && (n3.__c.__H.__.forEach(function(n4) { + "function" == typeof n4.__c && n4.__c(); + }), n3.__c.__H = null), null != (n3 = g3({}, n3)).__c && (n3.__c.__P === e4 && (n3.__c.__P = t4), n3.__c.__e = true, n3.__c = null), n3.__k = n3.__k && n3.__k.map(function(n4) { + return V2(n4, t4, e4); + })), n3; + } + function W(n3, t4, e4) { + return n3 && e4 && (n3.__v = null, n3.__k = n3.__k && n3.__k.map(function(n4) { + return W(n4, t4, e4); + }), n3.__c && n3.__c.__P === t4 && (n3.__e && e4.appendChild(n3.__e), n3.__c.__e = true, n3.__c.__P = e4)), n3; + } + function P3() { + this.__u = 0, this.o = null, this.__b = null; + } + function j3(n3) { + var t4 = n3.__.__c; + return t4 && t4.__a && t4.__a(n3); + } + function B3() { + this.i = null, this.l = null; + } + l.unmount = function(n3) { + var t4 = n3.__c; + t4 && t4.__R && t4.__R(), t4 && 32 & n3.__u && (n3.type = null), U && U(n3); + }, (P3.prototype = new x()).__c = function(n3, t4) { + var e4 = t4.__c, r4 = this; + null == r4.o && (r4.o = []), r4.o.push(e4); + var u4 = j3(r4.__v), o4 = false, i4 = function() { + o4 || (o4 = true, e4.__R = null, u4 ? u4(l4) : l4()); + }; + e4.__R = i4; + var l4 = function() { + if (!--r4.__u) { + if (r4.state.__a) { + var n4 = r4.state.__a; + r4.__v.__k[0] = W(n4, n4.__c.__P, n4.__c.__O); + } + var t5; + for (r4.setState({ __a: r4.__b = null }); t5 = r4.o.pop(); ) + t5.forceUpdate(); + } + }; + r4.__u++ || 32 & t4.__u || r4.setState({ __a: r4.__b = r4.__v.__k[0] }), n3.then(i4, i4); + }, P3.prototype.componentWillUnmount = function() { + this.o = []; + }, P3.prototype.render = function(n3, e4) { + if (this.__b) { + if (this.__v.__k) { + var r4 = document.createElement("div"), o4 = this.__v.__k[0].__c; + this.__v.__k[0] = V2(this.__b, r4, o4.__O = o4.__P); + } + this.__b = null; + } + var i4 = e4.__a && _(k, null, n3.fallback); + return i4 && (i4.__u &= -33), [_(k, null, e4.__a ? null : n3.children), i4]; + }; + var H2 = function(n3, t4, e4) { + if (++e4[1] === e4[0] && n3.l.delete(t4), n3.props.revealOrder && ("t" !== n3.props.revealOrder[0] || !n3.l.size)) + for (e4 = n3.i; e4; ) { + for (; e4.length > 3; ) + e4.pop()(); + if (e4[1] < e4[0]) + break; + n3.i = e4 = e4[2]; + } + }; + (B3.prototype = new x()).__a = function(n3) { + var t4 = this, e4 = j3(t4.__v), r4 = t4.l.get(n3); + return r4[0]++, function(u4) { + var o4 = function() { + t4.props.revealOrder ? (r4.push(u4), H2(t4, n3, r4)) : u4(); + }; + e4 ? e4(o4) : o4(); + }; + }, B3.prototype.render = function(n3) { + this.i = null, this.l = /* @__PURE__ */ new Map(); + var t4 = H(n3.children); + n3.revealOrder && "b" === n3.revealOrder[0] && t4.reverse(); + for (var e4 = t4.length; e4--; ) + this.l.set(t4[e4], this.i = [1, 0, this.i]); + return n3.children; + }, B3.prototype.componentDidUpdate = B3.prototype.componentDidMount = function() { + var n3 = this; + this.l.forEach(function(t4, e4) { + H2(n3, e4, t4); + }); + }; + var q3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103; + var G2 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/; + var J2 = /^on(Ani|Tra|Tou|BeforeInp|Compo)/; + var K2 = /[A-Z0-9]/g; + var Q = "undefined" != typeof document; + var X = function(n3) { + return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n3); + }; + function nn(n3, t4, e4) { + return null == t4.__k && (t4.textContent = ""), E(n3, t4), "function" == typeof e4 && e4(), n3 ? n3.__c : null; + } + x.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t4) { + Object.defineProperty(x.prototype, t4, { configurable: true, get: function() { + return this["UNSAFE_" + t4]; + }, set: function(n3) { + Object.defineProperty(this, t4, { configurable: true, writable: true, value: n3 }); + } }); + }); + var en = l.event; + function rn() { + } + function un() { + return this.cancelBubble; + } + function on() { + return this.defaultPrevented; + } + l.event = function(n3) { + return en && (n3 = en(n3)), n3.persist = rn, n3.isPropagationStopped = un, n3.isDefaultPrevented = on, n3.nativeEvent = n3; + }; + var ln; + var cn = { enumerable: false, configurable: true, get: function() { + return this.class; + } }; + var fn2 = l.vnode; + l.vnode = function(n3) { + "string" == typeof n3.type && function(n4) { + var t4 = n4.props, e4 = n4.type, u4 = {}, o4 = -1 === e4.indexOf("-"); + for (var i4 in t4) { + var l4 = t4[i4]; + if (!("value" === i4 && "defaultValue" in t4 && null == l4 || Q && "children" === i4 && "noscript" === e4 || "class" === i4 || "className" === i4)) { + var c4 = i4.toLowerCase(); + "defaultValue" === i4 && "value" in t4 && null == t4.value ? i4 = "value" : "download" === i4 && true === l4 ? l4 = "" : "translate" === c4 && "no" === l4 ? l4 = false : "o" === c4[0] && "n" === c4[1] ? "ondoubleclick" === c4 ? i4 = "ondblclick" : "onchange" !== c4 || "input" !== e4 && "textarea" !== e4 || X(t4.type) ? "onfocus" === c4 ? i4 = "onfocusin" : "onblur" === c4 ? i4 = "onfocusout" : J2.test(i4) && (i4 = c4) : c4 = i4 = "oninput" : o4 && G2.test(i4) ? i4 = i4.replace(K2, "-$&").toLowerCase() : null === l4 && (l4 = void 0), "oninput" === c4 && u4[i4 = c4] && (i4 = "oninputCapture"), u4[i4] = l4; + } + } + "select" == e4 && u4.multiple && Array.isArray(u4.value) && (u4.value = H(t4.children).forEach(function(n5) { + n5.props.selected = -1 != u4.value.indexOf(n5.props.value); + })), "select" == e4 && null != u4.defaultValue && (u4.value = H(t4.children).forEach(function(n5) { + n5.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n5.props.value) : u4.defaultValue == n5.props.value; + })), t4.class && !t4.className ? (u4.class = t4.class, Object.defineProperty(u4, "className", cn)) : (t4.className && !t4.class || t4.class && t4.className) && (u4.class = u4.className = t4.className), n4.props = u4; + }(n3), n3.$$typeof = q3, fn2 && fn2(n3); + }; + var an = l.__r; + l.__r = function(n3) { + an && an(n3), ln = n3.__c; + }; + var sn = l.diffed; + l.diffed = function(n3) { + sn && sn(n3); + var t4 = n3.props, e4 = n3.__e; + null != e4 && "textarea" === n3.type && "value" in t4 && t4.value !== e4.value && (e4.value = null == t4.value ? "" : t4.value), ln = null; + }; + // node_modules/@uppy/utils/lib/isDOMElement.js function isDOMElement(obj) { if (typeof obj !== "object" || obj === null) @@ -19346,7 +19893,7 @@ Uppy plugins must have unique \`id\` options.`; function _classPrivateFieldLooseKey4(e4) { return "__private_" + id4++ + "_" + e4; } - function debounce3(fn2) { + function debounce3(fn3) { let calling = null; let latestArgs; return function() { @@ -19357,7 +19904,7 @@ Uppy plugins must have unique \`id\` options.`; if (!calling) { calling = Promise.resolve().then(() => { calling = null; - return fn2(...latestArgs); + return fn3(...latestArgs); }); } return calling; @@ -19409,14 +19956,14 @@ Uppy plugins must have unique \`id\` options.`; _classPrivateFieldLooseBase4(this, _updateUI)[_updateUI] = debounce3((state) => { if (!this.uppy.getPlugin(this.id)) return; - E(this.render(state, uppyRootElement), uppyRootElement); + nn(this.render(state, uppyRootElement), uppyRootElement); this.afterUpdate(); }); this.uppy.log(`Installing ${callerPluginName} to a DOM element '${target}'`); if (this.opts.replaceTargetContent) { targetElement.innerHTML = ""; } - E(this.render(this.uppy.getState(), uppyRootElement), uppyRootElement); + nn(this.render(this.uppy.getState(), uppyRootElement), uppyRootElement); this.el = uppyRootElement; targetElement.appendChild(uppyRootElement); uppyRootElement.dir = this.opts.direction || getTextDirection_default(uppyRootElement) || "ltr"; @@ -20158,7 +20705,7 @@ Uppy plugins must have unique \`id\` options.`; return "__private_" + id5++ + "_" + e4; } var packageJson3 = { - "version": "4.1.2" + "version": "4.1.3" }; var speedFilterHalfLife = 2e3; var ETAFilterHalfLife = 2e3; @@ -20739,33 +21286,33 @@ Uppy plugins must have unique \`id\` options.`; } // node_modules/exifr/dist/mini.esm.mjs - function e2(e4, t4, s4) { + function e3(e4, t4, s4) { return t4 in e4 ? Object.defineProperty(e4, t4, { value: s4, enumerable: true, configurable: true, writable: true }) : e4[t4] = s4, e4; } - var t2 = "undefined" != typeof self ? self : global; - var s2 = "undefined" != typeof navigator; - var i2 = s2 && "undefined" == typeof HTMLImageElement; + var t3 = "undefined" != typeof self ? self : global; + var s3 = "undefined" != typeof navigator; + var i3 = s3 && "undefined" == typeof HTMLImageElement; var n2 = !("undefined" == typeof global || "undefined" == typeof process || !process.versions || !process.versions.node); - var r2 = t2.Buffer; - var a2 = !!r2; - var h2 = (e4) => void 0 !== e4; - function f2(e4) { - return void 0 === e4 || (e4 instanceof Map ? 0 === e4.size : 0 === Object.values(e4).filter(h2).length); + var r3 = t3.Buffer; + var a3 = !!r3; + var h3 = (e4) => void 0 !== e4; + function f3(e4) { + return void 0 === e4 || (e4 instanceof Map ? 0 === e4.size : 0 === Object.values(e4).filter(h3).length); } - function l2(e4) { + function l3(e4) { let t4 = new Error(e4); throw delete t4.stack, t4; } - function o2(e4) { + function o3(e4) { let t4 = function(e5) { let t5 = 0; return e5.ifd0.enabled && (t5 += 1024), e5.exif.enabled && (t5 += 2048), e5.makerNote && (t5 += 2048), e5.userComment && (t5 += 1024), e5.gps.enabled && (t5 += 512), e5.interop.enabled && (t5 += 100), e5.ifd1.enabled && (t5 += 1024), t5 + 2048; }(e4); return e4.jfif.enabled && (t4 += 50), e4.xmp.enabled && (t4 += 2e4), e4.iptc.enabled && (t4 += 14e3), e4.icc.enabled && (t4 += 6e3), t4; } - var u2 = (e4) => String.fromCharCode.apply(null, e4); - var d2 = "undefined" != typeof TextDecoder ? new TextDecoder("utf-8") : void 0; - var c2 = class _c { + var u3 = (e4) => String.fromCharCode.apply(null, e4); + var d3 = "undefined" != typeof TextDecoder ? new TextDecoder("utf-8") : void 0; + var c3 = class _c { static from(e4, t4) { return e4 instanceof this && e4.le === t4 ? e4 : new _c(e4, void 0, void 0, t4); } @@ -20777,14 +21324,14 @@ Uppy plugins must have unique \`id\` options.`; let i5 = new DataView(e4, t4, s4); this._swapDataView(i5); } else if (e4 instanceof Uint8Array || e4 instanceof DataView || e4 instanceof _c) { - void 0 === s4 && (s4 = e4.byteLength - t4), (t4 += e4.byteOffset) + s4 > e4.byteOffset + e4.byteLength && l2("Creating view outside of available memory in ArrayBuffer"); + void 0 === s4 && (s4 = e4.byteLength - t4), (t4 += e4.byteOffset) + s4 > e4.byteOffset + e4.byteLength && l3("Creating view outside of available memory in ArrayBuffer"); let i5 = new DataView(e4.buffer, t4, s4); this._swapDataView(i5); } else if ("number" == typeof e4) { let t5 = new DataView(new ArrayBuffer(e4)); this._swapDataView(t5); } else - l2("Invalid input argument for BufferView: " + e4); + l3("Invalid input argument for BufferView: " + e4); } _swapArrayBuffer(e4) { this._swapDataView(new DataView(e4)); @@ -20799,7 +21346,7 @@ Uppy plugins must have unique \`id\` options.`; return this.byteLength - e4; } set(e4, t4, s4 = _c) { - return e4 instanceof DataView || e4 instanceof _c ? e4 = new Uint8Array(e4.buffer, e4.byteOffset, e4.byteLength) : e4 instanceof ArrayBuffer && (e4 = new Uint8Array(e4)), e4 instanceof Uint8Array || l2("BufferView.set(): Invalid data argument."), this.toUint8().set(e4, t4), new s4(this, t4, e4.byteLength); + return e4 instanceof DataView || e4 instanceof _c ? e4 = new Uint8Array(e4.buffer, e4.byteOffset, e4.byteLength) : e4 instanceof ArrayBuffer && (e4 = new Uint8Array(e4)), e4 instanceof Uint8Array || l3("BufferView.set(): Invalid data argument."), this.toUint8().set(e4, t4), new s4(this, t4, e4.byteLength); } subarray(e4, t4) { return t4 = t4 || this._lengthToEnd(e4), new _c(this, e4, t4); @@ -20812,18 +21359,18 @@ Uppy plugins must have unique \`id\` options.`; } getString(e4 = 0, t4 = this.byteLength) { let s4 = this.getUint8Array(e4, t4); - return i4 = s4, d2 ? d2.decode(i4) : a2 ? Buffer.from(i4).toString("utf8") : decodeURIComponent(escape(u2(i4))); + return i4 = s4, d3 ? d3.decode(i4) : a3 ? Buffer.from(i4).toString("utf8") : decodeURIComponent(escape(u3(i4))); var i4; } getLatin1String(e4 = 0, t4 = this.byteLength) { let s4 = this.getUint8Array(e4, t4); - return u2(s4); + return u3(s4); } getUnicodeString(e4 = 0, t4 = this.byteLength) { const s4 = []; for (let i4 = 0; i4 < t4 && e4 + i4 < this.byteLength; i4 += 2) s4.push(this.getUint16(e4 + i4)); - return u2(s4); + return u3(s4); } getInt8(e4) { return this.dataView.getInt8(e4); @@ -20885,46 +21432,46 @@ Uppy plugins must have unique \`id\` options.`; ensureChunk() { } }; - function p2(e4, t4) { - l2(`${e4} '${t4}' was not loaded, try using full build of exifr.`); + function p3(e4, t4) { + l3(`${e4} '${t4}' was not loaded, try using full build of exifr.`); } - var g2 = class extends Map { + var g4 = class extends Map { constructor(e4) { super(), this.kind = e4; } get(e4, t4) { - return this.has(e4) || p2(this.kind, e4), t4 && (e4 in t4 || function(e5, t5) { - l2(`Unknown ${e5} '${t5}'.`); - }(this.kind, e4), t4[e4].enabled || p2(this.kind, e4)), super.get(e4); + return this.has(e4) || p3(this.kind, e4), t4 && (e4 in t4 || function(e5, t5) { + l3(`Unknown ${e5} '${t5}'.`); + }(this.kind, e4), t4[e4].enabled || p3(this.kind, e4)), super.get(e4); } keyList() { return Array.from(this.keys()); } }; - var m2 = new g2("file parser"); - var y2 = new g2("segment parser"); - var b2 = new g2("file reader"); - var w2 = t2.fetch; - function k2(e4, t4) { - return (i4 = e4).startsWith("data:") || i4.length > 1e4 ? v2(e4, t4, "base64") : n2 && e4.includes("://") ? O2(e4, t4, "url", S2) : n2 ? v2(e4, t4, "fs") : s2 ? O2(e4, t4, "url", S2) : void l2("Invalid input argument"); + var m3 = new g4("file parser"); + var y3 = new g4("segment parser"); + var b2 = new g4("file reader"); + var w3 = t3.fetch; + function k3(e4, t4) { + return (i4 = e4).startsWith("data:") || i4.length > 1e4 ? v3(e4, t4, "base64") : n2 && e4.includes("://") ? O2(e4, t4, "url", S2) : n2 ? v3(e4, t4, "fs") : s3 ? O2(e4, t4, "url", S2) : void l3("Invalid input argument"); var i4; } async function O2(e4, t4, s4, i4) { - return b2.has(s4) ? v2(e4, t4, s4) : i4 ? async function(e5, t5) { + return b2.has(s4) ? v3(e4, t4, s4) : i4 ? async function(e5, t5) { let s5 = await t5(e5); - return new c2(s5); - }(e4, i4) : void l2(`Parser ${s4} is not loaded`); + return new c3(s5); + }(e4, i4) : void l3(`Parser ${s4} is not loaded`); } - async function v2(e4, t4, s4) { + async function v3(e4, t4, s4) { let i4 = new (b2.get(s4))(e4, t4); return await i4.read(), i4; } - var S2 = (e4) => w2(e4).then((e5) => e5.arrayBuffer()); - var A2 = (e4) => new Promise((t4, s4) => { + var S2 = (e4) => w3(e4).then((e5) => e5.arrayBuffer()); + var A4 = (e4) => new Promise((t4, s4) => { let i4 = new FileReader(); i4.onloadend = () => t4(i4.result || new ArrayBuffer()), i4.onerror = s4, i4.readAsArrayBuffer(e4); }); - var U = class extends Map { + var U2 = class extends Map { get tagKeys() { return this.allKeys || (this.allKeys = Array.from(this.keys())), this.allKeys; } @@ -20932,8 +21479,8 @@ Uppy plugins must have unique \`id\` options.`; return this.allValues || (this.allValues = Array.from(this.values())), this.allValues; } }; - function x2(e4, t4, s4) { - let i4 = new U(); + function x3(e4, t4, s4) { + let i4 = new U2(); for (let [e5, t5] of s4) i4.set(e5, t5); if (Array.isArray(t4)) @@ -20943,33 +21490,33 @@ Uppy plugins must have unique \`id\` options.`; e4.set(t4, i4); return i4; } - function C2(e4, t4, s4) { + function C3(e4, t4, s4) { let i4, n3 = e4.get(t4); for (i4 of s4) n3.set(i4[0], i4[1]); } - var B2 = /* @__PURE__ */ new Map(); - var V2 = /* @__PURE__ */ new Map(); + var B4 = /* @__PURE__ */ new Map(); + var V3 = /* @__PURE__ */ new Map(); var I2 = /* @__PURE__ */ new Map(); var L2 = ["chunked", "firstChunkSize", "firstChunkSizeNode", "firstChunkSizeBrowser", "chunkSize", "chunkLimit"]; - var T2 = ["jfif", "xmp", "icc", "iptc", "ihdr"]; - var z2 = ["tiff", ...T2]; - var P2 = ["ifd0", "ifd1", "exif", "gps", "interop"]; - var F2 = [...z2, ...P2]; - var j2 = ["makerNote", "userComment"]; - var E2 = ["translateKeys", "translateValues", "reviveValues", "multiSegment"]; - var M2 = [...E2, "sanitize", "mergeOutput", "silentErrors"]; - var _2 = class { + var T4 = ["jfif", "xmp", "icc", "iptc", "ihdr"]; + var z3 = ["tiff", ...T4]; + var P4 = ["ifd0", "ifd1", "exif", "gps", "interop"]; + var F4 = [...z3, ...P4]; + var j4 = ["makerNote", "userComment"]; + var E3 = ["translateKeys", "translateValues", "reviveValues", "multiSegment"]; + var M2 = [...E3, "sanitize", "mergeOutput", "silentErrors"]; + var _3 = class { get translate() { return this.translateKeys || this.translateValues || this.reviveValues; } }; - var D2 = class extends _2 { + var D3 = class extends _3 { get needed() { return this.enabled || this.deps.size > 0; } constructor(t4, s4, i4, n3) { - if (super(), e2(this, "enabled", false), e2(this, "skip", /* @__PURE__ */ new Set()), e2(this, "pick", /* @__PURE__ */ new Set()), e2(this, "deps", /* @__PURE__ */ new Set()), e2(this, "translateKeys", false), e2(this, "translateValues", false), e2(this, "reviveValues", false), this.key = t4, this.enabled = s4, this.parse = this.enabled, this.applyInheritables(n3), this.canBeFiltered = P2.includes(t4), this.canBeFiltered && (this.dict = B2.get(t4)), void 0 !== i4) + if (super(), e3(this, "enabled", false), e3(this, "skip", /* @__PURE__ */ new Set()), e3(this, "pick", /* @__PURE__ */ new Set()), e3(this, "deps", /* @__PURE__ */ new Set()), e3(this, "translateKeys", false), e3(this, "translateValues", false), e3(this, "reviveValues", false), this.key = t4, this.enabled = s4, this.parse = this.enabled, this.applyInheritables(n3), this.canBeFiltered = P4.includes(t4), this.canBeFiltered && (this.dict = B4.get(t4)), void 0 !== i4) if (Array.isArray(i4)) this.parse = this.enabled = true, this.canBeFiltered && i4.length > 0 && this.translateTagSet(i4, this.pick); else if ("object" == typeof i4) { @@ -20979,11 +21526,11 @@ Uppy plugins must have unique \`id\` options.`; } this.applyInheritables(i4); } else - true === i4 || false === i4 ? this.parse = this.enabled = i4 : l2(`Invalid options argument: ${i4}`); + true === i4 || false === i4 ? this.parse = this.enabled = i4 : l3(`Invalid options argument: ${i4}`); } applyInheritables(e4) { let t4, s4; - for (t4 of E2) + for (t4 of E3) s4 = e4[t4], void 0 !== s4 && (this[t4] = s4); } translateTagSet(e4, t4) { @@ -20996,66 +21543,66 @@ Uppy plugins must have unique \`id\` options.`; t4.add(s4); } finalizeFilters() { - !this.enabled && this.deps.size > 0 ? (this.enabled = true, X(this.pick, this.deps)) : this.enabled && this.pick.size > 0 && X(this.pick, this.deps); + !this.enabled && this.deps.size > 0 ? (this.enabled = true, X2(this.pick, this.deps)) : this.enabled && this.pick.size > 0 && X2(this.pick, this.deps); } }; - var N2 = { jfif: false, tiff: true, xmp: false, icc: false, iptc: false, ifd0: true, ifd1: false, exif: true, gps: true, interop: false, ihdr: void 0, makerNote: false, userComment: false, multiSegment: false, skip: [], pick: [], translateKeys: true, translateValues: true, reviveValues: true, sanitize: true, mergeOutput: true, silentErrors: true, chunked: true, firstChunkSize: void 0, firstChunkSizeNode: 512, firstChunkSizeBrowser: 65536, chunkSize: 65536, chunkLimit: 5 }; + var N3 = { jfif: false, tiff: true, xmp: false, icc: false, iptc: false, ifd0: true, ifd1: false, exif: true, gps: true, interop: false, ihdr: void 0, makerNote: false, userComment: false, multiSegment: false, skip: [], pick: [], translateKeys: true, translateValues: true, reviveValues: true, sanitize: true, mergeOutput: true, silentErrors: true, chunked: true, firstChunkSize: void 0, firstChunkSizeNode: 512, firstChunkSizeBrowser: 65536, chunkSize: 65536, chunkLimit: 5 }; var $2 = /* @__PURE__ */ new Map(); - var R = class extends _2 { + var R = class extends _3 { static useCached(e4) { let t4 = $2.get(e4); return void 0 !== t4 || (t4 = new this(e4), $2.set(e4, t4)), t4; } constructor(e4) { - super(), true === e4 ? this.setupFromTrue() : void 0 === e4 ? this.setupFromUndefined() : Array.isArray(e4) ? this.setupFromArray(e4) : "object" == typeof e4 ? this.setupFromObject(e4) : l2(`Invalid options argument ${e4}`), void 0 === this.firstChunkSize && (this.firstChunkSize = s2 ? this.firstChunkSizeBrowser : this.firstChunkSizeNode), this.mergeOutput && (this.ifd1.enabled = false), this.filterNestedSegmentTags(), this.traverseTiffDependencyTree(), this.checkLoadedPlugins(); + super(), true === e4 ? this.setupFromTrue() : void 0 === e4 ? this.setupFromUndefined() : Array.isArray(e4) ? this.setupFromArray(e4) : "object" == typeof e4 ? this.setupFromObject(e4) : l3(`Invalid options argument ${e4}`), void 0 === this.firstChunkSize && (this.firstChunkSize = s3 ? this.firstChunkSizeBrowser : this.firstChunkSizeNode), this.mergeOutput && (this.ifd1.enabled = false), this.filterNestedSegmentTags(), this.traverseTiffDependencyTree(), this.checkLoadedPlugins(); } setupFromUndefined() { let e4; for (e4 of L2) - this[e4] = N2[e4]; + this[e4] = N3[e4]; for (e4 of M2) - this[e4] = N2[e4]; - for (e4 of j2) - this[e4] = N2[e4]; - for (e4 of F2) - this[e4] = new D2(e4, N2[e4], void 0, this); + this[e4] = N3[e4]; + for (e4 of j4) + this[e4] = N3[e4]; + for (e4 of F4) + this[e4] = new D3(e4, N3[e4], void 0, this); } setupFromTrue() { let e4; for (e4 of L2) - this[e4] = N2[e4]; + this[e4] = N3[e4]; for (e4 of M2) - this[e4] = N2[e4]; - for (e4 of j2) + this[e4] = N3[e4]; + for (e4 of j4) this[e4] = true; - for (e4 of F2) - this[e4] = new D2(e4, true, void 0, this); + for (e4 of F4) + this[e4] = new D3(e4, true, void 0, this); } setupFromArray(e4) { let t4; for (t4 of L2) - this[t4] = N2[t4]; + this[t4] = N3[t4]; for (t4 of M2) - this[t4] = N2[t4]; - for (t4 of j2) - this[t4] = N2[t4]; - for (t4 of F2) - this[t4] = new D2(t4, false, void 0, this); - this.setupGlobalFilters(e4, void 0, P2); + this[t4] = N3[t4]; + for (t4 of j4) + this[t4] = N3[t4]; + for (t4 of F4) + this[t4] = new D3(t4, false, void 0, this); + this.setupGlobalFilters(e4, void 0, P4); } setupFromObject(e4) { let t4; - for (t4 of (P2.ifd0 = P2.ifd0 || P2.image, P2.ifd1 = P2.ifd1 || P2.thumbnail, Object.assign(this, e4), L2)) - this[t4] = W(e4[t4], N2[t4]); + for (t4 of (P4.ifd0 = P4.ifd0 || P4.image, P4.ifd1 = P4.ifd1 || P4.thumbnail, Object.assign(this, e4), L2)) + this[t4] = W2(e4[t4], N3[t4]); for (t4 of M2) - this[t4] = W(e4[t4], N2[t4]); - for (t4 of j2) - this[t4] = W(e4[t4], N2[t4]); - for (t4 of z2) - this[t4] = new D2(t4, N2[t4], e4[t4], this); - for (t4 of P2) - this[t4] = new D2(t4, N2[t4], e4[t4], this.tiff); - this.setupGlobalFilters(e4.pick, e4.skip, P2, F2), true === e4.tiff ? this.batchEnableWithBool(P2, true) : false === e4.tiff ? this.batchEnableWithUserValue(P2, e4) : Array.isArray(e4.tiff) ? this.setupGlobalFilters(e4.tiff, void 0, P2) : "object" == typeof e4.tiff && this.setupGlobalFilters(e4.tiff.pick, e4.tiff.skip, P2); + this[t4] = W2(e4[t4], N3[t4]); + for (t4 of j4) + this[t4] = W2(e4[t4], N3[t4]); + for (t4 of z3) + this[t4] = new D3(t4, N3[t4], e4[t4], this); + for (t4 of P4) + this[t4] = new D3(t4, N3[t4], e4[t4], this.tiff); + this.setupGlobalFilters(e4.pick, e4.skip, P4, F4), true === e4.tiff ? this.batchEnableWithBool(P4, true) : false === e4.tiff ? this.batchEnableWithUserValue(P4, e4) : Array.isArray(e4.tiff) ? this.setupGlobalFilters(e4.tiff, void 0, P4) : "object" == typeof e4.tiff && this.setupGlobalFilters(e4.tiff.pick, e4.tiff.skip, P4); } batchEnableWithBool(e4, t4) { for (let s4 of e4) @@ -21071,13 +21618,13 @@ Uppy plugins must have unique \`id\` options.`; if (e4 && e4.length) { for (let e5 of i4) this[e5].enabled = false; - let t5 = K(e4, s4); + let t5 = K3(e4, s4); for (let [e5, s5] of t5) - X(this[e5].pick, s5), this[e5].enabled = true; + X2(this[e5].pick, s5), this[e5].enabled = true; } else if (t4 && t4.length) { - let e5 = K(t4, s4); + let e5 = K3(t4, s4); for (let [t5, s5] of e5) - X(this[t5].skip, s5); + X2(this[t5].skip, s5); } } filterNestedSegmentTags() { @@ -21086,56 +21633,56 @@ Uppy plugins must have unique \`id\` options.`; } traverseTiffDependencyTree() { let { ifd0: e4, exif: t4, gps: s4, interop: i4 } = this; - i4.needed && (t4.deps.add(40965), e4.deps.add(40965)), t4.needed && e4.deps.add(34665), s4.needed && e4.deps.add(34853), this.tiff.enabled = P2.some((e5) => true === this[e5].enabled) || this.makerNote || this.userComment; - for (let e5 of P2) + i4.needed && (t4.deps.add(40965), e4.deps.add(40965)), t4.needed && e4.deps.add(34665), s4.needed && e4.deps.add(34853), this.tiff.enabled = P4.some((e5) => true === this[e5].enabled) || this.makerNote || this.userComment; + for (let e5 of P4) this[e5].finalizeFilters(); } get onlyTiff() { - return !T2.map((e4) => this[e4].enabled).some((e4) => true === e4) && this.tiff.enabled; + return !T4.map((e4) => this[e4].enabled).some((e4) => true === e4) && this.tiff.enabled; } checkLoadedPlugins() { - for (let e4 of z2) - this[e4].enabled && !y2.has(e4) && p2("segment parser", e4); + for (let e4 of z3) + this[e4].enabled && !y3.has(e4) && p3("segment parser", e4); } }; - function K(e4, t4) { + function K3(e4, t4) { let s4, i4, n3, r4, a4 = []; for (n3 of t4) { - for (r4 of (s4 = B2.get(n3), i4 = [], s4)) + for (r4 of (s4 = B4.get(n3), i4 = [], s4)) (e4.includes(r4[0]) || e4.includes(r4[1])) && i4.push(r4[0]); i4.length && a4.push([n3, i4]); } return a4; } - function W(e4, t4) { + function W2(e4, t4) { return void 0 !== e4 ? e4 : void 0 !== t4 ? t4 : void 0; } - function X(e4, t4) { + function X2(e4, t4) { for (let s4 of t4) e4.add(s4); } - e2(R, "default", N2); - var H2 = class { + e3(R, "default", N3); + var H3 = class { constructor(t4) { - e2(this, "parsers", {}), e2(this, "output", {}), e2(this, "errors", []), e2(this, "pushToErrors", (e4) => this.errors.push(e4)), this.options = R.useCached(t4); + e3(this, "parsers", {}), e3(this, "output", {}), e3(this, "errors", []), e3(this, "pushToErrors", (e4) => this.errors.push(e4)), this.options = R.useCached(t4); } async read(e4) { this.file = await function(e5, t4) { - return "string" == typeof e5 ? k2(e5, t4) : s2 && !i2 && e5 instanceof HTMLImageElement ? k2(e5.src, t4) : e5 instanceof Uint8Array || e5 instanceof ArrayBuffer || e5 instanceof DataView ? new c2(e5) : s2 && e5 instanceof Blob ? O2(e5, t4, "blob", A2) : void l2("Invalid input argument"); + return "string" == typeof e5 ? k3(e5, t4) : s3 && !i3 && e5 instanceof HTMLImageElement ? k3(e5.src, t4) : e5 instanceof Uint8Array || e5 instanceof ArrayBuffer || e5 instanceof DataView ? new c3(e5) : s3 && e5 instanceof Blob ? O2(e5, t4, "blob", A4) : void l3("Invalid input argument"); }(e4, this.options); } setup() { if (this.fileParser) return; let { file: e4 } = this, t4 = e4.getUint16(0); - for (let [s4, i4] of m2) + for (let [s4, i4] of m3) if (i4.canHandle(e4, t4)) return this.fileParser = new i4(this.options, this.file, this.parsers), e4[s4] = true; - this.file.close && this.file.close(), l2("Unknown file format"); + this.file.close && this.file.close(), l3("Unknown file format"); } async parse() { let { output: e4, errors: t4 } = this; - return this.setup(), this.options.silentErrors ? (await this.executeParsers().catch(this.pushToErrors), t4.push(...this.fileParser.errors)) : await this.executeParsers(), this.file.close && this.file.close(), this.options.silentErrors && t4.length > 0 && (e4.errors = t4), f2(s4 = e4) ? void 0 : s4; + return this.setup(), this.options.silentErrors ? (await this.executeParsers().catch(this.pushToErrors), t4.push(...this.fileParser.errors)) : await this.executeParsers(), this.file.close && this.file.close(), this.options.silentErrors && t4.length > 0 && (e4.errors = t4), f3(s4 = e4) ? void 0 : s4; var s4; } async executeParsers() { @@ -21149,7 +21696,7 @@ Uppy plugins must have unique \`id\` options.`; } async extractThumbnail() { this.setup(); - let { options: e4, file: t4 } = this, s4 = y2.get("tiff", e4); + let { options: e4, file: t4 } = this, s4 = y3.get("tiff", e4); var i4; if (t4.tiff ? i4 = { start: 0, type: "tiff" } : t4.jpeg && (i4 = await this.fileParser.getOrFindSegment("tiff")), void 0 === i4) return; @@ -21158,11 +21705,11 @@ Uppy plugins must have unique \`id\` options.`; } }; async function Y(e4, t4) { - let s4 = new H2(t4); + let s4 = new H3(t4); return await s4.read(e4), s4.parse(); } - var G = Object.freeze({ __proto__: null, parse: Y, Exifr: H2, fileParsers: m2, segmentParsers: y2, fileReaders: b2, tagKeys: B2, tagValues: V2, tagRevivers: I2, createDictionary: x2, extendDictionary: C2, fetchUrlAsArrayBuffer: S2, readBlobAsArrayBuffer: A2, chunkedProps: L2, otherSegments: T2, segments: z2, tiffBlocks: P2, segmentsAndBlocks: F2, tiffExtractables: j2, inheritables: E2, allFormatters: M2, Options: R }); - var J2 = class { + var G3 = Object.freeze({ __proto__: null, parse: Y, Exifr: H3, fileParsers: m3, segmentParsers: y3, fileReaders: b2, tagKeys: B4, tagValues: V3, tagRevivers: I2, createDictionary: x3, extendDictionary: C3, fetchUrlAsArrayBuffer: S2, readBlobAsArrayBuffer: A4, chunkedProps: L2, otherSegments: T4, segments: z3, tiffBlocks: P4, segmentsAndBlocks: F4, tiffExtractables: j4, inheritables: E3, allFormatters: M2, Options: R }); + var J3 = class { static findPosition(e4, t4) { let s4 = e4.getUint16(t4 + 2) + 2, i4 = "function" == typeof this.headerLength ? this.headerLength(e4, t4, s4) : this.headerLength, n3 = t4 + i4, r4 = s4 - i4; return { offset: t4, length: s4, headerLength: i4, start: n3, size: r4, end: n3 + r4 }; @@ -21171,10 +21718,10 @@ Uppy plugins must have unique \`id\` options.`; return new this(e4, new R({ [this.type]: t4 }), e4).parse(); } normalizeInput(e4) { - return e4 instanceof c2 ? e4 : new c2(e4); + return e4 instanceof c3 ? e4 : new c3(e4); } constructor(t4, s4 = {}, i4) { - e2(this, "errors", []), e2(this, "raw", /* @__PURE__ */ new Map()), e2(this, "handleError", (e4) => { + e3(this, "errors", []), e3(this, "raw", /* @__PURE__ */ new Map()), e3(this, "handleError", (e4) => { if (!this.options.silentErrors) throw e4; this.errors.push(e4.message); @@ -21187,7 +21734,7 @@ Uppy plugins must have unique \`id\` options.`; return this.translated ? this.translated : this.raw ? Object.fromEntries(this.raw) : void 0; } translateBlock(e4, t4) { - let s4 = I2.get(t4), i4 = V2.get(t4), n3 = B2.get(t4), r4 = this.options[t4], a4 = r4.reviveValues && !!s4, h4 = r4.translateValues && !!i4, f4 = r4.translateKeys && !!n3, l4 = {}; + let s4 = I2.get(t4), i4 = V3.get(t4), n3 = B4.get(t4), r4 = this.options[t4], a4 = r4.reviveValues && !!s4, h4 = r4.translateValues && !!i4, f4 = r4.translateKeys && !!n3, l4 = {}; for (let [t5, r5] of e4) a4 && s4.has(t5) ? r5 = s4.get(t5)(r5) : h4 && i4.has(t5) && (r5 = this.translateValue(r5, i4.get(t5))), f4 && n3.has(t5) && (t5 = n3.get(t5) || t5), l4[t5] = r5; return l4; @@ -21204,21 +21751,21 @@ Uppy plugins must have unique \`id\` options.`; e4[t4] ? Object.assign(e4[t4], s4) : e4[t4] = s4; } }; - e2(J2, "headerLength", 4), e2(J2, "type", void 0), e2(J2, "multiSegment", false), e2(J2, "canHandle", () => false); - function q2(e4) { + e3(J3, "headerLength", 4), e3(J3, "type", void 0), e3(J3, "multiSegment", false), e3(J3, "canHandle", () => false); + function q4(e4) { return 192 === e4 || 194 === e4 || 196 === e4 || 219 === e4 || 221 === e4 || 218 === e4 || 254 === e4; } - function Q(e4) { + function Q2(e4) { return e4 >= 224 && e4 <= 239; } function Z(e4, t4, s4) { - for (let [i4, n3] of y2) + for (let [i4, n3] of y3) if (n3.canHandle(e4, t4, s4)) return i4; } var ee2 = class extends class { constructor(t4, s4, i4) { - e2(this, "errors", []), e2(this, "ensureSegmentChunk", async (e4) => { + e3(this, "errors", []), e3(this, "ensureSegmentChunk", async (e4) => { let t5 = e4.start, s5 = e4.size || 65536; if (this.file.chunked) if (this.file.available(t5, s5)) @@ -21227,10 +21774,10 @@ Uppy plugins must have unique \`id\` options.`; try { e4.chunk = await this.file.readChunk(t5, s5); } catch (t6) { - l2(`Couldn't read segment: ${JSON.stringify(e4)}. ${t6.message}`); + l3(`Couldn't read segment: ${JSON.stringify(e4)}. ${t6.message}`); } else - this.file.byteLength > t5 + s5 ? e4.chunk = this.file.subarray(t5, s5) : void 0 === e4.size ? e4.chunk = this.file.subarray(t5) : l2("Segment unreachable: " + JSON.stringify(e4)); + this.file.byteLength > t5 + s5 ? e4.chunk = this.file.subarray(t5, s5) : void 0 === e4.size ? e4.chunk = this.file.subarray(t5) : l3("Segment unreachable: " + JSON.stringify(e4)); return e4.chunk; }), this.extendOptions && this.extendOptions(t4), this.options = t4, this.file = s4, this.parsers = i4; } @@ -21238,7 +21785,7 @@ Uppy plugins must have unique \`id\` options.`; this.options[e4].enabled && this.createParser(e4, t4); } createParser(e4, t4) { - let s4 = new (y2.get(e4))(t4, this.options, this.file); + let s4 = new (y3.get(e4))(t4, this.options, this.file); return this.parsers[e4] = s4; } createParsers(e4) { @@ -21256,7 +21803,7 @@ Uppy plugins must have unique \`id\` options.`; } } { constructor(...t4) { - super(...t4), e2(this, "appSegments", []), e2(this, "jpegSegments", []), e2(this, "unknownSegments", []); + super(...t4), e3(this, "appSegments", []), e3(this, "jpegSegments", []), e3(this, "unknownSegments", []); } static canHandle(e4, t4) { return 65496 === t4; @@ -21265,13 +21812,13 @@ Uppy plugins must have unique \`id\` options.`; await this.findAppSegments(), await this.readSegments(this.appSegments), this.mergeMultiSegments(), this.createParsers(this.mergedAppSegments || this.appSegments); } setupSegmentFinderArgs(e4) { - true === e4 ? (this.findAll = true, this.wanted = new Set(y2.keyList())) : (e4 = void 0 === e4 ? y2.keyList().filter((e5) => this.options[e5].enabled) : e4.filter((e5) => this.options[e5].enabled && y2.has(e5)), this.findAll = false, this.remaining = new Set(e4), this.wanted = new Set(e4)), this.unfinishedMultiSegment = false; + true === e4 ? (this.findAll = true, this.wanted = new Set(y3.keyList())) : (e4 = void 0 === e4 ? y3.keyList().filter((e5) => this.options[e5].enabled) : e4.filter((e5) => this.options[e5].enabled && y3.has(e5)), this.findAll = false, this.remaining = new Set(e4), this.wanted = new Set(e4)), this.unfinishedMultiSegment = false; } async findAppSegments(e4 = 0, t4) { this.setupSegmentFinderArgs(t4); let { file: s4, findAll: i4, wanted: n3, remaining: r4 } = this; if (!i4 && this.file.chunked && (i4 = Array.from(n3).some((e5) => { - let t5 = y2.get(e5), s5 = this.options[e5]; + let t5 = y3.get(e5), s5 = this.options[e5]; return t5.multiSegment && s5.multiSegment; }), i4 && await this.file.readWhole()), e4 = this.findAppSegmentsInRange(e4, s4.byteLength), !this.options.onlyTiff && s4.chunked) { let t5 = false; @@ -21287,11 +21834,11 @@ Uppy plugins must have unique \`id\` options.`; let s4, i4, n3, r4, a4, h4, { file: f4, findAll: l4, wanted: o4, remaining: u4, options: d4 } = this; for (; e4 < t4; e4++) if (255 === f4.getUint8(e4)) { - if (s4 = f4.getUint8(e4 + 1), Q(s4)) { - if (i4 = f4.getUint16(e4 + 2), n3 = Z(f4, e4, i4), n3 && o4.has(n3) && (r4 = y2.get(n3), a4 = r4.findPosition(f4, e4), h4 = d4[n3], a4.type = n3, this.appSegments.push(a4), !l4 && (r4.multiSegment && h4.multiSegment ? (this.unfinishedMultiSegment = a4.chunkNumber < a4.chunkCount, this.unfinishedMultiSegment || u4.delete(n3)) : u4.delete(n3), 0 === u4.size))) + if (s4 = f4.getUint8(e4 + 1), Q2(s4)) { + if (i4 = f4.getUint16(e4 + 2), n3 = Z(f4, e4, i4), n3 && o4.has(n3) && (r4 = y3.get(n3), a4 = r4.findPosition(f4, e4), h4 = d4[n3], a4.type = n3, this.appSegments.push(a4), !l4 && (r4.multiSegment && h4.multiSegment ? (this.unfinishedMultiSegment = a4.chunkNumber < a4.chunkCount, this.unfinishedMultiSegment || u4.delete(n3)) : u4.delete(n3), 0 === u4.size))) break; - d4.recordUnknownSegments && (a4 = J2.findPosition(f4, e4), a4.marker = s4, this.unknownSegments.push(a4)), e4 += i4 + 1; - } else if (q2(s4)) { + d4.recordUnknownSegments && (a4 = J3.findPosition(f4, e4), a4.marker = s4, this.unknownSegments.push(a4)), e4 += i4 + 1; + } else if (q4(s4)) { if (i4 = f4.getUint16(e4 + 2), 218 === s4 && false !== d4.stopAfterSos) return; d4.recordJpegSegments && this.jpegSegments.push({ offset: e4, length: i4, marker: s4 }), e4 += i4 + 1; @@ -21309,7 +21856,7 @@ Uppy plugins must have unique \`id\` options.`; return Array.from(r4); }(this.appSegments, "type"); this.mergedAppSegments = e4.map(([e5, t4]) => { - let s4 = y2.get(e5, this.options); + let s4 = y3.get(e5, this.options); if (s4.handleMultiSegments) { return { type: e5, chunk: s4.handleMultiSegments(t4) }; } @@ -21324,9 +21871,9 @@ Uppy plugins must have unique \`id\` options.`; return void 0 === t4 && (await this.findAppSegments(0, [e4]), t4 = this.getSegment(e4)), t4; } }; - e2(ee2, "type", "jpeg"), m2.set("jpeg", ee2); + e3(ee2, "type", "jpeg"), m3.set("jpeg", ee2); var te = [void 0, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8, 4]; - var se = class extends J2 { + var se = class extends J3 { parseHeader() { var e4 = this.chunk.getUint16(); 18761 === e4 ? this.le = true : 19789 === e4 && (this.le = false), this.chunk.le = this.le, this.headerParsed = true; @@ -21349,7 +21896,7 @@ Uppy plugins must have unique \`id\` options.`; } parseTag(e4, t4, s4) { let { chunk: i4 } = this, n3 = i4.getUint16(e4 + 2), r4 = i4.getUint32(e4 + 4), a4 = te[n3]; - if (a4 * r4 <= 4 ? e4 += 8 : e4 = i4.getUint32(e4 + 8), (n3 < 1 || n3 > 13) && l2(`Invalid TIFF value type. block: ${s4.toUpperCase()}, tag: ${t4.toString(16)}, type: ${n3}, offset ${e4}`), e4 > i4.byteLength && l2(`Invalid TIFF value offset. block: ${s4.toUpperCase()}, tag: ${t4.toString(16)}, type: ${n3}, offset ${e4} is outside of chunk size ${i4.byteLength}`), 1 === n3) + if (a4 * r4 <= 4 ? e4 += 8 : e4 = i4.getUint32(e4 + 8), (n3 < 1 || n3 > 13) && l3(`Invalid TIFF value type. block: ${s4.toUpperCase()}, tag: ${t4.toString(16)}, type: ${n3}, offset ${e4}`), e4 > i4.byteLength && l3(`Invalid TIFF value offset. block: ${s4.toUpperCase()}, tag: ${t4.toString(16)}, type: ${n3}, offset ${e4} is outside of chunk size ${i4.byteLength}`), 1 === n3) return i4.getUint8Array(e4, r4); if (2 === n3) return "" === (h4 = function(e5) { @@ -21420,7 +21967,7 @@ Uppy plugins must have unique \`id\` options.`; case 13: return s4.getUint32(t4); default: - l2(`Invalid tiff type ${e4}`); + l3(`Invalid tiff type ${e4}`); } } }; @@ -21455,8 +22002,8 @@ Uppy plugins must have unique \`id\` options.`; if (this.ifd0) return; let { file: e4 } = this; - this.findIfd0Offset(), this.ifd0Offset < 8 && l2("Malformed EXIF data"), !e4.chunked && this.ifd0Offset > e4.byteLength && l2(`IFD0 offset points to outside of file. -this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tiff && await e4.ensureChunk(this.ifd0Offset, o2(this.options)); + this.findIfd0Offset(), this.ifd0Offset < 8 && l3("Malformed EXIF data"), !e4.chunked && this.ifd0Offset > e4.byteLength && l3(`IFD0 offset points to outside of file. +this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tiff && await e4.ensureChunk(this.ifd0Offset, o3(this.options)); let t4 = this.parseBlock(this.ifd0Offset, "ifd0"); return 0 !== t4.size ? (this.exifOffset = t4.get(34665), this.interopOffset = t4.get(40965), this.gpsOffset = t4.get(34853), this.xmp = t4.get(700), this.iptc = t4.get(33723), this.icc = t4.get(34675), this.options.sanitize && (t4.delete(34665), t4.delete(40965), t4.delete(34853), t4.delete(700), t4.delete(33723), t4.delete(34675)), t4) : void 0; } @@ -21465,7 +22012,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif return; if (this.ifd0 || await this.parseIfd0Block(), void 0 === this.exifOffset) return; - this.file.tiff && await this.file.ensureChunk(this.exifOffset, o2(this.options)); + this.file.tiff && await this.file.ensureChunk(this.exifOffset, o3(this.options)); let e4 = this.parseBlock(this.exifOffset, "exif"); return this.interopOffset || (this.interopOffset = e4.get(40965)), this.makerNote = e4.get(37500), this.userComment = e4.get(37510), this.options.sanitize && (e4.delete(40965), e4.delete(37500), e4.delete(37510)), this.unpack(e4, 41728), this.unpack(e4, 41729), e4; } @@ -21503,8 +22050,8 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } createOutput() { let e4, t4, s4, i4 = {}; - for (t4 of P2) - if (e4 = this[t4], !f2(e4)) + for (t4 of P4) + if (e4 = this[t4], !f3(e4)) if (s4 = this.canTranslate ? this.translateBlock(e4, t4) : Object.fromEntries(e4), this.options.mergeOutput) { if ("ifd1" === t4) continue; @@ -21525,14 +22072,14 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif var n3 = e4 + t4 / 60 + s4 / 3600; return "S" !== i4 && "W" !== i4 || (n3 *= -1), n3; } - e2(ie, "type", "tiff"), e2(ie, "headerLength", 10), y2.set("tiff", ie); - var re = Object.freeze({ __proto__: null, default: G, Exifr: H2, fileParsers: m2, segmentParsers: y2, fileReaders: b2, tagKeys: B2, tagValues: V2, tagRevivers: I2, createDictionary: x2, extendDictionary: C2, fetchUrlAsArrayBuffer: S2, readBlobAsArrayBuffer: A2, chunkedProps: L2, otherSegments: T2, segments: z2, tiffBlocks: P2, segmentsAndBlocks: F2, tiffExtractables: j2, inheritables: E2, allFormatters: M2, Options: R, parse: Y }); + e3(ie, "type", "tiff"), e3(ie, "headerLength", 10), y3.set("tiff", ie); + var re = Object.freeze({ __proto__: null, default: G3, Exifr: H3, fileParsers: m3, segmentParsers: y3, fileReaders: b2, tagKeys: B4, tagValues: V3, tagRevivers: I2, createDictionary: x3, extendDictionary: C3, fetchUrlAsArrayBuffer: S2, readBlobAsArrayBuffer: A4, chunkedProps: L2, otherSegments: T4, segments: z3, tiffBlocks: P4, segmentsAndBlocks: F4, tiffExtractables: j4, inheritables: E3, allFormatters: M2, Options: R, parse: Y }); var ae = { ifd0: false, ifd1: false, exif: false, gps: false, interop: false, sanitize: false, reviveValues: true, translateKeys: false, translateValues: false, mergeOutput: false }; var he = Object.assign({}, ae, { firstChunkSize: 4e4, gps: [1, 2, 3, 4] }); var le = Object.assign({}, ae, { tiff: false, ifd1: true, mergeOutput: false }); var de = Object.assign({}, ae, { firstChunkSize: 4e4, ifd0: [274] }); async function ce(e4) { - let t4 = new H2(de); + let t4 = new H3(de); await t4.read(e4); let s4 = await t4.parse(); if (s4 && s4.ifd0) @@ -21565,9 +22112,9 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif let t4 = await ce(e4); return Object.assign({ canvas: ge, css: me }, pe[t4]); } - var be = class extends c2 { + var be = class extends c3 { constructor(...t4) { - super(...t4), e2(this, "ranges", new we()), 0 !== this.byteLength && this.ranges.add(0, this.byteLength); + super(...t4), e3(this, "ranges", new we()), 0 !== this.byteLength && this.ranges.add(0, this.byteLength); } _tryExtend(e4, t4, s4) { if (0 === e4 && 0 === this.byteLength && s4) { @@ -21583,7 +22130,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } _extend(e4) { let t4; - t4 = a2 ? r2.allocUnsafe(e4) : new Uint8Array(e4); + t4 = a3 ? r3.allocUnsafe(e4) : new Uint8Array(e4); let s4 = new DataView(t4.buffer, t4.byteOffset, t4.byteLength); return t4.set(new Uint8Array(this.buffer, this.byteOffset, this.byteLength), 0), { uintView: t4, dataView: s4 }; } @@ -21604,7 +22151,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }; var we = class { constructor() { - e2(this, "list", []); + e3(this, "list", []); } get length() { return this.list.length; @@ -21628,7 +22175,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } var Oe = class extends be { constructor(t4, s4) { - super(0), e2(this, "chunksRead", 0), this.input = t4, this.options = s4; + super(0), e3(this, "chunksRead", 0), this.input = t4, this.options = s4; } async readWhole() { this.chunked = false, await this.readChunk(this.nextChunkOffset); @@ -21668,14 +22215,14 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif b2.set("blob", class extends Oe { async readWhole() { this.chunked = false; - let e4 = await A2(this.input); + let e4 = await A4(this.input); this._swapArrayBuffer(e4); } readChunked() { return this.chunked = true, this.size = this.input.size, super.readChunked(); } async _readChunk(e4, t4) { - let s4 = t4 ? e4 + t4 : void 0, i4 = this.input.slice(e4, s4), n3 = await A2(i4); + let s4 = t4 ? e4 + t4 : void 0, i4 = this.input.slice(e4, s4), n3 = await A4(i4); return this.set(n3, e4, true); } }); @@ -21910,15 +22457,15 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } let sW = targetWidth * 2 ** (steps - 1); let sH = targetHeight * 2 ** (steps - 1); - const x3 = 2; + const x4 = 2; while (steps--) { const canvas = document.createElement("canvas"); canvas.width = sW; canvas.height = sH; canvas.getContext("2d").drawImage(img, 0, 0, sW, sH); img = canvas; - sW = Math.round(sW / x3); - sH = Math.round(sH / x3); + sW = Math.round(sW / x4); + sH = Math.round(sH / x4); } return img; } @@ -22094,10 +22641,9 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } async function* getFilesFromDataTransfer(dataTransfer, logDropError) { const fileSystemHandles = await Promise.all(Array.from(dataTransfer.items, async (item) => { - var _fileSystemHandle; let fileSystemHandle; const getAsEntry = () => typeof item.getAsEntry === "function" ? item.getAsEntry() : item.webkitGetAsEntry(); - (_fileSystemHandle = fileSystemHandle) != null ? _fileSystemHandle : fileSystemHandle = getAsFileSystemHandleFromEntry(getAsEntry(), logDropError); + fileSystemHandle != null ? fileSystemHandle : fileSystemHandle = getAsFileSystemHandleFromEntry(getAsEntry(), logDropError); return { fileSystemHandle, lastResortFile: item.getAsFile() @@ -22156,154 +22702,6 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }; } - // node_modules/preact/hooks/dist/hooks.module.js - var t3; - var r3; - var u3; - var i3; - var o3 = 0; - var f3 = []; - var c3 = l; - var e3 = c3.__b; - var a3 = c3.__r; - var v3 = c3.diffed; - var l3 = c3.__c; - var m3 = c3.unmount; - var s3 = c3.__; - function p3(n3, t4) { - c3.__h && c3.__h(r3, n3, o3 || t4), o3 = 0; - var u4 = r3.__H || (r3.__H = { __: [], __h: [] }); - return n3 >= u4.__.length && u4.__.push({}), u4.__[n3]; - } - function d3(n3) { - return o3 = 1, h3(D3, n3); - } - function h3(n3, u4, i4) { - var o4 = p3(t3++, 2); - if (o4.t = n3, !o4.__c && (o4.__ = [i4 ? i4(u4) : D3(void 0, u4), function(n4) { - var t4 = o4.__N ? o4.__N[0] : o4.__[0], r4 = o4.t(t4, n4); - t4 !== r4 && (o4.__N = [r4, o4.__[1]], o4.__c.setState({})); - }], o4.__c = r3, !r3.__f)) { - var f4 = function(n4, t4, r4) { - if (!o4.__c.__H) - return true; - var u5 = o4.__c.__H.__.filter(function(n5) { - return !!n5.__c; - }); - if (u5.every(function(n5) { - return !n5.__N; - })) - return !c4 || c4.call(this, n4, t4, r4); - var i5 = o4.__c.props !== n4; - return u5.forEach(function(n5) { - if (n5.__N) { - var t5 = n5.__[0]; - n5.__ = n5.__N, n5.__N = void 0, t5 !== n5.__[0] && (i5 = true); - } - }), c4 && c4.call(this, n4, t4, r4) || i5; - }; - r3.__f = true; - var c4 = r3.shouldComponentUpdate, e4 = r3.componentWillUpdate; - r3.componentWillUpdate = function(n4, t4, r4) { - if (this.__e) { - var u5 = c4; - c4 = void 0, f4(n4, t4, r4), c4 = u5; - } - e4 && e4.call(this, n4, t4, r4); - }, r3.shouldComponentUpdate = f4; - } - return o4.__N || o4.__; - } - function y3(n3, u4) { - var i4 = p3(t3++, 3); - !c3.__s && C3(i4.__H, u4) && (i4.__ = n3, i4.u = u4, r3.__H.__h.push(i4)); - } - function A3(n3) { - return o3 = 5, T3(function() { - return { current: n3 }; - }, []); - } - function T3(n3, r4) { - var u4 = p3(t3++, 7); - return C3(u4.__H, r4) && (u4.__ = n3(), u4.__H = r4, u4.__h = n3), u4.__; - } - function q3(n3, t4) { - return o3 = 8, T3(function() { - return n3; - }, t4); - } - function j3() { - for (var n3; n3 = f3.shift(); ) - if (n3.__P && n3.__H) - try { - n3.__H.__h.forEach(z3), n3.__H.__h.forEach(B3), n3.__H.__h = []; - } catch (t4) { - n3.__H.__h = [], c3.__e(t4, n3.__v); - } - } - c3.__b = function(n3) { - r3 = null, e3 && e3(n3); - }, c3.__ = function(n3, t4) { - n3 && t4.__k && t4.__k.__m && (n3.__m = t4.__k.__m), s3 && s3(n3, t4); - }, c3.__r = function(n3) { - a3 && a3(n3), t3 = 0; - var i4 = (r3 = n3.__c).__H; - i4 && (u3 === r3 ? (i4.__h = [], r3.__h = [], i4.__.forEach(function(n4) { - n4.__N && (n4.__ = n4.__N), n4.u = n4.__N = void 0; - })) : (i4.__h.forEach(z3), i4.__h.forEach(B3), i4.__h = [], t3 = 0)), u3 = r3; - }, c3.diffed = function(n3) { - v3 && v3(n3); - var t4 = n3.__c; - t4 && t4.__H && (t4.__H.__h.length && (1 !== f3.push(t4) && i3 === c3.requestAnimationFrame || ((i3 = c3.requestAnimationFrame) || w3)(j3)), t4.__H.__.forEach(function(n4) { - n4.u && (n4.__H = n4.u), n4.u = void 0; - })), u3 = r3 = null; - }, c3.__c = function(n3, t4) { - t4.some(function(n4) { - try { - n4.__h.forEach(z3), n4.__h = n4.__h.filter(function(n5) { - return !n5.__ || B3(n5); - }); - } catch (r4) { - t4.some(function(n5) { - n5.__h && (n5.__h = []); - }), t4 = [], c3.__e(r4, n4.__v); - } - }), l3 && l3(n3, t4); - }, c3.unmount = function(n3) { - m3 && m3(n3); - var t4, r4 = n3.__c; - r4 && r4.__H && (r4.__H.__.forEach(function(n4) { - try { - z3(n4); - } catch (n5) { - t4 = n5; - } - }), r4.__H = void 0, t4 && c3.__e(t4, r4.__v)); - }; - var k3 = "function" == typeof requestAnimationFrame; - function w3(n3) { - var t4, r4 = function() { - clearTimeout(u4), k3 && cancelAnimationFrame(t4), setTimeout(n3); - }, u4 = setTimeout(r4, 100); - k3 && (t4 = requestAnimationFrame(r4)); - } - function z3(n3) { - var t4 = r3, u4 = n3.__c; - "function" == typeof u4 && (n3.__c = void 0, u4()), r3 = t4; - } - function B3(n3) { - var t4 = r3; - n3.__c = n3.__(), r3 = t4; - } - function C3(n3, t4) { - return !n3 || n3.length !== t4.length || t4.some(function(t5, r4) { - return t5 !== n3[r4]; - }); - } - function D3(n3, t4) { - return "function" == typeof t4 ? t4(n3) : t4; - } - // node_modules/@uppy/provider-views/lib/ProviderView/AuthView.js function GoogleIcon() { return _("svg", { @@ -22346,7 +22744,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif onAuth } = _ref; const isGoogleDrive = pluginName === "Google Drive"; - const onSubmit = q3((e4) => { + const onSubmit = q2((e4) => { e4.preventDefault(); onAuth(); }, [onAuth]); @@ -22814,8 +23212,8 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif virtualList, utmSource } = props; - const [isShiftKeyPressed, setIsShiftKeyPressed] = d3(false); - y3(() => { + const [isShiftKeyPressed, setIsShiftKeyPressed] = d2(false); + y2(() => { const handleKeyUp = (e4) => { if (e4.key === "Shift") setIsShiftKeyPressed(false); @@ -23620,17 +24018,17 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif const onInput = (e4) => { setSearchString(e4.target.value); }; - const submit = q3((ev) => { + const submit = q2((ev) => { ev.preventDefault(); submitSearchString(); }, [submitSearchString]); - const [form] = d3(() => { + const [form] = d2(() => { const formEl = document.createElement("form"); formEl.setAttribute("tabindex", "-1"); formEl.id = nanoid(); return formEl; }); - y3(() => { + y2(() => { document.body.appendChild(form); form.addEventListener("submit", submit); return () => { @@ -23709,10 +24107,10 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif partialTree, validateAggregateRestrictions } = _ref; - const aggregateRestrictionError = T3(() => { + const aggregateRestrictionError = T2(() => { return validateAggregateRestrictions(partialTree); }, [partialTree, validateAggregateRestrictions]); - const nOfSelectedFiles = T3(() => { + const nOfSelectedFiles = T2(() => { return getNumberOfSelectedFiles_default(partialTree); }, [partialTree]); if (nOfSelectedFiles === 0) { @@ -23863,7 +24261,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif return "__private_" + id6++ + "_" + e4; } var packageJson6 = { - "version": "4.4.2" + "version": "4.4.5" }; function defaultPickerIcon() { return _("svg", { @@ -23922,6 +24320,19 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }); return filtered; }; + this.getBreadcrumbs = () => { + const { + partialTree, + currentFolderId + } = this.plugin.getPluginState(); + return getBreadcrumbs_default(partialTree, currentFolderId); + }; + this.getSelectedAmount = () => { + const { + partialTree + } = this.plugin.getPluginState(); + return getNumberOfSelectedFiles_default(partialTree); + }; this.validateAggregateRestrictions = (partialTree) => { const checkedFiles = partialTree.filter((item) => item.type === "file" && item.status === "checked"); const uppyFiles = checkedFiles.map((file) => file.data); @@ -24155,11 +24566,10 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } const { partialTree, - currentFolderId, username, searchString } = this.plugin.getPluginState(); - const breadcrumbs = getBreadcrumbs_default(partialTree, currentFolderId); + const breadcrumbs = this.getBreadcrumbs(); return _("div", { className: (0, import_classnames6.default)("uppy-ProviderBrowser", `uppy-ProviderBrowser-viewType--${opts.viewType}`) }, _(Header, { @@ -24228,7 +24638,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif // node_modules/@uppy/provider-views/lib/SearchProviderView/SearchProviderView.js var import_classnames7 = __toESM(require_classnames(), 1); var packageJson7 = { - "version": "4.4.2" + "version": "4.4.5" }; var defaultState = { loading: false, @@ -25542,7 +25952,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif // Mobile 71 ) : 200; - const rows = T3(() => { + const rows = T2(() => { const sortByGhostComesFirst = (file1, file2) => Number(files[file2].isGhost) - Number(files[file1].isGhost); const fileIds = Object.keys(files); if (recoveredState) @@ -25970,7 +26380,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif state, uppy } = _ref; - const ref = A3(null); + const ref = A2(null); return _("div", { className: (0, import_classnames10.default)("uppy-DashboardContent-panel", className), role: "tabpanel", @@ -26231,8 +26641,8 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif var _file$meta$field$id; storedMetaData[field.id] = (_file$meta$field$id = file.meta[field.id]) != null ? _file$meta$field$id : ""; }); - const [formState, setFormState] = d3(storedMetaData); - const handleSave = q3((ev) => { + const [formState, setFormState] = d2(storedMetaData); + const handleSave = q2((ev) => { ev.preventDefault(); saveFileCard(formState, fileCardFor); }, [saveFileCard, formState, fileCardFor]); @@ -26245,13 +26655,13 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif const handleCancel = () => { toggleFileCard(false); }; - const [form] = d3(() => { + const [form] = d2(() => { const formEl = document.createElement("form"); formEl.setAttribute("tabindex", "-1"); formEl.id = nanoid(); return formEl; }); - y3(() => { + y2(() => { document.body.appendChild(form); form.addEventListener("submit", handleSave); return () => { @@ -26328,11 +26738,11 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif let { children } = _ref; - const [cachedChildren, setCachedChildren] = d3(null); - const [className, setClassName] = d3(""); - const enterTimeoutRef = A3(); - const leaveTimeoutRef = A3(); - const animationFrameRef = A3(); + const [cachedChildren, setCachedChildren] = d2(null); + const [className, setClassName] = d2(""); + const enterTimeoutRef = A2(); + const leaveTimeoutRef = A2(); + const animationFrameRef = A2(); const handleEnterTransition = () => { setClassName(`${transitionName}-enter`); cancelAnimationFrame(animationFrameRef.current); @@ -26358,7 +26768,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }, duration); }); }; - y3(() => { + y2(() => { const child = H(children)[0]; if (cachedChildren === child) return; @@ -26369,7 +26779,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } setCachedChildren(child); }, [children, cachedChildren]); - y3(() => { + y2(() => { return () => { clearTimeout(enterTimeoutRef.current); clearTimeout(leaveTimeoutRef.current); @@ -26671,7 +27081,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif return "__private_" + id7++ + "_" + e4; } var packageJson8 = { - "version": "4.3.2" + "version": "4.3.4" }; var memoize = memoizeOne.default || memoizeOne; var TAB_KEY = 9; @@ -28199,7 +28609,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif // node_modules/@uppy/image-editor/lib/ImageEditor.js var packageJson9 = { - "version": "3.3.1" + "version": "3.3.3" }; var defaultCropperOptions = { viewMode: 0, @@ -28369,13 +28779,13 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }); _classPrivateFieldLooseBase8(this, _uppy)[_uppy] = uppy; } - on(event, fn2) { - _classPrivateFieldLooseBase8(this, _events)[_events].push([event, fn2]); - return _classPrivateFieldLooseBase8(this, _uppy)[_uppy].on(event, fn2); + on(event, fn3) { + _classPrivateFieldLooseBase8(this, _events)[_events].push([event, fn3]); + return _classPrivateFieldLooseBase8(this, _uppy)[_uppy].on(event, fn3); } remove() { - for (const [event, fn2] of _classPrivateFieldLooseBase8(this, _events)[_events].splice(0)) { - _classPrivateFieldLooseBase8(this, _uppy)[_uppy].off(event, fn2); + for (const [event, fn3] of _classPrivateFieldLooseBase8(this, _events)[_events].splice(0)) { + _classPrivateFieldLooseBase8(this, _uppy)[_uppy].off(event, fn3); } } onFilePause(fileID, cb) { @@ -28553,20 +28963,20 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif this.limit = limit; } } - run(fn2, queueOptions) { + run(fn3, queueOptions) { if (!_classPrivateFieldLooseBase9(this, _paused)[_paused] && _classPrivateFieldLooseBase9(this, _activeRequests)[_activeRequests] < this.limit) { - return _classPrivateFieldLooseBase9(this, _call)[_call](fn2); + return _classPrivateFieldLooseBase9(this, _call)[_call](fn3); } - return _classPrivateFieldLooseBase9(this, _queue)[_queue](fn2, queueOptions); + return _classPrivateFieldLooseBase9(this, _queue)[_queue](fn3, queueOptions); } - wrapSyncFunction(fn2, queueOptions) { + wrapSyncFunction(fn3, queueOptions) { var _this = this; return function() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } const queuedRequest = _this.run(() => { - fn2(...args); + fn3(...args); queueMicrotask(() => queuedRequest.done()); return () => { }; @@ -28579,7 +28989,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif }; }; } - wrapPromiseFunction(fn2, queueOptions) { + wrapPromiseFunction(fn3, queueOptions) { var _this2 = this; return function() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { @@ -28591,7 +29001,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif let cancelError; let innerPromise; try { - innerPromise = Promise.resolve(fn2(...args)); + innerPromise = Promise.resolve(fn3(...args)); } catch (err) { innerPromise = Promise.reject(err); } @@ -28668,12 +29078,12 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif return _classPrivateFieldLooseBase9(this, _paused)[_paused]; } }; - function _call2(fn2) { + function _call2(fn3) { _classPrivateFieldLooseBase9(this, _activeRequests)[_activeRequests] += 1; let done = false; let cancelActive; try { - cancelActive = fn2(); + cancelActive = fn3(); } catch (err) { _classPrivateFieldLooseBase9(this, _activeRequests)[_activeRequests] -= 1; throw err; @@ -28714,9 +29124,9 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif next.abort = handler.abort; next.done = handler.done; } - function _queue2(fn2, options2) { + function _queue2(fn3, options2) { const handler = { - fn: fn2, + fn: fn3, priority: (options2 == null ? void 0 : options2.priority) || 0, abort: () => { _classPrivateFieldLooseBase9(this, _dequeue)[_dequeue](handler); @@ -29880,6 +30290,22 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif } }; + // src/js/controllers/logo_controller.js + var logo_controller_default = class extends Controller { + static targets = ["light", "dark"]; + connect() { + const dark = document.documentElement.classList.contains("dark"); + this.toggleLogo(dark); + } + updateFromEvent({ detail: { mode } }) { + this.toggleLogo(mode === "dark"); + } + toggleLogo(dark) { + this.lightTarget.hidden = dark; + this.darkTarget.hidden = !dark; + } + }; + // src/js/controllers/register_controllers.js function register_controllers_default(application2) { application2.register("password-visibility", password_visibility_controller_default); @@ -29903,6 +30329,7 @@ this.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e4.byteLength}`), e4.tif application2.register("attachment-preview-container", attachment_preview_container_controller_default); application2.register("remote-modal", remote_modal_controller_default); application2.register("key-value-store", key_value_store_controller_default); + application2.register("logo", logo_controller_default); } // src/js/turbo/turbo_actions.js @@ -29941,12 +30368,12 @@ cropperjs/dist/cropper.js: @hotwired/turbo/dist/turbo.es2017-esm.js: (*! - Turbo 8.0.12 - Copyright © 2024 37signals LLC + Turbo 8.0.13 + Copyright © 2025 37signals LLC *) dompurify/dist/purify.es.mjs: - (*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE *) + (*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE *) @uppy/utils/lib/Translator.js: (** diff --git a/app/assets/plutonium.js.map b/app/assets/plutonium.js.map index 2d41f7c7..5b66ef54 100644 --- a/app/assets/plutonium.js.map +++ b/app/assets/plutonium.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../../node_modules/namespace-emitter/index.js", "../../node_modules/lodash/isObject.js", "../../node_modules/lodash/_freeGlobal.js", "../../node_modules/lodash/_root.js", "../../node_modules/lodash/now.js", "../../node_modules/lodash/_trimmedEndIndex.js", "../../node_modules/lodash/_baseTrim.js", "../../node_modules/lodash/_Symbol.js", "../../node_modules/lodash/_getRawTag.js", "../../node_modules/lodash/_objectToString.js", "../../node_modules/lodash/_baseGetTag.js", "../../node_modules/lodash/isObjectLike.js", "../../node_modules/lodash/isSymbol.js", "../../node_modules/lodash/toNumber.js", "../../node_modules/lodash/debounce.js", "../../node_modules/lodash/throttle.js", "../../node_modules/@transloadit/prettier-bytes/src/prettierBytes.ts", "../../node_modules/wildcard/index.js", "../../node_modules/mime-match/index.js", "../../node_modules/classnames/index.js", "../../node_modules/eventemitter3/index.js", "../../node_modules/cropperjs/dist/cropper.js", "../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../src/js/controllers/resource_header_controller.js", "../../src/js/controllers/nested_resource_form_fields_controller.js", "../../src/js/controllers/form_controller.js", "../../node_modules/@popperjs/core/lib/enums.js", "../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../node_modules/@popperjs/core/lib/utils/math.js", "../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../node_modules/@popperjs/core/lib/utils/within.js", "../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../node_modules/@popperjs/core/lib/createPopper.js", "../../node_modules/@popperjs/core/lib/popper.js", "../../src/js/controllers/resource_drop_down_controller.js", "../../src/js/controllers/resource_collapse_controller.js", "../../src/js/controllers/resource_dismiss_controller.js", "../../src/js/controllers/frame_navigator_controller.js", "../../src/js/controllers/color_mode_controller.js", "../../node_modules/dompurify/dist/purify.es.mjs", "../../node_modules/marked/src/defaults.ts", "../../node_modules/marked/src/rules.ts", "../../node_modules/marked/src/helpers.ts", "../../node_modules/marked/src/Tokenizer.ts", "../../node_modules/marked/src/Lexer.ts", "../../node_modules/marked/src/Renderer.ts", "../../node_modules/marked/src/TextRenderer.ts", "../../node_modules/marked/src/Parser.ts", "../../node_modules/marked/src/Hooks.ts", "../../node_modules/marked/src/Instance.ts", "../../node_modules/marked/src/marked.ts", "../../src/js/controllers/easymde_controller.js", "../../src/js/controllers/slim_select_controller.js", "../../src/js/controllers/flatpickr_controller.js", "../../src/js/controllers/intl_tel_input_controller.js", "../../src/js/controllers/select_navigator.js", "../../src/js/controllers/resource_tab_list_controller.js", "../../node_modules/@uppy/utils/lib/Translator.js", "../../node_modules/@uppy/core/lib/Uppy.js", "../../node_modules/nanoid/non-secure/index.js", "../../node_modules/@uppy/store-default/lib/index.js", "../../node_modules/@uppy/utils/lib/getFileNameAndExtension.js", "../../node_modules/@uppy/utils/lib/mimeTypes.js", "../../node_modules/@uppy/utils/lib/getFileType.js", "../../node_modules/@uppy/utils/lib/generateFileID.js", "../../node_modules/@uppy/core/lib/supportsUploadProgress.js", "../../node_modules/@uppy/core/lib/getFileName.js", "../../node_modules/@uppy/utils/lib/getTimeStamp.js", "../../node_modules/@uppy/core/lib/loggers.js", "../../node_modules/@uppy/core/lib/Restricter.js", "../../node_modules/@uppy/core/lib/locale.js", "../../node_modules/preact/src/constants.js", "../../node_modules/preact/src/util.js", "../../node_modules/preact/src/options.js", "../../node_modules/preact/src/create-element.js", "../../node_modules/preact/src/component.js", "../../node_modules/preact/src/diff/props.js", "../../node_modules/preact/src/create-context.js", "../../node_modules/preact/src/diff/children.js", "../../node_modules/preact/src/diff/index.js", "../../node_modules/preact/src/render.js", "../../node_modules/preact/src/clone-element.js", "../../node_modules/preact/src/diff/catch-error.js", "../../node_modules/@uppy/utils/lib/isDOMElement.js", "../../node_modules/@uppy/utils/lib/findDOMElement.js", "../../node_modules/@uppy/utils/lib/getTextDirection.js", "../../node_modules/@uppy/core/lib/BasePlugin.js", "../../node_modules/@uppy/core/lib/UIPlugin.js", "../../node_modules/@uppy/utils/lib/emaFilter.js", "../../node_modules/@uppy/status-bar/lib/StatusBarStates.js", "../../node_modules/@uppy/status-bar/lib/StatusBarUI.js", "../../node_modules/@uppy/status-bar/lib/calculateProcessingProgress.js", "../../node_modules/@uppy/status-bar/lib/Components.js", "../../node_modules/@uppy/utils/lib/secondsToTime.js", "../../node_modules/@uppy/utils/lib/prettyETA.js", "../../node_modules/@uppy/status-bar/lib/locale.js", "../../node_modules/@uppy/status-bar/lib/StatusBar.js", "../../node_modules/@uppy/informer/lib/FadeIn.js", "../../node_modules/@uppy/informer/lib/TransitionGroup.js", "../../node_modules/@uppy/informer/lib/Informer.js", "../../node_modules/@uppy/utils/lib/dataURItoBlob.js", "../../node_modules/@uppy/utils/lib/isObjectURL.js", "../../node_modules/@uppy/utils/lib/isPreviewSupported.js", "../../node_modules/exifr/dist/mini.esm.mjs", "../../node_modules/@uppy/thumbnail-generator/lib/locale.js", "../../node_modules/@uppy/thumbnail-generator/lib/index.js", "../../node_modules/@uppy/utils/lib/findAllDOMElements.js", "../../node_modules/@uppy/utils/lib/toArray.js", "../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js", "../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js", "../../node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js", "../../node_modules/@uppy/utils/lib/getDroppedFiles/index.js", "../../node_modules/@uppy/provider-views/lib/ProviderView/ProviderView.js", "../../node_modules/@uppy/utils/lib/remoteFileObjToLocal.js", "../../node_modules/preact/hooks/src/index.js", "../../node_modules/@uppy/provider-views/lib/ProviderView/AuthView.js", "../../node_modules/@uppy/provider-views/lib/ProviderView/Header.js", "../../node_modules/@uppy/provider-views/lib/ProviderView/User.js", "../../node_modules/@uppy/provider-views/lib/Breadcrumbs.js", "../../node_modules/@uppy/utils/lib/VirtualList.js", "../../node_modules/@uppy/provider-views/lib/Item/index.js", "../../node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js", "../../node_modules/@uppy/provider-views/lib/Item/components/GridItem.js", "../../node_modules/@uppy/provider-views/lib/Item/components/ListItem.js", "../../node_modules/@uppy/provider-views/lib/Browser.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/afterOpenFolder.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/afterScrollFolder.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/shallowClone.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/afterToggleCheckbox.js", "../../node_modules/eventemitter3/index.mjs", "../../node_modules/p-timeout/index.js", "../../node_modules/p-queue/dist/lower-bound.js", "../../node_modules/p-queue/dist/priority-queue.js", "../../node_modules/p-queue/dist/index.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/afterFill.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/index.js", "../../node_modules/@uppy/provider-views/lib/utils/shouldHandleScroll.js", "../../node_modules/@uppy/provider-views/lib/utils/handleError.js", "../../node_modules/@uppy/provider-views/lib/utils/getClickedRange.js", "../../node_modules/@uppy/provider-views/lib/SearchInput.js", "../../node_modules/@uppy/provider-views/lib/FooterActions.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/getNumberOfSelectedFiles.js", "../../node_modules/@uppy/provider-views/lib/utils/getTagFile.js", "../../node_modules/@uppy/provider-views/lib/utils/addFiles.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/getCheckedFilesWithPaths.js", "../../node_modules/@uppy/provider-views/lib/utils/PartialTreeUtils/getBreadcrumbs.js", "../../node_modules/@uppy/provider-views/lib/SearchProviderView/SearchProviderView.js", "../../node_modules/memoize-one/dist/memoize-one.esm.js", "../../node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js", "../../node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js", "../../node_modules/@uppy/dashboard/lib/utils/trapFocus.js", "../../node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js", "../../node_modules/@uppy/dashboard/lib/components/Dashboard.js", "../../node_modules/@uppy/utils/lib/isDragDropSupported.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/index.js", "../../node_modules/shallow-equal/src/arrays.ts", "../../node_modules/shallow-equal/src/objects.ts", "../../node_modules/shallow-equal/src/index.ts", "../../node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js", "../../node_modules/@uppy/dashboard/lib/components/FilePreview.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/MetaErrorMessage.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js", "../../node_modules/@uppy/utils/lib/truncateString.js", "../../node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js", "../../node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js", "../../node_modules/@uppy/dashboard/lib/components/FileList.js", "../../node_modules/@uppy/dashboard/lib/components/AddFiles.js", "../../node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js", "../../node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js", "../../node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js", "../../node_modules/@uppy/dashboard/lib/components/EditorPanel.js", "../../node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js", "../../node_modules/@uppy/dashboard/lib/components/FileCard/index.js", "../../node_modules/@uppy/dashboard/lib/components/FileCard/RenderMetaFields.js", "../../node_modules/@uppy/dashboard/lib/components/Slide.js", "../../node_modules/@uppy/dashboard/lib/locale.js", "../../node_modules/@uppy/dashboard/lib/Dashboard.js", "../../node_modules/@uppy/image-editor/lib/Editor.js", "../../node_modules/@uppy/image-editor/lib/utils/getCanvasDataThatFitsPerfectlyIntoContainer.js", "../../node_modules/@uppy/image-editor/lib/utils/getScaleFactorThatRemovesDarkCorners.js", "../../node_modules/@uppy/image-editor/lib/utils/limitCropboxMovementOnMove.js", "../../node_modules/@uppy/image-editor/lib/utils/limitCropboxMovementOnResize.js", "../../node_modules/@uppy/image-editor/lib/locale.js", "../../node_modules/@uppy/image-editor/lib/ImageEditor.js", "../../node_modules/@uppy/core/lib/EventManager.js", "../../node_modules/@uppy/utils/lib/RateLimitedQueue.js", "../../node_modules/@uppy/utils/lib/NetworkError.js", "../../node_modules/@uppy/utils/lib/isNetworkError.js", "../../node_modules/@uppy/utils/lib/ProgressTimeout.js", "../../node_modules/@uppy/utils/lib/fetcher.js", "../../node_modules/@uppy/utils/lib/fileFilters.js", "../../node_modules/@uppy/utils/lib/getAllowedMetaFields.js", "../../node_modules/@uppy/xhr-upload/lib/locale.js", "../../node_modules/@uppy/xhr-upload/lib/index.js", "../../src/js/support/dom_element.js", "../../src/js/controllers/attachment_input_controller.js", "../../src/js/support/mime_icon.js", "../../src/js/controllers/attachment_preview_controller.js", "../../src/js/controllers/attachment_preview_container_controller.js", "../../src/js/controllers/sidebar_controller.js", "../../src/js/controllers/password_visibility_controller.js", "../../src/js/controllers/remote_modal_controller.js", "../../src/js/controllers/key_value_store_controller.js", "../../src/js/controllers/register_controllers.js", "../../src/js/turbo/turbo_actions.js", "../../src/js/plutonium.js"], - "sourcesContent": ["/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n* console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n* console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n var emitter = {}\n var _fns = emitter._fns = {}\n\n /**\n * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n * @name emit\n * @param {String} event \u2013 the name of the event, with optional namespace\n * @param {...*} data \u2013 up to 6 arguments that are passed to the event listener\n * @example\n * emitter.emit('example')\n * emitter.emit('demo:test')\n * emitter.emit('data', { example: true}, 'a string', 1)\n */\n emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n var toEmit = getListeners(event)\n\n if (toEmit.length) {\n emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n }\n }\n\n /**\n * Create en event listener.\n * @name on\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.on('example', function () {})\n * emitter.on('demo', function () {})\n */\n emitter.on = function on (event, fn) {\n if (!_fns[event]) {\n _fns[event] = []\n }\n\n _fns[event].push(fn)\n }\n\n /**\n * Create en event listener that fires once.\n * @name once\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.once('example', function () {})\n * emitter.once('demo', function () {})\n */\n emitter.once = function once (event, fn) {\n function one () {\n fn.apply(this, arguments)\n emitter.off(event, one)\n }\n this.on(event, one)\n }\n\n /**\n * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n * @name off\n * @param {String} event\n * @param {Function} [fn] \u2013 the specific handler\n * @example\n * emitter.off('example')\n * emitter.off('demo', function () {})\n */\n emitter.off = function off (event, fn) {\n var keep = []\n\n if (event && fn) {\n var fns = this._fns[event]\n var i = 0\n var l = fns ? fns.length : 0\n\n for (i; i < l; i++) {\n if (fns[i] !== fn) {\n keep.push(fns[i])\n }\n }\n }\n\n keep.length ? this._fns[event] = keep : delete this._fns[event]\n }\n\n function getListeners (e) {\n var out = _fns[e] ? _fns[e] : []\n var idx = e.indexOf(':')\n var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n var keys = Object.keys(_fns)\n var i = 0\n var l = keys.length\n\n for (i; i < l; i++) {\n var key = keys[i]\n if (key === '*') {\n out = out.concat(_fns[key])\n }\n\n if (args.length === 2 && args[0] === key) {\n out = out.concat(_fns[key])\n break\n }\n }\n\n return out\n }\n\n function emitAll (e, fns, args) {\n var i = 0\n var l = fns.length\n\n for (i; i < l; i++) {\n if (!fns[i]) break\n fns[i].event = e\n fns[i].apply(fns[i], args)\n }\n }\n\n return emitter\n}\n", "/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n", "/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n", "var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n", "var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n", "/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n", "var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n", "var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n", "var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n", "/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n", "var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n", "/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n", "var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n", "var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n", "var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n", "var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n", "// Adapted from https://github.com/Flet/prettier-bytes/\n// Changing 1000 bytes to 1024, so we can keep uppercase KB vs kB\n// ISC License (c) Dan Flettre https://github.com/Flet/prettier-bytes/blob/master/LICENSE\nexport = function prettierBytes(input: number): string {\n if (typeof input !== 'number' || Number.isNaN(input)) {\n throw new TypeError(`Expected a number, got ${typeof input}`)\n }\n\n const neg = input < 0\n let num = Math.abs(input)\n\n if (neg) {\n num = -num\n }\n\n if (num === 0) {\n return '0 B'\n }\n\n const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\n const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1)\n const value = Number(num / 1024 ** exponent)\n const unit = units[exponent]\n\n return `${value >= 10 || value % 1 === 0 ? Math.round(value) : value.toFixed(1)} ${unit}`\n}\n", "/* jshint node: true */\n'use strict';\n\n/**\n # wildcard\n\n Very simple wildcard matching, which is designed to provide the same\n functionality that is found in the\n [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n ## Usage\n\n It works with strings:\n\n <<< examples/strings.js\n\n Arrays:\n\n <<< examples/arrays.js\n\n Objects (matching against keys):\n\n <<< examples/objects.js\n\n While the library works in Node, if you are are looking for file-based\n wildcard matching then you should have a look at:\n\n \n**/\n\nfunction WildcardMatcher(text, separator) {\n this.text = text = text || '';\n this.hasWild = ~text.indexOf('*');\n this.separator = separator;\n this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n var matches = true;\n var parts = this.parts;\n var ii;\n var partsCount = parts.length;\n var testParts;\n\n if (typeof input == 'string' || input instanceof String) {\n if (!this.hasWild && this.text != input) {\n matches = false;\n } else {\n testParts = (input || '').split(this.separator);\n for (ii = 0; matches && ii < partsCount; ii++) {\n if (parts[ii] === '*') {\n continue;\n } else if (ii < testParts.length) {\n matches = parts[ii] === testParts[ii];\n } else {\n matches = false;\n }\n }\n\n // If matches, then return the component parts\n matches = matches && testParts;\n }\n }\n else if (typeof input.splice == 'function') {\n matches = [];\n\n for (ii = input.length; ii--; ) {\n if (this.match(input[ii])) {\n matches[matches.length] = input[ii];\n }\n }\n }\n else if (typeof input == 'object') {\n matches = {};\n\n for (var key in input) {\n if (this.match(key)) {\n matches[key] = input[key];\n }\n }\n }\n\n return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n if (typeof test != 'undefined') {\n return matcher.match(test);\n }\n\n return matcher;\n};\n", "var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n # mime-match\n\n A simple function to checker whether a target mime type matches a mime-type\n pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n ## Example Usage\n\n <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n function test(pattern) {\n var result = wildcard(pattern, target, reMimePartSplit);\n\n // ensure that we have a valid mime type (should have two parts)\n return result && result.length >= 2;\n }\n\n return pattern ? test(pattern.split(';')[0]) : test;\n};\n", "/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:05.335Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180\u00B0\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90\u00B0\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90\u00B0\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90\u00B0\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90\u00B0\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n", "/*!\nTurbo 8.0.12\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * \n *
\n * Show all expanded messages in this frame.\n * \n *\n *
\n * Show response from this form within this frame.\n *
\n * \n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else if (name == \"disabled\") {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n get shouldReloadWithMorph() {\n return this.src && this.refresh === \"morph\"\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nconst drive = {\n enabled: true,\n progressBarDelay: 500,\n unvisitableExtensions: new Set(\n [\n \".7z\", \".aac\", \".apk\", \".avi\", \".bmp\", \".bz2\", \".css\", \".csv\", \".deb\", \".dmg\", \".doc\",\n \".docx\", \".exe\", \".gif\", \".gz\", \".heic\", \".heif\", \".ico\", \".iso\", \".jpeg\", \".jpg\",\n \".js\", \".json\", \".m4a\", \".mkv\", \".mov\", \".mp3\", \".mp4\", \".mpeg\", \".mpg\", \".msi\",\n \".ogg\", \".ogv\", \".pdf\", \".pkg\", \".png\", \".ppt\", \".pptx\", \".rar\", \".rtf\",\n \".svg\", \".tar\", \".tif\", \".tiff\", \".txt\", \".wav\", \".webm\", \".webp\", \".wma\", \".wmv\",\n \".xls\", \".xlsx\", \".xml\", \".zip\"\n ]\n )\n};\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getCspNonce();\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction cancelEvent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction getCspNonce() {\n const element = getMetaElement(\"csp-nonce\");\n\n if (element) {\n const { nonce, content } = element;\n return nonce == \"\" ? content : nonce\n }\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(name) {\n if (name === \"_blank\") {\n return false\n } else if (name) {\n for (const element of document.getElementsByName(name)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nconst submitter = {\n \"aria-disabled\": {\n beforeSubmit: submitter => {\n submitter.setAttribute(\"aria-disabled\", \"true\");\n submitter.addEventListener(\"click\", cancelEvent);\n },\n\n afterSubmit: submitter => {\n submitter.removeAttribute(\"aria-disabled\");\n submitter.removeEventListener(\"click\", cancelEvent);\n }\n },\n\n \"disabled\": {\n beforeSubmit: submitter => submitter.disabled = true,\n afterSubmit: submitter => submitter.disabled = false\n }\n};\n\nclass Config {\n #submitter = null\n\n constructor(config) {\n Object.assign(this, config);\n }\n\n get submitter() {\n return this.#submitter\n }\n\n set submitter(value) {\n this.#submitter = submitter[value] || value;\n }\n}\n\nconst forms = new Config({\n mode: \"on\",\n submitter: \"disabled\"\n});\n\nconst config = {\n drive,\n forms\n};\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location))\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method.toUpperCase(),\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod.toUpperCase();\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const confirmMethod = typeof config.forms.confirm === \"function\" ?\n config.forms.confirm :\n FormSubmission.confirmMethod;\n\n const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter);\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n if (this.submitter) config.forms.submitter.afterSubmit(this.submitter);\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n const target = submitter?.getAttribute(\"formtarget\") || form.getAttribute(\"target\");\n\n return doesNotTargetIFrame(target)\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `Content missing`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.clickEventIsSignificant(event)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.clickEventIsSignificant(event)) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n clickEventIsSignificant(event) {\n const target = event.composed ? event.target?.parentElement : event.target;\n const element = findLinkFromClickTarget(target) || target;\n\n return element instanceof Element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link.target)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n static renderElement(currentElement, newElement) {\n // Abstract method\n }\n\n constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = this.constructor.renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get shouldAutofocus() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n if (this.shouldAutofocus) {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = [];\n let added = [];\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\n }\n })();\n\nfunction morphElements(currentElement, newElement, { callbacks, ...options } = {}) {\n Idiomorph.morph(currentElement, newElement, {\n ...options,\n callbacks: new DefaultIdiomorphCallbacks(callbacks)\n });\n}\n\nfunction morphChildren(currentElement, newElement) {\n morphElements(currentElement, newElement.children, {\n morphStyle: \"innerHTML\"\n });\n}\n\nclass DefaultIdiomorphCallbacks {\n #beforeNodeMorphed\n\n constructor({ beforeNodeMorphed } = {}) {\n this.#beforeNodeMorphed = beforeNodeMorphed || (() => true);\n }\n\n beforeNodeAdded = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n beforeNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n if (!currentElement.hasAttribute(\"data-turbo-permanent\") && this.#beforeNodeMorphed(currentElement, newElement)) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n beforeAttributeUpdated = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", {\n cancelable: true,\n target,\n detail: { attributeName, mutationType }\n });\n\n return !event.defaultPrevented\n }\n\n beforeNodeRemoved = (node) => {\n return this.beforeNodeMorphed(node)\n }\n\n afterNodeMorphed = (currentElement, newElement) => {\n if (currentElement instanceof Element) {\n dispatch(\"turbo:morph-element\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n }\n }\n}\n\nclass MorphingFrameRenderer extends FrameRenderer {\n static renderElement(currentElement, newElement) {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n\n morphChildren(currentElement, newElement);\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n const cspNonce = getCspNonce();\n if (cspNonce) {\n element.nonce = cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame =\n document.visibilityState === \"hidden\" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"GET\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n delete this.currentVisit;\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphingPageRenderer extends PageRenderer {\n static renderElement(currentElement, newElement) {\n morphElements(currentElement, newElement, {\n callbacks: {\n beforeNodeMorphed: element => !canRefreshFrame(element)\n }\n });\n\n for (const frame of currentElement.querySelectorAll(\"turbo-frame\")) {\n if (canRefreshFrame(frame)) frame.reload();\n }\n\n dispatch(\"turbo:morph\", { detail: { currentElement, newElement } });\n }\n\n async preservingPermanentElements(callback) {\n return await callback()\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n get shouldAutofocus() {\n return false\n }\n}\n\nfunction canRefreshFrame(frame) {\n return frame instanceof FrameElement &&\n frame.src &&\n frame.refresh === \"morph\" &&\n !frame.closest(\"[data-turbo-permanent]\")\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n enabled = true\n started = false\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n if (!isRecentRequest && !this.navigator.currentVisit) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`\"\n );\n\n this.progressBarDelay = delay;\n }\n\n set progressBarDelay(delay) {\n config.drive.progressBarDelay = delay;\n }\n\n get progressBarDelay() {\n return config.drive.progressBarDelay\n }\n\n set drive(value) {\n config.drive.enabled = value;\n }\n\n get drive() {\n return config.drive.enabled\n }\n\n set formMode(value) {\n config.forms.mode = value;\n }\n\n get formMode() {\n return config.forms.mode\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (config.forms.mode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (config.forms.mode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (config.drive.enabled || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n console.warn(\n \"Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.drive.progressBarDelay = delay;\n}\n\nfunction setConfirmMethod(confirmMethod) {\n console.warn(\n \"Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.confirm = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n console.warn(\n \"Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n config.forms.mode = mode;\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n config: config,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n #shouldMorphFrame = false\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { refresh, src } = this.element;\n\n this.#shouldMorphFrame = src && refresh === \"morph\";\n\n this.element.removeAttribute(\"complete\");\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.#shouldMorphFrame = false;\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer;\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphElements(targetElement, this.templateContent);\n } else {\n targetElement.replaceWith(this.templateContent);\n }\n });\n },\n\n update() {\n const method = this.getAttribute(\"method\");\n\n this.targetElements.forEach((targetElement) => {\n if (method === \"morph\") {\n morphChildren(targetElement, this.templateContent);\n } else {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n }\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n//