diff --git a/css/styles.css b/css/styles.css index 9635ca4..4a60458 100644 --- a/css/styles.css +++ b/css/styles.css @@ -1,39 +1,39 @@ -@font-face { - font-family: Quicksand; - src: url(../fonts/Quicksand.ttf); -} - - :root { - --font-fallback: BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; -} - -* { - font-family: "Quicksand", var(--font-fallback); -} - -html { - width: 250px; -} - -body { - background: #fdf8ea; - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - font-weight: bold; -} - -h2 span { - font-size: 12px; -} - -p { - text-align: justify; - font-size: 0.9em; +@font-face { + font-family: Quicksand; + src: url(../fonts/Quicksand.ttf); +} + + :root { + --font-fallback: BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-sans; +} + +* { + font-family: "Quicksand", var(--font-fallback); +} + +html { + width: 250px; +} + +body { + background: #fdf8ea; + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; +} + +h2 span { + font-size: 12px; +} + +p { + text-align: justify; + font-size: 0.9em; } \ No newline at end of file diff --git a/css/sweetalert.css b/css/sweetalert.css index 0e33fc5..529324c 100644 --- a/css/sweetalert.css +++ b/css/sweetalert.css @@ -1,1306 +1,1306 @@ -.swal2-popup.swal2-toast { - box-sizing: border-box; - grid-column: 1/4 !important; - grid-row: 1/4 !important; - grid-template-columns: min-content auto min-content; - padding: 1em; - overflow-y: hidden; - background: #fff; - box-shadow: 0 0 1px hsla(0, 0%, 0%, 0.075), 0 1px 2px hsla(0, 0%, 0%, 0.075), 1px 2px 4px hsla(0, 0%, 0%, 0.075), 1px 3px 8px hsla(0, 0%, 0%, 0.075), 2px 4px 16px hsla(0, 0%, 0%, 0.075); - pointer-events: all; -} - -.swal2-popup.swal2-toast>* { - grid-column: 2; -} - -.swal2-popup.swal2-toast .swal2-title { - margin: 0.5em 1em; - padding: 0; - font-size: 1em; - text-align: initial; -} - -.swal2-popup.swal2-toast .swal2-loading { - justify-content: center; -} - -.swal2-popup.swal2-toast .swal2-input { - height: 2em; - margin: 0.5em; - font-size: 1em; -} - -.swal2-popup.swal2-toast .swal2-validation-message { - font-size: 1em; -} - -.swal2-popup.swal2-toast .swal2-footer { - margin: 0.5em 0 0; - padding: 0.5em 0 0; - font-size: 0.8em; -} - -.swal2-popup.swal2-toast .swal2-close { - grid-column: 3/3; - grid-row: 1/99; - align-self: center; - width: 0.8em; - height: 0.8em; - margin: 0; - font-size: 2em; -} - -.swal2-popup.swal2-toast .swal2-html-container { - margin: 0.5em 1em; - padding: 0; - overflow: initial; - font-size: 1em; - text-align: initial; -} - -.swal2-popup.swal2-toast .swal2-html-container:empty { - padding: 0; -} - -.swal2-popup.swal2-toast .swal2-loader { - grid-column: 1; - grid-row: 1/99; - align-self: center; - width: 2em; - height: 2em; - margin: 0.25em; -} - -.swal2-popup.swal2-toast .swal2-icon { - grid-column: 1; - grid-row: 1/99; - align-self: center; - width: 2em; - min-width: 2em; - height: 2em; - margin: 0 0.5em 0 0; -} - -.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { - display: flex; - align-items: center; - font-size: 1.8em; - font-weight: bold; -} - -.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { - width: 2em; - height: 2em; -} - -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { - top: 0.875em; - width: 1.375em; -} - -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { - left: 0.3125em; -} - -.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { - right: 0.3125em; -} - -.swal2-popup.swal2-toast .swal2-actions { - justify-content: flex-start; - height: auto; - margin: 0; - margin-top: 0.5em; - padding: 0 0.5em; -} - -.swal2-popup.swal2-toast .swal2-styled { - margin: 0.25em 0.5em; - padding: 0.4em 0.6em; - font-size: 1em; -} - -.swal2-popup.swal2-toast .swal2-success { - border-color: #a5dc86; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { - position: absolute; - width: 1.6em; - height: 3em; - transform: rotate(45deg); - border-radius: 50%; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { - top: -0.8em; - left: -0.5em; - transform: rotate(-45deg); - transform-origin: 2em 2em; - border-radius: 4em 0 0 4em; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { - top: -0.25em; - left: 0.9375em; - transform-origin: 0 1.5em; - border-radius: 0 4em 4em 0; -} - -.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { - width: 2em; - height: 2em; -} - -.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { - top: 0; - left: 0.4375em; - width: 0.4375em; - height: 2.6875em; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { - height: 0.3125em; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { - top: 1.125em; - left: 0.1875em; - width: 0.75em; -} - -.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { - top: 0.9375em; - right: 0.1875em; - width: 1.375em; -} - -.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { - animation: swal2-toast-animate-success-line-tip 0.75s; -} - -.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { - animation: swal2-toast-animate-success-line-long 0.75s; -} - -.swal2-popup.swal2-toast.swal2-show { - animation: swal2-toast-show 0.5s; -} - -.swal2-popup.swal2-toast.swal2-hide { - animation: swal2-toast-hide 0.1s forwards; -} - -.swal2-container { - display: grid; - position: fixed; - z-index: 1060; - top: 0; - right: 0; - bottom: 0; - left: 0; - box-sizing: border-box; - grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; - grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); - height: 100%; - padding: 0.625em; - overflow-x: hidden; - transition: background-color 0.1s; - -webkit-overflow-scrolling: touch; -} - -.swal2-container.swal2-backdrop-show, -.swal2-container.swal2-noanimation { - background: rgba(0, 0, 0, 0.4); -} - -.swal2-container.swal2-backdrop-hide { - background: transparent !important; -} - -.swal2-container.swal2-top-start, -.swal2-container.swal2-center-start, -.swal2-container.swal2-bottom-start { - grid-template-columns: minmax(0, 1fr) auto auto; -} - -.swal2-container.swal2-top, -.swal2-container.swal2-center, -.swal2-container.swal2-bottom { - grid-template-columns: auto minmax(0, 1fr) auto; -} - -.swal2-container.swal2-top-end, -.swal2-container.swal2-center-end, -.swal2-container.swal2-bottom-end { - grid-template-columns: auto auto minmax(0, 1fr); -} - -.swal2-container.swal2-top-start>.swal2-popup { - align-self: start; -} - -.swal2-container.swal2-top>.swal2-popup { - grid-column: 2; - align-self: start; - justify-self: center; -} - -.swal2-container.swal2-top-end>.swal2-popup, -.swal2-container.swal2-top-right>.swal2-popup { - grid-column: 3; - align-self: start; - justify-self: end; -} - -.swal2-container.swal2-center-start>.swal2-popup, -.swal2-container.swal2-center-left>.swal2-popup { - grid-row: 2; - align-self: center; -} - -.swal2-container.swal2-center>.swal2-popup { - grid-column: 2; - grid-row: 2; - align-self: center; - justify-self: center; -} - -.swal2-container.swal2-center-end>.swal2-popup, -.swal2-container.swal2-center-right>.swal2-popup { - grid-column: 3; - grid-row: 2; - align-self: center; - justify-self: end; -} - -.swal2-container.swal2-bottom-start>.swal2-popup, -.swal2-container.swal2-bottom-left>.swal2-popup { - grid-column: 1; - grid-row: 3; - align-self: end; -} - -.swal2-container.swal2-bottom>.swal2-popup { - grid-column: 2; - grid-row: 3; - justify-self: center; - align-self: end; -} - -.swal2-container.swal2-bottom-end>.swal2-popup, -.swal2-container.swal2-bottom-right>.swal2-popup { - grid-column: 3; - grid-row: 3; - align-self: end; - justify-self: end; -} - -.swal2-container.swal2-grow-row>.swal2-popup, -.swal2-container.swal2-grow-fullscreen>.swal2-popup { - grid-column: 1/4; - width: 100%; -} - -.swal2-container.swal2-grow-column>.swal2-popup, -.swal2-container.swal2-grow-fullscreen>.swal2-popup { - grid-row: 1/4; - align-self: stretch; -} - -.swal2-container.swal2-no-transition { - transition: none !important; -} - -.swal2-popup { - display: none; - position: relative; - box-sizing: border-box; - grid-template-columns: minmax(0, 100%); - width: 32em; - max-width: 100%; - padding: 0 0 1.25em; - border: none; - border-radius: 5px; - background: #fff; - color: #545454; - font-family: inherit; - font-size: 1rem; -} - -.swal2-popup:focus { - outline: none; -} - -.swal2-popup.swal2-loading { - overflow-y: hidden; -} - -.swal2-title { - position: relative; - max-width: 100%; - margin: 0; - padding: 0.8em 1em 0; - color: inherit; - font-size: 1.875em; - font-weight: 600; - text-align: center; - text-transform: none; - word-wrap: break-word; -} - -.swal2-actions { - display: flex; - z-index: 1; - box-sizing: border-box; - flex-wrap: wrap; - align-items: center; - justify-content: center; - width: auto; - margin: 1.25em auto 0; - padding: 0; -} - -.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { - opacity: 0.4; -} - -.swal2-actions:not(.swal2-loading) .swal2-styled:hover { - background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); -} - -.swal2-actions:not(.swal2-loading) .swal2-styled:active { - background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); -} - -.swal2-loader { - display: none; - align-items: center; - justify-content: center; - width: 2.2em; - height: 2.2em; - margin: 0 1.875em; - animation: swal2-rotate-loading 1.5s linear 0s infinite normal; - border-width: 0.25em; - border-style: solid; - border-radius: 100%; - border-color: #2778c4 transparent #2778c4 transparent; -} - -.swal2-styled { - margin: 0.3125em; - padding: 0.625em 1.1em; - transition: box-shadow 0.1s; - box-shadow: 0 0 0 3px transparent; - font-weight: 500; -} - -.swal2-styled:not([disabled]) { - cursor: pointer; -} - -.swal2-styled.swal2-confirm { - border: 0; - border-radius: 0.25em; - background: initial; - background-color: #7066e0; - color: #fff; - font-size: 1em; -} - -.swal2-styled.swal2-confirm:focus { - box-shadow: 0 0 0 3px rgba(112, 102, 224, 0.5); -} - -.swal2-styled.swal2-deny { - border: 0; - border-radius: 0.25em; - background: initial; - background-color: #dc3741; - color: #fff; - font-size: 1em; -} - -.swal2-styled.swal2-deny:focus { - box-shadow: 0 0 0 3px rgba(220, 55, 65, 0.5); -} - -.swal2-styled.swal2-cancel { - border: 0; - border-radius: 0.25em; - background: initial; - background-color: #6e7881; - color: #fff; - font-size: 1em; -} - -.swal2-styled.swal2-cancel:focus { - box-shadow: 0 0 0 3px rgba(110, 120, 129, 0.5); -} - -.swal2-styled.swal2-default-outline:focus { - box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); -} - -.swal2-styled:focus { - outline: none; -} - -.swal2-styled::-moz-focus-inner { - border: 0; -} - -.swal2-footer { - justify-content: center; - margin: 1em 0 0; - padding: 1em 1em 0; - border-top: 1px solid #eee; - color: inherit; - font-size: 1em; -} - -.swal2-timer-progress-bar-container { - position: absolute; - right: 0; - bottom: 0; - left: 0; - grid-column: auto !important; - overflow: hidden; - border-bottom-right-radius: 5px; - border-bottom-left-radius: 5px; -} - -.swal2-timer-progress-bar { - width: 100%; - height: 0.25em; - background: rgba(0, 0, 0, 0.2); -} - -.swal2-image { - max-width: 100%; - margin: 2em auto 1em; -} - -.swal2-close { - z-index: 2; - align-items: center; - justify-content: center; - width: 1.2em; - height: 1.2em; - margin-top: 0; - margin-right: 0; - margin-bottom: -1.2em; - padding: 0; - overflow: hidden; - transition: color 0.1s, box-shadow 0.1s; - border: none; - border-radius: 5px; - background: transparent; - color: #ccc; - font-family: serif; - font-family: monospace; - font-size: 2.5em; - cursor: pointer; - justify-self: end; -} - -.swal2-close:hover { - transform: none; - background: transparent; - color: #f27474; -} - -.swal2-close:focus { - outline: none; - box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); -} - -.swal2-close::-moz-focus-inner { - border: 0; -} - -.swal2-html-container { - z-index: 1; - justify-content: center; - margin: 1em 1.6em 0.3em; - padding: 0; - overflow: auto; - color: inherit; - font-size: 1.125em; - font-weight: normal; - line-height: normal; - text-align: center; - word-wrap: break-word; - word-break: break-word; -} - -.swal2-input, -.swal2-file, -.swal2-textarea, -.swal2-select, -.swal2-radio, -.swal2-checkbox { - margin: 1em 2em 3px; -} - -.swal2-input, -.swal2-file, -.swal2-textarea { - box-sizing: border-box; - width: auto; - transition: border-color 0.1s, box-shadow 0.1s; - border: 1px solid #d9d9d9; - border-radius: 0.1875em; - background: transparent; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; - color: inherit; - font-size: 1.125em; -} - -.swal2-input.swal2-inputerror, -.swal2-file.swal2-inputerror, -.swal2-textarea.swal2-inputerror { - border-color: #f27474 !important; - box-shadow: 0 0 2px #f27474 !important; -} - -.swal2-input:focus, -.swal2-file:focus, -.swal2-textarea:focus { - border: 1px solid #b4dbed; - outline: none; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); -} - -.swal2-input::placeholder, -.swal2-file::placeholder, -.swal2-textarea::placeholder { - color: #ccc; -} - -.swal2-range { - margin: 1em 2em 3px; - background: #fff; -} - -.swal2-range input { - width: 80%; -} - -.swal2-range output { - width: 20%; - color: inherit; - font-weight: 600; - text-align: center; -} - -.swal2-range input, -.swal2-range output { - height: 2.625em; - padding: 0; - font-size: 1.125em; - line-height: 2.625em; -} - -.swal2-input { - height: 2.625em; - padding: 0 0.75em; -} - -.swal2-file { - width: 75%; - margin-right: auto; - margin-left: auto; - background: transparent; - font-size: 1.125em; -} - -.swal2-textarea { - height: 6.75em; - padding: 0.75em; -} - -.swal2-select { - min-width: 50%; - max-width: 100%; - padding: 0.375em 0.625em; - background: transparent; - color: inherit; - font-size: 1.125em; -} - -.swal2-radio, -.swal2-checkbox { - align-items: center; - justify-content: center; - background: #fff; - color: inherit; -} - -.swal2-radio label, -.swal2-checkbox label { - margin: 0 0.6em; - font-size: 1.125em; -} - -.swal2-radio input, -.swal2-checkbox input { - flex-shrink: 0; - margin: 0 0.4em; -} - -.swal2-input-label { - display: flex; - justify-content: center; - margin: 1em auto 0; -} - -.swal2-validation-message { - align-items: center; - justify-content: center; - margin: 1em 0 0; - padding: 0.625em; - overflow: hidden; - background: #f0f0f0; - color: #666666; - font-size: 1em; - font-weight: 300; -} - -.swal2-validation-message::before { - content: "!"; - display: inline-block; - width: 1.5em; - min-width: 1.5em; - height: 1.5em; - margin: 0 0.625em; - border-radius: 50%; - background-color: #f27474; - color: #fff; - font-weight: 600; - line-height: 1.5em; - text-align: center; -} - -.swal2-icon { - position: relative; - box-sizing: content-box; - justify-content: center; - width: 5em; - height: 5em; - margin: 2.5em auto 0.6em; - border: 0.25em solid transparent; - border-radius: 50%; - border-color: #000; - font-family: inherit; - line-height: 5em; - cursor: default; - user-select: none; -} - -.swal2-icon .swal2-icon-content { - display: flex; - align-items: center; - font-size: 3.75em; -} - -.swal2-icon.swal2-error { - border-color: #f27474; - color: #f27474; -} - -.swal2-icon.swal2-error .swal2-x-mark { - position: relative; - flex-grow: 1; -} - -.swal2-icon.swal2-error [class^=swal2-x-mark-line] { - display: block; - position: absolute; - top: 2.3125em; - width: 2.9375em; - height: 0.3125em; - border-radius: 0.125em; - background-color: #f27474; -} - -.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { - left: 1.0625em; - transform: rotate(45deg); -} - -.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { - right: 1em; - transform: rotate(-45deg); -} - -.swal2-icon.swal2-error.swal2-icon-show { - animation: swal2-animate-error-icon 0.5s; -} - -.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { - animation: swal2-animate-error-x-mark 0.5s; -} - -.swal2-icon.swal2-warning { - border-color: #facea8; - color: #f8bb86; -} - -.swal2-icon.swal2-warning.swal2-icon-show { - animation: swal2-animate-error-icon 0.5s; -} - -.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content { - animation: swal2-animate-i-mark 0.5s; -} - -.swal2-icon.swal2-info { - border-color: #9de0f6; - color: #3fc3ee; -} - -.swal2-icon.swal2-info.swal2-icon-show { - animation: swal2-animate-error-icon 0.5s; -} - -.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content { - animation: swal2-animate-i-mark 0.8s; -} - -.swal2-icon.swal2-question { - border-color: #c9dae1; - color: #87adbd; -} - -.swal2-icon.swal2-question.swal2-icon-show { - animation: swal2-animate-error-icon 0.5s; -} - -.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content { - animation: swal2-animate-question-mark 0.8s; -} - -.swal2-icon.swal2-success { - border-color: #a5dc86; - color: #a5dc86; -} - -.swal2-icon.swal2-success [class^=swal2-success-circular-line] { - position: absolute; - width: 3.75em; - height: 7.5em; - transform: rotate(45deg); - border-radius: 50%; -} - -.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { - top: -0.4375em; - left: -2.0635em; - transform: rotate(-45deg); - transform-origin: 3.75em 3.75em; - border-radius: 7.5em 0 0 7.5em; -} - -.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { - top: -0.6875em; - left: 1.875em; - transform: rotate(-45deg); - transform-origin: 0 3.75em; - border-radius: 0 7.5em 7.5em 0; -} - -.swal2-icon.swal2-success .swal2-success-ring { - position: absolute; - z-index: 2; - top: -0.25em; - left: -0.25em; - box-sizing: content-box; - width: 100%; - height: 100%; - border: 0.25em solid rgba(165, 220, 134, 0.3); - border-radius: 50%; -} - -.swal2-icon.swal2-success .swal2-success-fix { - position: absolute; - z-index: 1; - top: 0.5em; - left: 1.625em; - width: 0.4375em; - height: 5.625em; - transform: rotate(-45deg); -} - -.swal2-icon.swal2-success [class^=swal2-success-line] { - display: block; - position: absolute; - z-index: 2; - height: 0.3125em; - border-radius: 0.125em; - background-color: #a5dc86; -} - -.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { - top: 2.875em; - left: 0.8125em; - width: 1.5625em; - transform: rotate(45deg); -} - -.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { - top: 2.375em; - right: 0.5em; - width: 2.9375em; - transform: rotate(-45deg); -} - -.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { - animation: swal2-animate-success-line-tip 0.75s; -} - -.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { - animation: swal2-animate-success-line-long 0.75s; -} - -.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { - animation: swal2-rotate-success-circular-line 4.25s ease-in; -} - -.swal2-progress-steps { - flex-wrap: wrap; - align-items: center; - max-width: 100%; - margin: 1.25em auto; - padding: 0; - background: transparent; - font-weight: 600; -} - -.swal2-progress-steps li { - display: inline-block; - position: relative; -} - -.swal2-progress-steps .swal2-progress-step { - z-index: 20; - flex-shrink: 0; - width: 2em; - height: 2em; - border-radius: 2em; - background: #2778c4; - color: #fff; - line-height: 2em; - text-align: center; -} - -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { - background: #2778c4; -} - -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step { - background: #add8e6; - color: #fff; -} - -.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line { - background: #add8e6; -} - -.swal2-progress-steps .swal2-progress-step-line { - z-index: 10; - flex-shrink: 0; - width: 2.5em; - height: 0.4em; - margin: 0 -1px; - background: #2778c4; -} - -[class^=swal2] { - -webkit-tap-highlight-color: transparent; -} - -.swal2-show { - animation: swal2-show 0.3s; -} - -.swal2-hide { - animation: swal2-hide 0.15s forwards; -} - -.swal2-noanimation { - transition: none; -} - -.swal2-scrollbar-measure { - position: absolute; - top: -9999px; - width: 50px; - height: 50px; - overflow: scroll; -} - -.swal2-rtl .swal2-close { - margin-right: initial; - margin-left: 0; -} - -.swal2-rtl .swal2-timer-progress-bar { - right: 0; - left: auto; -} - -@keyframes swal2-toast-show { - 0% { - transform: translateY(-0.625em) rotateZ(2deg); - } - 33% { - transform: translateY(0) rotateZ(-2deg); - } - 66% { - transform: translateY(0.3125em) rotateZ(2deg); - } - 100% { - transform: translateY(0) rotateZ(0deg); - } -} - -@keyframes swal2-toast-hide { - 100% { - transform: rotateZ(1deg); - opacity: 0; - } -} - -@keyframes swal2-toast-animate-success-line-tip { - 0% { - top: 0.5625em; - left: 0.0625em; - width: 0; - } - 54% { - top: 0.125em; - left: 0.125em; - width: 0; - } - 70% { - top: 0.625em; - left: -0.25em; - width: 1.625em; - } - 84% { - top: 1.0625em; - left: 0.75em; - width: 0.5em; - } - 100% { - top: 1.125em; - left: 0.1875em; - width: 0.75em; - } -} - -@keyframes swal2-toast-animate-success-line-long { - 0% { - top: 1.625em; - right: 1.375em; - width: 0; - } - 65% { - top: 1.25em; - right: 0.9375em; - width: 0; - } - 84% { - top: 0.9375em; - right: 0; - width: 1.125em; - } - 100% { - top: 0.9375em; - right: 0.1875em; - width: 1.375em; - } -} - -@keyframes swal2-show { - 0% { - transform: scale(0.7); - } - 45% { - transform: scale(1.05); - } - 80% { - transform: scale(0.95); - } - 100% { - transform: scale(1); - } -} - -@keyframes swal2-hide { - 0% { - transform: scale(1); - opacity: 1; - } - 100% { - transform: scale(0.5); - opacity: 0; - } -} - -@keyframes swal2-animate-success-line-tip { - 0% { - top: 1.1875em; - left: 0.0625em; - width: 0; - } - 54% { - top: 1.0625em; - left: 0.125em; - width: 0; - } - 70% { - top: 2.1875em; - left: -0.375em; - width: 3.125em; - } - 84% { - top: 3em; - left: 1.3125em; - width: 1.0625em; - } - 100% { - top: 2.8125em; - left: 0.8125em; - width: 1.5625em; - } -} - -@keyframes swal2-animate-success-line-long { - 0% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 65% { - top: 3.375em; - right: 2.875em; - width: 0; - } - 84% { - top: 2.1875em; - right: 0; - width: 3.4375em; - } - 100% { - top: 2.375em; - right: 0.5em; - width: 2.9375em; - } -} - -@keyframes swal2-rotate-success-circular-line { - 0% { - transform: rotate(-45deg); - } - 5% { - transform: rotate(-45deg); - } - 12% { - transform: rotate(-405deg); - } - 100% { - transform: rotate(-405deg); - } -} - -@keyframes swal2-animate-error-x-mark { - 0% { - margin-top: 1.625em; - transform: scale(0.4); - opacity: 0; - } - 50% { - margin-top: 1.625em; - transform: scale(0.4); - opacity: 0; - } - 80% { - margin-top: -0.375em; - transform: scale(1.15); - } - 100% { - margin-top: 0; - transform: scale(1); - opacity: 1; - } -} - -@keyframes swal2-animate-error-icon { - 0% { - transform: rotateX(100deg); - opacity: 0; - } - 100% { - transform: rotateX(0deg); - opacity: 1; - } -} - -@keyframes swal2-rotate-loading { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -@keyframes swal2-animate-question-mark { - 0% { - transform: rotateY(-360deg); - } - 100% { - transform: rotateY(0); - } -} - -@keyframes swal2-animate-i-mark { - 0% { - transform: rotateZ(45deg); - opacity: 0; - } - 25% { - transform: rotateZ(-25deg); - opacity: 0.4; - } - 50% { - transform: rotateZ(15deg); - opacity: 0.8; - } - 75% { - transform: rotateZ(-5deg); - opacity: 1; - } - 100% { - transform: rotateX(0); - opacity: 1; - } -} - -body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { - overflow: hidden; -} - -body.swal2-height-auto { - height: auto !important; -} - -body.swal2-no-backdrop .swal2-container { - background-color: transparent !important; - pointer-events: none; -} - -body.swal2-no-backdrop .swal2-container .swal2-popup { - pointer-events: all; -} - -body.swal2-no-backdrop .swal2-container .swal2-modal { - box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); -} - -@media print { - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { - overflow-y: scroll !important; - } - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true] { - display: none; - } - body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { - position: static !important; - } -} - -body.swal2-toast-shown .swal2-container { - box-sizing: border-box; - width: 360px; - max-width: 100%; - background-color: transparent; - pointer-events: none; -} - -body.swal2-toast-shown .swal2-container.swal2-top { - top: 0; - right: auto; - bottom: auto; - left: 50%; - transform: translateX(-50%); -} - -body.swal2-toast-shown .swal2-container.swal2-top-end, -body.swal2-toast-shown .swal2-container.swal2-top-right { - top: 0; - right: 0; - bottom: auto; - left: auto; -} - -body.swal2-toast-shown .swal2-container.swal2-top-start, -body.swal2-toast-shown .swal2-container.swal2-top-left { - top: 0; - right: auto; - bottom: auto; - left: 0; -} - -body.swal2-toast-shown .swal2-container.swal2-center-start, -body.swal2-toast-shown .swal2-container.swal2-center-left { - top: 50%; - right: auto; - bottom: auto; - left: 0; - transform: translateY(-50%); -} - -body.swal2-toast-shown .swal2-container.swal2-center { - top: 50%; - right: auto; - bottom: auto; - left: 50%; - transform: translate(-50%, -50%); -} - -body.swal2-toast-shown .swal2-container.swal2-center-end, -body.swal2-toast-shown .swal2-container.swal2-center-right { - top: 50%; - right: 0; - bottom: auto; - left: auto; - transform: translateY(-50%); -} - -body.swal2-toast-shown .swal2-container.swal2-bottom-start, -body.swal2-toast-shown .swal2-container.swal2-bottom-left { - top: auto; - right: auto; - bottom: 0; - left: 0; -} - -body.swal2-toast-shown .swal2-container.swal2-bottom { - top: auto; - right: auto; - bottom: 0; - left: 50%; - transform: translateX(-50%); -} - -body.swal2-toast-shown .swal2-container.swal2-bottom-end, -body.swal2-toast-shown .swal2-container.swal2-bottom-right { - top: auto; - right: 0; - bottom: 0; - left: auto; +.swal2-popup.swal2-toast { + box-sizing: border-box; + grid-column: 1/4 !important; + grid-row: 1/4 !important; + grid-template-columns: min-content auto min-content; + padding: 1em; + overflow-y: hidden; + background: #fff; + box-shadow: 0 0 1px hsla(0, 0%, 0%, 0.075), 0 1px 2px hsla(0, 0%, 0%, 0.075), 1px 2px 4px hsla(0, 0%, 0%, 0.075), 1px 3px 8px hsla(0, 0%, 0%, 0.075), 2px 4px 16px hsla(0, 0%, 0%, 0.075); + pointer-events: all; +} + +.swal2-popup.swal2-toast>* { + grid-column: 2; +} + +.swal2-popup.swal2-toast .swal2-title { + margin: 0.5em 1em; + padding: 0; + font-size: 1em; + text-align: initial; +} + +.swal2-popup.swal2-toast .swal2-loading { + justify-content: center; +} + +.swal2-popup.swal2-toast .swal2-input { + height: 2em; + margin: 0.5em; + font-size: 1em; +} + +.swal2-popup.swal2-toast .swal2-validation-message { + font-size: 1em; +} + +.swal2-popup.swal2-toast .swal2-footer { + margin: 0.5em 0 0; + padding: 0.5em 0 0; + font-size: 0.8em; +} + +.swal2-popup.swal2-toast .swal2-close { + grid-column: 3/3; + grid-row: 1/99; + align-self: center; + width: 0.8em; + height: 0.8em; + margin: 0; + font-size: 2em; +} + +.swal2-popup.swal2-toast .swal2-html-container { + margin: 0.5em 1em; + padding: 0; + overflow: initial; + font-size: 1em; + text-align: initial; +} + +.swal2-popup.swal2-toast .swal2-html-container:empty { + padding: 0; +} + +.swal2-popup.swal2-toast .swal2-loader { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + height: 2em; + margin: 0.25em; +} + +.swal2-popup.swal2-toast .swal2-icon { + grid-column: 1; + grid-row: 1/99; + align-self: center; + width: 2em; + min-width: 2em; + height: 2em; + margin: 0 0.5em 0 0; +} + +.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 1.8em; + font-weight: bold; +} + +.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} + +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line] { + top: 0.875em; + width: 1.375em; +} + +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 0.3125em; +} + +.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 0.3125em; +} + +.swal2-popup.swal2-toast .swal2-actions { + justify-content: flex-start; + height: auto; + margin: 0; + margin-top: 0.5em; + padding: 0 0.5em; +} + +.swal2-popup.swal2-toast .swal2-styled { + margin: 0.25em 0.5em; + padding: 0.4em 0.6em; + font-size: 1em; +} + +.swal2-popup.swal2-toast .swal2-success { + border-color: #a5dc86; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 1.6em; + height: 3em; + transform: rotate(45deg); + border-radius: 50%; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.8em; + left: -0.5em; + transform: rotate(-45deg); + transform-origin: 2em 2em; + border-radius: 4em 0 0 4em; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.25em; + left: 0.9375em; + transform-origin: 0 1.5em; + border-radius: 0 4em 4em 0; +} + +.swal2-popup.swal2-toast .swal2-success .swal2-success-ring { + width: 2em; + height: 2em; +} + +.swal2-popup.swal2-toast .swal2-success .swal2-success-fix { + top: 0; + left: 0.4375em; + width: 0.4375em; + height: 2.6875em; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line] { + height: 0.3125em; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip] { + top: 1.125em; + left: 0.1875em; + width: 0.75em; +} + +.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long] { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; +} + +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip { + animation: swal2-toast-animate-success-line-tip 0.75s; +} + +.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long { + animation: swal2-toast-animate-success-line-long 0.75s; +} + +.swal2-popup.swal2-toast.swal2-show { + animation: swal2-toast-show 0.5s; +} + +.swal2-popup.swal2-toast.swal2-hide { + animation: swal2-toast-hide 0.1s forwards; +} + +.swal2-container { + display: grid; + position: fixed; + z-index: 1060; + top: 0; + right: 0; + bottom: 0; + left: 0; + box-sizing: border-box; + grid-template-areas: "top-start top top-end" "center-start center center-end" "bottom-start bottom-center bottom-end"; + grid-template-rows: minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto); + height: 100%; + padding: 0.625em; + overflow-x: hidden; + transition: background-color 0.1s; + -webkit-overflow-scrolling: touch; +} + +.swal2-container.swal2-backdrop-show, +.swal2-container.swal2-noanimation { + background: rgba(0, 0, 0, 0.4); +} + +.swal2-container.swal2-backdrop-hide { + background: transparent !important; +} + +.swal2-container.swal2-top-start, +.swal2-container.swal2-center-start, +.swal2-container.swal2-bottom-start { + grid-template-columns: minmax(0, 1fr) auto auto; +} + +.swal2-container.swal2-top, +.swal2-container.swal2-center, +.swal2-container.swal2-bottom { + grid-template-columns: auto minmax(0, 1fr) auto; +} + +.swal2-container.swal2-top-end, +.swal2-container.swal2-center-end, +.swal2-container.swal2-bottom-end { + grid-template-columns: auto auto minmax(0, 1fr); +} + +.swal2-container.swal2-top-start>.swal2-popup { + align-self: start; +} + +.swal2-container.swal2-top>.swal2-popup { + grid-column: 2; + align-self: start; + justify-self: center; +} + +.swal2-container.swal2-top-end>.swal2-popup, +.swal2-container.swal2-top-right>.swal2-popup { + grid-column: 3; + align-self: start; + justify-self: end; +} + +.swal2-container.swal2-center-start>.swal2-popup, +.swal2-container.swal2-center-left>.swal2-popup { + grid-row: 2; + align-self: center; +} + +.swal2-container.swal2-center>.swal2-popup { + grid-column: 2; + grid-row: 2; + align-self: center; + justify-self: center; +} + +.swal2-container.swal2-center-end>.swal2-popup, +.swal2-container.swal2-center-right>.swal2-popup { + grid-column: 3; + grid-row: 2; + align-self: center; + justify-self: end; +} + +.swal2-container.swal2-bottom-start>.swal2-popup, +.swal2-container.swal2-bottom-left>.swal2-popup { + grid-column: 1; + grid-row: 3; + align-self: end; +} + +.swal2-container.swal2-bottom>.swal2-popup { + grid-column: 2; + grid-row: 3; + justify-self: center; + align-self: end; +} + +.swal2-container.swal2-bottom-end>.swal2-popup, +.swal2-container.swal2-bottom-right>.swal2-popup { + grid-column: 3; + grid-row: 3; + align-self: end; + justify-self: end; +} + +.swal2-container.swal2-grow-row>.swal2-popup, +.swal2-container.swal2-grow-fullscreen>.swal2-popup { + grid-column: 1/4; + width: 100%; +} + +.swal2-container.swal2-grow-column>.swal2-popup, +.swal2-container.swal2-grow-fullscreen>.swal2-popup { + grid-row: 1/4; + align-self: stretch; +} + +.swal2-container.swal2-no-transition { + transition: none !important; +} + +.swal2-popup { + display: none; + position: relative; + box-sizing: border-box; + grid-template-columns: minmax(0, 100%); + width: 32em; + max-width: 100%; + padding: 0 0 1.25em; + border: none; + border-radius: 5px; + background: #fff; + color: #545454; + font-family: inherit; + font-size: 1rem; +} + +.swal2-popup:focus { + outline: none; +} + +.swal2-popup.swal2-loading { + overflow-y: hidden; +} + +.swal2-title { + position: relative; + max-width: 100%; + margin: 0; + padding: 0.8em 1em 0; + color: inherit; + font-size: 1.875em; + font-weight: 600; + text-align: center; + text-transform: none; + word-wrap: break-word; +} + +.swal2-actions { + display: flex; + z-index: 1; + box-sizing: border-box; + flex-wrap: wrap; + align-items: center; + justify-content: center; + width: auto; + margin: 1.25em auto 0; + padding: 0; +} + +.swal2-actions:not(.swal2-loading) .swal2-styled[disabled] { + opacity: 0.4; +} + +.swal2-actions:not(.swal2-loading) .swal2-styled:hover { + background-image: linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1)); +} + +.swal2-actions:not(.swal2-loading) .swal2-styled:active { + background-image: linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)); +} + +.swal2-loader { + display: none; + align-items: center; + justify-content: center; + width: 2.2em; + height: 2.2em; + margin: 0 1.875em; + animation: swal2-rotate-loading 1.5s linear 0s infinite normal; + border-width: 0.25em; + border-style: solid; + border-radius: 100%; + border-color: #2778c4 transparent #2778c4 transparent; +} + +.swal2-styled { + margin: 0.3125em; + padding: 0.625em 1.1em; + transition: box-shadow 0.1s; + box-shadow: 0 0 0 3px transparent; + font-weight: 500; +} + +.swal2-styled:not([disabled]) { + cursor: pointer; +} + +.swal2-styled.swal2-confirm { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #7066e0; + color: #fff; + font-size: 1em; +} + +.swal2-styled.swal2-confirm:focus { + box-shadow: 0 0 0 3px rgba(112, 102, 224, 0.5); +} + +.swal2-styled.swal2-deny { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #dc3741; + color: #fff; + font-size: 1em; +} + +.swal2-styled.swal2-deny:focus { + box-shadow: 0 0 0 3px rgba(220, 55, 65, 0.5); +} + +.swal2-styled.swal2-cancel { + border: 0; + border-radius: 0.25em; + background: initial; + background-color: #6e7881; + color: #fff; + font-size: 1em; +} + +.swal2-styled.swal2-cancel:focus { + box-shadow: 0 0 0 3px rgba(110, 120, 129, 0.5); +} + +.swal2-styled.swal2-default-outline:focus { + box-shadow: 0 0 0 3px rgba(100, 150, 200, 0.5); +} + +.swal2-styled:focus { + outline: none; +} + +.swal2-styled::-moz-focus-inner { + border: 0; +} + +.swal2-footer { + justify-content: center; + margin: 1em 0 0; + padding: 1em 1em 0; + border-top: 1px solid #eee; + color: inherit; + font-size: 1em; +} + +.swal2-timer-progress-bar-container { + position: absolute; + right: 0; + bottom: 0; + left: 0; + grid-column: auto !important; + overflow: hidden; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +.swal2-timer-progress-bar { + width: 100%; + height: 0.25em; + background: rgba(0, 0, 0, 0.2); +} + +.swal2-image { + max-width: 100%; + margin: 2em auto 1em; +} + +.swal2-close { + z-index: 2; + align-items: center; + justify-content: center; + width: 1.2em; + height: 1.2em; + margin-top: 0; + margin-right: 0; + margin-bottom: -1.2em; + padding: 0; + overflow: hidden; + transition: color 0.1s, box-shadow 0.1s; + border: none; + border-radius: 5px; + background: transparent; + color: #ccc; + font-family: serif; + font-family: monospace; + font-size: 2.5em; + cursor: pointer; + justify-self: end; +} + +.swal2-close:hover { + transform: none; + background: transparent; + color: #f27474; +} + +.swal2-close:focus { + outline: none; + box-shadow: inset 0 0 0 3px rgba(100, 150, 200, 0.5); +} + +.swal2-close::-moz-focus-inner { + border: 0; +} + +.swal2-html-container { + z-index: 1; + justify-content: center; + margin: 1em 1.6em 0.3em; + padding: 0; + overflow: auto; + color: inherit; + font-size: 1.125em; + font-weight: normal; + line-height: normal; + text-align: center; + word-wrap: break-word; + word-break: break-word; +} + +.swal2-input, +.swal2-file, +.swal2-textarea, +.swal2-select, +.swal2-radio, +.swal2-checkbox { + margin: 1em 2em 3px; +} + +.swal2-input, +.swal2-file, +.swal2-textarea { + box-sizing: border-box; + width: auto; + transition: border-color 0.1s, box-shadow 0.1s; + border: 1px solid #d9d9d9; + border-radius: 0.1875em; + background: transparent; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent; + color: inherit; + font-size: 1.125em; +} + +.swal2-input.swal2-inputerror, +.swal2-file.swal2-inputerror, +.swal2-textarea.swal2-inputerror { + border-color: #f27474 !important; + box-shadow: 0 0 2px #f27474 !important; +} + +.swal2-input:focus, +.swal2-file:focus, +.swal2-textarea:focus { + border: 1px solid #b4dbed; + outline: none; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5); +} + +.swal2-input::placeholder, +.swal2-file::placeholder, +.swal2-textarea::placeholder { + color: #ccc; +} + +.swal2-range { + margin: 1em 2em 3px; + background: #fff; +} + +.swal2-range input { + width: 80%; +} + +.swal2-range output { + width: 20%; + color: inherit; + font-weight: 600; + text-align: center; +} + +.swal2-range input, +.swal2-range output { + height: 2.625em; + padding: 0; + font-size: 1.125em; + line-height: 2.625em; +} + +.swal2-input { + height: 2.625em; + padding: 0 0.75em; +} + +.swal2-file { + width: 75%; + margin-right: auto; + margin-left: auto; + background: transparent; + font-size: 1.125em; +} + +.swal2-textarea { + height: 6.75em; + padding: 0.75em; +} + +.swal2-select { + min-width: 50%; + max-width: 100%; + padding: 0.375em 0.625em; + background: transparent; + color: inherit; + font-size: 1.125em; +} + +.swal2-radio, +.swal2-checkbox { + align-items: center; + justify-content: center; + background: #fff; + color: inherit; +} + +.swal2-radio label, +.swal2-checkbox label { + margin: 0 0.6em; + font-size: 1.125em; +} + +.swal2-radio input, +.swal2-checkbox input { + flex-shrink: 0; + margin: 0 0.4em; +} + +.swal2-input-label { + display: flex; + justify-content: center; + margin: 1em auto 0; +} + +.swal2-validation-message { + align-items: center; + justify-content: center; + margin: 1em 0 0; + padding: 0.625em; + overflow: hidden; + background: #f0f0f0; + color: #666666; + font-size: 1em; + font-weight: 300; +} + +.swal2-validation-message::before { + content: "!"; + display: inline-block; + width: 1.5em; + min-width: 1.5em; + height: 1.5em; + margin: 0 0.625em; + border-radius: 50%; + background-color: #f27474; + color: #fff; + font-weight: 600; + line-height: 1.5em; + text-align: center; +} + +.swal2-icon { + position: relative; + box-sizing: content-box; + justify-content: center; + width: 5em; + height: 5em; + margin: 2.5em auto 0.6em; + border: 0.25em solid transparent; + border-radius: 50%; + border-color: #000; + font-family: inherit; + line-height: 5em; + cursor: default; + user-select: none; +} + +.swal2-icon .swal2-icon-content { + display: flex; + align-items: center; + font-size: 3.75em; +} + +.swal2-icon.swal2-error { + border-color: #f27474; + color: #f27474; +} + +.swal2-icon.swal2-error .swal2-x-mark { + position: relative; + flex-grow: 1; +} + +.swal2-icon.swal2-error [class^=swal2-x-mark-line] { + display: block; + position: absolute; + top: 2.3125em; + width: 2.9375em; + height: 0.3125em; + border-radius: 0.125em; + background-color: #f27474; +} + +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left] { + left: 1.0625em; + transform: rotate(45deg); +} + +.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right] { + right: 1em; + transform: rotate(-45deg); +} + +.swal2-icon.swal2-error.swal2-icon-show { + animation: swal2-animate-error-icon 0.5s; +} + +.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark { + animation: swal2-animate-error-x-mark 0.5s; +} + +.swal2-icon.swal2-warning { + border-color: #facea8; + color: #f8bb86; +} + +.swal2-icon.swal2-warning.swal2-icon-show { + animation: swal2-animate-error-icon 0.5s; +} + +.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content { + animation: swal2-animate-i-mark 0.5s; +} + +.swal2-icon.swal2-info { + border-color: #9de0f6; + color: #3fc3ee; +} + +.swal2-icon.swal2-info.swal2-icon-show { + animation: swal2-animate-error-icon 0.5s; +} + +.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content { + animation: swal2-animate-i-mark 0.8s; +} + +.swal2-icon.swal2-question { + border-color: #c9dae1; + color: #87adbd; +} + +.swal2-icon.swal2-question.swal2-icon-show { + animation: swal2-animate-error-icon 0.5s; +} + +.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content { + animation: swal2-animate-question-mark 0.8s; +} + +.swal2-icon.swal2-success { + border-color: #a5dc86; + color: #a5dc86; +} + +.swal2-icon.swal2-success [class^=swal2-success-circular-line] { + position: absolute; + width: 3.75em; + height: 7.5em; + transform: rotate(45deg); + border-radius: 50%; +} + +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left] { + top: -0.4375em; + left: -2.0635em; + transform: rotate(-45deg); + transform-origin: 3.75em 3.75em; + border-radius: 7.5em 0 0 7.5em; +} + +.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right] { + top: -0.6875em; + left: 1.875em; + transform: rotate(-45deg); + transform-origin: 0 3.75em; + border-radius: 0 7.5em 7.5em 0; +} + +.swal2-icon.swal2-success .swal2-success-ring { + position: absolute; + z-index: 2; + top: -0.25em; + left: -0.25em; + box-sizing: content-box; + width: 100%; + height: 100%; + border: 0.25em solid rgba(165, 220, 134, 0.3); + border-radius: 50%; +} + +.swal2-icon.swal2-success .swal2-success-fix { + position: absolute; + z-index: 1; + top: 0.5em; + left: 1.625em; + width: 0.4375em; + height: 5.625em; + transform: rotate(-45deg); +} + +.swal2-icon.swal2-success [class^=swal2-success-line] { + display: block; + position: absolute; + z-index: 2; + height: 0.3125em; + border-radius: 0.125em; + background-color: #a5dc86; +} + +.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip] { + top: 2.875em; + left: 0.8125em; + width: 1.5625em; + transform: rotate(45deg); +} + +.swal2-icon.swal2-success [class^=swal2-success-line][class$=long] { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + transform: rotate(-45deg); +} + +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip { + animation: swal2-animate-success-line-tip 0.75s; +} + +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long { + animation: swal2-animate-success-line-long 0.75s; +} + +.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right { + animation: swal2-rotate-success-circular-line 4.25s ease-in; +} + +.swal2-progress-steps { + flex-wrap: wrap; + align-items: center; + max-width: 100%; + margin: 1.25em auto; + padding: 0; + background: transparent; + font-weight: 600; +} + +.swal2-progress-steps li { + display: inline-block; + position: relative; +} + +.swal2-progress-steps .swal2-progress-step { + z-index: 20; + flex-shrink: 0; + width: 2em; + height: 2em; + border-radius: 2em; + background: #2778c4; + color: #fff; + line-height: 2em; + text-align: center; +} + +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step { + background: #2778c4; +} + +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step { + background: #add8e6; + color: #fff; +} + +.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line { + background: #add8e6; +} + +.swal2-progress-steps .swal2-progress-step-line { + z-index: 10; + flex-shrink: 0; + width: 2.5em; + height: 0.4em; + margin: 0 -1px; + background: #2778c4; +} + +[class^=swal2] { + -webkit-tap-highlight-color: transparent; +} + +.swal2-show { + animation: swal2-show 0.3s; +} + +.swal2-hide { + animation: swal2-hide 0.15s forwards; +} + +.swal2-noanimation { + transition: none; +} + +.swal2-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +.swal2-rtl .swal2-close { + margin-right: initial; + margin-left: 0; +} + +.swal2-rtl .swal2-timer-progress-bar { + right: 0; + left: auto; +} + +@keyframes swal2-toast-show { + 0% { + transform: translateY(-0.625em) rotateZ(2deg); + } + 33% { + transform: translateY(0) rotateZ(-2deg); + } + 66% { + transform: translateY(0.3125em) rotateZ(2deg); + } + 100% { + transform: translateY(0) rotateZ(0deg); + } +} + +@keyframes swal2-toast-hide { + 100% { + transform: rotateZ(1deg); + opacity: 0; + } +} + +@keyframes swal2-toast-animate-success-line-tip { + 0% { + top: 0.5625em; + left: 0.0625em; + width: 0; + } + 54% { + top: 0.125em; + left: 0.125em; + width: 0; + } + 70% { + top: 0.625em; + left: -0.25em; + width: 1.625em; + } + 84% { + top: 1.0625em; + left: 0.75em; + width: 0.5em; + } + 100% { + top: 1.125em; + left: 0.1875em; + width: 0.75em; + } +} + +@keyframes swal2-toast-animate-success-line-long { + 0% { + top: 1.625em; + right: 1.375em; + width: 0; + } + 65% { + top: 1.25em; + right: 0.9375em; + width: 0; + } + 84% { + top: 0.9375em; + right: 0; + width: 1.125em; + } + 100% { + top: 0.9375em; + right: 0.1875em; + width: 1.375em; + } +} + +@keyframes swal2-show { + 0% { + transform: scale(0.7); + } + 45% { + transform: scale(1.05); + } + 80% { + transform: scale(0.95); + } + 100% { + transform: scale(1); + } +} + +@keyframes swal2-hide { + 0% { + transform: scale(1); + opacity: 1; + } + 100% { + transform: scale(0.5); + opacity: 0; + } +} + +@keyframes swal2-animate-success-line-tip { + 0% { + top: 1.1875em; + left: 0.0625em; + width: 0; + } + 54% { + top: 1.0625em; + left: 0.125em; + width: 0; + } + 70% { + top: 2.1875em; + left: -0.375em; + width: 3.125em; + } + 84% { + top: 3em; + left: 1.3125em; + width: 1.0625em; + } + 100% { + top: 2.8125em; + left: 0.8125em; + width: 1.5625em; + } +} + +@keyframes swal2-animate-success-line-long { + 0% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 65% { + top: 3.375em; + right: 2.875em; + width: 0; + } + 84% { + top: 2.1875em; + right: 0; + width: 3.4375em; + } + 100% { + top: 2.375em; + right: 0.5em; + width: 2.9375em; + } +} + +@keyframes swal2-rotate-success-circular-line { + 0% { + transform: rotate(-45deg); + } + 5% { + transform: rotate(-45deg); + } + 12% { + transform: rotate(-405deg); + } + 100% { + transform: rotate(-405deg); + } +} + +@keyframes swal2-animate-error-x-mark { + 0% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 50% { + margin-top: 1.625em; + transform: scale(0.4); + opacity: 0; + } + 80% { + margin-top: -0.375em; + transform: scale(1.15); + } + 100% { + margin-top: 0; + transform: scale(1); + opacity: 1; + } +} + +@keyframes swal2-animate-error-icon { + 0% { + transform: rotateX(100deg); + opacity: 0; + } + 100% { + transform: rotateX(0deg); + opacity: 1; + } +} + +@keyframes swal2-rotate-loading { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +@keyframes swal2-animate-question-mark { + 0% { + transform: rotateY(-360deg); + } + 100% { + transform: rotateY(0); + } +} + +@keyframes swal2-animate-i-mark { + 0% { + transform: rotateZ(45deg); + opacity: 0; + } + 25% { + transform: rotateZ(-25deg); + opacity: 0.4; + } + 50% { + transform: rotateZ(15deg); + opacity: 0.8; + } + 75% { + transform: rotateZ(-5deg); + opacity: 1; + } + 100% { + transform: rotateX(0); + opacity: 1; + } +} + +body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow: hidden; +} + +body.swal2-height-auto { + height: auto !important; +} + +body.swal2-no-backdrop .swal2-container { + background-color: transparent !important; + pointer-events: none; +} + +body.swal2-no-backdrop .swal2-container .swal2-popup { + pointer-events: all; +} + +body.swal2-no-backdrop .swal2-container .swal2-modal { + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); +} + +@media print { + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) { + overflow-y: scroll !important; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true] { + display: none; + } + body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container { + position: static !important; + } +} + +body.swal2-toast-shown .swal2-container { + box-sizing: border-box; + width: 360px; + max-width: 100%; + background-color: transparent; + pointer-events: none; +} + +body.swal2-toast-shown .swal2-container.swal2-top { + top: 0; + right: auto; + bottom: auto; + left: 50%; + transform: translateX(-50%); +} + +body.swal2-toast-shown .swal2-container.swal2-top-end, +body.swal2-toast-shown .swal2-container.swal2-top-right { + top: 0; + right: 0; + bottom: auto; + left: auto; +} + +body.swal2-toast-shown .swal2-container.swal2-top-start, +body.swal2-toast-shown .swal2-container.swal2-top-left { + top: 0; + right: auto; + bottom: auto; + left: 0; +} + +body.swal2-toast-shown .swal2-container.swal2-center-start, +body.swal2-toast-shown .swal2-container.swal2-center-left { + top: 50%; + right: auto; + bottom: auto; + left: 0; + transform: translateY(-50%); +} + +body.swal2-toast-shown .swal2-container.swal2-center { + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} + +body.swal2-toast-shown .swal2-container.swal2-center-end, +body.swal2-toast-shown .swal2-container.swal2-center-right { + top: 50%; + right: 0; + bottom: auto; + left: auto; + transform: translateY(-50%); +} + +body.swal2-toast-shown .swal2-container.swal2-bottom-start, +body.swal2-toast-shown .swal2-container.swal2-bottom-left { + top: auto; + right: auto; + bottom: 0; + left: 0; +} + +body.swal2-toast-shown .swal2-container.swal2-bottom { + top: auto; + right: auto; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} + +body.swal2-toast-shown .swal2-container.swal2-bottom-end, +body.swal2-toast-shown .swal2-container.swal2-bottom-right { + top: auto; + right: 0; + bottom: 0; + left: auto; } \ No newline at end of file diff --git a/index.html b/index.html index 0228e44..68c4d99 100644 --- a/index.html +++ b/index.html @@ -1,66 +1,66 @@ - - - - - - - - AIS Visa Auto Rescheduler - - - - - -
-
-
-

AIS Visa Auto Rescheduler

-
-
-
-
-

50

-

Credits left.

-
-
-
-
-
-
- - -
-
-
-
- - -
-
-
- - -
-
- - -
-

Changes are autosaved.

-
-
- -
-
-

- -

-
-
-
- - - - - - + + + + + + + + AIS Visa Auto Rescheduler + + + + + +
+
+
+

AIS Visa Auto Rescheduler

+
+
+
+
+

50

+

Credits left.

+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+ + +
+

Changes are autosaved.

+
+
+ +
+
+

+ +

+
+
+
+ + + + + + \ No newline at end of file diff --git a/js/background.js b/js/background.js index 78f1e4a..ab0d916 100644 --- a/js/background.js +++ b/js/background.js @@ -1,79 +1,79 @@ -chrome.runtime.onConnect.addListener(function(port) { - port.onMessage.addListener(async function(def) { - let response = new Object(); - response.action = def.action; - if (def.action == "fetch_info") { - let { __un } = await chrome.storage.local.get("__un"); - let { __pw } = await chrome.storage.local.get("__pw"); - let { __id } = await chrome.storage.local.get("__id"); - let { __ap } = await chrome.storage.local.get("__ap"); - let { __il } = await chrome.storage.local.get("__il"); - let { __ad } = await chrome.storage.local.get("__ad"); - let { __al } = await chrome.storage.local.get("__al"); - let { __ar } = await chrome.storage.local.get("__ar"); - let $version = await new Promise(r => chrome.management.getSelf(self => r(self.version))); - response.data = { - $username: __un, - $password: __pw, - $appid: __id, - $active: __ap, - $apptCenter: __il, - $apptDate: __ad, - $ascCenter: __al, - $ascReverse: __ar, - $version - } - } - port.postMessage(response); - }); -}); - -chrome.runtime.onInstalled.addListener(async({ reason }) => { - chrome.action.disable(); - chrome.declarativeContent.onPageChanged.removeRules(undefined, () => { - let exampleRule = { - conditions: [ - new chrome.declarativeContent.PageStateMatcher({ - pageUrl: { hostEquals: 'ais.usvisa-info.com' }, - }) - ], - actions: [new chrome.declarativeContent.ShowAction()], - }; - - let rules = [exampleRule]; - chrome.declarativeContent.onPageChanged.addRules(rules); - }); - if (reason === 'install') { - await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 3 }); - chrome.tabs.create({ - url: "https://ais.usvisa-info.com/en-us/countries_list/niv" - }); - } -}); - -var myNotificationID = null, - senderId = null, - ensureSendMessage = (tabId, message, callback) => { - chrome.tabs.sendMessage(tabId, { ping: true }, function(response) { - if (response && response.pong) { - chrome.tabs.sendMessage(tabId, message, callback); - } - }); - }; - -chrome.notifications.onButtonClicked.addListener(function(notifId, btnId) { - if (notifId === myNotificationID) { - chrome.tabs.get(senderId, function(tab) { - chrome.tabs.highlight({ 'tabs': tab.index }, function() {}); - }); - ensureSendMessage(senderId, { bookNow: btnId === 0 }); - } -}); - -chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { - chrome.notifications.create(req.options, function(id) { - myNotificationID = id; - senderId = sender.tab.id; - }); - sendResponse(true); +chrome.runtime.onConnect.addListener(function(port) { + port.onMessage.addListener(async function(def) { + let response = new Object(); + response.action = def.action; + if (def.action == "fetch_info") { + let { __un } = await chrome.storage.local.get("__un"); + let { __pw } = await chrome.storage.local.get("__pw"); + let { __id } = await chrome.storage.local.get("__id"); + let { __ap } = await chrome.storage.local.get("__ap"); + let { __il } = await chrome.storage.local.get("__il"); + let { __ad } = await chrome.storage.local.get("__ad"); + let { __al } = await chrome.storage.local.get("__al"); + let { __ar } = await chrome.storage.local.get("__ar"); + let $version = await new Promise(r => chrome.management.getSelf(self => r(self.version))); + response.data = { + $username: __un, + $password: __pw, + $appid: __id, + $active: __ap, + $apptCenter: __il, + $apptDate: __ad, + $ascCenter: __al, + $ascReverse: __ar, + $version + } + } + port.postMessage(response); + }); +}); + +chrome.runtime.onInstalled.addListener(async({ reason }) => { + chrome.action.disable(); + chrome.declarativeContent.onPageChanged.removeRules(undefined, () => { + let exampleRule = { + conditions: [ + new chrome.declarativeContent.PageStateMatcher({ + pageUrl: { hostEquals: 'ais.usvisa-info.com' }, + }) + ], + actions: [new chrome.declarativeContent.ShowAction()], + }; + + let rules = [exampleRule]; + chrome.declarativeContent.onPageChanged.addRules(rules); + }); + if (reason === 'install') { + await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 3 }); + chrome.tabs.create({ + url: "https://ais.usvisa-info.com/en-us/countries_list/niv" + }); + } +}); + +var myNotificationID = null, + senderId = null, + ensureSendMessage = (tabId, message, callback) => { + chrome.tabs.sendMessage(tabId, { ping: true }, function(response) { + if (response && response.pong) { + chrome.tabs.sendMessage(tabId, message, callback); + } + }); + }; + +chrome.notifications.onButtonClicked.addListener(function(notifId, btnId) { + if (notifId === myNotificationID) { + chrome.tabs.get(senderId, function(tab) { + chrome.tabs.highlight({ 'tabs': tab.index }, function() {}); + }); + ensureSendMessage(senderId, { bookNow: btnId === 0 }); + } +}); + +chrome.runtime.onMessage.addListener((req, sender, sendResponse) => { + chrome.notifications.create(req.options, function(id) { + myNotificationID = id; + senderId = sender.tab.id; + }); + sendResponse(true); }); \ No newline at end of file diff --git a/js/bootstrap.min.js b/js/bootstrap.min.js index c4016b5..c72e3ec 100644 --- a/js/bootstrap.min.js +++ b/js/bootstrap.min.js @@ -1,665 +1,665 @@ -/*! - * Bootstrap v5.3.3 (https://getbootstrap.com/) - * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -! function(t, e) { "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("@popperjs/core")) : "function" == typeof define && define.amd ? define(["@popperjs/core"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = e(t.Popper) }(this, (function(t) { "use strict"; - - function e(t) { const e = Object.create(null, { - [Symbol.toStringTag]: { value: "Module" } }); if (t) - for (const i in t) - if ("default" !== i) { const s = Object.getOwnPropertyDescriptor(t, i); - Object.defineProperty(e, i, s.get ? s : { enumerable: !0, get: () => t[i] }) } - return e.default = t, Object.freeze(e) } const i = e(t), - s = new Map, - n = {set(t, e, i) { s.has(t) || s.set(t, new Map); const n = s.get(t); - n.has(e) || 0 === n.size ? n.set(e, i) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`) }, get: (t, e) => s.has(t) && s.get(t).get(e) || null, remove(t, e) { if (!s.has(t)) return; const i = s.get(t); - i.delete(e), 0 === i.size && s.delete(t) } }, - o = "transitionend", - r = t => (t && window.CSS && window.CSS.escape && (t = t.replace(/#([^\s"#']+)/g, ((t, e) => `#${CSS.escape(e)}`))), t), - a = t => { t.dispatchEvent(new Event(o)) }, - l = t => !(!t || "object" != typeof t) && (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType), - c = t => l(t) ? t.jquery ? t[0] : t : "string" == typeof t && t.length > 0 ? document.querySelector(r(t)) : null, - h = t => { if (!l(t) || 0 === t.getClientRects().length) return !1; const e = "visible" === getComputedStyle(t).getPropertyValue("visibility"), - i = t.closest("details:not([open])"); if (!i) return e; if (i !== t) { const e = t.closest("summary"); if (e && e.parentNode !== i) return !1; if (null === e) return !1 } return e }, - d = t => !t || t.nodeType !== Node.ELEMENT_NODE || !!t.classList.contains("disabled") || (void 0 !== t.disabled ? t.disabled : t.hasAttribute("disabled") && "false" !== t.getAttribute("disabled")), - u = t => { if (!document.documentElement.attachShadow) return null; if ("function" == typeof t.getRootNode) { const e = t.getRootNode(); return e instanceof ShadowRoot ? e : null } return t instanceof ShadowRoot ? t : t.parentNode ? u(t.parentNode) : null }, - _ = () => {}, - g = t => { t.offsetHeight }, - f = () => window.jQuery && !document.body.hasAttribute("data-bs-no-jquery") ? window.jQuery : null, - m = [], - p = () => "rtl" === document.documentElement.dir, - b = t => { var e; - e = () => { const e = f(); if (e) { const i = t.NAME, - s = e.fn[i]; - e.fn[i] = t.jQueryInterface, e.fn[i].Constructor = t, e.fn[i].noConflict = () => (e.fn[i] = s, t.jQueryInterface) } }, "loading" === document.readyState ? (m.length || document.addEventListener("DOMContentLoaded", (() => { for (const t of m) t() })), m.push(e)) : e() }, - v = (t, e = [], i = t) => "function" == typeof t ? t(...e) : i, - y = (t, e, i = !0) => { if (!i) return void v(t); const s = (t => { if (!t) return 0; let { transitionDuration: e, transitionDelay: i } = window.getComputedStyle(t); const s = Number.parseFloat(e), - n = Number.parseFloat(i); return s || n ? (e = e.split(",")[0], i = i.split(",")[0], 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) : 0 })(e) + 5; let n = !1; const r = ({ target: i }) => { i === e && (n = !0, e.removeEventListener(o, r), v(t)) }; - e.addEventListener(o, r), setTimeout((() => { n || a(e) }), s) }, - w = (t, e, i, s) => { const n = t.length; let o = t.indexOf(e); return -1 === o ? !i && s ? t[n - 1] : t[0] : (o += i ? 1 : -1, s && (o = (o + n) % n), t[Math.max(0, Math.min(o, n - 1))]) }, - A = /[^.]*(?=\..*)\.|.*/, - E = /\..*/, - C = /::\d+$/, - T = {}; let k = 1; const $ = { mouseenter: "mouseover", mouseleave: "mouseout" }, - S = new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]); - - function L(t, e) { return e && `${e}::${k++}` || t.uidEvent || k++ } - - function O(t) { const e = L(t); return t.uidEvent = e, T[e] = T[e] || {}, T[e] } - - function I(t, e, i = null) { return Object.values(t).find((t => t.callable === e && t.delegationSelector === i)) } - - function D(t, e, i) { const s = "string" == typeof e, - n = s ? i : e || i; let o = M(t); return S.has(o) || (o = t), [s, n, o] } - - function N(t, e, i, s, n) { if ("string" != typeof e || !t) return; let [o, r, a] = D(e, i, s); if (e in $) { const t = t => function(e) { if (!e.relatedTarget || e.relatedTarget !== e.delegateTarget && !e.delegateTarget.contains(e.relatedTarget)) return t.call(this, e) }; - r = t(r) } const l = O(t), - c = l[a] || (l[a] = {}), - h = I(c, r, o ? i : null); if (h) return void(h.oneOff = h.oneOff && n); const d = L(r, e.replace(A, "")), - u = o ? function(t, e, i) { return function s(n) { const o = t.querySelectorAll(e); for (let { target: r } = n; r && r !== this; r = r.parentNode) - for (const a of o) - if (a === r) return F(n, { delegateTarget: r }), s.oneOff && j.off(t, n.type, e, i), i.apply(r, [n]) } }(t, i, r) : function(t, e) { return function i(s) { return F(s, { delegateTarget: t }), i.oneOff && j.off(t, s.type, e), e.apply(t, [s]) } }(t, r); - u.delegationSelector = o ? i : null, u.callable = r, u.oneOff = n, u.uidEvent = d, c[d] = u, t.addEventListener(a, u, o) } - - function P(t, e, i, s, n) { const o = I(e[i], s, n); - o && (t.removeEventListener(i, o, Boolean(n)), delete e[i][o.uidEvent]) } - - function x(t, e, i, s) { const n = e[i] || {}; for (const [o, r] of Object.entries(n)) o.includes(s) && P(t, e, i, r.callable, r.delegationSelector) } - - function M(t) { return t = t.replace(E, ""), $[t] || t } const j = { on(t, e, i, s) { N(t, e, i, s, !1) }, one(t, e, i, s) { N(t, e, i, s, !0) }, off(t, e, i, s) { if ("string" != typeof e || !t) return; const [n, o, r] = D(e, i, s), a = r !== e, l = O(t), c = l[r] || {}, h = e.startsWith("."); if (void 0 === o) { if (h) - for (const i of Object.keys(l)) x(t, l, i, e.slice(1)); for (const [i, s] of Object.entries(c)) { const n = i.replace(C, ""); - a && !e.includes(n) || P(t, l, r, s.callable, s.delegationSelector) } } else { if (!Object.keys(c).length) return; - P(t, l, r, o, n ? i : null) } }, trigger(t, e, i) { if ("string" != typeof e || !t) return null; const s = f(); let n = null, - o = !0, - r = !0, - a = !1; - e !== M(e) && s && (n = s.Event(e, i), s(t).trigger(n), o = !n.isPropagationStopped(), r = !n.isImmediatePropagationStopped(), a = n.isDefaultPrevented()); const l = F(new Event(e, { bubbles: o, cancelable: !0 }), i); return a && l.preventDefault(), r && t.dispatchEvent(l), l.defaultPrevented && n && n.preventDefault(), l } }; - - function F(t, e = {}) { for (const [i, s] of Object.entries(e)) try { t[i] = s } catch (e) { Object.defineProperty(t, i, { configurable: !0, get: () => s }) } - return t } - - function z(t) { if ("true" === t) return !0; if ("false" === t) return !1; if (t === Number(t).toString()) return Number(t); if ("" === t || "null" === t) return null; if ("string" != typeof t) return t; try { return JSON.parse(decodeURIComponent(t)) } catch (e) { return t } } - - function H(t) { return t.replace(/[A-Z]/g, (t => `-${t.toLowerCase()}`)) } const B = { setDataAttribute(t, e, i) { t.setAttribute(`data-bs-${H(e)}`, i) }, removeDataAttribute(t, e) { t.removeAttribute(`data-bs-${H(e)}`) }, getDataAttributes(t) { if (!t) return {}; const e = {}, - i = Object.keys(t.dataset).filter((t => t.startsWith("bs") && !t.startsWith("bsConfig"))); for (const s of i) { let i = s.replace(/^bs/, ""); - i = i.charAt(0).toLowerCase() + i.slice(1, i.length), e[i] = z(t.dataset[s]) } return e }, getDataAttribute: (t, e) => z(t.getAttribute(`data-bs-${H(e)}`)) }; - class q { static get Default() { return {} } - static get DefaultType() { return {} } - static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!') } - _getConfig(t) { return t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } - _configAfterMerge(t) { return t } - _mergeConfigObj(t, e) { const i = l(e) ? B.getDataAttribute(e, "config") : {}; return {...this.constructor.Default, ... "object" == typeof i ? i : {}, ...l(e) ? B.getDataAttributes(e) : {}, ... "object" == typeof t ? t : {} } } - _typeCheckConfig(t, e = this.constructor.DefaultType) { for (const [s, n] of Object.entries(e)) { const e = t[s], - o = l(e) ? "element" : null == (i = e) ? `${i}` : Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase(); if (!new RegExp(n).test(o)) throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${n}".`) } var i } } - class W extends q { constructor(t, e) { super(), (t = c(t)) && (this._element = t, this._config = this._getConfig(e), n.set(this._element, this.constructor.DATA_KEY, this)) } - dispose() { n.remove(this._element, this.constructor.DATA_KEY), j.off(this._element, this.constructor.EVENT_KEY); for (const t of Object.getOwnPropertyNames(this)) this[t] = null } - _queueCallback(t, e, i = !0) { y(t, e, i) } - _getConfig(t) { return t = this._mergeConfigObj(t, this._element), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } - static getInstance(t) { return n.get(c(t), this.DATA_KEY) } - static getOrCreateInstance(t, e = {}) { return this.getInstance(t) || new this(t, "object" == typeof e ? e : null) } - static get VERSION() { return "5.3.3" } - static get DATA_KEY() { return `bs.${this.NAME}` } - static get EVENT_KEY() { return `.${this.DATA_KEY}` } - static eventName(t) { return `${t}${this.EVENT_KEY}` } } const R = t => { let e = t.getAttribute("data-bs-target"); if (!e || "#" === e) { let i = t.getAttribute("href"); if (!i || !i.includes("#") && !i.startsWith(".")) return null; - i.includes("#") && !i.startsWith("#") && (i = `#${i.split("#")[1]}`), e = i && "#" !== i ? i.trim() : null } return e ? e.split(",").map((t => r(t))).join(",") : null }, - K = { find: (t, e = document.documentElement) => [].concat(...Element.prototype.querySelectorAll.call(e, t)), findOne: (t, e = document.documentElement) => Element.prototype.querySelector.call(e, t), children: (t, e) => [].concat(...t.children).filter((t => t.matches(e))), parents(t, e) { const i = []; let s = t.parentNode.closest(e); for (; s;) i.push(s), s = s.parentNode.closest(e); return i }, prev(t, e) { let i = t.previousElementSibling; for (; i;) { if (i.matches(e)) return [i]; - i = i.previousElementSibling } return [] }, next(t, e) { let i = t.nextElementSibling; for (; i;) { if (i.matches(e)) return [i]; - i = i.nextElementSibling } return [] }, focusableChildren(t) { const e = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((t => `${t}:not([tabindex^="-"])`)).join(","); return this.find(e, t).filter((t => !d(t) && h(t))) }, getSelectorFromElement(t) { const e = R(t); return e && K.findOne(e) ? e : null }, getElementFromSelector(t) { const e = R(t); return e ? K.findOne(e) : null }, getMultipleElementsFromSelector(t) { const e = R(t); return e ? K.find(e) : [] } }, - V = (t, e = "hide") => { const i = `click.dismiss${t.EVENT_KEY}`, - s = t.NAME; - j.on(document, i, `[data-bs-dismiss="${s}"]`, (function(i) { if (["A", "AREA"].includes(this.tagName) && i.preventDefault(), d(this)) return; const n = K.getElementFromSelector(this) || this.closest(`.${s}`); - t.getOrCreateInstance(n)[e]() })) }, - Q = ".bs.alert", - X = `close${Q}`, - Y = `closed${Q}`; - class U extends W { static get NAME() { return "alert" } - close() { if (j.trigger(this._element, X).defaultPrevented) return; - this._element.classList.remove("show"); const t = this._element.classList.contains("fade"); - this._queueCallback((() => this._destroyElement()), this._element, t) } - _destroyElement() { this._element.remove(), j.trigger(this._element, Y), this.dispose() } - static jQueryInterface(t) { return this.each((function() { const e = U.getOrCreateInstance(this); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); - e[t](this) } })) } } - V(U, "close"), b(U); const G = '[data-bs-toggle="button"]'; - class J extends W { static get NAME() { return "button" } - toggle() { this._element.setAttribute("aria-pressed", this._element.classList.toggle("active")) } - static jQueryInterface(t) { return this.each((function() { const e = J.getOrCreateInstance(this); "toggle" === t && e[t]() })) } } - j.on(document, "click.bs.button.data-api", G, (t => { t.preventDefault(); const e = t.target.closest(G); - J.getOrCreateInstance(e).toggle() })), b(J); const Z = ".bs.swipe", - tt = `touchstart${Z}`, - et = `touchmove${Z}`, - it = `touchend${Z}`, - st = `pointerdown${Z}`, - nt = `pointerup${Z}`, - ot = { endCallback: null, leftCallback: null, rightCallback: null }, - rt = { endCallback: "(function|null)", leftCallback: "(function|null)", rightCallback: "(function|null)" }; - class at extends q { constructor(t, e) { super(), this._element = t, t && at.isSupported() && (this._config = this._getConfig(e), this._deltaX = 0, this._supportPointerEvents = Boolean(window.PointerEvent), this._initEvents()) } - static get Default() { return ot } - static get DefaultType() { return rt } - static get NAME() { return "swipe" } - dispose() { j.off(this._element, Z) } - _start(t) { this._supportPointerEvents ? this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX) : this._deltaX = t.touches[0].clientX } - _end(t) { this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX - this._deltaX), this._handleSwipe(), v(this._config.endCallback) } - _move(t) { this._deltaX = t.touches && t.touches.length > 1 ? 0 : t.touches[0].clientX - this._deltaX } - _handleSwipe() { const t = Math.abs(this._deltaX); if (t <= 40) return; const e = t / this._deltaX; - this._deltaX = 0, e && v(e > 0 ? this._config.rightCallback : this._config.leftCallback) } - _initEvents() { this._supportPointerEvents ? (j.on(this._element, st, (t => this._start(t))), j.on(this._element, nt, (t => this._end(t))), this._element.classList.add("pointer-event")) : (j.on(this._element, tt, (t => this._start(t))), j.on(this._element, et, (t => this._move(t))), j.on(this._element, it, (t => this._end(t)))) } - _eventIsPointerPenTouch(t) { return this._supportPointerEvents && ("pen" === t.pointerType || "touch" === t.pointerType) } - static isSupported() { return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0 } } const lt = ".bs.carousel", - ct = ".data-api", - ht = "next", - dt = "prev", - ut = "left", - _t = "right", - gt = `slide${lt}`, - ft = `slid${lt}`, - mt = `keydown${lt}`, - pt = `mouseenter${lt}`, - bt = `mouseleave${lt}`, - vt = `dragstart${lt}`, - yt = `load${lt}${ct}`, - wt = `click${lt}${ct}`, - At = "carousel", - Et = "active", - Ct = ".active", - Tt = ".carousel-item", - kt = Ct + Tt, - $t = { ArrowLeft: _t, ArrowRight: ut }, - St = { interval: 5e3, keyboard: !0, pause: "hover", ride: !1, touch: !0, wrap: !0 }, - Lt = { interval: "(number|boolean)", keyboard: "boolean", pause: "(string|boolean)", ride: "(boolean|string)", touch: "boolean", wrap: "boolean" }; - class Ot extends W { constructor(t, e) { super(t, e), this._interval = null, this._activeElement = null, this._isSliding = !1, this.touchTimeout = null, this._swipeHelper = null, this._indicatorsElement = K.findOne(".carousel-indicators", this._element), this._addEventListeners(), this._config.ride === At && this.cycle() } - static get Default() { return St } - static get DefaultType() { return Lt } - static get NAME() { return "carousel" } - next() { this._slide(ht) } - nextWhenVisible() {!document.hidden && h(this._element) && this.next() } - prev() { this._slide(dt) } - pause() { this._isSliding && a(this._element), this._clearInterval() } - cycle() { this._clearInterval(), this._updateInterval(), this._interval = setInterval((() => this.nextWhenVisible()), this._config.interval) } - _maybeEnableCycle() { this._config.ride && (this._isSliding ? j.one(this._element, ft, (() => this.cycle())) : this.cycle()) } - to(t) { const e = this._getItems(); if (t > e.length - 1 || t < 0) return; if (this._isSliding) return void j.one(this._element, ft, (() => this.to(t))); const i = this._getItemIndex(this._getActive()); if (i === t) return; const s = t > i ? ht : dt; - this._slide(s, e[t]) } - dispose() { this._swipeHelper && this._swipeHelper.dispose(), super.dispose() } - _configAfterMerge(t) { return t.defaultInterval = t.interval, t } - _addEventListeners() { this._config.keyboard && j.on(this._element, mt, (t => this._keydown(t))), "hover" === this._config.pause && (j.on(this._element, pt, (() => this.pause())), j.on(this._element, bt, (() => this._maybeEnableCycle()))), this._config.touch && at.isSupported() && this._addTouchEventListeners() } - _addTouchEventListeners() { for (const t of K.find(".carousel-item img", this._element)) j.on(t, vt, (t => t.preventDefault())); const t = { leftCallback: () => this._slide(this._directionToOrder(ut)), rightCallback: () => this._slide(this._directionToOrder(_t)), endCallback: () => { "hover" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout((() => this._maybeEnableCycle()), 500 + this._config.interval)) } }; - this._swipeHelper = new at(this._element, t) } - _keydown(t) { if (/input|textarea/i.test(t.target.tagName)) return; const e = $t[t.key]; - e && (t.preventDefault(), this._slide(this._directionToOrder(e))) } - _getItemIndex(t) { return this._getItems().indexOf(t) } - _setActiveIndicatorElement(t) { if (!this._indicatorsElement) return; const e = K.findOne(Ct, this._indicatorsElement); - e.classList.remove(Et), e.removeAttribute("aria-current"); const i = K.findOne(`[data-bs-slide-to="${t}"]`, this._indicatorsElement); - i && (i.classList.add(Et), i.setAttribute("aria-current", "true")) } - _updateInterval() { const t = this._activeElement || this._getActive(); if (!t) return; const e = Number.parseInt(t.getAttribute("data-bs-interval"), 10); - this._config.interval = e || this._config.defaultInterval } - _slide(t, e = null) { if (this._isSliding) return; const i = this._getActive(), - s = t === ht, - n = e || w(this._getItems(), i, s, this._config.wrap); if (n === i) return; const o = this._getItemIndex(n), - r = e => j.trigger(this._element, e, { relatedTarget: n, direction: this._orderToDirection(t), from: this._getItemIndex(i), to: o }); if (r(gt).defaultPrevented) return; if (!i || !n) return; const a = Boolean(this._interval); - this.pause(), this._isSliding = !0, this._setActiveIndicatorElement(o), this._activeElement = n; const l = s ? "carousel-item-start" : "carousel-item-end", - c = s ? "carousel-item-next" : "carousel-item-prev"; - n.classList.add(c), g(n), i.classList.add(l), n.classList.add(l), this._queueCallback((() => { n.classList.remove(l, c), n.classList.add(Et), i.classList.remove(Et, c, l), this._isSliding = !1, r(ft) }), i, this._isAnimated()), a && this.cycle() } - _isAnimated() { return this._element.classList.contains("slide") } - _getActive() { return K.findOne(kt, this._element) } - _getItems() { return K.find(Tt, this._element) } - _clearInterval() { this._interval && (clearInterval(this._interval), this._interval = null) } - _directionToOrder(t) { return p() ? t === ut ? dt : ht : t === ut ? ht : dt } - _orderToDirection(t) { return p() ? t === dt ? ut : _t : t === dt ? _t : ut } - static jQueryInterface(t) { return this.each((function() { const e = Ot.getOrCreateInstance(this, t); if ("number" != typeof t) { if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); - e[t]() } } else e.to(t) })) } } - j.on(document, wt, "[data-bs-slide], [data-bs-slide-to]", (function(t) { const e = K.getElementFromSelector(this); if (!e || !e.classList.contains(At)) return; - t.preventDefault(); const i = Ot.getOrCreateInstance(e), - s = this.getAttribute("data-bs-slide-to"); return s ? (i.to(s), void i._maybeEnableCycle()) : "next" === B.getDataAttribute(this, "slide") ? (i.next(), void i._maybeEnableCycle()) : (i.prev(), void i._maybeEnableCycle()) })), j.on(window, yt, (() => { const t = K.find('[data-bs-ride="carousel"]'); for (const e of t) Ot.getOrCreateInstance(e) })), b(Ot); const It = ".bs.collapse", - Dt = `show${It}`, - Nt = `shown${It}`, - Pt = `hide${It}`, - xt = `hidden${It}`, - Mt = `click${It}.data-api`, - jt = "show", - Ft = "collapse", - zt = "collapsing", - Ht = `:scope .${Ft} .${Ft}`, - Bt = '[data-bs-toggle="collapse"]', - qt = { parent: null, toggle: !0 }, - Wt = { parent: "(null|element)", toggle: "boolean" }; - class Rt extends W { constructor(t, e) { super(t, e), this._isTransitioning = !1, this._triggerArray = []; const i = K.find(Bt); for (const t of i) { const e = K.getSelectorFromElement(t), - i = K.find(e).filter((t => t === this._element)); - null !== e && i.length && this._triggerArray.push(t) } - this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle() } - static get Default() { return qt } - static get DefaultType() { return Wt } - static get NAME() { return "collapse" } - toggle() { this._isShown() ? this.hide() : this.show() } - show() { if (this._isTransitioning || this._isShown()) return; let t = []; if (this._config.parent && (t = this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t => t !== this._element)).map((t => Rt.getOrCreateInstance(t, { toggle: !1 })))), t.length && t[0]._isTransitioning) return; if (j.trigger(this._element, Dt).defaultPrevented) return; for (const e of t) e.hide(); const e = this._getDimension(); - this._element.classList.remove(Ft), this._element.classList.add(zt), this._element.style[e] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0; const i = `scroll${e[0].toUpperCase()+e.slice(1)}`; - this._queueCallback((() => { this._isTransitioning = !1, this._element.classList.remove(zt), this._element.classList.add(Ft, jt), this._element.style[e] = "", j.trigger(this._element, Nt) }), this._element, !0), this._element.style[e] = `${this._element[i]}px` } - hide() { if (this._isTransitioning || !this._isShown()) return; if (j.trigger(this._element, Pt).defaultPrevented) return; const t = this._getDimension(); - this._element.style[t] = `${this._element.getBoundingClientRect()[t]}px`, g(this._element), this._element.classList.add(zt), this._element.classList.remove(Ft, jt); for (const t of this._triggerArray) { const e = K.getElementFromSelector(t); - e && !this._isShown(e) && this._addAriaAndCollapsedClass([t], !1) } - this._isTransitioning = !0, this._element.style[t] = "", this._queueCallback((() => { this._isTransitioning = !1, this._element.classList.remove(zt), this._element.classList.add(Ft), j.trigger(this._element, xt) }), this._element, !0) } - _isShown(t = this._element) { return t.classList.contains(jt) } - _configAfterMerge(t) { return t.toggle = Boolean(t.toggle), t.parent = c(t.parent), t } - _getDimension() { return this._element.classList.contains("collapse-horizontal") ? "width" : "height" } - _initializeChildren() { if (!this._config.parent) return; const t = this._getFirstLevelChildren(Bt); for (const e of t) { const t = K.getElementFromSelector(e); - t && this._addAriaAndCollapsedClass([e], this._isShown(t)) } } - _getFirstLevelChildren(t) { const e = K.find(Ht, this._config.parent); return K.find(t, this._config.parent).filter((t => !e.includes(t))) } - _addAriaAndCollapsedClass(t, e) { if (t.length) - for (const i of t) i.classList.toggle("collapsed", !e), i.setAttribute("aria-expanded", e) } - static jQueryInterface(t) { const e = {}; return "string" == typeof t && /show|hide/.test(t) && (e.toggle = !1), this.each((function() { const i = Rt.getOrCreateInstance(this, e); if ("string" == typeof t) { if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); - i[t]() } })) } } - j.on(document, Mt, Bt, (function(t) { - ("A" === t.target.tagName || t.delegateTarget && "A" === t.delegateTarget.tagName) && t.preventDefault(); for (const t of K.getMultipleElementsFromSelector(this)) Rt.getOrCreateInstance(t, { toggle: !1 }).toggle() })), b(Rt); const Kt = "dropdown", - Vt = ".bs.dropdown", - Qt = ".data-api", - Xt = "ArrowUp", - Yt = "ArrowDown", - Ut = `hide${Vt}`, - Gt = `hidden${Vt}`, - Jt = `show${Vt}`, - Zt = `shown${Vt}`, - te = `click${Vt}${Qt}`, - ee = `keydown${Vt}${Qt}`, - ie = `keyup${Vt}${Qt}`, - se = "show", - ne = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)', - oe = `${ne}.${se}`, - re = ".dropdown-menu", - ae = p() ? "top-end" : "top-start", - le = p() ? "top-start" : "top-end", - ce = p() ? "bottom-end" : "bottom-start", - he = p() ? "bottom-start" : "bottom-end", - de = p() ? "left-start" : "right-start", - ue = p() ? "right-start" : "left-start", - _e = { autoClose: !0, boundary: "clippingParents", display: "dynamic", offset: [0, 2], popperConfig: null, reference: "toggle" }, - ge = { autoClose: "(boolean|string)", boundary: "(string|element)", display: "string", offset: "(array|string|function)", popperConfig: "(null|object|function)", reference: "(string|element|object)" }; - class fe extends W { constructor(t, e) { super(t, e), this._popper = null, this._parent = this._element.parentNode, this._menu = K.next(this._element, re)[0] || K.prev(this._element, re)[0] || K.findOne(re, this._parent), this._inNavbar = this._detectNavbar() } - static get Default() { return _e } - static get DefaultType() { return ge } - static get NAME() { return Kt } - toggle() { return this._isShown() ? this.hide() : this.show() } - show() { if (d(this._element) || this._isShown()) return; const t = { relatedTarget: this._element }; if (!j.trigger(this._element, Jt, t).defaultPrevented) { if (this._createPopper(), "ontouchstart" in document.documentElement && !this._parent.closest(".navbar-nav")) - for (const t of[].concat(...document.body.children)) j.on(t, "mouseover", _); - this._element.focus(), this._element.setAttribute("aria-expanded", !0), this._menu.classList.add(se), this._element.classList.add(se), j.trigger(this._element, Zt, t) } } - hide() { if (d(this._element) || !this._isShown()) return; const t = { relatedTarget: this._element }; - this._completeHide(t) } - dispose() { this._popper && this._popper.destroy(), super.dispose() } - update() { this._inNavbar = this._detectNavbar(), this._popper && this._popper.update() } - _completeHide(t) { if (!j.trigger(this._element, Ut, t).defaultPrevented) { if ("ontouchstart" in document.documentElement) - for (const t of[].concat(...document.body.children)) j.off(t, "mouseover", _); - this._popper && this._popper.destroy(), this._menu.classList.remove(se), this._element.classList.remove(se), this._element.setAttribute("aria-expanded", "false"), B.removeDataAttribute(this._menu, "popper"), j.trigger(this._element, Gt, t) } } - _getConfig(t) { if ("object" == typeof(t = super._getConfig(t)).reference && !l(t.reference) && "function" != typeof t.reference.getBoundingClientRect) throw new TypeError(`${Kt.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); return t } - _createPopper() { if (void 0 === i) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); let t = this._element; "parent" === this._config.reference ? t = this._parent : l(this._config.reference) ? t = c(this._config.reference) : "object" == typeof this._config.reference && (t = this._config.reference); const e = this._getPopperConfig(); - this._popper = i.createPopper(t, this._menu, e) } - _isShown() { return this._menu.classList.contains(se) } - _getPlacement() { const t = this._parent; if (t.classList.contains("dropend")) return de; if (t.classList.contains("dropstart")) return ue; if (t.classList.contains("dropup-center")) return "top"; if (t.classList.contains("dropdown-center")) return "bottom"; const e = "end" === getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(); return t.classList.contains("dropup") ? e ? le : ae : e ? he : ce } - _detectNavbar() { return null !== this._element.closest(".navbar") } - _getOffset() { const { offset: t } = this._config; return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t } - _getPopperConfig() { const t = { placement: this._getPlacement(), modifiers: [{ name: "preventOverflow", options: { boundary: this._config.boundary } }, { name: "offset", options: { offset: this._getOffset() } }] }; return (this._inNavbar || "static" === this._config.display) && (B.setDataAttribute(this._menu, "popper", "static"), t.modifiers = [{ name: "applyStyles", enabled: !1 }]), {...t, ...v(this._config.popperConfig, [t]) } } - _selectMenuItem({ key: t, target: e }) { const i = K.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", this._menu).filter((t => h(t))); - i.length && w(i, e, t === Yt, !i.includes(e)).focus() } - static jQueryInterface(t) { return this.each((function() { const e = fe.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); - e[t]() } })) } - static clearMenus(t) { if (2 === t.button || "keyup" === t.type && "Tab" !== t.key) return; const e = K.find(oe); for (const i of e) { const e = fe.getInstance(i); if (!e || !1 === e._config.autoClose) continue; const s = t.composedPath(), - n = s.includes(e._menu); if (s.includes(e._element) || "inside" === e._config.autoClose && !n || "outside" === e._config.autoClose && n) continue; if (e._menu.contains(t.target) && ("keyup" === t.type && "Tab" === t.key || /input|select|option|textarea|form/i.test(t.target.tagName))) continue; const o = { relatedTarget: e._element }; "click" === t.type && (o.clickEvent = t), e._completeHide(o) } } - static dataApiKeydownHandler(t) { const e = /input|textarea/i.test(t.target.tagName), - i = "Escape" === t.key, - s = [Xt, Yt].includes(t.key); if (!s && !i) return; if (e && !i) return; - t.preventDefault(); const n = this.matches(ne) ? this : K.prev(this, ne)[0] || K.next(this, ne)[0] || K.findOne(ne, t.delegateTarget.parentNode), - o = fe.getOrCreateInstance(n); if (s) return t.stopPropagation(), o.show(), void o._selectMenuItem(t); - o._isShown() && (t.stopPropagation(), o.hide(), n.focus()) } } - j.on(document, ee, ne, fe.dataApiKeydownHandler), j.on(document, ee, re, fe.dataApiKeydownHandler), j.on(document, te, fe.clearMenus), j.on(document, ie, fe.clearMenus), j.on(document, te, ne, (function(t) { t.preventDefault(), fe.getOrCreateInstance(this).toggle() })), b(fe); const me = "backdrop", - pe = "show", - be = `mousedown.bs.${me}`, - ve = { className: "modal-backdrop", clickCallback: null, isAnimated: !1, isVisible: !0, rootElement: "body" }, - ye = { className: "string", clickCallback: "(function|null)", isAnimated: "boolean", isVisible: "boolean", rootElement: "(element|string)" }; - class we extends q { constructor(t) { super(), this._config = this._getConfig(t), this._isAppended = !1, this._element = null } - static get Default() { return ve } - static get DefaultType() { return ye } - static get NAME() { return me } - show(t) { if (!this._config.isVisible) return void v(t); - this._append(); const e = this._getElement(); - this._config.isAnimated && g(e), e.classList.add(pe), this._emulateAnimation((() => { v(t) })) } - hide(t) { this._config.isVisible ? (this._getElement().classList.remove(pe), this._emulateAnimation((() => { this.dispose(), v(t) }))) : v(t) } - dispose() { this._isAppended && (j.off(this._element, be), this._element.remove(), this._isAppended = !1) } - _getElement() { if (!this._element) { const t = document.createElement("div"); - t.className = this._config.className, this._config.isAnimated && t.classList.add("fade"), this._element = t } return this._element } - _configAfterMerge(t) { return t.rootElement = c(t.rootElement), t } - _append() { if (this._isAppended) return; const t = this._getElement(); - this._config.rootElement.append(t), j.on(t, be, (() => { v(this._config.clickCallback) })), this._isAppended = !0 } - _emulateAnimation(t) { y(t, this._getElement(), this._config.isAnimated) } } const Ae = ".bs.focustrap", - Ee = `focusin${Ae}`, - Ce = `keydown.tab${Ae}`, - Te = "backward", - ke = { autofocus: !0, trapElement: null }, - $e = { autofocus: "boolean", trapElement: "element" }; - class Se extends q { constructor(t) { super(), this._config = this._getConfig(t), this._isActive = !1, this._lastTabNavDirection = null } - static get Default() { return ke } - static get DefaultType() { return $e } - static get NAME() { return "focustrap" } - activate() { this._isActive || (this._config.autofocus && this._config.trapElement.focus(), j.off(document, Ae), j.on(document, Ee, (t => this._handleFocusin(t))), j.on(document, Ce, (t => this._handleKeydown(t))), this._isActive = !0) } - deactivate() { this._isActive && (this._isActive = !1, j.off(document, Ae)) } - _handleFocusin(t) { const { trapElement: e } = this._config; if (t.target === document || t.target === e || e.contains(t.target)) return; const i = K.focusableChildren(e); - 0 === i.length ? e.focus() : this._lastTabNavDirection === Te ? i[i.length - 1].focus() : i[0].focus() } - _handleKeydown(t) { "Tab" === t.key && (this._lastTabNavDirection = t.shiftKey ? Te : "forward") } } const Le = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", - Oe = ".sticky-top", - Ie = "padding-right", - De = "margin-right"; - class Ne { constructor() { this._element = document.body } - getWidth() { const t = document.documentElement.clientWidth; return Math.abs(window.innerWidth - t) } - hide() { const t = this.getWidth(); - this._disableOverFlow(), this._setElementAttributes(this._element, Ie, (e => e + t)), this._setElementAttributes(Le, Ie, (e => e + t)), this._setElementAttributes(Oe, De, (e => e - t)) } - reset() { this._resetElementAttributes(this._element, "overflow"), this._resetElementAttributes(this._element, Ie), this._resetElementAttributes(Le, Ie), this._resetElementAttributes(Oe, De) } - isOverflowing() { return this.getWidth() > 0 } - _disableOverFlow() { this._saveInitialAttribute(this._element, "overflow"), this._element.style.overflow = "hidden" } - _setElementAttributes(t, e, i) { const s = this.getWidth(); - this._applyManipulationCallback(t, (t => { if (t !== this._element && window.innerWidth > t.clientWidth + s) return; - this._saveInitialAttribute(t, e); const n = window.getComputedStyle(t).getPropertyValue(e); - t.style.setProperty(e, `${i(Number.parseFloat(n))}px`) })) } - _saveInitialAttribute(t, e) { const i = t.style.getPropertyValue(e); - i && B.setDataAttribute(t, e, i) } - _resetElementAttributes(t, e) { this._applyManipulationCallback(t, (t => { const i = B.getDataAttribute(t, e); - null !== i ? (B.removeDataAttribute(t, e), t.style.setProperty(e, i)) : t.style.removeProperty(e) })) } - _applyManipulationCallback(t, e) { if (l(t)) e(t); - else - for (const i of K.find(t, this._element)) e(i) } } const Pe = ".bs.modal", - xe = `hide${Pe}`, - Me = `hidePrevented${Pe}`, - je = `hidden${Pe}`, - Fe = `show${Pe}`, - ze = `shown${Pe}`, - He = `resize${Pe}`, - Be = `click.dismiss${Pe}`, - qe = `mousedown.dismiss${Pe}`, - We = `keydown.dismiss${Pe}`, - Re = `click${Pe}.data-api`, - Ke = "modal-open", - Ve = "show", - Qe = "modal-static", - Xe = { backdrop: !0, focus: !0, keyboard: !0 }, - Ye = { backdrop: "(boolean|string)", focus: "boolean", keyboard: "boolean" }; - class Ue extends W { constructor(t, e) { super(t, e), this._dialog = K.findOne(".modal-dialog", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._isTransitioning = !1, this._scrollBar = new Ne, this._addEventListeners() } - static get Default() { return Xe } - static get DefaultType() { return Ye } - static get NAME() { return "modal" } - toggle(t) { return this._isShown ? this.hide() : this.show(t) } - show(t) { this._isShown || this._isTransitioning || j.trigger(this._element, Fe, { relatedTarget: t }).defaultPrevented || (this._isShown = !0, this._isTransitioning = !0, this._scrollBar.hide(), document.body.classList.add(Ke), this._adjustDialog(), this._backdrop.show((() => this._showElement(t)))) } - hide() { this._isShown && !this._isTransitioning && (j.trigger(this._element, xe).defaultPrevented || (this._isShown = !1, this._isTransitioning = !0, this._focustrap.deactivate(), this._element.classList.remove(Ve), this._queueCallback((() => this._hideModal()), this._element, this._isAnimated()))) } - dispose() { j.off(window, Pe), j.off(this._dialog, Pe), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose() } - handleUpdate() { this._adjustDialog() } - _initializeBackDrop() { return new we({ isVisible: Boolean(this._config.backdrop), isAnimated: this._isAnimated() }) } - _initializeFocusTrap() { return new Se({ trapElement: this._element }) } - _showElement(t) { document.body.contains(this._element) || document.body.append(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.scrollTop = 0; const e = K.findOne(".modal-body", this._dialog); - e && (e.scrollTop = 0), g(this._element), this._element.classList.add(Ve), this._queueCallback((() => { this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, j.trigger(this._element, ze, { relatedTarget: t }) }), this._dialog, this._isAnimated()) } - _addEventListeners() { j.on(this._element, We, (t => { "Escape" === t.key && (this._config.keyboard ? this.hide() : this._triggerBackdropTransition()) })), j.on(window, He, (() => { this._isShown && !this._isTransitioning && this._adjustDialog() })), j.on(this._element, qe, (t => { j.one(this._element, Be, (e => { this._element === t.target && this._element === e.target && ("static" !== this._config.backdrop ? this._config.backdrop && this.hide() : this._triggerBackdropTransition()) })) })) } - _hideModal() { this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._backdrop.hide((() => { document.body.classList.remove(Ke), this._resetAdjustments(), this._scrollBar.reset(), j.trigger(this._element, je) })) } - _isAnimated() { return this._element.classList.contains("fade") } - _triggerBackdropTransition() { if (j.trigger(this._element, Me).defaultPrevented) return; const t = this._element.scrollHeight > document.documentElement.clientHeight, - e = this._element.style.overflowY; "hidden" === e || this._element.classList.contains(Qe) || (t || (this._element.style.overflowY = "hidden"), this._element.classList.add(Qe), this._queueCallback((() => { this._element.classList.remove(Qe), this._queueCallback((() => { this._element.style.overflowY = e }), this._dialog) }), this._dialog), this._element.focus()) } - _adjustDialog() { const t = this._element.scrollHeight > document.documentElement.clientHeight, - e = this._scrollBar.getWidth(), - i = e > 0; if (i && !t) { const t = p() ? "paddingLeft" : "paddingRight"; - this._element.style[t] = `${e}px` } if (!i && t) { const t = p() ? "paddingRight" : "paddingLeft"; - this._element.style[t] = `${e}px` } } - _resetAdjustments() { this._element.style.paddingLeft = "", this._element.style.paddingRight = "" } - static jQueryInterface(t, e) { return this.each((function() { const i = Ue.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); - i[t](e) } })) } } - j.on(document, Re, '[data-bs-toggle="modal"]', (function(t) { const e = K.getElementFromSelector(this); - ["A", "AREA"].includes(this.tagName) && t.preventDefault(), j.one(e, Fe, (t => { t.defaultPrevented || j.one(e, je, (() => { h(this) && this.focus() })) })); const i = K.findOne(".modal.show"); - i && Ue.getInstance(i).hide(), Ue.getOrCreateInstance(e).toggle(this) })), V(Ue), b(Ue); const Ge = ".bs.offcanvas", - Je = ".data-api", - Ze = `load${Ge}${Je}`, - ti = "show", - ei = "showing", - ii = "hiding", - si = ".offcanvas.show", - ni = `show${Ge}`, - oi = `shown${Ge}`, - ri = `hide${Ge}`, - ai = `hidePrevented${Ge}`, - li = `hidden${Ge}`, - ci = `resize${Ge}`, - hi = `click${Ge}${Je}`, - di = `keydown.dismiss${Ge}`, - ui = { backdrop: !0, keyboard: !0, scroll: !1 }, - _i = { backdrop: "(boolean|string)", keyboard: "boolean", scroll: "boolean" }; - class gi extends W { constructor(t, e) { super(t, e), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners() } - static get Default() { return ui } - static get DefaultType() { return _i } - static get NAME() { return "offcanvas" } - toggle(t) { return this._isShown ? this.hide() : this.show(t) } - show(t) { this._isShown || j.trigger(this._element, ni, { relatedTarget: t }).defaultPrevented || (this._isShown = !0, this._backdrop.show(), this._config.scroll || (new Ne).hide(), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.classList.add(ei), this._queueCallback((() => { this._config.scroll && !this._config.backdrop || this._focustrap.activate(), this._element.classList.add(ti), this._element.classList.remove(ei), j.trigger(this._element, oi, { relatedTarget: t }) }), this._element, !0)) } - hide() { this._isShown && (j.trigger(this._element, ri).defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.add(ii), this._backdrop.hide(), this._queueCallback((() => { this._element.classList.remove(ti, ii), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._config.scroll || (new Ne).reset(), j.trigger(this._element, li) }), this._element, !0))) } - dispose() { this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose() } - _initializeBackDrop() { const t = Boolean(this._config.backdrop); return new we({ className: "offcanvas-backdrop", isVisible: t, isAnimated: !0, rootElement: this._element.parentNode, clickCallback: t ? () => { "static" !== this._config.backdrop ? this.hide() : j.trigger(this._element, ai) } : null }) } - _initializeFocusTrap() { return new Se({ trapElement: this._element }) } - _addEventListeners() { j.on(this._element, di, (t => { "Escape" === t.key && (this._config.keyboard ? this.hide() : j.trigger(this._element, ai)) })) } - static jQueryInterface(t) { return this.each((function() { const e = gi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); - e[t](this) } })) } } - j.on(document, hi, '[data-bs-toggle="offcanvas"]', (function(t) { const e = K.getElementFromSelector(this); if (["A", "AREA"].includes(this.tagName) && t.preventDefault(), d(this)) return; - j.one(e, li, (() => { h(this) && this.focus() })); const i = K.findOne(si); - i && i !== e && gi.getInstance(i).hide(), gi.getOrCreateInstance(e).toggle(this) })), j.on(window, Ze, (() => { for (const t of K.find(si)) gi.getOrCreateInstance(t).show() })), j.on(window, ci, (() => { for (const t of K.find("[aria-modal][class*=show][class*=offcanvas-]")) "fixed" !== getComputedStyle(t).position && gi.getOrCreateInstance(t).hide() })), V(gi), b(gi); const fi = { "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i], a: ["target", "href", "title", "rel"], area: [], b: [], br: [], col: [], code: [], dd: [], div: [], dl: [], dt: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ["src", "srcset", "alt", "title", "width", "height"], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] }, - mi = new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]), - pi = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i, - bi = (t, e) => { const i = t.nodeName.toLowerCase(); return e.includes(i) ? !mi.has(i) || Boolean(pi.test(t.nodeValue)) : e.filter((t => t instanceof RegExp)).some((t => t.test(i))) }, - vi = { allowList: fi, content: {}, extraClass: "", html: !1, sanitize: !0, sanitizeFn: null, template: "
" }, - yi = { allowList: "object", content: "object", extraClass: "(string|function)", html: "boolean", sanitize: "boolean", sanitizeFn: "(null|function)", template: "string" }, - wi = { entry: "(string|element|function|null)", selector: "(string|element)" }; - class Ai extends q { constructor(t) { super(), this._config = this._getConfig(t) } - static get Default() { return vi } - static get DefaultType() { return yi } - static get NAME() { return "TemplateFactory" } - getContent() { return Object.values(this._config.content).map((t => this._resolvePossibleFunction(t))).filter(Boolean) } - hasContent() { return this.getContent().length > 0 } - changeContent(t) { return this._checkContent(t), this._config.content = {...this._config.content, ...t }, this } - toHtml() { const t = document.createElement("div"); - t.innerHTML = this._maybeSanitize(this._config.template); for (const [e, i] of Object.entries(this._config.content)) this._setContent(t, i, e); const e = t.children[0], - i = this._resolvePossibleFunction(this._config.extraClass); return i && e.classList.add(...i.split(" ")), e } - _typeCheckConfig(t) { super._typeCheckConfig(t), this._checkContent(t.content) } - _checkContent(t) { for (const [e, i] of Object.entries(t)) super._typeCheckConfig({ selector: e, entry: i }, wi) } - _setContent(t, e, i) { const s = K.findOne(i, t); - s && ((e = this._resolvePossibleFunction(e)) ? l(e) ? this._putElementInTemplate(c(e), s) : this._config.html ? s.innerHTML = this._maybeSanitize(e) : s.textContent = e : s.remove()) } - _maybeSanitize(t) { return this._config.sanitize ? function(t, e, i) { if (!t.length) return t; if (i && "function" == typeof i) return i(t); const s = (new window.DOMParser).parseFromString(t, "text/html"), - n = [].concat(...s.body.querySelectorAll("*")); for (const t of n) { const i = t.nodeName.toLowerCase(); if (!Object.keys(e).includes(i)) { t.remove(); continue } const s = [].concat(...t.attributes), - n = [].concat(e["*"] || [], e[i] || []); for (const e of s) bi(e, n) || t.removeAttribute(e.nodeName) } return s.body.innerHTML }(t, this._config.allowList, this._config.sanitizeFn) : t } - _resolvePossibleFunction(t) { return v(t, [this]) } - _putElementInTemplate(t, e) { if (this._config.html) return e.innerHTML = "", void e.append(t); - e.textContent = t.textContent } } const Ei = new Set(["sanitize", "allowList", "sanitizeFn"]), - Ci = "fade", - Ti = "show", - ki = ".modal", - $i = "hide.bs.modal", - Si = "hover", - Li = "focus", - Oi = { AUTO: "auto", TOP: "top", RIGHT: p() ? "left" : "right", BOTTOM: "bottom", LEFT: p() ? "right" : "left" }, - Ii = { allowList: fi, animation: !0, boundary: "clippingParents", container: !1, customClass: "", delay: 0, fallbackPlacements: ["top", "right", "bottom", "left"], html: !1, offset: [0, 6], placement: "top", popperConfig: null, sanitize: !0, sanitizeFn: null, selector: !1, template: '', title: "", trigger: "hover focus" }, - Di = { allowList: "object", animation: "boolean", boundary: "(string|element)", container: "(string|element|boolean)", customClass: "(string|function)", delay: "(number|object)", fallbackPlacements: "array", html: "boolean", offset: "(array|string|function)", placement: "(string|function)", popperConfig: "(null|object|function)", sanitize: "boolean", sanitizeFn: "(null|function)", selector: "(string|boolean)", template: "string", title: "(string|element|function)", trigger: "string" }; - class Ni extends W { constructor(t, e) { if (void 0 === i) throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)"); - super(t, e), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle() } - static get Default() { return Ii } - static get DefaultType() { return Di } - static get NAME() { return "tooltip" } - enable() { this._isEnabled = !0 } - disable() { this._isEnabled = !1 } - toggleEnabled() { this._isEnabled = !this._isEnabled } - toggle() { this._isEnabled && (this._activeTrigger.click = !this._activeTrigger.click, this._isShown() ? this._leave() : this._enter()) } - dispose() { clearTimeout(this._timeout), j.off(this._element.closest(ki), $i, this._hideModalHandler), this._element.getAttribute("data-bs-original-title") && this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title")), this._disposePopper(), super.dispose() } - show() { if ("none" === this._element.style.display) throw new Error("Please use show on visible elements"); if (!this._isWithContent() || !this._isEnabled) return; const t = j.trigger(this._element, this.constructor.eventName("show")), - e = (u(this._element) || this._element.ownerDocument.documentElement).contains(this._element); if (t.defaultPrevented || !e) return; - this._disposePopper(); const i = this._getTipElement(); - this._element.setAttribute("aria-describedby", i.getAttribute("id")); const { container: s } = this._config; if (this._element.ownerDocument.documentElement.contains(this.tip) || (s.append(i), j.trigger(this._element, this.constructor.eventName("inserted"))), this._popper = this._createPopper(i), i.classList.add(Ti), "ontouchstart" in document.documentElement) - for (const t of[].concat(...document.body.children)) j.on(t, "mouseover", _); - this._queueCallback((() => { j.trigger(this._element, this.constructor.eventName("shown")), !1 === this._isHovered && this._leave(), this._isHovered = !1 }), this.tip, this._isAnimated()) } - hide() { if (this._isShown() && !j.trigger(this._element, this.constructor.eventName("hide")).defaultPrevented) { if (this._getTipElement().classList.remove(Ti), "ontouchstart" in document.documentElement) - for (const t of[].concat(...document.body.children)) j.off(t, "mouseover", _); - this._activeTrigger.click = !1, this._activeTrigger[Li] = !1, this._activeTrigger[Si] = !1, this._isHovered = null, this._queueCallback((() => { this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute("aria-describedby"), j.trigger(this._element, this.constructor.eventName("hidden"))) }), this.tip, this._isAnimated()) } } - update() { this._popper && this._popper.update() } - _isWithContent() { return Boolean(this._getTitle()) } - _getTipElement() { return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip } - _createTipElement(t) { const e = this._getTemplateFactory(t).toHtml(); if (!e) return null; - e.classList.remove(Ci, Ti), e.classList.add(`bs-${this.constructor.NAME}-auto`); const i = (t => { do { t += Math.floor(1e6 * Math.random()) } while (document.getElementById(t)); return t })(this.constructor.NAME).toString(); return e.setAttribute("id", i), this._isAnimated() && e.classList.add(Ci), e } - setContent(t) { this._newContent = t, this._isShown() && (this._disposePopper(), this.show()) } - _getTemplateFactory(t) { return this._templateFactory ? this._templateFactory.changeContent(t) : this._templateFactory = new Ai({...this._config, content: t, extraClass: this._resolvePossibleFunction(this._config.customClass) }), this._templateFactory } - _getContentForTemplate() { return { ".tooltip-inner": this._getTitle() } } - _getTitle() { return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title") } - _initializeOnDelegatedTarget(t) { return this.constructor.getOrCreateInstance(t.delegateTarget, this._getDelegateConfig()) } - _isAnimated() { return this._config.animation || this.tip && this.tip.classList.contains(Ci) } - _isShown() { return this.tip && this.tip.classList.contains(Ti) } - _createPopper(t) { const e = v(this._config.placement, [this, t, this._element]), - s = Oi[e.toUpperCase()]; return i.createPopper(this._element, t, this._getPopperConfig(s)) } - _getOffset() { const { offset: t } = this._config; return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t } - _resolvePossibleFunction(t) { return v(t, [this._element]) } - _getPopperConfig(t) { const e = { placement: t, modifiers: [{ name: "flip", options: { fallbackPlacements: this._config.fallbackPlacements } }, { name: "offset", options: { offset: this._getOffset() } }, { name: "preventOverflow", options: { boundary: this._config.boundary } }, { name: "arrow", options: { element: `.${this.constructor.NAME}-arrow` } }, { name: "preSetPlacement", enabled: !0, phase: "beforeMain", fn: t => { this._getTipElement().setAttribute("data-popper-placement", t.state.placement) } }] }; return {...e, ...v(this._config.popperConfig, [e]) } } - _setListeners() { const t = this._config.trigger.split(" "); for (const e of t) - if ("click" === e) j.on(this._element, this.constructor.eventName("click"), this._config.selector, (t => { this._initializeOnDelegatedTarget(t).toggle() })); - else if ("manual" !== e) { const t = e === Si ? this.constructor.eventName("mouseenter") : this.constructor.eventName("focusin"), - i = e === Si ? this.constructor.eventName("mouseleave") : this.constructor.eventName("focusout"); - j.on(this._element, t, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); - e._activeTrigger["focusin" === t.type ? Li : Si] = !0, e._enter() })), j.on(this._element, i, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); - e._activeTrigger["focusout" === t.type ? Li : Si] = e._element.contains(t.relatedTarget), e._leave() })) } - this._hideModalHandler = () => { this._element && this.hide() }, j.on(this._element.closest(ki), $i, this._hideModalHandler) } - _fixTitle() { const t = this._element.getAttribute("title"); - t && (this._element.getAttribute("aria-label") || this._element.textContent.trim() || this._element.setAttribute("aria-label", t), this._element.setAttribute("data-bs-original-title", t), this._element.removeAttribute("title")) } - _enter() { this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout((() => { this._isHovered && this.show() }), this._config.delay.show)) } - _leave() { this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout((() => { this._isHovered || this.hide() }), this._config.delay.hide)) } - _setTimeout(t, e) { clearTimeout(this._timeout), this._timeout = setTimeout(t, e) } - _isWithActiveTrigger() { return Object.values(this._activeTrigger).includes(!0) } - _getConfig(t) { const e = B.getDataAttributes(this._element); for (const t of Object.keys(e)) Ei.has(t) && delete e[t]; return t = {...e, ... "object" == typeof t && t ? t : {} }, t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } - _configAfterMerge(t) { return t.container = !1 === t.container ? document.body : c(t.container), "number" == typeof t.delay && (t.delay = { show: t.delay, hide: t.delay }), "number" == typeof t.title && (t.title = t.title.toString()), "number" == typeof t.content && (t.content = t.content.toString()), t } - _getDelegateConfig() { const t = {}; for (const [e, i] of Object.entries(this._config)) this.constructor.Default[e] !== i && (t[e] = i); return t.selector = !1, t.trigger = "manual", t } - _disposePopper() { this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null) } - static jQueryInterface(t) { return this.each((function() { const e = Ni.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); - e[t]() } })) } } - b(Ni); const Pi = {...Ni.Default, content: "", offset: [0, 8], placement: "right", template: '', trigger: "click" }, - xi = {...Ni.DefaultType, content: "(null|string|element|function)" }; - class Mi extends Ni { static get Default() { return Pi } - static get DefaultType() { return xi } - static get NAME() { return "popover" } - _isWithContent() { return this._getTitle() || this._getContent() } - _getContentForTemplate() { return { ".popover-header": this._getTitle(), ".popover-body": this._getContent() } } - _getContent() { return this._resolvePossibleFunction(this._config.content) } - static jQueryInterface(t) { return this.each((function() { const e = Mi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); - e[t]() } })) } } - b(Mi); const ji = ".bs.scrollspy", - Fi = `activate${ji}`, - zi = `click${ji}`, - Hi = `load${ji}.data-api`, - Bi = "active", - qi = "[href]", - Wi = ".nav-link", - Ri = `${Wi}, .nav-item > ${Wi}, .list-group-item`, - Ki = { offset: null, rootMargin: "0px 0px -25%", smoothScroll: !1, target: null, threshold: [.1, .5, 1] }, - Vi = { offset: "(number|null)", rootMargin: "string", smoothScroll: "boolean", target: "element", threshold: "array" }; - class Qi extends W { constructor(t, e) { super(t, e), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = "visible" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }, this.refresh() } - static get Default() { return Ki } - static get DefaultType() { return Vi } - static get NAME() { return "scrollspy" } - refresh() { this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver(); for (const t of this._observableSections.values()) this._observer.observe(t) } - dispose() { this._observer.disconnect(), super.dispose() } - _configAfterMerge(t) { return t.target = c(t.target) || document.body, t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin, "string" == typeof t.threshold && (t.threshold = t.threshold.split(",").map((t => Number.parseFloat(t)))), t } - _maybeEnableSmoothScroll() { this._config.smoothScroll && (j.off(this._config.target, zi), j.on(this._config.target, zi, qi, (t => { const e = this._observableSections.get(t.target.hash); if (e) { t.preventDefault(); const i = this._rootElement || window, - s = e.offsetTop - this._element.offsetTop; if (i.scrollTo) return void i.scrollTo({ top: s, behavior: "smooth" }); - i.scrollTop = s } }))) } - _getNewObserver() { const t = { root: this._rootElement, threshold: this._config.threshold, rootMargin: this._config.rootMargin }; return new IntersectionObserver((t => this._observerCallback(t)), t) } - _observerCallback(t) { const e = t => this._targetLinks.get(`#${t.target.id}`), - i = t => { this._previousScrollData.visibleEntryTop = t.target.offsetTop, this._process(e(t)) }, - s = (this._rootElement || document.documentElement).scrollTop, - n = s >= this._previousScrollData.parentScrollTop; - this._previousScrollData.parentScrollTop = s; for (const o of t) { if (!o.isIntersecting) { this._activeTarget = null, this._clearActiveClass(e(o)); continue } const t = o.target.offsetTop >= this._previousScrollData.visibleEntryTop; if (n && t) { if (i(o), !s) return } else n || t || i(o) } } - _initializeTargetsAndObservables() { this._targetLinks = new Map, this._observableSections = new Map; const t = K.find(qi, this._config.target); for (const e of t) { if (!e.hash || d(e)) continue; const t = K.findOne(decodeURI(e.hash), this._element); - h(t) && (this._targetLinks.set(decodeURI(e.hash), e), this._observableSections.set(e.hash, t)) } } - _process(t) { this._activeTarget !== t && (this._clearActiveClass(this._config.target), this._activeTarget = t, t.classList.add(Bi), this._activateParents(t), j.trigger(this._element, Fi, { relatedTarget: t })) } - _activateParents(t) { if (t.classList.contains("dropdown-item")) K.findOne(".dropdown-toggle", t.closest(".dropdown")).classList.add(Bi); - else - for (const e of K.parents(t, ".nav, .list-group")) - for (const t of K.prev(e, Ri)) t.classList.add(Bi) } - _clearActiveClass(t) { t.classList.remove(Bi); const e = K.find(`${qi}.${Bi}`, t); for (const t of e) t.classList.remove(Bi) } - static jQueryInterface(t) { return this.each((function() { const e = Qi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); - e[t]() } })) } } - j.on(window, Hi, (() => { for (const t of K.find('[data-bs-spy="scroll"]')) Qi.getOrCreateInstance(t) })), b(Qi); const Xi = ".bs.tab", - Yi = `hide${Xi}`, - Ui = `hidden${Xi}`, - Gi = `show${Xi}`, - Ji = `shown${Xi}`, - Zi = `click${Xi}`, - ts = `keydown${Xi}`, - es = `load${Xi}`, - is = "ArrowLeft", - ss = "ArrowRight", - ns = "ArrowUp", - os = "ArrowDown", - rs = "Home", - as = "End", - ls = "active", - cs = "fade", - hs = "show", - ds = ".dropdown-toggle", - us = `:not(${ds})`, - _s = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', - gs = `.nav-link${us}, .list-group-item${us}, [role="tab"]${us}, ${_s}`, - fs = `.${ls}[data-bs-toggle="tab"], .${ls}[data-bs-toggle="pill"], .${ls}[data-bs-toggle="list"]`; - class ms extends W { constructor(t) { super(t), this._parent = this._element.closest('.list-group, .nav, [role="tablist"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), j.on(this._element, ts, (t => this._keydown(t)))) } - static get NAME() { return "tab" } - show() { const t = this._element; if (this._elemIsActive(t)) return; const e = this._getActiveElem(), - i = e ? j.trigger(e, Yi, { relatedTarget: t }) : null; - j.trigger(t, Gi, { relatedTarget: e }).defaultPrevented || i && i.defaultPrevented || (this._deactivate(e, t), this._activate(t, e)) } - _activate(t, e) { t && (t.classList.add(ls), this._activate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.removeAttribute("tabindex"), t.setAttribute("aria-selected", !0), this._toggleDropDown(t, !0), j.trigger(t, Ji, { relatedTarget: e })) : t.classList.add(hs) }), t, t.classList.contains(cs))) } - _deactivate(t, e) { t && (t.classList.remove(ls), t.blur(), this._deactivate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.setAttribute("aria-selected", !1), t.setAttribute("tabindex", "-1"), this._toggleDropDown(t, !1), j.trigger(t, Ui, { relatedTarget: e })) : t.classList.remove(hs) }), t, t.classList.contains(cs))) } - _keydown(t) { if (![is, ss, ns, os, rs, as].includes(t.key)) return; - t.stopPropagation(), t.preventDefault(); const e = this._getChildren().filter((t => !d(t))); let i; if ([rs, as].includes(t.key)) i = e[t.key === rs ? 0 : e.length - 1]; - else { const s = [ss, os].includes(t.key); - i = w(e, t.target, s, !0) } - i && (i.focus({ preventScroll: !0 }), ms.getOrCreateInstance(i).show()) } - _getChildren() { return K.find(gs, this._parent) } - _getActiveElem() { return this._getChildren().find((t => this._elemIsActive(t))) || null } - _setInitialAttributes(t, e) { this._setAttributeIfNotExists(t, "role", "tablist"); for (const t of e) this._setInitialAttributesOnChild(t) } - _setInitialAttributesOnChild(t) { t = this._getInnerElement(t); const e = this._elemIsActive(t), - i = this._getOuterElement(t); - t.setAttribute("aria-selected", e), i !== t && this._setAttributeIfNotExists(i, "role", "presentation"), e || t.setAttribute("tabindex", "-1"), this._setAttributeIfNotExists(t, "role", "tab"), this._setInitialAttributesOnTargetPanel(t) } - _setInitialAttributesOnTargetPanel(t) { const e = K.getElementFromSelector(t); - e && (this._setAttributeIfNotExists(e, "role", "tabpanel"), t.id && this._setAttributeIfNotExists(e, "aria-labelledby", `${t.id}`)) } - _toggleDropDown(t, e) { const i = this._getOuterElement(t); if (!i.classList.contains("dropdown")) return; const s = (t, s) => { const n = K.findOne(t, i); - n && n.classList.toggle(s, e) }; - s(ds, ls), s(".dropdown-menu", hs), i.setAttribute("aria-expanded", e) } - _setAttributeIfNotExists(t, e, i) { t.hasAttribute(e) || t.setAttribute(e, i) } - _elemIsActive(t) { return t.classList.contains(ls) } - _getInnerElement(t) { return t.matches(gs) ? t : K.findOne(gs, t) } - _getOuterElement(t) { return t.closest(".nav-item, .list-group-item") || t } - static jQueryInterface(t) { return this.each((function() { const e = ms.getOrCreateInstance(this); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); - e[t]() } })) } } - j.on(document, Zi, _s, (function(t) { - ["A", "AREA"].includes(this.tagName) && t.preventDefault(), d(this) || ms.getOrCreateInstance(this).show() })), j.on(window, es, (() => { for (const t of K.find(fs)) ms.getOrCreateInstance(t) })), b(ms); const ps = ".bs.toast", - bs = `mouseover${ps}`, - vs = `mouseout${ps}`, - ys = `focusin${ps}`, - ws = `focusout${ps}`, - As = `hide${ps}`, - Es = `hidden${ps}`, - Cs = `show${ps}`, - Ts = `shown${ps}`, - ks = "hide", - $s = "show", - Ss = "showing", - Ls = { animation: "boolean", autohide: "boolean", delay: "number" }, - Os = { animation: !0, autohide: !0, delay: 5e3 }; - class Is extends W { constructor(t, e) { super(t, e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners() } - static get Default() { return Os } - static get DefaultType() { return Ls } - static get NAME() { return "toast" } - show() { j.trigger(this._element, Cs).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove(ks), g(this._element), this._element.classList.add($s, Ss), this._queueCallback((() => { this._element.classList.remove(Ss), j.trigger(this._element, Ts), this._maybeScheduleHide() }), this._element, this._config.animation)) } - hide() { this.isShown() && (j.trigger(this._element, As).defaultPrevented || (this._element.classList.add(Ss), this._queueCallback((() => { this._element.classList.add(ks), this._element.classList.remove(Ss, $s), j.trigger(this._element, Es) }), this._element, this._config.animation))) } - dispose() { this._clearTimeout(), this.isShown() && this._element.classList.remove($s), super.dispose() } - isShown() { return this._element.classList.contains($s) } - _maybeScheduleHide() { this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout((() => { this.hide() }), this._config.delay))) } - _onInteraction(t, e) { switch (t.type) { - case "mouseover": - case "mouseout": - this._hasMouseInteraction = e; break; - case "focusin": - case "focusout": - this._hasKeyboardInteraction = e } if (e) return void this._clearTimeout(); const i = t.relatedTarget; - this._element === i || this._element.contains(i) || this._maybeScheduleHide() } - _setListeners() { j.on(this._element, bs, (t => this._onInteraction(t, !0))), j.on(this._element, vs, (t => this._onInteraction(t, !1))), j.on(this._element, ys, (t => this._onInteraction(t, !0))), j.on(this._element, ws, (t => this._onInteraction(t, !1))) } - _clearTimeout() { clearTimeout(this._timeout), this._timeout = null } - static jQueryInterface(t) { return this.each((function() { const e = Is.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); - e[t](this) } })) } } return V(Is), b(Is), { Alert: U, Button: J, Carousel: Ot, Collapse: Rt, Dropdown: fe, Modal: Ue, Offcanvas: gi, Popover: Mi, ScrollSpy: Qi, Tab: ms, Toast: Is, Tooltip: Ni } })); +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +! function(t, e) { "object" == typeof exports && "undefined" != typeof module ? module.exports = e(require("@popperjs/core")) : "function" == typeof define && define.amd ? define(["@popperjs/core"], e) : (t = "undefined" != typeof globalThis ? globalThis : t || self).bootstrap = e(t.Popper) }(this, (function(t) { "use strict"; + + function e(t) { const e = Object.create(null, { + [Symbol.toStringTag]: { value: "Module" } }); if (t) + for (const i in t) + if ("default" !== i) { const s = Object.getOwnPropertyDescriptor(t, i); + Object.defineProperty(e, i, s.get ? s : { enumerable: !0, get: () => t[i] }) } + return e.default = t, Object.freeze(e) } const i = e(t), + s = new Map, + n = {set(t, e, i) { s.has(t) || s.set(t, new Map); const n = s.get(t); + n.has(e) || 0 === n.size ? n.set(e, i) : console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`) }, get: (t, e) => s.has(t) && s.get(t).get(e) || null, remove(t, e) { if (!s.has(t)) return; const i = s.get(t); + i.delete(e), 0 === i.size && s.delete(t) } }, + o = "transitionend", + r = t => (t && window.CSS && window.CSS.escape && (t = t.replace(/#([^\s"#']+)/g, ((t, e) => `#${CSS.escape(e)}`))), t), + a = t => { t.dispatchEvent(new Event(o)) }, + l = t => !(!t || "object" != typeof t) && (void 0 !== t.jquery && (t = t[0]), void 0 !== t.nodeType), + c = t => l(t) ? t.jquery ? t[0] : t : "string" == typeof t && t.length > 0 ? document.querySelector(r(t)) : null, + h = t => { if (!l(t) || 0 === t.getClientRects().length) return !1; const e = "visible" === getComputedStyle(t).getPropertyValue("visibility"), + i = t.closest("details:not([open])"); if (!i) return e; if (i !== t) { const e = t.closest("summary"); if (e && e.parentNode !== i) return !1; if (null === e) return !1 } return e }, + d = t => !t || t.nodeType !== Node.ELEMENT_NODE || !!t.classList.contains("disabled") || (void 0 !== t.disabled ? t.disabled : t.hasAttribute("disabled") && "false" !== t.getAttribute("disabled")), + u = t => { if (!document.documentElement.attachShadow) return null; if ("function" == typeof t.getRootNode) { const e = t.getRootNode(); return e instanceof ShadowRoot ? e : null } return t instanceof ShadowRoot ? t : t.parentNode ? u(t.parentNode) : null }, + _ = () => {}, + g = t => { t.offsetHeight }, + f = () => window.jQuery && !document.body.hasAttribute("data-bs-no-jquery") ? window.jQuery : null, + m = [], + p = () => "rtl" === document.documentElement.dir, + b = t => { var e; + e = () => { const e = f(); if (e) { const i = t.NAME, + s = e.fn[i]; + e.fn[i] = t.jQueryInterface, e.fn[i].Constructor = t, e.fn[i].noConflict = () => (e.fn[i] = s, t.jQueryInterface) } }, "loading" === document.readyState ? (m.length || document.addEventListener("DOMContentLoaded", (() => { for (const t of m) t() })), m.push(e)) : e() }, + v = (t, e = [], i = t) => "function" == typeof t ? t(...e) : i, + y = (t, e, i = !0) => { if (!i) return void v(t); const s = (t => { if (!t) return 0; let { transitionDuration: e, transitionDelay: i } = window.getComputedStyle(t); const s = Number.parseFloat(e), + n = Number.parseFloat(i); return s || n ? (e = e.split(",")[0], i = i.split(",")[0], 1e3 * (Number.parseFloat(e) + Number.parseFloat(i))) : 0 })(e) + 5; let n = !1; const r = ({ target: i }) => { i === e && (n = !0, e.removeEventListener(o, r), v(t)) }; + e.addEventListener(o, r), setTimeout((() => { n || a(e) }), s) }, + w = (t, e, i, s) => { const n = t.length; let o = t.indexOf(e); return -1 === o ? !i && s ? t[n - 1] : t[0] : (o += i ? 1 : -1, s && (o = (o + n) % n), t[Math.max(0, Math.min(o, n - 1))]) }, + A = /[^.]*(?=\..*)\.|.*/, + E = /\..*/, + C = /::\d+$/, + T = {}; let k = 1; const $ = { mouseenter: "mouseover", mouseleave: "mouseout" }, + S = new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]); + + function L(t, e) { return e && `${e}::${k++}` || t.uidEvent || k++ } + + function O(t) { const e = L(t); return t.uidEvent = e, T[e] = T[e] || {}, T[e] } + + function I(t, e, i = null) { return Object.values(t).find((t => t.callable === e && t.delegationSelector === i)) } + + function D(t, e, i) { const s = "string" == typeof e, + n = s ? i : e || i; let o = M(t); return S.has(o) || (o = t), [s, n, o] } + + function N(t, e, i, s, n) { if ("string" != typeof e || !t) return; let [o, r, a] = D(e, i, s); if (e in $) { const t = t => function(e) { if (!e.relatedTarget || e.relatedTarget !== e.delegateTarget && !e.delegateTarget.contains(e.relatedTarget)) return t.call(this, e) }; + r = t(r) } const l = O(t), + c = l[a] || (l[a] = {}), + h = I(c, r, o ? i : null); if (h) return void(h.oneOff = h.oneOff && n); const d = L(r, e.replace(A, "")), + u = o ? function(t, e, i) { return function s(n) { const o = t.querySelectorAll(e); for (let { target: r } = n; r && r !== this; r = r.parentNode) + for (const a of o) + if (a === r) return F(n, { delegateTarget: r }), s.oneOff && j.off(t, n.type, e, i), i.apply(r, [n]) } }(t, i, r) : function(t, e) { return function i(s) { return F(s, { delegateTarget: t }), i.oneOff && j.off(t, s.type, e), e.apply(t, [s]) } }(t, r); + u.delegationSelector = o ? i : null, u.callable = r, u.oneOff = n, u.uidEvent = d, c[d] = u, t.addEventListener(a, u, o) } + + function P(t, e, i, s, n) { const o = I(e[i], s, n); + o && (t.removeEventListener(i, o, Boolean(n)), delete e[i][o.uidEvent]) } + + function x(t, e, i, s) { const n = e[i] || {}; for (const [o, r] of Object.entries(n)) o.includes(s) && P(t, e, i, r.callable, r.delegationSelector) } + + function M(t) { return t = t.replace(E, ""), $[t] || t } const j = { on(t, e, i, s) { N(t, e, i, s, !1) }, one(t, e, i, s) { N(t, e, i, s, !0) }, off(t, e, i, s) { if ("string" != typeof e || !t) return; const [n, o, r] = D(e, i, s), a = r !== e, l = O(t), c = l[r] || {}, h = e.startsWith("."); if (void 0 === o) { if (h) + for (const i of Object.keys(l)) x(t, l, i, e.slice(1)); for (const [i, s] of Object.entries(c)) { const n = i.replace(C, ""); + a && !e.includes(n) || P(t, l, r, s.callable, s.delegationSelector) } } else { if (!Object.keys(c).length) return; + P(t, l, r, o, n ? i : null) } }, trigger(t, e, i) { if ("string" != typeof e || !t) return null; const s = f(); let n = null, + o = !0, + r = !0, + a = !1; + e !== M(e) && s && (n = s.Event(e, i), s(t).trigger(n), o = !n.isPropagationStopped(), r = !n.isImmediatePropagationStopped(), a = n.isDefaultPrevented()); const l = F(new Event(e, { bubbles: o, cancelable: !0 }), i); return a && l.preventDefault(), r && t.dispatchEvent(l), l.defaultPrevented && n && n.preventDefault(), l } }; + + function F(t, e = {}) { for (const [i, s] of Object.entries(e)) try { t[i] = s } catch (e) { Object.defineProperty(t, i, { configurable: !0, get: () => s }) } + return t } + + function z(t) { if ("true" === t) return !0; if ("false" === t) return !1; if (t === Number(t).toString()) return Number(t); if ("" === t || "null" === t) return null; if ("string" != typeof t) return t; try { return JSON.parse(decodeURIComponent(t)) } catch (e) { return t } } + + function H(t) { return t.replace(/[A-Z]/g, (t => `-${t.toLowerCase()}`)) } const B = { setDataAttribute(t, e, i) { t.setAttribute(`data-bs-${H(e)}`, i) }, removeDataAttribute(t, e) { t.removeAttribute(`data-bs-${H(e)}`) }, getDataAttributes(t) { if (!t) return {}; const e = {}, + i = Object.keys(t.dataset).filter((t => t.startsWith("bs") && !t.startsWith("bsConfig"))); for (const s of i) { let i = s.replace(/^bs/, ""); + i = i.charAt(0).toLowerCase() + i.slice(1, i.length), e[i] = z(t.dataset[s]) } return e }, getDataAttribute: (t, e) => z(t.getAttribute(`data-bs-${H(e)}`)) }; + class q { static get Default() { return {} } + static get DefaultType() { return {} } + static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!') } + _getConfig(t) { return t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } + _configAfterMerge(t) { return t } + _mergeConfigObj(t, e) { const i = l(e) ? B.getDataAttribute(e, "config") : {}; return {...this.constructor.Default, ... "object" == typeof i ? i : {}, ...l(e) ? B.getDataAttributes(e) : {}, ... "object" == typeof t ? t : {} } } + _typeCheckConfig(t, e = this.constructor.DefaultType) { for (const [s, n] of Object.entries(e)) { const e = t[s], + o = l(e) ? "element" : null == (i = e) ? `${i}` : Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase(); if (!new RegExp(n).test(o)) throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${n}".`) } var i } } + class W extends q { constructor(t, e) { super(), (t = c(t)) && (this._element = t, this._config = this._getConfig(e), n.set(this._element, this.constructor.DATA_KEY, this)) } + dispose() { n.remove(this._element, this.constructor.DATA_KEY), j.off(this._element, this.constructor.EVENT_KEY); for (const t of Object.getOwnPropertyNames(this)) this[t] = null } + _queueCallback(t, e, i = !0) { y(t, e, i) } + _getConfig(t) { return t = this._mergeConfigObj(t, this._element), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } + static getInstance(t) { return n.get(c(t), this.DATA_KEY) } + static getOrCreateInstance(t, e = {}) { return this.getInstance(t) || new this(t, "object" == typeof e ? e : null) } + static get VERSION() { return "5.3.3" } + static get DATA_KEY() { return `bs.${this.NAME}` } + static get EVENT_KEY() { return `.${this.DATA_KEY}` } + static eventName(t) { return `${t}${this.EVENT_KEY}` } } const R = t => { let e = t.getAttribute("data-bs-target"); if (!e || "#" === e) { let i = t.getAttribute("href"); if (!i || !i.includes("#") && !i.startsWith(".")) return null; + i.includes("#") && !i.startsWith("#") && (i = `#${i.split("#")[1]}`), e = i && "#" !== i ? i.trim() : null } return e ? e.split(",").map((t => r(t))).join(",") : null }, + K = { find: (t, e = document.documentElement) => [].concat(...Element.prototype.querySelectorAll.call(e, t)), findOne: (t, e = document.documentElement) => Element.prototype.querySelector.call(e, t), children: (t, e) => [].concat(...t.children).filter((t => t.matches(e))), parents(t, e) { const i = []; let s = t.parentNode.closest(e); for (; s;) i.push(s), s = s.parentNode.closest(e); return i }, prev(t, e) { let i = t.previousElementSibling; for (; i;) { if (i.matches(e)) return [i]; + i = i.previousElementSibling } return [] }, next(t, e) { let i = t.nextElementSibling; for (; i;) { if (i.matches(e)) return [i]; + i = i.nextElementSibling } return [] }, focusableChildren(t) { const e = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((t => `${t}:not([tabindex^="-"])`)).join(","); return this.find(e, t).filter((t => !d(t) && h(t))) }, getSelectorFromElement(t) { const e = R(t); return e && K.findOne(e) ? e : null }, getElementFromSelector(t) { const e = R(t); return e ? K.findOne(e) : null }, getMultipleElementsFromSelector(t) { const e = R(t); return e ? K.find(e) : [] } }, + V = (t, e = "hide") => { const i = `click.dismiss${t.EVENT_KEY}`, + s = t.NAME; + j.on(document, i, `[data-bs-dismiss="${s}"]`, (function(i) { if (["A", "AREA"].includes(this.tagName) && i.preventDefault(), d(this)) return; const n = K.getElementFromSelector(this) || this.closest(`.${s}`); + t.getOrCreateInstance(n)[e]() })) }, + Q = ".bs.alert", + X = `close${Q}`, + Y = `closed${Q}`; + class U extends W { static get NAME() { return "alert" } + close() { if (j.trigger(this._element, X).defaultPrevented) return; + this._element.classList.remove("show"); const t = this._element.classList.contains("fade"); + this._queueCallback((() => this._destroyElement()), this._element, t) } + _destroyElement() { this._element.remove(), j.trigger(this._element, Y), this.dispose() } + static jQueryInterface(t) { return this.each((function() { const e = U.getOrCreateInstance(this); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); + e[t](this) } })) } } + V(U, "close"), b(U); const G = '[data-bs-toggle="button"]'; + class J extends W { static get NAME() { return "button" } + toggle() { this._element.setAttribute("aria-pressed", this._element.classList.toggle("active")) } + static jQueryInterface(t) { return this.each((function() { const e = J.getOrCreateInstance(this); "toggle" === t && e[t]() })) } } + j.on(document, "click.bs.button.data-api", G, (t => { t.preventDefault(); const e = t.target.closest(G); + J.getOrCreateInstance(e).toggle() })), b(J); const Z = ".bs.swipe", + tt = `touchstart${Z}`, + et = `touchmove${Z}`, + it = `touchend${Z}`, + st = `pointerdown${Z}`, + nt = `pointerup${Z}`, + ot = { endCallback: null, leftCallback: null, rightCallback: null }, + rt = { endCallback: "(function|null)", leftCallback: "(function|null)", rightCallback: "(function|null)" }; + class at extends q { constructor(t, e) { super(), this._element = t, t && at.isSupported() && (this._config = this._getConfig(e), this._deltaX = 0, this._supportPointerEvents = Boolean(window.PointerEvent), this._initEvents()) } + static get Default() { return ot } + static get DefaultType() { return rt } + static get NAME() { return "swipe" } + dispose() { j.off(this._element, Z) } + _start(t) { this._supportPointerEvents ? this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX) : this._deltaX = t.touches[0].clientX } + _end(t) { this._eventIsPointerPenTouch(t) && (this._deltaX = t.clientX - this._deltaX), this._handleSwipe(), v(this._config.endCallback) } + _move(t) { this._deltaX = t.touches && t.touches.length > 1 ? 0 : t.touches[0].clientX - this._deltaX } + _handleSwipe() { const t = Math.abs(this._deltaX); if (t <= 40) return; const e = t / this._deltaX; + this._deltaX = 0, e && v(e > 0 ? this._config.rightCallback : this._config.leftCallback) } + _initEvents() { this._supportPointerEvents ? (j.on(this._element, st, (t => this._start(t))), j.on(this._element, nt, (t => this._end(t))), this._element.classList.add("pointer-event")) : (j.on(this._element, tt, (t => this._start(t))), j.on(this._element, et, (t => this._move(t))), j.on(this._element, it, (t => this._end(t)))) } + _eventIsPointerPenTouch(t) { return this._supportPointerEvents && ("pen" === t.pointerType || "touch" === t.pointerType) } + static isSupported() { return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0 } } const lt = ".bs.carousel", + ct = ".data-api", + ht = "next", + dt = "prev", + ut = "left", + _t = "right", + gt = `slide${lt}`, + ft = `slid${lt}`, + mt = `keydown${lt}`, + pt = `mouseenter${lt}`, + bt = `mouseleave${lt}`, + vt = `dragstart${lt}`, + yt = `load${lt}${ct}`, + wt = `click${lt}${ct}`, + At = "carousel", + Et = "active", + Ct = ".active", + Tt = ".carousel-item", + kt = Ct + Tt, + $t = { ArrowLeft: _t, ArrowRight: ut }, + St = { interval: 5e3, keyboard: !0, pause: "hover", ride: !1, touch: !0, wrap: !0 }, + Lt = { interval: "(number|boolean)", keyboard: "boolean", pause: "(string|boolean)", ride: "(boolean|string)", touch: "boolean", wrap: "boolean" }; + class Ot extends W { constructor(t, e) { super(t, e), this._interval = null, this._activeElement = null, this._isSliding = !1, this.touchTimeout = null, this._swipeHelper = null, this._indicatorsElement = K.findOne(".carousel-indicators", this._element), this._addEventListeners(), this._config.ride === At && this.cycle() } + static get Default() { return St } + static get DefaultType() { return Lt } + static get NAME() { return "carousel" } + next() { this._slide(ht) } + nextWhenVisible() {!document.hidden && h(this._element) && this.next() } + prev() { this._slide(dt) } + pause() { this._isSliding && a(this._element), this._clearInterval() } + cycle() { this._clearInterval(), this._updateInterval(), this._interval = setInterval((() => this.nextWhenVisible()), this._config.interval) } + _maybeEnableCycle() { this._config.ride && (this._isSliding ? j.one(this._element, ft, (() => this.cycle())) : this.cycle()) } + to(t) { const e = this._getItems(); if (t > e.length - 1 || t < 0) return; if (this._isSliding) return void j.one(this._element, ft, (() => this.to(t))); const i = this._getItemIndex(this._getActive()); if (i === t) return; const s = t > i ? ht : dt; + this._slide(s, e[t]) } + dispose() { this._swipeHelper && this._swipeHelper.dispose(), super.dispose() } + _configAfterMerge(t) { return t.defaultInterval = t.interval, t } + _addEventListeners() { this._config.keyboard && j.on(this._element, mt, (t => this._keydown(t))), "hover" === this._config.pause && (j.on(this._element, pt, (() => this.pause())), j.on(this._element, bt, (() => this._maybeEnableCycle()))), this._config.touch && at.isSupported() && this._addTouchEventListeners() } + _addTouchEventListeners() { for (const t of K.find(".carousel-item img", this._element)) j.on(t, vt, (t => t.preventDefault())); const t = { leftCallback: () => this._slide(this._directionToOrder(ut)), rightCallback: () => this._slide(this._directionToOrder(_t)), endCallback: () => { "hover" === this._config.pause && (this.pause(), this.touchTimeout && clearTimeout(this.touchTimeout), this.touchTimeout = setTimeout((() => this._maybeEnableCycle()), 500 + this._config.interval)) } }; + this._swipeHelper = new at(this._element, t) } + _keydown(t) { if (/input|textarea/i.test(t.target.tagName)) return; const e = $t[t.key]; + e && (t.preventDefault(), this._slide(this._directionToOrder(e))) } + _getItemIndex(t) { return this._getItems().indexOf(t) } + _setActiveIndicatorElement(t) { if (!this._indicatorsElement) return; const e = K.findOne(Ct, this._indicatorsElement); + e.classList.remove(Et), e.removeAttribute("aria-current"); const i = K.findOne(`[data-bs-slide-to="${t}"]`, this._indicatorsElement); + i && (i.classList.add(Et), i.setAttribute("aria-current", "true")) } + _updateInterval() { const t = this._activeElement || this._getActive(); if (!t) return; const e = Number.parseInt(t.getAttribute("data-bs-interval"), 10); + this._config.interval = e || this._config.defaultInterval } + _slide(t, e = null) { if (this._isSliding) return; const i = this._getActive(), + s = t === ht, + n = e || w(this._getItems(), i, s, this._config.wrap); if (n === i) return; const o = this._getItemIndex(n), + r = e => j.trigger(this._element, e, { relatedTarget: n, direction: this._orderToDirection(t), from: this._getItemIndex(i), to: o }); if (r(gt).defaultPrevented) return; if (!i || !n) return; const a = Boolean(this._interval); + this.pause(), this._isSliding = !0, this._setActiveIndicatorElement(o), this._activeElement = n; const l = s ? "carousel-item-start" : "carousel-item-end", + c = s ? "carousel-item-next" : "carousel-item-prev"; + n.classList.add(c), g(n), i.classList.add(l), n.classList.add(l), this._queueCallback((() => { n.classList.remove(l, c), n.classList.add(Et), i.classList.remove(Et, c, l), this._isSliding = !1, r(ft) }), i, this._isAnimated()), a && this.cycle() } + _isAnimated() { return this._element.classList.contains("slide") } + _getActive() { return K.findOne(kt, this._element) } + _getItems() { return K.find(Tt, this._element) } + _clearInterval() { this._interval && (clearInterval(this._interval), this._interval = null) } + _directionToOrder(t) { return p() ? t === ut ? dt : ht : t === ut ? ht : dt } + _orderToDirection(t) { return p() ? t === dt ? ut : _t : t === dt ? _t : ut } + static jQueryInterface(t) { return this.each((function() { const e = Ot.getOrCreateInstance(this, t); if ("number" != typeof t) { if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); + e[t]() } } else e.to(t) })) } } + j.on(document, wt, "[data-bs-slide], [data-bs-slide-to]", (function(t) { const e = K.getElementFromSelector(this); if (!e || !e.classList.contains(At)) return; + t.preventDefault(); const i = Ot.getOrCreateInstance(e), + s = this.getAttribute("data-bs-slide-to"); return s ? (i.to(s), void i._maybeEnableCycle()) : "next" === B.getDataAttribute(this, "slide") ? (i.next(), void i._maybeEnableCycle()) : (i.prev(), void i._maybeEnableCycle()) })), j.on(window, yt, (() => { const t = K.find('[data-bs-ride="carousel"]'); for (const e of t) Ot.getOrCreateInstance(e) })), b(Ot); const It = ".bs.collapse", + Dt = `show${It}`, + Nt = `shown${It}`, + Pt = `hide${It}`, + xt = `hidden${It}`, + Mt = `click${It}.data-api`, + jt = "show", + Ft = "collapse", + zt = "collapsing", + Ht = `:scope .${Ft} .${Ft}`, + Bt = '[data-bs-toggle="collapse"]', + qt = { parent: null, toggle: !0 }, + Wt = { parent: "(null|element)", toggle: "boolean" }; + class Rt extends W { constructor(t, e) { super(t, e), this._isTransitioning = !1, this._triggerArray = []; const i = K.find(Bt); for (const t of i) { const e = K.getSelectorFromElement(t), + i = K.find(e).filter((t => t === this._element)); + null !== e && i.length && this._triggerArray.push(t) } + this._initializeChildren(), this._config.parent || this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()), this._config.toggle && this.toggle() } + static get Default() { return qt } + static get DefaultType() { return Wt } + static get NAME() { return "collapse" } + toggle() { this._isShown() ? this.hide() : this.show() } + show() { if (this._isTransitioning || this._isShown()) return; let t = []; if (this._config.parent && (t = this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t => t !== this._element)).map((t => Rt.getOrCreateInstance(t, { toggle: !1 })))), t.length && t[0]._isTransitioning) return; if (j.trigger(this._element, Dt).defaultPrevented) return; for (const e of t) e.hide(); const e = this._getDimension(); + this._element.classList.remove(Ft), this._element.classList.add(zt), this._element.style[e] = 0, this._addAriaAndCollapsedClass(this._triggerArray, !0), this._isTransitioning = !0; const i = `scroll${e[0].toUpperCase()+e.slice(1)}`; + this._queueCallback((() => { this._isTransitioning = !1, this._element.classList.remove(zt), this._element.classList.add(Ft, jt), this._element.style[e] = "", j.trigger(this._element, Nt) }), this._element, !0), this._element.style[e] = `${this._element[i]}px` } + hide() { if (this._isTransitioning || !this._isShown()) return; if (j.trigger(this._element, Pt).defaultPrevented) return; const t = this._getDimension(); + this._element.style[t] = `${this._element.getBoundingClientRect()[t]}px`, g(this._element), this._element.classList.add(zt), this._element.classList.remove(Ft, jt); for (const t of this._triggerArray) { const e = K.getElementFromSelector(t); + e && !this._isShown(e) && this._addAriaAndCollapsedClass([t], !1) } + this._isTransitioning = !0, this._element.style[t] = "", this._queueCallback((() => { this._isTransitioning = !1, this._element.classList.remove(zt), this._element.classList.add(Ft), j.trigger(this._element, xt) }), this._element, !0) } + _isShown(t = this._element) { return t.classList.contains(jt) } + _configAfterMerge(t) { return t.toggle = Boolean(t.toggle), t.parent = c(t.parent), t } + _getDimension() { return this._element.classList.contains("collapse-horizontal") ? "width" : "height" } + _initializeChildren() { if (!this._config.parent) return; const t = this._getFirstLevelChildren(Bt); for (const e of t) { const t = K.getElementFromSelector(e); + t && this._addAriaAndCollapsedClass([e], this._isShown(t)) } } + _getFirstLevelChildren(t) { const e = K.find(Ht, this._config.parent); return K.find(t, this._config.parent).filter((t => !e.includes(t))) } + _addAriaAndCollapsedClass(t, e) { if (t.length) + for (const i of t) i.classList.toggle("collapsed", !e), i.setAttribute("aria-expanded", e) } + static jQueryInterface(t) { const e = {}; return "string" == typeof t && /show|hide/.test(t) && (e.toggle = !1), this.each((function() { const i = Rt.getOrCreateInstance(this, e); if ("string" == typeof t) { if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t]() } })) } } + j.on(document, Mt, Bt, (function(t) { + ("A" === t.target.tagName || t.delegateTarget && "A" === t.delegateTarget.tagName) && t.preventDefault(); for (const t of K.getMultipleElementsFromSelector(this)) Rt.getOrCreateInstance(t, { toggle: !1 }).toggle() })), b(Rt); const Kt = "dropdown", + Vt = ".bs.dropdown", + Qt = ".data-api", + Xt = "ArrowUp", + Yt = "ArrowDown", + Ut = `hide${Vt}`, + Gt = `hidden${Vt}`, + Jt = `show${Vt}`, + Zt = `shown${Vt}`, + te = `click${Vt}${Qt}`, + ee = `keydown${Vt}${Qt}`, + ie = `keyup${Vt}${Qt}`, + se = "show", + ne = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)', + oe = `${ne}.${se}`, + re = ".dropdown-menu", + ae = p() ? "top-end" : "top-start", + le = p() ? "top-start" : "top-end", + ce = p() ? "bottom-end" : "bottom-start", + he = p() ? "bottom-start" : "bottom-end", + de = p() ? "left-start" : "right-start", + ue = p() ? "right-start" : "left-start", + _e = { autoClose: !0, boundary: "clippingParents", display: "dynamic", offset: [0, 2], popperConfig: null, reference: "toggle" }, + ge = { autoClose: "(boolean|string)", boundary: "(string|element)", display: "string", offset: "(array|string|function)", popperConfig: "(null|object|function)", reference: "(string|element|object)" }; + class fe extends W { constructor(t, e) { super(t, e), this._popper = null, this._parent = this._element.parentNode, this._menu = K.next(this._element, re)[0] || K.prev(this._element, re)[0] || K.findOne(re, this._parent), this._inNavbar = this._detectNavbar() } + static get Default() { return _e } + static get DefaultType() { return ge } + static get NAME() { return Kt } + toggle() { return this._isShown() ? this.hide() : this.show() } + show() { if (d(this._element) || this._isShown()) return; const t = { relatedTarget: this._element }; if (!j.trigger(this._element, Jt, t).defaultPrevented) { if (this._createPopper(), "ontouchstart" in document.documentElement && !this._parent.closest(".navbar-nav")) + for (const t of[].concat(...document.body.children)) j.on(t, "mouseover", _); + this._element.focus(), this._element.setAttribute("aria-expanded", !0), this._menu.classList.add(se), this._element.classList.add(se), j.trigger(this._element, Zt, t) } } + hide() { if (d(this._element) || !this._isShown()) return; const t = { relatedTarget: this._element }; + this._completeHide(t) } + dispose() { this._popper && this._popper.destroy(), super.dispose() } + update() { this._inNavbar = this._detectNavbar(), this._popper && this._popper.update() } + _completeHide(t) { if (!j.trigger(this._element, Ut, t).defaultPrevented) { if ("ontouchstart" in document.documentElement) + for (const t of[].concat(...document.body.children)) j.off(t, "mouseover", _); + this._popper && this._popper.destroy(), this._menu.classList.remove(se), this._element.classList.remove(se), this._element.setAttribute("aria-expanded", "false"), B.removeDataAttribute(this._menu, "popper"), j.trigger(this._element, Gt, t) } } + _getConfig(t) { if ("object" == typeof(t = super._getConfig(t)).reference && !l(t.reference) && "function" != typeof t.reference.getBoundingClientRect) throw new TypeError(`${Kt.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); return t } + _createPopper() { if (void 0 === i) throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)"); let t = this._element; "parent" === this._config.reference ? t = this._parent : l(this._config.reference) ? t = c(this._config.reference) : "object" == typeof this._config.reference && (t = this._config.reference); const e = this._getPopperConfig(); + this._popper = i.createPopper(t, this._menu, e) } + _isShown() { return this._menu.classList.contains(se) } + _getPlacement() { const t = this._parent; if (t.classList.contains("dropend")) return de; if (t.classList.contains("dropstart")) return ue; if (t.classList.contains("dropup-center")) return "top"; if (t.classList.contains("dropdown-center")) return "bottom"; const e = "end" === getComputedStyle(this._menu).getPropertyValue("--bs-position").trim(); return t.classList.contains("dropup") ? e ? le : ae : e ? he : ce } + _detectNavbar() { return null !== this._element.closest(".navbar") } + _getOffset() { const { offset: t } = this._config; return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t } + _getPopperConfig() { const t = { placement: this._getPlacement(), modifiers: [{ name: "preventOverflow", options: { boundary: this._config.boundary } }, { name: "offset", options: { offset: this._getOffset() } }] }; return (this._inNavbar || "static" === this._config.display) && (B.setDataAttribute(this._menu, "popper", "static"), t.modifiers = [{ name: "applyStyles", enabled: !1 }]), {...t, ...v(this._config.popperConfig, [t]) } } + _selectMenuItem({ key: t, target: e }) { const i = K.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)", this._menu).filter((t => h(t))); + i.length && w(i, e, t === Yt, !i.includes(e)).focus() } + static jQueryInterface(t) { return this.each((function() { const e = fe.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t]() } })) } + static clearMenus(t) { if (2 === t.button || "keyup" === t.type && "Tab" !== t.key) return; const e = K.find(oe); for (const i of e) { const e = fe.getInstance(i); if (!e || !1 === e._config.autoClose) continue; const s = t.composedPath(), + n = s.includes(e._menu); if (s.includes(e._element) || "inside" === e._config.autoClose && !n || "outside" === e._config.autoClose && n) continue; if (e._menu.contains(t.target) && ("keyup" === t.type && "Tab" === t.key || /input|select|option|textarea|form/i.test(t.target.tagName))) continue; const o = { relatedTarget: e._element }; "click" === t.type && (o.clickEvent = t), e._completeHide(o) } } + static dataApiKeydownHandler(t) { const e = /input|textarea/i.test(t.target.tagName), + i = "Escape" === t.key, + s = [Xt, Yt].includes(t.key); if (!s && !i) return; if (e && !i) return; + t.preventDefault(); const n = this.matches(ne) ? this : K.prev(this, ne)[0] || K.next(this, ne)[0] || K.findOne(ne, t.delegateTarget.parentNode), + o = fe.getOrCreateInstance(n); if (s) return t.stopPropagation(), o.show(), void o._selectMenuItem(t); + o._isShown() && (t.stopPropagation(), o.hide(), n.focus()) } } + j.on(document, ee, ne, fe.dataApiKeydownHandler), j.on(document, ee, re, fe.dataApiKeydownHandler), j.on(document, te, fe.clearMenus), j.on(document, ie, fe.clearMenus), j.on(document, te, ne, (function(t) { t.preventDefault(), fe.getOrCreateInstance(this).toggle() })), b(fe); const me = "backdrop", + pe = "show", + be = `mousedown.bs.${me}`, + ve = { className: "modal-backdrop", clickCallback: null, isAnimated: !1, isVisible: !0, rootElement: "body" }, + ye = { className: "string", clickCallback: "(function|null)", isAnimated: "boolean", isVisible: "boolean", rootElement: "(element|string)" }; + class we extends q { constructor(t) { super(), this._config = this._getConfig(t), this._isAppended = !1, this._element = null } + static get Default() { return ve } + static get DefaultType() { return ye } + static get NAME() { return me } + show(t) { if (!this._config.isVisible) return void v(t); + this._append(); const e = this._getElement(); + this._config.isAnimated && g(e), e.classList.add(pe), this._emulateAnimation((() => { v(t) })) } + hide(t) { this._config.isVisible ? (this._getElement().classList.remove(pe), this._emulateAnimation((() => { this.dispose(), v(t) }))) : v(t) } + dispose() { this._isAppended && (j.off(this._element, be), this._element.remove(), this._isAppended = !1) } + _getElement() { if (!this._element) { const t = document.createElement("div"); + t.className = this._config.className, this._config.isAnimated && t.classList.add("fade"), this._element = t } return this._element } + _configAfterMerge(t) { return t.rootElement = c(t.rootElement), t } + _append() { if (this._isAppended) return; const t = this._getElement(); + this._config.rootElement.append(t), j.on(t, be, (() => { v(this._config.clickCallback) })), this._isAppended = !0 } + _emulateAnimation(t) { y(t, this._getElement(), this._config.isAnimated) } } const Ae = ".bs.focustrap", + Ee = `focusin${Ae}`, + Ce = `keydown.tab${Ae}`, + Te = "backward", + ke = { autofocus: !0, trapElement: null }, + $e = { autofocus: "boolean", trapElement: "element" }; + class Se extends q { constructor(t) { super(), this._config = this._getConfig(t), this._isActive = !1, this._lastTabNavDirection = null } + static get Default() { return ke } + static get DefaultType() { return $e } + static get NAME() { return "focustrap" } + activate() { this._isActive || (this._config.autofocus && this._config.trapElement.focus(), j.off(document, Ae), j.on(document, Ee, (t => this._handleFocusin(t))), j.on(document, Ce, (t => this._handleKeydown(t))), this._isActive = !0) } + deactivate() { this._isActive && (this._isActive = !1, j.off(document, Ae)) } + _handleFocusin(t) { const { trapElement: e } = this._config; if (t.target === document || t.target === e || e.contains(t.target)) return; const i = K.focusableChildren(e); + 0 === i.length ? e.focus() : this._lastTabNavDirection === Te ? i[i.length - 1].focus() : i[0].focus() } + _handleKeydown(t) { "Tab" === t.key && (this._lastTabNavDirection = t.shiftKey ? Te : "forward") } } const Le = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top", + Oe = ".sticky-top", + Ie = "padding-right", + De = "margin-right"; + class Ne { constructor() { this._element = document.body } + getWidth() { const t = document.documentElement.clientWidth; return Math.abs(window.innerWidth - t) } + hide() { const t = this.getWidth(); + this._disableOverFlow(), this._setElementAttributes(this._element, Ie, (e => e + t)), this._setElementAttributes(Le, Ie, (e => e + t)), this._setElementAttributes(Oe, De, (e => e - t)) } + reset() { this._resetElementAttributes(this._element, "overflow"), this._resetElementAttributes(this._element, Ie), this._resetElementAttributes(Le, Ie), this._resetElementAttributes(Oe, De) } + isOverflowing() { return this.getWidth() > 0 } + _disableOverFlow() { this._saveInitialAttribute(this._element, "overflow"), this._element.style.overflow = "hidden" } + _setElementAttributes(t, e, i) { const s = this.getWidth(); + this._applyManipulationCallback(t, (t => { if (t !== this._element && window.innerWidth > t.clientWidth + s) return; + this._saveInitialAttribute(t, e); const n = window.getComputedStyle(t).getPropertyValue(e); + t.style.setProperty(e, `${i(Number.parseFloat(n))}px`) })) } + _saveInitialAttribute(t, e) { const i = t.style.getPropertyValue(e); + i && B.setDataAttribute(t, e, i) } + _resetElementAttributes(t, e) { this._applyManipulationCallback(t, (t => { const i = B.getDataAttribute(t, e); + null !== i ? (B.removeDataAttribute(t, e), t.style.setProperty(e, i)) : t.style.removeProperty(e) })) } + _applyManipulationCallback(t, e) { if (l(t)) e(t); + else + for (const i of K.find(t, this._element)) e(i) } } const Pe = ".bs.modal", + xe = `hide${Pe}`, + Me = `hidePrevented${Pe}`, + je = `hidden${Pe}`, + Fe = `show${Pe}`, + ze = `shown${Pe}`, + He = `resize${Pe}`, + Be = `click.dismiss${Pe}`, + qe = `mousedown.dismiss${Pe}`, + We = `keydown.dismiss${Pe}`, + Re = `click${Pe}.data-api`, + Ke = "modal-open", + Ve = "show", + Qe = "modal-static", + Xe = { backdrop: !0, focus: !0, keyboard: !0 }, + Ye = { backdrop: "(boolean|string)", focus: "boolean", keyboard: "boolean" }; + class Ue extends W { constructor(t, e) { super(t, e), this._dialog = K.findOne(".modal-dialog", this._element), this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._isShown = !1, this._isTransitioning = !1, this._scrollBar = new Ne, this._addEventListeners() } + static get Default() { return Xe } + static get DefaultType() { return Ye } + static get NAME() { return "modal" } + toggle(t) { return this._isShown ? this.hide() : this.show(t) } + show(t) { this._isShown || this._isTransitioning || j.trigger(this._element, Fe, { relatedTarget: t }).defaultPrevented || (this._isShown = !0, this._isTransitioning = !0, this._scrollBar.hide(), document.body.classList.add(Ke), this._adjustDialog(), this._backdrop.show((() => this._showElement(t)))) } + hide() { this._isShown && !this._isTransitioning && (j.trigger(this._element, xe).defaultPrevented || (this._isShown = !1, this._isTransitioning = !0, this._focustrap.deactivate(), this._element.classList.remove(Ve), this._queueCallback((() => this._hideModal()), this._element, this._isAnimated()))) } + dispose() { j.off(window, Pe), j.off(this._dialog, Pe), this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose() } + handleUpdate() { this._adjustDialog() } + _initializeBackDrop() { return new we({ isVisible: Boolean(this._config.backdrop), isAnimated: this._isAnimated() }) } + _initializeFocusTrap() { return new Se({ trapElement: this._element }) } + _showElement(t) { document.body.contains(this._element) || document.body.append(this._element), this._element.style.display = "block", this._element.removeAttribute("aria-hidden"), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.scrollTop = 0; const e = K.findOne(".modal-body", this._dialog); + e && (e.scrollTop = 0), g(this._element), this._element.classList.add(Ve), this._queueCallback((() => { this._config.focus && this._focustrap.activate(), this._isTransitioning = !1, j.trigger(this._element, ze, { relatedTarget: t }) }), this._dialog, this._isAnimated()) } + _addEventListeners() { j.on(this._element, We, (t => { "Escape" === t.key && (this._config.keyboard ? this.hide() : this._triggerBackdropTransition()) })), j.on(window, He, (() => { this._isShown && !this._isTransitioning && this._adjustDialog() })), j.on(this._element, qe, (t => { j.one(this._element, Be, (e => { this._element === t.target && this._element === e.target && ("static" !== this._config.backdrop ? this._config.backdrop && this.hide() : this._triggerBackdropTransition()) })) })) } + _hideModal() { this._element.style.display = "none", this._element.setAttribute("aria-hidden", !0), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._isTransitioning = !1, this._backdrop.hide((() => { document.body.classList.remove(Ke), this._resetAdjustments(), this._scrollBar.reset(), j.trigger(this._element, je) })) } + _isAnimated() { return this._element.classList.contains("fade") } + _triggerBackdropTransition() { if (j.trigger(this._element, Me).defaultPrevented) return; const t = this._element.scrollHeight > document.documentElement.clientHeight, + e = this._element.style.overflowY; "hidden" === e || this._element.classList.contains(Qe) || (t || (this._element.style.overflowY = "hidden"), this._element.classList.add(Qe), this._queueCallback((() => { this._element.classList.remove(Qe), this._queueCallback((() => { this._element.style.overflowY = e }), this._dialog) }), this._dialog), this._element.focus()) } + _adjustDialog() { const t = this._element.scrollHeight > document.documentElement.clientHeight, + e = this._scrollBar.getWidth(), + i = e > 0; if (i && !t) { const t = p() ? "paddingLeft" : "paddingRight"; + this._element.style[t] = `${e}px` } if (!i && t) { const t = p() ? "paddingRight" : "paddingLeft"; + this._element.style[t] = `${e}px` } } + _resetAdjustments() { this._element.style.paddingLeft = "", this._element.style.paddingRight = "" } + static jQueryInterface(t, e) { return this.each((function() { const i = Ue.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === i[t]) throw new TypeError(`No method named "${t}"`); + i[t](e) } })) } } + j.on(document, Re, '[data-bs-toggle="modal"]', (function(t) { const e = K.getElementFromSelector(this); + ["A", "AREA"].includes(this.tagName) && t.preventDefault(), j.one(e, Fe, (t => { t.defaultPrevented || j.one(e, je, (() => { h(this) && this.focus() })) })); const i = K.findOne(".modal.show"); + i && Ue.getInstance(i).hide(), Ue.getOrCreateInstance(e).toggle(this) })), V(Ue), b(Ue); const Ge = ".bs.offcanvas", + Je = ".data-api", + Ze = `load${Ge}${Je}`, + ti = "show", + ei = "showing", + ii = "hiding", + si = ".offcanvas.show", + ni = `show${Ge}`, + oi = `shown${Ge}`, + ri = `hide${Ge}`, + ai = `hidePrevented${Ge}`, + li = `hidden${Ge}`, + ci = `resize${Ge}`, + hi = `click${Ge}${Je}`, + di = `keydown.dismiss${Ge}`, + ui = { backdrop: !0, keyboard: !0, scroll: !1 }, + _i = { backdrop: "(boolean|string)", keyboard: "boolean", scroll: "boolean" }; + class gi extends W { constructor(t, e) { super(t, e), this._isShown = !1, this._backdrop = this._initializeBackDrop(), this._focustrap = this._initializeFocusTrap(), this._addEventListeners() } + static get Default() { return ui } + static get DefaultType() { return _i } + static get NAME() { return "offcanvas" } + toggle(t) { return this._isShown ? this.hide() : this.show(t) } + show(t) { this._isShown || j.trigger(this._element, ni, { relatedTarget: t }).defaultPrevented || (this._isShown = !0, this._backdrop.show(), this._config.scroll || (new Ne).hide(), this._element.setAttribute("aria-modal", !0), this._element.setAttribute("role", "dialog"), this._element.classList.add(ei), this._queueCallback((() => { this._config.scroll && !this._config.backdrop || this._focustrap.activate(), this._element.classList.add(ti), this._element.classList.remove(ei), j.trigger(this._element, oi, { relatedTarget: t }) }), this._element, !0)) } + hide() { this._isShown && (j.trigger(this._element, ri).defaultPrevented || (this._focustrap.deactivate(), this._element.blur(), this._isShown = !1, this._element.classList.add(ii), this._backdrop.hide(), this._queueCallback((() => { this._element.classList.remove(ti, ii), this._element.removeAttribute("aria-modal"), this._element.removeAttribute("role"), this._config.scroll || (new Ne).reset(), j.trigger(this._element, li) }), this._element, !0))) } + dispose() { this._backdrop.dispose(), this._focustrap.deactivate(), super.dispose() } + _initializeBackDrop() { const t = Boolean(this._config.backdrop); return new we({ className: "offcanvas-backdrop", isVisible: t, isAnimated: !0, rootElement: this._element.parentNode, clickCallback: t ? () => { "static" !== this._config.backdrop ? this.hide() : j.trigger(this._element, ai) } : null }) } + _initializeFocusTrap() { return new Se({ trapElement: this._element }) } + _addEventListeners() { j.on(this._element, di, (t => { "Escape" === t.key && (this._config.keyboard ? this.hide() : j.trigger(this._element, ai)) })) } + static jQueryInterface(t) { return this.each((function() { const e = gi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); + e[t](this) } })) } } + j.on(document, hi, '[data-bs-toggle="offcanvas"]', (function(t) { const e = K.getElementFromSelector(this); if (["A", "AREA"].includes(this.tagName) && t.preventDefault(), d(this)) return; + j.one(e, li, (() => { h(this) && this.focus() })); const i = K.findOne(si); + i && i !== e && gi.getInstance(i).hide(), gi.getOrCreateInstance(e).toggle(this) })), j.on(window, Ze, (() => { for (const t of K.find(si)) gi.getOrCreateInstance(t).show() })), j.on(window, ci, (() => { for (const t of K.find("[aria-modal][class*=show][class*=offcanvas-]")) "fixed" !== getComputedStyle(t).position && gi.getOrCreateInstance(t).hide() })), V(gi), b(gi); const fi = { "*": ["class", "dir", "id", "lang", "role", /^aria-[\w-]*$/i], a: ["target", "href", "title", "rel"], area: [], b: [], br: [], col: [], code: [], dd: [], div: [], dl: [], dt: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ["src", "srcset", "alt", "title", "width", "height"], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] }, + mi = new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]), + pi = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i, + bi = (t, e) => { const i = t.nodeName.toLowerCase(); return e.includes(i) ? !mi.has(i) || Boolean(pi.test(t.nodeValue)) : e.filter((t => t instanceof RegExp)).some((t => t.test(i))) }, + vi = { allowList: fi, content: {}, extraClass: "", html: !1, sanitize: !0, sanitizeFn: null, template: "
" }, + yi = { allowList: "object", content: "object", extraClass: "(string|function)", html: "boolean", sanitize: "boolean", sanitizeFn: "(null|function)", template: "string" }, + wi = { entry: "(string|element|function|null)", selector: "(string|element)" }; + class Ai extends q { constructor(t) { super(), this._config = this._getConfig(t) } + static get Default() { return vi } + static get DefaultType() { return yi } + static get NAME() { return "TemplateFactory" } + getContent() { return Object.values(this._config.content).map((t => this._resolvePossibleFunction(t))).filter(Boolean) } + hasContent() { return this.getContent().length > 0 } + changeContent(t) { return this._checkContent(t), this._config.content = {...this._config.content, ...t }, this } + toHtml() { const t = document.createElement("div"); + t.innerHTML = this._maybeSanitize(this._config.template); for (const [e, i] of Object.entries(this._config.content)) this._setContent(t, i, e); const e = t.children[0], + i = this._resolvePossibleFunction(this._config.extraClass); return i && e.classList.add(...i.split(" ")), e } + _typeCheckConfig(t) { super._typeCheckConfig(t), this._checkContent(t.content) } + _checkContent(t) { for (const [e, i] of Object.entries(t)) super._typeCheckConfig({ selector: e, entry: i }, wi) } + _setContent(t, e, i) { const s = K.findOne(i, t); + s && ((e = this._resolvePossibleFunction(e)) ? l(e) ? this._putElementInTemplate(c(e), s) : this._config.html ? s.innerHTML = this._maybeSanitize(e) : s.textContent = e : s.remove()) } + _maybeSanitize(t) { return this._config.sanitize ? function(t, e, i) { if (!t.length) return t; if (i && "function" == typeof i) return i(t); const s = (new window.DOMParser).parseFromString(t, "text/html"), + n = [].concat(...s.body.querySelectorAll("*")); for (const t of n) { const i = t.nodeName.toLowerCase(); if (!Object.keys(e).includes(i)) { t.remove(); continue } const s = [].concat(...t.attributes), + n = [].concat(e["*"] || [], e[i] || []); for (const e of s) bi(e, n) || t.removeAttribute(e.nodeName) } return s.body.innerHTML }(t, this._config.allowList, this._config.sanitizeFn) : t } + _resolvePossibleFunction(t) { return v(t, [this]) } + _putElementInTemplate(t, e) { if (this._config.html) return e.innerHTML = "", void e.append(t); + e.textContent = t.textContent } } const Ei = new Set(["sanitize", "allowList", "sanitizeFn"]), + Ci = "fade", + Ti = "show", + ki = ".modal", + $i = "hide.bs.modal", + Si = "hover", + Li = "focus", + Oi = { AUTO: "auto", TOP: "top", RIGHT: p() ? "left" : "right", BOTTOM: "bottom", LEFT: p() ? "right" : "left" }, + Ii = { allowList: fi, animation: !0, boundary: "clippingParents", container: !1, customClass: "", delay: 0, fallbackPlacements: ["top", "right", "bottom", "left"], html: !1, offset: [0, 6], placement: "top", popperConfig: null, sanitize: !0, sanitizeFn: null, selector: !1, template: '', title: "", trigger: "hover focus" }, + Di = { allowList: "object", animation: "boolean", boundary: "(string|element)", container: "(string|element|boolean)", customClass: "(string|function)", delay: "(number|object)", fallbackPlacements: "array", html: "boolean", offset: "(array|string|function)", placement: "(string|function)", popperConfig: "(null|object|function)", sanitize: "boolean", sanitizeFn: "(null|function)", selector: "(string|boolean)", template: "string", title: "(string|element|function)", trigger: "string" }; + class Ni extends W { constructor(t, e) { if (void 0 === i) throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)"); + super(t, e), this._isEnabled = !0, this._timeout = 0, this._isHovered = null, this._activeTrigger = {}, this._popper = null, this._templateFactory = null, this._newContent = null, this.tip = null, this._setListeners(), this._config.selector || this._fixTitle() } + static get Default() { return Ii } + static get DefaultType() { return Di } + static get NAME() { return "tooltip" } + enable() { this._isEnabled = !0 } + disable() { this._isEnabled = !1 } + toggleEnabled() { this._isEnabled = !this._isEnabled } + toggle() { this._isEnabled && (this._activeTrigger.click = !this._activeTrigger.click, this._isShown() ? this._leave() : this._enter()) } + dispose() { clearTimeout(this._timeout), j.off(this._element.closest(ki), $i, this._hideModalHandler), this._element.getAttribute("data-bs-original-title") && this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title")), this._disposePopper(), super.dispose() } + show() { if ("none" === this._element.style.display) throw new Error("Please use show on visible elements"); if (!this._isWithContent() || !this._isEnabled) return; const t = j.trigger(this._element, this.constructor.eventName("show")), + e = (u(this._element) || this._element.ownerDocument.documentElement).contains(this._element); if (t.defaultPrevented || !e) return; + this._disposePopper(); const i = this._getTipElement(); + this._element.setAttribute("aria-describedby", i.getAttribute("id")); const { container: s } = this._config; if (this._element.ownerDocument.documentElement.contains(this.tip) || (s.append(i), j.trigger(this._element, this.constructor.eventName("inserted"))), this._popper = this._createPopper(i), i.classList.add(Ti), "ontouchstart" in document.documentElement) + for (const t of[].concat(...document.body.children)) j.on(t, "mouseover", _); + this._queueCallback((() => { j.trigger(this._element, this.constructor.eventName("shown")), !1 === this._isHovered && this._leave(), this._isHovered = !1 }), this.tip, this._isAnimated()) } + hide() { if (this._isShown() && !j.trigger(this._element, this.constructor.eventName("hide")).defaultPrevented) { if (this._getTipElement().classList.remove(Ti), "ontouchstart" in document.documentElement) + for (const t of[].concat(...document.body.children)) j.off(t, "mouseover", _); + this._activeTrigger.click = !1, this._activeTrigger[Li] = !1, this._activeTrigger[Si] = !1, this._isHovered = null, this._queueCallback((() => { this._isWithActiveTrigger() || (this._isHovered || this._disposePopper(), this._element.removeAttribute("aria-describedby"), j.trigger(this._element, this.constructor.eventName("hidden"))) }), this.tip, this._isAnimated()) } } + update() { this._popper && this._popper.update() } + _isWithContent() { return Boolean(this._getTitle()) } + _getTipElement() { return this.tip || (this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())), this.tip } + _createTipElement(t) { const e = this._getTemplateFactory(t).toHtml(); if (!e) return null; + e.classList.remove(Ci, Ti), e.classList.add(`bs-${this.constructor.NAME}-auto`); const i = (t => { do { t += Math.floor(1e6 * Math.random()) } while (document.getElementById(t)); return t })(this.constructor.NAME).toString(); return e.setAttribute("id", i), this._isAnimated() && e.classList.add(Ci), e } + setContent(t) { this._newContent = t, this._isShown() && (this._disposePopper(), this.show()) } + _getTemplateFactory(t) { return this._templateFactory ? this._templateFactory.changeContent(t) : this._templateFactory = new Ai({...this._config, content: t, extraClass: this._resolvePossibleFunction(this._config.customClass) }), this._templateFactory } + _getContentForTemplate() { return { ".tooltip-inner": this._getTitle() } } + _getTitle() { return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title") } + _initializeOnDelegatedTarget(t) { return this.constructor.getOrCreateInstance(t.delegateTarget, this._getDelegateConfig()) } + _isAnimated() { return this._config.animation || this.tip && this.tip.classList.contains(Ci) } + _isShown() { return this.tip && this.tip.classList.contains(Ti) } + _createPopper(t) { const e = v(this._config.placement, [this, t, this._element]), + s = Oi[e.toUpperCase()]; return i.createPopper(this._element, t, this._getPopperConfig(s)) } + _getOffset() { const { offset: t } = this._config; return "string" == typeof t ? t.split(",").map((t => Number.parseInt(t, 10))) : "function" == typeof t ? e => t(e, this._element) : t } + _resolvePossibleFunction(t) { return v(t, [this._element]) } + _getPopperConfig(t) { const e = { placement: t, modifiers: [{ name: "flip", options: { fallbackPlacements: this._config.fallbackPlacements } }, { name: "offset", options: { offset: this._getOffset() } }, { name: "preventOverflow", options: { boundary: this._config.boundary } }, { name: "arrow", options: { element: `.${this.constructor.NAME}-arrow` } }, { name: "preSetPlacement", enabled: !0, phase: "beforeMain", fn: t => { this._getTipElement().setAttribute("data-popper-placement", t.state.placement) } }] }; return {...e, ...v(this._config.popperConfig, [e]) } } + _setListeners() { const t = this._config.trigger.split(" "); for (const e of t) + if ("click" === e) j.on(this._element, this.constructor.eventName("click"), this._config.selector, (t => { this._initializeOnDelegatedTarget(t).toggle() })); + else if ("manual" !== e) { const t = e === Si ? this.constructor.eventName("mouseenter") : this.constructor.eventName("focusin"), + i = e === Si ? this.constructor.eventName("mouseleave") : this.constructor.eventName("focusout"); + j.on(this._element, t, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); + e._activeTrigger["focusin" === t.type ? Li : Si] = !0, e._enter() })), j.on(this._element, i, this._config.selector, (t => { const e = this._initializeOnDelegatedTarget(t); + e._activeTrigger["focusout" === t.type ? Li : Si] = e._element.contains(t.relatedTarget), e._leave() })) } + this._hideModalHandler = () => { this._element && this.hide() }, j.on(this._element.closest(ki), $i, this._hideModalHandler) } + _fixTitle() { const t = this._element.getAttribute("title"); + t && (this._element.getAttribute("aria-label") || this._element.textContent.trim() || this._element.setAttribute("aria-label", t), this._element.setAttribute("data-bs-original-title", t), this._element.removeAttribute("title")) } + _enter() { this._isShown() || this._isHovered ? this._isHovered = !0 : (this._isHovered = !0, this._setTimeout((() => { this._isHovered && this.show() }), this._config.delay.show)) } + _leave() { this._isWithActiveTrigger() || (this._isHovered = !1, this._setTimeout((() => { this._isHovered || this.hide() }), this._config.delay.hide)) } + _setTimeout(t, e) { clearTimeout(this._timeout), this._timeout = setTimeout(t, e) } + _isWithActiveTrigger() { return Object.values(this._activeTrigger).includes(!0) } + _getConfig(t) { const e = B.getDataAttributes(this._element); for (const t of Object.keys(e)) Ei.has(t) && delete e[t]; return t = {...e, ... "object" == typeof t && t ? t : {} }, t = this._mergeConfigObj(t), t = this._configAfterMerge(t), this._typeCheckConfig(t), t } + _configAfterMerge(t) { return t.container = !1 === t.container ? document.body : c(t.container), "number" == typeof t.delay && (t.delay = { show: t.delay, hide: t.delay }), "number" == typeof t.title && (t.title = t.title.toString()), "number" == typeof t.content && (t.content = t.content.toString()), t } + _getDelegateConfig() { const t = {}; for (const [e, i] of Object.entries(this._config)) this.constructor.Default[e] !== i && (t[e] = i); return t.selector = !1, t.trigger = "manual", t } + _disposePopper() { this._popper && (this._popper.destroy(), this._popper = null), this.tip && (this.tip.remove(), this.tip = null) } + static jQueryInterface(t) { return this.each((function() { const e = Ni.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t]() } })) } } + b(Ni); const Pi = {...Ni.Default, content: "", offset: [0, 8], placement: "right", template: '', trigger: "click" }, + xi = {...Ni.DefaultType, content: "(null|string|element|function)" }; + class Mi extends Ni { static get Default() { return Pi } + static get DefaultType() { return xi } + static get NAME() { return "popover" } + _isWithContent() { return this._getTitle() || this._getContent() } + _getContentForTemplate() { return { ".popover-header": this._getTitle(), ".popover-body": this._getContent() } } + _getContent() { return this._resolvePossibleFunction(this._config.content) } + static jQueryInterface(t) { return this.each((function() { const e = Mi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t]() } })) } } + b(Mi); const ji = ".bs.scrollspy", + Fi = `activate${ji}`, + zi = `click${ji}`, + Hi = `load${ji}.data-api`, + Bi = "active", + qi = "[href]", + Wi = ".nav-link", + Ri = `${Wi}, .nav-item > ${Wi}, .list-group-item`, + Ki = { offset: null, rootMargin: "0px 0px -25%", smoothScroll: !1, target: null, threshold: [.1, .5, 1] }, + Vi = { offset: "(number|null)", rootMargin: "string", smoothScroll: "boolean", target: "element", threshold: "array" }; + class Qi extends W { constructor(t, e) { super(t, e), this._targetLinks = new Map, this._observableSections = new Map, this._rootElement = "visible" === getComputedStyle(this._element).overflowY ? null : this._element, this._activeTarget = null, this._observer = null, this._previousScrollData = { visibleEntryTop: 0, parentScrollTop: 0 }, this.refresh() } + static get Default() { return Ki } + static get DefaultType() { return Vi } + static get NAME() { return "scrollspy" } + refresh() { this._initializeTargetsAndObservables(), this._maybeEnableSmoothScroll(), this._observer ? this._observer.disconnect() : this._observer = this._getNewObserver(); for (const t of this._observableSections.values()) this._observer.observe(t) } + dispose() { this._observer.disconnect(), super.dispose() } + _configAfterMerge(t) { return t.target = c(t.target) || document.body, t.rootMargin = t.offset ? `${t.offset}px 0px -30%` : t.rootMargin, "string" == typeof t.threshold && (t.threshold = t.threshold.split(",").map((t => Number.parseFloat(t)))), t } + _maybeEnableSmoothScroll() { this._config.smoothScroll && (j.off(this._config.target, zi), j.on(this._config.target, zi, qi, (t => { const e = this._observableSections.get(t.target.hash); if (e) { t.preventDefault(); const i = this._rootElement || window, + s = e.offsetTop - this._element.offsetTop; if (i.scrollTo) return void i.scrollTo({ top: s, behavior: "smooth" }); + i.scrollTop = s } }))) } + _getNewObserver() { const t = { root: this._rootElement, threshold: this._config.threshold, rootMargin: this._config.rootMargin }; return new IntersectionObserver((t => this._observerCallback(t)), t) } + _observerCallback(t) { const e = t => this._targetLinks.get(`#${t.target.id}`), + i = t => { this._previousScrollData.visibleEntryTop = t.target.offsetTop, this._process(e(t)) }, + s = (this._rootElement || document.documentElement).scrollTop, + n = s >= this._previousScrollData.parentScrollTop; + this._previousScrollData.parentScrollTop = s; for (const o of t) { if (!o.isIntersecting) { this._activeTarget = null, this._clearActiveClass(e(o)); continue } const t = o.target.offsetTop >= this._previousScrollData.visibleEntryTop; if (n && t) { if (i(o), !s) return } else n || t || i(o) } } + _initializeTargetsAndObservables() { this._targetLinks = new Map, this._observableSections = new Map; const t = K.find(qi, this._config.target); for (const e of t) { if (!e.hash || d(e)) continue; const t = K.findOne(decodeURI(e.hash), this._element); + h(t) && (this._targetLinks.set(decodeURI(e.hash), e), this._observableSections.set(e.hash, t)) } } + _process(t) { this._activeTarget !== t && (this._clearActiveClass(this._config.target), this._activeTarget = t, t.classList.add(Bi), this._activateParents(t), j.trigger(this._element, Fi, { relatedTarget: t })) } + _activateParents(t) { if (t.classList.contains("dropdown-item")) K.findOne(".dropdown-toggle", t.closest(".dropdown")).classList.add(Bi); + else + for (const e of K.parents(t, ".nav, .list-group")) + for (const t of K.prev(e, Ri)) t.classList.add(Bi) } + _clearActiveClass(t) { t.classList.remove(Bi); const e = K.find(`${qi}.${Bi}`, t); for (const t of e) t.classList.remove(Bi) } + static jQueryInterface(t) { return this.each((function() { const e = Qi.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); + e[t]() } })) } } + j.on(window, Hi, (() => { for (const t of K.find('[data-bs-spy="scroll"]')) Qi.getOrCreateInstance(t) })), b(Qi); const Xi = ".bs.tab", + Yi = `hide${Xi}`, + Ui = `hidden${Xi}`, + Gi = `show${Xi}`, + Ji = `shown${Xi}`, + Zi = `click${Xi}`, + ts = `keydown${Xi}`, + es = `load${Xi}`, + is = "ArrowLeft", + ss = "ArrowRight", + ns = "ArrowUp", + os = "ArrowDown", + rs = "Home", + as = "End", + ls = "active", + cs = "fade", + hs = "show", + ds = ".dropdown-toggle", + us = `:not(${ds})`, + _s = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]', + gs = `.nav-link${us}, .list-group-item${us}, [role="tab"]${us}, ${_s}`, + fs = `.${ls}[data-bs-toggle="tab"], .${ls}[data-bs-toggle="pill"], .${ls}[data-bs-toggle="list"]`; + class ms extends W { constructor(t) { super(t), this._parent = this._element.closest('.list-group, .nav, [role="tablist"]'), this._parent && (this._setInitialAttributes(this._parent, this._getChildren()), j.on(this._element, ts, (t => this._keydown(t)))) } + static get NAME() { return "tab" } + show() { const t = this._element; if (this._elemIsActive(t)) return; const e = this._getActiveElem(), + i = e ? j.trigger(e, Yi, { relatedTarget: t }) : null; + j.trigger(t, Gi, { relatedTarget: e }).defaultPrevented || i && i.defaultPrevented || (this._deactivate(e, t), this._activate(t, e)) } + _activate(t, e) { t && (t.classList.add(ls), this._activate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.removeAttribute("tabindex"), t.setAttribute("aria-selected", !0), this._toggleDropDown(t, !0), j.trigger(t, Ji, { relatedTarget: e })) : t.classList.add(hs) }), t, t.classList.contains(cs))) } + _deactivate(t, e) { t && (t.classList.remove(ls), t.blur(), this._deactivate(K.getElementFromSelector(t)), this._queueCallback((() => { "tab" === t.getAttribute("role") ? (t.setAttribute("aria-selected", !1), t.setAttribute("tabindex", "-1"), this._toggleDropDown(t, !1), j.trigger(t, Ui, { relatedTarget: e })) : t.classList.remove(hs) }), t, t.classList.contains(cs))) } + _keydown(t) { if (![is, ss, ns, os, rs, as].includes(t.key)) return; + t.stopPropagation(), t.preventDefault(); const e = this._getChildren().filter((t => !d(t))); let i; if ([rs, as].includes(t.key)) i = e[t.key === rs ? 0 : e.length - 1]; + else { const s = [ss, os].includes(t.key); + i = w(e, t.target, s, !0) } + i && (i.focus({ preventScroll: !0 }), ms.getOrCreateInstance(i).show()) } + _getChildren() { return K.find(gs, this._parent) } + _getActiveElem() { return this._getChildren().find((t => this._elemIsActive(t))) || null } + _setInitialAttributes(t, e) { this._setAttributeIfNotExists(t, "role", "tablist"); for (const t of e) this._setInitialAttributesOnChild(t) } + _setInitialAttributesOnChild(t) { t = this._getInnerElement(t); const e = this._elemIsActive(t), + i = this._getOuterElement(t); + t.setAttribute("aria-selected", e), i !== t && this._setAttributeIfNotExists(i, "role", "presentation"), e || t.setAttribute("tabindex", "-1"), this._setAttributeIfNotExists(t, "role", "tab"), this._setInitialAttributesOnTargetPanel(t) } + _setInitialAttributesOnTargetPanel(t) { const e = K.getElementFromSelector(t); + e && (this._setAttributeIfNotExists(e, "role", "tabpanel"), t.id && this._setAttributeIfNotExists(e, "aria-labelledby", `${t.id}`)) } + _toggleDropDown(t, e) { const i = this._getOuterElement(t); if (!i.classList.contains("dropdown")) return; const s = (t, s) => { const n = K.findOne(t, i); + n && n.classList.toggle(s, e) }; + s(ds, ls), s(".dropdown-menu", hs), i.setAttribute("aria-expanded", e) } + _setAttributeIfNotExists(t, e, i) { t.hasAttribute(e) || t.setAttribute(e, i) } + _elemIsActive(t) { return t.classList.contains(ls) } + _getInnerElement(t) { return t.matches(gs) ? t : K.findOne(gs, t) } + _getOuterElement(t) { return t.closest(".nav-item, .list-group-item") || t } + static jQueryInterface(t) { return this.each((function() { const e = ms.getOrCreateInstance(this); if ("string" == typeof t) { if (void 0 === e[t] || t.startsWith("_") || "constructor" === t) throw new TypeError(`No method named "${t}"`); + e[t]() } })) } } + j.on(document, Zi, _s, (function(t) { + ["A", "AREA"].includes(this.tagName) && t.preventDefault(), d(this) || ms.getOrCreateInstance(this).show() })), j.on(window, es, (() => { for (const t of K.find(fs)) ms.getOrCreateInstance(t) })), b(ms); const ps = ".bs.toast", + bs = `mouseover${ps}`, + vs = `mouseout${ps}`, + ys = `focusin${ps}`, + ws = `focusout${ps}`, + As = `hide${ps}`, + Es = `hidden${ps}`, + Cs = `show${ps}`, + Ts = `shown${ps}`, + ks = "hide", + $s = "show", + Ss = "showing", + Ls = { animation: "boolean", autohide: "boolean", delay: "number" }, + Os = { animation: !0, autohide: !0, delay: 5e3 }; + class Is extends W { constructor(t, e) { super(t, e), this._timeout = null, this._hasMouseInteraction = !1, this._hasKeyboardInteraction = !1, this._setListeners() } + static get Default() { return Os } + static get DefaultType() { return Ls } + static get NAME() { return "toast" } + show() { j.trigger(this._element, Cs).defaultPrevented || (this._clearTimeout(), this._config.animation && this._element.classList.add("fade"), this._element.classList.remove(ks), g(this._element), this._element.classList.add($s, Ss), this._queueCallback((() => { this._element.classList.remove(Ss), j.trigger(this._element, Ts), this._maybeScheduleHide() }), this._element, this._config.animation)) } + hide() { this.isShown() && (j.trigger(this._element, As).defaultPrevented || (this._element.classList.add(Ss), this._queueCallback((() => { this._element.classList.add(ks), this._element.classList.remove(Ss, $s), j.trigger(this._element, Es) }), this._element, this._config.animation))) } + dispose() { this._clearTimeout(), this.isShown() && this._element.classList.remove($s), super.dispose() } + isShown() { return this._element.classList.contains($s) } + _maybeScheduleHide() { this._config.autohide && (this._hasMouseInteraction || this._hasKeyboardInteraction || (this._timeout = setTimeout((() => { this.hide() }), this._config.delay))) } + _onInteraction(t, e) { switch (t.type) { + case "mouseover": + case "mouseout": + this._hasMouseInteraction = e; break; + case "focusin": + case "focusout": + this._hasKeyboardInteraction = e } if (e) return void this._clearTimeout(); const i = t.relatedTarget; + this._element === i || this._element.contains(i) || this._maybeScheduleHide() } + _setListeners() { j.on(this._element, bs, (t => this._onInteraction(t, !0))), j.on(this._element, vs, (t => this._onInteraction(t, !1))), j.on(this._element, ys, (t => this._onInteraction(t, !0))), j.on(this._element, ws, (t => this._onInteraction(t, !1))) } + _clearTimeout() { clearTimeout(this._timeout), this._timeout = null } + static jQueryInterface(t) { return this.each((function() { const e = Is.getOrCreateInstance(this, t); if ("string" == typeof t) { if (void 0 === e[t]) throw new TypeError(`No method named "${t}"`); + e[t](this) } })) } } return V(Is), b(Is), { Alert: U, Button: J, Carousel: Ot, Collapse: Rt, Dropdown: fe, Modal: Ue, Offcanvas: gi, Popover: Mi, ScrollSpy: Qi, Tab: ms, Toast: Is, Tooltip: Ni } })); //# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/js/content.js b/js/content.js index aa1571b..f65758d 100644 --- a/js/content.js +++ b/js/content.js @@ -1,71 +1,71 @@ -(async function() { - const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version))); - - document.getElementById("version").innerText = `(version v${$version})`; - - await chrome.storage.local.get().then(items => { - document.getElementById("activate").checked = items["__ap"]; - document.getElementById("autobook").checked = items["__ab"]; - document.getElementById("credits").innerText = items["__cr"] || "--"; - document.getElementById("frequency").value = items["__fq"] || 1; - document.getElementById("checkfrequency").innerText = items["__fq"] || 1; - document.getElementById("gap").value = items["__gp"] || 3; - document.getElementById("daygap").innerText = items["__gp"] || 3; - }) - - chrome.storage.onChanged.addListener((changes, area) => { - if (changes.__cr) - document.getElementById("credits").innerText = changes.__cr.newValue; - - if (changes.__fq) - document.getElementById("checkfrequency").innerText = changes.__fq.newValue; - - if (changes.__gp) - document.getElementById("daygap").innerText = changes.__gp.newValue; - }); - - document.getElementById("activate").addEventListener("change", async function() { - chrome.storage.local.set({ __ap: this.checked }); - let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); - chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked }); - }); - - document.getElementById("autobook").addEventListener("change", async function() { - chrome.storage.local.set({ __ab: this.checked }); - }); - - document.getElementById("frequency").addEventListener("change", function() { - chrome.storage.local.set({ __fq: this.value }); - }); - - document.getElementById("gap").addEventListener("change", function() { - chrome.storage.local.set({ __gp: this.value }); - }); - - document.getElementById("read_faqs").addEventListener("click", function() { - chrome.tabs.create({ - url: chrome.runtime.getURL("pages/faqs.html") - }); - }); - - document.getElementById("ais_visa_info").addEventListener("submit", async function(e) { - e.preventDefault(); - let button = document.getElementById("reset_info"); - button.setAttribute("disabled", "disabled"); - - await new Promise(r => setTimeout(r, 500)); - - await chrome.storage.local.clear(); - await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 }); - - let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); - await chrome.tabs.sendMessage(tab.id, { action: "logout" }); - - button.classList.toggle("btn-success"); - button.innerText = "Success"; - await new Promise(r => setTimeout(r, 1000)); - button.classList.toggle("btn-success"); - button.removeAttribute("disabled"); - button.innerText = "Configure / Reset"; - }); +(async function() { + const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version))); + + document.getElementById("version").innerText = `(version v${$version})`; + + await chrome.storage.local.get().then(items => { + document.getElementById("activate").checked = items["__ap"]; + document.getElementById("autobook").checked = items["__ab"]; + document.getElementById("credits").innerText = items["__cr"] || "--"; + document.getElementById("frequency").value = items["__fq"] || 1; + document.getElementById("checkfrequency").innerText = items["__fq"] || 1; + document.getElementById("gap").value = items["__gp"] || 3; + document.getElementById("daygap").innerText = items["__gp"] || 3; + }) + + chrome.storage.onChanged.addListener((changes, area) => { + if (changes.__cr) + document.getElementById("credits").innerText = changes.__cr.newValue; + + if (changes.__fq) + document.getElementById("checkfrequency").innerText = changes.__fq.newValue; + + if (changes.__gp) + document.getElementById("daygap").innerText = changes.__gp.newValue; + }); + + document.getElementById("activate").addEventListener("change", async function() { + chrome.storage.local.set({ __ap: this.checked }); + let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); + chrome.tabs.sendMessage(tab.id, { action: "activate", status: this.checked }); + }); + + document.getElementById("autobook").addEventListener("change", async function() { + chrome.storage.local.set({ __ab: this.checked }); + }); + + document.getElementById("frequency").addEventListener("change", function() { + chrome.storage.local.set({ __fq: this.value }); + }); + + document.getElementById("gap").addEventListener("change", function() { + chrome.storage.local.set({ __gp: this.value }); + }); + + document.getElementById("read_faqs").addEventListener("click", function() { + chrome.tabs.create({ + url: chrome.runtime.getURL("pages/faqs.html") + }); + }); + + document.getElementById("ais_visa_info").addEventListener("submit", async function(e) { + e.preventDefault(); + let button = document.getElementById("reset_info"); + button.setAttribute("disabled", "disabled"); + + await new Promise(r => setTimeout(r, 500)); + + await chrome.storage.local.clear(); + await chrome.storage.local.set({ __ab: false, __ap: true, __cr: 0, __fq: 1, __gp: 7 }); + + let [tab] = await chrome.tabs.query({ active: true, lastFocusedWindow: true }); + await chrome.tabs.sendMessage(tab.id, { action: "logout" }); + + button.classList.toggle("btn-success"); + button.innerText = "Success"; + await new Promise(r => setTimeout(r, 1000)); + button.classList.toggle("btn-success"); + button.removeAttribute("disabled"); + button.innerText = "Configure / Reset"; + }); })(); \ No newline at end of file diff --git a/js/rescheduler.js b/js/rescheduler.js index f74a528..3c9b697 100644 --- a/js/rescheduler.js +++ b/js/rescheduler.js @@ -1,572 +1,572 @@ -(async function(page) { - document.head.insertAdjacentHTML("beforeend", ""); - - const nav = navigator ? navigator.language : "xx-xx", - dateValidityCheck = (g, c, l, start) => { - let [cy, cm, cd] = c.split("-"), [ly, lm, ld] = l.split("-"); - - start.setDate(start.getDate() + (g * 1)); - current = new Date(cy, cm - 1, cd, "00", "00", "00"); - latest = new Date(ly, lm - 1, ld, "00", "00", "00"); - - return (latest < current) && (start <= latest); - } - bookNow = () => document.querySelector(".reveal-overlay:last-child [data-reveal] .button.alert").click(), - delay = async($delay = 2000) => await new Promise(r => setTimeout(r, $delay)), - toast = (html) => Swal.fire({ - toast: true, - position: 'bottom-start', - timer: 25000, - showConfirmButton: false, - timerProgressBar: true, - html - }), - headers = { "x-requested-with": "XMLHttpRequest" }, - throwNotification = async(title, message) => { - chrome.runtime.sendMessage({ - type: "notification", - options: { - type: "basic", - iconUrl: "../icon128.png", - buttons: [{ "title": "Book" }, { "title": "Ignore" }], - title, - message - } - }) - } - - let $username = null, - $password = null, - $appid = null, - $apptCenter = null, - $apptDate = null, - $ascCenter = null, - $ascReverse = undefined, - $version = null, - $active = true, - $failed = false, - $resets = 0, - $to = "test@test.com", - $timer = 0, - $sync = 5, - $host = "https://ais-visa-auto-scheduler.onrender.com"; - - async function getDate(_date, $delay, $center, $ascCenter) { - $timer = $delay; - if (!$active) return; - if (!_date || _date == null || _date == "" || !_date.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) - _date = await Swal.fire({ - title: "Attention please.", - html: "Your earlier appointment date is not detected. Please enter the date in YYYY-MM-DD format to proceed.", - input: "text", - inputPlaceholder: "YYYY-MM-DD", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Confirm", - inputValidator: (result) => { - if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) { - return "Enter date in YYYY-MM-DD format please." - } - } - }).then(async d => { - await chrome.storage.local.set({ "__ad": d.value }); - return d.value; - }); - - await delay($delay); - let now = new Date(), - nowInLocale = now.toLocaleString(), - center = $center || document.getElementById("appointments_consulate_appointment_facility_id").value, - ascCenter = $ascCenter ? $ascCenter : (document.getElementById("appointments_asc_appointment_facility_id") ? document.getElementById("appointments_asc_appointment_facility_id").value : null), - [$dates, $credits, $frequency, $gap, $autobook] = await Promise.all([ - fetch(`${page}/days/${center}.json?appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null), - chrome.storage.local.get("__cr").then(cr => cr.__cr), - chrome.storage.local.get("__fq").then(fq => fq.__fq), - chrome.storage.local.get("__gp").then(gp => gp.__gp), - chrome.storage.local.get("__ab").then(ab => ab.__ab) - ]); - - if (!$dates || $dates.error) { - if ($failed) - location = page.replace(/\/schedule.*/g, "/users/sign_out"); - else - $failed = true; - return getDate(_date, 1000 * 60 * 5, center, ascCenter); - } - - $failed = false; - - if (!$credits || $credits <= 0) { - chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) }).then(d => sync(true)); - - return Swal.fire({ - title: "Attention please.", - html: "You're out of credits. Please " + ($resets == 0 ? "contact the developer to recharge. Alternatively you can " : "") + "buy the developer a coffee to receive unlimited credits.", - icon: "warning", - showDenyButton: $resets == 0, - confirmButtonText: $resets == 0 ? "Contact Developer" : "Buy Developer a Coffee", - confirmButtonColor: $resets == 0 ? "#3F458E" : "#357856", - denyButtonText: "Buy Developer a Coffee", - denyButtonColor: "#357856", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - }).then(async action => { - return window.open((action.isDenied || $resets != 0) ? `https://www.buymeacoffee.com/hymnz` : `mailto:${$to}`); - }); - } - - if ($dates.length == 0) { - toast(`No dates found. You are in a soft ban. To prevent a hard ban/IP ban, next check will happen after 30 minutes.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`) - return getDate(_date, 1000 * 60 * 31, center, ascCenter); - } - - chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) }); - - let latestDate = $dates.map(d => d.date).sort((a, b) => new Date(a) - new Date(b)).find(d => dateValidityCheck($gap, _date, d, now)); - - /* try { - if (!nav.includes("en-") && nav != "en") { - var citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"), - city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText; - - fetch(`${$host}/log-date?data=` + btoa(nav + "^" + _date + "^" + latestDate + "^" + $gap + "^" + city + "^" + $version + "^" + $dates[0].date)); - } - } catch (e) { - console.log(null); - } */ - - if (!latestDate) { - toast(`Latest availability: ${$dates[0].date}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); - return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); - } - - toast(`Earlier date found: ${latestDate}.`) - document.getElementById("appointments_consulate_appointment_date").value = latestDate; - document.getElementById("appointments_consulate_appointment_time").innerHTML = "" - - let $latestTimes = await fetch(`${page}/times/${center}.json?date=${latestDate}&appointments[expedite]=false`, { headers }).then(d => d.json()); - - if ($latestTimes.available_times.length == 0) { - toast(`No time slots found on date ${latestDate}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); - return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); - } - - let $latestTime = $latestTimes.available_times[0]; - document.getElementById("appointments_consulate_appointment_time").innerHTML = ""; - document.getElementById("appointments_consulate_appointment_time").value = $latestTime; - - if (document.getElementById("asc-appointment-fields")) { - document.getElementById("appointments_asc_appointment_facility_id").removeAttribute("disabled"); - document.getElementById("appointments_asc_appointment_date").removeAttribute("disabled"); - document.getElementById("appointments_asc_appointment_time").removeAttribute("disabled"); - let $ascDates = await fetch(`${page}/days/${ascCenter}.json?consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null); - - if (!$ascDates || $ascDates.error) - return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); - - if ($ascReverse) - $ascDates = $ascDates.reverse(); - - let latestAscDate = $ascDates.sort((a, b) => (new Date(a.date) - new Date(b.date)) / 86000)[0].date; - document.getElementById("appointments_asc_appointment_date").value = latestAscDate; - document.getElementById("appointments_asc_appointment_time").innerHTML = "" - let $latestAscTimes = await fetch(`${page}/times/${ascCenter}.json?date=${latestAscDate}&consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json()); - - if ($latestAscTimes.available_times.length == 0) { - toast(`No time slots found on date ${latestAscDate}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); - return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); - } - - let $latestAscTime = $latestAscTimes.available_times[0]; - - document.getElementById("appointments_asc_appointment_time").innerHTML = ""; - document.getElementById("appointments_asc_appointment_time").value = $latestAscTime; - } - document.getElementById("appointments_submit").removeAttribute("disabled"); - document.getElementById("appointments_submit").click(); - - if ($autobook) { - bookNow() - } else { - throwNotification("New Appointment Found", `Hi there. The extension found a new appointment on ${latestDate}. Book now before it's gone!`) - } - } - - async function sync(force) { - let citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"), - city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText, - email = $username, - date = $apptDate, - appointment = $appid; - - await chrome.storage.local.get("__cr") - .then(cr => fetch($host + "/set-credits", { - method: "POST", - body: JSON.stringify({ email, city, appointment, version: $version, date, credits: cr.__cr }), - headers: { "Content-type": "application/json; charset=UTF-8" } - })) - .then(async res => { - if (!res.ok) throw await res.text(); - return res.json(); - }) - .then(data => { - chrome.storage.local.set({ __cr: data.__cr }); - $host = data.__host; - $to = data.__to; - $sync = data.__sync; - $resets = data.__resets; - }) - .catch(error => { - Swal.fire({ - title: "Attention please.", - html: error, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Ok" - }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out")) - }); - - if (!force) - delay(Math.max($timer, $sync * 60 * 1000)).then(d => sync()); - }; - - async function init() { - let isSignIn = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/users\/sign_in/), - isLoggedOut = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv$/), - isDashboard = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/groups\/\d{1,}/), - isAppointment = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment$/), - isConfirmation = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment\/instructions$/), - isNotEnglish = (isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !page.match(/^\/en-/), - usageConsent = await chrome.storage.local.get("__uc").then(({ __uc }) => __uc), - immigrationTypeSelected = await chrome.storage.local.get("__it").then(({ __it }) => __it); - - if ((isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !immigrationTypeSelected) - return Swal.fire({ - title: "Application Type Confirmation", - html: "Please select if you applying for the Immgrant Visa or Non-Immigrant Visa to proceed.", - icon: "warning", - showDenyButton: true, - confirmButtonText: "Non-Immigrant Visa", - confirmButtonColor: "#3F458E", - denyButtonText: "Immigrant Visa", - denyButtonColor: "#357856", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - }).then(async action => { - await chrome.storage.local.set({ "__it": true }); - return location.href = page.replace(/\/(n|)iv/, (action.isDenied ? "/iv" : "/niv")); - }); - - if (isNotEnglish) { - let languageConsent = await chrome.storage.local.get("__lc").then(({ __lc }) => __lc); - if (!languageConsent) - await Swal.fire({ - title: "Langauge Confirmation", - html: "

This extension is designed and optimized to work with the English version of the site. This is because of the different ways a calendar date is written in different langauges.

It is highly recommended to switch to the English version.

", - icon: "warning", - showDenyButton: true, - confirmButtonText: "Switch to English", - denyButtonText: "Don't switch", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - reverseButtons: true - }).then(async action => { - if (action.isDenied) - return chrome.storage.local.set({ "__lc": true }); - - return location.href = "/en" + page.substring(3); - }); - } - - if ((isSignIn || isDashboard || isAppointment) && !usageConsent) { - await Swal.fire({ - title: "Exttension Usage Guidelines", - html: "

This extension is designed to be used by individuals who already have appointment and are looking to move their appointment date ahead.

You can reschedule your appointment a maximum of 39 times for every application. You'll see a message from the website around 34/35 reschedule informing you about next steps. At that point you must stop using the extension. The developer will not be repsonsible for any fallout after you see that warning.

", - icon: "warning", - confirmButtonText: "I consent to use this extension within it's limits", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - }).then(() => { - return chrome.storage.local.set({ "__uc": true }); - }); - } - - await delay(); - - if (isLoggedOut) return document.querySelector(".homeSelectionsContainer a[href*='/sign_in']").click(); - - if (!isSignIn && (!$username || !$password)) return; - - if (isSignIn) { - if (!$username) - $username = await Swal.fire({ - title: "Attention please.", - html: "Please provide the email to login", - input: "email", - inputLabel: "Your email address", - inputPlaceholder: "Enter your email address", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Next" - }).then(e => { - chrome.storage.local.set({ "__un": e.value }); - return e.value; - }); - - if (!$password) - $password = await Swal.fire({ - title: "Attention please.", - html: "Please provide the password to login", - input: "password", - inputLabel: "Your password", - inputPlaceholder: "Enter your password", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Submit" - }).then(p => { - chrome.storage.local.set({ "__pw": p.value }); - return p.value; - }); - - document.getElementById("user_email").value = $username; - document.getElementById("user_password").value = $password; - document.querySelector('[for="policy_confirmed"]').click(); - document.querySelector("#sign_in_form input[type=submit]").click(); - } else if (isDashboard) { - if (document.querySelectorAll("p.consular-appt [href]").length > 1 && !$appid) { - let html = `There are multiple appointments in your account. Please select the appointment you wish to run the script for.
`, - inputOptions = new Object(); - - document.querySelectorAll("p.consular-appt [href]").forEach(a => { - if (a.href) { - inputOptions[a.href.replace(/\D/g, "")] = a.parentElement.parentElement.parentElement.querySelector("td").innerText - } - }); - $appid = await Swal.fire({ - title: "Attention please.", - html, - input: "select", - inputOptions, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - inputValue: document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""), - icon: "warning", - confirmButtonText: "Confirm" - }).then(a => { - chrome.storage.local.set({ "__id": a.value }); - return a.value; - }); - } else if (!$appid) { - $appid = document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""); - chrome.storage.local.set({ "__id": $appid }); - } - let appt = document.querySelector("p.consular-appt [href*='" + $appid + "']").parentNode.parentNode.parentNode, - appt_date, appt_link, now = new Date(); - - if (!appt.querySelector("h4").innerText.match(/Attend Appointment/)) return; - - appt_date = new Date(appt.querySelector("p.consular-appt").innerText.match(/\d{1,2} \w{1,}, \d{4}/)[0]); - appt_link = appt.querySelector("p.consular-appt [href]").getAttribute("href").replace("/addresses/consulate", "/appointment"); - - await chrome.storage.local.set({ - __ad: (appt_date.getFullYear() + "") + "-" + (appt_date.getMonth() + 1 + "").padStart(2, 0) + "-" + (appt_date.getDate() + "").padStart(2, 0) - }).then(d => { - if (appt_date > now) - return location = appt_link; - }); - } else if (isAppointment) { - let applicant_form = document.querySelector('form[action*="' + page + '"]'); - if (applicant_form && applicant_form.method.toLowerCase() == "get") return applicant_form.submit(); - - if (!document.getElementById("consulate_date_time")) return; - - if (!$apptDate || $apptDate == null || $apptDate == "") - $apptDate = await Swal.fire({ - title: "Attention please.", - html: "Your appointment date is not detected. Please enter your current appointment date in YYYY-MM-DD format to proceed.", - input: "text", - inputPlaceholder: "YYYY-MM-DD", - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Confirm", - inputValidator: (result) => { - if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) { - return "Enter date in YYYY-MM-DD format please." - } - } - }).then(async d => { - await chrome.storage.local.set({ "__ad": d.value }); - return d.value; - }); - - if (!$apptCenter) { - var html = `Your current interview location is set to ${ document.querySelector("#appointments_consulate_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit.
`, - inputOptions = new Object(); - - document.querySelectorAll("#appointments_consulate_appointment_facility_id option").forEach(l => { - if (l.innerText) { - inputOptions[l.value] = l.innerText - } - }); - - $apptCenter = await Swal.fire({ - title: "Attention please.", - html, - input: "select", - inputOptions, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - inputValue: document.querySelector("#appointments_consulate_appointment_facility_id").value, - icon: "warning", - confirmButtonText: "Confirm" - }).then(l => { - chrome.storage.local.set({ "__il": l.value }); - return l.value; - }); - } - - if (!$ascCenter && document.getElementById("asc-appointment-fields")) { - var html = `Your current ASC location is set to ${ document.querySelector("#appointments_asc_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit.
`, - inputOptions = new Object(); - - document.querySelectorAll("#appointments_asc_appointment_facility_id option").forEach(l => { - if (l.innerText) { - inputOptions[l.value] = l.innerText - } - }); - - $ascCenter = await Swal.fire({ - title: "Attention please.", - html, - input: "select", - inputOptions, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - inputValue: document.querySelector("#appointments_asc_appointment_facility_id").value, - icon: "warning", - confirmButtonText: "Confirm" - }).then(l => { - chrome.storage.local.set({ "__al": l.value }); - return l.value; - }); - } - - if ($ascReverse === undefined && document.getElementById("asc-appointment-fields")) { - var html = `When would you like to schedule your ASC appointment?
`, - inputOptions = { - false: "First available date", - true: "Closest to VISA appointment", - }; - - $ascReverse = await Swal.fire({ - title: "Attention please.", - html, - input: "select", - inputOptions, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - inputValue: false, - icon: "warning", - confirmButtonText: "Confirm" - }).then(l => { - chrome.storage.local.set({ "__ar": l.value == "true" }); - return l.value == "true"; - }); - } - - (function(cDate) { - return Swal.fire({ - title: "Attention Please", - html: "

The extension found your current appointment on " + cDate + " and will use it to find earlier appointments.

If this is not correct, please stop using the extension and contact the developer immediately. This message will automatically close in 7.5 seconds.

", - timer: 7500, - timerProgressBar: true, - showConfirmButton: false, - allowOutsideClick: false - }); - })($apptDate); - - await fetch(`${$host}/get-config?email=${encodeURIComponent($username)}&version=${$version}`) - .then(async res => { - if (!res.ok) throw await res.text(); - return await res.json(); - }) - .then(data => { - chrome.storage.local.set({ __cr: data.__cr }); - $host = data.__host; - $to = data.__to; - $sync = data.__sync; - $resets = data.__resets; - }) - .catch(e => { - Swal.fire({ - title: "Attention please.", - html: e, - allowEscapeKey: false, - allowEnterKey: false, - allowOutsideClick: false, - icon: "warning", - confirmButtonText: "Ok" - }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out")) - }) - - sync(); - return getDate($apptDate, 0, $apptCenter, $ascCenter); - } else if (isConfirmation) { - await delay(10 * 1000); - location = page.replace(/schedule.*/g, ""); - } - } - - chrome.runtime.onMessage.addListener( - function(request, sender, sendResponse) { - if (request.ping) return sendResponse({ pong: true }) - if (request.bookNow) return bookNow(); - if (request.action == "logout") { - let pagePath = page.split("/"); - location = pagePath.length < 3 ? "/en-us/niv/users/sign_out" : `/${pagePath[1]}/${pagePath[2]}/users/sign_out`; - } - if (request.action == "activate") { - $active = request.status; - if ($active) init(); - } - sendResponse(true); - } - ); - - const port = chrome.runtime.connect({ name: "ais-us-visa" }); - port.onMessage.addListener(async function(response) { - if (response.action == "fetch_info") { - $username = response.data.$username; - $password = response.data.$password; - $appid = response.data.$appid; - $apptCenter = response.data.$apptCenter; - $apptDate = response.data.$apptDate; - $ascCenter = response.data.$ascCenter; - $ascReverse = response.data.$ascReverse; - $active = response.data.$active; - $version = response.data.$version; - - if ($active) init(); - } - }); - - port.postMessage({ action: "fetch_info" }); +(async function(page) { + document.head.insertAdjacentHTML("beforeend", ""); + + const nav = navigator ? navigator.language : "xx-xx", + dateValidityCheck = (g, c, l, start) => { + let [cy, cm, cd] = c.split("-"), [ly, lm, ld] = l.split("-"); + + start.setDate(start.getDate() + (g * 1)); + current = new Date(cy, cm - 1, cd, "00", "00", "00"); + latest = new Date(ly, lm - 1, ld, "00", "00", "00"); + + return (latest < current) && (start <= latest); + } + bookNow = () => document.querySelector(".reveal-overlay:last-child [data-reveal] .button.alert").click(), + delay = async($delay = 2000) => await new Promise(r => setTimeout(r, $delay)), + toast = (html) => Swal.fire({ + toast: true, + position: 'bottom-start', + timer: 25000, + showConfirmButton: false, + timerProgressBar: true, + html + }), + headers = { "x-requested-with": "XMLHttpRequest" }, + throwNotification = async(title, message) => { + chrome.runtime.sendMessage({ + type: "notification", + options: { + type: "basic", + iconUrl: "../icon128.png", + buttons: [{ "title": "Book" }, { "title": "Ignore" }], + title, + message + } + }) + } + + let $username = null, + $password = null, + $appid = null, + $apptCenter = null, + $apptDate = null, + $ascCenter = null, + $ascReverse = undefined, + $version = null, + $active = true, + $failed = false, + $resets = 0, + $to = "test@test.com", + $timer = 0, + $sync = 5, + $host = "https://ais-visa-auto-scheduler.onrender.com"; + + async function getDate(_date, $delay, $center, $ascCenter) { + $timer = $delay; + if (!$active) return; + if (!_date || _date == null || _date == "" || !_date.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) + _date = await Swal.fire({ + title: "Attention please.", + html: "Your earlier appointment date is not detected. Please enter the date in YYYY-MM-DD format to proceed.", + input: "text", + inputPlaceholder: "YYYY-MM-DD", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Confirm", + inputValidator: (result) => { + if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) { + return "Enter date in YYYY-MM-DD format please." + } + } + }).then(async d => { + await chrome.storage.local.set({ "__ad": d.value }); + return d.value; + }); + + await delay($delay); + let now = new Date(), + nowInLocale = now.toLocaleString(), + center = $center || document.getElementById("appointments_consulate_appointment_facility_id").value, + ascCenter = $ascCenter ? $ascCenter : (document.getElementById("appointments_asc_appointment_facility_id") ? document.getElementById("appointments_asc_appointment_facility_id").value : null), + [$dates, $credits, $frequency, $gap, $autobook] = await Promise.all([ + fetch(`${page}/days/${center}.json?appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null), + chrome.storage.local.get("__cr").then(cr => cr.__cr), + chrome.storage.local.get("__fq").then(fq => fq.__fq), + chrome.storage.local.get("__gp").then(gp => gp.__gp), + chrome.storage.local.get("__ab").then(ab => ab.__ab) + ]); + + if (!$dates || $dates.error) { + if ($failed) + location = page.replace(/\/schedule.*/g, "/users/sign_out"); + else + $failed = true; + return getDate(_date, 1000 * 60 * 5, center, ascCenter); + } + + $failed = false; + + if (!$credits || $credits <= 0) { + chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) }).then(d => sync(true)); + + return Swal.fire({ + title: "Attention please.", + html: "You're out of credits. Please " + ($resets == 0 ? "contact the developer to recharge. Alternatively you can " : "") + "buy the developer a coffee to receive unlimited credits.", + icon: "warning", + showDenyButton: $resets == 0, + confirmButtonText: $resets == 0 ? "Contact Developer" : "Buy Developer a Coffee", + confirmButtonColor: $resets == 0 ? "#3F458E" : "#357856", + denyButtonText: "Buy Developer a Coffee", + denyButtonColor: "#357856", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + }).then(async action => { + return window.open((action.isDenied || $resets != 0) ? `https://www.buymeacoffee.com/hymnz` : `mailto:${$to}`); + }); + } + + if ($dates.length == 0) { + toast(`No dates found. You are in a soft ban. To prevent a hard ban/IP ban, next check will happen after 30 minutes.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`) + return getDate(_date, 1000 * 60 * 31, center, ascCenter); + } + + chrome.storage.local.set({ "__cr": Math.max(--$credits, 0) }); + + let latestDate = $dates.map(d => d.date).sort((a, b) => new Date(a) - new Date(b)).find(d => dateValidityCheck($gap, _date, d, now)); + + /* try { + if (!nav.includes("en-") && nav != "en") { + var citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"), + city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText; + + fetch(`${$host}/log-date?data=` + btoa(nav + "^" + _date + "^" + latestDate + "^" + $gap + "^" + city + "^" + $version + "^" + $dates[0].date)); + } + } catch (e) { + console.log(null); + } */ + + if (!latestDate) { + toast(`Latest availability: ${$dates[0].date}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); + return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); + } + + toast(`Earlier date found: ${latestDate}.`) + document.getElementById("appointments_consulate_appointment_date").value = latestDate; + document.getElementById("appointments_consulate_appointment_time").innerHTML = "" + + let $latestTimes = await fetch(`${page}/times/${center}.json?date=${latestDate}&appointments[expedite]=false`, { headers }).then(d => d.json()); + + if ($latestTimes.available_times.length == 0) { + toast(`No time slots found on date ${latestDate}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); + return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); + } + + let $latestTime = $latestTimes.available_times[0]; + document.getElementById("appointments_consulate_appointment_time").innerHTML = ""; + document.getElementById("appointments_consulate_appointment_time").value = $latestTime; + + if (document.getElementById("asc-appointment-fields")) { + document.getElementById("appointments_asc_appointment_facility_id").removeAttribute("disabled"); + document.getElementById("appointments_asc_appointment_date").removeAttribute("disabled"); + document.getElementById("appointments_asc_appointment_time").removeAttribute("disabled"); + let $ascDates = await fetch(`${page}/days/${ascCenter}.json?consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json()).catch(e => null); + + if (!$ascDates || $ascDates.error) + return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); + + if ($ascReverse) + $ascDates = $ascDates.reverse(); + + let latestAscDate = $ascDates.sort((a, b) => (new Date(a.date) - new Date(b.date)) / 86000)[0].date; + document.getElementById("appointments_asc_appointment_date").value = latestAscDate; + document.getElementById("appointments_asc_appointment_time").innerHTML = "" + let $latestAscTimes = await fetch(`${page}/times/${ascCenter}.json?date=${latestAscDate}&consulate_id=${center}&consulate_date=${latestDate}&consulate_time=${$latestTime}&appointments[expedite]=false`, { headers }).then(d => d.json()); + + if ($latestAscTimes.available_times.length == 0) { + toast(`No time slots found on date ${latestAscDate}.
Checked @ ${nowInLocale}
Your current appointment is on ${_date}`); + return getDate(_date, 1000 * 60 * $frequency, center, ascCenter); + } + + let $latestAscTime = $latestAscTimes.available_times[0]; + + document.getElementById("appointments_asc_appointment_time").innerHTML = ""; + document.getElementById("appointments_asc_appointment_time").value = $latestAscTime; + } + document.getElementById("appointments_submit").removeAttribute("disabled"); + document.getElementById("appointments_submit").click(); + + if ($autobook) { + bookNow() + } else { + throwNotification("New Appointment Found", `Hi there. The extension found a new appointment on ${latestDate}. Book now before it's gone!`) + } + } + + async function sync(force) { + let citySelect = document.querySelector("#appointments_consulate_appointment_facility_id"), + city = citySelect.querySelectorAll("option")[citySelect.selectedIndex].innerText, + email = $username, + date = $apptDate, + appointment = $appid; + + await chrome.storage.local.get("__cr") + .then(cr => fetch($host + "/set-credits", { + method: "POST", + body: JSON.stringify({ email, city, appointment, version: $version, date, credits: cr.__cr }), + headers: { "Content-type": "application/json; charset=UTF-8" } + })) + .then(async res => { + if (!res.ok) throw await res.text(); + return res.json(); + }) + .then(data => { + chrome.storage.local.set({ __cr: data.__cr }); + $host = data.__host; + $to = data.__to; + $sync = data.__sync; + $resets = data.__resets; + }) + .catch(error => { + Swal.fire({ + title: "Attention please.", + html: error, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Ok" + }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out")) + }); + + if (!force) + delay(Math.max($timer, $sync * 60 * 1000)).then(d => sync()); + }; + + async function init() { + let isSignIn = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/users\/sign_in/), + isLoggedOut = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv$/), + isDashboard = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/groups\/\d{1,}/), + isAppointment = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment$/), + isConfirmation = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment\/instructions$/), + isNotEnglish = (isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !page.match(/^\/en-/), + usageConsent = await chrome.storage.local.get("__uc").then(({ __uc }) => __uc), + immigrationTypeSelected = await chrome.storage.local.get("__it").then(({ __it }) => __it); + + if ((isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !immigrationTypeSelected) + return Swal.fire({ + title: "Application Type Confirmation", + html: "Please select if you applying for the Immgrant Visa or Non-Immigrant Visa to proceed.", + icon: "warning", + showDenyButton: true, + confirmButtonText: "Non-Immigrant Visa", + confirmButtonColor: "#3F458E", + denyButtonText: "Immigrant Visa", + denyButtonColor: "#357856", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + }).then(async action => { + await chrome.storage.local.set({ "__it": true }); + return location.href = page.replace(/\/(n|)iv/, (action.isDenied ? "/iv" : "/niv")); + }); + + if (isNotEnglish) { + let languageConsent = await chrome.storage.local.get("__lc").then(({ __lc }) => __lc); + if (!languageConsent) + await Swal.fire({ + title: "Langauge Confirmation", + html: "

This extension is designed and optimized to work with the English version of the site. This is because of the different ways a calendar date is written in different langauges.

It is highly recommended to switch to the English version.

", + icon: "warning", + showDenyButton: true, + confirmButtonText: "Switch to English", + denyButtonText: "Don't switch", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + reverseButtons: true + }).then(async action => { + if (action.isDenied) + return chrome.storage.local.set({ "__lc": true }); + + return location.href = "/en" + page.substring(3); + }); + } + + if ((isSignIn || isDashboard || isAppointment) && !usageConsent) { + await Swal.fire({ + title: "Exttension Usage Guidelines", + html: "

This extension is designed to be used by individuals who already have appointment and are looking to move their appointment date ahead.

You can reschedule your appointment a maximum of 39 times for every application. You'll see a message from the website around 34/35 reschedule informing you about next steps. At that point you must stop using the extension. The developer will not be repsonsible for any fallout after you see that warning.

", + icon: "warning", + confirmButtonText: "I consent to use this extension within it's limits", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + }).then(() => { + return chrome.storage.local.set({ "__uc": true }); + }); + } + + await delay(); + + if (isLoggedOut) return document.querySelector(".homeSelectionsContainer a[href*='/sign_in']").click(); + + if (!isSignIn && (!$username || !$password)) return; + + if (isSignIn) { + if (!$username) + $username = await Swal.fire({ + title: "Attention please.", + html: "Please provide the email to login", + input: "email", + inputLabel: "Your email address", + inputPlaceholder: "Enter your email address", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Next" + }).then(e => { + chrome.storage.local.set({ "__un": e.value }); + return e.value; + }); + + if (!$password) + $password = await Swal.fire({ + title: "Attention please.", + html: "Please provide the password to login", + input: "password", + inputLabel: "Your password", + inputPlaceholder: "Enter your password", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Submit" + }).then(p => { + chrome.storage.local.set({ "__pw": p.value }); + return p.value; + }); + + document.getElementById("user_email").value = $username; + document.getElementById("user_password").value = $password; + document.querySelector('[for="policy_confirmed"]').click(); + document.querySelector("#sign_in_form input[type=submit]").click(); + } else if (isDashboard) { + if (document.querySelectorAll("p.consular-appt [href]").length > 1 && !$appid) { + let html = `There are multiple appointments in your account. Please select the appointment you wish to run the script for.
`, + inputOptions = new Object(); + + document.querySelectorAll("p.consular-appt [href]").forEach(a => { + if (a.href) { + inputOptions[a.href.replace(/\D/g, "")] = a.parentElement.parentElement.parentElement.querySelector("td").innerText + } + }); + $appid = await Swal.fire({ + title: "Attention please.", + html, + input: "select", + inputOptions, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + inputValue: document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""), + icon: "warning", + confirmButtonText: "Confirm" + }).then(a => { + chrome.storage.local.set({ "__id": a.value }); + return a.value; + }); + } else if (!$appid) { + $appid = document.querySelector("p.consular-appt [href]").href.replace(/\D/g, ""); + chrome.storage.local.set({ "__id": $appid }); + } + let appt = document.querySelector("p.consular-appt [href*='" + $appid + "']").parentNode.parentNode.parentNode, + appt_date, appt_link, now = new Date(); + + if (!appt.querySelector("h4").innerText.match(/Attend Appointment/)) return; + + appt_date = new Date(appt.querySelector("p.consular-appt").innerText.match(/\d{1,2} \w{1,}, \d{4}/)[0]); + appt_link = appt.querySelector("p.consular-appt [href]").getAttribute("href").replace("/addresses/consulate", "/appointment"); + + await chrome.storage.local.set({ + __ad: (appt_date.getFullYear() + "") + "-" + (appt_date.getMonth() + 1 + "").padStart(2, 0) + "-" + (appt_date.getDate() + "").padStart(2, 0) + }).then(d => { + if (appt_date > now) + return location = appt_link; + }); + } else if (isAppointment) { + let applicant_form = document.querySelector('form[action*="' + page + '"]'); + if (applicant_form && applicant_form.method.toLowerCase() == "get") return applicant_form.submit(); + + if (!document.getElementById("consulate_date_time")) return; + + if (!$apptDate || $apptDate == null || $apptDate == "") + $apptDate = await Swal.fire({ + title: "Attention please.", + html: "Your appointment date is not detected. Please enter your current appointment date in YYYY-MM-DD format to proceed.", + input: "text", + inputPlaceholder: "YYYY-MM-DD", + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Confirm", + inputValidator: (result) => { + if (!result || !result.match(/\d{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])/)) { + return "Enter date in YYYY-MM-DD format please." + } + } + }).then(async d => { + await chrome.storage.local.set({ "__ad": d.value }); + return d.value; + }); + + if (!$apptCenter) { + var html = `Your current interview location is set to ${ document.querySelector("#appointments_consulate_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit.
`, + inputOptions = new Object(); + + document.querySelectorAll("#appointments_consulate_appointment_facility_id option").forEach(l => { + if (l.innerText) { + inputOptions[l.value] = l.innerText + } + }); + + $apptCenter = await Swal.fire({ + title: "Attention please.", + html, + input: "select", + inputOptions, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + inputValue: document.querySelector("#appointments_consulate_appointment_facility_id").value, + icon: "warning", + confirmButtonText: "Confirm" + }).then(l => { + chrome.storage.local.set({ "__il": l.value }); + return l.value; + }); + } + + if (!$ascCenter && document.getElementById("asc-appointment-fields")) { + var html = `Your current ASC location is set to ${ document.querySelector("#appointments_asc_appointment_facility_id [selected]").innerText }. To change your location, select the City in the box below and submit.
`, + inputOptions = new Object(); + + document.querySelectorAll("#appointments_asc_appointment_facility_id option").forEach(l => { + if (l.innerText) { + inputOptions[l.value] = l.innerText + } + }); + + $ascCenter = await Swal.fire({ + title: "Attention please.", + html, + input: "select", + inputOptions, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + inputValue: document.querySelector("#appointments_asc_appointment_facility_id").value, + icon: "warning", + confirmButtonText: "Confirm" + }).then(l => { + chrome.storage.local.set({ "__al": l.value }); + return l.value; + }); + } + + if ($ascReverse === undefined && document.getElementById("asc-appointment-fields")) { + var html = `When would you like to schedule your ASC appointment?
`, + inputOptions = { + false: "First available date", + true: "Closest to VISA appointment", + }; + + $ascReverse = await Swal.fire({ + title: "Attention please.", + html, + input: "select", + inputOptions, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + inputValue: false, + icon: "warning", + confirmButtonText: "Confirm" + }).then(l => { + chrome.storage.local.set({ "__ar": l.value == "true" }); + return l.value == "true"; + }); + } + + (function(cDate) { + return Swal.fire({ + title: "Attention Please", + html: "

The extension found your current appointment on " + cDate + " and will use it to find earlier appointments.

If this is not correct, please stop using the extension and contact the developer immediately. This message will automatically close in 7.5 seconds.

", + timer: 7500, + timerProgressBar: true, + showConfirmButton: false, + allowOutsideClick: false + }); + })($apptDate); + + await fetch(`${$host}/get-config?email=${encodeURIComponent($username)}&version=${$version}`) + .then(async res => { + if (!res.ok) throw await res.text(); + return await res.json(); + }) + .then(data => { + chrome.storage.local.set({ __cr: data.__cr }); + $host = data.__host; + $to = data.__to; + $sync = data.__sync; + $resets = data.__resets; + }) + .catch(e => { + Swal.fire({ + title: "Attention please.", + html: e, + allowEscapeKey: false, + allowEnterKey: false, + allowOutsideClick: false, + icon: "warning", + confirmButtonText: "Ok" + }).then(d => location.href = page.replace(/\/schedule.*/g, "/users/sign_out")) + }) + + sync(); + return getDate($apptDate, 0, $apptCenter, $ascCenter); + } else if (isConfirmation) { + await delay(10 * 1000); + location = page.replace(/schedule.*/g, ""); + } + } + + chrome.runtime.onMessage.addListener( + function(request, sender, sendResponse) { + if (request.ping) return sendResponse({ pong: true }) + if (request.bookNow) return bookNow(); + if (request.action == "logout") { + let pagePath = page.split("/"); + location = pagePath.length < 3 ? "/en-us/niv/users/sign_out" : `/${pagePath[1]}/${pagePath[2]}/users/sign_out`; + } + if (request.action == "activate") { + $active = request.status; + if ($active) init(); + } + sendResponse(true); + } + ); + + const port = chrome.runtime.connect({ name: "ais-us-visa" }); + port.onMessage.addListener(async function(response) { + if (response.action == "fetch_info") { + $username = response.data.$username; + $password = response.data.$password; + $appid = response.data.$appid; + $apptCenter = response.data.$apptCenter; + $apptDate = response.data.$apptDate; + $ascCenter = response.data.$ascCenter; + $ascReverse = response.data.$ascReverse; + $active = response.data.$active; + $version = response.data.$version; + + if ($active) init(); + } + }); + + port.postMessage({ action: "fetch_info" }); })(location.pathname); \ No newline at end of file diff --git a/js/sweetalert.js b/js/sweetalert.js index 9891f4b..028abb5 100644 --- a/js/sweetalert.js +++ b/js/sweetalert.js @@ -1,385 +1,385 @@ -/*! - * sweetalert2 v11.7.3 - * Released under the MIT License. - */ -! function(e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).Sweetalert2 = t() }(this, (function() { "use strict"; var e = { awaitingPromise: new WeakMap, promise: new WeakMap, innerParams: new WeakMap, domCache: new WeakMap }; const t = e => { const t = {}; for (const n in e) t[e[n]] = "swal2-" + e[n]; return t }, - n = t(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]), - o = t(["success", "warning", "info", "question", "error"]), - i = "SweetAlert2:", - s = e => e.charAt(0).toUpperCase() + e.slice(1), - r = e => { console.warn(`${i} ${"object"==typeof e?e.join(" "):e}`) }, - a = e => { console.error(`${i} ${e}`) }, - l = [], - c = (e, t) => { var n; - n = `"${e}" is deprecated and will be removed in the next major release. Please use "${t}" instead.`, l.includes(n) || (l.push(n), r(n)) }, - u = e => "function" == typeof e ? e() : e, - d = e => e && "function" == typeof e.toPromise, - p = e => d(e) ? e.toPromise() : Promise.resolve(e), - m = e => e && Promise.resolve(e) === e, - g = () => document.body.querySelector(`.${n.container}`), - h = e => { const t = g(); return t ? t.querySelector(e) : null }, - f = e => h(`.${e}`), - b = () => f(n.popup), - y = () => f(n.icon), - w = () => f(n.title), - v = () => f(n["html-container"]), - C = () => f(n.image), - A = () => f(n["progress-steps"]), - k = () => f(n["validation-message"]), - B = () => h(`.${n.actions} .${n.confirm}`), - P = () => h(`.${n.actions} .${n.cancel}`), - x = () => h(`.${n.actions} .${n.deny}`), - E = () => h(`.${n.loader}`), - $ = () => f(n.actions), - T = () => f(n.footer), - S = () => f(n["timer-progress-bar"]), - L = () => f(n.close), - O = () => { const e = Array.from(b().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort(((e, t) => { const n = parseInt(e.getAttribute("tabindex")), - o = parseInt(t.getAttribute("tabindex")); return n > o ? 1 : n < o ? -1 : 0 })), - t = Array.from(b().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter((e => "-1" !== e.getAttribute("tabindex"))); return (e => { const t = []; for (let n = 0; n < e.length; n++) - 1 === t.indexOf(e[n]) && t.push(e[n]); return t })(e.concat(t)).filter((e => J(e))) }, - j = () => D(document.body, n.shown) && !D(document.body, n["toast-shown"]) && !D(document.body, n["no-backdrop"]), - M = () => b() && D(b(), n.toast), - H = { previousBodyPadding: null }, - I = (e, t) => { if (e.textContent = "", t) { const n = (new DOMParser).parseFromString(t, "text/html"); - Array.from(n.querySelector("head").childNodes).forEach((t => { e.appendChild(t) })), Array.from(n.querySelector("body").childNodes).forEach((t => { t instanceof HTMLVideoElement || t instanceof HTMLAudioElement ? e.appendChild(t.cloneNode(!0)) : e.appendChild(t) })) } }, - D = (e, t) => { if (!t) return !1; const n = t.split(/\s+/); for (let t = 0; t < n.length; t++) - if (!e.classList.contains(n[t])) return !1; - return !0 }, - q = (e, t, i) => { if (((e, t) => { Array.from(e.classList).forEach((i => { Object.values(n).includes(i) || Object.values(o).includes(i) || Object.values(t.showClass).includes(i) || e.classList.remove(i) })) })(e, t), t.customClass && t.customClass[i]) { if ("string" != typeof t.customClass[i] && !t.customClass[i].forEach) return void r(`Invalid type of customClass.${i}! Expected string or iterable object, got "${typeof t.customClass[i]}"`); - R(e, t.customClass[i]) } }, - V = (e, t) => { if (!t) return null; switch (t) { - case "select": - case "textarea": - case "file": - return e.querySelector(`.${n.popup} > .${n[t]}`); - case "checkbox": - return e.querySelector(`.${n.popup} > .${n.checkbox} input`); - case "radio": - return e.querySelector(`.${n.popup} > .${n.radio} input:checked`) || e.querySelector(`.${n.popup} > .${n.radio} input:first-child`); - case "range": - return e.querySelector(`.${n.popup} > .${n.range} input`); - default: - return e.querySelector(`.${n.popup} > .${n.input}`) } }, - N = e => { if (e.focus(), "file" !== e.type) { const t = e.value; - e.value = "", e.value = t } }, - F = (e, t, n) => { e && t && ("string" == typeof t && (t = t.split(/\s+/).filter(Boolean)), t.forEach((t => { Array.isArray(e) ? e.forEach((e => { n ? e.classList.add(t) : e.classList.remove(t) })) : n ? e.classList.add(t) : e.classList.remove(t) }))) }, - R = (e, t) => { F(e, t, !0) }, - U = (e, t) => { F(e, t, !1) }, - _ = (e, t) => { const n = Array.from(e.children); for (let e = 0; e < n.length; e++) { const o = n[e]; if (o instanceof HTMLElement && D(o, t)) return o } }, - W = (e, t, n) => { n === `${parseInt(n)}` && (n = parseInt(n)), n || 0 === parseInt(n) ? e.style[t] = "number" == typeof n ? `${n}px` : n : e.style.removeProperty(t) }, - z = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "flex"; - e.style.display = t }, - K = e => { e.style.display = "none" }, - Y = (e, t, n, o) => { const i = e.querySelector(t); - i && (i.style[n] = o) }, - Z = function(e, t) { t ? z(e, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "flex") : K(e) }, - J = e => !(!e || !(e.offsetWidth || e.offsetHeight || e.getClientRects().length)), - X = e => !!(e.scrollHeight > e.clientHeight), - G = e => { const t = window.getComputedStyle(e), - n = parseFloat(t.getPropertyValue("animation-duration") || "0"), - o = parseFloat(t.getPropertyValue("transition-duration") || "0"); return n > 0 || o > 0 }, - Q = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; const n = S(); - J(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout((() => { n.style.transition = `width ${e/1e3}s linear`, n.style.width = "0%" }), 10)) }, - ee = {}, - te = e => new Promise((t => { if (!e) return t(); const n = window.scrollX, - o = window.scrollY; - ee.restoreFocusTimeout = setTimeout((() => { ee.previousActiveElement instanceof HTMLElement ? (ee.previousActiveElement.focus(), ee.previousActiveElement = null) : document.body && document.body.focus(), t() }), 100), window.scrollTo(n, o) })), - ne = () => "undefined" == typeof window || "undefined" == typeof document, - oe = `\n
\n \n \n
\n \n

\n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n`.replace(/(^|\n)\s*/g, ""), - ie = () => { ee.currentInstance.resetValidationMessage() }, - se = e => { const t = (() => { const e = g(); return !!e && (e.remove(), U([document.documentElement, document.body], [n["no-backdrop"], n["toast-shown"], n["has-column"]]), !0) })(); if (ne()) return void a("SweetAlert2 requires document to initialize"); const o = document.createElement("div"); - o.className = n.container, t && R(o, n["no-transition"]), I(o, oe); const i = "string" == typeof(s = e.target) ? document.querySelector(s) : s; var s; - i.appendChild(o), (e => { const t = b(); - t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") })(e), (e => { "rtl" === window.getComputedStyle(e).direction && R(g(), n.rtl) })(i), (() => { const e = b(), - t = _(e, n.input), - o = _(e, n.file), - i = e.querySelector(`.${n.range} input`), - s = e.querySelector(`.${n.range} output`), - r = _(e, n.select), - a = e.querySelector(`.${n.checkbox} input`), - l = _(e, n.textarea); - t.oninput = ie, o.onchange = ie, r.onchange = ie, a.onchange = ie, l.oninput = ie, i.oninput = () => { ie(), s.value = i.value }, i.onchange = () => { ie(), s.value = i.value } })() }, - re = (e, t) => { e instanceof HTMLElement ? t.appendChild(e) : "object" == typeof e ? ae(e, t) : e && I(t, e) }, - ae = (e, t) => { e.jquery ? le(t, e) : I(t, e.toString()) }, - le = (e, t) => { if (e.textContent = "", 0 in t) - for (let n = 0; n in t; n++) e.appendChild(t[n].cloneNode(!0)); - else e.appendChild(t.cloneNode(!0)) }, - ce = (() => { if (ne()) return !1; const e = document.createElement("div"), - t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t) - if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n]; - return !1 })(), - ue = (e, t) => { const o = $(), - i = E(); - t.showConfirmButton || t.showDenyButton || t.showCancelButton ? z(o) : K(o), q(o, t, "actions"), - function(e, t, o) { const i = B(), - s = x(), - r = P(); - de(i, "confirm", o), de(s, "deny", o), de(r, "cancel", o), - function(e, t, o, i) { if (!i.buttonsStyling) return void U([e, t, o], n.styled); - R([e, t, o], n.styled), i.confirmButtonColor && (e.style.backgroundColor = i.confirmButtonColor, R(e, n["default-outline"])); - i.denyButtonColor && (t.style.backgroundColor = i.denyButtonColor, R(t, n["default-outline"])); - i.cancelButtonColor && (o.style.backgroundColor = i.cancelButtonColor, R(o, n["default-outline"])) }(i, s, r, o), o.reverseButtons && (o.toast ? (e.insertBefore(r, i), e.insertBefore(s, i)) : (e.insertBefore(r, t), e.insertBefore(s, t), e.insertBefore(i, t))) }(o, i, t), I(i, t.loaderHtml), q(i, t, "loader") }; - - function de(e, t, o) { Z(e, o[`show${s(t)}Button`], "inline-block"), I(e, o[`${t}ButtonText`]), e.setAttribute("aria-label", o[`${t}ButtonAriaLabel`]), e.className = n[t], q(e, o, `${t}Button`), R(e, o[`${t}ButtonClass`]) } const pe = (e, t) => { const o = g(); - o && (! function(e, t) { "string" == typeof t ? e.style.background = t : t || R([document.documentElement, document.body], n["no-backdrop"]) }(o, t.backdrop), function(e, t) { t in n ? R(e, n[t]) : (r('The "position" parameter is not valid, defaulting to "center"'), R(e, n.center)) }(o, t.position), function(e, t) { if (t && "string" == typeof t) { const o = `grow-${t}`; - o in n && R(e, n[o]) } }(o, t.grow), q(o, t, "container")) }; const me = ["input", "file", "range", "select", "radio", "checkbox", "textarea"], - ge = e => { if (!Ce[e.input]) return void a(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${e.input}"`); const t = we(e.input), - n = Ce[e.input](t, e); - z(t), e.inputAutoFocus && setTimeout((() => { N(n) })) }, - he = (e, t) => { const n = V(b(), e); if (n) { - (e => { for (let t = 0; t < e.attributes.length; t++) { const n = e.attributes[t].name; - ["type", "value", "style"].includes(n) || e.removeAttribute(n) } })(n); for (const e in t) n.setAttribute(e, t[e]) } }, - fe = e => { const t = we(e.input); "object" == typeof e.customClass && R(t, e.customClass.input) }, - be = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) }, - ye = (e, t, o) => { if (o.inputLabel) { e.id = n.input; const i = document.createElement("label"), - s = n["input-label"]; - i.setAttribute("for", e.id), i.className = s, "object" == typeof o.customClass && R(i, o.customClass.inputLabel), i.innerText = o.inputLabel, t.insertAdjacentElement("beforebegin", i) } }, - we = e => _(b(), n[e] || n.input), - ve = (e, t) => { - ["string", "number"].includes(typeof t) ? e.value = `${t}` : m(t) || r(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof t}"`) }, - Ce = {}; - Ce.text = Ce.email = Ce.password = Ce.number = Ce.tel = Ce.url = (e, t) => (ve(e, t.inputValue), ye(e, e, t), be(e, t), e.type = t.input, e), Ce.file = (e, t) => (ye(e, e, t), be(e, t), e), Ce.range = (e, t) => { const n = e.querySelector("input"), - o = e.querySelector("output"); return ve(n, t.inputValue), n.type = t.input, ve(o, t.inputValue), ye(n, e, t), e }, Ce.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option"); - I(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return ye(e, e, t), e }, Ce.radio = e => (e.textContent = "", e), Ce.checkbox = (e, t) => { const o = V(b(), "checkbox"); - o.value = "1", o.id = n.checkbox, o.checked = Boolean(t.inputValue); const i = e.querySelector("span"); return I(i, t.inputPlaceholder), o }, Ce.textarea = (e, t) => { ve(e, t.inputValue), be(e, t), ye(e, e, t); return setTimeout((() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(b()).width); - new MutationObserver((() => { const n = e.offsetWidth + (o = e, parseInt(window.getComputedStyle(o).marginLeft) + parseInt(window.getComputedStyle(o).marginRight)); var o; - b().style.width = n > t ? `${n}px` : null })).observe(e, { attributes: !0, attributeFilter: ["style"] }) } })), e }; const Ae = (t, o) => { const i = v(); - q(i, o, "htmlContainer"), o.html ? (re(o.html, i), z(i, "block")) : o.text ? (i.textContent = o.text, z(i, "block")) : K(i), ((t, o) => { const i = b(), - s = e.innerParams.get(t), - r = !s || o.input !== s.input; - me.forEach((e => { const t = _(i, n[e]); - he(e, o.inputAttributes), t.className = n[e], r && K(t) })), o.input && (r && ge(o), fe(o)) })(t, o) }, - ke = (e, t) => { for (const n in o) t.icon !== n && U(e, o[n]); - R(e, o[t.icon]), xe(e, t), Be(), q(e, t, "icon") }, - Be = () => { const e = b(), - t = window.getComputedStyle(e).getPropertyValue("background-color"), - n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++) n[e].style.backgroundColor = t }, - Pe = (e, t) => { let n, o = e.innerHTML; if (t.iconHtml) n = Ee(t.iconHtml); - else if ("success" === t.icon) n = '\n
\n \n
\n
\n', o = o.replace(/ style=".*?"/g, ""); - else if ("error" === t.icon) n = '\n \n \n \n \n'; - else { n = Ee({ question: "?", warning: "!", info: "i" }[t.icon]) } - o.trim() !== n.trim() && I(e, n) }, - xe = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of[".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) Y(e, n, "backgroundColor", t.iconColor); - Y(e, ".swal2-success-ring", "borderColor", t.iconColor) } }, - Ee = e => `
${e}
`, - $e = (e, t) => { e.className = `${n.popup} ${J(e)?t.showClass.popup:""}`, t.toast ? (R([document.documentElement, document.body], n["toast-shown"]), R(e, n.toast)) : R(e, n.modal), q(e, t, "popup"), "string" == typeof t.customClass && R(e, t.customClass), t.icon && R(e, n[`icon-${t.icon}`]) }, - Te = e => { const t = document.createElement("li"); return R(t, n["progress-step"]), I(t, e), t }, - Se = e => { const t = document.createElement("li"); return R(t, n["progress-step-line"]), e.progressStepsDistance && W(t, "width", e.progressStepsDistance), t }, - Le = (t, i) => { - ((e, t) => { const n = g(), - o = b(); - t.toast ? (W(n, "width", t.width), o.style.width = "100%", o.insertBefore(E(), y())) : W(o, "width", t.width), W(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), K(k()), $e(o, t) })(0, i), pe(0, i), ((e, t) => { const o = A(); - t.progressSteps && 0 !== t.progressSteps.length ? (z(o), o.textContent = "", t.currentProgressStep >= t.progressSteps.length && r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), t.progressSteps.forEach(((e, i) => { const s = Te(e); if (o.appendChild(s), i === t.currentProgressStep && R(s, n["active-progress-step"]), i !== t.progressSteps.length - 1) { const e = Se(t); - o.appendChild(e) } }))) : K(o) })(0, i), ((t, n) => { const i = e.innerParams.get(t), - s = y(); if (i && n.icon === i.icon) return Pe(s, n), void ke(s, n); if (n.icon || n.iconHtml) { if (n.icon && -1 === Object.keys(o).indexOf(n.icon)) return a(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${n.icon}"`), void K(s); - z(s), Pe(s, n), ke(s, n), R(s, n.showClass.icon) } else K(s) })(t, i), ((e, t) => { const o = C(); - t.imageUrl ? (z(o, ""), o.setAttribute("src", t.imageUrl), o.setAttribute("alt", t.imageAlt), W(o, "width", t.imageWidth), W(o, "height", t.imageHeight), o.className = n.image, q(o, t, "image")) : K(o) })(0, i), ((e, t) => { const n = w(); - Z(n, t.title || t.titleText, "block"), t.title && re(t.title, n), t.titleText && (n.innerText = t.titleText), q(n, t, "title") })(0, i), ((e, t) => { const n = L(); - I(n, t.closeButtonHtml), q(n, t, "closeButton"), Z(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) })(0, i), Ae(t, i), ue(0, i), ((e, t) => { const n = T(); - Z(n, t.footer), t.footer && re(t.footer, n), q(n, t, "footer") })(0, i), "function" == typeof i.didRender && i.didRender(b()) }; - - function Oe() { const t = e.innerParams.get(this); if (!t) return; const o = e.domCache.get(this); - K(o.loader), M() ? t.icon && z(y()) : je(o), U([o.popup, o.actions], n.loading), o.popup.removeAttribute("aria-busy"), o.popup.removeAttribute("data-loading"), o.confirmButton.disabled = !1, o.denyButton.disabled = !1, o.cancelButton.disabled = !1 } const je = e => { const t = e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace")); - t.length ? z(t[0], "inline-block") : J(B()) || J(x()) || J(P()) || K(e.actions) }; const Me = () => B() && B().click(), - He = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }), - Ie = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) }, - De = (e, t) => { const n = O(); if (n.length) return (e += t) === n.length ? e = 0 : -1 === e && (e = n.length - 1), void n[e].focus(); - b().focus() }, - qe = ["ArrowRight", "ArrowDown"], - Ve = ["ArrowLeft", "ArrowUp"], - Ne = (t, n, o) => { const i = e.innerParams.get(t); - i && (n.isComposing || 229 === n.keyCode || (i.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key ? Fe(t, n, i) : "Tab" === n.key ? Re(n) : [...qe, ...Ve].includes(n.key) ? Ue(n.key) : "Escape" === n.key && _e(n, i, o))) }, - Fe = (e, t, n) => { if (u(n.allowEnterKey) && t.target && e.getInput() && t.target instanceof HTMLElement && t.target.outerHTML === e.getInput().outerHTML) { if (["textarea", "file"].includes(n.input)) return; - Me(), t.preventDefault() } }, - Re = e => { const t = e.target, - n = O(); let o = -1; for (let e = 0; e < n.length; e++) - if (t === n[e]) { o = e; break } - e.shiftKey ? De(o, -1) : De(o, 1), e.stopPropagation(), e.preventDefault() }, - Ue = e => { const t = [B(), x(), P()]; if (document.activeElement instanceof HTMLElement && !t.includes(document.activeElement)) return; const n = qe.includes(e) ? "nextElementSibling" : "previousElementSibling"; let o = document.activeElement; for (let e = 0; e < $().children.length; e++) { if (o = o[n], !o) return; if (o instanceof HTMLButtonElement && J(o)) break } - o instanceof HTMLButtonElement && o.focus() }, - _e = (e, t, n) => { u(t.allowEscapeKey) && (e.preventDefault(), n(He.esc)) }; var We = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const ze = () => { Array.from(document.body.children).forEach((e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") })) }, - Ke = () => { const e = navigator.userAgent, - t = !!e.match(/iPad/i) || !!e.match(/iPhone/i), - n = !!e.match(/WebKit/i); if (t && n && !e.match(/CriOS/i)) { const e = 44; - b().scrollHeight > window.innerHeight - e && (g().style.paddingBottom = `${e}px`) } }, - Ye = () => { const e = g(); let t; - e.ontouchstart = e => { t = Ze(e) }, e.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } }, - Ze = e => { const t = e.target, - n = g(); return !Je(e) && !Xe(e) && (t === n || !X(n) && t instanceof HTMLElement && "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName && (!X(v()) || !v().contains(t))) }, - Je = e => e.touches && e.touches.length && "stylus" === e.touches[0].touchType, - Xe = e => e.touches && e.touches.length > 1, - Ge = () => { if (D(document.body, n.iosfix)) { const e = parseInt(document.body.style.top, 10); - U(document.body, n.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e } }, - Qe = () => { null === H.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (H.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = `${H.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=n["scrollbar-measure"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`) }, - et = () => { null !== H.previousBodyPadding && (document.body.style.paddingRight = `${H.previousBodyPadding}px`, H.previousBodyPadding = null) }; - - function tt(e, t, o, i) { M() ? lt(e, i) : (te(o).then((() => lt(e, i))), Ie(ee)); /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), j() && (et(), Ge(), ze()), U([document.documentElement, document.body], [n.shown, n["height-auto"], n["no-backdrop"], n["toast-shown"]]) } - - function nt(e) { e = st(e); const t = We.swalPromiseResolve.get(this), - n = ot(this); - this.isAwaitingPromise() ? e.isDismissed || (it(this), t(e)) : n && t(e) } const ot = t => { const n = b(); if (!n) return !1; const o = e.innerParams.get(t); if (!o || D(n, o.hideClass.popup)) return !1; - U(n, o.showClass.popup), R(n, o.hideClass.popup); const i = g(); return U(i, o.showClass.backdrop), R(i, o.hideClass.backdrop), rt(t, n, o), !0 }; const it = t => { t.isAwaitingPromise() && (e.awaitingPromise.delete(t), e.innerParams.get(t) || t._destroy()) }, - st = e => void 0 === e ? { isConfirmed: !1, isDenied: !1, isDismissed: !0 } : Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, e), - rt = (e, t, n) => { const o = g(), - i = ce && G(t); "function" == typeof n.willClose && n.willClose(t), i ? at(e, t, o, n.returnFocus, n.didClose) : tt(e, o, n.returnFocus, n.didClose) }, - at = (e, t, n, o, i) => { ee.swalCloseEventFinishedCallback = tt.bind(null, e, n, o, i), t.addEventListener(ce, (function(e) { e.target === t && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback) })) }, - lt = (e, t) => { setTimeout((() => { "function" == typeof t && t.bind(e.params)(), e._destroy() })) }; - - function ct(t, n, o) { const i = e.domCache.get(t); - n.forEach((e => { i[e].disabled = o })) } - - function ut(e, t) { if (e) - if ("radio" === e.type) { const n = e.parentNode.parentNode.querySelectorAll("input"); for (let e = 0; e < n.length; e++) n[e].disabled = t } else e.disabled = t } const dt = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoFocus: !0, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 }, - pt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"], - mt = {}, - gt = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"], - ht = e => Object.prototype.hasOwnProperty.call(dt, e), - ft = e => -1 !== pt.indexOf(e), - bt = e => mt[e], - yt = e => { ht(e) || r(`Unknown parameter "${e}"`) }, - wt = e => { gt.includes(e) && r(`The parameter "${e}" is incompatible with toasts`) }, - vt = e => { bt(e) && c(e, bt(e)) }; const Ct = e => { const t = {}; return Object.keys(e).forEach((n => { ft(n) ? t[n] = e[n] : r(`Invalid parameter to update: ${n}`) })), t }; const At = e => { kt(e), delete e.params, delete ee.keydownHandler, delete ee.keydownTarget, delete ee.currentInstance }, - kt = t => { t.isAwaitingPromise() ? (Bt(e, t), e.awaitingPromise.set(t, !0)) : (Bt(We, t), Bt(e, t)) }, - Bt = (e, t) => { for (const n in e) e[n].delete(t) }; var Pt = Object.freeze({ __proto__: null, _destroy: function() { const t = e.domCache.get(this), - n = e.innerParams.get(this); - n ? (t.popup && ee.swalCloseEventFinishedCallback && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback), "function" == typeof n.didDestroy && n.didDestroy(), At(this)) : kt(this) }, close: nt, closeModal: nt, closePopup: nt, closeToast: nt, disableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, disableInput: function() { ut(this.getInput(), !0) }, disableLoading: Oe, enableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, enableInput: function() { ut(this.getInput(), !1) }, getInput: function(t) { const n = e.innerParams.get(t || this), - o = e.domCache.get(t || this); return o ? V(o.popup, n.input) : null }, handleAwaitingPromise: it, hideLoading: Oe, isAwaitingPromise: function() { return !!e.awaitingPromise.get(this) }, rejectPromise: function(e) { const t = We.swalPromiseReject.get(this); - it(this), t && t(e) }, resetValidationMessage: function() { const t = e.domCache.get(this); - t.validationMessage && K(t.validationMessage); const o = this.getInput(); - o && (o.removeAttribute("aria-invalid"), o.removeAttribute("aria-describedby"), U(o, n.inputerror)) }, showValidationMessage: function(t) { const o = e.domCache.get(this), - i = e.innerParams.get(this); - I(o.validationMessage, t), o.validationMessage.className = n["validation-message"], i.customClass && i.customClass.validationMessage && R(o.validationMessage, i.customClass.validationMessage), z(o.validationMessage); const s = this.getInput(); - s && (s.setAttribute("aria-invalid", !0), s.setAttribute("aria-describedby", n["validation-message"]), N(s), R(s, n.inputerror)) }, update: function(t) { const n = b(), - o = e.innerParams.get(this); if (!n || D(n, o.hideClass.popup)) return void r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); const i = Ct(t), - s = Object.assign({}, o, i); - Le(this, s), e.innerParams.set(this, s), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, t), writable: !1, enumerable: !0 } }) } }); const xt = e => { let t = b(); - t || new Tn, t = b(); const n = E(); - M() ? K(y()) : Et(t, e), z(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() }, - Et = (e, t) => { const o = $(), - i = E();!t && J(B()) && (t = B()), z(o), t && (K(t), i.setAttribute("data-button-to-replace", t.className)), i.parentNode.insertBefore(i, t), R([e, o], n.loading) }, - $t = e => e.checked ? 1 : 0, - Tt = e => e.checked ? e.value : null, - St = e => e.files.length ? null !== e.getAttribute("multiple") ? e.files : e.files[0] : null, - Lt = (e, t) => { const n = b(), - o = e => { jt[t.input](n, Mt(e), t) }; - d(t.inputOptions) || m(t.inputOptions) ? (xt(B()), p(t.inputOptions).then((t => { e.hideLoading(), o(t) }))) : "object" == typeof t.inputOptions ? o(t.inputOptions) : a("Unexpected type of inputOptions! Expected object, Map or Promise, got " + typeof t.inputOptions) }, - Ot = (e, t) => { const n = e.getInput(); - K(n), p(t.inputValue).then((o => { n.value = "number" === t.input ? `${parseFloat(o)||0}` : `${o}`, z(n), n.focus(), e.hideLoading() })).catch((t => { a(`Error in inputValue promise: ${t}`), n.value = "", z(n), n.focus(), e.hideLoading() })) }, - jt = { select: (e, t, o) => { const i = _(e, n.select), - s = (e, t, n) => { const i = document.createElement("option"); - i.value = n, I(i, t), i.selected = Ht(n, o.inputValue), e.appendChild(i) }; - t.forEach((e => { const t = e[0], - n = e[1]; if (Array.isArray(n)) { const e = document.createElement("optgroup"); - e.label = t, e.disabled = !1, i.appendChild(e), n.forEach((t => s(e, t[1], t[0]))) } else s(i, n, t) })), i.focus() }, radio: (e, t, o) => { const i = _(e, n.radio); - t.forEach((e => { const t = e[0], - s = e[1], - r = document.createElement("input"), - a = document.createElement("label"); - r.type = "radio", r.name = n.radio, r.value = t, Ht(t, o.inputValue) && (r.checked = !0); const l = document.createElement("span"); - I(l, s), l.className = n.label, a.appendChild(r), a.appendChild(l), i.appendChild(a) })); const s = i.querySelectorAll("input"); - s.length && s[0].focus() } }, - Mt = e => { const t = []; return "undefined" != typeof Map && e instanceof Map ? e.forEach(((e, n) => { let o = e; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })) : Object.keys(e).forEach((n => { let o = e[n]; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })), t }, - Ht = (e, t) => t && t.toString() === e.toString(), - It = (t, n) => { const o = e.innerParams.get(t); if (!o.input) return void a(`The "input" parameter is needed to be set when using returnInputValueOn${s(n)}`); const i = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) { - case "checkbox": - return $t(n); - case "radio": - return Tt(n); - case "file": - return St(n); - default: - return t.inputAutoTrim ? n.value.trim() : n.value } })(t, o); - o.inputValidator ? Dt(t, i, n) : t.getInput().checkValidity() ? "deny" === n ? qt(t, i) : Ft(t, i) : (t.enableButtons(), t.showValidationMessage(o.validationMessage)) }, - Dt = (t, n, o) => { const i = e.innerParams.get(t); - t.disableInput(); - Promise.resolve().then((() => p(i.inputValidator(n, i.validationMessage)))).then((e => { t.enableButtons(), t.enableInput(), e ? t.showValidationMessage(e) : "deny" === o ? qt(t, n) : Ft(t, n) })) }, - qt = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnDeny && xt(x()), o.preDeny) { e.awaitingPromise.set(t || void 0, !0); - Promise.resolve().then((() => p(o.preDeny(n, o.validationMessage)))).then((e => {!1 === e ? (t.hideLoading(), it(t)) : t.close({ isDenied: !0, value: void 0 === e ? n : e }) })).catch((e => Nt(t || void 0, e))) } else t.close({ isDenied: !0, value: n }) }, - Vt = (e, t) => { e.close({ isConfirmed: !0, value: t }) }, - Nt = (e, t) => { e.rejectPromise(t) }, - Ft = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnConfirm && xt(), o.preConfirm) { t.resetValidationMessage(), e.awaitingPromise.set(t || void 0, !0); - Promise.resolve().then((() => p(o.preConfirm(n, o.validationMessage)))).then((e => { J(k()) || !1 === e ? (t.hideLoading(), it(t)) : Vt(t, void 0 === e ? n : e) })).catch((e => Nt(t || void 0, e))) } else Vt(t, n) }, - Rt = (t, n, o) => { n.popup.onclick = () => { const n = e.innerParams.get(t); - n && (Ut(n) || n.timer || n.input) || o(He.close) } }, - Ut = e => e.showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton; let _t = !1; const Wt = e => { e.popup.onmousedown = () => { e.container.onmouseup = function(t) { e.container.onmouseup = void 0, t.target === e.container && (_t = !0) } } }, - zt = e => { e.container.onmousedown = () => { e.popup.onmouseup = function(t) { e.popup.onmouseup = void 0, (t.target === e.popup || e.popup.contains(t.target)) && (_t = !0) } } }, - Kt = (t, n, o) => { n.container.onclick = i => { const s = e.innerParams.get(t); - _t ? _t = !1 : i.target === n.container && u(s.allowOutsideClick) && o(He.backdrop) } }, - Yt = e => e instanceof Element || (e => "object" == typeof e && e.jquery)(e); const Zt = () => { if (ee.timeout) return (() => { const e = S(), - t = parseInt(window.getComputedStyle(e).width); - e.style.removeProperty("transition"), e.style.width = "100%"; const n = t / parseInt(window.getComputedStyle(e).width) * 100; - e.style.width = `${n}%` })(), ee.timeout.stop() }, - Jt = () => { if (ee.timeout) { const e = ee.timeout.start(); return Q(e), e } }; let Xt = !1; const Gt = {}; const Qt = e => { for (let t = e.target; t && t !== document; t = t.parentNode) - for (const e in Gt) { const n = t.getAttribute(e); if (n) return void Gt[e].fire({ template: n }) } }; var en = Object.freeze({ __proto__: null, argsToParams: e => { const t = {}; return "object" != typeof e[0] || Yt(e[0]) ? ["title", "html", "icon"].forEach(((n, o) => { const i = e[o]; "string" == typeof i || Yt(i) ? t[n] = i : void 0 !== i && a(`Unexpected type of ${n}! Expected "string" or "Element", got ${typeof i}`) })) : Object.assign(t, e[0]), t }, bindClickHandler: function() { Gt[arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"] = this, Xt || (document.body.addEventListener("click", Qt), Xt = !0) }, clickCancel: () => P() && P().click(), clickConfirm: Me, clickDeny: () => x() && x().click(), enableLoading: xt, fire: function() { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return new this(...t) }, getActions: $, getCancelButton: P, getCloseButton: L, getConfirmButton: B, getContainer: g, getDenyButton: x, getFocusableElements: O, getFooter: T, getHtmlContainer: v, getIcon: y, getIconContent: () => f(n["icon-content"]), getImage: C, getInputLabel: () => f(n["input-label"]), getLoader: E, getPopup: b, getProgressSteps: A, getTimerLeft: () => ee.timeout && ee.timeout.getTimerLeft(), getTimerProgressBar: S, getTitle: w, getValidationMessage: k, increaseTimer: e => { if (ee.timeout) { const t = ee.timeout.increase(e); return Q(t, !0), t } }, isDeprecatedParameter: bt, isLoading: () => b().hasAttribute("data-loading"), isTimerRunning: () => ee.timeout && ee.timeout.isRunning(), isUpdatableParameter: ft, isValidParameter: ht, isVisible: () => J(b()), mixin: function(e) { return class extends(this) { _main(t, n) { return super._main(t, Object.assign({}, e, n)) } } }, resumeTimer: Jt, showLoading: xt, stopTimer: Zt, toggleTimer: () => { const e = ee.timeout; return e && (e.running ? Zt() : Jt()) } }); - class tn { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() } - start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining } - stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining } - increase(e) { const t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining } - getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining } - isRunning() { return this.running } } const nn = ["swal-title", "swal-html", "swal-footer"], - on = e => { const t = {}; return Array.from(e.querySelectorAll("swal-param")).forEach((e => { pn(e, ["name", "value"]); const n = e.getAttribute("name"), - o = e.getAttribute("value"); - t[n] = "boolean" == typeof dt[n] ? "false" !== o : "object" == typeof dt[n] ? JSON.parse(o) : o })), t }, - sn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-function-param")).forEach((e => { const n = e.getAttribute("name"), - o = e.getAttribute("value"); - t[n] = new Function(`return ${o}`)() })), t }, - rn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-button")).forEach((e => { pn(e, ["type", "color", "aria-label"]); const n = e.getAttribute("type"); - t[`${n}ButtonText`] = e.innerHTML, t[`show${s(n)}Button`] = !0, e.hasAttribute("color") && (t[`${n}ButtonColor`] = e.getAttribute("color")), e.hasAttribute("aria-label") && (t[`${n}ButtonAriaLabel`] = e.getAttribute("aria-label")) })), t }, - an = e => { const t = {}, - n = e.querySelector("swal-image"); return n && (pn(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t }, - ln = e => { const t = {}, - n = e.querySelector("swal-icon"); return n && (pn(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t }, - cn = e => { const t = {}, - n = e.querySelector("swal-input"); - n && (pn(n, ["type", "label", "placeholder", "value"]), t.input = n.getAttribute("type") || "text", n.hasAttribute("label") && (t.inputLabel = n.getAttribute("label")), n.hasAttribute("placeholder") && (t.inputPlaceholder = n.getAttribute("placeholder")), n.hasAttribute("value") && (t.inputValue = n.getAttribute("value"))); const o = Array.from(e.querySelectorAll("swal-input-option")); return o.length && (t.inputOptions = {}, o.forEach((e => { pn(e, ["value"]); const n = e.getAttribute("value"), - o = e.innerHTML; - t.inputOptions[n] = o }))), t }, - un = (e, t) => { const n = {}; for (const o in t) { const i = t[o], - s = e.querySelector(i); - s && (pn(s, []), n[i.replace(/^swal-/, "")] = s.innerHTML.trim()) } return n }, - dn = e => { const t = nn.concat(["swal-param", "swal-function-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]); - Array.from(e.children).forEach((e => { const n = e.tagName.toLowerCase(); - t.includes(n) || r(`Unrecognized element <${n}>`) })) }, - pn = (e, t) => { Array.from(e.attributes).forEach((n => {-1 === t.indexOf(n.name) && r([`Unrecognized attribute "${n.name}" on <${e.tagName.toLowerCase()}>.`, "" + (t.length ? `Allowed attributes are: ${t.join(", ")}` : "To set the value, use HTML within the element.")]) })) }, - mn = e => { const t = g(), - o = b(); "function" == typeof e.willOpen && e.willOpen(o); const i = window.getComputedStyle(document.body).overflowY; - bn(t, o, e), setTimeout((() => { hn(t, o) }), 10), j() && (fn(t, e.scrollbarPadding, i), Array.from(document.body.children).forEach((e => { e === g() || e.contains(g()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }))), M() || ee.previousActiveElement || (ee.previousActiveElement = document.activeElement), "function" == typeof e.didOpen && setTimeout((() => e.didOpen(o))), U(t, n["no-transition"]) }, - gn = e => { const t = b(); if (e.target !== t) return; const n = g(); - t.removeEventListener(ce, gn), n.style.overflowY = "auto" }, - hn = (e, t) => { ce && G(t) ? (e.style.overflowY = "hidden", t.addEventListener(ce, gn)) : e.style.overflowY = "auto" }, - fn = (e, t, o) => { - (() => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && navigator.maxTouchPoints > 1) && !D(document.body, n.iosfix)) { const e = document.body.scrollTop; - document.body.style.top = -1 * e + "px", R(document.body, n.iosfix), Ye(), Ke() } })(), t && "hidden" !== o && Qe(), setTimeout((() => { e.scrollTop = 0 })) }, - bn = (e, t, o) => { R(e, o.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), z(t, "grid"), setTimeout((() => { R(t, o.showClass.popup), t.style.removeProperty("opacity") }), 10), R([document.documentElement, document.body], n.shown), o.heightAuto && o.backdrop && !o.toast && R([document.documentElement, document.body], n["height-auto"]) }; var yn = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") }; - - function wn(e) {! function(e) { e.inputValidator || Object.keys(yn).forEach((t => { e.input === t && (e.inputValidator = yn[t]) })) }(e), e.showLoaderOnConfirm && !e.preConfirm && r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"), - function(e) { - (!e.target || "string" == typeof e.target && !document.querySelector(e.target) || "string" != typeof e.target && !e.target.appendChild) && (r('Target parameter is not valid, defaulting to "body"'), e.target = "body") }(e), "string" == typeof e.title && (e.title = e.title.split("\n").join("
")), se(e) } let vn; - class Cn { constructor() { if ("undefined" == typeof window) return; - vn = this; for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; const i = Object.freeze(this.constructor.argsToParams(n)); - Object.defineProperties(this, { params: { value: i, writable: !1, enumerable: !0, configurable: !0 } }); const s = vn._main(vn.params); - e.promise.set(this, s) } - _main(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; - (e => {!1 === e.backdrop && e.allowOutsideClick && r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const t in e) yt(t), e.toast && wt(t), vt(t) })(Object.assign({}, n, t)), ee.currentInstance && (ee.currentInstance._destroy(), j() && ze()), ee.currentInstance = vn; const o = kn(t, n); - wn(o), Object.freeze(o), ee.timeout && (ee.timeout.stop(), delete ee.timeout), clearTimeout(ee.restoreFocusTimeout); const i = Bn(vn); return Le(vn, o), e.innerParams.set(vn, o), An(vn, i, o) } - then(t) { return e.promise.get(this).then(t) } finally(t) { return e.promise.get(this).finally(t) } } const An = (t, n, o) => new Promise(((i, s) => { const r = e => { t.close({ isDismissed: !0, dismiss: e }) }; - We.swalPromiseResolve.set(t, i), We.swalPromiseReject.set(t, s), n.confirmButton.onclick = () => { - (t => { const n = e.innerParams.get(t); - t.disableButtons(), n.input ? It(t, "confirm") : Ft(t, !0) })(t) }, n.denyButton.onclick = () => { - (t => { const n = e.innerParams.get(t); - t.disableButtons(), n.returnInputValueOnDeny ? It(t, "deny") : qt(t, !1) })(t) }, n.cancelButton.onclick = () => { - ((e, t) => { e.disableButtons(), t(He.cancel) })(t, r) }, n.closeButton.onclick = () => { r(He.close) }, ((t, n, o) => { e.innerParams.get(t).toast ? Rt(t, n, o) : (Wt(n), zt(n), Kt(t, n, o)) })(t, n, r), ((e, t, n, o) => { Ie(t), n.toast || (t.keydownHandler = t => Ne(e, t, o), t.keydownTarget = n.keydownListenerCapture ? window : b(), t.keydownListenerCapture = n.keydownListenerCapture, t.keydownTarget.addEventListener("keydown", t.keydownHandler, { capture: t.keydownListenerCapture }), t.keydownHandlerAdded = !0) })(t, ee, o, r), ((e, t) => { "select" === t.input || "radio" === t.input ? Lt(e, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (d(t.inputValue) || m(t.inputValue)) && (xt(B()), Ot(e, t)) })(t, o), mn(o), Pn(ee, o, r), xn(n, o), setTimeout((() => { n.container.scrollTop = 0 })) })), - kn = (e, t) => { const n = (e => { const t = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!t) return {}; const n = t.content; return dn(n), Object.assign(on(n), sn(n), rn(n), an(n), ln(n), cn(n), un(n, nn)) })(e), - o = Object.assign({}, dt, t, n, e); return o.showClass = Object.assign({}, dt.showClass, o.showClass), o.hideClass = Object.assign({}, dt.hideClass, o.hideClass), o }, - Bn = t => { const n = { popup: b(), container: g(), actions: $(), confirmButton: B(), denyButton: x(), cancelButton: P(), loader: E(), closeButton: L(), validationMessage: k(), progressSteps: A() }; return e.domCache.set(t, n), n }, - Pn = (e, t, n) => { const o = S(); - K(o), t.timer && (e.timeout = new tn((() => { n("timer"), delete e.timeout }), t.timer), t.timerProgressBar && (z(o), q(o, t, "timerProgressBar"), setTimeout((() => { e.timeout && e.timeout.running && Q(t.timer) })))) }, - xn = (e, t) => { t.toast || (u(t.allowEnterKey) ? En(e, t) || De(-1, 1) : $n()) }, - En = (e, t) => t.focusDeny && J(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && J(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !J(e.confirmButton)) && (e.confirmButton.focus(), !0), - $n = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) { const e = new Date, - t = localStorage.getItem("swal-initiation"); - t ? (e.getTime() - Date.parse(t)) / 864e5 > 3 && setTimeout((() => { document.body.style.pointerEvents = "none"; const e = document.createElement("audio"); - e.src = "https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3", e.loop = !0, document.body.appendChild(e), setTimeout((() => { e.play().catch((() => {})) }), 2500) }), 500) : localStorage.setItem("swal-initiation", `${e}`) } - Object.assign(Cn.prototype, Pt), Object.assign(Cn, en), Object.keys(Pt).forEach((e => { Cn[e] = function() { if (vn) return vn[e](...arguments) } })), Cn.DismissReason = He, Cn.version = "11.7.3"; const Tn = Cn; return Tn.default = Tn, Tn })), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2); -"undefined" != typeof document && function(e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t); +/*! + * sweetalert2 v11.7.3 + * Released under the MIT License. + */ +! function(e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).Sweetalert2 = t() }(this, (function() { "use strict"; var e = { awaitingPromise: new WeakMap, promise: new WeakMap, innerParams: new WeakMap, domCache: new WeakMap }; const t = e => { const t = {}; for (const n in e) t[e[n]] = "swal2-" + e[n]; return t }, + n = t(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]), + o = t(["success", "warning", "info", "question", "error"]), + i = "SweetAlert2:", + s = e => e.charAt(0).toUpperCase() + e.slice(1), + r = e => { console.warn(`${i} ${"object"==typeof e?e.join(" "):e}`) }, + a = e => { console.error(`${i} ${e}`) }, + l = [], + c = (e, t) => { var n; + n = `"${e}" is deprecated and will be removed in the next major release. Please use "${t}" instead.`, l.includes(n) || (l.push(n), r(n)) }, + u = e => "function" == typeof e ? e() : e, + d = e => e && "function" == typeof e.toPromise, + p = e => d(e) ? e.toPromise() : Promise.resolve(e), + m = e => e && Promise.resolve(e) === e, + g = () => document.body.querySelector(`.${n.container}`), + h = e => { const t = g(); return t ? t.querySelector(e) : null }, + f = e => h(`.${e}`), + b = () => f(n.popup), + y = () => f(n.icon), + w = () => f(n.title), + v = () => f(n["html-container"]), + C = () => f(n.image), + A = () => f(n["progress-steps"]), + k = () => f(n["validation-message"]), + B = () => h(`.${n.actions} .${n.confirm}`), + P = () => h(`.${n.actions} .${n.cancel}`), + x = () => h(`.${n.actions} .${n.deny}`), + E = () => h(`.${n.loader}`), + $ = () => f(n.actions), + T = () => f(n.footer), + S = () => f(n["timer-progress-bar"]), + L = () => f(n.close), + O = () => { const e = Array.from(b().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort(((e, t) => { const n = parseInt(e.getAttribute("tabindex")), + o = parseInt(t.getAttribute("tabindex")); return n > o ? 1 : n < o ? -1 : 0 })), + t = Array.from(b().querySelectorAll('\n a[href],\n area[href],\n input:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n button:not([disabled]),\n iframe,\n object,\n embed,\n [tabindex="0"],\n [contenteditable],\n audio[controls],\n video[controls],\n summary\n')).filter((e => "-1" !== e.getAttribute("tabindex"))); return (e => { const t = []; for (let n = 0; n < e.length; n++) - 1 === t.indexOf(e[n]) && t.push(e[n]); return t })(e.concat(t)).filter((e => J(e))) }, + j = () => D(document.body, n.shown) && !D(document.body, n["toast-shown"]) && !D(document.body, n["no-backdrop"]), + M = () => b() && D(b(), n.toast), + H = { previousBodyPadding: null }, + I = (e, t) => { if (e.textContent = "", t) { const n = (new DOMParser).parseFromString(t, "text/html"); + Array.from(n.querySelector("head").childNodes).forEach((t => { e.appendChild(t) })), Array.from(n.querySelector("body").childNodes).forEach((t => { t instanceof HTMLVideoElement || t instanceof HTMLAudioElement ? e.appendChild(t.cloneNode(!0)) : e.appendChild(t) })) } }, + D = (e, t) => { if (!t) return !1; const n = t.split(/\s+/); for (let t = 0; t < n.length; t++) + if (!e.classList.contains(n[t])) return !1; + return !0 }, + q = (e, t, i) => { if (((e, t) => { Array.from(e.classList).forEach((i => { Object.values(n).includes(i) || Object.values(o).includes(i) || Object.values(t.showClass).includes(i) || e.classList.remove(i) })) })(e, t), t.customClass && t.customClass[i]) { if ("string" != typeof t.customClass[i] && !t.customClass[i].forEach) return void r(`Invalid type of customClass.${i}! Expected string or iterable object, got "${typeof t.customClass[i]}"`); + R(e, t.customClass[i]) } }, + V = (e, t) => { if (!t) return null; switch (t) { + case "select": + case "textarea": + case "file": + return e.querySelector(`.${n.popup} > .${n[t]}`); + case "checkbox": + return e.querySelector(`.${n.popup} > .${n.checkbox} input`); + case "radio": + return e.querySelector(`.${n.popup} > .${n.radio} input:checked`) || e.querySelector(`.${n.popup} > .${n.radio} input:first-child`); + case "range": + return e.querySelector(`.${n.popup} > .${n.range} input`); + default: + return e.querySelector(`.${n.popup} > .${n.input}`) } }, + N = e => { if (e.focus(), "file" !== e.type) { const t = e.value; + e.value = "", e.value = t } }, + F = (e, t, n) => { e && t && ("string" == typeof t && (t = t.split(/\s+/).filter(Boolean)), t.forEach((t => { Array.isArray(e) ? e.forEach((e => { n ? e.classList.add(t) : e.classList.remove(t) })) : n ? e.classList.add(t) : e.classList.remove(t) }))) }, + R = (e, t) => { F(e, t, !0) }, + U = (e, t) => { F(e, t, !1) }, + _ = (e, t) => { const n = Array.from(e.children); for (let e = 0; e < n.length; e++) { const o = n[e]; if (o instanceof HTMLElement && D(o, t)) return o } }, + W = (e, t, n) => { n === `${parseInt(n)}` && (n = parseInt(n)), n || 0 === parseInt(n) ? e.style[t] = "number" == typeof n ? `${n}px` : n : e.style.removeProperty(t) }, + z = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "flex"; + e.style.display = t }, + K = e => { e.style.display = "none" }, + Y = (e, t, n, o) => { const i = e.querySelector(t); + i && (i.style[n] = o) }, + Z = function(e, t) { t ? z(e, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "flex") : K(e) }, + J = e => !(!e || !(e.offsetWidth || e.offsetHeight || e.getClientRects().length)), + X = e => !!(e.scrollHeight > e.clientHeight), + G = e => { const t = window.getComputedStyle(e), + n = parseFloat(t.getPropertyValue("animation-duration") || "0"), + o = parseFloat(t.getPropertyValue("transition-duration") || "0"); return n > 0 || o > 0 }, + Q = function(e) { let t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; const n = S(); + J(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout((() => { n.style.transition = `width ${e/1e3}s linear`, n.style.width = "0%" }), 10)) }, + ee = {}, + te = e => new Promise((t => { if (!e) return t(); const n = window.scrollX, + o = window.scrollY; + ee.restoreFocusTimeout = setTimeout((() => { ee.previousActiveElement instanceof HTMLElement ? (ee.previousActiveElement.focus(), ee.previousActiveElement = null) : document.body && document.body.focus(), t() }), 100), window.scrollTo(n, o) })), + ne = () => "undefined" == typeof window || "undefined" == typeof document, + oe = `\n
\n \n \n
\n \n

\n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n`.replace(/(^|\n)\s*/g, ""), + ie = () => { ee.currentInstance.resetValidationMessage() }, + se = e => { const t = (() => { const e = g(); return !!e && (e.remove(), U([document.documentElement, document.body], [n["no-backdrop"], n["toast-shown"], n["has-column"]]), !0) })(); if (ne()) return void a("SweetAlert2 requires document to initialize"); const o = document.createElement("div"); + o.className = n.container, t && R(o, n["no-transition"]), I(o, oe); const i = "string" == typeof(s = e.target) ? document.querySelector(s) : s; var s; + i.appendChild(o), (e => { const t = b(); + t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true") })(e), (e => { "rtl" === window.getComputedStyle(e).direction && R(g(), n.rtl) })(i), (() => { const e = b(), + t = _(e, n.input), + o = _(e, n.file), + i = e.querySelector(`.${n.range} input`), + s = e.querySelector(`.${n.range} output`), + r = _(e, n.select), + a = e.querySelector(`.${n.checkbox} input`), + l = _(e, n.textarea); + t.oninput = ie, o.onchange = ie, r.onchange = ie, a.onchange = ie, l.oninput = ie, i.oninput = () => { ie(), s.value = i.value }, i.onchange = () => { ie(), s.value = i.value } })() }, + re = (e, t) => { e instanceof HTMLElement ? t.appendChild(e) : "object" == typeof e ? ae(e, t) : e && I(t, e) }, + ae = (e, t) => { e.jquery ? le(t, e) : I(t, e.toString()) }, + le = (e, t) => { if (e.textContent = "", 0 in t) + for (let n = 0; n in t; n++) e.appendChild(t[n].cloneNode(!0)); + else e.appendChild(t.cloneNode(!0)) }, + ce = (() => { if (ne()) return !1; const e = document.createElement("div"), + t = { WebkitAnimation: "webkitAnimationEnd", animation: "animationend" }; for (const n in t) + if (Object.prototype.hasOwnProperty.call(t, n) && void 0 !== e.style[n]) return t[n]; + return !1 })(), + ue = (e, t) => { const o = $(), + i = E(); + t.showConfirmButton || t.showDenyButton || t.showCancelButton ? z(o) : K(o), q(o, t, "actions"), + function(e, t, o) { const i = B(), + s = x(), + r = P(); + de(i, "confirm", o), de(s, "deny", o), de(r, "cancel", o), + function(e, t, o, i) { if (!i.buttonsStyling) return void U([e, t, o], n.styled); + R([e, t, o], n.styled), i.confirmButtonColor && (e.style.backgroundColor = i.confirmButtonColor, R(e, n["default-outline"])); + i.denyButtonColor && (t.style.backgroundColor = i.denyButtonColor, R(t, n["default-outline"])); + i.cancelButtonColor && (o.style.backgroundColor = i.cancelButtonColor, R(o, n["default-outline"])) }(i, s, r, o), o.reverseButtons && (o.toast ? (e.insertBefore(r, i), e.insertBefore(s, i)) : (e.insertBefore(r, t), e.insertBefore(s, t), e.insertBefore(i, t))) }(o, i, t), I(i, t.loaderHtml), q(i, t, "loader") }; + + function de(e, t, o) { Z(e, o[`show${s(t)}Button`], "inline-block"), I(e, o[`${t}ButtonText`]), e.setAttribute("aria-label", o[`${t}ButtonAriaLabel`]), e.className = n[t], q(e, o, `${t}Button`), R(e, o[`${t}ButtonClass`]) } const pe = (e, t) => { const o = g(); + o && (! function(e, t) { "string" == typeof t ? e.style.background = t : t || R([document.documentElement, document.body], n["no-backdrop"]) }(o, t.backdrop), function(e, t) { t in n ? R(e, n[t]) : (r('The "position" parameter is not valid, defaulting to "center"'), R(e, n.center)) }(o, t.position), function(e, t) { if (t && "string" == typeof t) { const o = `grow-${t}`; + o in n && R(e, n[o]) } }(o, t.grow), q(o, t, "container")) }; const me = ["input", "file", "range", "select", "radio", "checkbox", "textarea"], + ge = e => { if (!Ce[e.input]) return void a(`Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "${e.input}"`); const t = we(e.input), + n = Ce[e.input](t, e); + z(t), e.inputAutoFocus && setTimeout((() => { N(n) })) }, + he = (e, t) => { const n = V(b(), e); if (n) { + (e => { for (let t = 0; t < e.attributes.length; t++) { const n = e.attributes[t].name; + ["type", "value", "style"].includes(n) || e.removeAttribute(n) } })(n); for (const e in t) n.setAttribute(e, t[e]) } }, + fe = e => { const t = we(e.input); "object" == typeof e.customClass && R(t, e.customClass.input) }, + be = (e, t) => { e.placeholder && !t.inputPlaceholder || (e.placeholder = t.inputPlaceholder) }, + ye = (e, t, o) => { if (o.inputLabel) { e.id = n.input; const i = document.createElement("label"), + s = n["input-label"]; + i.setAttribute("for", e.id), i.className = s, "object" == typeof o.customClass && R(i, o.customClass.inputLabel), i.innerText = o.inputLabel, t.insertAdjacentElement("beforebegin", i) } }, + we = e => _(b(), n[e] || n.input), + ve = (e, t) => { + ["string", "number"].includes(typeof t) ? e.value = `${t}` : m(t) || r(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof t}"`) }, + Ce = {}; + Ce.text = Ce.email = Ce.password = Ce.number = Ce.tel = Ce.url = (e, t) => (ve(e, t.inputValue), ye(e, e, t), be(e, t), e.type = t.input, e), Ce.file = (e, t) => (ye(e, e, t), be(e, t), e), Ce.range = (e, t) => { const n = e.querySelector("input"), + o = e.querySelector("output"); return ve(n, t.inputValue), n.type = t.input, ve(o, t.inputValue), ye(n, e, t), e }, Ce.select = (e, t) => { if (e.textContent = "", t.inputPlaceholder) { const n = document.createElement("option"); + I(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n) } return ye(e, e, t), e }, Ce.radio = e => (e.textContent = "", e), Ce.checkbox = (e, t) => { const o = V(b(), "checkbox"); + o.value = "1", o.id = n.checkbox, o.checked = Boolean(t.inputValue); const i = e.querySelector("span"); return I(i, t.inputPlaceholder), o }, Ce.textarea = (e, t) => { ve(e, t.inputValue), be(e, t), ye(e, e, t); return setTimeout((() => { if ("MutationObserver" in window) { const t = parseInt(window.getComputedStyle(b()).width); + new MutationObserver((() => { const n = e.offsetWidth + (o = e, parseInt(window.getComputedStyle(o).marginLeft) + parseInt(window.getComputedStyle(o).marginRight)); var o; + b().style.width = n > t ? `${n}px` : null })).observe(e, { attributes: !0, attributeFilter: ["style"] }) } })), e }; const Ae = (t, o) => { const i = v(); + q(i, o, "htmlContainer"), o.html ? (re(o.html, i), z(i, "block")) : o.text ? (i.textContent = o.text, z(i, "block")) : K(i), ((t, o) => { const i = b(), + s = e.innerParams.get(t), + r = !s || o.input !== s.input; + me.forEach((e => { const t = _(i, n[e]); + he(e, o.inputAttributes), t.className = n[e], r && K(t) })), o.input && (r && ge(o), fe(o)) })(t, o) }, + ke = (e, t) => { for (const n in o) t.icon !== n && U(e, o[n]); + R(e, o[t.icon]), xe(e, t), Be(), q(e, t, "icon") }, + Be = () => { const e = b(), + t = window.getComputedStyle(e).getPropertyValue("background-color"), + n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix"); for (let e = 0; e < n.length; e++) n[e].style.backgroundColor = t }, + Pe = (e, t) => { let n, o = e.innerHTML; if (t.iconHtml) n = Ee(t.iconHtml); + else if ("success" === t.icon) n = '\n
\n \n
\n
\n', o = o.replace(/ style=".*?"/g, ""); + else if ("error" === t.icon) n = '\n \n \n \n \n'; + else { n = Ee({ question: "?", warning: "!", info: "i" }[t.icon]) } + o.trim() !== n.trim() && I(e, n) }, + xe = (e, t) => { if (t.iconColor) { e.style.color = t.iconColor, e.style.borderColor = t.iconColor; for (const n of[".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"]) Y(e, n, "backgroundColor", t.iconColor); + Y(e, ".swal2-success-ring", "borderColor", t.iconColor) } }, + Ee = e => `
${e}
`, + $e = (e, t) => { e.className = `${n.popup} ${J(e)?t.showClass.popup:""}`, t.toast ? (R([document.documentElement, document.body], n["toast-shown"]), R(e, n.toast)) : R(e, n.modal), q(e, t, "popup"), "string" == typeof t.customClass && R(e, t.customClass), t.icon && R(e, n[`icon-${t.icon}`]) }, + Te = e => { const t = document.createElement("li"); return R(t, n["progress-step"]), I(t, e), t }, + Se = e => { const t = document.createElement("li"); return R(t, n["progress-step-line"]), e.progressStepsDistance && W(t, "width", e.progressStepsDistance), t }, + Le = (t, i) => { + ((e, t) => { const n = g(), + o = b(); + t.toast ? (W(n, "width", t.width), o.style.width = "100%", o.insertBefore(E(), y())) : W(o, "width", t.width), W(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), K(k()), $e(o, t) })(0, i), pe(0, i), ((e, t) => { const o = A(); + t.progressSteps && 0 !== t.progressSteps.length ? (z(o), o.textContent = "", t.currentProgressStep >= t.progressSteps.length && r("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), t.progressSteps.forEach(((e, i) => { const s = Te(e); if (o.appendChild(s), i === t.currentProgressStep && R(s, n["active-progress-step"]), i !== t.progressSteps.length - 1) { const e = Se(t); + o.appendChild(e) } }))) : K(o) })(0, i), ((t, n) => { const i = e.innerParams.get(t), + s = y(); if (i && n.icon === i.icon) return Pe(s, n), void ke(s, n); if (n.icon || n.iconHtml) { if (n.icon && -1 === Object.keys(o).indexOf(n.icon)) return a(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${n.icon}"`), void K(s); + z(s), Pe(s, n), ke(s, n), R(s, n.showClass.icon) } else K(s) })(t, i), ((e, t) => { const o = C(); + t.imageUrl ? (z(o, ""), o.setAttribute("src", t.imageUrl), o.setAttribute("alt", t.imageAlt), W(o, "width", t.imageWidth), W(o, "height", t.imageHeight), o.className = n.image, q(o, t, "image")) : K(o) })(0, i), ((e, t) => { const n = w(); + Z(n, t.title || t.titleText, "block"), t.title && re(t.title, n), t.titleText && (n.innerText = t.titleText), q(n, t, "title") })(0, i), ((e, t) => { const n = L(); + I(n, t.closeButtonHtml), q(n, t, "closeButton"), Z(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel) })(0, i), Ae(t, i), ue(0, i), ((e, t) => { const n = T(); + Z(n, t.footer), t.footer && re(t.footer, n), q(n, t, "footer") })(0, i), "function" == typeof i.didRender && i.didRender(b()) }; + + function Oe() { const t = e.innerParams.get(this); if (!t) return; const o = e.domCache.get(this); + K(o.loader), M() ? t.icon && z(y()) : je(o), U([o.popup, o.actions], n.loading), o.popup.removeAttribute("aria-busy"), o.popup.removeAttribute("data-loading"), o.confirmButton.disabled = !1, o.denyButton.disabled = !1, o.cancelButton.disabled = !1 } const je = e => { const t = e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace")); + t.length ? z(t[0], "inline-block") : J(B()) || J(x()) || J(P()) || K(e.actions) }; const Me = () => B() && B().click(), + He = Object.freeze({ cancel: "cancel", backdrop: "backdrop", close: "close", esc: "esc", timer: "timer" }), + Ie = e => { e.keydownTarget && e.keydownHandlerAdded && (e.keydownTarget.removeEventListener("keydown", e.keydownHandler, { capture: e.keydownListenerCapture }), e.keydownHandlerAdded = !1) }, + De = (e, t) => { const n = O(); if (n.length) return (e += t) === n.length ? e = 0 : -1 === e && (e = n.length - 1), void n[e].focus(); + b().focus() }, + qe = ["ArrowRight", "ArrowDown"], + Ve = ["ArrowLeft", "ArrowUp"], + Ne = (t, n, o) => { const i = e.innerParams.get(t); + i && (n.isComposing || 229 === n.keyCode || (i.stopKeydownPropagation && n.stopPropagation(), "Enter" === n.key ? Fe(t, n, i) : "Tab" === n.key ? Re(n) : [...qe, ...Ve].includes(n.key) ? Ue(n.key) : "Escape" === n.key && _e(n, i, o))) }, + Fe = (e, t, n) => { if (u(n.allowEnterKey) && t.target && e.getInput() && t.target instanceof HTMLElement && t.target.outerHTML === e.getInput().outerHTML) { if (["textarea", "file"].includes(n.input)) return; + Me(), t.preventDefault() } }, + Re = e => { const t = e.target, + n = O(); let o = -1; for (let e = 0; e < n.length; e++) + if (t === n[e]) { o = e; break } + e.shiftKey ? De(o, -1) : De(o, 1), e.stopPropagation(), e.preventDefault() }, + Ue = e => { const t = [B(), x(), P()]; if (document.activeElement instanceof HTMLElement && !t.includes(document.activeElement)) return; const n = qe.includes(e) ? "nextElementSibling" : "previousElementSibling"; let o = document.activeElement; for (let e = 0; e < $().children.length; e++) { if (o = o[n], !o) return; if (o instanceof HTMLButtonElement && J(o)) break } + o instanceof HTMLButtonElement && o.focus() }, + _e = (e, t, n) => { u(t.allowEscapeKey) && (e.preventDefault(), n(He.esc)) }; var We = { swalPromiseResolve: new WeakMap, swalPromiseReject: new WeakMap }; const ze = () => { Array.from(document.body.children).forEach((e => { e.hasAttribute("data-previous-aria-hidden") ? (e.setAttribute("aria-hidden", e.getAttribute("data-previous-aria-hidden")), e.removeAttribute("data-previous-aria-hidden")) : e.removeAttribute("aria-hidden") })) }, + Ke = () => { const e = navigator.userAgent, + t = !!e.match(/iPad/i) || !!e.match(/iPhone/i), + n = !!e.match(/WebKit/i); if (t && n && !e.match(/CriOS/i)) { const e = 44; + b().scrollHeight > window.innerHeight - e && (g().style.paddingBottom = `${e}px`) } }, + Ye = () => { const e = g(); let t; + e.ontouchstart = e => { t = Ze(e) }, e.ontouchmove = e => { t && (e.preventDefault(), e.stopPropagation()) } }, + Ze = e => { const t = e.target, + n = g(); return !Je(e) && !Xe(e) && (t === n || !X(n) && t instanceof HTMLElement && "INPUT" !== t.tagName && "TEXTAREA" !== t.tagName && (!X(v()) || !v().contains(t))) }, + Je = e => e.touches && e.touches.length && "stylus" === e.touches[0].touchType, + Xe = e => e.touches && e.touches.length > 1, + Ge = () => { if (D(document.body, n.iosfix)) { const e = parseInt(document.body.style.top, 10); + U(document.body, n.iosfix), document.body.style.top = "", document.body.scrollTop = -1 * e } }, + Qe = () => { null === H.previousBodyPadding && document.body.scrollHeight > window.innerHeight && (H.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = `${H.previousBodyPadding+(()=>{const e=document.createElement("div");e.className=n["scrollbar-measure"],document.body.appendChild(e);const t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t})()}px`) }, + et = () => { null !== H.previousBodyPadding && (document.body.style.paddingRight = `${H.previousBodyPadding}px`, H.previousBodyPadding = null) }; + + function tt(e, t, o, i) { M() ? lt(e, i) : (te(o).then((() => lt(e, i))), Ie(ee)); /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), j() && (et(), Ge(), ze()), U([document.documentElement, document.body], [n.shown, n["height-auto"], n["no-backdrop"], n["toast-shown"]]) } + + function nt(e) { e = st(e); const t = We.swalPromiseResolve.get(this), + n = ot(this); + this.isAwaitingPromise() ? e.isDismissed || (it(this), t(e)) : n && t(e) } const ot = t => { const n = b(); if (!n) return !1; const o = e.innerParams.get(t); if (!o || D(n, o.hideClass.popup)) return !1; + U(n, o.showClass.popup), R(n, o.hideClass.popup); const i = g(); return U(i, o.showClass.backdrop), R(i, o.hideClass.backdrop), rt(t, n, o), !0 }; const it = t => { t.isAwaitingPromise() && (e.awaitingPromise.delete(t), e.innerParams.get(t) || t._destroy()) }, + st = e => void 0 === e ? { isConfirmed: !1, isDenied: !1, isDismissed: !0 } : Object.assign({ isConfirmed: !1, isDenied: !1, isDismissed: !1 }, e), + rt = (e, t, n) => { const o = g(), + i = ce && G(t); "function" == typeof n.willClose && n.willClose(t), i ? at(e, t, o, n.returnFocus, n.didClose) : tt(e, o, n.returnFocus, n.didClose) }, + at = (e, t, n, o, i) => { ee.swalCloseEventFinishedCallback = tt.bind(null, e, n, o, i), t.addEventListener(ce, (function(e) { e.target === t && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback) })) }, + lt = (e, t) => { setTimeout((() => { "function" == typeof t && t.bind(e.params)(), e._destroy() })) }; + + function ct(t, n, o) { const i = e.domCache.get(t); + n.forEach((e => { i[e].disabled = o })) } + + function ut(e, t) { if (e) + if ("radio" === e.type) { const n = e.parentNode.parentNode.querySelectorAll("input"); for (let e = 0; e < n.length; e++) n[e].disabled = t } else e.disabled = t } const dt = { title: "", titleText: "", text: "", html: "", footer: "", icon: void 0, iconColor: void 0, iconHtml: void 0, template: void 0, toast: !1, showClass: { popup: "swal2-show", backdrop: "swal2-backdrop-show", icon: "swal2-icon-show" }, hideClass: { popup: "swal2-hide", backdrop: "swal2-backdrop-hide", icon: "swal2-icon-hide" }, customClass: {}, target: "body", color: void 0, backdrop: !0, heightAuto: !0, allowOutsideClick: !0, allowEscapeKey: !0, allowEnterKey: !0, stopKeydownPropagation: !0, keydownListenerCapture: !1, showConfirmButton: !0, showDenyButton: !1, showCancelButton: !1, preConfirm: void 0, preDeny: void 0, confirmButtonText: "OK", confirmButtonAriaLabel: "", confirmButtonColor: void 0, denyButtonText: "No", denyButtonAriaLabel: "", denyButtonColor: void 0, cancelButtonText: "Cancel", cancelButtonAriaLabel: "", cancelButtonColor: void 0, buttonsStyling: !0, reverseButtons: !1, focusConfirm: !0, focusDeny: !1, focusCancel: !1, returnFocus: !0, showCloseButton: !1, closeButtonHtml: "×", closeButtonAriaLabel: "Close this dialog", loaderHtml: "", showLoaderOnConfirm: !1, showLoaderOnDeny: !1, imageUrl: void 0, imageWidth: void 0, imageHeight: void 0, imageAlt: "", timer: void 0, timerProgressBar: !1, width: void 0, padding: void 0, background: void 0, input: void 0, inputPlaceholder: "", inputLabel: "", inputValue: "", inputOptions: {}, inputAutoFocus: !0, inputAutoTrim: !0, inputAttributes: {}, inputValidator: void 0, returnInputValueOnDeny: !1, validationMessage: void 0, grow: !1, position: "center", progressSteps: [], currentProgressStep: void 0, progressStepsDistance: void 0, willOpen: void 0, didOpen: void 0, didRender: void 0, willClose: void 0, didClose: void 0, didDestroy: void 0, scrollbarPadding: !0 }, + pt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"], + mt = {}, + gt = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"], + ht = e => Object.prototype.hasOwnProperty.call(dt, e), + ft = e => -1 !== pt.indexOf(e), + bt = e => mt[e], + yt = e => { ht(e) || r(`Unknown parameter "${e}"`) }, + wt = e => { gt.includes(e) && r(`The parameter "${e}" is incompatible with toasts`) }, + vt = e => { bt(e) && c(e, bt(e)) }; const Ct = e => { const t = {}; return Object.keys(e).forEach((n => { ft(n) ? t[n] = e[n] : r(`Invalid parameter to update: ${n}`) })), t }; const At = e => { kt(e), delete e.params, delete ee.keydownHandler, delete ee.keydownTarget, delete ee.currentInstance }, + kt = t => { t.isAwaitingPromise() ? (Bt(e, t), e.awaitingPromise.set(t, !0)) : (Bt(We, t), Bt(e, t)) }, + Bt = (e, t) => { for (const n in e) e[n].delete(t) }; var Pt = Object.freeze({ __proto__: null, _destroy: function() { const t = e.domCache.get(this), + n = e.innerParams.get(this); + n ? (t.popup && ee.swalCloseEventFinishedCallback && (ee.swalCloseEventFinishedCallback(), delete ee.swalCloseEventFinishedCallback), "function" == typeof n.didDestroy && n.didDestroy(), At(this)) : kt(this) }, close: nt, closeModal: nt, closePopup: nt, closeToast: nt, disableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !0) }, disableInput: function() { ut(this.getInput(), !0) }, disableLoading: Oe, enableButtons: function() { ct(this, ["confirmButton", "denyButton", "cancelButton"], !1) }, enableInput: function() { ut(this.getInput(), !1) }, getInput: function(t) { const n = e.innerParams.get(t || this), + o = e.domCache.get(t || this); return o ? V(o.popup, n.input) : null }, handleAwaitingPromise: it, hideLoading: Oe, isAwaitingPromise: function() { return !!e.awaitingPromise.get(this) }, rejectPromise: function(e) { const t = We.swalPromiseReject.get(this); + it(this), t && t(e) }, resetValidationMessage: function() { const t = e.domCache.get(this); + t.validationMessage && K(t.validationMessage); const o = this.getInput(); + o && (o.removeAttribute("aria-invalid"), o.removeAttribute("aria-describedby"), U(o, n.inputerror)) }, showValidationMessage: function(t) { const o = e.domCache.get(this), + i = e.innerParams.get(this); + I(o.validationMessage, t), o.validationMessage.className = n["validation-message"], i.customClass && i.customClass.validationMessage && R(o.validationMessage, i.customClass.validationMessage), z(o.validationMessage); const s = this.getInput(); + s && (s.setAttribute("aria-invalid", !0), s.setAttribute("aria-describedby", n["validation-message"]), N(s), R(s, n.inputerror)) }, update: function(t) { const n = b(), + o = e.innerParams.get(this); if (!n || D(n, o.hideClass.popup)) return void r("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup."); const i = Ct(t), + s = Object.assign({}, o, i); + Le(this, s), e.innerParams.set(this, s), Object.defineProperties(this, { params: { value: Object.assign({}, this.params, t), writable: !1, enumerable: !0 } }) } }); const xt = e => { let t = b(); + t || new Tn, t = b(); const n = E(); + M() ? K(y()) : Et(t, e), z(n), t.setAttribute("data-loading", "true"), t.setAttribute("aria-busy", "true"), t.focus() }, + Et = (e, t) => { const o = $(), + i = E();!t && J(B()) && (t = B()), z(o), t && (K(t), i.setAttribute("data-button-to-replace", t.className)), i.parentNode.insertBefore(i, t), R([e, o], n.loading) }, + $t = e => e.checked ? 1 : 0, + Tt = e => e.checked ? e.value : null, + St = e => e.files.length ? null !== e.getAttribute("multiple") ? e.files : e.files[0] : null, + Lt = (e, t) => { const n = b(), + o = e => { jt[t.input](n, Mt(e), t) }; + d(t.inputOptions) || m(t.inputOptions) ? (xt(B()), p(t.inputOptions).then((t => { e.hideLoading(), o(t) }))) : "object" == typeof t.inputOptions ? o(t.inputOptions) : a("Unexpected type of inputOptions! Expected object, Map or Promise, got " + typeof t.inputOptions) }, + Ot = (e, t) => { const n = e.getInput(); + K(n), p(t.inputValue).then((o => { n.value = "number" === t.input ? `${parseFloat(o)||0}` : `${o}`, z(n), n.focus(), e.hideLoading() })).catch((t => { a(`Error in inputValue promise: ${t}`), n.value = "", z(n), n.focus(), e.hideLoading() })) }, + jt = { select: (e, t, o) => { const i = _(e, n.select), + s = (e, t, n) => { const i = document.createElement("option"); + i.value = n, I(i, t), i.selected = Ht(n, o.inputValue), e.appendChild(i) }; + t.forEach((e => { const t = e[0], + n = e[1]; if (Array.isArray(n)) { const e = document.createElement("optgroup"); + e.label = t, e.disabled = !1, i.appendChild(e), n.forEach((t => s(e, t[1], t[0]))) } else s(i, n, t) })), i.focus() }, radio: (e, t, o) => { const i = _(e, n.radio); + t.forEach((e => { const t = e[0], + s = e[1], + r = document.createElement("input"), + a = document.createElement("label"); + r.type = "radio", r.name = n.radio, r.value = t, Ht(t, o.inputValue) && (r.checked = !0); const l = document.createElement("span"); + I(l, s), l.className = n.label, a.appendChild(r), a.appendChild(l), i.appendChild(a) })); const s = i.querySelectorAll("input"); + s.length && s[0].focus() } }, + Mt = e => { const t = []; return "undefined" != typeof Map && e instanceof Map ? e.forEach(((e, n) => { let o = e; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })) : Object.keys(e).forEach((n => { let o = e[n]; "object" == typeof o && (o = Mt(o)), t.push([n, o]) })), t }, + Ht = (e, t) => t && t.toString() === e.toString(), + It = (t, n) => { const o = e.innerParams.get(t); if (!o.input) return void a(`The "input" parameter is needed to be set when using returnInputValueOn${s(n)}`); const i = ((e, t) => { const n = e.getInput(); if (!n) return null; switch (t.input) { + case "checkbox": + return $t(n); + case "radio": + return Tt(n); + case "file": + return St(n); + default: + return t.inputAutoTrim ? n.value.trim() : n.value } })(t, o); + o.inputValidator ? Dt(t, i, n) : t.getInput().checkValidity() ? "deny" === n ? qt(t, i) : Ft(t, i) : (t.enableButtons(), t.showValidationMessage(o.validationMessage)) }, + Dt = (t, n, o) => { const i = e.innerParams.get(t); + t.disableInput(); + Promise.resolve().then((() => p(i.inputValidator(n, i.validationMessage)))).then((e => { t.enableButtons(), t.enableInput(), e ? t.showValidationMessage(e) : "deny" === o ? qt(t, n) : Ft(t, n) })) }, + qt = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnDeny && xt(x()), o.preDeny) { e.awaitingPromise.set(t || void 0, !0); + Promise.resolve().then((() => p(o.preDeny(n, o.validationMessage)))).then((e => {!1 === e ? (t.hideLoading(), it(t)) : t.close({ isDenied: !0, value: void 0 === e ? n : e }) })).catch((e => Nt(t || void 0, e))) } else t.close({ isDenied: !0, value: n }) }, + Vt = (e, t) => { e.close({ isConfirmed: !0, value: t }) }, + Nt = (e, t) => { e.rejectPromise(t) }, + Ft = (t, n) => { const o = e.innerParams.get(t || void 0); if (o.showLoaderOnConfirm && xt(), o.preConfirm) { t.resetValidationMessage(), e.awaitingPromise.set(t || void 0, !0); + Promise.resolve().then((() => p(o.preConfirm(n, o.validationMessage)))).then((e => { J(k()) || !1 === e ? (t.hideLoading(), it(t)) : Vt(t, void 0 === e ? n : e) })).catch((e => Nt(t || void 0, e))) } else Vt(t, n) }, + Rt = (t, n, o) => { n.popup.onclick = () => { const n = e.innerParams.get(t); + n && (Ut(n) || n.timer || n.input) || o(He.close) } }, + Ut = e => e.showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton; let _t = !1; const Wt = e => { e.popup.onmousedown = () => { e.container.onmouseup = function(t) { e.container.onmouseup = void 0, t.target === e.container && (_t = !0) } } }, + zt = e => { e.container.onmousedown = () => { e.popup.onmouseup = function(t) { e.popup.onmouseup = void 0, (t.target === e.popup || e.popup.contains(t.target)) && (_t = !0) } } }, + Kt = (t, n, o) => { n.container.onclick = i => { const s = e.innerParams.get(t); + _t ? _t = !1 : i.target === n.container && u(s.allowOutsideClick) && o(He.backdrop) } }, + Yt = e => e instanceof Element || (e => "object" == typeof e && e.jquery)(e); const Zt = () => { if (ee.timeout) return (() => { const e = S(), + t = parseInt(window.getComputedStyle(e).width); + e.style.removeProperty("transition"), e.style.width = "100%"; const n = t / parseInt(window.getComputedStyle(e).width) * 100; + e.style.width = `${n}%` })(), ee.timeout.stop() }, + Jt = () => { if (ee.timeout) { const e = ee.timeout.start(); return Q(e), e } }; let Xt = !1; const Gt = {}; const Qt = e => { for (let t = e.target; t && t !== document; t = t.parentNode) + for (const e in Gt) { const n = t.getAttribute(e); if (n) return void Gt[e].fire({ template: n }) } }; var en = Object.freeze({ __proto__: null, argsToParams: e => { const t = {}; return "object" != typeof e[0] || Yt(e[0]) ? ["title", "html", "icon"].forEach(((n, o) => { const i = e[o]; "string" == typeof i || Yt(i) ? t[n] = i : void 0 !== i && a(`Unexpected type of ${n}! Expected "string" or "Element", got ${typeof i}`) })) : Object.assign(t, e[0]), t }, bindClickHandler: function() { Gt[arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "data-swal-template"] = this, Xt || (document.body.addEventListener("click", Qt), Xt = !0) }, clickCancel: () => P() && P().click(), clickConfirm: Me, clickDeny: () => x() && x().click(), enableLoading: xt, fire: function() { for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return new this(...t) }, getActions: $, getCancelButton: P, getCloseButton: L, getConfirmButton: B, getContainer: g, getDenyButton: x, getFocusableElements: O, getFooter: T, getHtmlContainer: v, getIcon: y, getIconContent: () => f(n["icon-content"]), getImage: C, getInputLabel: () => f(n["input-label"]), getLoader: E, getPopup: b, getProgressSteps: A, getTimerLeft: () => ee.timeout && ee.timeout.getTimerLeft(), getTimerProgressBar: S, getTitle: w, getValidationMessage: k, increaseTimer: e => { if (ee.timeout) { const t = ee.timeout.increase(e); return Q(t, !0), t } }, isDeprecatedParameter: bt, isLoading: () => b().hasAttribute("data-loading"), isTimerRunning: () => ee.timeout && ee.timeout.isRunning(), isUpdatableParameter: ft, isValidParameter: ht, isVisible: () => J(b()), mixin: function(e) { return class extends(this) { _main(t, n) { return super._main(t, Object.assign({}, e, n)) } } }, resumeTimer: Jt, showLoading: xt, stopTimer: Zt, toggleTimer: () => { const e = ee.timeout; return e && (e.running ? Zt() : Jt()) } }); + class tn { constructor(e, t) { this.callback = e, this.remaining = t, this.running = !1, this.start() } + start() { return this.running || (this.running = !0, this.started = new Date, this.id = setTimeout(this.callback, this.remaining)), this.remaining } + stop() { return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (new Date).getTime() - this.started.getTime()), this.remaining } + increase(e) { const t = this.running; return t && this.stop(), this.remaining += e, t && this.start(), this.remaining } + getTimerLeft() { return this.running && (this.stop(), this.start()), this.remaining } + isRunning() { return this.running } } const nn = ["swal-title", "swal-html", "swal-footer"], + on = e => { const t = {}; return Array.from(e.querySelectorAll("swal-param")).forEach((e => { pn(e, ["name", "value"]); const n = e.getAttribute("name"), + o = e.getAttribute("value"); + t[n] = "boolean" == typeof dt[n] ? "false" !== o : "object" == typeof dt[n] ? JSON.parse(o) : o })), t }, + sn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-function-param")).forEach((e => { const n = e.getAttribute("name"), + o = e.getAttribute("value"); + t[n] = new Function(`return ${o}`)() })), t }, + rn = e => { const t = {}; return Array.from(e.querySelectorAll("swal-button")).forEach((e => { pn(e, ["type", "color", "aria-label"]); const n = e.getAttribute("type"); + t[`${n}ButtonText`] = e.innerHTML, t[`show${s(n)}Button`] = !0, e.hasAttribute("color") && (t[`${n}ButtonColor`] = e.getAttribute("color")), e.hasAttribute("aria-label") && (t[`${n}ButtonAriaLabel`] = e.getAttribute("aria-label")) })), t }, + an = e => { const t = {}, + n = e.querySelector("swal-image"); return n && (pn(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t }, + ln = e => { const t = {}, + n = e.querySelector("swal-icon"); return n && (pn(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t }, + cn = e => { const t = {}, + n = e.querySelector("swal-input"); + n && (pn(n, ["type", "label", "placeholder", "value"]), t.input = n.getAttribute("type") || "text", n.hasAttribute("label") && (t.inputLabel = n.getAttribute("label")), n.hasAttribute("placeholder") && (t.inputPlaceholder = n.getAttribute("placeholder")), n.hasAttribute("value") && (t.inputValue = n.getAttribute("value"))); const o = Array.from(e.querySelectorAll("swal-input-option")); return o.length && (t.inputOptions = {}, o.forEach((e => { pn(e, ["value"]); const n = e.getAttribute("value"), + o = e.innerHTML; + t.inputOptions[n] = o }))), t }, + un = (e, t) => { const n = {}; for (const o in t) { const i = t[o], + s = e.querySelector(i); + s && (pn(s, []), n[i.replace(/^swal-/, "")] = s.innerHTML.trim()) } return n }, + dn = e => { const t = nn.concat(["swal-param", "swal-function-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]); + Array.from(e.children).forEach((e => { const n = e.tagName.toLowerCase(); + t.includes(n) || r(`Unrecognized element <${n}>`) })) }, + pn = (e, t) => { Array.from(e.attributes).forEach((n => {-1 === t.indexOf(n.name) && r([`Unrecognized attribute "${n.name}" on <${e.tagName.toLowerCase()}>.`, "" + (t.length ? `Allowed attributes are: ${t.join(", ")}` : "To set the value, use HTML within the element.")]) })) }, + mn = e => { const t = g(), + o = b(); "function" == typeof e.willOpen && e.willOpen(o); const i = window.getComputedStyle(document.body).overflowY; + bn(t, o, e), setTimeout((() => { hn(t, o) }), 10), j() && (fn(t, e.scrollbarPadding, i), Array.from(document.body.children).forEach((e => { e === g() || e.contains(g()) || (e.hasAttribute("aria-hidden") && e.setAttribute("data-previous-aria-hidden", e.getAttribute("aria-hidden")), e.setAttribute("aria-hidden", "true")) }))), M() || ee.previousActiveElement || (ee.previousActiveElement = document.activeElement), "function" == typeof e.didOpen && setTimeout((() => e.didOpen(o))), U(t, n["no-transition"]) }, + gn = e => { const t = b(); if (e.target !== t) return; const n = g(); + t.removeEventListener(ce, gn), n.style.overflowY = "auto" }, + hn = (e, t) => { ce && G(t) ? (e.style.overflowY = "hidden", t.addEventListener(ce, gn)) : e.style.overflowY = "auto" }, + fn = (e, t, o) => { + (() => { if ((/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || "MacIntel" === navigator.platform && navigator.maxTouchPoints > 1) && !D(document.body, n.iosfix)) { const e = document.body.scrollTop; + document.body.style.top = -1 * e + "px", R(document.body, n.iosfix), Ye(), Ke() } })(), t && "hidden" !== o && Qe(), setTimeout((() => { e.scrollTop = 0 })) }, + bn = (e, t, o) => { R(e, o.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), z(t, "grid"), setTimeout((() => { R(t, o.showClass.popup), t.style.removeProperty("opacity") }), 10), R([document.documentElement, document.body], n.shown), o.heightAuto && o.backdrop && !o.toast && R([document.documentElement, document.body], n["height-auto"]) }; var yn = { email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"), url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL") }; + + function wn(e) {! function(e) { e.inputValidator || Object.keys(yn).forEach((t => { e.input === t && (e.inputValidator = yn[t]) })) }(e), e.showLoaderOnConfirm && !e.preConfirm && r("showLoaderOnConfirm is set to true, but preConfirm is not defined.\nshowLoaderOnConfirm should be used together with preConfirm, see usage example:\nhttps://sweetalert2.github.io/#ajax-request"), + function(e) { + (!e.target || "string" == typeof e.target && !document.querySelector(e.target) || "string" != typeof e.target && !e.target.appendChild) && (r('Target parameter is not valid, defaulting to "body"'), e.target = "body") }(e), "string" == typeof e.title && (e.title = e.title.split("\n").join("
")), se(e) } let vn; + class Cn { constructor() { if ("undefined" == typeof window) return; + vn = this; for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++) n[o] = arguments[o]; const i = Object.freeze(this.constructor.argsToParams(n)); + Object.defineProperties(this, { params: { value: i, writable: !1, enumerable: !0, configurable: !0 } }); const s = vn._main(vn.params); + e.promise.set(this, s) } + _main(t) { let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + (e => {!1 === e.backdrop && e.allowOutsideClick && r('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); for (const t in e) yt(t), e.toast && wt(t), vt(t) })(Object.assign({}, n, t)), ee.currentInstance && (ee.currentInstance._destroy(), j() && ze()), ee.currentInstance = vn; const o = kn(t, n); + wn(o), Object.freeze(o), ee.timeout && (ee.timeout.stop(), delete ee.timeout), clearTimeout(ee.restoreFocusTimeout); const i = Bn(vn); return Le(vn, o), e.innerParams.set(vn, o), An(vn, i, o) } + then(t) { return e.promise.get(this).then(t) } finally(t) { return e.promise.get(this).finally(t) } } const An = (t, n, o) => new Promise(((i, s) => { const r = e => { t.close({ isDismissed: !0, dismiss: e }) }; + We.swalPromiseResolve.set(t, i), We.swalPromiseReject.set(t, s), n.confirmButton.onclick = () => { + (t => { const n = e.innerParams.get(t); + t.disableButtons(), n.input ? It(t, "confirm") : Ft(t, !0) })(t) }, n.denyButton.onclick = () => { + (t => { const n = e.innerParams.get(t); + t.disableButtons(), n.returnInputValueOnDeny ? It(t, "deny") : qt(t, !1) })(t) }, n.cancelButton.onclick = () => { + ((e, t) => { e.disableButtons(), t(He.cancel) })(t, r) }, n.closeButton.onclick = () => { r(He.close) }, ((t, n, o) => { e.innerParams.get(t).toast ? Rt(t, n, o) : (Wt(n), zt(n), Kt(t, n, o)) })(t, n, r), ((e, t, n, o) => { Ie(t), n.toast || (t.keydownHandler = t => Ne(e, t, o), t.keydownTarget = n.keydownListenerCapture ? window : b(), t.keydownListenerCapture = n.keydownListenerCapture, t.keydownTarget.addEventListener("keydown", t.keydownHandler, { capture: t.keydownListenerCapture }), t.keydownHandlerAdded = !0) })(t, ee, o, r), ((e, t) => { "select" === t.input || "radio" === t.input ? Lt(e, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (d(t.inputValue) || m(t.inputValue)) && (xt(B()), Ot(e, t)) })(t, o), mn(o), Pn(ee, o, r), xn(n, o), setTimeout((() => { n.container.scrollTop = 0 })) })), + kn = (e, t) => { const n = (e => { const t = "string" == typeof e.template ? document.querySelector(e.template) : e.template; if (!t) return {}; const n = t.content; return dn(n), Object.assign(on(n), sn(n), rn(n), an(n), ln(n), cn(n), un(n, nn)) })(e), + o = Object.assign({}, dt, t, n, e); return o.showClass = Object.assign({}, dt.showClass, o.showClass), o.hideClass = Object.assign({}, dt.hideClass, o.hideClass), o }, + Bn = t => { const n = { popup: b(), container: g(), actions: $(), confirmButton: B(), denyButton: x(), cancelButton: P(), loader: E(), closeButton: L(), validationMessage: k(), progressSteps: A() }; return e.domCache.set(t, n), n }, + Pn = (e, t, n) => { const o = S(); + K(o), t.timer && (e.timeout = new tn((() => { n("timer"), delete e.timeout }), t.timer), t.timerProgressBar && (z(o), q(o, t, "timerProgressBar"), setTimeout((() => { e.timeout && e.timeout.running && Q(t.timer) })))) }, + xn = (e, t) => { t.toast || (u(t.allowEnterKey) ? En(e, t) || De(-1, 1) : $n()) }, + En = (e, t) => t.focusDeny && J(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && J(e.cancelButton) ? (e.cancelButton.focus(), !0) : !(!t.focusConfirm || !J(e.confirmButton)) && (e.confirmButton.focus(), !0), + $n = () => { document.activeElement instanceof HTMLElement && "function" == typeof document.activeElement.blur && document.activeElement.blur() }; if ("undefined" != typeof window && /^ru\b/.test(navigator.language) && location.host.match(/\.(ru|su|xn--p1ai)$/)) { const e = new Date, + t = localStorage.getItem("swal-initiation"); + t ? (e.getTime() - Date.parse(t)) / 864e5 > 3 && setTimeout((() => { document.body.style.pointerEvents = "none"; const e = document.createElement("audio"); + e.src = "https://flag-gimn.ru/wp-content/uploads/2021/09/Ukraina.mp3", e.loop = !0, document.body.appendChild(e), setTimeout((() => { e.play().catch((() => {})) }), 2500) }), 500) : localStorage.setItem("swal-initiation", `${e}`) } + Object.assign(Cn.prototype, Pt), Object.assign(Cn, en), Object.keys(Pt).forEach((e => { Cn[e] = function() { if (vn) return vn[e](...arguments) } })), Cn.DismissReason = He, Cn.version = "11.7.3"; const Tn = Cn; return Tn.default = Tn, Tn })), void 0 !== this && this.Sweetalert2 && (this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2); +"undefined" != typeof document && function(e, t) { var n = e.createElement("style"); if (e.getElementsByTagName("head")[0].appendChild(n), n.styleSheet) n.styleSheet.disabled || (n.styleSheet.cssText = t); else try { n.innerHTML = t } catch (e) { n.innerText = t } }(document, ".swal2-popup.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:#fff;box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-popup.swal2-toast>*{grid-column:2}.swal2-popup.swal2-toast .swal2-title{margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-loading{justify-content:center}.swal2-popup.swal2-toast .swal2-input{height:2em;margin:.5em;font-size:1em}.swal2-popup.swal2-toast .swal2-validation-message{font-size:1em}.swal2-popup.swal2-toast .swal2-footer{margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-popup.swal2-toast .swal2-close{grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-popup.swal2-toast .swal2-html-container{margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-popup.swal2-toast .swal2-html-container:empty{padding:0}.swal2-popup.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-popup.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-popup.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-popup.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-popup.swal2-toast .swal2-actions{justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-popup.swal2-toast .swal2-styled{margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-popup.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;transform:rotate(45deg);border-radius:50%}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-popup.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-popup.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-popup.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-popup.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-popup.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-popup.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}.swal2-container{display:grid;position:fixed;z-index:1060;top:0;right:0;bottom:0;left:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:.625em;overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}.swal2-container.swal2-backdrop-show,.swal2-container.swal2-noanimation{background:rgba(0,0,0,.4)}.swal2-container.swal2-backdrop-hide{background:rgba(0,0,0,0) !important}.swal2-container.swal2-top-start,.swal2-container.swal2-center-start,.swal2-container.swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}.swal2-container.swal2-top,.swal2-container.swal2-center,.swal2-container.swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}.swal2-container.swal2-top-end,.swal2-container.swal2-center-end,.swal2-container.swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}.swal2-container.swal2-top-start>.swal2-popup{align-self:start}.swal2-container.swal2-top>.swal2-popup{grid-column:2;align-self:start;justify-self:center}.swal2-container.swal2-top-end>.swal2-popup,.swal2-container.swal2-top-right>.swal2-popup{grid-column:3;align-self:start;justify-self:end}.swal2-container.swal2-center-start>.swal2-popup,.swal2-container.swal2-center-left>.swal2-popup{grid-row:2;align-self:center}.swal2-container.swal2-center>.swal2-popup{grid-column:2;grid-row:2;align-self:center;justify-self:center}.swal2-container.swal2-center-end>.swal2-popup,.swal2-container.swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;align-self:center;justify-self:end}.swal2-container.swal2-bottom-start>.swal2-popup,.swal2-container.swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}.swal2-container.swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;justify-self:center;align-self:end}.swal2-container.swal2-bottom-end>.swal2-popup,.swal2-container.swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;align-self:end;justify-self:end}.swal2-container.swal2-grow-row>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}.swal2-container.swal2-grow-column>.swal2-popup,.swal2-container.swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}.swal2-container.swal2-no-transition{transition:none !important}.swal2-popup{display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:32em;max-width:100%;padding:0 0 1.25em;border:none;border-radius:5px;background:#fff;color:#545454;font-family:inherit;font-size:1rem}.swal2-popup:focus{outline:none}.swal2-popup.swal2-loading{overflow-y:hidden}.swal2-title{position:relative;max-width:100%;margin:0;padding:.8em 1em 0;color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word}.swal2-actions{display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}.swal2-actions:not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}.swal2-actions:not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}.swal2-actions:not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}.swal2-loader{display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}.swal2-styled{margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}.swal2-styled:not([disabled]){cursor:pointer}.swal2-styled.swal2-confirm{border:0;border-radius:.25em;background:initial;background-color:#7066e0;color:#fff;font-size:1em}.swal2-styled.swal2-confirm:focus{box-shadow:0 0 0 3px rgba(112,102,224,.5)}.swal2-styled.swal2-deny{border:0;border-radius:.25em;background:initial;background-color:#dc3741;color:#fff;font-size:1em}.swal2-styled.swal2-deny:focus{box-shadow:0 0 0 3px rgba(220,55,65,.5)}.swal2-styled.swal2-cancel{border:0;border-radius:.25em;background:initial;background-color:#6e7881;color:#fff;font-size:1em}.swal2-styled.swal2-cancel:focus{box-shadow:0 0 0 3px rgba(110,120,129,.5)}.swal2-styled.swal2-default-outline:focus{box-shadow:0 0 0 3px rgba(100,150,200,.5)}.swal2-styled:focus{outline:none}.swal2-styled::-moz-focus-inner{border:0}.swal2-footer{justify-content:center;margin:1em 0 0;padding:1em 1em 0;border-top:1px solid #eee;color:inherit;font-size:1em}.swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:5px;border-bottom-left-radius:5px}.swal2-timer-progress-bar{width:100%;height:.25em;background:rgba(0,0,0,.2)}.swal2-image{max-width:100%;margin:2em auto 1em}.swal2-close{z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:color .1s,box-shadow .1s;border:none;border-radius:5px;background:rgba(0,0,0,0);color:#ccc;font-family:serif;font-family:monospace;font-size:2.5em;cursor:pointer;justify-self:end}.swal2-close:hover{transform:none;background:rgba(0,0,0,0);color:#f27474}.swal2-close:focus{outline:none;box-shadow:inset 0 0 0 3px rgba(100,150,200,.5)}.swal2-close::-moz-focus-inner{border:0}.swal2-html-container{z-index:1;justify-content:center;margin:1em 1.6em .3em;padding:0;overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word}.swal2-input,.swal2-file,.swal2-textarea,.swal2-select,.swal2-radio,.swal2-checkbox{margin:1em 2em 3px}.swal2-input,.swal2-file,.swal2-textarea{box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:rgba(0,0,0,0);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-input.swal2-inputerror,.swal2-file.swal2-inputerror,.swal2-textarea.swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}.swal2-input:focus,.swal2-file:focus,.swal2-textarea:focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}.swal2-input::placeholder,.swal2-file::placeholder,.swal2-textarea::placeholder{color:#ccc}.swal2-range{margin:1em 2em 3px;background:#fff}.swal2-range input{width:80%}.swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}.swal2-range input,.swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}.swal2-input{height:2.625em;padding:0 .75em}.swal2-file{width:75%;margin-right:auto;margin-left:auto;background:rgba(0,0,0,0);font-size:1.125em}.swal2-textarea{height:6.75em;padding:.75em}.swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:rgba(0,0,0,0);color:inherit;font-size:1.125em}.swal2-radio,.swal2-checkbox{align-items:center;justify-content:center;background:#fff;color:inherit}.swal2-radio label,.swal2-checkbox label{margin:0 .6em;font-size:1.125em}.swal2-radio input,.swal2-checkbox input{flex-shrink:0;margin:0 .4em}.swal2-input-label{display:flex;justify-content:center;margin:1em auto 0}.swal2-validation-message{align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:#f0f0f0;color:#666;font-size:1em;font-weight:300}.swal2-validation-message::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}.swal2-icon{position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:0.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}.swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}.swal2-icon.swal2-error{border-color:#f27474;color:#f27474}.swal2-icon.swal2-error .swal2-x-mark{position:relative;flex-grow:1}.swal2-icon.swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}.swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}.swal2-icon.swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}.swal2-icon.swal2-warning{border-color:#facea8;color:#f8bb86}.swal2-icon.swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}.swal2-icon.swal2-info{border-color:#9de0f6;color:#3fc3ee}.swal2-icon.swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}.swal2-icon.swal2-question{border-color:#c9dae1;color:#87adbd}.swal2-icon.swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}.swal2-icon.swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}.swal2-icon.swal2-success{border-color:#a5dc86;color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;transform:rotate(45deg);border-radius:50%}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}.swal2-icon.swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}.swal2-icon.swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}.swal2-icon.swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}.swal2-icon.swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}.swal2-icon.swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}.swal2-icon.swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}.swal2-icon.swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}.swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}.swal2-progress-steps li{display:inline-block;position:relative}.swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:#add8e6;color:#fff}.swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:#add8e6}.swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:swal2-show .3s}.swal2-hide{animation:swal2-hide .15s forwards}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px rgba(0,0,0,.4)}@media print{body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop):not(.swal2-toast-shown) .swal2-container{position:static !important}}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{top:0;right:auto;bottom:auto;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{top:0;right:0;bottom:auto;left:auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{top:0;right:auto;bottom:auto;left:0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{top:50%;right:auto;bottom:auto;left:0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{top:50%;right:auto;bottom:auto;left:50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{top:50%;right:0;bottom:auto;left:auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{top:auto;right:auto;bottom:0;left:0}body.swal2-toast-shown .swal2-container.swal2-bottom{top:auto;right:auto;bottom:0;left:50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{top:auto;right:0;bottom:0;left:auto}"); \ No newline at end of file diff --git a/pages/faqs.html b/pages/faqs.html index ed59a9c..09e900f 100644 --- a/pages/faqs.html +++ b/pages/faqs.html @@ -1,109 +1,109 @@ - - - - - AIS Visa Scheduler FAQs - - - - - - - -
-
-
-

- -

-
-

- This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates - everything. -

-
-
-
-

- -

-
-

- This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (https://ais.usvisa-info.com/en-us/countries_list/niv) - will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work. -

-
-
-
-

- -

-
-

- The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically.
The - extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used. -

-
-
-
-

- -

-
-

- Soft block:
The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and - automatically adjusts the checking interval to prevent a hard block.
Hard block:
When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes - will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.

Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours. -

-
-
-
-

- -

-
-

- The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension - in your browser (How to pin extension). Changes done here are autosaved.
In case you want to change the details you provided - or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again. -

-
-
-
-
- - - + + + + + AIS Visa Scheduler FAQs + + + + + + + +
+
+
+

+ +

+
+

+ This extension was born out of boredom and the ridiculous task of clicking through multiple months to find the next available date for rescheduling. I wanted to build something to click through the calendar but ended up building the extension which automates + everything. +

+
+
+
+

+ +

+
+

+ This extension is designed to work for the AIS VISA application system only—which means only the countries listed here (https://ais.usvisa-info.com/en-us/countries_list/niv) + will work with this extension. Also, this is only for rescheduling your appointment. If you are looking to schedule it for the first time, this extension will not work. +

+
+
+
+

+ +

+
+

+ The extension automates all the clicking and navigating that you'll generally do manually. It uses your current appointment date and periodically checks for any date earlier than it and tries to book it automatically.
The + extension uses credits every time it finds any date. Only when you are in a soft block or a hard block, the credits are not used. +

+
+
+
+

+ +

+
+

+ Soft block:
The AIS system shows you no slots for 5 hours when you check for the slots a certain number of times. Sometimes this is 70 checks and sometimes it is only 20. The extension identifies this and + automatically adjusts the checking interval to prevent a hard block.
Hard block:
When in the soft block, if you keep checking for slots frequently, the 5-hour period will extend to 24 hours and sometimes + will prevent you from accessing the site from an IP as well. it is best to stay out of this hard block state.

Sometimes, the website opens up ghost slots to catch users using bots to book appointment. When such slots open up, you'll see errors telling you to that your selection is invalid. If this error happens three times in a row, stop using the extension for a couple of hours. +

+
+
+
+

+ +

+
+

+ The extension is intuitive to use. It'll show you dialogs for you to act on or provide information. Apart from that you can control things like checking frequency and other options. To access these settings pin the AIS Visa Auto Rescheduler extension + in your browser (How to pin extension). Changes done here are autosaved.
In case you want to change the details you provided + or if the extension is throwing an error or if see "--" as credits instead of a number, click on the "Configure / Reset" button to clear your data and start the process of setting uo the extension again. +

+
+
+
+
+ + + \ No newline at end of file