Experimental Flight Interface

Improve your plane with the interface that offers experimental features.

// ==UserScript==
// @name         Experimental Flight Interface
// @namespace    https://github.com/Ferhatduran55/geofs-experimental-fi
// @version      0.7.13
// @description  Improve your plane with the interface that offers experimental features.
// @author       Ferhatduran55
// @match        https://www.geo-fs.com/geofs.php?v=3.7
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_info
// @grant        unsafeWindow
// @license      MIT
// @homepage     https://greasyfork.org/scripts/488227
// @supportURL   https://greasyfork.org/scripts/488227/feedback
// @run-at       document-end
// ==/UserScript==

// dist/index.js
(function () {
	'use strict';

	try{if(typeof document != 'undefined'){GM.addStyle("*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n  -moz-tab-size: 4; /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4; /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n  font-feature-settings: normal; /* 5 */\n  font-variation-settings: normal; /* 6 */\n  -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n  font-feature-settings: normal; /* 2 */\n  font-variation-settings: normal; /* 3 */\n  font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-feature-settings: inherit; /* 1 */\n  font-variation-settings: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  font-weight: inherit; /* 1 */\n  line-height: inherit; /* 1 */\n  letter-spacing: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n  display: none;\n}\r\n.container {\n  width: 100%;\n}\r\n@media (min-width: 640px) {\n\n  .container {\n    max-width: 640px;\n  }\n}\r\n@media (min-width: 768px) {\n\n  .container {\n    max-width: 768px;\n  }\n}\r\n@media (min-width: 1024px) {\n\n  .container {\n    max-width: 1024px;\n  }\n}\r\n@media (min-width: 1280px) {\n\n  .container {\n    max-width: 1280px;\n  }\n}\r\n@media (min-width: 1536px) {\n\n  .container {\n    max-width: 1536px;\n  }\n}\r\n.static {\n  position: static;\n}\r\n.m-2 {\n  margin: 0.5rem;\n}\r\n.mt-4 {\n  margin-top: 1rem;\n}\r\n.flex {\n  display: flex;\n}\r\n.h-5 {\n  height: 1.25rem;\n}\r\n.w-11\\/12 {\n  width: 91.666667%;\n}\r\n.w-5 {\n  width: 1.25rem;\n}\r\n.w-fit {\n  width: -moz-fit-content;\n  width: fit-content;\n}\r\n.w-max {\n  width: -moz-max-content;\n  width: max-content;\n}\r\n.flex-auto {\n  flex: 1 1 auto;\n}\r\n.flex-none {\n  flex: none;\n}\r\n.flex-col {\n  flex-direction: column;\n}\r\n.items-center {\n  align-items: center;\n}\r\n.justify-between {\n  justify-content: space-between;\n}\r\n.gap-2 {\n  gap: 0.5rem;\n}\r\n.gap-4 {\n  gap: 1rem;\n}\r\n.rounded-md {\n  border-radius: 0.375rem;\n}\r\n.border-0 {\n  border-width: 0px;\n}\r\n.bg-sky-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(2 132 199 / var(--tw-bg-opacity, 1));\n}\r\n.p-2 {\n  padding: 0.5rem;\n}\r\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\r\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\r\n.pb-4 {\n  padding-bottom: 1rem;\n}\r\n.pl-2 {\n  padding-left: 0.5rem;\n}\r\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\r\n.font-medium {\n  font-weight: 500;\n}\r\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\r\n.text-slate-500 {\n  --tw-text-opacity: 1;\n  color: rgb(100 116 139 / var(--tw-text-opacity, 1));\n}\r\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\r\n.shadow-md {\n  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\r\n.transition {\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\r\n.marker\\:content-none *::marker {\n  --tw-content: none;\n  content: var(--tw-content);\n}\r\n.marker\\:content-none::marker {\n  --tw-content: none;\n  content: var(--tw-content);\n}\r\n.hover\\:cursor-pointer:hover {\n  cursor: pointer;\n}\r\n.hover\\:bg-sky-700:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(3 105 161 / var(--tw-bg-opacity, 1));\n}html[dir=\"ltr\"],\r\n[data-sonner-toaster][dir=\"ltr\"] {\r\n  --toast-icon-margin-start: -3px;\r\n  --toast-icon-margin-end: 4px;\r\n  --toast-svg-margin-start: -1px;\r\n  --toast-svg-margin-end: 0px;\r\n  --toast-button-margin-start: auto;\r\n  --toast-button-margin-end: 0;\r\n  --toast-close-button-start: 0;\r\n  --toast-close-button-end: unset;\r\n  --toast-close-button-transform: translate(-35%, -35%);\r\n}\r\nhtml[dir=\"rtl\"],\r\n[data-sonner-toaster][dir=\"rtl\"] {\r\n  --toast-icon-margin-start: 4px;\r\n  --toast-icon-margin-end: -3px;\r\n  --toast-svg-margin-start: 0px;\r\n  --toast-svg-margin-end: -1px;\r\n  --toast-button-margin-start: 0;\r\n  --toast-button-margin-end: auto;\r\n  --toast-close-button-start: unset;\r\n  --toast-close-button-end: 0;\r\n  --toast-close-button-transform: translate(35%, -35%);\r\n}\r\n[data-sonner-toaster] {\r\n  position: fixed;\r\n  width: var(--width);\r\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\r\n    Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif,\r\n    Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;\r\n  --gray1: hsl(0, 0%, 99%);\r\n  --gray2: hsl(0, 0%, 97.3%);\r\n  --gray3: hsl(0, 0%, 95.1%);\r\n  --gray4: hsl(0, 0%, 93%);\r\n  --gray5: hsl(0, 0%, 90.9%);\r\n  --gray6: hsl(0, 0%, 88.7%);\r\n  --gray7: hsl(0, 0%, 85.8%);\r\n  --gray8: hsl(0, 0%, 78%);\r\n  --gray9: hsl(0, 0%, 56.1%);\r\n  --gray10: hsl(0, 0%, 52.3%);\r\n  --gray11: hsl(0, 0%, 43.5%);\r\n  --gray12: hsl(0, 0%, 9%);\r\n  --border-radius: 8px;\r\n  box-sizing: border-box;\r\n  padding: 0;\r\n  margin: 0;\r\n  list-style: none;\r\n  outline: none;\r\n  z-index: 999999999;\r\n}\r\n[data-sonner-toaster][data-x-position=\"right\"] {\r\n  right: max(var(--offset), env(safe-area-inset-right));\r\n}\r\n[data-sonner-toaster][data-x-position=\"left\"] {\r\n  left: max(var(--offset), env(safe-area-inset-left));\r\n}\r\n[data-sonner-toaster][data-x-position=\"center\"] {\r\n  left: 50%;\r\n  transform: translateX(-50%);\r\n}\r\n[data-sonner-toaster][data-y-position=\"top\"] {\r\n  top: max(var(--offset), env(safe-area-inset-top));\r\n}\r\n[data-sonner-toaster][data-y-position=\"bottom\"] {\r\n  bottom: max(var(--offset), env(safe-area-inset-bottom));\r\n}\r\n[data-sonner-toast] {\r\n  --y: translateY(100%);\r\n  --lift-amount: calc(var(--lift) * var(--gap));\r\n  z-index: var(--z-index);\r\n  position: absolute;\r\n  opacity: 0;\r\n  transform: var(--y);\r\n  touch-action: none;\r\n  will-change: transform, opacity, height;\r\n  transition: transform 400ms, opacity 400ms, height 400ms, box-shadow 200ms;\r\n  box-sizing: border-box;\r\n  outline: none;\r\n  overflow-wrap: anywhere;\r\n}\r\n[data-sonner-toast][data-styled=\"true\"] {\r\n  padding: 16px;\r\n  background: var(--normal-bg);\r\n  border: 1px solid var(--normal-border);\r\n  color: var(--normal-text);\r\n  border-radius: var(--border-radius);\r\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);\r\n  width: var(--width);\r\n  font-size: 13px;\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n}\r\n[data-sonner-toast]:focus-visible {\r\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2);\r\n}\r\n[data-sonner-toast][data-y-position=\"top\"] {\r\n  top: 0;\r\n  --y: translateY(-100%);\r\n  --lift: 1;\r\n  --lift-amount: calc(1 * var(--gap));\r\n}\r\n[data-sonner-toast][data-y-position=\"bottom\"] {\r\n  bottom: 0;\r\n  --y: translateY(100%);\r\n  --lift: -1;\r\n  --lift-amount: calc(var(--lift) * var(--gap));\r\n}\r\n[data-sonner-toast] [data-description] {\r\n  font-weight: 400;\r\n  line-height: 1.4;\r\n  color: inherit;\r\n}\r\n[data-sonner-toast] [data-title] {\r\n  font-weight: 500;\r\n  line-height: 1.5;\r\n  color: inherit;\r\n}\r\n[data-sonner-toast] [data-icon] {\r\n  display: flex;\r\n  height: 16px;\r\n  width: 16px;\r\n  position: relative;\r\n  justify-content: flex-start;\r\n  align-items: center;\r\n  flex-shrink: 0;\r\n  margin-left: var(--toast-icon-margin-start);\r\n  margin-right: var(--toast-icon-margin-end);\r\n}\r\n[data-sonner-toast][data-promise=\"true\"] [data-icon] > svg {\r\n  opacity: 0;\r\n  transform: scale(0.8);\r\n  transform-origin: center;\r\n  animation: sonner-fade-in 300ms ease forwards;\r\n}\r\n[data-sonner-toast] [data-icon] > * {\r\n  flex-shrink: 0;\r\n}\r\n[data-sonner-toast] [data-icon] svg {\r\n  margin-left: var(--toast-svg-margin-start);\r\n  margin-right: var(--toast-svg-margin-end);\r\n}\r\n[data-sonner-toast] [data-content] {\r\n  display: flex;\r\n  flex-direction: column;\r\n  gap: 2px;\r\n}\r\n[data-sonner-toast] [data-button] {\r\n  border-radius: 4px;\r\n  padding-left: 8px;\r\n  padding-right: 8px;\r\n  height: 24px;\r\n  font-size: 12px;\r\n  color: var(--normal-bg);\r\n  background: var(--normal-text);\r\n  margin-left: var(--toast-button-margin-start);\r\n  margin-right: var(--toast-button-margin-end);\r\n  border: none;\r\n  cursor: pointer;\r\n  outline: none;\r\n  display: flex;\r\n  align-items: center;\r\n  flex-shrink: 0;\r\n  transition: opacity 400ms, box-shadow 200ms;\r\n}\r\n[data-sonner-toast] [data-button]:focus-visible {\r\n  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.4);\r\n}\r\n[data-sonner-toast] [data-button]:first-of-type {\r\n  margin-left: var(--toast-button-margin-start);\r\n  margin-right: var(--toast-button-margin-end);\r\n}\r\n[data-sonner-toast] [data-cancel] {\r\n  color: var(--normal-text);\r\n  background: rgba(0, 0, 0, 0.08);\r\n}\r\n[data-sonner-toast][data-theme=\"dark\"] [data-cancel] {\r\n  background: rgba(255, 255, 255, 0.3);\r\n}\r\n[data-sonner-toast] [data-close-button] {\r\n  position: absolute;\r\n  left: var(--toast-close-button-start);\r\n  right: var(--toast-close-button-end);\r\n  top: 0;\r\n  height: 20px;\r\n  width: 20px;\r\n  display: flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  padding: 0;\r\n  background: var(--gray1);\r\n  color: var(--gray12);\r\n  border: 1px solid var(--gray4);\r\n  transform: var(--toast-close-button-transform);\r\n  border-radius: 50%;\r\n  cursor: pointer;\r\n  z-index: 1;\r\n  transition: opacity 100ms, background 200ms, border-color 200ms;\r\n}\r\n[data-sonner-toast] [data-close-button]:focus-visible {\r\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2);\r\n}\r\n[data-sonner-toast] [data-disabled=\"true\"] {\r\n  cursor: not-allowed;\r\n}\r\n[data-sonner-toast]:hover [data-close-button]:hover {\r\n  background: var(--gray2);\r\n  border-color: var(--gray5);\r\n}\r\n[data-sonner-toast][data-swiping=\"true\"]:before {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 0;\r\n  right: 0;\r\n  height: 100%;\r\n  z-index: -1;\r\n}\r\n[data-sonner-toast][data-y-position=\"top\"][data-swiping=\"true\"]:before {\r\n  bottom: 50%;\r\n  transform: scaleY(3) translateY(50%);\r\n}\r\n[data-sonner-toast][data-y-position=\"bottom\"][data-swiping=\"true\"]:before {\r\n  top: 50%;\r\n  transform: scaleY(3) translateY(-50%);\r\n}\r\n[data-sonner-toast][data-swiping=\"false\"][data-removed=\"true\"]:before {\r\n  content: \"\";\r\n  position: absolute;\r\n  inset: 0;\r\n  transform: scaleY(2);\r\n}\r\n[data-sonner-toast]:after {\r\n  content: \"\";\r\n  position: absolute;\r\n  left: 0;\r\n  height: calc(var(--gap) + 1px);\r\n  bottom: 100%;\r\n  width: 100%;\r\n}\r\n[data-sonner-toast][data-mounted=\"true\"] {\r\n  --y: translateY(0);\r\n  opacity: 1;\r\n}\r\n[data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"] {\r\n  --scale: var(--toasts-before) * 0.05 + 1;\r\n  --y: translateY(calc(var(--lift-amount) * var(--toasts-before)))\r\n    scale(calc(-1 * var(--scale)));\r\n  height: var(--front-toast-height);\r\n}\r\n[data-sonner-toast] > * {\r\n  transition: opacity 400ms;\r\n}\r\n[data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"][data-styled=\"true\"]\r\n  > * {\r\n  opacity: 0;\r\n}\r\n[data-sonner-toast][data-visible=\"false\"] {\r\n  opacity: 0;\r\n  pointer-events: none;\r\n}\r\n[data-sonner-toast][data-mounted=\"true\"][data-expanded=\"true\"] {\r\n  --y: translateY(calc(var(--lift) * var(--offset)));\r\n  height: var(--initial-height);\r\n}\r\n[data-sonner-toast][data-removed=\"true\"][data-front=\"true\"][data-swipe-out=\"false\"] {\r\n  --y: translateY(calc(var(--lift) * -100%));\r\n  opacity: 0;\r\n}\r\n[data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"true\"] {\r\n  --y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));\r\n  opacity: 0;\r\n}\r\n[data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"false\"] {\r\n  --y: translateY(40%);\r\n  opacity: 0;\r\n  transition: transform 500ms, opacity 200ms;\r\n}\r\n[data-sonner-toast][data-removed=\"true\"][data-front=\"false\"]:before {\r\n  height: calc(var(--initial-height) + 20%);\r\n}\r\n[data-sonner-toast][data-swiping=\"true\"] {\r\n  transform: var(--y) translateY(var(--swipe-amount, 0px));\r\n  transition: none;\r\n}\r\n[data-sonner-toast][data-swipe-out=\"true\"][data-y-position=\"bottom\"],\r\n[data-sonner-toast][data-swipe-out=\"true\"][data-y-position=\"top\"] {\r\n  animation: swipe-out 200ms ease-out forwards;\r\n}\r\n@keyframes swipe-out {\r\n  from {\r\n    transform: translateY(\r\n      calc(var(--lift) * var(--offset) + var(--swipe-amount))\r\n    );\r\n    opacity: 1;\r\n  }\r\n  to {\r\n    transform: translateY(\r\n      calc(\r\n        var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%\r\n      )\r\n    );\r\n    opacity: 0;\r\n  }\r\n}\r\n@media (max-width: 600px) {\r\n  [data-sonner-toaster] {\r\n    position: fixed;\r\n    --mobile-offset: 16px;\r\n    right: var(--mobile-offset);\r\n    left: var(--mobile-offset);\r\n    width: 100%;\r\n  }\r\n  [data-sonner-toaster] [data-sonner-toast] {\r\n    left: 0;\r\n    right: 0;\r\n    width: calc(100% - 32px);\r\n  }\r\n  [data-sonner-toaster][data-x-position=\"left\"] {\r\n    left: var(--mobile-offset);\r\n  }\r\n  [data-sonner-toaster][data-y-position=\"bottom\"] {\r\n    bottom: 20px;\r\n  }\r\n  [data-sonner-toaster][data-y-position=\"top\"] {\r\n    top: 20px;\r\n  }\r\n  [data-sonner-toaster][data-x-position=\"center\"] {\r\n    left: var(--mobile-offset);\r\n    right: var(--mobile-offset);\r\n    transform: none;\r\n  }\r\n}\r\n[data-sonner-toaster][data-theme=\"light\"] {\r\n  --normal-bg: #fff;\r\n  --normal-border: var(--gray4);\r\n  --normal-text: var(--gray12);\r\n  --success-bg: hsl(143, 85%, 96%);\r\n  --success-border: hsl(145, 92%, 91%);\r\n  --success-text: hsl(140, 100%, 27%);\r\n  --info-bg: hsl(208, 100%, 97%);\r\n  --info-border: hsl(221, 91%, 91%);\r\n  --info-text: hsl(210, 92%, 45%);\r\n  --warning-bg: hsl(49, 100%, 97%);\r\n  --warning-border: hsl(49, 91%, 91%);\r\n  --warning-text: hsl(31, 92%, 45%);\r\n  --error-bg: hsl(359, 100%, 97%);\r\n  --error-border: hsl(359, 100%, 94%);\r\n  --error-text: hsl(360, 100%, 45%);\r\n}\r\n[data-sonner-toaster][data-theme=\"light\"]\r\n  [data-sonner-toast][data-invert=\"true\"] {\r\n  --normal-bg: #000;\r\n  --normal-border: hsl(0, 0%, 20%);\r\n  --normal-text: var(--gray1);\r\n}\r\n[data-sonner-toaster][data-theme=\"dark\"]\r\n  [data-sonner-toast][data-invert=\"true\"] {\r\n  --normal-bg: #fff;\r\n  --normal-border: var(--gray3);\r\n  --normal-text: var(--gray12);\r\n}\r\n[data-sonner-toaster][data-theme=\"dark\"] {\r\n  --normal-bg: #000;\r\n  --normal-border: hsl(0, 0%, 20%);\r\n  --normal-text: var(--gray1);\r\n  --success-bg: hsl(150, 100%, 6%);\r\n  --success-border: hsl(147, 100%, 12%);\r\n  --success-text: hsl(150, 86%, 65%);\r\n  --info-bg: hsl(215, 100%, 6%);\r\n  --info-border: hsl(223, 100%, 12%);\r\n  --info-text: hsl(216, 87%, 65%);\r\n  --warning-bg: hsl(64, 100%, 6%);\r\n  --warning-border: hsl(60, 100%, 12%);\r\n  --warning-text: hsl(46, 87%, 65%);\r\n  --error-bg: hsl(358, 76%, 10%);\r\n  --error-border: hsl(357, 89%, 16%);\r\n  --error-text: hsl(358, 100%, 81%);\r\n}\r\n[data-rich-colors=\"true\"] [data-sonner-toast][data-type=\"success\"] {\r\n  background: var(--success-bg);\r\n  border-color: var(--success-border);\r\n  color: var(--success-text);\r\n}\r\n[data-rich-colors=\"true\"]\r\n  [data-sonner-toast][data-type=\"success\"]\r\n  [data-close-button] {\r\n  background: var(--success-bg);\r\n  border-color: var(--success-border);\r\n  color: var(--success-text);\r\n}\r\n[data-rich-colors=\"true\"] [data-sonner-toast][data-type=\"info\"] {\r\n  background: var(--info-bg);\r\n  border-color: var(--info-border);\r\n  color: var(--info-text);\r\n}\r\n[data-rich-colors=\"true\"]\r\n  [data-sonner-toast][data-type=\"info\"]\r\n  [data-close-button] {\r\n  background: var(--info-bg);\r\n  border-color: var(--info-border);\r\n  color: var(--info-text);\r\n}\r\n[data-rich-colors=\"true\"] [data-sonner-toast][data-type=\"warning\"] {\r\n  background: var(--warning-bg);\r\n  border-color: var(--warning-border);\r\n  color: var(--warning-text);\r\n}\r\n[data-rich-colors=\"true\"]\r\n  [data-sonner-toast][data-type=\"warning\"]\r\n  [data-close-button] {\r\n  background: var(--warning-bg);\r\n  border-color: var(--warning-border);\r\n  color: var(--warning-text);\r\n}\r\n[data-rich-colors=\"true\"] [data-sonner-toast][data-type=\"error\"] {\r\n  background: var(--error-bg);\r\n  border-color: var(--error-border);\r\n  color: var(--error-text);\r\n}\r\n[data-rich-colors=\"true\"]\r\n  [data-sonner-toast][data-type=\"error\"]\r\n  [data-close-button] {\r\n  background: var(--error-bg);\r\n  border-color: var(--error-border);\r\n  color: var(--error-text);\r\n}\r\n.sonner-loading-wrapper {\r\n  --size: 16px;\r\n  height: var(--size);\r\n  width: var(--size);\r\n  position: absolute;\r\n  inset: 0;\r\n  z-index: 10;\r\n}\r\n.sonner-loading-wrapper[data-visible=\"false\"] {\r\n  transform-origin: center;\r\n  animation: sonner-fade-out 0.2s ease forwards;\r\n}\r\n.sonner-spinner {\r\n  position: relative;\r\n  top: 50%;\r\n  left: 50%;\r\n  height: var(--size);\r\n  width: var(--size);\r\n}\r\n.sonner-loading-bar {\r\n  animation: sonner-spin 1.2s linear infinite;\r\n  background: var(--gray11);\r\n  border-radius: 6px;\r\n  height: 8%;\r\n  left: -10%;\r\n  position: absolute;\r\n  top: -3.9%;\r\n  width: 24%;\r\n}\r\n.sonner-loading-bar:nth-child(1) {\r\n  animation-delay: -1.2s;\r\n  transform: rotate(0.0001deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(2) {\r\n  animation-delay: -1.1s;\r\n  transform: rotate(30deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(3) {\r\n  animation-delay: -1s;\r\n  transform: rotate(60deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(4) {\r\n  animation-delay: -0.9s;\r\n  transform: rotate(90deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(5) {\r\n  animation-delay: -0.8s;\r\n  transform: rotate(120deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(6) {\r\n  animation-delay: -0.7s;\r\n  transform: rotate(150deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(7) {\r\n  animation-delay: -0.6s;\r\n  transform: rotate(180deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(8) {\r\n  animation-delay: -0.5s;\r\n  transform: rotate(210deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(9) {\r\n  animation-delay: -0.4s;\r\n  transform: rotate(240deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(10) {\r\n  animation-delay: -0.3s;\r\n  transform: rotate(270deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(11) {\r\n  animation-delay: -0.2s;\r\n  transform: rotate(300deg) translate(146%);\r\n}\r\n.sonner-loading-bar:nth-child(12) {\r\n  animation-delay: -0.1s;\r\n  transform: rotate(330deg) translate(146%);\r\n}\r\n@keyframes sonner-fade-in {\r\n  0% {\r\n    opacity: 0;\r\n    transform: scale(0.8);\r\n  }\r\n  100% {\r\n    opacity: 1;\r\n    transform: scale(1);\r\n  }\r\n}\r\n@keyframes sonner-fade-out {\r\n  0% {\r\n    opacity: 1;\r\n    transform: scale(1);\r\n  }\r\n  100% {\r\n    opacity: 0;\r\n    transform: scale(0.8);\r\n  }\r\n}\r\n@keyframes sonner-spin {\r\n  0% {\r\n    opacity: 1;\r\n  }\r\n  100% {\r\n    opacity: 0.15;\r\n  }\r\n}\r\n@media (prefers-reduced-motion) {\r\n  [data-sonner-toast],\r\n  [data-sonner-toast] > *,\r\n  .sonner-loading-bar {\r\n    transition: none !important;\r\n    animation: none !important;\r\n  }\r\n}\r\n.sonner-loader {\r\n  position: absolute;\r\n  top: 50%;\r\n  left: 50%;\r\n  transform: translate(-50%, -50%);\r\n  transform-origin: center;\r\n  transition: opacity 200ms, transform 200ms;\r\n}\r\n.sonner-loader[data-visible=\"false\"] {\r\n  opacity: 0;\r\n  transform: scale(0.8) translate(-50%, -50%);\r\n}");}}catch(e){console.error('vite-plugin-css-injected-by-js', e);}

})();
const sharedConfig = {
  context: undefined,
  registry: undefined,
  effects: undefined,
  done: false,
  getContextId() {
    return getContextId(this.context.count);
  },
  getNextContextId() {
    return getContextId(this.context.count++);
  }
};
function getContextId(count) {
  const num = String(count),
    len = num.length - 1;
  return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : "") + num;
}
function setHydrateContext(context) {
  sharedConfig.context = context;
}

const IS_DEV = false;
const equalFn = (a, b) => a === b;
const $PROXY = Symbol("solid-proxy");
const SUPPORTS_PROXY = typeof Proxy === "function";
const $TRACK = Symbol("solid-track");
const signalOptions = {
  equals: equalFn
};
let runEffects = runQueue;
const STALE = 1;
const PENDING = 2;
const UNOWNED = {
  owned: null,
  cleanups: null,
  context: null,
  owner: null
};
const NO_INIT = {};
var Owner = null;
let Transition = null;
let ExternalSourceConfig = null;
let Listener = null;
let Updates = null;
let Effects = null;
let ExecCount = 0;
function createRoot(fn, detachedOwner) {
  const listener = Listener,
    owner = Owner,
    unowned = fn.length === 0,
    current = detachedOwner === undefined ? owner : detachedOwner,
    root = unowned
      ? UNOWNED
      : {
          owned: null,
          cleanups: null,
          context: current ? current.context : null,
          owner: current
        },
    updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));
  Owner = root;
  Listener = null;
  try {
    return runUpdates(updateFn, true);
  } finally {
    Listener = listener;
    Owner = owner;
  }
}
function createSignal(value, options) {
  options = options ? Object.assign({}, signalOptions, options) : signalOptions;
  const s = {
    value,
    observers: null,
    observerSlots: null,
    comparator: options.equals || undefined
  };
  const setter = value => {
    if (typeof value === "function") {
      value = value(s.value);
    }
    return writeSignal(s, value);
  };
  return [readSignal.bind(s), setter];
}
function createComputed(fn, value, options) {
  const c = createComputation(fn, value, true, STALE);
  updateComputation(c);
}
function createRenderEffect(fn, value, options) {
  const c = createComputation(fn, value, false, STALE);
  updateComputation(c);
}
function createEffect(fn, value, options) {
  runEffects = runUserEffects;
  const c = createComputation(fn, value, false, STALE),
    s = SuspenseContext && useContext(SuspenseContext);
  if (s) c.suspense = s;
  if (!options || !options.render) c.user = true;
  Effects ? Effects.push(c) : updateComputation(c);
}
function createMemo(fn, value, options) {
  options = options ? Object.assign({}, signalOptions, options) : signalOptions;
  const c = createComputation(fn, value, true, 0);
  c.observers = null;
  c.observerSlots = null;
  c.comparator = options.equals || undefined;
  updateComputation(c);
  return readSignal.bind(c);
}
function isPromise(v) {
  return v && typeof v === "object" && "then" in v;
}
function createResource(pSource, pFetcher, pOptions) {
  let source;
  let fetcher;
  let options;
  {
    source = true;
    fetcher = pSource;
    options = {};
  }
  let pr = null,
    initP = NO_INIT,
    id = null,
    scheduled = false,
    resolved = "initialValue" in options,
    dynamic = typeof source === "function" && createMemo(source);
  const contexts = new Set(),
    [value, setValue] = (options.storage || createSignal)(options.initialValue),
    [error, setError] = createSignal(undefined),
    [track, trigger] = createSignal(undefined, {
      equals: false
    }),
    [state, setState] = createSignal(resolved ? "ready" : "unresolved");
  if (sharedConfig.context) {
    id = sharedConfig.getNextContextId();
    if (options.ssrLoadFrom === "initial") initP = options.initialValue;
    else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);
  }
  function loadEnd(p, v, error, key) {
    if (pr === p) {
      pr = null;
      key !== undefined && (resolved = true);
      if ((p === initP || v === initP) && options.onHydrated)
        queueMicrotask(() =>
          options.onHydrated(key, {
            value: v
          })
        );
      initP = NO_INIT;
      completeLoad(v, error);
    }
    return v;
  }
  function completeLoad(v, err) {
    runUpdates(() => {
      if (err === undefined) setValue(() => v);
      setState(err !== undefined ? "errored" : resolved ? "ready" : "unresolved");
      setError(err);
      for (const c of contexts.keys()) c.decrement();
      contexts.clear();
    }, false);
  }
  function read() {
    const c = SuspenseContext && useContext(SuspenseContext),
      v = value(),
      err = error();
    if (err !== undefined && !pr) throw err;
    if (Listener && !Listener.user && c) {
      createComputed(() => {
        track();
        if (pr) {
          if (c.resolved && Transition) ;
          else if (!contexts.has(c)) {
            c.increment();
            contexts.add(c);
          }
        }
      });
    }
    return v;
  }
  function load(refetching = true) {
    if (refetching !== false && scheduled) return;
    scheduled = false;
    const lookup = dynamic ? dynamic() : source;
    if (lookup == null || lookup === false) {
      loadEnd(pr, untrack(value));
      return;
    }
    const p =
      initP !== NO_INIT
        ? initP
        : untrack(() =>
            fetcher(lookup, {
              value: value(),
              refetching
            })
          );
    if (!isPromise(p)) {
      loadEnd(pr, p, undefined, lookup);
      return p;
    }
    pr = p;
    if ("value" in p) {
      if (p.status === "success") loadEnd(pr, p.value, undefined, lookup);
      else loadEnd(pr, undefined, castError(p.value), lookup);
      return p;
    }
    scheduled = true;
    queueMicrotask(() => (scheduled = false));
    runUpdates(() => {
      setState(resolved ? "refreshing" : "pending");
      trigger();
    }, false);
    return p.then(
      v => loadEnd(p, v, undefined, lookup),
      e => loadEnd(p, undefined, castError(e), lookup)
    );
  }
  Object.defineProperties(read, {
    state: {
      get: () => state()
    },
    error: {
      get: () => error()
    },
    loading: {
      get() {
        const s = state();
        return s === "pending" || s === "refreshing";
      }
    },
    latest: {
      get() {
        if (!resolved) return read();
        const err = error();
        if (err && !pr) throw err;
        return value();
      }
    }
  });
  if (dynamic) createComputed(() => load(false));
  else load(false);
  return [
    read,
    {
      refetch: load,
      mutate: setValue
    }
  ];
}
function batch(fn) {
  return runUpdates(fn, false);
}
function untrack(fn) {
  if (Listener === null) return fn();
  const listener = Listener;
  Listener = null;
  try {
    if (ExternalSourceConfig) ;
    return fn();
  } finally {
    Listener = listener;
  }
}
function on(deps, fn, options) {
  const isArray = Array.isArray(deps);
  let prevInput;
  return prevValue => {
    let input;
    if (isArray) {
      input = Array(deps.length);
      for (let i = 0; i < deps.length; i++) input[i] = deps[i]();
    } else input = deps();
    const result = untrack(() => fn(input, prevInput, prevValue));
    prevInput = input;
    return result;
  };
}
function onMount(fn) {
  createEffect(() => untrack(fn));
}
function onCleanup(fn) {
  if (Owner === null);
  else if (Owner.cleanups === null) Owner.cleanups = [fn];
  else Owner.cleanups.push(fn);
  return fn;
}
function getListener() {
  return Listener;
}
function getOwner() {
  return Owner;
}
function runWithOwner(o, fn) {
  const prev = Owner;
  const prevListener = Listener;
  Owner = o;
  Listener = null;
  try {
    return runUpdates(fn, true);
  } catch (err) {
    handleError(err);
  } finally {
    Owner = prev;
    Listener = prevListener;
  }
}
const [transPending, setTransPending] = /*@__PURE__*/ createSignal(false);
function resumeEffects(e) {
  Effects.push.apply(Effects, e);
  e.length = 0;
}
function createContext(defaultValue, options) {
  const id = Symbol("context");
  return {
    id,
    Provider: createProvider(id),
    defaultValue
  };
}
function useContext(context) {
  let value;
  return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined
    ? value
    : context.defaultValue;
}
function children(fn) {
  const children = createMemo(fn);
  const memo = createMemo(() => resolveChildren(children()));
  memo.toArray = () => {
    const c = memo();
    return Array.isArray(c) ? c : c != null ? [c] : [];
  };
  return memo;
}
let SuspenseContext;
function getSuspenseContext() {
  return SuspenseContext || (SuspenseContext = createContext());
}
function readSignal() {
  if (this.sources && (this.state)) {
    if ((this.state) === STALE) updateComputation(this);
    else {
      const updates = Updates;
      Updates = null;
      runUpdates(() => lookUpstream(this), false);
      Updates = updates;
    }
  }
  if (Listener) {
    const sSlot = this.observers ? this.observers.length : 0;
    if (!Listener.sources) {
      Listener.sources = [this];
      Listener.sourceSlots = [sSlot];
    } else {
      Listener.sources.push(this);
      Listener.sourceSlots.push(sSlot);
    }
    if (!this.observers) {
      this.observers = [Listener];
      this.observerSlots = [Listener.sources.length - 1];
    } else {
      this.observers.push(Listener);
      this.observerSlots.push(Listener.sources.length - 1);
    }
  }
  return this.value;
}
function writeSignal(node, value, isComp) {
  let current =
    node.value;
  if (!node.comparator || !node.comparator(current, value)) {
    node.value = value;
    if (node.observers && node.observers.length) {
      runUpdates(() => {
        for (let i = 0; i < node.observers.length; i += 1) {
          const o = node.observers[i];
          const TransitionRunning = Transition && Transition.running;
          if (TransitionRunning && Transition.disposed.has(o)) ;
          if (TransitionRunning ? !o.tState : !o.state) {
            if (o.pure) Updates.push(o);
            else Effects.push(o);
            if (o.observers) markDownstream(o);
          }
          if (!TransitionRunning) o.state = STALE;
        }
        if (Updates.length > 10e5) {
          Updates = [];
          if (IS_DEV);
          throw new Error();
        }
      }, false);
    }
  }
  return value;
}
function updateComputation(node) {
  if (!node.fn) return;
  cleanNode(node);
  const time = ExecCount;
  runComputation(
    node,
    node.value,
    time
  );
}
function runComputation(node, value, time) {
  let nextValue;
  const owner = Owner,
    listener = Listener;
  Listener = Owner = node;
  try {
    nextValue = node.fn(value);
  } catch (err) {
    if (node.pure) {
      {
        node.state = STALE;
        node.owned && node.owned.forEach(cleanNode);
        node.owned = null;
      }
    }
    node.updatedAt = time + 1;
    return handleError(err);
  } finally {
    Listener = listener;
    Owner = owner;
  }
  if (!node.updatedAt || node.updatedAt <= time) {
    if (node.updatedAt != null && "observers" in node) {
      writeSignal(node, nextValue);
    } else node.value = nextValue;
    node.updatedAt = time;
  }
}
function createComputation(fn, init, pure, state = STALE, options) {
  const c = {
    fn,
    state: state,
    updatedAt: null,
    owned: null,
    sources: null,
    sourceSlots: null,
    cleanups: null,
    value: init,
    owner: Owner,
    context: Owner ? Owner.context : null,
    pure
  };
  if (Owner === null);
  else if (Owner !== UNOWNED) {
    {
      if (!Owner.owned) Owner.owned = [c];
      else Owner.owned.push(c);
    }
  }
  return c;
}
function runTop(node) {
  if ((node.state) === 0) return;
  if ((node.state) === PENDING) return lookUpstream(node);
  if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);
  const ancestors = [node];
  while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {
    if (node.state) ancestors.push(node);
  }
  for (let i = ancestors.length - 1; i >= 0; i--) {
    node = ancestors[i];
    if ((node.state) === STALE) {
      updateComputation(node);
    } else if ((node.state) === PENDING) {
      const updates = Updates;
      Updates = null;
      runUpdates(() => lookUpstream(node, ancestors[0]), false);
      Updates = updates;
    }
  }
}
function runUpdates(fn, init) {
  if (Updates) return fn();
  let wait = false;
  if (!init) Updates = [];
  if (Effects) wait = true;
  else Effects = [];
  ExecCount++;
  try {
    const res = fn();
    completeUpdates(wait);
    return res;
  } catch (err) {
    if (!wait) Effects = null;
    Updates = null;
    handleError(err);
  }
}
function completeUpdates(wait) {
  if (Updates) {
    runQueue(Updates);
    Updates = null;
  }
  if (wait) return;
  const e = Effects;
  Effects = null;
  if (e.length) runUpdates(() => runEffects(e), false);
}
function runQueue(queue) {
  for (let i = 0; i < queue.length; i++) runTop(queue[i]);
}
function runUserEffects(queue) {
  let i,
    userLength = 0;
  for (i = 0; i < queue.length; i++) {
    const e = queue[i];
    if (!e.user) runTop(e);
    else queue[userLength++] = e;
  }
  if (sharedConfig.context) {
    if (sharedConfig.count) {
      sharedConfig.effects || (sharedConfig.effects = []);
      sharedConfig.effects.push(...queue.slice(0, userLength));
      return;
    }
    setHydrateContext();
  }
  if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {
    queue = [...sharedConfig.effects, ...queue];
    userLength += sharedConfig.effects.length;
    delete sharedConfig.effects;
  }
  for (i = 0; i < userLength; i++) runTop(queue[i]);
}
function lookUpstream(node, ignore) {
  node.state = 0;
  for (let i = 0; i < node.sources.length; i += 1) {
    const source = node.sources[i];
    if (source.sources) {
      const state = source.state;
      if (state === STALE) {
        if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount))
          runTop(source);
      } else if (state === PENDING) lookUpstream(source, ignore);
    }
  }
}
function markDownstream(node) {
  for (let i = 0; i < node.observers.length; i += 1) {
    const o = node.observers[i];
    if (!o.state) {
      o.state = PENDING;
      if (o.pure) Updates.push(o);
      else Effects.push(o);
      o.observers && markDownstream(o);
    }
  }
}
function cleanNode(node) {
  let i;
  if (node.sources) {
    while (node.sources.length) {
      const source = node.sources.pop(),
        index = node.sourceSlots.pop(),
        obs = source.observers;
      if (obs && obs.length) {
        const n = obs.pop(),
          s = source.observerSlots.pop();
        if (index < obs.length) {
          n.sourceSlots[s] = index;
          obs[index] = n;
          source.observerSlots[index] = s;
        }
      }
    }
  }
  if (node.tOwned) {
    for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);
    delete node.tOwned;
  }
  if (node.owned) {
    for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);
    node.owned = null;
  }
  if (node.cleanups) {
    for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();
    node.cleanups = null;
  }
  node.state = 0;
}
function castError(err) {
  if (err instanceof Error) return err;
  return new Error(typeof err === "string" ? err : "Unknown error", {
    cause: err
  });
}
function handleError(err, owner = Owner) {
  const error = castError(err);
  throw error;
}
function resolveChildren(children) {
  if (typeof children === "function" && !children.length) return resolveChildren(children());
  if (Array.isArray(children)) {
    const results = [];
    for (let i = 0; i < children.length; i++) {
      const result = resolveChildren(children[i]);
      Array.isArray(result) ? results.push.apply(results, result) : results.push(result);
    }
    return results;
  }
  return children;
}
function createProvider(id, options) {
  return function provider(props) {
    let res;
    createRenderEffect(
      () =>
        (res = untrack(() => {
          Owner.context = {
            ...Owner.context,
            [id]: props.value
          };
          return children(() => props.children);
        })),
      undefined
    );
    return res;
  };
}

const FALLBACK = Symbol("fallback");
function dispose(d) {
  for (let i = 0; i < d.length; i++) d[i]();
}
function mapArray(list, mapFn, options = {}) {
  let items = [],
    mapped = [],
    disposers = [],
    len = 0,
    indexes = mapFn.length > 1 ? [] : null;
  onCleanup(() => dispose(disposers));
  return () => {
    let newItems = list() || [],
      newLen = newItems.length,
      i,
      j;
    newItems[$TRACK];
    return untrack(() => {
      let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;
      if (newLen === 0) {
        if (len !== 0) {
          dispose(disposers);
          disposers = [];
          items = [];
          mapped = [];
          len = 0;
          indexes && (indexes = []);
        }
        if (options.fallback) {
          items = [FALLBACK];
          mapped[0] = createRoot(disposer => {
            disposers[0] = disposer;
            return options.fallback();
          });
          len = 1;
        }
      } else if (len === 0) {
        mapped = new Array(newLen);
        for (j = 0; j < newLen; j++) {
          items[j] = newItems[j];
          mapped[j] = createRoot(mapper);
        }
        len = newLen;
      } else {
        temp = new Array(newLen);
        tempdisposers = new Array(newLen);
        indexes && (tempIndexes = new Array(newLen));
        for (
          start = 0, end = Math.min(len, newLen);
          start < end && items[start] === newItems[start];
          start++
        );
        for (
          end = len - 1, newEnd = newLen - 1;
          end >= start && newEnd >= start && items[end] === newItems[newEnd];
          end--, newEnd--
        ) {
          temp[newEnd] = mapped[end];
          tempdisposers[newEnd] = disposers[end];
          indexes && (tempIndexes[newEnd] = indexes[end]);
        }
        newIndices = new Map();
        newIndicesNext = new Array(newEnd + 1);
        for (j = newEnd; j >= start; j--) {
          item = newItems[j];
          i = newIndices.get(item);
          newIndicesNext[j] = i === undefined ? -1 : i;
          newIndices.set(item, j);
        }
        for (i = start; i <= end; i++) {
          item = items[i];
          j = newIndices.get(item);
          if (j !== undefined && j !== -1) {
            temp[j] = mapped[i];
            tempdisposers[j] = disposers[i];
            indexes && (tempIndexes[j] = indexes[i]);
            j = newIndicesNext[j];
            newIndices.set(item, j);
          } else disposers[i]();
        }
        for (j = start; j < newLen; j++) {
          if (j in temp) {
            mapped[j] = temp[j];
            disposers[j] = tempdisposers[j];
            if (indexes) {
              indexes[j] = tempIndexes[j];
              indexes[j](j);
            }
          } else mapped[j] = createRoot(mapper);
        }
        mapped = mapped.slice(0, (len = newLen));
        items = newItems.slice(0);
      }
      return mapped;
    });
    function mapper(disposer) {
      disposers[j] = disposer;
      if (indexes) {
        const [s, set] = createSignal(j);
        indexes[j] = set;
        return mapFn(newItems[j], s);
      }
      return mapFn(newItems[j]);
    }
  };
}
function createComponent(Comp, props) {
  return untrack(() => Comp(props || {}));
}
function trueFn() {
  return true;
}
const propTraps = {
  get(_, property, receiver) {
    if (property === $PROXY) return receiver;
    return _.get(property);
  },
  has(_, property) {
    if (property === $PROXY) return true;
    return _.has(property);
  },
  set: trueFn,
  deleteProperty: trueFn,
  getOwnPropertyDescriptor(_, property) {
    return {
      configurable: true,
      enumerable: true,
      get() {
        return _.get(property);
      },
      set: trueFn,
      deleteProperty: trueFn
    };
  },
  ownKeys(_) {
    return _.keys();
  }
};
function resolveSource(s) {
  return !(s = typeof s === "function" ? s() : s) ? {} : s;
}
function resolveSources() {
  for (let i = 0, length = this.length; i < length; ++i) {
    const v = this[i]();
    if (v !== undefined) return v;
  }
}
function mergeProps(...sources) {
  let proxy = false;
  for (let i = 0; i < sources.length; i++) {
    const s = sources[i];
    proxy = proxy || (!!s && $PROXY in s);
    sources[i] = typeof s === "function" ? ((proxy = true), createMemo(s)) : s;
  }
  if (SUPPORTS_PROXY && proxy) {
    return new Proxy(
      {
        get(property) {
          for (let i = sources.length - 1; i >= 0; i--) {
            const v = resolveSource(sources[i])[property];
            if (v !== undefined) return v;
          }
        },
        has(property) {
          for (let i = sources.length - 1; i >= 0; i--) {
            if (property in resolveSource(sources[i])) return true;
          }
          return false;
        },
        keys() {
          const keys = [];
          for (let i = 0; i < sources.length; i++)
            keys.push(...Object.keys(resolveSource(sources[i])));
          return [...new Set(keys)];
        }
      },
      propTraps
    );
  }
  const sourcesMap = {};
  const defined = Object.create(null);
  for (let i = sources.length - 1; i >= 0; i--) {
    const source = sources[i];
    if (!source) continue;
    const sourceKeys = Object.getOwnPropertyNames(source);
    for (let i = sourceKeys.length - 1; i >= 0; i--) {
      const key = sourceKeys[i];
      if (key === "__proto__" || key === "constructor") continue;
      const desc = Object.getOwnPropertyDescriptor(source, key);
      if (!defined[key]) {
        defined[key] = desc.get
          ? {
              enumerable: true,
              configurable: true,
              get: resolveSources.bind((sourcesMap[key] = [desc.get.bind(source)]))
            }
          : desc.value !== undefined
          ? desc
          : undefined;
      } else {
        const sources = sourcesMap[key];
        if (sources) {
          if (desc.get) sources.push(desc.get.bind(source));
          else if (desc.value !== undefined) sources.push(() => desc.value);
        }
      }
    }
  }
  const target = {};
  const definedKeys = Object.keys(defined);
  for (let i = definedKeys.length - 1; i >= 0; i--) {
    const key = definedKeys[i],
      desc = defined[key];
    if (desc && desc.get) Object.defineProperty(target, key, desc);
    else target[key] = desc ? desc.value : undefined;
  }
  return target;
}

const narrowedError = name => `Stale read from <${name}>.`;
function For(props) {
  const fallback = "fallback" in props && {
    fallback: () => props.fallback
  };
  return createMemo(mapArray(() => props.each, props.children, fallback || undefined));
}
function Show(props) {
  const keyed = props.keyed;
  const conditionValue = createMemo(() => props.when, undefined, undefined);
  const condition = keyed
    ? conditionValue
    : createMemo(conditionValue, undefined, {
        equals: (a, b) => !a === !b
      });
  return createMemo(
    () => {
      const c = condition();
      if (c) {
        const child = props.children;
        const fn = typeof child === "function" && child.length > 0;
        return fn
          ? untrack(() =>
              child(
                keyed
                  ? c
                  : () => {
                      if (!untrack(condition)) throw narrowedError("Show");
                      return conditionValue();
                    }
              )
            )
          : child;
      }
      return props.fallback;
    },
    undefined,
    undefined
  );
}
function Switch(props) {
  const chs = children(() => props.children);
  const switchFunc = createMemo(() => {
    const ch = chs();
    const mps = Array.isArray(ch) ? ch : [ch];
    let func = () => undefined;
    for (let i = 0; i < mps.length; i++) {
      const index = i;
      const mp = mps[i];
      const prevFunc = func;
      const conditionValue = createMemo(
        () => (prevFunc() ? undefined : mp.when),
        undefined,
        undefined
      );
      const condition = mp.keyed
        ? conditionValue
        : createMemo(conditionValue, undefined, {
            equals: (a, b) => !a === !b
          });
      func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);
    }
    return func;
  });
  return createMemo(
    () => {
      const sel = switchFunc()();
      if (!sel) return props.fallback;
      const [index, conditionValue, mp] = sel;
      const child = mp.children;
      const fn = typeof child === "function" && child.length > 0;
      return fn
        ? untrack(() =>
            child(
              mp.keyed
                ? conditionValue()
                : () => {
                    if (untrack(switchFunc)()?.[0] !== index) throw narrowedError("Match");
                    return conditionValue();
                  }
            )
          )
        : child;
    },
    undefined,
    undefined
  );
}
function Match(props) {
  return props;
}
const SuspenseListContext = /* #__PURE__ */ createContext();
function Suspense(props) {
  let counter = 0,
    show,
    ctx,
    p,
    flicker,
    error;
  const [inFallback, setFallback] = createSignal(false),
    SuspenseContext = getSuspenseContext(),
    store = {
      increment: () => {
        if (++counter === 1) setFallback(true);
      },
      decrement: () => {
        if (--counter === 0) setFallback(false);
      },
      inFallback,
      effects: [],
      resolved: false
    },
    owner = getOwner();
  if (sharedConfig.context && sharedConfig.load) {
    const key = sharedConfig.getContextId();
    let ref = sharedConfig.load(key);
    if (ref) {
      if (typeof ref !== "object" || ref.status !== "success") p = ref;
      else sharedConfig.gather(key);
    }
    if (p && p !== "$$f") {
      const [s, set] = createSignal(undefined, {
        equals: false
      });
      flicker = s;
      p.then(
        () => {
          if (sharedConfig.done) return set();
          sharedConfig.gather(key);
          setHydrateContext(ctx);
          set();
          setHydrateContext();
        },
        err => {
          error = err;
          set();
        }
      );
    }
  }
  const listContext = useContext(SuspenseListContext);
  if (listContext) show = listContext.register(store.inFallback);
  let dispose;
  onCleanup(() => dispose && dispose());
  return createComponent(SuspenseContext.Provider, {
    value: store,
    get children() {
      return createMemo(() => {
        if (error) throw error;
        ctx = sharedConfig.context;
        if (flicker) {
          flicker();
          return (flicker = undefined);
        }
        if (ctx && p === "$$f") setHydrateContext();
        const rendered = createMemo(() => props.children);
        return createMemo(prev => {
          const inFallback = store.inFallback(),
            { showContent = true, showFallback = true } = show ? show() : {};
          if ((!inFallback || (p && p !== "$$f")) && showContent) {
            store.resolved = true;
            dispose && dispose();
            dispose = ctx = p = undefined;
            resumeEffects(store.effects);
            return rendered();
          }
          if (!showFallback) return;
          if (dispose) return prev;
          return createRoot(disposer => {
            dispose = disposer;
            if (ctx) {
              setHydrateContext({
                id: ctx.id + "F",
                count: 0
              });
              ctx = undefined;
            }
            return props.fallback;
          }, owner);
        });
      });
    }
  });
}

const booleans = [
  "allowfullscreen",
  "async",
  "autofocus",
  "autoplay",
  "checked",
  "controls",
  "default",
  "disabled",
  "formnovalidate",
  "hidden",
  "indeterminate",
  "inert",
  "ismap",
  "loop",
  "multiple",
  "muted",
  "nomodule",
  "novalidate",
  "open",
  "playsinline",
  "readonly",
  "required",
  "reversed",
  "seamless",
  "selected"
];
const Properties = /*#__PURE__*/ new Set([
  "className",
  "value",
  "readOnly",
  "formNoValidate",
  "isMap",
  "noModule",
  "playsInline",
  ...booleans
]);
const ChildProperties = /*#__PURE__*/ new Set([
  "innerHTML",
  "textContent",
  "innerText",
  "children"
]);
const Aliases = /*#__PURE__*/ Object.assign(Object.create(null), {
  className: "class",
  htmlFor: "for"
});
const PropAliases = /*#__PURE__*/ Object.assign(Object.create(null), {
  class: "className",
  formnovalidate: {
    $: "formNoValidate",
    BUTTON: 1,
    INPUT: 1
  },
  ismap: {
    $: "isMap",
    IMG: 1
  },
  nomodule: {
    $: "noModule",
    SCRIPT: 1
  },
  playsinline: {
    $: "playsInline",
    VIDEO: 1
  },
  readonly: {
    $: "readOnly",
    INPUT: 1,
    TEXTAREA: 1
  }
});
function getPropAlias(prop, tagName) {
  const a = PropAliases[prop];
  return typeof a === "object" ? (a[tagName] ? a["$"] : undefined) : a;
}
const DelegatedEvents = /*#__PURE__*/ new Set([
  "beforeinput",
  "click",
  "dblclick",
  "contextmenu",
  "focusin",
  "focusout",
  "input",
  "keydown",
  "keyup",
  "mousedown",
  "mousemove",
  "mouseout",
  "mouseover",
  "mouseup",
  "pointerdown",
  "pointermove",
  "pointerout",
  "pointerover",
  "pointerup",
  "touchend",
  "touchmove",
  "touchstart"
]);

function reconcileArrays(parentNode, a, b) {
  let bLength = b.length,
    aEnd = a.length,
    bEnd = bLength,
    aStart = 0,
    bStart = 0,
    after = a[aEnd - 1].nextSibling,
    map = null;
  while (aStart < aEnd || bStart < bEnd) {
    if (a[aStart] === b[bStart]) {
      aStart++;
      bStart++;
      continue;
    }
    while (a[aEnd - 1] === b[bEnd - 1]) {
      aEnd--;
      bEnd--;
    }
    if (aEnd === aStart) {
      const node = bEnd < bLength ? (bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart]) : after;
      while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);
    } else if (bEnd === bStart) {
      while (aStart < aEnd) {
        if (!map || !map.has(a[aStart])) a[aStart].remove();
        aStart++;
      }
    } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {
      const node = a[--aEnd].nextSibling;
      parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);
      parentNode.insertBefore(b[--bEnd], node);
      a[aEnd] = b[bEnd];
    } else {
      if (!map) {
        map = new Map();
        let i = bStart;
        while (i < bEnd) map.set(b[i], i++);
      }
      const index = map.get(a[aStart]);
      if (index != null) {
        if (bStart < index && index < bEnd) {
          let i = aStart,
            sequence = 1,
            t;
          while (++i < aEnd && i < bEnd) {
            if ((t = map.get(a[i])) == null || t !== index + sequence) break;
            sequence++;
          }
          if (sequence > index - bStart) {
            const node = a[aStart];
            while (bStart < index) parentNode.insertBefore(b[bStart++], node);
          } else parentNode.replaceChild(b[bStart++], a[aStart++]);
        } else aStart++;
      } else a[aStart++].remove();
    }
  }
}

const $$EVENTS = "_$DX_DELEGATE";
function render(code, element, init, options = {}) {
  let disposer;
  createRoot(dispose => {
    disposer = dispose;
    element === document
      ? code()
      : insert(element, code(), element.firstChild ? null : undefined, init);
  }, options.owner);
  return () => {
    disposer();
    element.textContent = "";
  };
}
function template(html, isImportNode, isSVG, isMathML) {
  let node;
  const create = () => {
    const t = document.createElement("template");
    t.innerHTML = html;
    return t.content.firstChild;
  };
  const fn = () => (node || (node = create())).cloneNode(true);
  fn.cloneNode = fn;
  return fn;
}
function delegateEvents(eventNames, document = window.document) {
  const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());
  for (let i = 0, l = eventNames.length; i < l; i++) {
    const name = eventNames[i];
    if (!e.has(name)) {
      e.add(name);
      document.addEventListener(name, eventHandler);
    }
  }
}
function setAttribute(node, name, value) {
  if (isHydrating(node)) return;
  if (value == null) node.removeAttribute(name);
  else node.setAttribute(name, value);
}
function setBoolAttribute(node, name, value) {
  if (isHydrating(node)) return;
  value ? node.setAttribute(name, "") : node.removeAttribute(name);
}
function className(node, value) {
  if (isHydrating(node)) return;
  if (value == null) node.removeAttribute("class");
  else node.className = value;
}
function addEventListener(node, name, handler, delegate) {
  if (delegate) {
    if (Array.isArray(handler)) {
      node[`$$${name}`] = handler[0];
      node[`$$${name}Data`] = handler[1];
    } else node[`$$${name}`] = handler;
  } else if (Array.isArray(handler)) {
    const handlerFn = handler[0];
    node.addEventListener(name, (handler[0] = e => handlerFn.call(node, handler[1], e)));
  } else node.addEventListener(name, handler, typeof handler !== "function" && handler);
}
function classList(node, value, prev = {}) {
  const classKeys = Object.keys(value || {}),
    prevKeys = Object.keys(prev);
  let i, len;
  for (i = 0, len = prevKeys.length; i < len; i++) {
    const key = prevKeys[i];
    if (!key || key === "undefined" || value[key]) continue;
    toggleClassKey(node, key, false);
    delete prev[key];
  }
  for (i = 0, len = classKeys.length; i < len; i++) {
    const key = classKeys[i],
      classValue = !!value[key];
    if (!key || key === "undefined" || prev[key] === classValue || !classValue) continue;
    toggleClassKey(node, key, true);
    prev[key] = classValue;
  }
  return prev;
}
function style(node, value, prev) {
  if (!value) return prev ? setAttribute(node, "style") : value;
  const nodeStyle = node.style;
  if (typeof value === "string") return (nodeStyle.cssText = value);
  typeof prev === "string" && (nodeStyle.cssText = prev = undefined);
  prev || (prev = {});
  value || (value = {});
  let v, s;
  for (s in prev) {
    value[s] == null && nodeStyle.removeProperty(s);
    delete prev[s];
  }
  for (s in value) {
    v = value[s];
    if (v !== prev[s]) {
      nodeStyle.setProperty(s, v);
      prev[s] = v;
    }
  }
  return prev;
}
function spread(node, props = {}, isSVG, skipChildren) {
  const prevProps = {};
  {
    createRenderEffect(
      () => (prevProps.children = insertExpression(node, props.children, prevProps.children))
    );
  }
  createRenderEffect(() => typeof props.ref === "function" && use(props.ref, node));
  createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));
  return prevProps;
}
function use(fn, element, arg) {
  return untrack(() => fn(element, arg));
}
function insert(parent, accessor, marker, initial) {
  if (marker !== undefined && !initial) initial = [];
  if (typeof accessor !== "function") return insertExpression(parent, accessor, initial, marker);
  createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);
}
function assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {
  props || (props = {});
  for (const prop in prevProps) {
    if (!(prop in props)) {
      if (prop === "children") continue;
      prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);
    }
  }
  for (const prop in props) {
    if (prop === "children") {
      continue;
    }
    const value = props[prop];
    prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);
  }
}
function isHydrating(node) {
  return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);
}
function toPropertyName(name) {
  return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());
}
function toggleClassKey(node, key, value) {
  const classNames = key.trim().split(/\s+/);
  for (let i = 0, nameLen = classNames.length; i < nameLen; i++)
    node.classList.toggle(classNames[i], value);
}
function assignProp(node, prop, value, prev, isSVG, skipRef, props) {
  let isCE, isProp, isChildProp, propAlias, forceProp;
  if (prop === "style") return style(node, value, prev);
  if (prop === "classList") return classList(node, value, prev);
  if (value === prev) return prev;
  if (prop === "ref") {
    if (!skipRef) value(node);
  } else if (prop.slice(0, 3) === "on:") {
    const e = prop.slice(3);
    prev && node.removeEventListener(e, prev, typeof prev !== "function" && prev);
    value && node.addEventListener(e, value, typeof value !== "function" && value);
  } else if (prop.slice(0, 10) === "oncapture:") {
    const e = prop.slice(10);
    prev && node.removeEventListener(e, prev, true);
    value && node.addEventListener(e, value, true);
  } else if (prop.slice(0, 2) === "on") {
    const name = prop.slice(2).toLowerCase();
    const delegate = DelegatedEvents.has(name);
    if (!delegate && prev) {
      const h = Array.isArray(prev) ? prev[0] : prev;
      node.removeEventListener(name, h);
    }
    if (delegate || value) {
      addEventListener(node, name, value, delegate);
      delegate && delegateEvents([name]);
    }
  } else if (prop.slice(0, 5) === "attr:") {
    setAttribute(node, prop.slice(5), value);
  } else if (prop.slice(0, 5) === "bool:") {
    setBoolAttribute(node, prop.slice(5), value);
  } else if (
    (forceProp = prop.slice(0, 5) === "prop:") ||
    (isChildProp = ChildProperties.has(prop)) ||
    (((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop)))) ||
    (isCE = node.nodeName.includes("-") || "is" in props)
  ) {
    if (forceProp) {
      prop = prop.slice(5);
      isProp = true;
    } else if (isHydrating(node)) return value;
    if (prop === "class" || prop === "className") className(node, value);
    else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;
    else node[propAlias || prop] = value;
  } else {
    setAttribute(node, Aliases[prop] || prop, value);
  }
  return value;
}
function eventHandler(e) {
  if (sharedConfig.registry && sharedConfig.events) {
    if (sharedConfig.events.find(([el, ev]) => ev === e)) return;
  }
  let node = e.target;
  const key = `$$${e.type}`;
  const oriTarget = e.target;
  const oriCurrentTarget = e.currentTarget;
  const retarget = value =>
    Object.defineProperty(e, "target", {
      configurable: true,
      value
    });
  const handleNode = () => {
    const handler = node[key];
    if (handler && !node.disabled) {
      const data = node[`${key}Data`];
      data !== undefined ? handler.call(node, data, e) : handler.call(node, e);
      if (e.cancelBubble) return;
    }
    node.host &&
      typeof node.host !== "string" &&
      !node.host._$host &&
      node.contains(e.target) &&
      retarget(node.host);
    return true;
  };
  const walkUpTree = () => {
    while (handleNode() && (node = node._$host || node.parentNode || node.host));
  };
  Object.defineProperty(e, "currentTarget", {
    configurable: true,
    get() {
      return node || document;
    }
  });
  if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;
  if (e.composedPath) {
    const path = e.composedPath();
    retarget(path[0]);
    for (let i = 0; i < path.length - 2; i++) {
      node = path[i];
      if (!handleNode()) break;
      if (node._$host) {
        node = node._$host;
        walkUpTree();
        break;
      }
      if (node.parentNode === oriCurrentTarget) {
        break;
      }
    }
  } else walkUpTree();
  retarget(oriTarget);
}
function insertExpression(parent, value, current, marker, unwrapArray) {
  const hydrating = isHydrating(parent);
  if (hydrating) {
    !current && (current = [...parent.childNodes]);
    let cleaned = [];
    for (let i = 0; i < current.length; i++) {
      const node = current[i];
      if (node.nodeType === 8 && node.data.slice(0, 2) === "!$") node.remove();
      else cleaned.push(node);
    }
    current = cleaned;
  }
  while (typeof current === "function") current = current();
  if (value === current) return current;
  const t = typeof value,
    multi = marker !== undefined;
  parent = (multi && current[0] && current[0].parentNode) || parent;
  if (t === "string" || t === "number") {
    if (hydrating) return current;
    if (t === "number") {
      value = value.toString();
      if (value === current) return current;
    }
    if (multi) {
      let node = current[0];
      if (node && node.nodeType === 3) {
        node.data !== value && (node.data = value);
      } else node = document.createTextNode(value);
      current = cleanChildren(parent, current, marker, node);
    } else {
      if (current !== "" && typeof current === "string") {
        current = parent.firstChild.data = value;
      } else current = parent.textContent = value;
    }
  } else if (value == null || t === "boolean") {
    if (hydrating) return current;
    current = cleanChildren(parent, current, marker);
  } else if (t === "function") {
    createRenderEffect(() => {
      let v = value();
      while (typeof v === "function") v = v();
      current = insertExpression(parent, v, current, marker);
    });
    return () => current;
  } else if (Array.isArray(value)) {
    const array = [];
    const currentArray = current && Array.isArray(current);
    if (normalizeIncomingArray(array, value, current, unwrapArray)) {
      createRenderEffect(() => (current = insertExpression(parent, array, current, marker, true)));
      return () => current;
    }
    if (hydrating) {
      if (!array.length) return current;
      if (marker === undefined) return (current = [...parent.childNodes]);
      let node = array[0];
      if (node.parentNode !== parent) return current;
      const nodes = [node];
      while ((node = node.nextSibling) !== marker) nodes.push(node);
      return (current = nodes);
    }
    if (array.length === 0) {
      current = cleanChildren(parent, current, marker);
      if (multi) return current;
    } else if (currentArray) {
      if (current.length === 0) {
        appendNodes(parent, array, marker);
      } else reconcileArrays(parent, current, array);
    } else {
      current && cleanChildren(parent);
      appendNodes(parent, array);
    }
    current = array;
  } else if (value.nodeType) {
    if (hydrating && value.parentNode) return (current = multi ? [value] : value);
    if (Array.isArray(current)) {
      if (multi) return (current = cleanChildren(parent, current, marker, value));
      cleanChildren(parent, current, null, value);
    } else if (current == null || current === "" || !parent.firstChild) {
      parent.appendChild(value);
    } else parent.replaceChild(value, parent.firstChild);
    current = value;
  } else;
  return current;
}
function normalizeIncomingArray(normalized, array, current, unwrap) {
  let dynamic = false;
  for (let i = 0, len = array.length; i < len; i++) {
    let item = array[i],
      prev = current && current[normalized.length],
      t;
    if (item == null || item === true || item === false);
    else if ((t = typeof item) === "object" && item.nodeType) {
      normalized.push(item);
    } else if (Array.isArray(item)) {
      dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;
    } else if (t === "function") {
      if (unwrap) {
        while (typeof item === "function") item = item();
        dynamic =
          normalizeIncomingArray(
            normalized,
            Array.isArray(item) ? item : [item],
            Array.isArray(prev) ? prev : [prev]
          ) || dynamic;
      } else {
        normalized.push(item);
        dynamic = true;
      }
    } else {
      const value = String(item);
      if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);
      else normalized.push(document.createTextNode(value));
    }
  }
  return dynamic;
}
function appendNodes(parent, array, marker = null) {
  for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);
}
function cleanChildren(parent, current, marker, replacement) {
  if (marker === undefined) return (parent.textContent = "");
  const node = replacement || document.createTextNode("");
  if (current.length) {
    let inserted = false;
    for (let i = current.length - 1; i >= 0; i--) {
      const el = current[i];
      if (node !== el) {
        const isParent = el.parentNode === parent;
        if (!inserted && !i)
          isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);
        else isParent && el.remove();
      } else inserted = true;
    }
  } else parent.insertBefore(node, marker);
  return [node];
}
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
function createElement(tagName, isSVG = false) {
  return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);
}
function Portal(props) {
  const { useShadow } = props,
    marker = document.createTextNode(""),
    mount = () => props.mount || document.body,
    owner = getOwner();
  let content;
  let hydrating = !!sharedConfig.context;
  createEffect(
    () => {
      if (hydrating) getOwner().user = hydrating = false;
      content || (content = runWithOwner(owner, () => createMemo(() => props.children)));
      const el = mount();
      if (el instanceof HTMLHeadElement) {
        const [clean, setClean] = createSignal(false);
        const cleanup = () => setClean(true);
        createRoot(dispose => insert(el, () => (!clean() ? content() : dispose()), null));
        onCleanup(cleanup);
      } else {
        const container = createElement(props.isSVG ? "g" : "div", props.isSVG),
          renderRoot =
            useShadow && container.attachShadow
              ? container.attachShadow({
                  mode: "open"
                })
              : container;
        Object.defineProperty(container, "_$host", {
          get() {
            return marker.parentNode;
          },
          configurable: true
        });
        insert(renderRoot, content);
        el.appendChild(container);
        props.ref && props.ref(container);
        onCleanup(() => el.removeChild(container));
      }
    },
    undefined,
    {
      render: !hydrating
    }
  );
  return marker;
}

const $RAW = Symbol("store-raw"),
  $NODE = Symbol("store-node"),
  $HAS = Symbol("store-has"),
  $SELF = Symbol("store-self");
function wrap$1(value) {
  let p = value[$PROXY];
  if (!p) {
    Object.defineProperty(value, $PROXY, {
      value: (p = new Proxy(value, proxyTraps$1))
    });
    if (!Array.isArray(value)) {
      const keys = Object.keys(value),
        desc = Object.getOwnPropertyDescriptors(value);
      for (let i = 0, l = keys.length; i < l; i++) {
        const prop = keys[i];
        if (desc[prop].get) {
          Object.defineProperty(value, prop, {
            enumerable: desc[prop].enumerable,
            get: desc[prop].get.bind(p)
          });
        }
      }
    }
  }
  return p;
}
function isWrappable(obj) {
  let proto;
  return (
    obj != null &&
    typeof obj === "object" &&
    (obj[$PROXY] ||
      !(proto = Object.getPrototypeOf(obj)) ||
      proto === Object.prototype ||
      Array.isArray(obj))
  );
}
function unwrap(item, set = new Set()) {
  let result, unwrapped, v, prop;
  if ((result = item != null && item[$RAW])) return result;
  if (!isWrappable(item) || set.has(item)) return item;
  if (Array.isArray(item)) {
    if (Object.isFrozen(item)) item = item.slice(0);
    else set.add(item);
    for (let i = 0, l = item.length; i < l; i++) {
      v = item[i];
      if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;
    }
  } else {
    if (Object.isFrozen(item)) item = Object.assign({}, item);
    else set.add(item);
    const keys = Object.keys(item),
      desc = Object.getOwnPropertyDescriptors(item);
    for (let i = 0, l = keys.length; i < l; i++) {
      prop = keys[i];
      if (desc[prop].get) continue;
      v = item[prop];
      if ((unwrapped = unwrap(v, set)) !== v) item[prop] = unwrapped;
    }
  }
  return item;
}
function getNodes(target, symbol) {
  let nodes = target[symbol];
  if (!nodes)
    Object.defineProperty(target, symbol, {
      value: (nodes = Object.create(null))
    });
  return nodes;
}
function getNode(nodes, property, value) {
  if (nodes[property]) return nodes[property];
  const [s, set] = createSignal(value, {
    equals: false,
    internal: true
  });
  s.$ = set;
  return (nodes[property] = s);
}
function proxyDescriptor$1(target, property) {
  const desc = Reflect.getOwnPropertyDescriptor(target, property);
  if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)
    return desc;
  delete desc.value;
  delete desc.writable;
  desc.get = () => target[$PROXY][property];
  return desc;
}
function trackSelf(target) {
  getListener() && getNode(getNodes(target, $NODE), $SELF)();
}
function ownKeys(target) {
  trackSelf(target);
  return Reflect.ownKeys(target);
}
const proxyTraps$1 = {
  get(target, property, receiver) {
    if (property === $RAW) return target;
    if (property === $PROXY) return receiver;
    if (property === $TRACK) {
      trackSelf(target);
      return receiver;
    }
    const nodes = getNodes(target, $NODE);
    const tracked = nodes[property];
    let value = tracked ? tracked() : target[property];
    if (property === $NODE || property === $HAS || property === "__proto__") return value;
    if (!tracked) {
      const desc = Object.getOwnPropertyDescriptor(target, property);
      if (
        getListener() &&
        (typeof value !== "function" || target.hasOwnProperty(property)) &&
        !(desc && desc.get)
      )
        value = getNode(nodes, property, value)();
    }
    return isWrappable(value) ? wrap$1(value) : value;
  },
  has(target, property) {
    if (
      property === $RAW ||
      property === $PROXY ||
      property === $TRACK ||
      property === $NODE ||
      property === $HAS ||
      property === "__proto__"
    )
      return true;
    getListener() && getNode(getNodes(target, $HAS), property)();
    return property in target;
  },
  set() {
    return true;
  },
  deleteProperty() {
    return true;
  },
  ownKeys: ownKeys,
  getOwnPropertyDescriptor: proxyDescriptor$1
};
function setProperty(state, property, value, deleting = false) {
  if (!deleting && state[property] === value) return;
  const prev = state[property],
    len = state.length;
  if (value === undefined) {
    delete state[property];
    if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();
  } else {
    state[property] = value;
    if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();
  }
  let nodes = getNodes(state, $NODE),
    node;
  if ((node = getNode(nodes, property, prev))) node.$(() => value);
  if (Array.isArray(state) && state.length !== len) {
    for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();
    (node = getNode(nodes, "length", len)) && node.$(state.length);
  }
  (node = nodes[$SELF]) && node.$();
}
function mergeStoreNode(state, value) {
  const keys = Object.keys(value);
  for (let i = 0; i < keys.length; i += 1) {
    const key = keys[i];
    setProperty(state, key, value[key]);
  }
}
function updateArray(current, next) {
  if (typeof next === "function") next = next(current);
  next = unwrap(next);
  if (Array.isArray(next)) {
    if (current === next) return;
    let i = 0,
      len = next.length;
    for (; i < len; i++) {
      const value = next[i];
      if (current[i] !== value) setProperty(current, i, value);
    }
    setProperty(current, "length", len);
  } else mergeStoreNode(current, next);
}
function updatePath(current, path, traversed = []) {
  let part,
    prev = current;
  if (path.length > 1) {
    part = path.shift();
    const partType = typeof part,
      isArray = Array.isArray(current);
    if (Array.isArray(part)) {
      for (let i = 0; i < part.length; i++) {
        updatePath(current, [part[i]].concat(path), traversed);
      }
      return;
    } else if (isArray && partType === "function") {
      for (let i = 0; i < current.length; i++) {
        if (part(current[i], i)) updatePath(current, [i].concat(path), traversed);
      }
      return;
    } else if (isArray && partType === "object") {
      const { from = 0, to = current.length - 1, by = 1 } = part;
      for (let i = from; i <= to; i += by) {
        updatePath(current, [i].concat(path), traversed);
      }
      return;
    } else if (path.length > 1) {
      updatePath(current[part], path, [part].concat(traversed));
      return;
    }
    prev = current[part];
    traversed = [part].concat(traversed);
  }
  let value = path[0];
  if (typeof value === "function") {
    value = value(prev, traversed);
    if (value === prev) return;
  }
  if (part === undefined && value == undefined) return;
  value = unwrap(value);
  if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {
    mergeStoreNode(prev, value);
  } else setProperty(current, part, value);
}
function createStore(...[store, options]) {
  const unwrappedStore = unwrap(store || {});
  const isArray = Array.isArray(unwrappedStore);
  const wrappedStore = wrap$1(unwrappedStore);
  function setStore(...args) {
    batch(() => {
      isArray && args.length === 1
        ? updateArray(unwrappedStore, args[0])
        : updatePath(unwrappedStore, args);
    });
  }
  return [wrappedStore, setStore];
}

const $ROOT = Symbol("store-root");
function applyState(target, parent, property, merge, key) {
  const previous = parent[property];
  if (target === previous) return;
  const isArray = Array.isArray(target);
  if (
    property !== $ROOT &&
    (!isWrappable(target) ||
      !isWrappable(previous) ||
      isArray !== Array.isArray(previous) ||
      (key && target[key] !== previous[key]))
  ) {
    setProperty(parent, property, target);
    return;
  }
  if (isArray) {
    if (
      target.length &&
      previous.length &&
      (!merge || (key && target[0] && target[0][key] != null))
    ) {
      let i, j, start, end, newEnd, item, newIndicesNext, keyVal;
      for (
        start = 0, end = Math.min(previous.length, target.length);
        start < end &&
        (previous[start] === target[start] ||
          (key && previous[start] && target[start] && previous[start][key] === target[start][key]));
        start++
      ) {
        applyState(target[start], previous, start, merge, key);
      }
      const temp = new Array(target.length),
        newIndices = new Map();
      for (
        end = previous.length - 1, newEnd = target.length - 1;
        end >= start &&
        newEnd >= start &&
        (previous[end] === target[newEnd] ||
          (key && previous[end] && target[newEnd] && previous[end][key] === target[newEnd][key]));
        end--, newEnd--
      ) {
        temp[newEnd] = previous[end];
      }
      if (start > newEnd || start > end) {
        for (j = start; j <= newEnd; j++) setProperty(previous, j, target[j]);
        for (; j < target.length; j++) {
          setProperty(previous, j, temp[j]);
          applyState(target[j], previous, j, merge, key);
        }
        if (previous.length > target.length) setProperty(previous, "length", target.length);
        return;
      }
      newIndicesNext = new Array(newEnd + 1);
      for (j = newEnd; j >= start; j--) {
        item = target[j];
        keyVal = key && item ? item[key] : item;
        i = newIndices.get(keyVal);
        newIndicesNext[j] = i === undefined ? -1 : i;
        newIndices.set(keyVal, j);
      }
      for (i = start; i <= end; i++) {
        item = previous[i];
        keyVal = key && item ? item[key] : item;
        j = newIndices.get(keyVal);
        if (j !== undefined && j !== -1) {
          temp[j] = previous[i];
          j = newIndicesNext[j];
          newIndices.set(keyVal, j);
        }
      }
      for (j = start; j < target.length; j++) {
        if (j in temp) {
          setProperty(previous, j, temp[j]);
          applyState(target[j], previous, j, merge, key);
        } else setProperty(previous, j, target[j]);
      }
    } else {
      for (let i = 0, len = target.length; i < len; i++) {
        applyState(target[i], previous, i, merge, key);
      }
    }
    if (previous.length > target.length) setProperty(previous, "length", target.length);
    return;
  }
  const targetKeys = Object.keys(target);
  for (let i = 0, len = targetKeys.length; i < len; i++) {
    applyState(target[targetKeys[i]], previous, targetKeys[i], merge, key);
  }
  const previousKeys = Object.keys(previous);
  for (let i = 0, len = previousKeys.length; i < len; i++) {
    if (target[previousKeys[i]] === undefined) setProperty(previous, previousKeys[i], undefined);
  }
}
function reconcile(value, options = {}) {
  const { merge, key = "id" } = options,
    v = unwrap(value);
  return state => {
    if (!isWrappable(state) || !isWrappable(v)) return v;
    const res = applyState(
      v,
      {
        [$ROOT]: state
      },
      $ROOT,
      merge,
      key
    );
    return res === undefined ? state : res;
  };
}
const producers = new WeakMap();
const setterTraps = {
  get(target, property) {
    if (property === $RAW) return target;
    const value = target[property];
    let proxy;
    return isWrappable(value)
      ? producers.get(value) ||
          (producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)
      : value;
  },
  set(target, property, value) {
    setProperty(target, property, unwrap(value));
    return true;
  },
  deleteProperty(target, property) {
    setProperty(target, property, undefined, true);
    return true;
  }
};
function produce(fn) {
  return state => {
    if (isWrappable(state)) {
      let proxy;
      if (!(proxy = producers.get(state))) {
        producers.set(state, (proxy = new Proxy(state, setterTraps)));
      }
      fn(proxy);
    }
    return state;
  };
}

var _tmpl$$5 = /* @__PURE__ */ template(`<div class=sonner-loading-wrapper><div class=sonner-spinner>`), _tmpl$2$4 = /* @__PURE__ */ template(`<div class=sonner-loading-bar>`), _tmpl$3$2 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 20 20"fill=currentColor height=20 width=20><path fill-rule=evenodd d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"clip-rule=evenodd>`), _tmpl$4$2 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 24 24"fill=currentColor height=20 width=20><path fill-rule=evenodd d="M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z"clip-rule=evenodd>`), _tmpl$5$1 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 20 20"fill=currentColor height=20 width=20><path fill-rule=evenodd d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z"clip-rule=evenodd>`), _tmpl$6$1 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 20 20"fill=currentColor height=20 width=20><path fill-rule=evenodd d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z"clip-rule=evenodd>`), _tmpl$7 = /* @__PURE__ */ template(`<div class=sonner-loader>`), _tmpl$8 = /* @__PURE__ */ template(`<button aria-label="Close toast"data-close-button><svg xmlns=http://www.w3.org/2000/svg width=12 height=12 viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=1.5 stroke-linecap=round stroke-linejoin=round><line x1=18 y1=6 x2=6 y2=18></line><line x1=6 y1=6 x2=18 y2=18>`), _tmpl$9 = /* @__PURE__ */ template(`<li aria-atomic=true role=status tabindex=0 data-sonner-toast>`), _tmpl$10 = /* @__PURE__ */ template(`<div data-icon>`), _tmpl$11 = /* @__PURE__ */ template(`<div data-description>`), _tmpl$12 = /* @__PURE__ */ template(`<div data-content><div data-title>`), _tmpl$13 = /* @__PURE__ */ template(`<button data-button data-cancel>`), _tmpl$14 = /* @__PURE__ */ template(`<button data-button>`), _tmpl$15 = /* @__PURE__ */ template(`<section tabindex=-1>`), _tmpl$16 = /* @__PURE__ */ template(`<ol tabindex=-1 data-sonner-toaster>`);
function styleInject(css, {
  insertAt
} = {}) {
  if (typeof document === "undefined") return;
  const head = document.head || document.getElementsByTagName("head")[0];
  const style = document.createElement("style");
  style.type = "text/css";
  if (insertAt === "top") {
    if (head.firstChild) {
      head.insertBefore(style, head.firstChild);
    } else {
      head.appendChild(style);
    }
  } else {
    head.appendChild(style);
  }
  if (style.styleSheet) {
    style.styleSheet.cssText = css;
  } else {
    style.appendChild(document.createTextNode(css));
  }
}
styleInject(':where(html[dir=ltr]),\n:where([data-sonner-toaster][dir=ltr]) {\n  --toast-icon-margin-start: -3px;\n  --toast-icon-margin-end: 4px;\n  --toast-svg-margin-start: -1px;\n  --toast-svg-margin-end: 0px;\n  --toast-button-margin-start: auto;\n  --toast-button-margin-end: 0;\n  --toast-close-button-start: 0;\n  --toast-close-button-end: unset;\n  --toast-close-button-transform: translate(-35%, -35%);\n}\n:where(html[dir=rtl]),\n:where([data-sonner-toaster][dir=rtl]) {\n  --toast-icon-margin-start: 4px;\n  --toast-icon-margin-end: -3px;\n  --toast-svg-margin-start: 0px;\n  --toast-svg-margin-end: -1px;\n  --toast-button-margin-start: 0;\n  --toast-button-margin-end: auto;\n  --toast-close-button-start: unset;\n  --toast-close-button-end: 0;\n  --toast-close-button-transform: translate(35%, -35%);\n}\n:where([data-sonner-toaster]) {\n  position: fixed;\n  width: var(--width);\n  font-family:\n    ui-sans-serif,\n    system-ui,\n    -apple-system,\n    BlinkMacSystemFont,\n    Segoe UI,\n    Roboto,\n    Helvetica Neue,\n    Arial,\n    Noto Sans,\n    sans-serif,\n    Apple Color Emoji,\n    Segoe UI Emoji,\n    Segoe UI Symbol,\n    Noto Color Emoji;\n  --gray1: hsl(0, 0%, 99%);\n  --gray2: hsl(0, 0%, 97.3%);\n  --gray3: hsl(0, 0%, 95.1%);\n  --gray4: hsl(0, 0%, 93%);\n  --gray5: hsl(0, 0%, 90.9%);\n  --gray6: hsl(0, 0%, 88.7%);\n  --gray7: hsl(0, 0%, 85.8%);\n  --gray8: hsl(0, 0%, 78%);\n  --gray9: hsl(0, 0%, 56.1%);\n  --gray10: hsl(0, 0%, 52.3%);\n  --gray11: hsl(0, 0%, 43.5%);\n  --gray12: hsl(0, 0%, 9%);\n  --border-radius: 8px;\n  box-sizing: border-box;\n  padding: 0;\n  margin: 0;\n  list-style: none;\n  outline: none;\n  z-index: 999999999;\n}\n:where([data-sonner-toaster][data-x-position=right]) {\n  right: max(var(--offset), env(safe-area-inset-right));\n}\n:where([data-sonner-toaster][data-x-position=left]) {\n  left: max(var(--offset), env(safe-area-inset-left));\n}\n:where([data-sonner-toaster][data-x-position=center]) {\n  left: 50%;\n  transform: translateX(-50%);\n}\n:where([data-sonner-toaster][data-y-position=top]) {\n  top: max(var(--offset), env(safe-area-inset-top));\n}\n:where([data-sonner-toaster][data-y-position=bottom]) {\n  bottom: max(var(--offset), env(safe-area-inset-bottom));\n}\n:where([data-sonner-toast]) {\n  --y: translateY(100%);\n  --lift-amount: calc(var(--lift) * var(--gap));\n  z-index: var(--z-index);\n  position: absolute;\n  opacity: 0;\n  transform: var(--y);\n  filter: blur(0);\n  touch-action: none;\n  transition:\n    transform 400ms,\n    opacity 400ms,\n    height 400ms,\n    box-shadow 200ms;\n  box-sizing: border-box;\n  outline: none;\n  overflow-wrap: anywhere;\n}\n:where([data-sonner-toast][data-styled=true]) {\n  padding: 16px;\n  background: var(--normal-bg);\n  border: 1px solid var(--normal-border);\n  color: var(--normal-text);\n  border-radius: var(--border-radius);\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);\n  width: var(--width);\n  font-size: 13px;\n  display: flex;\n  align-items: center;\n  gap: 6px;\n}\n:where([data-sonner-toast]:focus-visible) {\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2);\n}\n:where([data-sonner-toast][data-y-position=top]) {\n  top: 0;\n  --y: translateY(-100%);\n  --lift: 1;\n  --lift-amount: calc(1 * var(--gap));\n}\n:where([data-sonner-toast][data-y-position=bottom]) {\n  bottom: 0;\n  --y: translateY(100%);\n  --lift: -1;\n  --lift-amount: calc(var(--lift) * var(--gap));\n}\n:where([data-sonner-toast]) :where([data-description]) {\n  font-weight: 400;\n  line-height: 1.4;\n  color: inherit;\n}\n:where([data-sonner-toast]) :where([data-title]) {\n  font-weight: 500;\n  line-height: 1.5;\n  color: inherit;\n}\n:where([data-sonner-toast]) :where([data-icon]) {\n  display: flex;\n  height: 16px;\n  width: 16px;\n  position: relative;\n  justify-content: flex-start;\n  align-items: center;\n  flex-shrink: 0;\n  margin-left: var(--toast-icon-margin-start);\n  margin-right: var(--toast-icon-margin-end);\n}\n:where([data-sonner-toast][data-promise=true]) :where([data-icon]) > svg {\n  opacity: 0;\n  transform: scale(0.8);\n  transform-origin: center;\n  animation: sonner-fade-in 300ms ease forwards;\n}\n:where([data-sonner-toast]) :where([data-icon]) > * {\n  flex-shrink: 0;\n}\n:where([data-sonner-toast]) :where([data-icon]) svg {\n  margin-left: var(--toast-svg-margin-start);\n  margin-right: var(--toast-svg-margin-end);\n}\n:where([data-sonner-toast]) :where([data-content]) {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n[data-sonner-toast][data-styled=true] [data-button] {\n  border-radius: 4px;\n  padding-left: 8px;\n  padding-right: 8px;\n  height: 24px;\n  font-size: 12px;\n  color: var(--normal-bg);\n  background: var(--normal-text);\n  margin-left: var(--toast-button-margin-start);\n  margin-right: var(--toast-button-margin-end);\n  border: none;\n  cursor: pointer;\n  outline: none;\n  display: flex;\n  align-items: center;\n  flex-shrink: 0;\n  transition: opacity 400ms, box-shadow 200ms;\n}\n:where([data-sonner-toast]) :where([data-button]):focus-visible {\n  box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.4);\n}\n:where([data-sonner-toast]) :where([data-button]):first-of-type {\n  margin-left: var(--toast-button-margin-start);\n  margin-right: var(--toast-button-margin-end);\n}\n:where([data-sonner-toast]) :where([data-cancel]) {\n  color: var(--normal-text);\n  background: rgba(0, 0, 0, 0.08);\n}\n:where([data-sonner-toast][data-theme=dark]) :where([data-cancel]) {\n  background: rgba(255, 255, 255, 0.3);\n}\n:where([data-sonner-toast]) :where([data-close-button]) {\n  position: absolute;\n  left: var(--toast-close-button-start);\n  right: var(--toast-close-button-end);\n  top: 0;\n  height: 20px;\n  width: 20px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  padding: 0;\n  background: var(--gray1);\n  color: var(--gray12);\n  border: 1px solid var(--gray4);\n  transform: var(--toast-close-button-transform);\n  border-radius: 50%;\n  cursor: pointer;\n  z-index: 1;\n  transition:\n    opacity 100ms,\n    background 200ms,\n    border-color 200ms;\n}\n:where([data-sonner-toast]) :where([data-close-button]):focus-visible {\n  box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(0, 0, 0, 0.2);\n}\n:where([data-sonner-toast]) :where([data-disabled=true]) {\n  cursor: not-allowed;\n}\n:where([data-sonner-toast]):hover :where([data-close-button]):hover {\n  background: var(--gray2);\n  border-color: var(--gray5);\n}\n:where([data-sonner-toast][data-swiping=true])::before {\n  content: "";\n  position: absolute;\n  left: 0;\n  right: 0;\n  height: 100%;\n  z-index: -1;\n}\n:where([data-sonner-toast][data-y-position=top][data-swiping=true])::before {\n  bottom: 50%;\n  transform: scaleY(3) translateY(50%);\n}\n:where([data-sonner-toast][data-y-position=bottom][data-swiping=true])::before {\n  top: 50%;\n  transform: scaleY(3) translateY(-50%);\n}\n:where([data-sonner-toast][data-swiping=false][data-removed=true])::before {\n  content: "";\n  position: absolute;\n  inset: 0;\n  transform: scaleY(2);\n}\n:where([data-sonner-toast])::after {\n  content: "";\n  position: absolute;\n  left: 0;\n  height: calc(var(--gap) + 1px);\n  bottom: 100%;\n  width: 100%;\n}\n:where([data-sonner-toast][data-mounted=true]) {\n  --y: translateY(0);\n  opacity: 1;\n}\n:where([data-sonner-toast][data-expanded=false][data-front=false]) {\n  --scale: var(--toasts-before) * 0.05 + 1;\n  --y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));\n  height: var(--front-toast-height);\n}\n:where([data-sonner-toast]) > * {\n  transition: opacity 400ms;\n}\n:where([data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]) > * {\n  opacity: 0;\n}\n:where([data-sonner-toast][data-visible=false]) {\n  opacity: 0;\n  pointer-events: none;\n}\n:where([data-sonner-toast][data-mounted=true][data-expanded=true]) {\n  --y: translateY(calc(var(--lift) * var(--offset)));\n  height: var(--initial-height);\n}\n:where([data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]) {\n  --y: translateY(calc(var(--lift) * -100%));\n  opacity: 0;\n}\n:where([data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]) {\n  --y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));\n  opacity: 0;\n}\n:where([data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]) {\n  --y: translateY(40%);\n  opacity: 0;\n  transition: transform 500ms, opacity 200ms;\n}\n:where([data-sonner-toast][data-removed=true][data-front=false])::before {\n  height: calc(var(--initial-height) + 20%);\n}\n[data-sonner-toast][data-swiping=true] {\n  transform: var(--y) translateY(var(--swipe-amount, 0px));\n  transition: none;\n}\n[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],\n[data-sonner-toast][data-swipe-out=true][data-y-position=top] {\n  animation: swipe-out 200ms ease-out forwards;\n}\n@keyframes swipe-out {\n  from {\n    transform: translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));\n    opacity: 1;\n  }\n  to {\n    transform: translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));\n    opacity: 0;\n  }\n}\n@media (max-width: 600px) {\n  [data-sonner-toaster] {\n    position: fixed;\n    --mobile-offset: 16px;\n    right: var(--mobile-offset);\n    left: var(--mobile-offset);\n    width: 100%;\n  }\n  [data-sonner-toaster] [data-sonner-toast] {\n    left: 0;\n    right: 0;\n    width: calc(100% - var(--mobile-offset) * 2);\n  }\n  [data-sonner-toaster][data-x-position=left] {\n    left: var(--mobile-offset);\n  }\n  [data-sonner-toaster][data-y-position=bottom] {\n    bottom: 20px;\n  }\n  [data-sonner-toaster][data-y-position=top] {\n    top: 20px;\n  }\n  [data-sonner-toaster][data-x-position=center] {\n    left: var(--mobile-offset);\n    right: var(--mobile-offset);\n    transform: none;\n  }\n}\n[data-sonner-toaster][data-theme=light] {\n  --normal-bg: #fff;\n  --normal-border: var(--gray4);\n  --normal-text: var(--gray12);\n  --success-bg: hsl(143, 85%, 96%);\n  --success-border: hsl(145, 92%, 91%);\n  --success-text: hsl(140, 100%, 27%);\n  --info-bg: hsl(208, 100%, 97%);\n  --info-border: hsl(221, 91%, 91%);\n  --info-text: hsl(210, 92%, 45%);\n  --warning-bg: hsl(49, 100%, 97%);\n  --warning-border: hsl(49, 91%, 91%);\n  --warning-text: hsl(31, 92%, 45%);\n  --error-bg: hsl(359, 100%, 97%);\n  --error-border: hsl(359, 100%, 94%);\n  --error-text: hsl(360, 100%, 45%);\n}\n[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true] {\n  --normal-bg: #000;\n  --normal-border: hsl(0, 0%, 20%);\n  --normal-text: var(--gray1);\n}\n[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true] {\n  --normal-bg: #fff;\n  --normal-border: var(--gray3);\n  --normal-text: var(--gray12);\n}\n[data-sonner-toaster][data-theme=dark] {\n  --normal-bg: #000;\n  --normal-border: hsl(0, 0%, 20%);\n  --normal-text: var(--gray1);\n  --success-bg: hsl(150, 100%, 6%);\n  --success-border: hsl(147, 100%, 12%);\n  --success-text: hsl(150, 86%, 65%);\n  --info-bg: hsl(215, 100%, 6%);\n  --info-border: hsl(223, 100%, 12%);\n  --info-text: hsl(216, 87%, 65%);\n  --warning-bg: hsl(64, 100%, 6%);\n  --warning-border: hsl(60, 100%, 12%);\n  --warning-text: hsl(46, 87%, 65%);\n  --error-bg: hsl(358, 76%, 10%);\n  --error-border: hsl(357, 89%, 16%);\n  --error-text: hsl(358, 100%, 81%);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=success] {\n  background: var(--success-bg);\n  border-color: var(--success-border);\n  color: var(--success-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button] {\n  background: var(--success-bg);\n  border-color: var(--success-border);\n  color: var(--success-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=info] {\n  background: var(--info-bg);\n  border-color: var(--info-border);\n  color: var(--info-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button] {\n  background: var(--info-bg);\n  border-color: var(--info-border);\n  color: var(--info-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=warning] {\n  background: var(--warning-bg);\n  border-color: var(--warning-border);\n  color: var(--warning-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button] {\n  background: var(--warning-bg);\n  border-color: var(--warning-border);\n  color: var(--warning-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=error] {\n  background: var(--error-bg);\n  border-color: var(--error-border);\n  color: var(--error-text);\n}\n[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button] {\n  background: var(--error-bg);\n  border-color: var(--error-border);\n  color: var(--error-text);\n}\n.sonner-loading-wrapper {\n  --size: 16px;\n  height: var(--size);\n  width: var(--size);\n  position: absolute;\n  inset: 0;\n  z-index: 10;\n}\n.sonner-loading-wrapper[data-visible=false] {\n  transform-origin: center;\n  animation: sonner-fade-out 0.2s ease forwards;\n}\n.sonner-spinner {\n  position: relative;\n  top: 50%;\n  left: 50%;\n  height: var(--size);\n  width: var(--size);\n}\n.sonner-loading-bar {\n  animation: sonner-spin 1.2s linear infinite;\n  background: var(--gray11);\n  border-radius: 6px;\n  height: 8%;\n  left: -10%;\n  position: absolute;\n  top: -3.9%;\n  width: 24%;\n}\n.sonner-loading-bar:nth-child(1) {\n  animation-delay: -1.2s;\n  transform: rotate(0.0001deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(2) {\n  animation-delay: -1.1s;\n  transform: rotate(30deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(3) {\n  animation-delay: -1s;\n  transform: rotate(60deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(4) {\n  animation-delay: -0.9s;\n  transform: rotate(90deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(5) {\n  animation-delay: -0.8s;\n  transform: rotate(120deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(6) {\n  animation-delay: -0.7s;\n  transform: rotate(150deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(7) {\n  animation-delay: -0.6s;\n  transform: rotate(180deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(8) {\n  animation-delay: -0.5s;\n  transform: rotate(210deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(9) {\n  animation-delay: -0.4s;\n  transform: rotate(240deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(10) {\n  animation-delay: -0.3s;\n  transform: rotate(270deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(11) {\n  animation-delay: -0.2s;\n  transform: rotate(300deg) translate(146%);\n}\n.sonner-loading-bar:nth-child(12) {\n  animation-delay: -0.1s;\n  transform: rotate(330deg) translate(146%);\n}\n@keyframes sonner-fade-in {\n  0% {\n    opacity: 0;\n    transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n@keyframes sonner-fade-out {\n  0% {\n    opacity: 1;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0.8);\n  }\n}\n@keyframes sonner-spin {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0.15;\n  }\n}\n@media (prefers-reduced-motion) {\n  [data-sonner-toast],\n  [data-sonner-toast] > *,\n  .sonner-loading-bar {\n    transition: none !important;\n    animation: none !important;\n  }\n}\n.sonner-loader {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  transform-origin: center;\n  transition: opacity 200ms, transform 200ms;\n}\n.sonner-loader[data-visible=false] {\n  opacity: 0;\n  transform: scale(0.8) translate(-50%, -50%);\n}\n');
var bars = Array(12).fill(0);
function Loader(props) {
  return (() => {
    var _el$ = _tmpl$$5(), _el$2 = _el$.firstChild;
    insert(_el$2, createComponent(For, {
      each: bars,
      children: () => _tmpl$2$4()
    }));
    createRenderEffect(() => setAttribute(_el$, "data-visible", props.visible));
    return _el$;
  })();
}
function SuccessIcon() {
  return _tmpl$3$2();
}
function WarningIcon() {
  return _tmpl$4$2();
}
function InfoIcon() {
  return _tmpl$5$1();
}
function ErrorIcon() {
  return _tmpl$6$1();
}
function getAsset(type) {
  switch (type) {
    case "success":
      return SuccessIcon;
    case "info":
      return InfoIcon;
    case "warning":
      return WarningIcon;
    case "error":
      return ErrorIcon;
    default:
      return null;
  }
}
var toastsCounter = 0;
var Observer = class {
  subscribers;
  toasts;
  constructor() {
    this.subscribers = [];
    this.toasts = [];
  }
  // We use arrow functions to maintain the correct `this` reference
  subscribe = (subscriber) => {
    this.subscribers.push(subscriber);
    return () => {
      const index = this.subscribers.indexOf(subscriber);
      this.subscribers.splice(index, 1);
    };
  };
  publish = (data) => {
    this.subscribers.forEach((subscriber) => subscriber(data));
  };
  addToast = (data) => {
    this.publish(data);
    this.toasts = [...this.toasts, data];
  };
  create = (data) => {
    const {
      message,
      ...rest
    } = data;
    const id = typeof data?.id === "number" || data.id && data.id?.length > 0 ? data.id : toastsCounter++;
    const alreadyExists = this.toasts.find((toast2) => {
      return toast2.id === id;
    });
    if (alreadyExists) {
      this.toasts = this.toasts.map((toast2) => {
        if (toast2.id === id) {
          this.publish({
            ...toast2,
            ...data,
            id,
            title: message
          });
          return {
            ...toast2,
            ...data,
            id,
            title: message
          };
        }
        return toast2;
      });
    } else {
      this.addToast({
        title: message,
        ...rest,
        id
      });
    }
    return id;
  };
  dismiss = (id) => {
    if (!id) {
      this.toasts.forEach((toast2) => {
        this.subscribers.forEach((subscriber) => subscriber({
          id: toast2.id,
          dismiss: true
        }));
      });
    }
    this.subscribers.forEach((subscriber) => subscriber({
      id,
      dismiss: true
    }));
    return id;
  };
  message = (message, data) => {
    return this.create({
      ...data,
      message
    });
  };
  error = (message, data) => {
    return this.create({
      ...data,
      message,
      type: "error"
    });
  };
  success = (message, data) => {
    return this.create({
      ...data,
      type: "success",
      message
    });
  };
  info = (message, data) => {
    return this.create({
      ...data,
      type: "info",
      message
    });
  };
  warning = (message, data) => {
    return this.create({
      ...data,
      type: "warning",
      message
    });
  };
  promise = (promise, data) => {
    if (!data) {
      return;
    }
    let id;
    if (data.loading !== void 0) {
      id = this.create({
        ...data,
        promise,
        type: "loading",
        message: data.loading
      });
    }
    const p = promise instanceof Promise ? promise : promise();
    let shouldDismiss = id !== void 0;
    p.then((response) => {
      if (response && typeof response.ok === "boolean" && !response.ok) {
        shouldDismiss = false;
        const message = typeof data.error === "function" ? data.error(`HTTP error! status: ${response.status}`) : data.error;
        this.create({
          id,
          type: "error",
          message
        });
      } else if (data.success !== void 0) {
        shouldDismiss = false;
        const message = typeof data.success === "function" ? data.success(response) : data.success;
        this.create({
          id,
          type: "success",
          message
        });
      }
    }).catch((error) => {
      if (data.error !== void 0) {
        shouldDismiss = false;
        const message = typeof data.error === "function" ? data.error(error) : data.error;
        this.create({
          id,
          type: "error",
          message
        });
      }
    }).finally(() => {
      if (shouldDismiss) {
        this.dismiss(id);
        id = void 0;
      }
      data.finally?.();
    });
    return id;
  };
  loading = (message, data) => {
    return this.create({
      ...data,
      type: "loading",
      message
    });
  };
  // We can't provide the toast we just created as a prop as we didn't create it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?
  custom = (jsx, data) => {
    const id = data?.id || toastsCounter++;
    this.publish({
      jsx: jsx(id),
      id,
      ...data
    });
    return id;
  };
};
var ToastState = new Observer();
function toastFunction(message, data) {
  const id = data?.id || toastsCounter++;
  ToastState.addToast({
    title: message,
    ...data,
    id
  });
  return id;
}
var basicToast = toastFunction;
var toast = Object.assign(basicToast, {
  success: ToastState.success,
  info: ToastState.info,
  warning: ToastState.warning,
  error: ToastState.error,
  custom: ToastState.custom,
  message: ToastState.message,
  promise: ToastState.promise,
  dismiss: ToastState.dismiss,
  loading: ToastState.loading
});
function useIsDocumentHidden() {
  const [isDocumentHidden, setIsDocumentHidden] = createSignal(false);
  onMount(() => {
    const callback = () => {
      setIsDocumentHidden(document.hidden);
    };
    document.addEventListener("visibilitychange", callback);
    onCleanup(() => {
      window.removeEventListener("visibilitychange", callback);
    });
  });
  return isDocumentHidden;
}
var VISIBLE_TOASTS_AMOUNT = 3;
var VIEWPORT_OFFSET = "32px";
var TOAST_LIFETIME = 4e3;
var TOAST_WIDTH = 356;
var GAP = 14;
var SWIPE_TRESHOLD = 20;
var TIME_BEFORE_UNMOUNT = 200;
function _cn(...classes) {
  return classes.filter(Boolean).join(" ");
}
var Toast = (props) => {
  const [mounted, setMounted] = createSignal(false);
  const [removed, setRemoved] = createSignal(false);
  const [swiping, setSwiping] = createSignal(false);
  const [swipeOut, setSwipeOut] = createSignal(false);
  const [offsetBeforeRemove, setOffsetBeforeRemove] = createSignal(0);
  const [initialHeight, setInitialHeight] = createSignal(0);
  let toastRef;
  const isFront = () => props.index === 0;
  const isVisible = () => props.index + 1 <= props.visibleToasts;
  const toastType = () => props.toast.type;
  const toastClassname = () => props.toast.class || "";
  const toastDescriptionClassname = () => props.toast.descriptionClass || "";
  const propsWithDefaults = mergeProps({
    gap: GAP
  }, props);
  const heightIndex = () => props.heights.findIndex((height) => height.toastId === props.toast.id) || 0;
  const duration = () => props.toast.duration || props.duration || TOAST_LIFETIME;
  let closeTimerStartTimeRef = 0;
  let lastCloseTimerStartTimeRef = 0;
  const [pointerStartRef, setPointerStartRef] = createSignal(null);
  const coords = () => props.position.split("-");
  const toastsHeightBefore = () => {
    return props.heights.reduce((prev, curr, reducerIndex) => {
      if (reducerIndex >= heightIndex()) return prev;
      return prev + curr.height;
    }, 0);
  };
  const isDocumentHidden = useIsDocumentHidden();
  const invert = () => props.toast.invert || props.invert;
  const disabled = () => toastType() === "loading";
  const offset = () => heightIndex() * propsWithDefaults.gap + toastsHeightBefore();
  function getLoadingIcon() {
    if (props.icons?.loading) {
      return (() => {
        var _el$8 = _tmpl$7();
        insert(_el$8, () => props.icons.loading);
        createRenderEffect(() => setAttribute(_el$8, "data-visible", toastType() === "loading"));
        return _el$8;
      })();
    }
    return createComponent(Loader, {
      get visible() {
        return toastType() === "loading";
      }
    });
  }
  onMount(() => {
    setMounted(true);
  });
  onMount(() => {
    const toastNode = toastRef;
    const originalHeight = toastNode.style.height;
    toastNode.style.height = "auto";
    const newHeight = toastNode.getBoundingClientRect().height;
    toastNode.style.height = originalHeight;
    setInitialHeight(newHeight);
    createEffect(() => {
      props.setHeights((heights) => {
        const alreadyExists = heights.find((height) => height.toastId === props.toast.id);
        if (!alreadyExists) return [{
          toastId: props.toast.id,
          height: newHeight,
          position: props.toast.position
        }, ...heights];
        else return heights.map((height) => height.toastId === props.toast.id ? {
          ...height,
          height: newHeight
        } : height);
      });
    });
  });
  const deleteToast = () => {
    setRemoved(true);
    setOffsetBeforeRemove(offset());
    props.setHeights((h) => h.filter((height) => height.toastId !== props.toast.id));
    setTimeout(() => {
      props.removeToast(props.toast);
    }, TIME_BEFORE_UNMOUNT);
  };
  let remainingTime = duration();
  createEffect(on(() => [props.expanded, props.interacting, props.toast, duration(), props.toast.promise, toastType(), props.pauseWhenPageIsHidden, isDocumentHidden()], ([expanded, interacting, toast2, duration2, promise, toastType2, pauseWhenPageIsHidden, isDocumentHidden2]) => {
    if (promise && toastType2 === "loading" || duration2 === Number.POSITIVE_INFINITY) return;
    let timeoutId;
    const pauseTimer = () => {
      if (lastCloseTimerStartTimeRef < closeTimerStartTimeRef) {
        const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef;
        remainingTime = remainingTime - elapsedTime;
      }
      lastCloseTimerStartTimeRef = (/* @__PURE__ */ new Date()).getTime();
    };
    const startTimer = () => {
      closeTimerStartTimeRef = (/* @__PURE__ */ new Date()).getTime();
      timeoutId = setTimeout(() => {
        toast2.onAutoClose?.(toast2);
        deleteToast();
      }, remainingTime);
    };
    if (expanded || interacting || pauseWhenPageIsHidden && isDocumentHidden2) pauseTimer();
    else startTimer();
    onCleanup(() => {
      clearTimeout(timeoutId);
    });
  }));
  createEffect(on(() => props.toast.id, (toastId) => {
    const toastNode = toastRef;
    if (toastNode) {
      const height = toastNode.getBoundingClientRect().height;
      setInitialHeight(height);
      props.setHeights((h) => [{
        toastId,
        height,
        position: props.toast.position
      }, ...h]);
      onCleanup(() => {
        props.setHeights((h) => h.filter((height2) => height2.toastId !== toastId));
      });
    }
  }));
  createEffect(on(() => props.toast.delete, (d) => {
    if (d) deleteToast();
  }));
  return (() => {
    var _el$9 = _tmpl$9();
    _el$9.$$pointermove = (event) => {
      if (!pointerStartRef()) return;
      const yPosition = event.clientY - pointerStartRef().y;
      const xPosition = event.clientX - pointerStartRef().x;
      const clamp = coords()[0] === "top" ? Math.min : Math.max;
      const clampedY = clamp(0, yPosition);
      const swipeStartThreshold = event.pointerType === "touch" ? 10 : 2;
      const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;
      if (isAllowedToSwipe) {
        toastRef?.style.setProperty("--swipe-amount", `${yPosition}px`);
      } else if (Math.abs(xPosition) > swipeStartThreshold) {
        setPointerStartRef(null);
      }
    };
    _el$9.$$pointerup = () => {
      if (swipeOut()) return;
      setPointerStartRef(null);
      const swipeAmount = Number(toastRef?.style.getPropertyValue("--swipe-amount").replace("px", "") || 0);
      if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {
        setOffsetBeforeRemove(offset());
        props.toast.onDismiss?.(props.toast);
        deleteToast();
        setSwipeOut(true);
        return;
      }
      toastRef?.style.setProperty("--swipe-amount", "0px");
      setSwiping(false);
    };
    _el$9.$$pointerdown = (event) => {
      if (disabled()) return;
      setOffsetBeforeRemove(offset());
      event.target.setPointerCapture(event.pointerId);
      if (event.target.tagName === "BUTTON") return;
      setSwiping(true);
      setPointerStartRef({
        x: event.clientX,
        y: event.clientY
      });
    };
    var _ref$ = toastRef;
    typeof _ref$ === "function" ? use(_ref$, _el$9) : toastRef = _el$9;
    insert(_el$9, createComponent(Show, {
      get when() {
        return props.closeButton && !props.toast.jsx;
      },
      get children() {
        var _el$10 = _tmpl$8();
        addEventListener(_el$10, "click", disabled() ? void 0 : () => {
          deleteToast();
          props.toast.onDismiss?.(props.toast);
        }, true);
        createRenderEffect((_p$) => {
          var _v$ = disabled(), _v$2 = _cn(props.classes?.closeButton, props.toast?.classes?.closeButton);
          _v$ !== _p$.e && setAttribute(_el$10, "data-disabled", _p$.e = _v$);
          _v$2 !== _p$.t && className(_el$10, _p$.t = _v$2);
          return _p$;
        }, {
          e: void 0,
          t: void 0
        });
        return _el$10;
      }
    }), null);
    insert(_el$9, createComponent(Show, {
      get when() {
        return props.toast.jsx || props.toast.title instanceof Element;
      },
      get fallback() {
        return [createComponent(Show, {
          get when() {
            return toastType() || props.toast.icon || props.toast.promise;
          },
          get children() {
            var _el$11 = _tmpl$10();
            insert(_el$11, (() => {
              var _c$ = createMemo(() => !!(props.toast.promise || props.toast.type === "loading" && !props.toast.icon));
              return () => _c$() ? props.toast.icon || getLoadingIcon() : null;
            })(), null);
            insert(_el$11, (() => {
              var _c$2 = createMemo(() => props.toast.type !== "loading");
              return () => _c$2() ? props.toast.icon || props.icons?.[toastType()] || getAsset(toastType())() : null;
            })(), null);
            return _el$11;
          }
        }), (() => {
          var _el$12 = _tmpl$12(), _el$13 = _el$12.firstChild;
          insert(_el$13, () => props.toast.title);
          insert(_el$12, createComponent(Show, {
            get when() {
              return props.toast.description;
            },
            get children() {
              var _el$14 = _tmpl$11();
              insert(_el$14, () => props.toast.description);
              createRenderEffect(() => className(_el$14, _cn(props.descriptionClass, toastDescriptionClassname(), props.classes?.description, props.toast?.classes?.description)));
              return _el$14;
            }
          }), null);
          createRenderEffect(() => className(_el$13, _cn(props.classes?.title, props.toast?.classes?.title)));
          return _el$12;
        })(), createComponent(Show, {
          get when() {
            return props.toast.cancel;
          },
          get children() {
            var _el$15 = _tmpl$13();
            _el$15.$$click = () => {
              deleteToast();
              if (props.toast.cancel?.onClick) props.toast.cancel.onClick();
            };
            insert(_el$15, () => props.toast.cancel.label);
            createRenderEffect((_p$) => {
              var _v$20 = props.toast.cancelButtonStyle || props.cancelButtonStyle, _v$21 = _cn(props.classes?.cancelButton, props.toast?.classes?.cancelButton);
              _p$.e = style(_el$15, _v$20, _p$.e);
              _v$21 !== _p$.t && className(_el$15, _p$.t = _v$21);
              return _p$;
            }, {
              e: void 0,
              t: void 0
            });
            return _el$15;
          }
        }), createComponent(Show, {
          get when() {
            return props.toast.action;
          },
          get children() {
            var _el$16 = _tmpl$14();
            _el$16.$$click = (event) => {
              props.toast.action?.onClick(event);
              if (event.defaultPrevented) return;
              deleteToast();
            };
            insert(_el$16, () => props.toast.action.label);
            createRenderEffect((_p$) => {
              var _v$22 = props.toast.actionButtonStyle || props.actionButtonStyle, _v$23 = _cn(props.classes?.actionButton, props.toast?.classes?.actionButton);
              _p$.e = style(_el$16, _v$22, _p$.e);
              _v$23 !== _p$.t && className(_el$16, _p$.t = _v$23);
              return _p$;
            }, {
              e: void 0,
              t: void 0
            });
            return _el$16;
          }
        })];
      },
      get children() {
        return props.toast.jsx || props.toast.title;
      }
    }), null);
    createRenderEffect((_p$) => {
      var _v$3 = props.toast.important ? "assertive" : "polite", _v$4 = _cn(props.class, toastClassname(), props.classes?.toast, props.toast?.classes?.toast, props.classes?.default, props.classes?.[toastType()], props.toast?.classes?.[toastType()]), _v$5 = !(props.toast.jsx || props.toast.unstyled || props.unstyled), _v$6 = mounted(), _v$7 = Boolean(props.toast.promise), _v$8 = removed(), _v$9 = isVisible(), _v$10 = coords()[0], _v$11 = coords()[1], _v$12 = props.index, _v$13 = isFront(), _v$14 = swiping(), _v$15 = toastType(), _v$16 = invert(), _v$17 = swipeOut(), _v$18 = Boolean(props.expanded || props.expandByDefault && mounted()), _v$19 = {
        "--index": props.index,
        "--toasts-before": props.index,
        "--z-index": props.toasts.length - props.index,
        "--offset": `${removed() ? offsetBeforeRemove() : offset()}px`,
        "--initial-height": props.expandByDefault ? "auto" : `${initialHeight()}px`,
        ...props.style,
        ...props.toast.style
      };
      _v$3 !== _p$.e && setAttribute(_el$9, "aria-live", _p$.e = _v$3);
      _v$4 !== _p$.t && className(_el$9, _p$.t = _v$4);
      _v$5 !== _p$.a && setAttribute(_el$9, "data-styled", _p$.a = _v$5);
      _v$6 !== _p$.o && setAttribute(_el$9, "data-mounted", _p$.o = _v$6);
      _v$7 !== _p$.i && setAttribute(_el$9, "data-promise", _p$.i = _v$7);
      _v$8 !== _p$.n && setAttribute(_el$9, "data-removed", _p$.n = _v$8);
      _v$9 !== _p$.s && setAttribute(_el$9, "data-visible", _p$.s = _v$9);
      _v$10 !== _p$.h && setAttribute(_el$9, "data-y-position", _p$.h = _v$10);
      _v$11 !== _p$.r && setAttribute(_el$9, "data-x-position", _p$.r = _v$11);
      _v$12 !== _p$.d && setAttribute(_el$9, "data-index", _p$.d = _v$12);
      _v$13 !== _p$.l && setAttribute(_el$9, "data-front", _p$.l = _v$13);
      _v$14 !== _p$.u && setAttribute(_el$9, "data-swiping", _p$.u = _v$14);
      _v$15 !== _p$.c && setAttribute(_el$9, "data-type", _p$.c = _v$15);
      _v$16 !== _p$.w && setAttribute(_el$9, "data-invert", _p$.w = _v$16);
      _v$17 !== _p$.m && setAttribute(_el$9, "data-swipe-out", _p$.m = _v$17);
      _v$18 !== _p$.f && setAttribute(_el$9, "data-expanded", _p$.f = _v$18);
      _p$.y = style(_el$9, _v$19, _p$.y);
      return _p$;
    }, {
      e: void 0,
      t: void 0,
      a: void 0,
      o: void 0,
      i: void 0,
      n: void 0,
      s: void 0,
      h: void 0,
      r: void 0,
      d: void 0,
      l: void 0,
      u: void 0,
      c: void 0,
      w: void 0,
      m: void 0,
      f: void 0,
      y: void 0
    });
    return _el$9;
  })();
};
function getDocumentDirection() {
  if (typeof window === "undefined") return "ltr";
  if (typeof document === "undefined") return "ltr";
  const dirAttribute = document.documentElement.getAttribute("dir");
  if (dirAttribute === "auto" || !dirAttribute) return window.getComputedStyle(document.documentElement).direction;
  return dirAttribute;
}
var Toaster$1 = (props) => {
  const propsWithDefaults = mergeProps({
    position: "bottom-right",
    hotkey: ["altKey", "KeyT"],
    theme: "light",
    visibleToasts: VISIBLE_TOASTS_AMOUNT,
    dir: getDocumentDirection()
  }, props);
  const [toastsStore, setToastsStore] = createStore({
    toasts: []
  });
  const possiblePositions = () => {
    return Array.from(new Set([propsWithDefaults.position].concat(toastsStore.toasts.filter((toast2) => toast2.position).map((toast2) => toast2.position))));
  };
  const [heights, setHeights] = createSignal([]);
  const [expanded, setExpanded] = createSignal(false);
  const [interacting, setInteracting] = createSignal(false);
  let listRef;
  const hotkeyLabel = () => propsWithDefaults.hotkey.join("+").replace(/Key/g, "").replace(/Digit/g, "");
  const [lastFocusedElementRef, setLastFocusedElementRef] = createSignal(null);
  const [isFocusedWithinRef, setIsFocusedWithinRef] = createSignal(false);
  const [actualTheme, setActualTheme] = createSignal(propsWithDefaults.theme !== "system" ? propsWithDefaults.theme : typeof window !== "undefined" ? window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : "light");
  const removeToast = (toast2) => setToastsStore("toasts", (toasts) => toasts.filter(({
    id
  }) => id !== toast2.id));
  onMount(() => {
    const unsub = ToastState.subscribe((toast2) => {
      if (toast2.dismiss) {
        setToastsStore("toasts", produce((_toasts) => {
          _toasts.forEach((t) => {
            if (t.id === toast2.id) t.delete = true;
          });
        }));
        return;
      }
      const changedIndex = toastsStore.toasts.findIndex((t) => t.id === toast2.id);
      if (changedIndex !== -1) {
        setToastsStore("toasts", [changedIndex], reconcile(toast2));
        return;
      }
      setToastsStore("toasts", produce((_toasts) => {
        _toasts.unshift(toast2);
      }));
    });
    onCleanup(() => {
      unsub();
    });
  });
  createEffect(on(() => propsWithDefaults.theme, (theme) => {
    if (theme !== "system") {
      setActualTheme(theme);
      return;
    }
    if (typeof window === "undefined") return;
    window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", ({
      matches
    }) => {
      if (matches) setActualTheme("dark");
      else setActualTheme("light");
    });
  }));
  createEffect(() => {
    if (toastsStore.toasts.length <= 1) setExpanded(false);
  });
  onMount(() => {
    const handleKeyDown = (event) => {
      const isHotkeyPressed = propsWithDefaults.hotkey.every((key) => event[key] || event.code === key);
      if (isHotkeyPressed) {
        setExpanded(true);
        listRef?.focus();
      }
      if (event.code === "Escape" && (document.activeElement === listRef || listRef?.contains(document.activeElement))) setExpanded(false);
    };
    document.addEventListener("keydown", handleKeyDown);
    onCleanup(() => {
      document.removeEventListener("keydown", handleKeyDown);
    });
  });
  createEffect(on(() => listRef, (ref) => {
    if (ref) {
      onCleanup(() => {
        if (lastFocusedElementRef()) {
          lastFocusedElementRef()?.focus({
            preventScroll: true
          });
          setLastFocusedElementRef(null);
          setIsFocusedWithinRef(false);
        }
      });
    }
  }));
  return createComponent(Show, {
    get when() {
      return toastsStore.toasts.length > 0;
    },
    get children() {
      var _el$17 = _tmpl$15();
      insert(_el$17, createComponent(For, {
        get each() {
          return possiblePositions();
        },
        children: (position, index) => {
          const [y, x] = position.split("-");
          return (() => {
            var _el$18 = _tmpl$16();
            _el$18.$$pointerup = () => setInteracting(false);
            _el$18.$$pointerdown = () => {
              setInteracting(true);
            };
            _el$18.addEventListener("mouseleave", () => {
              if (!interacting()) setExpanded(false);
            });
            _el$18.$$mousemove = () => setExpanded(true);
            _el$18.addEventListener("mouseenter", () => setExpanded(true));
            _el$18.addEventListener("focus", (event) => {
              if (!isFocusedWithinRef()) {
                setIsFocusedWithinRef(true);
                setLastFocusedElementRef(event.relatedTarget);
              }
            });
            _el$18.addEventListener("blur", (event) => {
              if (isFocusedWithinRef() && !event.currentTarget.contains(event.relatedTarget)) {
                setIsFocusedWithinRef(false);
                if (lastFocusedElementRef()) {
                  lastFocusedElementRef()?.focus({
                    preventScroll: true
                  });
                  setLastFocusedElementRef(null);
                }
              }
            });
            var _ref$2 = listRef;
            typeof _ref$2 === "function" ? use(_ref$2, _el$18) : listRef = _el$18;
            setAttribute(_el$18, "data-y-position", y);
            setAttribute(_el$18, "data-x-position", x);
            insert(_el$18, createComponent(For, {
              get each() {
                return toastsStore.toasts.filter((toast2) => !toast2.position && index() === 0 || toast2.position === position);
              },
              children: (toast2, index2) => createComponent(Toast, {
                get index() {
                  return index2();
                },
                get icons() {
                  return propsWithDefaults.icons;
                },
                toast: toast2,
                get duration() {
                  return propsWithDefaults.toastOptions?.duration ?? props.duration;
                },
                get ["class"]() {
                  return propsWithDefaults.toastOptions?.class;
                },
                get classes() {
                  return propsWithDefaults.toastOptions?.classes;
                },
                get cancelButtonStyle() {
                  return propsWithDefaults.toastOptions?.cancelButtonStyle;
                },
                get actionButtonStyle() {
                  return propsWithDefaults.toastOptions?.actionButtonStyle;
                },
                get descriptionClass() {
                  return propsWithDefaults.toastOptions?.descriptionClass;
                },
                get invert() {
                  return Boolean(propsWithDefaults.invert);
                },
                get visibleToasts() {
                  return propsWithDefaults.visibleToasts;
                },
                get closeButton() {
                  return Boolean(propsWithDefaults.closeButton);
                },
                get interacting() {
                  return interacting();
                },
                get position() {
                  return propsWithDefaults.position;
                },
                get style() {
                  return propsWithDefaults.toastOptions?.style;
                },
                get unstyled() {
                  return propsWithDefaults.toastOptions?.unstyled;
                },
                removeToast,
                get toasts() {
                  return toastsStore.toasts;
                },
                get heights() {
                  return heights();
                },
                setHeights,
                get expandByDefault() {
                  return Boolean(propsWithDefaults.expand);
                },
                get gap() {
                  return propsWithDefaults.gap;
                },
                get expanded() {
                  return expanded();
                },
                get pauseWhenPageIsHidden() {
                  return propsWithDefaults.pauseWhenPageIsHidden;
                }
              })
            }));
            createRenderEffect((_p$) => {
              var _v$24 = propsWithDefaults.dir === "auto" ? getDocumentDirection() : propsWithDefaults.dir, _v$25 = propsWithDefaults.class, _v$26 = actualTheme(), _v$27 = propsWithDefaults.richColors, _v$28 = {
                "--front-toast-height": `${heights()[0]?.height}px`,
                "--offset": typeof propsWithDefaults.offset === "number" ? `${propsWithDefaults.offset}px` : propsWithDefaults.offset || VIEWPORT_OFFSET,
                "--width": `${TOAST_WIDTH}px`,
                "--gap": `${GAP}px`,
                ...propsWithDefaults.style
              };
              _v$24 !== _p$.e && setAttribute(_el$18, "dir", _p$.e = _v$24);
              _v$25 !== _p$.t && className(_el$18, _p$.t = _v$25);
              _v$26 !== _p$.a && setAttribute(_el$18, "data-theme", _p$.a = _v$26);
              _v$27 !== _p$.o && setAttribute(_el$18, "data-rich-colors", _p$.o = _v$27);
              _p$.i = style(_el$18, _v$28, _p$.i);
              return _p$;
            }, {
              e: void 0,
              t: void 0,
              a: void 0,
              o: void 0,
              i: void 0
            });
            return _el$18;
          })();
        }
      }));
      createRenderEffect(() => setAttribute(_el$17, "aria-label", `Notifications ${hotkeyLabel()}`));
      return _el$17;
    }
  });
};
/*!
 * Original code by Emil Kowalski
 * MIT Licensed, Copyright 2023 Emil Kowalski, see https://github.com/emilkowalski/sonner/blob/main/LICENSE.md for details
 *
 * Credits:
 * https://github.com/emilkowalski/sonner/blob/main/src/index.tsx
 */
delegateEvents(["pointerdown", "pointerup", "pointermove", "click", "mousemove"]);

const propsData = [{
  name: "Definition",
  options: {
    source: {
      target: "geofs.aircraft.instance",
      prop: "definition"
    },
    reactive: true,
    reset: true,
    allowed: [{
      name: "airbrakesTravelTime",
      type: "float"
    }, {
      name: "accessoriesTravelTime",
      type: "float"
    }, {
      name: "flapsTravelTime",
      type: "float"
    }, {
      name: "flapsSteps",
      type: "int"
    }, {
      name: "gearTravelTime",
      type: "float"
    }, {
      name: "zeroThrustAltitude",
      type: "int"
    }, {
      name: "zeroRPMAltitude",
      type: "int"
    }, {
      name: "mass",
      type: "int"
    }, {
      name: "minRPM",
      type: "int",
      comment: "not recommended"
    }, {
      name: "maxRPM",
      type: "int",
      comment: "not recommended"
    }],
    ignored: ["object", "function", "undefined", "null", "boolean", "symbol", "array"]
  }
}, {
  name: "Engines",
  options: {
    source: {
      target: "geofs.aircraft.instance",
      prop: "engines"
    },
    reactive: true,
    allowed: [{
      name: "thrust",
      type: "int"
    }, {
      name: "afterBurnerThrust",
      type: "int"
    }, {
      name: "reverseThrust",
      type: "int"
    }],
    ignored: ["object", "function", "undefined", "null", "boolean", "symbol", "array"]
  }
}, {
  name: "id",
  options: {
    source: {
      target: "geofs.aircraft.instance",
      prop: "id"
    },
    reactive: true
  }
}];

function getObjectFromPath(path) {
  const parts = path.split(".");
  let obj = unsafeWindow;
  for (let part of parts) {
    obj = obj[part];
    if (obj === void 0) {
      throw new Error(`Path ${path} does not exist`);
    }
  }
  return obj;
}

class Reactive {
  static _options = {
    cloneAfterCreation: false,
    temp: null
  };
  static _cache = {};
  static set cache(value) {
    this._cache = value;
  }
  static get cache() {
    return this._cache;
  }
  static set options(value) {
    this._options = value;
  }
  static get options() {
    return this._options;
  }
  static parse(obj, propName, options = {}) {
    let target = obj;
    try {
      if (typeof obj === "string") {
        target = getObjectFromPath(obj);
      } else if (typeof obj === "object") {
        target = obj;
      } else {
        throw new Error("The first argument to parse must be an object or string path.", obj);
      }
      if (typeof propName !== "string") {
        throw new Error("The second argument to parse must be a string.", propName);
      }
      if (target === void 0) {
        throw new Error("Invalid target.", target);
      }
      if (propName === void 0) {
        throw new Error("Invalid property.", propName);
      }
      let value = target[propName];
      if (value === void 0) {
        throw new Error("Invalid value.", value);
      }
      const [prop, setProp] = createSignal(value);
      const cloneAfterCreation = (() => options?.cloneAfterCreation !== void 0 ? options?.cloneAfterCreation : this._options?.cloneAfterCreation)();
      if (prop === void 0 || setProp === void 0) {
        throw new Error("Signal not created.");
      }
      Object.defineProperty(target, propName, {
        get: function() {
          return prop();
        },
        set: function(newValue) {
          value = newValue;
          setProp(newValue);
        }
      });
      if (Object.getOwnPropertyDescriptor(target, propName) === void 0) {
        throw new Error("Reactive property not created.");
      }
      if (cloneAfterCreation) {
        if (this._options.temp === null) {
          throw new Error("Temporary object not defined.");
        }
        if (this._cache[propName] !== void 0) {
          throw new Error("Property already exists in cache.", propName);
        }
        const [reactiveProp, setReactiveProp] = [prop, setProp];
        if (reactiveProp === void 0 || setReactiveProp === void 0) {
          throw new Error("Reactive property not cloned.");
        }
        this._cache[propName] = true;
        Object.defineProperty(this._options.temp, propName, {
          get: function() {
            return reactiveProp();
          },
          set: function(newValue) {
            setReactiveProp(newValue);
          }
        });
        if (Object.getOwnPropertyDescriptor(this._options.temp, propName) === void 0) {
          throw new Error("Reactive property clone not defined.", propName);
        }
      }
      return [prop, setProp];
    } catch (e) {
      console.error(e);
    }
  }
}

class Props {
  static _reactive = Reactive;
  static _data = {};
  static get reactive() {
    return this._reactive;
  }
  static set reactive(value) {
    this._reactive = value;
  }
  static async load(...arr) {
    return await new Promise((resolve, reject) => {
      try {
        if (!arr.length) {
          throw new Error("No props to load");
        }
        if (!Array.isArray(arr)) {
          throw new Error("Props must be an array");
        }
        for (const item of arr[0]) {
          const {
            name,
            options
          } = item;
          const {
            source
          } = options;
          if (options.reactive) {
            if (!options.source) {
              throw new Error("Reactive props require a source");
            }
            if (!options.source.target || !options.source.prop) {
              throw new Error("Reactive props require a target and prop");
            }
            this._reactive.parse(source.target, source.prop, options.source?.options);
          }
          Object.defineProperty(this, name, {
            get: function() {
              return this._data[name];
            },
            set: function(newValue) {
              this._data[name] = newValue;
            }
          });
          this[name] = {
            allowed: options.allowed || [],
            ignored: options.ignored || [],
            reset: options.reset || false
          };
        }
        resolve(true);
      } catch (e) {
        reject(e);
      }
    });
  }
}

const toastOptions = {
  duration: 2e3,
  closeButton: true
};

var _tmpl$$4 = /* @__PURE__ */ template(`<li class="flex gap-2"><label class="flex-none w-fit">:</label><input>`), _tmpl$2$3 = /* @__PURE__ */ template(`<br>`), _tmpl$3$1 = /* @__PURE__ */ template(`<span class="text-sm text-slate-500">`), _tmpl$4$1 = /* @__PURE__ */ template(`<li class="flex gap-2"><button class="w-fit m-2 border-0 rounded-md px-3 bg-sky-600 text-white shadow-md hover:bg-sky-700 hover:cursor-pointer">Reset</button><button class="w-fit m-2 border-0 rounded-md px-3 bg-sky-600 text-white shadow-md hover:bg-sky-700 hover:cursor-pointer">Save</button><button class="w-fit m-2 border-0 rounded-md px-3 bg-sky-600 text-white shadow-md hover:bg-sky-700 hover:cursor-pointer">Load`);
const getDefinitions = async () => {
  return await new Promise((resolve, reject) => {
    try {
      const {
        allowed,
        ignored,
        reset
      } = Props.Definition;
      const definition = flightAssistant.instance.definition;
      if (!definition) throw new Error("No definition found.");
      const response = [];
      for (const item of Object.entries(definition)) {
        const [propName, prop] = item;
        const propType = typeof prop;
        if (ignored.includes(propType)) continue;
        const isAllowed = allowed.some((p) => p.name === propName);
        if (!isAllowed) continue;
        const syncType = allowed.find((p) => p.name === propName).type;
        if (!syncType) continue;
        const hasComment = allowed.find((p) => p.name === propName).comment;
        const isNum = ["int", "float", "number"].includes(syncType) || propType === "number";
        const isInt = syncType === "int";
        const isFloat = syncType === "float";
        const isText = syncType === "string";
        let props = {};
        if (isText) {
          props.placeholder = "Text";
        } else if (isNum) {
          props.min = isInt ? "0" : isFloat ? "0.0" : null;
          props.max = isInt ? parseInt(prop * 2) : isFloat ? parseFloat(prop * 2) : null;
          props.step = isInt ? "1" : isFloat ? "0.2" : null;
          props.placeholder = `Between ${props.min} and ${props.max}`;
        }
        if (reset) props["data-definitions-default"] = prop;
        props["data-definitions-propname"] = propName;
        props["data-definitions-type"] = syncType;
        response.push((() => {
          var _el$ = _tmpl$$4(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling;
          setAttribute(_el$2, "for", `set${propName}`);
          insert(_el$2, propName, _el$3);
          insert(_el$2, hasComment ? [_tmpl$2$3(), (() => {
            var _el$6 = _tmpl$3$1();
            insert(_el$6, hasComment);
            return _el$6;
          })()] : null, null);
          setAttribute(_el$4, "id", `set${propName}`);
          setAttribute(_el$4, "type", isNum ? "number" : isText ? "text" : null);
          spread(_el$4, mergeProps(props, {
            "class": "flex-auto w-max m-2 border-0 rounded-md p-2 shadow-md",
            "oninput": async (e) => {
              let that = e.target;
              let [min, max, value] = ["min", "max", "value"].map((e2) => isNum ? parseFloat(that[e2]) : that[e2]);
              let type = that.type;
              await new Promise((resolve2, reject2) => {
                if (type == "number" && value > min && value <= max) {
                  let newMax = value * 2 * 100;
                  e.target.max = newMax < 1 ? 10 : newMax;
                  flightAssistant.instance.definition[propName] = value;
                  that.placeholder = `Between ${min} and ${max}`;
                  resolve2(`${propName} set to ${value}`);
                } else if (type == "text" && !value) {
                  flightAssistant.instance.definition[propName] = value;
                  resolve2(`${propName} set to ${value}`);
                } else {
                  reject2(isNum ? `Value must be between ${min} and ${max}` : isText ? `Value must be text` : `Invalid value`);
                }
              }).then((msg) => toast.success(msg, toastOptions)).catch((msg) => toast.error(msg, toastOptions));
            }
          }), false, false);
          return _el$;
        })());
      }
      if (reset) {
        response.unshift((() => {
          var _el$7 = _tmpl$4$1(), _el$8 = _el$7.firstChild, _el$9 = _el$8.nextSibling, _el$10 = _el$9.nextSibling;
          _el$8.$$click = () => {
            const inputs = document.querySelectorAll("input[data-definitions-default]");
            inputs.forEach((input) => {
              let prefix = "data-definitions-";
              let value = input.getAttribute(`${prefix}default`);
              let propName = input.getAttribute(`${prefix}propname`);
              let type = input.getAttribute(`${prefix}type`);
              if (type === "int") value = parseInt(value);
              if (type === "float") value = parseFloat(value);
              input.value = value;
              flightAssistant.instance.definition[propName] = value;
            });
            if (inputs.length) toast.success("Definitions reset", toastOptions);
            else toast.error("No definitions to reset", toastOptions);
          };
          _el$9.$$click = () => {
            toast.info("Coming soon..", toastOptions);
          };
          _el$10.$$click = () => {
            toast.info("Coming soon..", toastOptions);
          };
          return _el$7;
        })());
      }
      resolve(response);
    } catch (e) {
      reject(e);
    }
  });
};
delegateEvents(["click"]);

var _tmpl$$3 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg width=16 height=16 viewBox="0 0 16 16"><path fill-rule=evenodd d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z">`);
const GroupRotation = (props) => {
  return (() => {
    var _el$ = _tmpl$$3();
    createRenderEffect((_p$) => {
      var _v$ = `w-5 h-5 text-gray-500 transition group-open/${props["group-open"]}:rotate-90`, _v$2 = props.fill || "currentColor";
      _v$ !== _p$.e && setAttribute(_el$, "class", _p$.e = _v$);
      _v$2 !== _p$.t && setAttribute(_el$, "fill", _p$.t = _v$2);
      return _p$;
    }, {
      e: void 0,
      t: void 0
    });
    return _el$;
  })();
};

var _tmpl$$2 = /* @__PURE__ */ template(`<details><summary class="flex items-center justify-between gap-2 p-2 font-medium marker:content-none hover:cursor-pointer"><span class="flex gap-2"></span></summary><article class="px-4 pb-4"><ul class="flex flex-col gap-4 pl-2 mt-4">`), _tmpl$2$2 = /* @__PURE__ */ template(`<li class="flex gap-2"><label>:</label><input>`);
const getEngines = async () => {
  return await new Promise((resolve, reject) => {
    try {
      const {
        allowed,
        ignored
      } = Props.Engines;
      const engines = flightAssistant.instance.engines;
      if (!engines) throw new Error("No engines found.");
      const response = [];
      for (let i = 0; i < engines.length; i++) {
        response.push((() => {
          var _el$ = _tmpl$$2(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling, _el$5 = _el$4.firstChild;
          className(_el$, "group/engine" + i);
          insert(_el$3, createComponent(Switch, {
            get children() {
              return [createComponent(Match, {
                get when() {
                  return engines[i].name;
                },
                get children() {
                  return engines[i].name;
                }
              }), createComponent(Match, {
                get when() {
                  return !engines[i].name;
                },
                get children() {
                  return ["Engine ", i + 1];
                }
              })];
            }
          }));
          insert(_el$2, createComponent(GroupRotation, {
            "group-open": `engine${i}`
          }), null);
          insert(_el$5, createComponent(For, {
            get each() {
              return Object.entries(engines[i]);
            },
            children: (item) => {
              const [propName, prop] = item;
              const propType = typeof prop;
              if (ignored.includes(propType)) return null;
              const isAllowed = allowed.some((p) => p.name === propName);
              if (!isAllowed) return null;
              const syncType = allowed.find((p) => p.name === propName).type;
              if (!syncType) return null;
              const isNum = ["int", "float", "number"].includes(syncType) || propType === "number";
              const isInt = syncType === "int";
              const isFloat = syncType === "float";
              const isText = syncType === "string";
              let props = {};
              if (isText) {
                props.placeholder = "Text";
              } else if (isNum) {
                props.min = isInt ? "0" : isFloat ? "0.0" : null;
                props.max = isInt ? parseInt(prop * 2) : isFloat ? parseFloat(prop * 2) : null;
                props.step = isInt ? "1" : isFloat ? "0.2" : null;
                props.placeholder = `Between ${props.min} and ${props.max}`;
              }
              return (() => {
                var _el$6 = _tmpl$2$2(), _el$7 = _el$6.firstChild, _el$8 = _el$7.firstChild, _el$9 = _el$7.nextSibling;
                insert(_el$7, propName, _el$8);
                setAttribute(_el$9, "type", isNum ? "number" : isText ? "text" : null);
                spread(_el$9, mergeProps({
                  get id() {
                    return `set${engines[i].name}${propName}`;
                  }
                }, props, {
                  "class": "w-11/12 m-2 border-0 rounded-md p-2 shadow-md",
                  "oninput": async (e) => {
                    let that = e.target;
                    let [min, max, value] = ["min", "max", "value"].map((e2) => isNum ? parseFloat(that[e2]) : that[e2]);
                    let type = that.type;
                    await new Promise((resolve2, reject2) => {
                      if (type == "number" && value > min && value <= max) {
                        let newMax = value * 2 * 100;
                        e.target.max = newMax < 1 ? 10 : newMax;
                        flightAssistant.instance.engines[i][propName] = value;
                        that.placeholder = `Between ${min} and ${max}`;
                        resolve2(`${engines[i].name}${propName} set to ${value}`);
                      } else if (type == "text" && !value) {
                        flightAssistant.instance.engines[i][propName] = value;
                        resolve2(`${engines[i].name}${propName} set to ${value}`);
                      } else {
                        reject2(isNum ? `Value must be between ${min} and ${max}` : isText ? `Value must be text` : `Invalid value`);
                      }
                    }).then((msg) => toast.success(msg, toastOptions)).catch((msg) => toast.error(msg, toastOptions));
                  }
                }), false, false);
                createRenderEffect(() => setAttribute(_el$7, "for", `set${engines[i].name}${propName}`));
                return _el$6;
              })();
            }
          }));
          return _el$;
        })());
      }
      resolve(response);
    } catch (e) {
      reject(e);
    }
  });
};

const Groups = () => [{
  name: "definitions",
  title: "Definitions",
  icon: true,
  resource: createResource(getDefinitions),
  reference: null
}, {
  name: "engines",
  title: "Engines",
  icon: true,
  resource: createResource(getEngines),
  reference: null
}];

var _tmpl$$1 = /* @__PURE__ */ template(`<summary class="flex items-center justify-between gap-2 p-2 font-medium marker:content-none hover:cursor-pointer"><span class="flex gap-2">`), _tmpl$2$1 = /* @__PURE__ */ template(`<span>Loading...`), _tmpl$3 = /* @__PURE__ */ template(`<span>Error: `), _tmpl$4 = /* @__PURE__ */ template(`<article class="px-4 pb-4"><ul class="flex flex-col gap-4 pl-2 mt-4">`), _tmpl$5 = /* @__PURE__ */ template(`<div> Loading...`), _tmpl$6 = /* @__PURE__ */ template(`<details>`);
const Summary = (props) => {
  return (() => {
    var _el$ = _tmpl$$1(), _el$2 = _el$.firstChild;
    insert(_el$2, () => props.title);
    insert(_el$, createComponent(GroupRotation, {
      get ["group-open"]() {
        return props.name;
      }
    }), null);
    return _el$;
  })();
};
const Article = (props) => {
  return (() => {
    var _el$3 = _tmpl$4(), _el$4 = _el$3.firstChild;
    var _ref$ = props.reference;
    typeof _ref$ === "function" ? use(_ref$, _el$4) : props.reference = _el$4;
    insert(_el$4, createComponent(Suspense, {
      get fallback() {
        return (() => {
          var _el$8 = _tmpl$5(), _el$9 = _el$8.firstChild;
          insert(_el$8, () => props.title, _el$9);
          return _el$8;
        })();
      },
      get children() {
        return createComponent(Switch, {
          get children() {
            return [createComponent(Match, {
              get when() {
                return props.resource?.loading;
              },
              get children() {
                return _tmpl$2$1();
              }
            }), createComponent(Match, {
              get when() {
                return props.resource?.error;
              },
              get children() {
                var _el$6 = _tmpl$3(); _el$6.firstChild;
                insert(_el$6, () => props.resource.error, null);
                return _el$6;
              }
            }), createComponent(Match, {
              get when() {
                return props.resource();
              },
              get children() {
                return createComponent(For, {
                  get each() {
                    return props.resource();
                  },
                  children: (i) => {
                    return i;
                  }
                });
              }
            })];
          }
        });
      }
    }));
    return _el$3;
  })();
};
const Details = (props) => {
  return (() => {
    var _el$10 = _tmpl$6();
    insert(_el$10, createComponent(Summary, props), null);
    insert(_el$10, createComponent(Article, props), null);
    createRenderEffect(() => className(_el$10, "group/" + props.name));
    return _el$10;
  })();
};
const Group = (props) => {
  try {
    if (!props.name || !props.resource) {
      throw new Error("Group component requires a name and resource prop.");
    }
    if (typeof props.resource !== "function") {
      throw new Error("Group component resource prop must be an function.");
    }
    let {
      name,
      resource
    } = props;
    let icon = props.icon || true;
    let title = props.title || name;
    let reference = props.reference || null;
    return createComponent(Details, {
      name,
      title,
      resource,
      icon,
      reference
    });
  } catch (e) {
    console.error(e);
    return null;
  }
};

const ui = {
  left: document.querySelector(".geofs-ui-left"),
  bottom: document.querySelector(".geofs-ui-bottom")
};

var _tmpl$ = /* @__PURE__ */ template(`<ul class="geofs-list geofs-toggle-panel geofs-efi-list"data-noblur=true data-onshow={geofs.initializePreferencesPanel()} data-onhide={geofs.savePreferencesPanel()}>`), _tmpl$2 = /* @__PURE__ */ template(`<button class="mdl-button mdl-js-button geofs-f-standard-ui"id=geofs-efi-button tabindex=0 data-upgraded=,MaterialButton data-toggle-panel=.geofs-efi-list data-tooltip-classname=mdl-tooltip--top title="Experimental Flight Interface">CONFIG`);
const MenuComponent = () => {
  const groups = Groups();
  const [currentAircraftId, setCurrentAircraftId] = createSignal();
  setCurrentAircraftId(flightAssistant.instance.id);
  const sameAircraftId = createMemo(() => flightAssistant.instance.id === currentAircraftId());
  createEffect(() => {
    if (!sameAircraftId()) {
      setCurrentAircraftId(flightAssistant.instance.id);
      setTimeout(() => {
        for (let i = 0; i < groups.length; i++) {
          groups[i].resource[1].refetch();
        }
      }, 1e3);
    }
  });
  onMount(() => {
    for (let i = 0; i < groups.length; i++) {
      let {
        name,
        reference
      } = groups[i];
      flightAssistant.refs[name] = reference;
    }
  });
  return createComponent(For, {
    each: groups,
    children: (group) => {
      return createComponent(Group, {
        get name() {
          return group.name;
        },
        get title() {
          return group.title;
        },
        get icon() {
          return group.icon;
        },
        get resource() {
          return group.resource[0];
        },
        get reference() {
          return group.reference;
        }
      });
    }
  });
};
const ContainerComponent = () => {
  let ref;
  onMount(() => {
    flightAssistant.refs.container = ref;
  });
  onCleanup(() => {
    flightAssistant.refs.container = null;
  });
  return (() => {
    var _el$ = _tmpl$();
    var _ref$ = ref;
    typeof _ref$ === "function" ? use(_ref$, _el$) : ref = _el$;
    insert(_el$, createComponent(MenuComponent, {}));
    return _el$;
  })();
};
const ButtonComponent = () => {
  let ref;
  onMount(() => {
    flightAssistant.refs.button = ref;
  });
  onCleanup(() => {
    flightAssistant.refs.button = null;
  });
  return (() => {
    var _el$2 = _tmpl$2();
    var _ref$2 = ref;
    typeof _ref$2 === "function" ? use(_ref$2, _el$2) : ref = _el$2;
    return _el$2;
  })();
};
const Container = () => render(() => createComponent(ContainerComponent, {}), ui.left);
const Button = () => render(() => createComponent(ButtonComponent, {}), ui.bottom);

const Toaster = () => {
  return createComponent(Portal, {
    get mount() {
      return document.body;
    },
    get children() {
      return createComponent(Toaster$1, {
        position: "top-right",
        gap: 8,
        expand: false,
        richColors: true
      });
    }
  });
};

const App = () => {
  const flightAssistant = {
    version: GM.info.script.version,
    refs: {},
    instance: {}
  };
  Props.reactive.options = {
    cloneAfterCreation: true,
    temp: flightAssistant.instance
  };
  unsafeWindow.executeOnEventDone("geofsStarted", function() {
    const starter = new Promise((resolve, reject) => {
      setTimeout(() => {
        try {
          Props.load(propsData);
          Container();
          Button();
          resolve("Assistant Started.");
        } catch (e) {
          reject(e);
        }
      }, 5e3);
    });
    toast.promise(starter, {
      loading: "Assistant is starting..",
      success: (data) => data,
      error: (err) => `Error: ${err.message}`
    });
  });
  unsafeWindow.flightAssistant = flightAssistant;
  return createComponent(Toaster, {});
};

const root = document.body;
render(() => createComponent(App, {}), root);