diff --git a/README b/README
index 4116a2dbedc6988c60135c31eb9dc5a428fa47bf..d3726ab0d3b473108d66ae68e3f86ba1bdc15fd1 100644
--- a/README
+++ b/README
@@ -1,12 +1,42 @@
-# To run locally
+##########################################
+#           Docker Commands              #
+##########################################
 
+#TO DO
+
+
+
+
+
+##########################################
+#              Run Manually              #
+##########################################
+
+
+#The below are optional steps to run the application manually, you can alternatively install and run docker which will create the environment
+
+
+##########################################
+#              Flask Commands            #
+##########################################
+# To run Flask you will need to be in the virtual environment, to get started enter the following command while within the flask-backend folder
+
+#Linux
 . .venv/bin/activate
 
-flask run   (Will run on 127.0.0.1:5000)
+#Windows
+.venv\Scripts\activate
 
+#Then run the following, if you are not on port 5000 you will need to force it with the '--port 5000' arg
+flask run   (Will run on 127.0.0.1:5000)
 
-# To apply database changes
+# To apply database changes/run migrations
 flask db upgrade
 
-#Creating new migration file
-flask db migrate -m "Add age column to User model"
\ No newline at end of file
+#Creating new migration file (for development)
+flask db migrate -m "Add age column to User model"
+
+
+##########################################
+#              React Commands            #
+##########################################
\ No newline at end of file
diff --git a/app/static/base.css b/app/static/base.css
index 29ac42ccc90e39f862dea0499b2f65273fb19724..1c523fdd58a45aa7ac0cf1c992f4c0fc80ab51b0 100644
--- a/app/static/base.css
+++ b/app/static/base.css
@@ -1,51 +1,5 @@
 @import url('https://fonts.googleapis.com/css2?family=Afacad+Flux:wght@100..1000&display=swap');
 
-/* NAVIGATION BAR CSS */
-.navigation img {
-    height: 70px;
-    margin-left: 35px;
-    align-self: center;
-}
-  
-.navigation .navbar ul li {
-    list-style-type: none;
-    display: inherit;
-    flex-direction: row;
-    padding: 5px 0;
-}
-
-.nav_list_item a {
-    color: #FBE9D0;
-    font-size: 35px;
-    text-decoration: none;
-    padding: 10px;
-}
-
-.nav_list_item:hover {
-    background-color: #90AEAD;
-    padding: 5px;
-}
-
-.navigation .navbar {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: 100px; /* Fix nav bar height */
-    width:100%;
-}
-
-.navigation .navbar ul {
-    display: flex;
-    justify-content: space-evenly;
-    width:100%;
-    /* font-style: ; */
-}
-
-.navigation {
-    display: flex;
-    background-color: #244855;
-}
-
 /** FOOTER CSS */
 
 .footer {
@@ -94,22 +48,6 @@ body {
     font-weight: 100;
 }
 
-
-
-/*
-    Show/hide the hamburger menu depending on the screen size which is being used
-*/
-@media screen and (max-width: 880px) {
-    .navigation {
-        display: none;
-    }
-
-    .mobile_nav {
-        display:flex;
-    }
-}
-
-
 /* 
     Button Css
 */
diff --git a/app/static/bootstrap_overrides.css b/app/static/bootstrap_overrides.css
new file mode 100644
index 0000000000000000000000000000000000000000..81096e64d3c4ecc58565ad6e9096f29e05c3ff52
--- /dev/null
+++ b/app/static/bootstrap_overrides.css
@@ -0,0 +1,7 @@
+.custom-dark-blue-text a {
+  color: #244855 !important;
+}
+
+.custom-light-blue-background {
+  background-color: #90AEAD !important;
+}
\ No newline at end of file
diff --git a/app/static/images/nav_icon.jpeg b/app/static/images/nav_icon.jpeg
deleted file mode 100644
index 97560e08a40b25eff3f4b3f8bb37c0f639649adf..0000000000000000000000000000000000000000
Binary files a/app/static/images/nav_icon.jpeg and /dev/null differ
diff --git a/app/templates/base.html b/app/templates/base.html
index f2ea15dadb0267a29c06aed37e981352876e3989..8fd7fbeff8cd09ba370d69da2c72d5aa0263f24b 100644
--- a/app/templates/base.html
+++ b/app/templates/base.html
@@ -3,6 +3,9 @@
 <html>
     <head>
         <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='base.css')}}">
+        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
+        <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap_overrides.css')}}">
+        <script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
         <meta name="viewport" content="width=device-width, initial-scale=1.0">
         <title>Horizon Travels</title>
     </head>
@@ -10,17 +13,40 @@
         <div class="main_content">
             <div class="wrapper">
                 {% block navigation %}
+                <!-- Nav bar taken from https://www.w3schools.com/bootstrap/bootstrap_navbar.asp and modified -->
                 <div class="navigation">
-                    <!-- https://images.ctfassets.net/hrltx12pl8hq/7JnR6tVVwDyUM8Cbci3GtJ/bf74366cff2ba271471725d0b0ef418c/shutterstock_376532611-og.jpg -->
-                    <img src="{{ url_for('static', filename='images/nav_icon.jpeg')}}">
-                    <nav class="navbar">
-                        <ul>
-                            <li class="nav_list_item"><a href="{{ url_for('main.index') }}">Home</a></li>
-                            <li class="nav_list_item"><a href="{{ url_for('bookings.index') }}">Bookings</a></li>
-                            <li class="nav_list_item"><a href="#">Pricing</a></li>
-                            <li class="nav_list_item"><a href="#">Terms of use</a></li>
-                            <li class="nav_list_item"><a href="#">Contact</a></li>
-                        </ul>
+                    <nav class="navbar navbar-expand-lg custom-dark-blue-text custom-light-blue-background">
+                        <div class="container-fluid">
+                            <a class="navbar-brand" href="#">Navbar</a>
+                            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+                            <span class="navbar-toggler-icon"></span>
+                            </button>
+                            <div class="collapse navbar-collapse" id="navbarSupportedContent">
+                            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+                                <li class="nav-item">
+                                <a class="nav-link active" aria-current="page" href="#">Home</a>
+                                </li>
+                                <li class="nav-item">
+                                <a class="nav-link" href="#">Link</a>
+                                </li>
+                                <li class="nav-item dropdown">
+                                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+                                    Dropdown
+                                </a>
+                                <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
+                                    <li><a class="dropdown-item" href="#">Action</a></li>
+                                    <li><a class="dropdown-item" href="#">Another action</a></li>
+                                    <li><hr class="dropdown-divider"></li>
+                                    <li><a class="dropdown-item" href="#">Something else here</a></li>
+                                </ul>
+                                </li>
+                            </ul>
+                            <form class="d-flex">
+                                <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+                                <button class="btn btn-outline-success" type="submit">Search</button>
+                            </form>
+                            </div>
+                        </div>
                     </nav>
                 </div>
                 {% endblock %}
diff --git a/app/templates/index.html b/app/templates/index.html
index 7969692404be1133610cccc86cf723a8904351d9..c4f44ba51bdc93668ab7f966d5e61256cc1c823c 100644
--- a/app/templates/index.html
+++ b/app/templates/index.html
@@ -1,5 +1,10 @@
 {% extends 'base.html' %}
-
+<script>
+import Container from 'react-bootstrap/Container';
+import Nav from 'react-bootstrap/Nav';
+import Navbar from 'react-bootstrap/Navbar';
+import NavDropdown from 'react-bootstrap/NavDropdown';
+</script>
 {% block content %}
     <div class="date_selector">
         <h2>Date selector</h2>
@@ -9,5 +14,13 @@
     <div>
         <h3>Guarantees</h3>
     </div>
+    <div id="like_button_container"></div>
+
+    <!-- Load React. -->
+    <!-- Note: when deploying, replace "development.js" with "production.min.js". -->
+    <script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
+    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
 
+    <!-- Load our React component. -->
+    <script src="like_button.js"></script>
 {% endblock %}
\ No newline at end of file
diff --git a/node_modules/.bin/loose-envify b/node_modules/.bin/loose-envify
new file mode 120000
index 0000000000000000000000000000000000000000..ed9009c5aad1abb00ff6054b90be016834a2073a
--- /dev/null
+++ b/node_modules/.bin/loose-envify
@@ -0,0 +1 @@
+../loose-envify/cli.js
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/LICENSE b/node_modules/@babel/runtime/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..f31575ec773bb199aeb7c0d0f1612cfe1c7038f1
--- /dev/null
+++ b/node_modules/@babel/runtime/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@babel/runtime/README.md b/node_modules/@babel/runtime/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2f3368ef58e938d8016e762d4ca91aad338e6f50
--- /dev/null
+++ b/node_modules/@babel/runtime/README.md
@@ -0,0 +1,19 @@
+# @babel/runtime
+
+> babel's modular runtime helpers
+
+See our website [@babel/runtime](https://babeljs.io/docs/babel-runtime) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save @babel/runtime
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/runtime
+```
diff --git a/node_modules/@babel/runtime/helpers/AwaitValue.js b/node_modules/@babel/runtime/helpers/AwaitValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..52a7e69a581f0161ff8f48b9b641bb33c263494b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/AwaitValue.js
@@ -0,0 +1,4 @@
+function _AwaitValue(t) {
+  this.wrapped = t;
+}
+module.exports = _AwaitValue, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/OverloadYield.js b/node_modules/@babel/runtime/helpers/OverloadYield.js
new file mode 100644
index 0000000000000000000000000000000000000000..0eca88c7c000a4e8f1980ab38981e9994e5f32dc
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/OverloadYield.js
@@ -0,0 +1,4 @@
+function _OverloadYield(e, d) {
+  this.v = e, this.k = d;
+}
+module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js b/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ff780eba96e1e97ffa559e45c2acd1143e40903
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js
@@ -0,0 +1,9 @@
+function _applyDecoratedDescriptor(i, e, r, n, l) {
+  var a = {};
+  return Object.keys(n).forEach(function (i) {
+    a[i] = n[i];
+  }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) {
+    return n(i, e, r) || r;
+  }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
+}
+module.exports = _applyDecoratedDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs.js b/node_modules/@babel/runtime/helpers/applyDecs.js
new file mode 100644
index 0000000000000000000000000000000000000000..3770c5aee79a1e10aa5508fa4a4f5a223c334f94
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs.js
@@ -0,0 +1,236 @@
+var _typeof = require("./typeof.js")["default"];
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function old_createMetadataMethodsForProperty(e, t, a, r) {
+  return {
+    getMetadata: function getMetadata(o) {
+      old_assertNotFinished(r, "getMetadata"), old_assertMetadataKey(o);
+      var i = e[o];
+      if (void 0 !== i) if (1 === t) {
+        var n = i["public"];
+        if (void 0 !== n) return n[a];
+      } else if (2 === t) {
+        var l = i["private"];
+        if (void 0 !== l) return l.get(a);
+      } else if (Object.hasOwnProperty.call(i, "constructor")) return i.constructor;
+    },
+    setMetadata: function setMetadata(o, i) {
+      old_assertNotFinished(r, "setMetadata"), old_assertMetadataKey(o);
+      var n = e[o];
+      if (void 0 === n && (n = e[o] = {}), 1 === t) {
+        var l = n["public"];
+        void 0 === l && (l = n["public"] = {}), l[a] = i;
+      } else if (2 === t) {
+        var s = n.priv;
+        void 0 === s && (s = n["private"] = new Map()), s.set(a, i);
+      } else n.constructor = i;
+    }
+  };
+}
+function old_convertMetadataMapToFinal(e, t) {
+  var a = e[Symbol.metadata || Symbol["for"]("Symbol.metadata")],
+    r = Object.getOwnPropertySymbols(t);
+  if (0 !== r.length) {
+    for (var o = 0; o < r.length; o++) {
+      var i = r[o],
+        n = t[i],
+        l = a ? a[i] : null,
+        s = n["public"],
+        c = l ? l["public"] : null;
+      s && c && Object.setPrototypeOf(s, c);
+      var d = n["private"];
+      if (d) {
+        var u = Array.from(d.values()),
+          f = l ? l["private"] : null;
+        f && (u = u.concat(f)), n["private"] = u;
+      }
+      l && Object.setPrototypeOf(n, l);
+    }
+    a && Object.setPrototypeOf(t, a), e[Symbol.metadata || Symbol["for"]("Symbol.metadata")] = t;
+  }
+}
+function old_createAddInitializerMethod(e, t) {
+  return function (a) {
+    old_assertNotFinished(t, "addInitializer"), old_assertCallable(a, "An initializer"), e.push(a);
+  };
+}
+function old_memberDec(e, t, a, r, o, i, n, l, s) {
+  var c;
+  switch (i) {
+    case 1:
+      c = "accessor";
+      break;
+    case 2:
+      c = "method";
+      break;
+    case 3:
+      c = "getter";
+      break;
+    case 4:
+      c = "setter";
+      break;
+    default:
+      c = "field";
+  }
+  var d,
+    u,
+    f = {
+      kind: c,
+      name: l ? "#" + t : toPropertyKey(t),
+      isStatic: n,
+      isPrivate: l
+    },
+    p = {
+      v: !1
+    };
+  if (0 !== i && (f.addInitializer = old_createAddInitializerMethod(o, p)), l) {
+    d = 2, u = Symbol(t);
+    var v = {};
+    0 === i ? (v.get = a.get, v.set = a.set) : 2 === i ? v.get = function () {
+      return a.value;
+    } : (1 !== i && 3 !== i || (v.get = function () {
+      return a.get.call(this);
+    }), 1 !== i && 4 !== i || (v.set = function (e) {
+      a.set.call(this, e);
+    })), f.access = v;
+  } else d = 1, u = t;
+  try {
+    return e(s, Object.assign(f, old_createMetadataMethodsForProperty(r, d, u, p)));
+  } finally {
+    p.v = !0;
+  }
+}
+function old_assertNotFinished(e, t) {
+  if (e.v) throw Error("attempted to call " + t + " after decoration was finished");
+}
+function old_assertMetadataKey(e) {
+  if ("symbol" != _typeof(e)) throw new TypeError("Metadata keys must be symbols, received: " + e);
+}
+function old_assertCallable(e, t) {
+  if ("function" != typeof e) throw new TypeError(t + " must be a function");
+}
+function old_assertValidReturnValue(e, t) {
+  var a = _typeof(t);
+  if (1 === e) {
+    if ("object" !== a || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+    void 0 !== t.get && old_assertCallable(t.get, "accessor.get"), void 0 !== t.set && old_assertCallable(t.set, "accessor.set"), void 0 !== t.init && old_assertCallable(t.init, "accessor.init"), void 0 !== t.initializer && old_assertCallable(t.initializer, "accessor.initializer");
+  } else if ("function" !== a) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+}
+function old_getInit(e) {
+  var t;
+  return null == (t = e.init) && (t = e.initializer) && void 0 !== console && console.warn(".initializer has been renamed to .init as of March 2022"), t;
+}
+function old_applyMemberDec(e, t, a, r, o, i, n, l, s) {
+  var c,
+    d,
+    u,
+    f,
+    p,
+    v,
+    y,
+    h = a[0];
+  if (n ? (0 === o || 1 === o ? (c = {
+    get: a[3],
+    set: a[4]
+  }, u = "get") : 3 === o ? (c = {
+    get: a[3]
+  }, u = "get") : 4 === o ? (c = {
+    set: a[3]
+  }, u = "set") : c = {
+    value: a[3]
+  }, 0 !== o && (1 === o && setFunctionName(a[4], "#" + r, "set"), setFunctionName(a[3], "#" + r, u))) : 0 !== o && (c = Object.getOwnPropertyDescriptor(t, r)), 1 === o ? f = {
+    get: c.get,
+    set: c.set
+  } : 2 === o ? f = c.value : 3 === o ? f = c.get : 4 === o && (f = c.set), "function" == typeof h) void 0 !== (p = old_memberDec(h, r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? d = p : 1 === o ? (d = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+    get: v,
+    set: y
+  }) : f = p);else for (var m = h.length - 1; m >= 0; m--) {
+    var b;
+    void 0 !== (p = old_memberDec(h[m], r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? b = p : 1 === o ? (b = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+      get: v,
+      set: y
+    }) : f = p, void 0 !== b && (void 0 === d ? d = b : "function" == typeof d ? d = [d, b] : d.push(b)));
+  }
+  if (0 === o || 1 === o) {
+    if (void 0 === d) d = function d(e, t) {
+      return t;
+    };else if ("function" != typeof d) {
+      var g = d;
+      d = function d(e, t) {
+        for (var a = t, r = 0; r < g.length; r++) a = g[r].call(e, a);
+        return a;
+      };
+    } else {
+      var _ = d;
+      d = function d(e, t) {
+        return _.call(e, t);
+      };
+    }
+    e.push(d);
+  }
+  0 !== o && (1 === o ? (c.get = f.get, c.set = f.set) : 2 === o ? c.value = f : 3 === o ? c.get = f : 4 === o && (c.set = f), n ? 1 === o ? (e.push(function (e, t) {
+    return f.get.call(e, t);
+  }), e.push(function (e, t) {
+    return f.set.call(e, t);
+  })) : 2 === o ? e.push(f) : e.push(function (e, t) {
+    return f.call(e, t);
+  }) : Object.defineProperty(t, r, c));
+}
+function old_applyMemberDecs(e, t, a, r, o) {
+  for (var i, n, l = new Map(), s = new Map(), c = 0; c < o.length; c++) {
+    var d = o[c];
+    if (Array.isArray(d)) {
+      var u,
+        f,
+        p,
+        v = d[1],
+        y = d[2],
+        h = d.length > 3,
+        m = v >= 5;
+      if (m ? (u = t, f = r, 0 != (v -= 5) && (p = n = n || [])) : (u = t.prototype, f = a, 0 !== v && (p = i = i || [])), 0 !== v && !h) {
+        var b = m ? s : l,
+          g = b.get(y) || 0;
+        if (!0 === g || 3 === g && 4 !== v || 4 === g && 3 !== v) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + y);
+        !g && v > 2 ? b.set(y, v) : b.set(y, !0);
+      }
+      old_applyMemberDec(e, u, d, y, v, m, h, f, p);
+    }
+  }
+  old_pushInitializers(e, i), old_pushInitializers(e, n);
+}
+function old_pushInitializers(e, t) {
+  t && e.push(function (e) {
+    for (var a = 0; a < t.length; a++) t[a].call(e);
+    return e;
+  });
+}
+function old_applyClassDecs(e, t, a, r) {
+  if (r.length > 0) {
+    for (var o = [], i = t, n = t.name, l = r.length - 1; l >= 0; l--) {
+      var s = {
+        v: !1
+      };
+      try {
+        var c = Object.assign({
+            kind: "class",
+            name: n,
+            addInitializer: old_createAddInitializerMethod(o, s)
+          }, old_createMetadataMethodsForProperty(a, 0, n, s)),
+          d = r[l](i, c);
+      } finally {
+        s.v = !0;
+      }
+      void 0 !== d && (old_assertValidReturnValue(10, d), i = d);
+    }
+    e.push(i, function () {
+      for (var e = 0; e < o.length; e++) o[e].call(i);
+    });
+  }
+}
+function applyDecs(e, t, a) {
+  var r = [],
+    o = {},
+    i = {};
+  return old_applyMemberDecs(r, e, i, o, t), old_convertMetadataMapToFinal(e.prototype, i), old_applyClassDecs(r, e, o, a), old_convertMetadataMapToFinal(e, o), r;
+}
+module.exports = applyDecs, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs2203.js b/node_modules/@babel/runtime/helpers/applyDecs2203.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3da333820443c674583a383382daddc40c043dd
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs2203.js
@@ -0,0 +1,184 @@
+var _typeof = require("./typeof.js")["default"];
+function applyDecs2203Factory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function memberDec(e, t, r, a, n, i, s, o) {
+    var c;
+    switch (n) {
+      case 1:
+        c = "accessor";
+        break;
+      case 2:
+        c = "method";
+        break;
+      case 3:
+        c = "getter";
+        break;
+      case 4:
+        c = "setter";
+        break;
+      default:
+        c = "field";
+    }
+    var l,
+      u,
+      f = {
+        kind: c,
+        name: s ? "#" + t : t,
+        "static": i,
+        "private": s
+      },
+      p = {
+        v: !1
+      };
+    0 !== n && (f.addInitializer = createAddInitializerMethod(a, p)), 0 === n ? s ? (l = r.get, u = r.set) : (l = function l() {
+      return this[t];
+    }, u = function u(e) {
+      this[t] = e;
+    }) : 2 === n ? l = function l() {
+      return r.value;
+    } : (1 !== n && 3 !== n || (l = function l() {
+      return r.get.call(this);
+    }), 1 !== n && 4 !== n || (u = function u(e) {
+      r.set.call(this, e);
+    })), f.access = l && u ? {
+      get: l,
+      set: u
+    } : l ? {
+      get: l
+    } : {
+      set: u
+    };
+    try {
+      return e(o, f);
+    } finally {
+      p.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function applyMemberDec(e, t, r, a, n, i, s, o) {
+    var c,
+      l,
+      u,
+      f,
+      p,
+      d,
+      h = r[0];
+    if (s ? c = 0 === n || 1 === n ? {
+      get: r[3],
+      set: r[4]
+    } : 3 === n ? {
+      get: r[3]
+    } : 4 === n ? {
+      set: r[3]
+    } : {
+      value: r[3]
+    } : 0 !== n && (c = Object.getOwnPropertyDescriptor(t, a)), 1 === n ? u = {
+      get: c.get,
+      set: c.set
+    } : 2 === n ? u = c.value : 3 === n ? u = c.get : 4 === n && (u = c.set), "function" == typeof h) void 0 !== (f = memberDec(h, a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? l = f : 1 === n ? (l = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+      get: p,
+      set: d
+    }) : u = f);else for (var v = h.length - 1; v >= 0; v--) {
+      var g;
+      void 0 !== (f = memberDec(h[v], a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? g = f : 1 === n ? (g = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+        get: p,
+        set: d
+      }) : u = f, void 0 !== g && (void 0 === l ? l = g : "function" == typeof l ? l = [l, g] : l.push(g)));
+    }
+    if (0 === n || 1 === n) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var y = l;
+        l = function l(e, t) {
+          for (var r = t, a = 0; a < y.length; a++) r = y[a].call(e, r);
+          return r;
+        };
+      } else {
+        var m = l;
+        l = function l(e, t) {
+          return m.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== n && (1 === n ? (c.get = u.get, c.set = u.set) : 2 === n ? c.value = u : 3 === n ? c.get = u : 4 === n && (c.set = u), s ? 1 === n ? (e.push(function (e, t) {
+      return u.get.call(e, t);
+    }), e.push(function (e, t) {
+      return u.set.call(e, t);
+    })) : 2 === n ? e.push(u) : e.push(function (e, t) {
+      return u.call(e, t);
+    }) : Object.defineProperty(t, a, c));
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r) {
+    var a = [];
+    return function (e, t, r) {
+      for (var a, n, i = new Map(), s = new Map(), o = 0; o < r.length; o++) {
+        var c = r[o];
+        if (Array.isArray(c)) {
+          var l,
+            u,
+            f = c[1],
+            p = c[2],
+            d = c.length > 3,
+            h = f >= 5;
+          if (h ? (l = t, 0 != (f -= 5) && (u = n = n || [])) : (l = t.prototype, 0 !== f && (u = a = a || [])), 0 !== f && !d) {
+            var v = h ? s : i,
+              g = v.get(p) || 0;
+            if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+            !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+          }
+          applyMemberDec(e, l, c, p, f, h, d, u);
+        }
+      }
+      pushInitializers(e, a), pushInitializers(e, n);
+    }(a, e, t), function (e, t, r) {
+      if (r.length > 0) {
+        for (var a = [], n = t, i = t.name, s = r.length - 1; s >= 0; s--) {
+          var o = {
+            v: !1
+          };
+          try {
+            var c = r[s](n, {
+              kind: "class",
+              name: i,
+              addInitializer: createAddInitializerMethod(a, o)
+            });
+          } finally {
+            o.v = !0;
+          }
+          void 0 !== c && (assertValidReturnValue(10, c), n = c);
+        }
+        e.push(n, function () {
+          for (var e = 0; e < a.length; e++) a[e].call(n);
+        });
+      }
+    }(a, e, r), a;
+  };
+}
+var applyDecs2203Impl;
+function applyDecs2203(e, t, r) {
+  return (applyDecs2203Impl = applyDecs2203Impl || applyDecs2203Factory())(e, t, r);
+}
+module.exports = applyDecs2203, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs2203R.js b/node_modules/@babel/runtime/helpers/applyDecs2203R.js
new file mode 100644
index 0000000000000000000000000000000000000000..725419b5b37c496f3ca27bfc9bb576ef03de4bc0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs2203R.js
@@ -0,0 +1,191 @@
+var _typeof = require("./typeof.js")["default"];
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2203RFactory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function memberDec(e, t, r, n, a, i, o, s) {
+    var c;
+    switch (a) {
+      case 1:
+        c = "accessor";
+        break;
+      case 2:
+        c = "method";
+        break;
+      case 3:
+        c = "getter";
+        break;
+      case 4:
+        c = "setter";
+        break;
+      default:
+        c = "field";
+    }
+    var l,
+      u,
+      f = {
+        kind: c,
+        name: o ? "#" + t : toPropertyKey(t),
+        "static": i,
+        "private": o
+      },
+      p = {
+        v: !1
+      };
+    0 !== a && (f.addInitializer = createAddInitializerMethod(n, p)), 0 === a ? o ? (l = r.get, u = r.set) : (l = function l() {
+      return this[t];
+    }, u = function u(e) {
+      this[t] = e;
+    }) : 2 === a ? l = function l() {
+      return r.value;
+    } : (1 !== a && 3 !== a || (l = function l() {
+      return r.get.call(this);
+    }), 1 !== a && 4 !== a || (u = function u(e) {
+      r.set.call(this, e);
+    })), f.access = l && u ? {
+      get: l,
+      set: u
+    } : l ? {
+      get: l
+    } : {
+      set: u
+    };
+    try {
+      return e(s, f);
+    } finally {
+      p.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function applyMemberDec(e, t, r, n, a, i, o, s) {
+    var c,
+      l,
+      u,
+      f,
+      p,
+      d,
+      h,
+      v = r[0];
+    if (o ? (0 === a || 1 === a ? (c = {
+      get: r[3],
+      set: r[4]
+    }, u = "get") : 3 === a ? (c = {
+      get: r[3]
+    }, u = "get") : 4 === a ? (c = {
+      set: r[3]
+    }, u = "set") : c = {
+      value: r[3]
+    }, 0 !== a && (1 === a && setFunctionName(r[4], "#" + n, "set"), setFunctionName(r[3], "#" + n, u))) : 0 !== a && (c = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? f = {
+      get: c.get,
+      set: c.set
+    } : 2 === a ? f = c.value : 3 === a ? f = c.get : 4 === a && (f = c.set), "function" == typeof v) void 0 !== (p = memberDec(v, n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? l = p : 1 === a ? (l = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+      get: d,
+      set: h
+    }) : f = p);else for (var g = v.length - 1; g >= 0; g--) {
+      var y;
+      void 0 !== (p = memberDec(v[g], n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? y = p : 1 === a ? (y = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+        get: d,
+        set: h
+      }) : f = p, void 0 !== y && (void 0 === l ? l = y : "function" == typeof l ? l = [l, y] : l.push(y)));
+    }
+    if (0 === a || 1 === a) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var m = l;
+        l = function l(e, t) {
+          for (var r = t, n = 0; n < m.length; n++) r = m[n].call(e, r);
+          return r;
+        };
+      } else {
+        var b = l;
+        l = function l(e, t) {
+          return b.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== a && (1 === a ? (c.get = f.get, c.set = f.set) : 2 === a ? c.value = f : 3 === a ? c.get = f : 4 === a && (c.set = f), o ? 1 === a ? (e.push(function (e, t) {
+      return f.get.call(e, t);
+    }), e.push(function (e, t) {
+      return f.set.call(e, t);
+    })) : 2 === a ? e.push(f) : e.push(function (e, t) {
+      return f.call(e, t);
+    }) : Object.defineProperty(t, n, c));
+  }
+  function applyMemberDecs(e, t) {
+    for (var r, n, a = [], i = new Map(), o = new Map(), s = 0; s < t.length; s++) {
+      var c = t[s];
+      if (Array.isArray(c)) {
+        var l,
+          u,
+          f = c[1],
+          p = c[2],
+          d = c.length > 3,
+          h = f >= 5;
+        if (h ? (l = e, 0 != (f -= 5) && (u = n = n || [])) : (l = e.prototype, 0 !== f && (u = r = r || [])), 0 !== f && !d) {
+          var v = h ? o : i,
+            g = v.get(p) || 0;
+          if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+          !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+        }
+        applyMemberDec(a, l, c, p, f, h, d, u);
+      }
+    }
+    return pushInitializers(a, r), pushInitializers(a, n), a;
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r) {
+    return {
+      e: applyMemberDecs(e, t),
+      get c() {
+        return function (e, t) {
+          if (t.length > 0) {
+            for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+              var o = {
+                v: !1
+              };
+              try {
+                var s = t[i](n, {
+                  kind: "class",
+                  name: a,
+                  addInitializer: createAddInitializerMethod(r, o)
+                });
+              } finally {
+                o.v = !0;
+              }
+              void 0 !== s && (assertValidReturnValue(10, s), n = s);
+            }
+            return [n, function () {
+              for (var e = 0; e < r.length; e++) r[e].call(n);
+            }];
+          }
+        }(e, r);
+      }
+    };
+  };
+}
+function applyDecs2203R(e, t, r) {
+  return (module.exports = applyDecs2203R = applyDecs2203RFactory(), module.exports.__esModule = true, module.exports["default"] = module.exports)(e, t, r);
+}
+module.exports = applyDecs2203R, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs2301.js b/node_modules/@babel/runtime/helpers/applyDecs2301.js
new file mode 100644
index 0000000000000000000000000000000000000000..fc2c130762614a917f53d1b3b3e7143ea3e2e9b2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs2301.js
@@ -0,0 +1,222 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2301Factory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function assertInstanceIfPrivate(e, t) {
+    if (!e(t)) throw new TypeError("Attempted to access private element on non-instance");
+  }
+  function memberDec(e, t, r, n, a, i, s, o, c) {
+    var u;
+    switch (a) {
+      case 1:
+        u = "accessor";
+        break;
+      case 2:
+        u = "method";
+        break;
+      case 3:
+        u = "getter";
+        break;
+      case 4:
+        u = "setter";
+        break;
+      default:
+        u = "field";
+    }
+    var l,
+      f,
+      p = {
+        kind: u,
+        name: s ? "#" + t : toPropertyKey(t),
+        "static": i,
+        "private": s
+      },
+      d = {
+        v: !1
+      };
+    if (0 !== a && (p.addInitializer = createAddInitializerMethod(n, d)), s || 0 !== a && 2 !== a) {
+      if (2 === a) l = function l(e) {
+        return assertInstanceIfPrivate(c, e), r.value;
+      };else {
+        var h = 0 === a || 1 === a;
+        (h || 3 === a) && (l = s ? function (e) {
+          return assertInstanceIfPrivate(c, e), r.get.call(e);
+        } : function (e) {
+          return r.get.call(e);
+        }), (h || 4 === a) && (f = s ? function (e, t) {
+          assertInstanceIfPrivate(c, e), r.set.call(e, t);
+        } : function (e, t) {
+          r.set.call(e, t);
+        });
+      }
+    } else l = function l(e) {
+      return e[t];
+    }, 0 === a && (f = function f(e, r) {
+      e[t] = r;
+    });
+    var v = s ? c.bind() : function (e) {
+      return t in e;
+    };
+    p.access = l && f ? {
+      get: l,
+      set: f,
+      has: v
+    } : l ? {
+      get: l,
+      has: v
+    } : {
+      set: f,
+      has: v
+    };
+    try {
+      return e(o, p);
+    } finally {
+      d.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function curryThis2(e) {
+    return function (t) {
+      e(this, t);
+    };
+  }
+  function applyMemberDec(e, t, r, n, a, i, s, o, c) {
+    var u,
+      l,
+      f,
+      p,
+      d,
+      h,
+      v,
+      y,
+      g = r[0];
+    if (s ? (0 === a || 1 === a ? (u = {
+      get: (d = r[3], function () {
+        return d(this);
+      }),
+      set: curryThis2(r[4])
+    }, f = "get") : 3 === a ? (u = {
+      get: r[3]
+    }, f = "get") : 4 === a ? (u = {
+      set: r[3]
+    }, f = "set") : u = {
+      value: r[3]
+    }, 0 !== a && (1 === a && setFunctionName(u.set, "#" + n, "set"), setFunctionName(u[f || "value"], "#" + n, f))) : 0 !== a && (u = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? p = {
+      get: u.get,
+      set: u.set
+    } : 2 === a ? p = u.value : 3 === a ? p = u.get : 4 === a && (p = u.set), "function" == typeof g) void 0 !== (h = memberDec(g, n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? l = h : 1 === a ? (l = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+      get: v,
+      set: y
+    }) : p = h);else for (var m = g.length - 1; m >= 0; m--) {
+      var b;
+      void 0 !== (h = memberDec(g[m], n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? b = h : 1 === a ? (b = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+        get: v,
+        set: y
+      }) : p = h, void 0 !== b && (void 0 === l ? l = b : "function" == typeof l ? l = [l, b] : l.push(b)));
+    }
+    if (0 === a || 1 === a) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var I = l;
+        l = function l(e, t) {
+          for (var r = t, n = 0; n < I.length; n++) r = I[n].call(e, r);
+          return r;
+        };
+      } else {
+        var w = l;
+        l = function l(e, t) {
+          return w.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== a && (1 === a ? (u.get = p.get, u.set = p.set) : 2 === a ? u.value = p : 3 === a ? u.get = p : 4 === a && (u.set = p), s ? 1 === a ? (e.push(function (e, t) {
+      return p.get.call(e, t);
+    }), e.push(function (e, t) {
+      return p.set.call(e, t);
+    })) : 2 === a ? e.push(p) : e.push(function (e, t) {
+      return p.call(e, t);
+    }) : Object.defineProperty(t, n, u));
+  }
+  function applyMemberDecs(e, t, r) {
+    for (var n, a, i, s = [], o = new Map(), c = new Map(), u = 0; u < t.length; u++) {
+      var l = t[u];
+      if (Array.isArray(l)) {
+        var f,
+          p,
+          d = l[1],
+          h = l[2],
+          v = l.length > 3,
+          y = d >= 5,
+          g = r;
+        if (y ? (f = e, 0 != (d -= 5) && (p = a = a || []), v && !i && (i = function i(t) {
+          return checkInRHS(t) === e;
+        }), g = i) : (f = e.prototype, 0 !== d && (p = n = n || [])), 0 !== d && !v) {
+          var m = y ? c : o,
+            b = m.get(h) || 0;
+          if (!0 === b || 3 === b && 4 !== d || 4 === b && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+          !b && d > 2 ? m.set(h, d) : m.set(h, !0);
+        }
+        applyMemberDec(s, f, l, h, d, y, v, p, g);
+      }
+    }
+    return pushInitializers(s, n), pushInitializers(s, a), s;
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r, n) {
+    return {
+      e: applyMemberDecs(e, t, n),
+      get c() {
+        return function (e, t) {
+          if (t.length > 0) {
+            for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+              var s = {
+                v: !1
+              };
+              try {
+                var o = t[i](n, {
+                  kind: "class",
+                  name: a,
+                  addInitializer: createAddInitializerMethod(r, s)
+                });
+              } finally {
+                s.v = !0;
+              }
+              void 0 !== o && (assertValidReturnValue(10, o), n = o);
+            }
+            return [n, function () {
+              for (var e = 0; e < r.length; e++) r[e].call(n);
+            }];
+          }
+        }(e, r);
+      }
+    };
+  };
+}
+function applyDecs2301(e, t, r, n) {
+  return (module.exports = applyDecs2301 = applyDecs2301Factory(), module.exports.__esModule = true, module.exports["default"] = module.exports)(e, t, r, n);
+}
+module.exports = applyDecs2301, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs2305.js b/node_modules/@babel/runtime/helpers/applyDecs2305.js
new file mode 100644
index 0000000000000000000000000000000000000000..744c35212bdac019dcb8a8eb77efd394c25ac24b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs2305.js
@@ -0,0 +1,133 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2305(e, t, r, n, o, a) {
+  function i(e, t, r) {
+    return function (n, o) {
+      return r && r(n), e[t].call(n, o);
+    };
+  }
+  function c(e, t) {
+    for (var r = 0; r < e.length; r++) e[r].call(t);
+    return t;
+  }
+  function s(e, t, r, n) {
+    if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined"));
+    return e;
+  }
+  function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) {
+    function m(e) {
+      if (!h(e)) throw new TypeError("Attempted to access private element on non-instance");
+    }
+    var y,
+      v = t[0],
+      g = t[3],
+      b = !u;
+    if (!b) {
+      r || Array.isArray(v) || (v = [v]);
+      var w = {},
+        S = [],
+        A = 3 === o ? "get" : 4 === o || d ? "set" : "value";
+      f ? (p || d ? w = {
+        get: setFunctionName(function () {
+          return g(this);
+        }, n, "get"),
+        set: function set(e) {
+          t[4](this, e);
+        }
+      } : w[A] = g, p || setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n));
+    }
+    for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) {
+      var D = v[j],
+        E = r ? v[j - 1] : void 0,
+        I = {},
+        O = {
+          kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+          name: n,
+          metadata: a,
+          addInitializer: function (e, t) {
+            if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+            s(t, "An initializer", "be", !0), c.push(t);
+          }.bind(null, I)
+        };
+      try {
+        if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else {
+          var k, F;
+          O["static"] = l, O["private"] = f, f ? 2 === o ? k = function k(e) {
+            return m(e), w.value;
+          } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function k(e) {
+            return e[n];
+          }, (o < 2 || 4 === o) && (F = function F(e, t) {
+            e[n] = t;
+          }));
+          var N = O.access = {
+            has: f ? h.bind() : function (e) {
+              return n in e;
+            }
+          };
+          if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? {
+            get: w.get,
+            set: w.set
+          } : w[A], O), d) {
+            if ("object" == _typeof(P) && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+          } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P);
+        }
+      } finally {
+        I.v = !0;
+      }
+    }
+    return (p || d) && u.push(function (e, t) {
+      for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t);
+      return t;
+    }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P;
+  }
+  function u(e, t) {
+    return Object.defineProperty(e, Symbol.metadata || Symbol["for"]("Symbol.metadata"), {
+      configurable: !0,
+      enumerable: !0,
+      value: t
+    });
+  }
+  if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol["for"]("Symbol.metadata")];
+  var f = Object.create(null == l ? null : l),
+    p = function (e, t, r, n) {
+      var o,
+        a,
+        i = [],
+        s = function s(t) {
+          return checkInRHS(t) === e;
+        },
+        u = new Map();
+      function l(e) {
+        e && i.push(c.bind(null, e));
+      }
+      for (var f = 0; f < t.length; f++) {
+        var p = t[f];
+        if (Array.isArray(p)) {
+          var d = p[1],
+            h = p[2],
+            m = p.length > 3,
+            y = 16 & d,
+            v = !!(8 & d),
+            g = 0 == (d &= 7),
+            b = h + "/" + v;
+          if (!g && !m) {
+            var w = u.get(b);
+            if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+            u.set(b, !(d > 2) || d);
+          }
+          applyDec(v ? e : e.prototype, p, y, m ? "#" + h : toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r);
+        }
+      }
+      return l(o), l(a), i;
+    }(e, t, o, f);
+  return r.length || u(e, f), {
+    e: p,
+    get c() {
+      var t = [];
+      return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)];
+    }
+  };
+}
+module.exports = applyDecs2305, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/applyDecs2311.js b/node_modules/@babel/runtime/helpers/applyDecs2311.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f00a31135a48f096edb85f69f354945aabc20e7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/applyDecs2311.js
@@ -0,0 +1,124 @@
+var _typeof = require("./typeof.js")["default"];
+var checkInRHS = require("./checkInRHS.js");
+var setFunctionName = require("./setFunctionName.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function applyDecs2311(e, t, n, r, o, i) {
+  var a,
+    c,
+    u,
+    s,
+    f,
+    l,
+    p,
+    d = Symbol.metadata || Symbol["for"]("Symbol.metadata"),
+    m = Object.defineProperty,
+    h = Object.create,
+    y = [h(null), h(null)],
+    v = t.length;
+  function g(t, n, r) {
+    return function (o, i) {
+      n && (i = o, o = e);
+      for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []);
+      return r ? i : o;
+    };
+  }
+  function b(e, t, n, r) {
+    if ("function" != typeof e && (r || void 0 !== e)) throw new TypeError(t + " must " + (n || "be") + " a function" + (r ? "" : " or undefined"));
+    return e;
+  }
+  function applyDec(e, t, n, r, o, i, u, s, f, l, p) {
+    function d(e) {
+      if (!p(e)) throw new TypeError("Attempted to access private element on non-instance");
+    }
+    var h = [].concat(t[0]),
+      v = t[3],
+      w = !u,
+      D = 1 === o,
+      S = 3 === o,
+      j = 4 === o,
+      E = 2 === o;
+    function I(t, n, r) {
+      return function (o, i) {
+        return n && (i = o, o = e), r && r(o), P[t].call(o, i);
+      };
+    }
+    if (!w) {
+      var P = {},
+        k = [],
+        F = S ? "get" : j || D ? "set" : "value";
+      if (f ? (l || D ? P = {
+        get: setFunctionName(function () {
+          return v(this);
+        }, r, "get"),
+        set: function set(e) {
+          t[4](this, e);
+        }
+      } : P[F] = v, l || setFunctionName(P[F], r, E ? "" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) {
+        if ((c = y[+s][r]) && 7 != (c ^ o)) throw Error("Decorating two elements with the same name (" + P[F].name + ") is not supported yet");
+        y[+s][r] = o < 3 ? 1 : o;
+      }
+    }
+    for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) {
+      var T = b(h[O], "A decorator", "be", !0),
+        z = n ? h[O - 1] : void 0,
+        A = {},
+        H = {
+          kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+          name: r,
+          metadata: a,
+          addInitializer: function (e, t) {
+            if (e.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
+            b(t, "An initializer", "be", !0), i.push(t);
+          }.bind(null, A)
+        };
+      if (w) c = T.call(z, N, H), A.v = 1, b(c, "class decorators", "return") && (N = c);else if (H["static"] = s, H["private"] = f, c = H.access = {
+        has: f ? p.bind() : function (e) {
+          return r in e;
+        }
+      }, j || (c.get = f ? E ? function (e) {
+        return d(e), P.value;
+      } : I("get", 0, d) : function (e) {
+        return e[r];
+      }), E || S || (c.set = f ? I("set", 0, d) : function (e, t) {
+        e[r] = t;
+      }), N = T.call(z, D ? {
+        get: P.get,
+        set: P.set
+      } : P[F], H), A.v = 1, D) {
+        if ("object" == _typeof(N) && N) (c = b(N.get, "accessor.get")) && (P.get = c), (c = b(N.set, "accessor.set")) && (P.set = c), (c = b(N.init, "accessor.init")) && k.unshift(c);else if (void 0 !== N) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
+      } else b(N, (l ? "field" : "method") + " decorators", "return") && (l ? k.unshift(N) : P[F] = N);
+    }
+    return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I("get", s), I("set", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N;
+  }
+  function w(e) {
+    return m(e, d, {
+      configurable: !0,
+      enumerable: !0,
+      value: a
+    });
+  }
+  return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function l(e) {
+    e && f.push(g(e));
+  }, p = function p(t, r) {
+    for (var i = 0; i < n.length; i++) {
+      var a = n[i],
+        c = a[1],
+        l = 7 & c;
+      if ((8 & c) == t && !l == r) {
+        var p = a[2],
+          d = !!a[3],
+          m = 16 & c;
+        applyDec(t ? e : e.prototype, a, m, d ? "#" + p : toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) {
+          return checkInRHS(t) === e;
+        } : o);
+      }
+    }
+  }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), {
+    e: c,
+    get c() {
+      var n = [];
+      return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)];
+    }
+  };
+}
+module.exports = applyDecs2311, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/arrayLikeToArray.js b/node_modules/@babel/runtime/helpers/arrayLikeToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..19787e31989579218c207db2bb34be54dc9a569a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/arrayLikeToArray.js
@@ -0,0 +1,6 @@
+function _arrayLikeToArray(r, a) {
+  (null == a || a > r.length) && (a = r.length);
+  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
+  return n;
+}
+module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/arrayWithHoles.js b/node_modules/@babel/runtime/helpers/arrayWithHoles.js
new file mode 100644
index 0000000000000000000000000000000000000000..78bdd93199dd47e86aac3e3108b7092de3c5e8d0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/arrayWithHoles.js
@@ -0,0 +1,4 @@
+function _arrayWithHoles(r) {
+  if (Array.isArray(r)) return r;
+}
+module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js b/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js
new file mode 100644
index 0000000000000000000000000000000000000000..42218f54a1791395952779760a161f1ed1372ed2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js
@@ -0,0 +1,5 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _arrayWithoutHoles(r) {
+  if (Array.isArray(r)) return arrayLikeToArray(r);
+}
+module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/assertClassBrand.js b/node_modules/@babel/runtime/helpers/assertClassBrand.js
new file mode 100644
index 0000000000000000000000000000000000000000..e63ed8f46f11d99e9b30404b862ae9bb30132eaa
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/assertClassBrand.js
@@ -0,0 +1,5 @@
+function _assertClassBrand(e, t, n) {
+  if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
+  throw new TypeError("Private element is not present on this object");
+}
+module.exports = _assertClassBrand, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/assertThisInitialized.js b/node_modules/@babel/runtime/helpers/assertThisInitialized.js
new file mode 100644
index 0000000000000000000000000000000000000000..02594fbe24b4b347d9b884001a16f6fe9cbae950
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/assertThisInitialized.js
@@ -0,0 +1,5 @@
+function _assertThisInitialized(e) {
+  if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+  return e;
+}
+module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js b/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js
new file mode 100644
index 0000000000000000000000000000000000000000..023568e08ea0396305c7f7dfc3a36db6c2feafba
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/asyncGeneratorDelegate.js
@@ -0,0 +1,24 @@
+var OverloadYield = require("./OverloadYield.js");
+function _asyncGeneratorDelegate(t) {
+  var e = {},
+    n = !1;
+  function pump(e, r) {
+    return n = !0, r = new Promise(function (n) {
+      n(t[e](r));
+    }), {
+      done: !1,
+      value: new OverloadYield(r, 1)
+    };
+  }
+  return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () {
+    return this;
+  }, e.next = function (t) {
+    return n ? (n = !1, t) : pump("next", t);
+  }, "function" == typeof t["throw"] && (e["throw"] = function (t) {
+    if (n) throw n = !1, t;
+    return pump("throw", t);
+  }), "function" == typeof t["return"] && (e["return"] = function (t) {
+    return n ? (n = !1, t) : pump("return", t);
+  }), e;
+}
+module.exports = _asyncGeneratorDelegate, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/asyncIterator.js b/node_modules/@babel/runtime/helpers/asyncIterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c0c95cfceddbffca7913b5ba3668824f7971801
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/asyncIterator.js
@@ -0,0 +1,45 @@
+function _asyncIterator(r) {
+  var n,
+    t,
+    o,
+    e = 2;
+  for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {
+    if (t && null != (n = r[t])) return n.call(r);
+    if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));
+    t = "@@asyncIterator", o = "@@iterator";
+  }
+  throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(r) {
+  function AsyncFromSyncIteratorContinuation(r) {
+    if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+    var n = r.done;
+    return Promise.resolve(r.value).then(function (r) {
+      return {
+        value: r,
+        done: n
+      };
+    });
+  }
+  return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {
+    this.s = r, this.n = r.next;
+  }, AsyncFromSyncIterator.prototype = {
+    s: null,
+    n: null,
+    next: function next() {
+      return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+    },
+    "return": function _return(r) {
+      var n = this.s["return"];
+      return void 0 === n ? Promise.resolve({
+        value: r,
+        done: !0
+      }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+    },
+    "throw": function _throw(r) {
+      var n = this.s["return"];
+      return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+    }
+  }, new AsyncFromSyncIterator(r);
+}
+module.exports = _asyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/asyncToGenerator.js b/node_modules/@babel/runtime/helpers/asyncToGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..a080339bf98b7ec82fd8af00c817e00932aea33a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/asyncToGenerator.js
@@ -0,0 +1,26 @@
+function asyncGeneratorStep(n, t, e, r, o, a, c) {
+  try {
+    var i = n[a](c),
+      u = i.value;
+  } catch (n) {
+    return void e(n);
+  }
+  i.done ? t(u) : Promise.resolve(u).then(r, o);
+}
+function _asyncToGenerator(n) {
+  return function () {
+    var t = this,
+      e = arguments;
+    return new Promise(function (r, o) {
+      var a = n.apply(t, e);
+      function _next(n) {
+        asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
+      }
+      function _throw(n) {
+        asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
+      }
+      _next(void 0);
+    });
+  };
+}
+module.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js b/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..2d6fab916dbeaa399eda911d75bc162db9d1a360
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js
@@ -0,0 +1,5 @@
+var OverloadYield = require("./OverloadYield.js");
+function _awaitAsyncGenerator(e) {
+  return new OverloadYield(e, 0);
+}
+module.exports = _awaitAsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/callSuper.js b/node_modules/@babel/runtime/helpers/callSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..38eaf7f8b3768cae70fdd7ec40ddb2fcff30de40
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/callSuper.js
@@ -0,0 +1,7 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var possibleConstructorReturn = require("./possibleConstructorReturn.js");
+function _callSuper(t, o, e) {
+  return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));
+}
+module.exports = _callSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/checkInRHS.js b/node_modules/@babel/runtime/helpers/checkInRHS.js
new file mode 100644
index 0000000000000000000000000000000000000000..4eea13d923774977341cbe13f2b4d7e154a90bf4
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/checkInRHS.js
@@ -0,0 +1,6 @@
+var _typeof = require("./typeof.js")["default"];
+function _checkInRHS(e) {
+  if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? _typeof(e) : "null"));
+  return e;
+}
+module.exports = _checkInRHS, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js b/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js
new file mode 100644
index 0000000000000000000000000000000000000000..33ad54c960c273e21e000e8c21e01e92aa8bb6e7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js
@@ -0,0 +1,4 @@
+function _checkPrivateRedeclaration(e, t) {
+  if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
+}
+module.exports = _checkPrivateRedeclaration, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js b/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..9998b835525527098aeebe30b5a7b113a5e00f43
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js
@@ -0,0 +1,10 @@
+function _classApplyDescriptorDestructureSet(e, t) {
+  if (t.set) return "__destrObj" in t || (t.__destrObj = {
+    set value(r) {
+      t.set.call(e, r);
+    }
+  }), t.__destrObj;
+  if (!t.writable) throw new TypeError("attempted to set read only private field");
+  return t;
+}
+module.exports = _classApplyDescriptorDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js b/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab627245499996f16b06376fc6d4ab50a2e68894
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js
@@ -0,0 +1,4 @@
+function _classApplyDescriptorGet(e, t) {
+  return t.get ? t.get.call(e) : t.value;
+}
+module.exports = _classApplyDescriptorGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js b/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..0975f95fb56a00d43585563635b6310abd816d7f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js
@@ -0,0 +1,7 @@
+function _classApplyDescriptorSet(e, t, l) {
+  if (t.set) t.set.call(e, l);else {
+    if (!t.writable) throw new TypeError("attempted to set read only private field");
+    t.value = l;
+  }
+}
+module.exports = _classApplyDescriptorSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classCallCheck.js b/node_modules/@babel/runtime/helpers/classCallCheck.js
new file mode 100644
index 0000000000000000000000000000000000000000..21b8390ff2fcd712eea49955e1f7fadbf965a9a2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classCallCheck.js
@@ -0,0 +1,4 @@
+function _classCallCheck(a, n) {
+  if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
+}
+module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js b/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js
new file mode 100644
index 0000000000000000000000000000000000000000..7520f74dc777947531d74d9a44fdae5780c5c25d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classCheckPrivateStaticAccess(s, a, r) {
+  return assertClassBrand(a, s, r);
+}
+module.exports = _classCheckPrivateStaticAccess, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js b/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f70395ea7618a52e1742dd1ac5b9be2db770286
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js
@@ -0,0 +1,4 @@
+function _classCheckPrivateStaticFieldDescriptor(t, e) {
+  if (void 0 === t) throw new TypeError("attempted to " + e + " private static field before its declaration");
+}
+module.exports = _classCheckPrivateStaticFieldDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js b/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..be855be9871309238097d6324e3e18ae47e75fa3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js
@@ -0,0 +1,5 @@
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classExtractFieldDescriptor(e, t) {
+  return classPrivateFieldGet2(t, e);
+}
+module.exports = _classExtractFieldDescriptor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classNameTDZError.js b/node_modules/@babel/runtime/helpers/classNameTDZError.js
new file mode 100644
index 0000000000000000000000000000000000000000..8141ff89c0bb9c8a4a7be890f544f7352b8a2ced
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classNameTDZError.js
@@ -0,0 +1,4 @@
+function _classNameTDZError(e) {
+  throw new ReferenceError('Class "' + e + '" cannot be referenced in computed property keys.');
+}
+module.exports = _classNameTDZError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js b/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..97c764d00c49370ffa0c5b3c8af77663aa604e48
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldDestructureSet(e, t) {
+  var r = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorDestructureSet(e, r);
+}
+module.exports = _classPrivateFieldDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js b/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..bbee142a375263ae867a39d3e1e1d1f12d6cce61
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldGet(e, t) {
+  var r = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorGet(e, r);
+}
+module.exports = _classPrivateFieldGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js b/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4c271c71a7b058af142c62cb958b55eb3558b8f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldGet2.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateFieldGet2(s, a) {
+  return s.get(assertClassBrand(s, a));
+}
+module.exports = _classPrivateFieldGet2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js b/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a290c19a21b8e3505077dad4c1a87964d53edacb
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js
@@ -0,0 +1,5 @@
+var checkPrivateRedeclaration = require("./checkPrivateRedeclaration.js");
+function _classPrivateFieldInitSpec(e, t, a) {
+  checkPrivateRedeclaration(e, t), t.set(e, a);
+}
+module.exports = _classPrivateFieldInitSpec, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js b/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9e46f267a38fb4e19044c54bcbed5493c63e4c4
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js
@@ -0,0 +1,5 @@
+function _classPrivateFieldBase(e, t) {
+  if (!{}.hasOwnProperty.call(e, t)) throw new TypeError("attempted to use private field on non-instance");
+  return e;
+}
+module.exports = _classPrivateFieldBase, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js b/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..5dc687fe77ad1a77b6dc747cda37260319c22f02
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js
@@ -0,0 +1,5 @@
+var id = 0;
+function _classPrivateFieldKey(e) {
+  return "__private_" + id++ + "_" + e;
+}
+module.exports = _classPrivateFieldKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js b/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3746e74292bb2a935dab5f120e6be9677ef9e4a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");
+var classPrivateFieldGet2 = require("./classPrivateFieldGet2.js");
+function _classPrivateFieldSet(e, t, r) {
+  var s = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorSet(e, s, r), r;
+}
+module.exports = _classPrivateFieldSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js b/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js
new file mode 100644
index 0000000000000000000000000000000000000000..25c60caaa4c5c866fb3e85427ed5439135ce1e1e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateFieldSet2.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateFieldSet2(s, a, r) {
+  return s.set(assertClassBrand(s, a), r), r;
+}
+module.exports = _classPrivateFieldSet2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateGetter.js b/node_modules/@babel/runtime/helpers/classPrivateGetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b3cf30a5005fea607c6cc85bd3dff587d7c943f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateGetter.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateGetter(s, r, a) {
+  return a(assertClassBrand(s, r));
+}
+module.exports = _classPrivateGetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js b/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..e4af38785b5186d8292a5db52e093d459afc929f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateMethodGet(s, a, r) {
+  return assertClassBrand(a, s), r;
+}
+module.exports = _classPrivateMethodGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js b/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js
new file mode 100644
index 0000000000000000000000000000000000000000..821c8ed00c757b0a53efee18e337eb37b1bd8eaa
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js
@@ -0,0 +1,5 @@
+var checkPrivateRedeclaration = require("./checkPrivateRedeclaration.js");
+function _classPrivateMethodInitSpec(e, a) {
+  checkPrivateRedeclaration(e, a), a.add(e);
+}
+module.exports = _classPrivateMethodInitSpec, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js b/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..a44fd785361f883482634803b03124a84d1e950c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classPrivateMethodSet() {
+  throw new TypeError("attempted to reassign private method");
+}
+module.exports = _classPrivateMethodSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classPrivateSetter.js b/node_modules/@babel/runtime/helpers/classPrivateSetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..494f81f0e5c3d0038c084bec68e0ebdc50983b42
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classPrivateSetter.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classPrivateSetter(s, r, a, t) {
+  return r(assertClassBrand(s, a), t), t;
+}
+module.exports = _classPrivateSetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bb6e8b1c96fc26936c95734d5adccc9f785d46c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorDestructureSet = require("./classApplyDescriptorDestructureSet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldDestructureSet(t, r, s) {
+  return assertClassBrand(r, t), classCheckPrivateStaticFieldDescriptor(s, "set"), classApplyDescriptorDestructureSet(t, s);
+}
+module.exports = _classStaticPrivateFieldDestructureSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb2365f3d8af2b881d69c21c013645c57fcd3102
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorGet = require("./classApplyDescriptorGet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldSpecGet(t, s, r) {
+  return assertClassBrand(s, t), classCheckPrivateStaticFieldDescriptor(r, "get"), classApplyDescriptorGet(t, r);
+}
+module.exports = _classStaticPrivateFieldSpecGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..7783cd8dd0976981ccbacbdbe6f226c85abe9279
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js
@@ -0,0 +1,7 @@
+var classApplyDescriptorSet = require("./classApplyDescriptorSet.js");
+var assertClassBrand = require("./assertClassBrand.js");
+var classCheckPrivateStaticFieldDescriptor = require("./classCheckPrivateStaticFieldDescriptor.js");
+function _classStaticPrivateFieldSpecSet(s, t, r, e) {
+  return assertClassBrand(t, s), classCheckPrivateStaticFieldDescriptor(r, "set"), classApplyDescriptorSet(s, r, e), e;
+}
+module.exports = _classStaticPrivateFieldSpecSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js b/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..c895be5c609483e32f25cecf41767e93812487ad
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js
@@ -0,0 +1,5 @@
+var assertClassBrand = require("./assertClassBrand.js");
+function _classStaticPrivateMethodGet(s, a, t) {
+  return assertClassBrand(a, s), t;
+}
+module.exports = _classStaticPrivateMethodGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js b/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..72560e6607e030d921a5ce8aa9896afd07dfd9be
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/classStaticPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classStaticPrivateMethodSet() {
+  throw new TypeError("attempted to set read only static private field");
+}
+module.exports = _classStaticPrivateMethodSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/construct.js b/node_modules/@babel/runtime/helpers/construct.js
new file mode 100644
index 0000000000000000000000000000000000000000..aee8e70448824f509d6605e2dfa4455167442f21
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/construct.js
@@ -0,0 +1,10 @@
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _construct(t, e, r) {
+  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
+  var o = [null];
+  o.push.apply(o, e);
+  var p = new (t.bind.apply(t, o))();
+  return r && setPrototypeOf(p, r.prototype), p;
+}
+module.exports = _construct, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/createClass.js b/node_modules/@babel/runtime/helpers/createClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..8757f9ee8f433d75d6aeee62874f693144ec1bfa
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/createClass.js
@@ -0,0 +1,13 @@
+var toPropertyKey = require("./toPropertyKey.js");
+function _defineProperties(e, r) {
+  for (var t = 0; t < r.length; t++) {
+    var o = r[t];
+    o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
+  }
+}
+function _createClass(e, r, t) {
+  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
+    writable: !1
+  }), e;
+}
+module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js b/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js
new file mode 100644
index 0000000000000000000000000000000000000000..277830792a6d3af9832e1f4e9a0ac98d1f81c868
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js
@@ -0,0 +1,50 @@
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+function _createForOfIteratorHelper(r, e) {
+  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (!t) {
+    if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+      t && (r = t);
+      var _n = 0,
+        F = function F() {};
+      return {
+        s: F,
+        n: function n() {
+          return _n >= r.length ? {
+            done: !0
+          } : {
+            done: !1,
+            value: r[_n++]
+          };
+        },
+        e: function e(r) {
+          throw r;
+        },
+        f: F
+      };
+    }
+    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+  }
+  var o,
+    a = !0,
+    u = !1;
+  return {
+    s: function s() {
+      t = t.call(r);
+    },
+    n: function n() {
+      var r = t.next();
+      return a = r.done, r;
+    },
+    e: function e(r) {
+      u = !0, o = r;
+    },
+    f: function f() {
+      try {
+        a || null == t["return"] || t["return"]();
+      } finally {
+        if (u) throw o;
+      }
+    }
+  };
+}
+module.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js b/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc81b1cdde61f8a7dc03cf50515a40cde569e849
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js
@@ -0,0 +1,19 @@
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+function _createForOfIteratorHelperLoose(r, e) {
+  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (t) return (t = t.call(r)).next.bind(t);
+  if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+    t && (r = t);
+    var o = 0;
+    return function () {
+      return o >= r.length ? {
+        done: !0
+      } : {
+        done: !1,
+        value: r[o++]
+      };
+    };
+  }
+  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _createForOfIteratorHelperLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/createSuper.js b/node_modules/@babel/runtime/helpers/createSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1869e61bf956f2a95eeded35edd5b761692a8c3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/createSuper.js
@@ -0,0 +1,16 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var isNativeReflectConstruct = require("./isNativeReflectConstruct.js");
+var possibleConstructorReturn = require("./possibleConstructorReturn.js");
+function _createSuper(t) {
+  var r = isNativeReflectConstruct();
+  return function () {
+    var e,
+      o = getPrototypeOf(t);
+    if (r) {
+      var s = getPrototypeOf(this).constructor;
+      e = Reflect.construct(o, arguments, s);
+    } else e = o.apply(this, arguments);
+    return possibleConstructorReturn(this, e);
+  };
+}
+module.exports = _createSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/decorate.js b/node_modules/@babel/runtime/helpers/decorate.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc22acf4c52b25df128845c3e181d83722d3ad75
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/decorate.js
@@ -0,0 +1,250 @@
+var toArray = require("./toArray.js");
+var toPropertyKey = require("./toPropertyKey.js");
+function _decorate(e, r, t, i) {
+  var o = _getDecoratorsApi();
+  if (i) for (var n = 0; n < i.length; n++) o = i[n](o);
+  var s = r(function (e) {
+      o.initializeInstanceElements(e, a.elements);
+    }, t),
+    a = o.decorateClass(_coalesceClassElements(s.d.map(_createElementDescriptor)), e);
+  return o.initializeClassElements(s.F, a.elements), o.runClassFinishers(s.F, a.finishers);
+}
+function _getDecoratorsApi() {
+  _getDecoratorsApi = function _getDecoratorsApi() {
+    return e;
+  };
+  var e = {
+    elementsDefinitionOrder: [["method"], ["field"]],
+    initializeInstanceElements: function initializeInstanceElements(e, r) {
+      ["method", "field"].forEach(function (t) {
+        r.forEach(function (r) {
+          r.kind === t && "own" === r.placement && this.defineClassElement(e, r);
+        }, this);
+      }, this);
+    },
+    initializeClassElements: function initializeClassElements(e, r) {
+      var t = e.prototype;
+      ["method", "field"].forEach(function (i) {
+        r.forEach(function (r) {
+          var o = r.placement;
+          if (r.kind === i && ("static" === o || "prototype" === o)) {
+            var n = "static" === o ? e : t;
+            this.defineClassElement(n, r);
+          }
+        }, this);
+      }, this);
+    },
+    defineClassElement: function defineClassElement(e, r) {
+      var t = r.descriptor;
+      if ("field" === r.kind) {
+        var i = r.initializer;
+        t = {
+          enumerable: t.enumerable,
+          writable: t.writable,
+          configurable: t.configurable,
+          value: void 0 === i ? void 0 : i.call(e)
+        };
+      }
+      Object.defineProperty(e, r.key, t);
+    },
+    decorateClass: function decorateClass(e, r) {
+      var t = [],
+        i = [],
+        o = {
+          "static": [],
+          prototype: [],
+          own: []
+        };
+      if (e.forEach(function (e) {
+        this.addElementPlacement(e, o);
+      }, this), e.forEach(function (e) {
+        if (!_hasDecorators(e)) return t.push(e);
+        var r = this.decorateElement(e, o);
+        t.push(r.element), t.push.apply(t, r.extras), i.push.apply(i, r.finishers);
+      }, this), !r) return {
+        elements: t,
+        finishers: i
+      };
+      var n = this.decorateConstructor(t, r);
+      return i.push.apply(i, n.finishers), n.finishers = i, n;
+    },
+    addElementPlacement: function addElementPlacement(e, r, t) {
+      var i = r[e.placement];
+      if (!t && -1 !== i.indexOf(e.key)) throw new TypeError("Duplicated element (" + e.key + ")");
+      i.push(e.key);
+    },
+    decorateElement: function decorateElement(e, r) {
+      for (var t = [], i = [], o = e.decorators, n = o.length - 1; n >= 0; n--) {
+        var s = r[e.placement];
+        s.splice(s.indexOf(e.key), 1);
+        var a = this.fromElementDescriptor(e),
+          l = this.toElementFinisherExtras((0, o[n])(a) || a);
+        e = l.element, this.addElementPlacement(e, r), l.finisher && i.push(l.finisher);
+        var c = l.extras;
+        if (c) {
+          for (var p = 0; p < c.length; p++) this.addElementPlacement(c[p], r);
+          t.push.apply(t, c);
+        }
+      }
+      return {
+        element: e,
+        finishers: i,
+        extras: t
+      };
+    },
+    decorateConstructor: function decorateConstructor(e, r) {
+      for (var t = [], i = r.length - 1; i >= 0; i--) {
+        var o = this.fromClassDescriptor(e),
+          n = this.toClassDescriptor((0, r[i])(o) || o);
+        if (void 0 !== n.finisher && t.push(n.finisher), void 0 !== n.elements) {
+          e = n.elements;
+          for (var s = 0; s < e.length - 1; s++) for (var a = s + 1; a < e.length; a++) if (e[s].key === e[a].key && e[s].placement === e[a].placement) throw new TypeError("Duplicated element (" + e[s].key + ")");
+        }
+      }
+      return {
+        elements: e,
+        finishers: t
+      };
+    },
+    fromElementDescriptor: function fromElementDescriptor(e) {
+      var r = {
+        kind: e.kind,
+        key: e.key,
+        placement: e.placement,
+        descriptor: e.descriptor
+      };
+      return Object.defineProperty(r, Symbol.toStringTag, {
+        value: "Descriptor",
+        configurable: !0
+      }), "field" === e.kind && (r.initializer = e.initializer), r;
+    },
+    toElementDescriptors: function toElementDescriptors(e) {
+      if (void 0 !== e) return toArray(e).map(function (e) {
+        var r = this.toElementDescriptor(e);
+        return this.disallowProperty(e, "finisher", "An element descriptor"), this.disallowProperty(e, "extras", "An element descriptor"), r;
+      }, this);
+    },
+    toElementDescriptor: function toElementDescriptor(e) {
+      var r = e.kind + "";
+      if ("method" !== r && "field" !== r) throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "' + r + '"');
+      var t = toPropertyKey(e.key),
+        i = e.placement + "";
+      if ("static" !== i && "prototype" !== i && "own" !== i) throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "' + i + '"');
+      var o = e.descriptor;
+      this.disallowProperty(e, "elements", "An element descriptor");
+      var n = {
+        kind: r,
+        key: t,
+        placement: i,
+        descriptor: Object.assign({}, o)
+      };
+      return "field" !== r ? this.disallowProperty(e, "initializer", "A method descriptor") : (this.disallowProperty(o, "get", "The property descriptor of a field descriptor"), this.disallowProperty(o, "set", "The property descriptor of a field descriptor"), this.disallowProperty(o, "value", "The property descriptor of a field descriptor"), n.initializer = e.initializer), n;
+    },
+    toElementFinisherExtras: function toElementFinisherExtras(e) {
+      return {
+        element: this.toElementDescriptor(e),
+        finisher: _optionalCallableProperty(e, "finisher"),
+        extras: this.toElementDescriptors(e.extras)
+      };
+    },
+    fromClassDescriptor: function fromClassDescriptor(e) {
+      var r = {
+        kind: "class",
+        elements: e.map(this.fromElementDescriptor, this)
+      };
+      return Object.defineProperty(r, Symbol.toStringTag, {
+        value: "Descriptor",
+        configurable: !0
+      }), r;
+    },
+    toClassDescriptor: function toClassDescriptor(e) {
+      var r = e.kind + "";
+      if ("class" !== r) throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "' + r + '"');
+      this.disallowProperty(e, "key", "A class descriptor"), this.disallowProperty(e, "placement", "A class descriptor"), this.disallowProperty(e, "descriptor", "A class descriptor"), this.disallowProperty(e, "initializer", "A class descriptor"), this.disallowProperty(e, "extras", "A class descriptor");
+      var t = _optionalCallableProperty(e, "finisher");
+      return {
+        elements: this.toElementDescriptors(e.elements),
+        finisher: t
+      };
+    },
+    runClassFinishers: function runClassFinishers(e, r) {
+      for (var t = 0; t < r.length; t++) {
+        var i = (0, r[t])(e);
+        if (void 0 !== i) {
+          if ("function" != typeof i) throw new TypeError("Finishers must return a constructor.");
+          e = i;
+        }
+      }
+      return e;
+    },
+    disallowProperty: function disallowProperty(e, r, t) {
+      if (void 0 !== e[r]) throw new TypeError(t + " can't have a ." + r + " property.");
+    }
+  };
+  return e;
+}
+function _createElementDescriptor(e) {
+  var r,
+    t = toPropertyKey(e.key);
+  "method" === e.kind ? r = {
+    value: e.value,
+    writable: !0,
+    configurable: !0,
+    enumerable: !1
+  } : "get" === e.kind ? r = {
+    get: e.value,
+    configurable: !0,
+    enumerable: !1
+  } : "set" === e.kind ? r = {
+    set: e.value,
+    configurable: !0,
+    enumerable: !1
+  } : "field" === e.kind && (r = {
+    configurable: !0,
+    writable: !0,
+    enumerable: !0
+  });
+  var i = {
+    kind: "field" === e.kind ? "field" : "method",
+    key: t,
+    placement: e["static"] ? "static" : "field" === e.kind ? "own" : "prototype",
+    descriptor: r
+  };
+  return e.decorators && (i.decorators = e.decorators), "field" === e.kind && (i.initializer = e.value), i;
+}
+function _coalesceGetterSetter(e, r) {
+  void 0 !== e.descriptor.get ? r.descriptor.get = e.descriptor.get : r.descriptor.set = e.descriptor.set;
+}
+function _coalesceClassElements(e) {
+  for (var r = [], isSameElement = function isSameElement(e) {
+      return "method" === e.kind && e.key === o.key && e.placement === o.placement;
+    }, t = 0; t < e.length; t++) {
+    var i,
+      o = e[t];
+    if ("method" === o.kind && (i = r.find(isSameElement))) {
+      if (_isDataDescriptor(o.descriptor) || _isDataDescriptor(i.descriptor)) {
+        if (_hasDecorators(o) || _hasDecorators(i)) throw new ReferenceError("Duplicated methods (" + o.key + ") can't be decorated.");
+        i.descriptor = o.descriptor;
+      } else {
+        if (_hasDecorators(o)) {
+          if (_hasDecorators(i)) throw new ReferenceError("Decorators can't be placed on different accessors with for the same property (" + o.key + ").");
+          i.decorators = o.decorators;
+        }
+        _coalesceGetterSetter(o, i);
+      }
+    } else r.push(o);
+  }
+  return r;
+}
+function _hasDecorators(e) {
+  return e.decorators && e.decorators.length;
+}
+function _isDataDescriptor(e) {
+  return void 0 !== e && !(void 0 === e.value && void 0 === e.writable);
+}
+function _optionalCallableProperty(e, r) {
+  var t = e[r];
+  if (void 0 !== t && "function" != typeof t) throw new TypeError("Expected '" + r + "' to be a function");
+  return t;
+}
+module.exports = _decorate, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/defaults.js b/node_modules/@babel/runtime/helpers/defaults.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfdbbb03a07bbc5d6472cf3cb2ab02c658964c3e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/defaults.js
@@ -0,0 +1,9 @@
+function _defaults(e, r) {
+  for (var t = Object.getOwnPropertyNames(r), o = 0; o < t.length; o++) {
+    var n = t[o],
+      a = Object.getOwnPropertyDescriptor(r, n);
+    a && a.configurable && void 0 === e[n] && Object.defineProperty(e, n, a);
+  }
+  return e;
+}
+module.exports = _defaults, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/defineAccessor.js b/node_modules/@babel/runtime/helpers/defineAccessor.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc065f01a850f4caec74ae3b2d9caf2891676610
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/defineAccessor.js
@@ -0,0 +1,8 @@
+function _defineAccessor(e, r, n, t) {
+  var c = {
+    configurable: !0,
+    enumerable: !0
+  };
+  return c[e] = t, Object.defineProperty(r, n, c);
+}
+module.exports = _defineAccessor, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js b/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab9f43c1bf1f27c141fda30ecc7866b3ce5dd8f7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js
@@ -0,0 +1,12 @@
+function _defineEnumerableProperties(e, r) {
+  for (var t in r) {
+    var n = r[t];
+    n.configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, t, n);
+  }
+  if (Object.getOwnPropertySymbols) for (var a = Object.getOwnPropertySymbols(r), b = 0; b < a.length; b++) {
+    var i = a[b];
+    (n = r[i]).configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, i, n);
+  }
+  return e;
+}
+module.exports = _defineEnumerableProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/defineProperty.js b/node_modules/@babel/runtime/helpers/defineProperty.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c2ff1e98a72515db77b82f0eefad568b72bf466
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/defineProperty.js
@@ -0,0 +1,10 @@
+var toPropertyKey = require("./toPropertyKey.js");
+function _defineProperty(e, r, t) {
+  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
+    value: t,
+    enumerable: !0,
+    configurable: !0,
+    writable: !0
+  }) : e[r] = t, e;
+}
+module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/dispose.js b/node_modules/@babel/runtime/helpers/dispose.js
new file mode 100644
index 0000000000000000000000000000000000000000..c20193ca297707987f1baa822f36b983698ec8b1
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/dispose.js
@@ -0,0 +1,28 @@
+function dispose_SuppressedError(r, e) {
+  return "undefined" != typeof SuppressedError ? dispose_SuppressedError = SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(r, e) {
+    this.suppressed = e, this.error = r, this.stack = Error().stack;
+  }, dispose_SuppressedError.prototype = Object.create(Error.prototype, {
+    constructor: {
+      value: dispose_SuppressedError,
+      writable: !0,
+      configurable: !0
+    }
+  })), new dispose_SuppressedError(r, e);
+}
+function _dispose(r, e, s) {
+  function next() {
+    for (; r.length > 0;) try {
+      var o = r.pop(),
+        p = o.d.call(o.v);
+      if (o.a) return Promise.resolve(p).then(next, err);
+    } catch (r) {
+      return err(r);
+    }
+    if (s) throw e;
+  }
+  function err(r) {
+    return e = s ? new dispose_SuppressedError(e, r) : r, s = !0, next();
+  }
+  return next();
+}
+module.exports = _dispose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/AwaitValue.js b/node_modules/@babel/runtime/helpers/esm/AwaitValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f210c9ce8116b6f82fcd9ab00e915b3809d9831
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/AwaitValue.js
@@ -0,0 +1,4 @@
+function _AwaitValue(t) {
+  this.wrapped = t;
+}
+export { _AwaitValue as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/OverloadYield.js b/node_modules/@babel/runtime/helpers/esm/OverloadYield.js
new file mode 100644
index 0000000000000000000000000000000000000000..d7753a6692fd20378b43e5dfad95d752a032df9e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/OverloadYield.js
@@ -0,0 +1,4 @@
+function _OverloadYield(e, d) {
+  this.v = e, this.k = d;
+}
+export { _OverloadYield as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js b/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f33483df447503a18c25eaec9ee39e9467d05b5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js
@@ -0,0 +1,9 @@
+function _applyDecoratedDescriptor(i, e, r, n, l) {
+  var a = {};
+  return Object.keys(n).forEach(function (i) {
+    a[i] = n[i];
+  }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) {
+    return n(i, e, r) || r;
+  }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
+}
+export { _applyDecoratedDescriptor as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs.js b/node_modules/@babel/runtime/helpers/esm/applyDecs.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b75dfd7a6bfeb9bc5d792fb9edafa2763b5ffc3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs.js
@@ -0,0 +1,236 @@
+import _typeof from "./typeof.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function old_createMetadataMethodsForProperty(e, t, a, r) {
+  return {
+    getMetadata: function getMetadata(o) {
+      old_assertNotFinished(r, "getMetadata"), old_assertMetadataKey(o);
+      var i = e[o];
+      if (void 0 !== i) if (1 === t) {
+        var n = i["public"];
+        if (void 0 !== n) return n[a];
+      } else if (2 === t) {
+        var l = i["private"];
+        if (void 0 !== l) return l.get(a);
+      } else if (Object.hasOwnProperty.call(i, "constructor")) return i.constructor;
+    },
+    setMetadata: function setMetadata(o, i) {
+      old_assertNotFinished(r, "setMetadata"), old_assertMetadataKey(o);
+      var n = e[o];
+      if (void 0 === n && (n = e[o] = {}), 1 === t) {
+        var l = n["public"];
+        void 0 === l && (l = n["public"] = {}), l[a] = i;
+      } else if (2 === t) {
+        var s = n.priv;
+        void 0 === s && (s = n["private"] = new Map()), s.set(a, i);
+      } else n.constructor = i;
+    }
+  };
+}
+function old_convertMetadataMapToFinal(e, t) {
+  var a = e[Symbol.metadata || Symbol["for"]("Symbol.metadata")],
+    r = Object.getOwnPropertySymbols(t);
+  if (0 !== r.length) {
+    for (var o = 0; o < r.length; o++) {
+      var i = r[o],
+        n = t[i],
+        l = a ? a[i] : null,
+        s = n["public"],
+        c = l ? l["public"] : null;
+      s && c && Object.setPrototypeOf(s, c);
+      var d = n["private"];
+      if (d) {
+        var u = Array.from(d.values()),
+          f = l ? l["private"] : null;
+        f && (u = u.concat(f)), n["private"] = u;
+      }
+      l && Object.setPrototypeOf(n, l);
+    }
+    a && Object.setPrototypeOf(t, a), e[Symbol.metadata || Symbol["for"]("Symbol.metadata")] = t;
+  }
+}
+function old_createAddInitializerMethod(e, t) {
+  return function (a) {
+    old_assertNotFinished(t, "addInitializer"), old_assertCallable(a, "An initializer"), e.push(a);
+  };
+}
+function old_memberDec(e, t, a, r, o, i, n, l, s) {
+  var c;
+  switch (i) {
+    case 1:
+      c = "accessor";
+      break;
+    case 2:
+      c = "method";
+      break;
+    case 3:
+      c = "getter";
+      break;
+    case 4:
+      c = "setter";
+      break;
+    default:
+      c = "field";
+  }
+  var d,
+    u,
+    f = {
+      kind: c,
+      name: l ? "#" + t : toPropertyKey(t),
+      isStatic: n,
+      isPrivate: l
+    },
+    p = {
+      v: !1
+    };
+  if (0 !== i && (f.addInitializer = old_createAddInitializerMethod(o, p)), l) {
+    d = 2, u = Symbol(t);
+    var v = {};
+    0 === i ? (v.get = a.get, v.set = a.set) : 2 === i ? v.get = function () {
+      return a.value;
+    } : (1 !== i && 3 !== i || (v.get = function () {
+      return a.get.call(this);
+    }), 1 !== i && 4 !== i || (v.set = function (e) {
+      a.set.call(this, e);
+    })), f.access = v;
+  } else d = 1, u = t;
+  try {
+    return e(s, Object.assign(f, old_createMetadataMethodsForProperty(r, d, u, p)));
+  } finally {
+    p.v = !0;
+  }
+}
+function old_assertNotFinished(e, t) {
+  if (e.v) throw Error("attempted to call " + t + " after decoration was finished");
+}
+function old_assertMetadataKey(e) {
+  if ("symbol" != _typeof(e)) throw new TypeError("Metadata keys must be symbols, received: " + e);
+}
+function old_assertCallable(e, t) {
+  if ("function" != typeof e) throw new TypeError(t + " must be a function");
+}
+function old_assertValidReturnValue(e, t) {
+  var a = _typeof(t);
+  if (1 === e) {
+    if ("object" !== a || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+    void 0 !== t.get && old_assertCallable(t.get, "accessor.get"), void 0 !== t.set && old_assertCallable(t.set, "accessor.set"), void 0 !== t.init && old_assertCallable(t.init, "accessor.init"), void 0 !== t.initializer && old_assertCallable(t.initializer, "accessor.initializer");
+  } else if ("function" !== a) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+}
+function old_getInit(e) {
+  var t;
+  return null == (t = e.init) && (t = e.initializer) && void 0 !== console && console.warn(".initializer has been renamed to .init as of March 2022"), t;
+}
+function old_applyMemberDec(e, t, a, r, o, i, n, l, s) {
+  var c,
+    d,
+    u,
+    f,
+    p,
+    v,
+    y,
+    h = a[0];
+  if (n ? (0 === o || 1 === o ? (c = {
+    get: a[3],
+    set: a[4]
+  }, u = "get") : 3 === o ? (c = {
+    get: a[3]
+  }, u = "get") : 4 === o ? (c = {
+    set: a[3]
+  }, u = "set") : c = {
+    value: a[3]
+  }, 0 !== o && (1 === o && setFunctionName(a[4], "#" + r, "set"), setFunctionName(a[3], "#" + r, u))) : 0 !== o && (c = Object.getOwnPropertyDescriptor(t, r)), 1 === o ? f = {
+    get: c.get,
+    set: c.set
+  } : 2 === o ? f = c.value : 3 === o ? f = c.get : 4 === o && (f = c.set), "function" == typeof h) void 0 !== (p = old_memberDec(h, r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? d = p : 1 === o ? (d = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+    get: v,
+    set: y
+  }) : f = p);else for (var m = h.length - 1; m >= 0; m--) {
+    var b;
+    void 0 !== (p = old_memberDec(h[m], r, c, l, s, o, i, n, f)) && (old_assertValidReturnValue(o, p), 0 === o ? b = p : 1 === o ? (b = old_getInit(p), v = p.get || f.get, y = p.set || f.set, f = {
+      get: v,
+      set: y
+    }) : f = p, void 0 !== b && (void 0 === d ? d = b : "function" == typeof d ? d = [d, b] : d.push(b)));
+  }
+  if (0 === o || 1 === o) {
+    if (void 0 === d) d = function d(e, t) {
+      return t;
+    };else if ("function" != typeof d) {
+      var g = d;
+      d = function d(e, t) {
+        for (var a = t, r = 0; r < g.length; r++) a = g[r].call(e, a);
+        return a;
+      };
+    } else {
+      var _ = d;
+      d = function d(e, t) {
+        return _.call(e, t);
+      };
+    }
+    e.push(d);
+  }
+  0 !== o && (1 === o ? (c.get = f.get, c.set = f.set) : 2 === o ? c.value = f : 3 === o ? c.get = f : 4 === o && (c.set = f), n ? 1 === o ? (e.push(function (e, t) {
+    return f.get.call(e, t);
+  }), e.push(function (e, t) {
+    return f.set.call(e, t);
+  })) : 2 === o ? e.push(f) : e.push(function (e, t) {
+    return f.call(e, t);
+  }) : Object.defineProperty(t, r, c));
+}
+function old_applyMemberDecs(e, t, a, r, o) {
+  for (var i, n, l = new Map(), s = new Map(), c = 0; c < o.length; c++) {
+    var d = o[c];
+    if (Array.isArray(d)) {
+      var u,
+        f,
+        p,
+        v = d[1],
+        y = d[2],
+        h = d.length > 3,
+        m = v >= 5;
+      if (m ? (u = t, f = r, 0 != (v -= 5) && (p = n = n || [])) : (u = t.prototype, f = a, 0 !== v && (p = i = i || [])), 0 !== v && !h) {
+        var b = m ? s : l,
+          g = b.get(y) || 0;
+        if (!0 === g || 3 === g && 4 !== v || 4 === g && 3 !== v) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + y);
+        !g && v > 2 ? b.set(y, v) : b.set(y, !0);
+      }
+      old_applyMemberDec(e, u, d, y, v, m, h, f, p);
+    }
+  }
+  old_pushInitializers(e, i), old_pushInitializers(e, n);
+}
+function old_pushInitializers(e, t) {
+  t && e.push(function (e) {
+    for (var a = 0; a < t.length; a++) t[a].call(e);
+    return e;
+  });
+}
+function old_applyClassDecs(e, t, a, r) {
+  if (r.length > 0) {
+    for (var o = [], i = t, n = t.name, l = r.length - 1; l >= 0; l--) {
+      var s = {
+        v: !1
+      };
+      try {
+        var c = Object.assign({
+            kind: "class",
+            name: n,
+            addInitializer: old_createAddInitializerMethod(o, s)
+          }, old_createMetadataMethodsForProperty(a, 0, n, s)),
+          d = r[l](i, c);
+      } finally {
+        s.v = !0;
+      }
+      void 0 !== d && (old_assertValidReturnValue(10, d), i = d);
+    }
+    e.push(i, function () {
+      for (var e = 0; e < o.length; e++) o[e].call(i);
+    });
+  }
+}
+function applyDecs(e, t, a) {
+  var r = [],
+    o = {},
+    i = {};
+  return old_applyMemberDecs(r, e, i, o, t), old_convertMetadataMapToFinal(e.prototype, i), old_applyClassDecs(r, e, o, a), old_convertMetadataMapToFinal(e, o), r;
+}
+export { applyDecs as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js b/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js
new file mode 100644
index 0000000000000000000000000000000000000000..bddb51d072d084e913659a71700eace25e4477b2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js
@@ -0,0 +1,184 @@
+import _typeof from "./typeof.js";
+function applyDecs2203Factory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function memberDec(e, t, r, a, n, i, s, o) {
+    var c;
+    switch (n) {
+      case 1:
+        c = "accessor";
+        break;
+      case 2:
+        c = "method";
+        break;
+      case 3:
+        c = "getter";
+        break;
+      case 4:
+        c = "setter";
+        break;
+      default:
+        c = "field";
+    }
+    var l,
+      u,
+      f = {
+        kind: c,
+        name: s ? "#" + t : t,
+        "static": i,
+        "private": s
+      },
+      p = {
+        v: !1
+      };
+    0 !== n && (f.addInitializer = createAddInitializerMethod(a, p)), 0 === n ? s ? (l = r.get, u = r.set) : (l = function l() {
+      return this[t];
+    }, u = function u(e) {
+      this[t] = e;
+    }) : 2 === n ? l = function l() {
+      return r.value;
+    } : (1 !== n && 3 !== n || (l = function l() {
+      return r.get.call(this);
+    }), 1 !== n && 4 !== n || (u = function u(e) {
+      r.set.call(this, e);
+    })), f.access = l && u ? {
+      get: l,
+      set: u
+    } : l ? {
+      get: l
+    } : {
+      set: u
+    };
+    try {
+      return e(o, f);
+    } finally {
+      p.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function applyMemberDec(e, t, r, a, n, i, s, o) {
+    var c,
+      l,
+      u,
+      f,
+      p,
+      d,
+      h = r[0];
+    if (s ? c = 0 === n || 1 === n ? {
+      get: r[3],
+      set: r[4]
+    } : 3 === n ? {
+      get: r[3]
+    } : 4 === n ? {
+      set: r[3]
+    } : {
+      value: r[3]
+    } : 0 !== n && (c = Object.getOwnPropertyDescriptor(t, a)), 1 === n ? u = {
+      get: c.get,
+      set: c.set
+    } : 2 === n ? u = c.value : 3 === n ? u = c.get : 4 === n && (u = c.set), "function" == typeof h) void 0 !== (f = memberDec(h, a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? l = f : 1 === n ? (l = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+      get: p,
+      set: d
+    }) : u = f);else for (var v = h.length - 1; v >= 0; v--) {
+      var g;
+      void 0 !== (f = memberDec(h[v], a, c, o, n, i, s, u)) && (assertValidReturnValue(n, f), 0 === n ? g = f : 1 === n ? (g = f.init, p = f.get || u.get, d = f.set || u.set, u = {
+        get: p,
+        set: d
+      }) : u = f, void 0 !== g && (void 0 === l ? l = g : "function" == typeof l ? l = [l, g] : l.push(g)));
+    }
+    if (0 === n || 1 === n) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var y = l;
+        l = function l(e, t) {
+          for (var r = t, a = 0; a < y.length; a++) r = y[a].call(e, r);
+          return r;
+        };
+      } else {
+        var m = l;
+        l = function l(e, t) {
+          return m.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== n && (1 === n ? (c.get = u.get, c.set = u.set) : 2 === n ? c.value = u : 3 === n ? c.get = u : 4 === n && (c.set = u), s ? 1 === n ? (e.push(function (e, t) {
+      return u.get.call(e, t);
+    }), e.push(function (e, t) {
+      return u.set.call(e, t);
+    })) : 2 === n ? e.push(u) : e.push(function (e, t) {
+      return u.call(e, t);
+    }) : Object.defineProperty(t, a, c));
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r) {
+    var a = [];
+    return function (e, t, r) {
+      for (var a, n, i = new Map(), s = new Map(), o = 0; o < r.length; o++) {
+        var c = r[o];
+        if (Array.isArray(c)) {
+          var l,
+            u,
+            f = c[1],
+            p = c[2],
+            d = c.length > 3,
+            h = f >= 5;
+          if (h ? (l = t, 0 != (f -= 5) && (u = n = n || [])) : (l = t.prototype, 0 !== f && (u = a = a || [])), 0 !== f && !d) {
+            var v = h ? s : i,
+              g = v.get(p) || 0;
+            if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+            !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+          }
+          applyMemberDec(e, l, c, p, f, h, d, u);
+        }
+      }
+      pushInitializers(e, a), pushInitializers(e, n);
+    }(a, e, t), function (e, t, r) {
+      if (r.length > 0) {
+        for (var a = [], n = t, i = t.name, s = r.length - 1; s >= 0; s--) {
+          var o = {
+            v: !1
+          };
+          try {
+            var c = r[s](n, {
+              kind: "class",
+              name: i,
+              addInitializer: createAddInitializerMethod(a, o)
+            });
+          } finally {
+            o.v = !0;
+          }
+          void 0 !== c && (assertValidReturnValue(10, c), n = c);
+        }
+        e.push(n, function () {
+          for (var e = 0; e < a.length; e++) a[e].call(n);
+        });
+      }
+    }(a, e, r), a;
+  };
+}
+var applyDecs2203Impl;
+function applyDecs2203(e, t, r) {
+  return (applyDecs2203Impl = applyDecs2203Impl || applyDecs2203Factory())(e, t, r);
+}
+export { applyDecs2203 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js b/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js
new file mode 100644
index 0000000000000000000000000000000000000000..3944bf428504e025e0eeaf47df3256479a2a2147
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js
@@ -0,0 +1,191 @@
+import _typeof from "./typeof.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2203RFactory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function memberDec(e, t, r, n, a, i, o, s) {
+    var c;
+    switch (a) {
+      case 1:
+        c = "accessor";
+        break;
+      case 2:
+        c = "method";
+        break;
+      case 3:
+        c = "getter";
+        break;
+      case 4:
+        c = "setter";
+        break;
+      default:
+        c = "field";
+    }
+    var l,
+      u,
+      f = {
+        kind: c,
+        name: o ? "#" + t : toPropertyKey(t),
+        "static": i,
+        "private": o
+      },
+      p = {
+        v: !1
+      };
+    0 !== a && (f.addInitializer = createAddInitializerMethod(n, p)), 0 === a ? o ? (l = r.get, u = r.set) : (l = function l() {
+      return this[t];
+    }, u = function u(e) {
+      this[t] = e;
+    }) : 2 === a ? l = function l() {
+      return r.value;
+    } : (1 !== a && 3 !== a || (l = function l() {
+      return r.get.call(this);
+    }), 1 !== a && 4 !== a || (u = function u(e) {
+      r.set.call(this, e);
+    })), f.access = l && u ? {
+      get: l,
+      set: u
+    } : l ? {
+      get: l
+    } : {
+      set: u
+    };
+    try {
+      return e(s, f);
+    } finally {
+      p.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function applyMemberDec(e, t, r, n, a, i, o, s) {
+    var c,
+      l,
+      u,
+      f,
+      p,
+      d,
+      h,
+      v = r[0];
+    if (o ? (0 === a || 1 === a ? (c = {
+      get: r[3],
+      set: r[4]
+    }, u = "get") : 3 === a ? (c = {
+      get: r[3]
+    }, u = "get") : 4 === a ? (c = {
+      set: r[3]
+    }, u = "set") : c = {
+      value: r[3]
+    }, 0 !== a && (1 === a && setFunctionName(r[4], "#" + n, "set"), setFunctionName(r[3], "#" + n, u))) : 0 !== a && (c = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? f = {
+      get: c.get,
+      set: c.set
+    } : 2 === a ? f = c.value : 3 === a ? f = c.get : 4 === a && (f = c.set), "function" == typeof v) void 0 !== (p = memberDec(v, n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? l = p : 1 === a ? (l = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+      get: d,
+      set: h
+    }) : f = p);else for (var g = v.length - 1; g >= 0; g--) {
+      var y;
+      void 0 !== (p = memberDec(v[g], n, c, s, a, i, o, f)) && (assertValidReturnValue(a, p), 0 === a ? y = p : 1 === a ? (y = p.init, d = p.get || f.get, h = p.set || f.set, f = {
+        get: d,
+        set: h
+      }) : f = p, void 0 !== y && (void 0 === l ? l = y : "function" == typeof l ? l = [l, y] : l.push(y)));
+    }
+    if (0 === a || 1 === a) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var m = l;
+        l = function l(e, t) {
+          for (var r = t, n = 0; n < m.length; n++) r = m[n].call(e, r);
+          return r;
+        };
+      } else {
+        var b = l;
+        l = function l(e, t) {
+          return b.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== a && (1 === a ? (c.get = f.get, c.set = f.set) : 2 === a ? c.value = f : 3 === a ? c.get = f : 4 === a && (c.set = f), o ? 1 === a ? (e.push(function (e, t) {
+      return f.get.call(e, t);
+    }), e.push(function (e, t) {
+      return f.set.call(e, t);
+    })) : 2 === a ? e.push(f) : e.push(function (e, t) {
+      return f.call(e, t);
+    }) : Object.defineProperty(t, n, c));
+  }
+  function applyMemberDecs(e, t) {
+    for (var r, n, a = [], i = new Map(), o = new Map(), s = 0; s < t.length; s++) {
+      var c = t[s];
+      if (Array.isArray(c)) {
+        var l,
+          u,
+          f = c[1],
+          p = c[2],
+          d = c.length > 3,
+          h = f >= 5;
+        if (h ? (l = e, 0 != (f -= 5) && (u = n = n || [])) : (l = e.prototype, 0 !== f && (u = r = r || [])), 0 !== f && !d) {
+          var v = h ? o : i,
+            g = v.get(p) || 0;
+          if (!0 === g || 3 === g && 4 !== f || 4 === g && 3 !== f) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + p);
+          !g && f > 2 ? v.set(p, f) : v.set(p, !0);
+        }
+        applyMemberDec(a, l, c, p, f, h, d, u);
+      }
+    }
+    return pushInitializers(a, r), pushInitializers(a, n), a;
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r) {
+    return {
+      e: applyMemberDecs(e, t),
+      get c() {
+        return function (e, t) {
+          if (t.length > 0) {
+            for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+              var o = {
+                v: !1
+              };
+              try {
+                var s = t[i](n, {
+                  kind: "class",
+                  name: a,
+                  addInitializer: createAddInitializerMethod(r, o)
+                });
+              } finally {
+                o.v = !0;
+              }
+              void 0 !== s && (assertValidReturnValue(10, s), n = s);
+            }
+            return [n, function () {
+              for (var e = 0; e < r.length; e++) r[e].call(n);
+            }];
+          }
+        }(e, r);
+      }
+    };
+  };
+}
+function applyDecs2203R(e, t, r) {
+  return (applyDecs2203R = applyDecs2203RFactory())(e, t, r);
+}
+export { applyDecs2203R as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js b/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb4fbe6a9b642d422cca27cc22e6d797ef43a21f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js
@@ -0,0 +1,222 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2301Factory() {
+  function createAddInitializerMethod(e, t) {
+    return function (r) {
+      !function (e, t) {
+        if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+      }(t), assertCallable(r, "An initializer"), e.push(r);
+    };
+  }
+  function assertInstanceIfPrivate(e, t) {
+    if (!e(t)) throw new TypeError("Attempted to access private element on non-instance");
+  }
+  function memberDec(e, t, r, n, a, i, s, o, c) {
+    var u;
+    switch (a) {
+      case 1:
+        u = "accessor";
+        break;
+      case 2:
+        u = "method";
+        break;
+      case 3:
+        u = "getter";
+        break;
+      case 4:
+        u = "setter";
+        break;
+      default:
+        u = "field";
+    }
+    var l,
+      f,
+      p = {
+        kind: u,
+        name: s ? "#" + t : toPropertyKey(t),
+        "static": i,
+        "private": s
+      },
+      d = {
+        v: !1
+      };
+    if (0 !== a && (p.addInitializer = createAddInitializerMethod(n, d)), s || 0 !== a && 2 !== a) {
+      if (2 === a) l = function l(e) {
+        return assertInstanceIfPrivate(c, e), r.value;
+      };else {
+        var h = 0 === a || 1 === a;
+        (h || 3 === a) && (l = s ? function (e) {
+          return assertInstanceIfPrivate(c, e), r.get.call(e);
+        } : function (e) {
+          return r.get.call(e);
+        }), (h || 4 === a) && (f = s ? function (e, t) {
+          assertInstanceIfPrivate(c, e), r.set.call(e, t);
+        } : function (e, t) {
+          r.set.call(e, t);
+        });
+      }
+    } else l = function l(e) {
+      return e[t];
+    }, 0 === a && (f = function f(e, r) {
+      e[t] = r;
+    });
+    var v = s ? c.bind() : function (e) {
+      return t in e;
+    };
+    p.access = l && f ? {
+      get: l,
+      set: f,
+      has: v
+    } : l ? {
+      get: l,
+      has: v
+    } : {
+      set: f,
+      has: v
+    };
+    try {
+      return e(o, p);
+    } finally {
+      d.v = !0;
+    }
+  }
+  function assertCallable(e, t) {
+    if ("function" != typeof e) throw new TypeError(t + " must be a function");
+  }
+  function assertValidReturnValue(e, t) {
+    var r = _typeof(t);
+    if (1 === e) {
+      if ("object" !== r || null === t) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+      void 0 !== t.get && assertCallable(t.get, "accessor.get"), void 0 !== t.set && assertCallable(t.set, "accessor.set"), void 0 !== t.init && assertCallable(t.init, "accessor.init");
+    } else if ("function" !== r) throw new TypeError((0 === e ? "field" : 10 === e ? "class" : "method") + " decorators must return a function or void 0");
+  }
+  function curryThis2(e) {
+    return function (t) {
+      e(this, t);
+    };
+  }
+  function applyMemberDec(e, t, r, n, a, i, s, o, c) {
+    var u,
+      l,
+      f,
+      p,
+      d,
+      h,
+      v,
+      y,
+      g = r[0];
+    if (s ? (0 === a || 1 === a ? (u = {
+      get: (d = r[3], function () {
+        return d(this);
+      }),
+      set: curryThis2(r[4])
+    }, f = "get") : 3 === a ? (u = {
+      get: r[3]
+    }, f = "get") : 4 === a ? (u = {
+      set: r[3]
+    }, f = "set") : u = {
+      value: r[3]
+    }, 0 !== a && (1 === a && setFunctionName(u.set, "#" + n, "set"), setFunctionName(u[f || "value"], "#" + n, f))) : 0 !== a && (u = Object.getOwnPropertyDescriptor(t, n)), 1 === a ? p = {
+      get: u.get,
+      set: u.set
+    } : 2 === a ? p = u.value : 3 === a ? p = u.get : 4 === a && (p = u.set), "function" == typeof g) void 0 !== (h = memberDec(g, n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? l = h : 1 === a ? (l = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+      get: v,
+      set: y
+    }) : p = h);else for (var m = g.length - 1; m >= 0; m--) {
+      var b;
+      void 0 !== (h = memberDec(g[m], n, u, o, a, i, s, p, c)) && (assertValidReturnValue(a, h), 0 === a ? b = h : 1 === a ? (b = h.init, v = h.get || p.get, y = h.set || p.set, p = {
+        get: v,
+        set: y
+      }) : p = h, void 0 !== b && (void 0 === l ? l = b : "function" == typeof l ? l = [l, b] : l.push(b)));
+    }
+    if (0 === a || 1 === a) {
+      if (void 0 === l) l = function l(e, t) {
+        return t;
+      };else if ("function" != typeof l) {
+        var I = l;
+        l = function l(e, t) {
+          for (var r = t, n = 0; n < I.length; n++) r = I[n].call(e, r);
+          return r;
+        };
+      } else {
+        var w = l;
+        l = function l(e, t) {
+          return w.call(e, t);
+        };
+      }
+      e.push(l);
+    }
+    0 !== a && (1 === a ? (u.get = p.get, u.set = p.set) : 2 === a ? u.value = p : 3 === a ? u.get = p : 4 === a && (u.set = p), s ? 1 === a ? (e.push(function (e, t) {
+      return p.get.call(e, t);
+    }), e.push(function (e, t) {
+      return p.set.call(e, t);
+    })) : 2 === a ? e.push(p) : e.push(function (e, t) {
+      return p.call(e, t);
+    }) : Object.defineProperty(t, n, u));
+  }
+  function applyMemberDecs(e, t, r) {
+    for (var n, a, i, s = [], o = new Map(), c = new Map(), u = 0; u < t.length; u++) {
+      var l = t[u];
+      if (Array.isArray(l)) {
+        var f,
+          p,
+          d = l[1],
+          h = l[2],
+          v = l.length > 3,
+          y = d >= 5,
+          g = r;
+        if (y ? (f = e, 0 != (d -= 5) && (p = a = a || []), v && !i && (i = function i(t) {
+          return checkInRHS(t) === e;
+        }), g = i) : (f = e.prototype, 0 !== d && (p = n = n || [])), 0 !== d && !v) {
+          var m = y ? c : o,
+            b = m.get(h) || 0;
+          if (!0 === b || 3 === b && 4 !== d || 4 === b && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+          !b && d > 2 ? m.set(h, d) : m.set(h, !0);
+        }
+        applyMemberDec(s, f, l, h, d, y, v, p, g);
+      }
+    }
+    return pushInitializers(s, n), pushInitializers(s, a), s;
+  }
+  function pushInitializers(e, t) {
+    t && e.push(function (e) {
+      for (var r = 0; r < t.length; r++) t[r].call(e);
+      return e;
+    });
+  }
+  return function (e, t, r, n) {
+    return {
+      e: applyMemberDecs(e, t, n),
+      get c() {
+        return function (e, t) {
+          if (t.length > 0) {
+            for (var r = [], n = e, a = e.name, i = t.length - 1; i >= 0; i--) {
+              var s = {
+                v: !1
+              };
+              try {
+                var o = t[i](n, {
+                  kind: "class",
+                  name: a,
+                  addInitializer: createAddInitializerMethod(r, s)
+                });
+              } finally {
+                s.v = !0;
+              }
+              void 0 !== o && (assertValidReturnValue(10, o), n = o);
+            }
+            return [n, function () {
+              for (var e = 0; e < r.length; e++) r[e].call(n);
+            }];
+          }
+        }(e, r);
+      }
+    };
+  };
+}
+function applyDecs2301(e, t, r, n) {
+  return (applyDecs2301 = applyDecs2301Factory())(e, t, r, n);
+}
+export { applyDecs2301 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js b/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js
new file mode 100644
index 0000000000000000000000000000000000000000..a11b2b90c15b47a633782d266eb25b50ee7435f5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js
@@ -0,0 +1,133 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2305(e, t, r, n, o, a) {
+  function i(e, t, r) {
+    return function (n, o) {
+      return r && r(n), e[t].call(n, o);
+    };
+  }
+  function c(e, t) {
+    for (var r = 0; r < e.length; r++) e[r].call(t);
+    return t;
+  }
+  function s(e, t, r, n) {
+    if ("function" != typeof e && (n || void 0 !== e)) throw new TypeError(t + " must " + (r || "be") + " a function" + (n ? "" : " or undefined"));
+    return e;
+  }
+  function applyDec(e, t, r, n, o, a, c, u, l, f, p, d, h) {
+    function m(e) {
+      if (!h(e)) throw new TypeError("Attempted to access private element on non-instance");
+    }
+    var y,
+      v = t[0],
+      g = t[3],
+      b = !u;
+    if (!b) {
+      r || Array.isArray(v) || (v = [v]);
+      var w = {},
+        S = [],
+        A = 3 === o ? "get" : 4 === o || d ? "set" : "value";
+      f ? (p || d ? w = {
+        get: setFunctionName(function () {
+          return g(this);
+        }, n, "get"),
+        set: function set(e) {
+          t[4](this, e);
+        }
+      } : w[A] = g, p || setFunctionName(w[A], n, 2 === o ? "" : A)) : p || (w = Object.getOwnPropertyDescriptor(e, n));
+    }
+    for (var P = e, j = v.length - 1; j >= 0; j -= r ? 2 : 1) {
+      var D = v[j],
+        E = r ? v[j - 1] : void 0,
+        I = {},
+        O = {
+          kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+          name: n,
+          metadata: a,
+          addInitializer: function (e, t) {
+            if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
+            s(t, "An initializer", "be", !0), c.push(t);
+          }.bind(null, I)
+        };
+      try {
+        if (b) (y = s(D.call(E, P, O), "class decorators", "return")) && (P = y);else {
+          var k, F;
+          O["static"] = l, O["private"] = f, f ? 2 === o ? k = function k(e) {
+            return m(e), w.value;
+          } : (o < 4 && (k = i(w, "get", m)), 3 !== o && (F = i(w, "set", m))) : (k = function k(e) {
+            return e[n];
+          }, (o < 2 || 4 === o) && (F = function F(e, t) {
+            e[n] = t;
+          }));
+          var N = O.access = {
+            has: f ? h.bind() : function (e) {
+              return n in e;
+            }
+          };
+          if (k && (N.get = k), F && (N.set = F), P = D.call(E, d ? {
+            get: w.get,
+            set: w.set
+          } : w[A], O), d) {
+            if ("object" == _typeof(P) && P) (y = s(P.get, "accessor.get")) && (w.get = y), (y = s(P.set, "accessor.set")) && (w.set = y), (y = s(P.init, "accessor.init")) && S.push(y);else if (void 0 !== P) throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+          } else s(P, (p ? "field" : "method") + " decorators", "return") && (p ? S.push(P) : w[A] = P);
+        }
+      } finally {
+        I.v = !0;
+      }
+    }
+    return (p || d) && u.push(function (e, t) {
+      for (var r = S.length - 1; r >= 0; r--) t = S[r].call(e, t);
+      return t;
+    }), p || b || (f ? d ? u.push(i(w, "get"), i(w, "set")) : u.push(2 === o ? w[A] : i.call.bind(w[A])) : Object.defineProperty(e, n, w)), P;
+  }
+  function u(e, t) {
+    return Object.defineProperty(e, Symbol.metadata || Symbol["for"]("Symbol.metadata"), {
+      configurable: !0,
+      enumerable: !0,
+      value: t
+    });
+  }
+  if (arguments.length >= 6) var l = a[Symbol.metadata || Symbol["for"]("Symbol.metadata")];
+  var f = Object.create(null == l ? null : l),
+    p = function (e, t, r, n) {
+      var o,
+        a,
+        i = [],
+        s = function s(t) {
+          return checkInRHS(t) === e;
+        },
+        u = new Map();
+      function l(e) {
+        e && i.push(c.bind(null, e));
+      }
+      for (var f = 0; f < t.length; f++) {
+        var p = t[f];
+        if (Array.isArray(p)) {
+          var d = p[1],
+            h = p[2],
+            m = p.length > 3,
+            y = 16 & d,
+            v = !!(8 & d),
+            g = 0 == (d &= 7),
+            b = h + "/" + v;
+          if (!g && !m) {
+            var w = u.get(b);
+            if (!0 === w || 3 === w && 4 !== d || 4 === w && 3 !== d) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
+            u.set(b, !(d > 2) || d);
+          }
+          applyDec(v ? e : e.prototype, p, y, m ? "#" + h : toPropertyKey(h), d, n, v ? a = a || [] : o = o || [], i, v, m, g, 1 === d, v && m ? s : r);
+        }
+      }
+      return l(o), l(a), i;
+    }(e, t, o, f);
+  return r.length || u(e, f), {
+    e: p,
+    get c() {
+      var t = [];
+      return r.length && [u(applyDec(e, [r], n, e.name, 5, f, t), f), c.bind(null, t, e)];
+    }
+  };
+}
+export { applyDecs2305 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js b/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js
new file mode 100644
index 0000000000000000000000000000000000000000..41b2c4848f177a0c741303ddc5f222a65c067dc2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js
@@ -0,0 +1,124 @@
+import _typeof from "./typeof.js";
+import checkInRHS from "./checkInRHS.js";
+import setFunctionName from "./setFunctionName.js";
+import toPropertyKey from "./toPropertyKey.js";
+function applyDecs2311(e, t, n, r, o, i) {
+  var a,
+    c,
+    u,
+    s,
+    f,
+    l,
+    p,
+    d = Symbol.metadata || Symbol["for"]("Symbol.metadata"),
+    m = Object.defineProperty,
+    h = Object.create,
+    y = [h(null), h(null)],
+    v = t.length;
+  function g(t, n, r) {
+    return function (o, i) {
+      n && (i = o, o = e);
+      for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []);
+      return r ? i : o;
+    };
+  }
+  function b(e, t, n, r) {
+    if ("function" != typeof e && (r || void 0 !== e)) throw new TypeError(t + " must " + (n || "be") + " a function" + (r ? "" : " or undefined"));
+    return e;
+  }
+  function applyDec(e, t, n, r, o, i, u, s, f, l, p) {
+    function d(e) {
+      if (!p(e)) throw new TypeError("Attempted to access private element on non-instance");
+    }
+    var h = [].concat(t[0]),
+      v = t[3],
+      w = !u,
+      D = 1 === o,
+      S = 3 === o,
+      j = 4 === o,
+      E = 2 === o;
+    function I(t, n, r) {
+      return function (o, i) {
+        return n && (i = o, o = e), r && r(o), P[t].call(o, i);
+      };
+    }
+    if (!w) {
+      var P = {},
+        k = [],
+        F = S ? "get" : j || D ? "set" : "value";
+      if (f ? (l || D ? P = {
+        get: setFunctionName(function () {
+          return v(this);
+        }, r, "get"),
+        set: function set(e) {
+          t[4](this, e);
+        }
+      } : P[F] = v, l || setFunctionName(P[F], r, E ? "" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) {
+        if ((c = y[+s][r]) && 7 != (c ^ o)) throw Error("Decorating two elements with the same name (" + P[F].name + ") is not supported yet");
+        y[+s][r] = o < 3 ? 1 : o;
+      }
+    }
+    for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) {
+      var T = b(h[O], "A decorator", "be", !0),
+        z = n ? h[O - 1] : void 0,
+        A = {},
+        H = {
+          kind: ["field", "accessor", "method", "getter", "setter", "class"][o],
+          name: r,
+          metadata: a,
+          addInitializer: function (e, t) {
+            if (e.v) throw new TypeError("attempted to call addInitializer after decoration was finished");
+            b(t, "An initializer", "be", !0), i.push(t);
+          }.bind(null, A)
+        };
+      if (w) c = T.call(z, N, H), A.v = 1, b(c, "class decorators", "return") && (N = c);else if (H["static"] = s, H["private"] = f, c = H.access = {
+        has: f ? p.bind() : function (e) {
+          return r in e;
+        }
+      }, j || (c.get = f ? E ? function (e) {
+        return d(e), P.value;
+      } : I("get", 0, d) : function (e) {
+        return e[r];
+      }), E || S || (c.set = f ? I("set", 0, d) : function (e, t) {
+        e[r] = t;
+      }), N = T.call(z, D ? {
+        get: P.get,
+        set: P.set
+      } : P[F], H), A.v = 1, D) {
+        if ("object" == _typeof(N) && N) (c = b(N.get, "accessor.get")) && (P.get = c), (c = b(N.set, "accessor.set")) && (P.set = c), (c = b(N.init, "accessor.init")) && k.unshift(c);else if (void 0 !== N) throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined");
+      } else b(N, (l ? "field" : "method") + " decorators", "return") && (l ? k.unshift(N) : P[F] = N);
+    }
+    return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I("get", s), I("set", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N;
+  }
+  function w(e) {
+    return m(e, d, {
+      configurable: !0,
+      enumerable: !0,
+      value: a
+    });
+  }
+  return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function l(e) {
+    e && f.push(g(e));
+  }, p = function p(t, r) {
+    for (var i = 0; i < n.length; i++) {
+      var a = n[i],
+        c = a[1],
+        l = 7 & c;
+      if ((8 & c) == t && !l == r) {
+        var p = a[2],
+          d = !!a[3],
+          m = 16 & c;
+        applyDec(t ? e : e.prototype, a, m, d ? "#" + p : toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) {
+          return checkInRHS(t) === e;
+        } : o);
+      }
+    }
+  }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), {
+    e: c,
+    get c() {
+      var n = [];
+      return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)];
+    }
+  };
+}
+export { applyDecs2311 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js b/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..9ace77240f113e563a5981101b1ee755e57b40ad
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js
@@ -0,0 +1,6 @@
+function _arrayLikeToArray(r, a) {
+  (null == a || a > r.length) && (a = r.length);
+  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
+  return n;
+}
+export { _arrayLikeToArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js b/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
new file mode 100644
index 0000000000000000000000000000000000000000..99fa715408e037f9d406c0a8329c88537b96dcd5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
@@ -0,0 +1,4 @@
+function _arrayWithHoles(r) {
+  if (Array.isArray(r)) return r;
+}
+export { _arrayWithHoles as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js b/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ce6f21462eddcd3a6cc5c00d3c14606339cfa54
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
@@ -0,0 +1,5 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _arrayWithoutHoles(r) {
+  if (Array.isArray(r)) return arrayLikeToArray(r);
+}
+export { _arrayWithoutHoles as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js b/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae7b712606d7ffadba8e483fa5453847ad960294
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js
@@ -0,0 +1,5 @@
+function _assertClassBrand(e, t, n) {
+  if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
+  throw new TypeError("Private element is not present on this object");
+}
+export { _assertClassBrand as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js b/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
new file mode 100644
index 0000000000000000000000000000000000000000..4a41bde6268a764057eaa9947897ef516e4c7423
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
@@ -0,0 +1,5 @@
+function _assertThisInitialized(e) {
+  if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+  return e;
+}
+export { _assertThisInitialized as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js b/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0266897d53faaf9191c8c0472e5c0118af6ff68
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js
@@ -0,0 +1,24 @@
+import OverloadYield from "./OverloadYield.js";
+function _asyncGeneratorDelegate(t) {
+  var e = {},
+    n = !1;
+  function pump(e, r) {
+    return n = !0, r = new Promise(function (n) {
+      n(t[e](r));
+    }), {
+      done: !1,
+      value: new OverloadYield(r, 1)
+    };
+  }
+  return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () {
+    return this;
+  }, e.next = function (t) {
+    return n ? (n = !1, t) : pump("next", t);
+  }, "function" == typeof t["throw"] && (e["throw"] = function (t) {
+    if (n) throw n = !1, t;
+    return pump("throw", t);
+  }), "function" == typeof t["return"] && (e["return"] = function (t) {
+    return n ? (n = !1, t) : pump("return", t);
+  }), e;
+}
+export { _asyncGeneratorDelegate as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/asyncIterator.js b/node_modules/@babel/runtime/helpers/esm/asyncIterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ed00b796f497a14b96f1b9799d06e7f698b8ecf
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/asyncIterator.js
@@ -0,0 +1,45 @@
+function _asyncIterator(r) {
+  var n,
+    t,
+    o,
+    e = 2;
+  for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) {
+    if (t && null != (n = r[t])) return n.call(r);
+    if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r));
+    t = "@@asyncIterator", o = "@@iterator";
+  }
+  throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(r) {
+  function AsyncFromSyncIteratorContinuation(r) {
+    if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+    var n = r.done;
+    return Promise.resolve(r.value).then(function (r) {
+      return {
+        value: r,
+        done: n
+      };
+    });
+  }
+  return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) {
+    this.s = r, this.n = r.next;
+  }, AsyncFromSyncIterator.prototype = {
+    s: null,
+    n: null,
+    next: function next() {
+      return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+    },
+    "return": function _return(r) {
+      var n = this.s["return"];
+      return void 0 === n ? Promise.resolve({
+        value: r,
+        done: !0
+      }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+    },
+    "throw": function _throw(r) {
+      var n = this.s["return"];
+      return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments));
+    }
+  }, new AsyncFromSyncIterator(r);
+}
+export { _asyncIterator as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js b/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..00f29b1f662d5ae6b494d59d114e8fb785bb7feb
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
@@ -0,0 +1,26 @@
+function asyncGeneratorStep(n, t, e, r, o, a, c) {
+  try {
+    var i = n[a](c),
+      u = i.value;
+  } catch (n) {
+    return void e(n);
+  }
+  i.done ? t(u) : Promise.resolve(u).then(r, o);
+}
+function _asyncToGenerator(n) {
+  return function () {
+    var t = this,
+      e = arguments;
+    return new Promise(function (r, o) {
+      var a = n.apply(t, e);
+      function _next(n) {
+        asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
+      }
+      function _throw(n) {
+        asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
+      }
+      _next(void 0);
+    });
+  };
+}
+export { _asyncToGenerator as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js b/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..097c88c98e555b32c195ec7e87dc0ad93dc70871
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js
@@ -0,0 +1,5 @@
+import OverloadYield from "./OverloadYield.js";
+function _awaitAsyncGenerator(e) {
+  return new OverloadYield(e, 0);
+}
+export { _awaitAsyncGenerator as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/callSuper.js b/node_modules/@babel/runtime/helpers/esm/callSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d17a4ee51bd4a93eb4b4f7f5dff60b2040a8deb
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/callSuper.js
@@ -0,0 +1,7 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import possibleConstructorReturn from "./possibleConstructorReturn.js";
+function _callSuper(t, o, e) {
+  return o = getPrototypeOf(o), possibleConstructorReturn(t, isNativeReflectConstruct() ? Reflect.construct(o, e || [], getPrototypeOf(t).constructor) : o.apply(t, e));
+}
+export { _callSuper as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/checkInRHS.js b/node_modules/@babel/runtime/helpers/esm/checkInRHS.js
new file mode 100644
index 0000000000000000000000000000000000000000..12f59b4cae30ebc369045c6992f61d3835bea28e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/checkInRHS.js
@@ -0,0 +1,6 @@
+import _typeof from "./typeof.js";
+function _checkInRHS(e) {
+  if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (null !== e ? _typeof(e) : "null"));
+  return e;
+}
+export { _checkInRHS as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js b/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9e6b3b46cf7dca490eb934078e9739a87cb7c1e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js
@@ -0,0 +1,4 @@
+function _checkPrivateRedeclaration(e, t) {
+  if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object");
+}
+export { _checkPrivateRedeclaration as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..56234195ca486e5953702b13a63ba74dc72d6781
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js
@@ -0,0 +1,10 @@
+function _classApplyDescriptorDestructureSet(e, t) {
+  if (t.set) return "__destrObj" in t || (t.__destrObj = {
+    set value(r) {
+      t.set.call(e, r);
+    }
+  }), t.__destrObj;
+  if (!t.writable) throw new TypeError("attempted to set read only private field");
+  return t;
+}
+export { _classApplyDescriptorDestructureSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9259d3e305cfdf92d5c7cf3c769f716990d5264
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js
@@ -0,0 +1,4 @@
+function _classApplyDescriptorGet(e, t) {
+  return t.get ? t.get.call(e) : t.value;
+}
+export { _classApplyDescriptorGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9c4fbd2c59c838a6b000f5679632a783038b785
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js
@@ -0,0 +1,7 @@
+function _classApplyDescriptorSet(e, t, l) {
+  if (t.set) t.set.call(e, l);else {
+    if (!t.writable) throw new TypeError("attempted to set read only private field");
+    t.value = l;
+  }
+}
+export { _classApplyDescriptorSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classCallCheck.js b/node_modules/@babel/runtime/helpers/esm/classCallCheck.js
new file mode 100644
index 0000000000000000000000000000000000000000..bf97219365660019bba20ef1c79b9765a5db5fb7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classCallCheck.js
@@ -0,0 +1,4 @@
+function _classCallCheck(a, n) {
+  if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
+}
+export { _classCallCheck as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js b/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js
new file mode 100644
index 0000000000000000000000000000000000000000..366ed05e4416b71a405e539d9d1f1c69230f431f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classCheckPrivateStaticAccess(s, a, r) {
+  return assertClassBrand(a, s, r);
+}
+export { _classCheckPrivateStaticAccess as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js b/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..844be91a8f26594ec85fabc80db4e0cea3b1767d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js
@@ -0,0 +1,4 @@
+function _classCheckPrivateStaticFieldDescriptor(t, e) {
+  if (void 0 === t) throw new TypeError("attempted to " + e + " private static field before its declaration");
+}
+export { _classCheckPrivateStaticFieldDescriptor as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js b/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..652689d133051829bb67a4b3bd2731e258ad4448
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js
@@ -0,0 +1,5 @@
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classExtractFieldDescriptor(e, t) {
+  return classPrivateFieldGet2(t, e);
+}
+export { _classExtractFieldDescriptor as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js b/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js
new file mode 100644
index 0000000000000000000000000000000000000000..68e76ff74f1368e7d802c025409b0f9350057613
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js
@@ -0,0 +1,4 @@
+function _classNameTDZError(e) {
+  throw new ReferenceError('Class "' + e + '" cannot be referenced in computed property keys.');
+}
+export { _classNameTDZError as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..93033663ac156d5d16af3857ccd5d9008932bd16
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldDestructureSet(e, t) {
+  var r = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorDestructureSet(e, r);
+}
+export { _classPrivateFieldDestructureSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce7ebcb716e7fcde838baa3fa1734a9d3a962588
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldGet(e, t) {
+  var r = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorGet(e, r);
+}
+export { _classPrivateFieldGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js
new file mode 100644
index 0000000000000000000000000000000000000000..4aa3da6b5481062ce4003bf4cade19a3c40266a6
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateFieldGet2(s, a) {
+  return s.get(assertClassBrand(s, a));
+}
+export { _classPrivateFieldGet2 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js
new file mode 100644
index 0000000000000000000000000000000000000000..5dcdbe04a1801a168b55d9242e0f599a60aed79a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js
@@ -0,0 +1,5 @@
+import checkPrivateRedeclaration from "./checkPrivateRedeclaration.js";
+function _classPrivateFieldInitSpec(e, t, a) {
+  checkPrivateRedeclaration(e, t), t.set(e, a);
+}
+export { _classPrivateFieldInitSpec as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bd662ca7f9e1b6ab2833a738839074d8c3fbb5e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js
@@ -0,0 +1,5 @@
+function _classPrivateFieldBase(e, t) {
+  if (!{}.hasOwnProperty.call(e, t)) throw new TypeError("attempted to use private field on non-instance");
+  return e;
+}
+export { _classPrivateFieldBase as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..90d21937c9db2245eee155ac94dc445f810d0ebd
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js
@@ -0,0 +1,5 @@
+var id = 0;
+function _classPrivateFieldKey(e) {
+  return "__private_" + id++ + "_" + e;
+}
+export { _classPrivateFieldKey as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5161bdb67f560a0a4c1cda927e05daa16e02c6d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
+import classPrivateFieldGet2 from "./classPrivateFieldGet2.js";
+function _classPrivateFieldSet(e, t, r) {
+  var s = classPrivateFieldGet2(t, e);
+  return classApplyDescriptorSet(e, s, r), r;
+}
+export { _classPrivateFieldSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js
new file mode 100644
index 0000000000000000000000000000000000000000..337b01a493a38dc5493687e942b1aef3d091c357
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateFieldSet2(s, a, r) {
+  return s.set(assertClassBrand(s, a), r), r;
+}
+export { _classPrivateFieldSet2 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js b/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff3e98513d7a57ad9a2acb81abe1b22e5a4b3af4
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateGetter(s, r, a) {
+  return a(assertClassBrand(s, r));
+}
+export { _classPrivateGetter as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..4832fc6f76d3a8f16711aa47358d8dcdb6f36d3e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateMethodGet(s, a, r) {
+  return assertClassBrand(a, s), r;
+}
+export { _classPrivateMethodGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js
new file mode 100644
index 0000000000000000000000000000000000000000..61e23e26f3fddefc269594b40ff267f55a98865c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js
@@ -0,0 +1,5 @@
+import checkPrivateRedeclaration from "./checkPrivateRedeclaration.js";
+function _classPrivateMethodInitSpec(e, a) {
+  checkPrivateRedeclaration(e, a), a.add(e);
+}
+export { _classPrivateMethodInitSpec as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..d181b5135682cb6eecd10951cfe3fb4f73ebc2b1
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classPrivateMethodSet() {
+  throw new TypeError("attempted to reassign private method");
+}
+export { _classPrivateMethodSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js b/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a80d59bc10486af790f23e18b929775114d0c2f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classPrivateSetter(s, r, a, t) {
+  return r(assertClassBrand(s, a), t), t;
+}
+export { _classPrivateSetter as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..747e639d596719b6500625126381e049f7174fc6
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorDestructureSet from "./classApplyDescriptorDestructureSet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldDestructureSet(t, r, s) {
+  return assertClassBrand(r, t), classCheckPrivateStaticFieldDescriptor(s, "set"), classApplyDescriptorDestructureSet(t, s);
+}
+export { _classStaticPrivateFieldDestructureSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..23684b74935adec2568c901e8075804541db0134
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorGet from "./classApplyDescriptorGet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldSpecGet(t, s, r) {
+  return assertClassBrand(s, t), classCheckPrivateStaticFieldDescriptor(r, "get"), classApplyDescriptorGet(t, r);
+}
+export { _classStaticPrivateFieldSpecGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a314682c0dff8a92ce08ca3b22c973cfc9090ad
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js
@@ -0,0 +1,7 @@
+import classApplyDescriptorSet from "./classApplyDescriptorSet.js";
+import assertClassBrand from "./assertClassBrand.js";
+import classCheckPrivateStaticFieldDescriptor from "./classCheckPrivateStaticFieldDescriptor.js";
+function _classStaticPrivateFieldSpecSet(s, t, r, e) {
+  return assertClassBrand(t, s), classCheckPrivateStaticFieldDescriptor(r, "set"), classApplyDescriptorSet(s, r, e), e;
+}
+export { _classStaticPrivateFieldSpecSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..047b177b0260a19525882ead86b0cb0b9a394c00
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js
@@ -0,0 +1,5 @@
+import assertClassBrand from "./assertClassBrand.js";
+function _classStaticPrivateMethodGet(s, a, t) {
+  return assertClassBrand(a, s), t;
+}
+export { _classStaticPrivateMethodGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..a61ae63ee90b8b9a2c05ccabb666b52392153264
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js
@@ -0,0 +1,4 @@
+function _classStaticPrivateMethodSet() {
+  throw new TypeError("attempted to set read only static private field");
+}
+export { _classStaticPrivateMethodSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/construct.js b/node_modules/@babel/runtime/helpers/esm/construct.js
new file mode 100644
index 0000000000000000000000000000000000000000..91609ff7861b33f22905933608c209619c317427
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/construct.js
@@ -0,0 +1,10 @@
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+function _construct(t, e, r) {
+  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);
+  var o = [null];
+  o.push.apply(o, e);
+  var p = new (t.bind.apply(t, o))();
+  return r && setPrototypeOf(p, r.prototype), p;
+}
+export { _construct as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/createClass.js b/node_modules/@babel/runtime/helpers/esm/createClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b178515eb7a72e825e3d4acd4f8f74b8e6438bd
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/createClass.js
@@ -0,0 +1,13 @@
+import toPropertyKey from "./toPropertyKey.js";
+function _defineProperties(e, r) {
+  for (var t = 0; t < r.length; t++) {
+    var o = r[t];
+    o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);
+  }
+}
+function _createClass(e, r, t) {
+  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
+    writable: !1
+  }), e;
+}
+export { _createClass as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js b/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js
new file mode 100644
index 0000000000000000000000000000000000000000..93b97f915113f730424bc88d20a599d6f6da2eb8
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js
@@ -0,0 +1,50 @@
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+function _createForOfIteratorHelper(r, e) {
+  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (!t) {
+    if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+      t && (r = t);
+      var _n = 0,
+        F = function F() {};
+      return {
+        s: F,
+        n: function n() {
+          return _n >= r.length ? {
+            done: !0
+          } : {
+            done: !1,
+            value: r[_n++]
+          };
+        },
+        e: function e(r) {
+          throw r;
+        },
+        f: F
+      };
+    }
+    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+  }
+  var o,
+    a = !0,
+    u = !1;
+  return {
+    s: function s() {
+      t = t.call(r);
+    },
+    n: function n() {
+      var r = t.next();
+      return a = r.done, r;
+    },
+    e: function e(r) {
+      u = !0, o = r;
+    },
+    f: function f() {
+      try {
+        a || null == t["return"] || t["return"]();
+      } finally {
+        if (u) throw o;
+      }
+    }
+  };
+}
+export { _createForOfIteratorHelper as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js b/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..3deaae443368fc22d581457c5b05704f7edd0026
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js
@@ -0,0 +1,19 @@
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+function _createForOfIteratorHelperLoose(r, e) {
+  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (t) return (t = t.call(r)).next.bind(t);
+  if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
+    t && (r = t);
+    var o = 0;
+    return function () {
+      return o >= r.length ? {
+        done: !0
+      } : {
+        done: !1,
+        value: r[o++]
+      };
+    };
+  }
+  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _createForOfIteratorHelperLoose as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/createSuper.js b/node_modules/@babel/runtime/helpers/esm/createSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfabf7115e5ae94da2ff457e38291d7637b4a395
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/createSuper.js
@@ -0,0 +1,16 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import isNativeReflectConstruct from "./isNativeReflectConstruct.js";
+import possibleConstructorReturn from "./possibleConstructorReturn.js";
+function _createSuper(t) {
+  var r = isNativeReflectConstruct();
+  return function () {
+    var e,
+      o = getPrototypeOf(t);
+    if (r) {
+      var s = getPrototypeOf(this).constructor;
+      e = Reflect.construct(o, arguments, s);
+    } else e = o.apply(this, arguments);
+    return possibleConstructorReturn(this, e);
+  };
+}
+export { _createSuper as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/decorate.js b/node_modules/@babel/runtime/helpers/esm/decorate.js
new file mode 100644
index 0000000000000000000000000000000000000000..f76b6a6af86a8fbded26059526d6127c7b1970df
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/decorate.js
@@ -0,0 +1,250 @@
+import toArray from "./toArray.js";
+import toPropertyKey from "./toPropertyKey.js";
+function _decorate(e, r, t, i) {
+  var o = _getDecoratorsApi();
+  if (i) for (var n = 0; n < i.length; n++) o = i[n](o);
+  var s = r(function (e) {
+      o.initializeInstanceElements(e, a.elements);
+    }, t),
+    a = o.decorateClass(_coalesceClassElements(s.d.map(_createElementDescriptor)), e);
+  return o.initializeClassElements(s.F, a.elements), o.runClassFinishers(s.F, a.finishers);
+}
+function _getDecoratorsApi() {
+  _getDecoratorsApi = function _getDecoratorsApi() {
+    return e;
+  };
+  var e = {
+    elementsDefinitionOrder: [["method"], ["field"]],
+    initializeInstanceElements: function initializeInstanceElements(e, r) {
+      ["method", "field"].forEach(function (t) {
+        r.forEach(function (r) {
+          r.kind === t && "own" === r.placement && this.defineClassElement(e, r);
+        }, this);
+      }, this);
+    },
+    initializeClassElements: function initializeClassElements(e, r) {
+      var t = e.prototype;
+      ["method", "field"].forEach(function (i) {
+        r.forEach(function (r) {
+          var o = r.placement;
+          if (r.kind === i && ("static" === o || "prototype" === o)) {
+            var n = "static" === o ? e : t;
+            this.defineClassElement(n, r);
+          }
+        }, this);
+      }, this);
+    },
+    defineClassElement: function defineClassElement(e, r) {
+      var t = r.descriptor;
+      if ("field" === r.kind) {
+        var i = r.initializer;
+        t = {
+          enumerable: t.enumerable,
+          writable: t.writable,
+          configurable: t.configurable,
+          value: void 0 === i ? void 0 : i.call(e)
+        };
+      }
+      Object.defineProperty(e, r.key, t);
+    },
+    decorateClass: function decorateClass(e, r) {
+      var t = [],
+        i = [],
+        o = {
+          "static": [],
+          prototype: [],
+          own: []
+        };
+      if (e.forEach(function (e) {
+        this.addElementPlacement(e, o);
+      }, this), e.forEach(function (e) {
+        if (!_hasDecorators(e)) return t.push(e);
+        var r = this.decorateElement(e, o);
+        t.push(r.element), t.push.apply(t, r.extras), i.push.apply(i, r.finishers);
+      }, this), !r) return {
+        elements: t,
+        finishers: i
+      };
+      var n = this.decorateConstructor(t, r);
+      return i.push.apply(i, n.finishers), n.finishers = i, n;
+    },
+    addElementPlacement: function addElementPlacement(e, r, t) {
+      var i = r[e.placement];
+      if (!t && -1 !== i.indexOf(e.key)) throw new TypeError("Duplicated element (" + e.key + ")");
+      i.push(e.key);
+    },
+    decorateElement: function decorateElement(e, r) {
+      for (var t = [], i = [], o = e.decorators, n = o.length - 1; n >= 0; n--) {
+        var s = r[e.placement];
+        s.splice(s.indexOf(e.key), 1);
+        var a = this.fromElementDescriptor(e),
+          l = this.toElementFinisherExtras((0, o[n])(a) || a);
+        e = l.element, this.addElementPlacement(e, r), l.finisher && i.push(l.finisher);
+        var c = l.extras;
+        if (c) {
+          for (var p = 0; p < c.length; p++) this.addElementPlacement(c[p], r);
+          t.push.apply(t, c);
+        }
+      }
+      return {
+        element: e,
+        finishers: i,
+        extras: t
+      };
+    },
+    decorateConstructor: function decorateConstructor(e, r) {
+      for (var t = [], i = r.length - 1; i >= 0; i--) {
+        var o = this.fromClassDescriptor(e),
+          n = this.toClassDescriptor((0, r[i])(o) || o);
+        if (void 0 !== n.finisher && t.push(n.finisher), void 0 !== n.elements) {
+          e = n.elements;
+          for (var s = 0; s < e.length - 1; s++) for (var a = s + 1; a < e.length; a++) if (e[s].key === e[a].key && e[s].placement === e[a].placement) throw new TypeError("Duplicated element (" + e[s].key + ")");
+        }
+      }
+      return {
+        elements: e,
+        finishers: t
+      };
+    },
+    fromElementDescriptor: function fromElementDescriptor(e) {
+      var r = {
+        kind: e.kind,
+        key: e.key,
+        placement: e.placement,
+        descriptor: e.descriptor
+      };
+      return Object.defineProperty(r, Symbol.toStringTag, {
+        value: "Descriptor",
+        configurable: !0
+      }), "field" === e.kind && (r.initializer = e.initializer), r;
+    },
+    toElementDescriptors: function toElementDescriptors(e) {
+      if (void 0 !== e) return toArray(e).map(function (e) {
+        var r = this.toElementDescriptor(e);
+        return this.disallowProperty(e, "finisher", "An element descriptor"), this.disallowProperty(e, "extras", "An element descriptor"), r;
+      }, this);
+    },
+    toElementDescriptor: function toElementDescriptor(e) {
+      var r = e.kind + "";
+      if ("method" !== r && "field" !== r) throw new TypeError('An element descriptor\'s .kind property must be either "method" or "field", but a decorator created an element descriptor with .kind "' + r + '"');
+      var t = toPropertyKey(e.key),
+        i = e.placement + "";
+      if ("static" !== i && "prototype" !== i && "own" !== i) throw new TypeError('An element descriptor\'s .placement property must be one of "static", "prototype" or "own", but a decorator created an element descriptor with .placement "' + i + '"');
+      var o = e.descriptor;
+      this.disallowProperty(e, "elements", "An element descriptor");
+      var n = {
+        kind: r,
+        key: t,
+        placement: i,
+        descriptor: Object.assign({}, o)
+      };
+      return "field" !== r ? this.disallowProperty(e, "initializer", "A method descriptor") : (this.disallowProperty(o, "get", "The property descriptor of a field descriptor"), this.disallowProperty(o, "set", "The property descriptor of a field descriptor"), this.disallowProperty(o, "value", "The property descriptor of a field descriptor"), n.initializer = e.initializer), n;
+    },
+    toElementFinisherExtras: function toElementFinisherExtras(e) {
+      return {
+        element: this.toElementDescriptor(e),
+        finisher: _optionalCallableProperty(e, "finisher"),
+        extras: this.toElementDescriptors(e.extras)
+      };
+    },
+    fromClassDescriptor: function fromClassDescriptor(e) {
+      var r = {
+        kind: "class",
+        elements: e.map(this.fromElementDescriptor, this)
+      };
+      return Object.defineProperty(r, Symbol.toStringTag, {
+        value: "Descriptor",
+        configurable: !0
+      }), r;
+    },
+    toClassDescriptor: function toClassDescriptor(e) {
+      var r = e.kind + "";
+      if ("class" !== r) throw new TypeError('A class descriptor\'s .kind property must be "class", but a decorator created a class descriptor with .kind "' + r + '"');
+      this.disallowProperty(e, "key", "A class descriptor"), this.disallowProperty(e, "placement", "A class descriptor"), this.disallowProperty(e, "descriptor", "A class descriptor"), this.disallowProperty(e, "initializer", "A class descriptor"), this.disallowProperty(e, "extras", "A class descriptor");
+      var t = _optionalCallableProperty(e, "finisher");
+      return {
+        elements: this.toElementDescriptors(e.elements),
+        finisher: t
+      };
+    },
+    runClassFinishers: function runClassFinishers(e, r) {
+      for (var t = 0; t < r.length; t++) {
+        var i = (0, r[t])(e);
+        if (void 0 !== i) {
+          if ("function" != typeof i) throw new TypeError("Finishers must return a constructor.");
+          e = i;
+        }
+      }
+      return e;
+    },
+    disallowProperty: function disallowProperty(e, r, t) {
+      if (void 0 !== e[r]) throw new TypeError(t + " can't have a ." + r + " property.");
+    }
+  };
+  return e;
+}
+function _createElementDescriptor(e) {
+  var r,
+    t = toPropertyKey(e.key);
+  "method" === e.kind ? r = {
+    value: e.value,
+    writable: !0,
+    configurable: !0,
+    enumerable: !1
+  } : "get" === e.kind ? r = {
+    get: e.value,
+    configurable: !0,
+    enumerable: !1
+  } : "set" === e.kind ? r = {
+    set: e.value,
+    configurable: !0,
+    enumerable: !1
+  } : "field" === e.kind && (r = {
+    configurable: !0,
+    writable: !0,
+    enumerable: !0
+  });
+  var i = {
+    kind: "field" === e.kind ? "field" : "method",
+    key: t,
+    placement: e["static"] ? "static" : "field" === e.kind ? "own" : "prototype",
+    descriptor: r
+  };
+  return e.decorators && (i.decorators = e.decorators), "field" === e.kind && (i.initializer = e.value), i;
+}
+function _coalesceGetterSetter(e, r) {
+  void 0 !== e.descriptor.get ? r.descriptor.get = e.descriptor.get : r.descriptor.set = e.descriptor.set;
+}
+function _coalesceClassElements(e) {
+  for (var r = [], isSameElement = function isSameElement(e) {
+      return "method" === e.kind && e.key === o.key && e.placement === o.placement;
+    }, t = 0; t < e.length; t++) {
+    var i,
+      o = e[t];
+    if ("method" === o.kind && (i = r.find(isSameElement))) {
+      if (_isDataDescriptor(o.descriptor) || _isDataDescriptor(i.descriptor)) {
+        if (_hasDecorators(o) || _hasDecorators(i)) throw new ReferenceError("Duplicated methods (" + o.key + ") can't be decorated.");
+        i.descriptor = o.descriptor;
+      } else {
+        if (_hasDecorators(o)) {
+          if (_hasDecorators(i)) throw new ReferenceError("Decorators can't be placed on different accessors with for the same property (" + o.key + ").");
+          i.decorators = o.decorators;
+        }
+        _coalesceGetterSetter(o, i);
+      }
+    } else r.push(o);
+  }
+  return r;
+}
+function _hasDecorators(e) {
+  return e.decorators && e.decorators.length;
+}
+function _isDataDescriptor(e) {
+  return void 0 !== e && !(void 0 === e.value && void 0 === e.writable);
+}
+function _optionalCallableProperty(e, r) {
+  var t = e[r];
+  if (void 0 !== t && "function" != typeof t) throw new TypeError("Expected '" + r + "' to be a function");
+  return t;
+}
+export { _decorate as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/defaults.js b/node_modules/@babel/runtime/helpers/esm/defaults.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3041a3d127bd717c4239304d6dd7e23b4e65a9d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/defaults.js
@@ -0,0 +1,9 @@
+function _defaults(e, r) {
+  for (var t = Object.getOwnPropertyNames(r), o = 0; o < t.length; o++) {
+    var n = t[o],
+      a = Object.getOwnPropertyDescriptor(r, n);
+    a && a.configurable && void 0 === e[n] && Object.defineProperty(e, n, a);
+  }
+  return e;
+}
+export { _defaults as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/defineAccessor.js b/node_modules/@babel/runtime/helpers/esm/defineAccessor.js
new file mode 100644
index 0000000000000000000000000000000000000000..a8292deafe53bbc71f70edf2eae4c48c3bca02cf
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/defineAccessor.js
@@ -0,0 +1,8 @@
+function _defineAccessor(e, r, n, t) {
+  var c = {
+    configurable: !0,
+    enumerable: !0
+  };
+  return c[e] = t, Object.defineProperty(r, n, c);
+}
+export { _defineAccessor as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js b/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d31d9809b453f8c82fa766f9210d4cb0236928b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js
@@ -0,0 +1,12 @@
+function _defineEnumerableProperties(e, r) {
+  for (var t in r) {
+    var n = r[t];
+    n.configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, t, n);
+  }
+  if (Object.getOwnPropertySymbols) for (var a = Object.getOwnPropertySymbols(r), b = 0; b < a.length; b++) {
+    var i = a[b];
+    (n = r[i]).configurable = n.enumerable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, i, n);
+  }
+  return e;
+}
+export { _defineEnumerableProperties as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/defineProperty.js b/node_modules/@babel/runtime/helpers/esm/defineProperty.js
new file mode 100644
index 0000000000000000000000000000000000000000..05ec32b70e6c58e482cf053aa517f9ff804f14f1
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/defineProperty.js
@@ -0,0 +1,10 @@
+import toPropertyKey from "./toPropertyKey.js";
+function _defineProperty(e, r, t) {
+  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
+    value: t,
+    enumerable: !0,
+    configurable: !0,
+    writable: !0
+  }) : e[r] = t, e;
+}
+export { _defineProperty as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/dispose.js b/node_modules/@babel/runtime/helpers/esm/dispose.js
new file mode 100644
index 0000000000000000000000000000000000000000..a87ab202618d0065982155a64f8b7d1ec956ec97
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/dispose.js
@@ -0,0 +1,28 @@
+function dispose_SuppressedError(r, e) {
+  return "undefined" != typeof SuppressedError ? dispose_SuppressedError = SuppressedError : (dispose_SuppressedError = function dispose_SuppressedError(r, e) {
+    this.suppressed = e, this.error = r, this.stack = Error().stack;
+  }, dispose_SuppressedError.prototype = Object.create(Error.prototype, {
+    constructor: {
+      value: dispose_SuppressedError,
+      writable: !0,
+      configurable: !0
+    }
+  })), new dispose_SuppressedError(r, e);
+}
+function _dispose(r, e, s) {
+  function next() {
+    for (; r.length > 0;) try {
+      var o = r.pop(),
+        p = o.d.call(o.v);
+      if (o.a) return Promise.resolve(p).then(next, err);
+    } catch (r) {
+      return err(r);
+    }
+    if (s) throw e;
+  }
+  function err(r) {
+    return e = s ? new dispose_SuppressedError(e, r) : r, s = !0, next();
+  }
+  return next();
+}
+export { _dispose as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/extends.js b/node_modules/@babel/runtime/helpers/esm/extends.js
new file mode 100644
index 0000000000000000000000000000000000000000..53f118ca9dff6fc344bc15046bc6f6239cbb502d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/extends.js
@@ -0,0 +1,10 @@
+function _extends() {
+  return _extends = Object.assign ? Object.assign.bind() : function (n) {
+    for (var e = 1; e < arguments.length; e++) {
+      var t = arguments[e];
+      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
+    }
+    return n;
+  }, _extends.apply(null, arguments);
+}
+export { _extends as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/get.js b/node_modules/@babel/runtime/helpers/esm/get.js
new file mode 100644
index 0000000000000000000000000000000000000000..8124bc023f1089e78cb860945f1dd553d8efd5ec
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/get.js
@@ -0,0 +1,11 @@
+import superPropBase from "./superPropBase.js";
+function _get() {
+  return _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
+    var p = superPropBase(e, t);
+    if (p) {
+      var n = Object.getOwnPropertyDescriptor(p, t);
+      return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
+    }
+  }, _get.apply(null, arguments);
+}
+export { _get as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js b/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..9073c456bdb39e81cbde7987a0ef80bb5cffe63b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
@@ -0,0 +1,6 @@
+function _getPrototypeOf(t) {
+  return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
+    return t.__proto__ || Object.getPrototypeOf(t);
+  }, _getPrototypeOf(t);
+}
+export { _getPrototypeOf as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/identity.js b/node_modules/@babel/runtime/helpers/esm/identity.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b564ac534a4cdb3f90279676c569c099591629f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/identity.js
@@ -0,0 +1,4 @@
+function _identity(t) {
+  return t;
+}
+export { _identity as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js b/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d35b526d7585422bfe576896f32622fb5bcdb62
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js
@@ -0,0 +1,27 @@
+function _importDeferProxy(e) {
+  var t = null,
+    constValue = function constValue(e) {
+      return function () {
+        return e;
+      };
+    },
+    proxy = function proxy(r) {
+      return function (n, o, f) {
+        return null === t && (t = e()), r(t, o, f);
+      };
+    };
+  return new Proxy({}, {
+    defineProperty: constValue(!1),
+    deleteProperty: constValue(!1),
+    get: proxy(Reflect.get),
+    getOwnPropertyDescriptor: proxy(Reflect.getOwnPropertyDescriptor),
+    getPrototypeOf: constValue(null),
+    isExtensible: constValue(!1),
+    has: proxy(Reflect.has),
+    ownKeys: proxy(Reflect.ownKeys),
+    preventExtensions: constValue(!0),
+    set: constValue(!1),
+    setPrototypeOf: constValue(!1)
+  });
+}
+export { _importDeferProxy as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/inherits.js b/node_modules/@babel/runtime/helpers/esm/inherits.js
new file mode 100644
index 0000000000000000000000000000000000000000..78f6e4e33883b54f8c50948598d3864d4a5e68a9
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/inherits.js
@@ -0,0 +1,14 @@
+import setPrototypeOf from "./setPrototypeOf.js";
+function _inherits(t, e) {
+  if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
+  t.prototype = Object.create(e && e.prototype, {
+    constructor: {
+      value: t,
+      writable: !0,
+      configurable: !0
+    }
+  }), Object.defineProperty(t, "prototype", {
+    writable: !1
+  }), e && setPrototypeOf(t, e);
+}
+export { _inherits as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js b/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bd13306acde8001fd431cd421cd05c9ca2a4372
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js
@@ -0,0 +1,5 @@
+import setPrototypeOf from "./setPrototypeOf.js";
+function _inheritsLoose(t, o) {
+  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);
+}
+export { _inheritsLoose as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js b/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js
new file mode 100644
index 0000000000000000000000000000000000000000..68bcc2cd43a4e6a9ab3ea5c5c2f8b4477fce2314
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js
@@ -0,0 +1,9 @@
+function _initializerDefineProperty(e, i, r, l) {
+  r && Object.defineProperty(e, i, {
+    enumerable: r.enumerable,
+    configurable: r.configurable,
+    writable: r.writable,
+    value: r.initializer ? r.initializer.call(l) : void 0
+  });
+}
+export { _initializerDefineProperty as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js b/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a658e39ac4d6db2387d7fdc4a22cbd99963d4da
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js
@@ -0,0 +1,4 @@
+function _initializerWarningHelper(r, e) {
+  throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.");
+}
+export { _initializerWarningHelper as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/instanceof.js b/node_modules/@babel/runtime/helpers/esm/instanceof.js
new file mode 100644
index 0000000000000000000000000000000000000000..316539ee452149c8bd0b32e5f615b049bd052528
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/instanceof.js
@@ -0,0 +1,4 @@
+function _instanceof(n, e) {
+  return null != e && "undefined" != typeof Symbol && e[Symbol.hasInstance] ? !!e[Symbol.hasInstance](n) : n instanceof e;
+}
+export { _instanceof as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js b/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js
new file mode 100644
index 0000000000000000000000000000000000000000..365d248199fc7dcf18649f48add3edbf59de348b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js
@@ -0,0 +1,6 @@
+function _interopRequireDefault(e) {
+  return e && e.__esModule ? e : {
+    "default": e
+  };
+}
+export { _interopRequireDefault as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js b/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js
new file mode 100644
index 0000000000000000000000000000000000000000..e190f1e2e0132e7b2484f0da8a4adaeff7653ee5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js
@@ -0,0 +1,27 @@
+import _typeof from "./typeof.js";
+function _getRequireWildcardCache(e) {
+  if ("function" != typeof WeakMap) return null;
+  var r = new WeakMap(),
+    t = new WeakMap();
+  return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
+    return e ? t : r;
+  })(e);
+}
+function _interopRequireWildcard(e, r) {
+  if (!r && e && e.__esModule) return e;
+  if (null === e || "object" != _typeof(e) && "function" != typeof e) return {
+    "default": e
+  };
+  var t = _getRequireWildcardCache(r);
+  if (t && t.has(e)) return t.get(e);
+  var n = {
+      __proto__: null
+    },
+    a = Object.defineProperty && Object.getOwnPropertyDescriptor;
+  for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
+    var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
+    i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
+  }
+  return n["default"] = e, t && t.set(e, n), n;
+}
+export { _interopRequireWildcard as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js b/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js
new file mode 100644
index 0000000000000000000000000000000000000000..0cfe276f8df3438490cd2cbcc19385abded1fe6f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js
@@ -0,0 +1,8 @@
+function _isNativeFunction(t) {
+  try {
+    return -1 !== Function.toString.call(t).indexOf("[native code]");
+  } catch (n) {
+    return "function" == typeof t;
+  }
+}
+export { _isNativeFunction as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js b/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js
new file mode 100644
index 0000000000000000000000000000000000000000..0eb5e395181a9333b6ff9b980e2f99b69d6468b0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js
@@ -0,0 +1,9 @@
+function _isNativeReflectConstruct() {
+  try {
+    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+  } catch (t) {}
+  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
+    return !!t;
+  })();
+}
+export { _isNativeReflectConstruct as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/iterableToArray.js b/node_modules/@babel/runtime/helpers/esm/iterableToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7de3396ab408b779aa3bde4c3cb9e2925cc6148
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/iterableToArray.js
@@ -0,0 +1,4 @@
+function _iterableToArray(r) {
+  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
+}
+export { _iterableToArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js b/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
new file mode 100644
index 0000000000000000000000000000000000000000..473f0678192b0dcec901b07f091500d9dbc24687
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
@@ -0,0 +1,28 @@
+function _iterableToArrayLimit(r, l) {
+  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (null != t) {
+    var e,
+      n,
+      i,
+      u,
+      a = [],
+      f = !0,
+      o = !1;
+    try {
+      if (i = (t = t.call(r)).next, 0 === l) {
+        if (Object(t) !== t) return;
+        f = !1;
+      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
+    } catch (r) {
+      o = !0, n = r;
+    } finally {
+      try {
+        if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
+      } finally {
+        if (o) throw n;
+      }
+    }
+    return a;
+  }
+}
+export { _iterableToArrayLimit as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/jsx.js b/node_modules/@babel/runtime/helpers/esm/jsx.js
new file mode 100644
index 0000000000000000000000000000000000000000..a120e5b6644546060dac58169d25848eb297a26c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/jsx.js
@@ -0,0 +1,22 @@
+var REACT_ELEMENT_TYPE;
+function _createRawReactElement(e, r, E, l) {
+  REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol["for"] && Symbol["for"]("react.element") || 60103);
+  var o = e && e.defaultProps,
+    n = arguments.length - 3;
+  if (r || 0 === n || (r = {
+    children: void 0
+  }), 1 === n) r.children = l;else if (n > 1) {
+    for (var t = Array(n), f = 0; f < n; f++) t[f] = arguments[f + 3];
+    r.children = t;
+  }
+  if (r && o) for (var i in o) void 0 === r[i] && (r[i] = o[i]);else r || (r = o || {});
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: e,
+    key: void 0 === E ? null : "" + E,
+    ref: null,
+    props: r,
+    _owner: null
+  };
+}
+export { _createRawReactElement as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js b/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js
new file mode 100644
index 0000000000000000000000000000000000000000..527c682b3bfe7cc27f4a5e94f900e51f2837cde7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js
@@ -0,0 +1,9 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _maybeArrayLike(r, a, e) {
+  if (a && !Array.isArray(a) && "number" == typeof a.length) {
+    var y = a.length;
+    return arrayLikeToArray(a, void 0 !== e && e < y ? e : y);
+  }
+  return r(a, e);
+}
+export { _maybeArrayLike as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js b/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f70e0d791974a5f96f7a2f5841a27444a116da3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js
@@ -0,0 +1,4 @@
+function _newArrowCheck(n, r) {
+  if (n !== r) throw new TypeError("Cannot instantiate an arrow function");
+}
+export { _newArrowCheck as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js b/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
new file mode 100644
index 0000000000000000000000000000000000000000..9050250b17b66776e878af3c200adafd52101a0e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
@@ -0,0 +1,4 @@
+function _nonIterableRest() {
+  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _nonIterableRest as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js b/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb03235aea95820f5be217744b244813f4a9358d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
@@ -0,0 +1,4 @@
+function _nonIterableSpread() {
+  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _nonIterableSpread as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js b/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js
new file mode 100644
index 0000000000000000000000000000000000000000..d8c30604635273b3915b8e1208a3ce661658f83d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js
@@ -0,0 +1,4 @@
+function _nullishReceiverError(r) {
+  throw new TypeError("Cannot set property of null or undefined.");
+}
+export { _nullishReceiverError as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js b/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js
new file mode 100644
index 0000000000000000000000000000000000000000..a92eac8f9570acbc05c3e012895e8c7195fef92d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js
@@ -0,0 +1,4 @@
+function _objectDestructuringEmpty(t) {
+  if (null == t) throw new TypeError("Cannot destructure " + t);
+}
+export { _objectDestructuringEmpty as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/objectSpread.js b/node_modules/@babel/runtime/helpers/esm/objectSpread.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f82f069c75a1b06a320908603c9cc3d19054f27
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/objectSpread.js
@@ -0,0 +1,14 @@
+import defineProperty from "./defineProperty.js";
+function _objectSpread(e) {
+  for (var r = 1; r < arguments.length; r++) {
+    var t = null != arguments[r] ? Object(arguments[r]) : {},
+      o = Object.keys(t);
+    "function" == typeof Object.getOwnPropertySymbols && o.push.apply(o, Object.getOwnPropertySymbols(t).filter(function (e) {
+      return Object.getOwnPropertyDescriptor(t, e).enumerable;
+    })), o.forEach(function (r) {
+      defineProperty(e, r, t[r]);
+    });
+  }
+  return e;
+}
+export { _objectSpread as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/objectSpread2.js b/node_modules/@babel/runtime/helpers/esm/objectSpread2.js
new file mode 100644
index 0000000000000000000000000000000000000000..0035bc76239911a2bb031cae7f76afb72b46c47d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/objectSpread2.js
@@ -0,0 +1,23 @@
+import defineProperty from "./defineProperty.js";
+function ownKeys(e, r) {
+  var t = Object.keys(e);
+  if (Object.getOwnPropertySymbols) {
+    var o = Object.getOwnPropertySymbols(e);
+    r && (o = o.filter(function (r) {
+      return Object.getOwnPropertyDescriptor(e, r).enumerable;
+    })), t.push.apply(t, o);
+  }
+  return t;
+}
+function _objectSpread2(e) {
+  for (var r = 1; r < arguments.length; r++) {
+    var t = null != arguments[r] ? arguments[r] : {};
+    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
+      defineProperty(e, r, t[r]);
+    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
+      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
+    });
+  }
+  return e;
+}
+export { _objectSpread2 as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js b/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5e7cf21ecbadea301c1ba4d6a3359927f93fd7f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
@@ -0,0 +1,13 @@
+import objectWithoutPropertiesLoose from "./objectWithoutPropertiesLoose.js";
+function _objectWithoutProperties(e, t) {
+  if (null == e) return {};
+  var o,
+    r,
+    i = objectWithoutPropertiesLoose(e, t);
+  if (Object.getOwnPropertySymbols) {
+    var s = Object.getOwnPropertySymbols(e);
+    for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
+  }
+  return i;
+}
+export { _objectWithoutProperties as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js b/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..b203b438a01e5b072f56ea2998139250335ae5c6
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
@@ -0,0 +1,10 @@
+function _objectWithoutPropertiesLoose(r, e) {
+  if (null == r) return {};
+  var t = {};
+  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
+    if (e.includes(n)) continue;
+    t[n] = r[n];
+  }
+  return t;
+}
+export { _objectWithoutPropertiesLoose as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/package.json b/node_modules/@babel/runtime/helpers/esm/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aead43de364cd1cc107d5fc3a4ea6fea7d7bd01c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/package.json
@@ -0,0 +1,3 @@
+{
+  "type": "module"
+}
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js b/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
new file mode 100644
index 0000000000000000000000000000000000000000..d84e1e6fc2b75131d35429a0955a7edd3e8dabf7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
@@ -0,0 +1,8 @@
+import _typeof from "./typeof.js";
+import assertThisInitialized from "./assertThisInitialized.js";
+function _possibleConstructorReturn(t, e) {
+  if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
+  if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
+  return assertThisInitialized(t);
+}
+export { _possibleConstructorReturn as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/readOnlyError.js b/node_modules/@babel/runtime/helpers/esm/readOnlyError.js
new file mode 100644
index 0000000000000000000000000000000000000000..fcc3e339cbeb19f73a821b52903b3c71abf2e4d2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/readOnlyError.js
@@ -0,0 +1,4 @@
+function _readOnlyError(r) {
+  throw new TypeError('"' + r + '" is read-only');
+}
+export { _readOnlyError as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js b/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js
new file mode 100644
index 0000000000000000000000000000000000000000..19c78cde9c5a4285797fa20d9f46a59e53a20d2d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js
@@ -0,0 +1,304 @@
+import _typeof from "./typeof.js";
+function _regeneratorRuntime() {
+  "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
+  _regeneratorRuntime = function _regeneratorRuntime() {
+    return e;
+  };
+  var t,
+    e = {},
+    r = Object.prototype,
+    n = r.hasOwnProperty,
+    o = Object.defineProperty || function (t, e, r) {
+      t[e] = r.value;
+    },
+    i = "function" == typeof Symbol ? Symbol : {},
+    a = i.iterator || "@@iterator",
+    c = i.asyncIterator || "@@asyncIterator",
+    u = i.toStringTag || "@@toStringTag";
+  function define(t, e, r) {
+    return Object.defineProperty(t, e, {
+      value: r,
+      enumerable: !0,
+      configurable: !0,
+      writable: !0
+    }), t[e];
+  }
+  try {
+    define({}, "");
+  } catch (t) {
+    define = function define(t, e, r) {
+      return t[e] = r;
+    };
+  }
+  function wrap(t, e, r, n) {
+    var i = e && e.prototype instanceof Generator ? e : Generator,
+      a = Object.create(i.prototype),
+      c = new Context(n || []);
+    return o(a, "_invoke", {
+      value: makeInvokeMethod(t, r, c)
+    }), a;
+  }
+  function tryCatch(t, e, r) {
+    try {
+      return {
+        type: "normal",
+        arg: t.call(e, r)
+      };
+    } catch (t) {
+      return {
+        type: "throw",
+        arg: t
+      };
+    }
+  }
+  e.wrap = wrap;
+  var h = "suspendedStart",
+    l = "suspendedYield",
+    f = "executing",
+    s = "completed",
+    y = {};
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+  var p = {};
+  define(p, a, function () {
+    return this;
+  });
+  var d = Object.getPrototypeOf,
+    v = d && d(d(values([])));
+  v && v !== r && n.call(v, a) && (p = v);
+  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
+  function defineIteratorMethods(t) {
+    ["next", "throw", "return"].forEach(function (e) {
+      define(t, e, function (t) {
+        return this._invoke(e, t);
+      });
+    });
+  }
+  function AsyncIterator(t, e) {
+    function invoke(r, o, i, a) {
+      var c = tryCatch(t[r], t, o);
+      if ("throw" !== c.type) {
+        var u = c.arg,
+          h = u.value;
+        return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
+          invoke("next", t, i, a);
+        }, function (t) {
+          invoke("throw", t, i, a);
+        }) : e.resolve(h).then(function (t) {
+          u.value = t, i(u);
+        }, function (t) {
+          return invoke("throw", t, i, a);
+        });
+      }
+      a(c.arg);
+    }
+    var r;
+    o(this, "_invoke", {
+      value: function value(t, n) {
+        function callInvokeWithMethodAndArg() {
+          return new e(function (e, r) {
+            invoke(t, n, e, r);
+          });
+        }
+        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
+      }
+    });
+  }
+  function makeInvokeMethod(e, r, n) {
+    var o = h;
+    return function (i, a) {
+      if (o === f) throw Error("Generator is already running");
+      if (o === s) {
+        if ("throw" === i) throw a;
+        return {
+          value: t,
+          done: !0
+        };
+      }
+      for (n.method = i, n.arg = a;;) {
+        var c = n.delegate;
+        if (c) {
+          var u = maybeInvokeDelegate(c, n);
+          if (u) {
+            if (u === y) continue;
+            return u;
+          }
+        }
+        if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
+          if (o === h) throw o = s, n.arg;
+          n.dispatchException(n.arg);
+        } else "return" === n.method && n.abrupt("return", n.arg);
+        o = f;
+        var p = tryCatch(e, r, n);
+        if ("normal" === p.type) {
+          if (o = n.done ? s : l, p.arg === y) continue;
+          return {
+            value: p.arg,
+            done: n.done
+          };
+        }
+        "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
+      }
+    };
+  }
+  function maybeInvokeDelegate(e, r) {
+    var n = r.method,
+      o = e.iterator[n];
+    if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
+    var i = tryCatch(o, e.iterator, r.arg);
+    if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
+    var a = i.arg;
+    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
+  }
+  function pushTryEntry(t) {
+    var e = {
+      tryLoc: t[0]
+    };
+    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
+  }
+  function resetTryEntry(t) {
+    var e = t.completion || {};
+    e.type = "normal", delete e.arg, t.completion = e;
+  }
+  function Context(t) {
+    this.tryEntries = [{
+      tryLoc: "root"
+    }], t.forEach(pushTryEntry, this), this.reset(!0);
+  }
+  function values(e) {
+    if (e || "" === e) {
+      var r = e[a];
+      if (r) return r.call(e);
+      if ("function" == typeof e.next) return e;
+      if (!isNaN(e.length)) {
+        var o = -1,
+          i = function next() {
+            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
+            return next.value = t, next.done = !0, next;
+          };
+        return i.next = i;
+      }
+    }
+    throw new TypeError(_typeof(e) + " is not iterable");
+  }
+  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
+    value: GeneratorFunctionPrototype,
+    configurable: !0
+  }), o(GeneratorFunctionPrototype, "constructor", {
+    value: GeneratorFunction,
+    configurable: !0
+  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
+    var e = "function" == typeof t && t.constructor;
+    return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
+  }, e.mark = function (t) {
+    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
+  }, e.awrap = function (t) {
+    return {
+      __await: t
+    };
+  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
+    return this;
+  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
+    void 0 === i && (i = Promise);
+    var a = new AsyncIterator(wrap(t, r, n, o), i);
+    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
+      return t.done ? t.value : a.next();
+    });
+  }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
+    return this;
+  }), define(g, "toString", function () {
+    return "[object Generator]";
+  }), e.keys = function (t) {
+    var e = Object(t),
+      r = [];
+    for (var n in e) r.push(n);
+    return r.reverse(), function next() {
+      for (; r.length;) {
+        var t = r.pop();
+        if (t in e) return next.value = t, next.done = !1, next;
+      }
+      return next.done = !0, next;
+    };
+  }, e.values = values, Context.prototype = {
+    constructor: Context,
+    reset: function reset(e) {
+      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
+    },
+    stop: function stop() {
+      this.done = !0;
+      var t = this.tryEntries[0].completion;
+      if ("throw" === t.type) throw t.arg;
+      return this.rval;
+    },
+    dispatchException: function dispatchException(e) {
+      if (this.done) throw e;
+      var r = this;
+      function handle(n, o) {
+        return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
+      }
+      for (var o = this.tryEntries.length - 1; o >= 0; --o) {
+        var i = this.tryEntries[o],
+          a = i.completion;
+        if ("root" === i.tryLoc) return handle("end");
+        if (i.tryLoc <= this.prev) {
+          var c = n.call(i, "catchLoc"),
+            u = n.call(i, "finallyLoc");
+          if (c && u) {
+            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
+            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
+          } else if (c) {
+            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
+          } else {
+            if (!u) throw Error("try statement without catch or finally");
+            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
+          }
+        }
+      }
+    },
+    abrupt: function abrupt(t, e) {
+      for (var r = this.tryEntries.length - 1; r >= 0; --r) {
+        var o = this.tryEntries[r];
+        if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
+          var i = o;
+          break;
+        }
+      }
+      i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
+      var a = i ? i.completion : {};
+      return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
+    },
+    complete: function complete(t, e) {
+      if ("throw" === t.type) throw t.arg;
+      return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
+    },
+    finish: function finish(t) {
+      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+        var r = this.tryEntries[e];
+        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
+      }
+    },
+    "catch": function _catch(t) {
+      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+        var r = this.tryEntries[e];
+        if (r.tryLoc === t) {
+          var n = r.completion;
+          if ("throw" === n.type) {
+            var o = n.arg;
+            resetTryEntry(r);
+          }
+          return o;
+        }
+      }
+      throw Error("illegal catch attempt");
+    },
+    delegateYield: function delegateYield(e, r, n) {
+      return this.delegate = {
+        iterator: values(e),
+        resultName: r,
+        nextLoc: n
+      }, "next" === this.method && (this.arg = t), y;
+    }
+  }, e;
+}
+export { _regeneratorRuntime as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/set.js b/node_modules/@babel/runtime/helpers/esm/set.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed0a80399cd4aa16268483777849aa02f1801df2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/set.js
@@ -0,0 +1,22 @@
+import superPropBase from "./superPropBase.js";
+import defineProperty from "./defineProperty.js";
+function set(e, r, t, o) {
+  return set = "undefined" != typeof Reflect && Reflect.set ? Reflect.set : function (e, r, t, o) {
+    var f,
+      i = superPropBase(e, r);
+    if (i) {
+      if ((f = Object.getOwnPropertyDescriptor(i, r)).set) return f.set.call(o, t), !0;
+      if (!f.writable) return !1;
+    }
+    if (f = Object.getOwnPropertyDescriptor(o, r)) {
+      if (!f.writable) return !1;
+      f.value = t, Object.defineProperty(o, r, f);
+    } else defineProperty(o, r, t);
+    return !0;
+  }, set(e, r, t, o);
+}
+function _set(e, r, t, o, f) {
+  if (!set(e, r, t, o || e) && f) throw new TypeError("failed to set property");
+  return t;
+}
+export { _set as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/setFunctionName.js b/node_modules/@babel/runtime/helpers/esm/setFunctionName.js
new file mode 100644
index 0000000000000000000000000000000000000000..82213cea5a90430852e2bb11873da7e0d64ca4e0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/setFunctionName.js
@@ -0,0 +1,12 @@
+import _typeof from "./typeof.js";
+function setFunctionName(e, t, n) {
+  "symbol" == _typeof(t) && (t = (t = t.description) ? "[" + t + "]" : "");
+  try {
+    Object.defineProperty(e, "name", {
+      configurable: !0,
+      value: n ? n + " " + t : t
+    });
+  } catch (e) {}
+  return e;
+}
+export { setFunctionName as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js b/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..c30983c961e1b7292b01494c54934f571aa2873d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
@@ -0,0 +1,6 @@
+function _setPrototypeOf(t, e) {
+  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
+    return t.__proto__ = e, t;
+  }, _setPrototypeOf(t, e);
+}
+export { _setPrototypeOf as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js b/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js
new file mode 100644
index 0000000000000000000000000000000000000000..41d5738cd888608d42a41b9f41e582a451d09a8b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js
@@ -0,0 +1,7 @@
+function _skipFirstGeneratorNext(t) {
+  return function () {
+    var r = t.apply(this, arguments);
+    return r.next(), r;
+  };
+}
+export { _skipFirstGeneratorNext as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/slicedToArray.js b/node_modules/@babel/runtime/helpers/esm/slicedToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..c044c2a6ae600b9bccf6440b4d6039ffffb1f5b0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/slicedToArray.js
@@ -0,0 +1,8 @@
+import arrayWithHoles from "./arrayWithHoles.js";
+import iterableToArrayLimit from "./iterableToArrayLimit.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableRest from "./nonIterableRest.js";
+function _slicedToArray(r, e) {
+  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
+}
+export { _slicedToArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/superPropBase.js b/node_modules/@babel/runtime/helpers/esm/superPropBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5fa38614da27b53b36f3a6f1a01bc8fba5b5cc7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/superPropBase.js
@@ -0,0 +1,6 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropBase(t, o) {
+  for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););
+  return t;
+}
+export { _superPropBase as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/superPropGet.js b/node_modules/@babel/runtime/helpers/esm/superPropGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2b60a873239e70a0c237cbbb54621017ade26c6
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/superPropGet.js
@@ -0,0 +1,9 @@
+import get from "./get.js";
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropGet(t, o, e, r) {
+  var p = get(getPrototypeOf(1 & r ? t.prototype : t), o, e);
+  return 2 & r && "function" == typeof p ? function (t) {
+    return p.apply(e, t);
+  } : p;
+}
+export { _superPropGet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/superPropSet.js b/node_modules/@babel/runtime/helpers/esm/superPropSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..e182f386dbb2b0b230513140ff047bd1f405514a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/superPropSet.js
@@ -0,0 +1,6 @@
+import set from "./set.js";
+import getPrototypeOf from "./getPrototypeOf.js";
+function _superPropSet(t, e, o, r, p, f) {
+  return set(getPrototypeOf(f ? t.prototype : t), e, o, r, p);
+}
+export { _superPropSet as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js b/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d842cda00b810484e8d6a6fef525b9cc6a32174
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js
@@ -0,0 +1,8 @@
+function _taggedTemplateLiteral(e, t) {
+  return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
+    raw: {
+      value: Object.freeze(t)
+    }
+  }));
+}
+export { _taggedTemplateLiteral as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js b/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..741aeb8514b85966349982b4efc2b9717f59711e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js
@@ -0,0 +1,4 @@
+function _taggedTemplateLiteralLoose(e, t) {
+  return t || (t = e.slice(0)), e.raw = t, e;
+}
+export { _taggedTemplateLiteralLoose as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/tdz.js b/node_modules/@babel/runtime/helpers/esm/tdz.js
new file mode 100644
index 0000000000000000000000000000000000000000..58df493f419635f6c72bd612cc0a5480e77d11e9
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/tdz.js
@@ -0,0 +1,4 @@
+function _tdzError(e) {
+  throw new ReferenceError(e + " is not defined - temporal dead zone");
+}
+export { _tdzError as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/temporalRef.js b/node_modules/@babel/runtime/helpers/esm/temporalRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..8dbf014d0f60772f0b8be86653dd169e4ab5d530
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/temporalRef.js
@@ -0,0 +1,6 @@
+import temporalUndefined from "./temporalUndefined.js";
+import tdz from "./tdz.js";
+function _temporalRef(r, e) {
+  return r === temporalUndefined ? tdz(e) : r;
+}
+export { _temporalRef as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js b/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ec0b0dab572544e6e72a7999b464a09491920a7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js
@@ -0,0 +1,2 @@
+function _temporalUndefined() {}
+export { _temporalUndefined as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/toArray.js b/node_modules/@babel/runtime/helpers/esm/toArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..e5f0f52a56917296474aed26de9e216ff08fc64c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/toArray.js
@@ -0,0 +1,8 @@
+import arrayWithHoles from "./arrayWithHoles.js";
+import iterableToArray from "./iterableToArray.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableRest from "./nonIterableRest.js";
+function _toArray(r) {
+  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();
+}
+export { _toArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js b/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7338e4d56c003948594f27578bc5cb72f3155ce
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
@@ -0,0 +1,8 @@
+import arrayWithoutHoles from "./arrayWithoutHoles.js";
+import iterableToArray from "./iterableToArray.js";
+import unsupportedIterableToArray from "./unsupportedIterableToArray.js";
+import nonIterableSpread from "./nonIterableSpread.js";
+function _toConsumableArray(r) {
+  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
+}
+export { _toConsumableArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/toPrimitive.js b/node_modules/@babel/runtime/helpers/esm/toPrimitive.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a3de46b53f87ed4154fb754afbe9a746ec466b7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/toPrimitive.js
@@ -0,0 +1,12 @@
+import _typeof from "./typeof.js";
+function toPrimitive(t, r) {
+  if ("object" != _typeof(t) || !t) return t;
+  var e = t[Symbol.toPrimitive];
+  if (void 0 !== e) {
+    var i = e.call(t, r || "default");
+    if ("object" != _typeof(i)) return i;
+    throw new TypeError("@@toPrimitive must return a primitive value.");
+  }
+  return ("string" === r ? String : Number)(t);
+}
+export { toPrimitive as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js b/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3274d877584beea80ad8e1497582fe223fa37c4
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js
@@ -0,0 +1,7 @@
+import _typeof from "./typeof.js";
+import toPrimitive from "./toPrimitive.js";
+function toPropertyKey(t) {
+  var i = toPrimitive(t, "string");
+  return "symbol" == _typeof(i) ? i : i + "";
+}
+export { toPropertyKey as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/toSetter.js b/node_modules/@babel/runtime/helpers/esm/toSetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1dbf7ae4ae24903ee2dadc279faafa8a73de3f2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/toSetter.js
@@ -0,0 +1,10 @@
+function _toSetter(t, e, n) {
+  e || (e = []);
+  var r = e.length++;
+  return Object.defineProperty({}, "_", {
+    set: function set(o) {
+      e[r] = o, t.apply(n, e);
+    }
+  });
+}
+export { _toSetter as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/typeof.js b/node_modules/@babel/runtime/helpers/esm/typeof.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b0bc9b057273a616569d6820e7cdcf71dccb6a2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/typeof.js
@@ -0,0 +1,10 @@
+function _typeof(o) {
+  "@babel/helpers - typeof";
+
+  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+    return typeof o;
+  } : function (o) {
+    return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+  }, _typeof(o);
+}
+export { _typeof as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js b/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..33adc4938e19ffde76e667f7b27213a1ed7e27e0
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js
@@ -0,0 +1,9 @@
+import arrayLikeToArray from "./arrayLikeToArray.js";
+function _unsupportedIterableToArray(r, a) {
+  if (r) {
+    if ("string" == typeof r) return arrayLikeToArray(r, a);
+    var t = {}.toString.call(r).slice(8, -1);
+    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
+  }
+}
+export { _unsupportedIterableToArray as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/using.js b/node_modules/@babel/runtime/helpers/esm/using.js
new file mode 100644
index 0000000000000000000000000000000000000000..9bda17b5573b6eae269db58c0a0db16a0aa7bd87
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/using.js
@@ -0,0 +1,12 @@
+function _using(o, n, e) {
+  if (null == n) return n;
+  if (Object(n) !== n) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+  if (e) var r = n[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+  if (null == r && (r = n[Symbol.dispose || Symbol["for"]("Symbol.dispose")]), "function" != typeof r) throw new TypeError("Property [Symbol.dispose] is not a function.");
+  return o.push({
+    v: n,
+    d: r,
+    a: e
+  }), n;
+}
+export { _using as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/usingCtx.js b/node_modules/@babel/runtime/helpers/esm/usingCtx.js
new file mode 100644
index 0000000000000000000000000000000000000000..1464379f78de2f90103d0d9e871e3a11406f08d5
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/usingCtx.js
@@ -0,0 +1,59 @@
+function _usingCtx() {
+  var r = "function" == typeof SuppressedError ? SuppressedError : function (r, e) {
+      var n = Error();
+      return n.name = "SuppressedError", n.error = r, n.suppressed = e, n;
+    },
+    e = {},
+    n = [];
+  function using(r, e) {
+    if (null != e) {
+      if (Object(e) !== e) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+      if (r) var o = e[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+      if (void 0 === o && (o = e[Symbol.dispose || Symbol["for"]("Symbol.dispose")], r)) var t = o;
+      if ("function" != typeof o) throw new TypeError("Object is not disposable.");
+      t && (o = function o() {
+        try {
+          t.call(e);
+        } catch (r) {
+          return Promise.reject(r);
+        }
+      }), n.push({
+        v: e,
+        d: o,
+        a: r
+      });
+    } else r && n.push({
+      d: e,
+      a: r
+    });
+    return e;
+  }
+  return {
+    e: e,
+    u: using.bind(null, !1),
+    a: using.bind(null, !0),
+    d: function d() {
+      var o,
+        t = this.e,
+        s = 0;
+      function next() {
+        for (; o = n.pop();) try {
+          if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);
+          if (o.d) {
+            var r = o.d.call(o.v);
+            if (o.a) return s |= 2, Promise.resolve(r).then(next, err);
+          } else s |= 1;
+        } catch (r) {
+          return err(r);
+        }
+        if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();
+        if (t !== e) throw t;
+      }
+      function err(n) {
+        return t = t !== e ? new r(n, t) : n, next();
+      }
+      return next();
+    }
+  };
+}
+export { _usingCtx as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js b/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffeea5d9cea3719eb1d0566d93fa9a3df2b29d3b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js
@@ -0,0 +1,69 @@
+import OverloadYield from "./OverloadYield.js";
+function _wrapAsyncGenerator(e) {
+  return function () {
+    return new AsyncGenerator(e.apply(this, arguments));
+  };
+}
+function AsyncGenerator(e) {
+  var r, t;
+  function resume(r, t) {
+    try {
+      var n = e[r](t),
+        o = n.value,
+        u = o instanceof OverloadYield;
+      Promise.resolve(u ? o.v : o).then(function (t) {
+        if (u) {
+          var i = "return" === r ? "return" : "next";
+          if (!o.k || t.done) return resume(i, t);
+          t = e[i](t).value;
+        }
+        settle(n.done ? "return" : "normal", t);
+      }, function (e) {
+        resume("throw", e);
+      });
+    } catch (e) {
+      settle("throw", e);
+    }
+  }
+  function settle(e, n) {
+    switch (e) {
+      case "return":
+        r.resolve({
+          value: n,
+          done: !0
+        });
+        break;
+      case "throw":
+        r.reject(n);
+        break;
+      default:
+        r.resolve({
+          value: n,
+          done: !1
+        });
+    }
+    (r = r.next) ? resume(r.key, r.arg) : t = null;
+  }
+  this._invoke = function (e, n) {
+    return new Promise(function (o, u) {
+      var i = {
+        key: e,
+        arg: n,
+        resolve: o,
+        reject: u,
+        next: null
+      };
+      t ? t = t.next = i : (r = t = i, resume(e, n));
+    });
+  }, "function" != typeof e["return"] && (this["return"] = void 0);
+}
+AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () {
+  return this;
+}, AsyncGenerator.prototype.next = function (e) {
+  return this._invoke("next", e);
+}, AsyncGenerator.prototype["throw"] = function (e) {
+  return this._invoke("throw", e);
+}, AsyncGenerator.prototype["return"] = function (e) {
+  return this._invoke("return", e);
+};
+export { _wrapAsyncGenerator as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js b/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..15bf78f538fd2bd4121db483cb62accd76b058ba
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js
@@ -0,0 +1,27 @@
+import getPrototypeOf from "./getPrototypeOf.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+import isNativeFunction from "./isNativeFunction.js";
+import construct from "./construct.js";
+function _wrapNativeSuper(t) {
+  var r = "function" == typeof Map ? new Map() : void 0;
+  return _wrapNativeSuper = function _wrapNativeSuper(t) {
+    if (null === t || !isNativeFunction(t)) return t;
+    if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
+    if (void 0 !== r) {
+      if (r.has(t)) return r.get(t);
+      r.set(t, Wrapper);
+    }
+    function Wrapper() {
+      return construct(t, arguments, getPrototypeOf(this).constructor);
+    }
+    return Wrapper.prototype = Object.create(t.prototype, {
+      constructor: {
+        value: Wrapper,
+        enumerable: !1,
+        writable: !0,
+        configurable: !0
+      }
+    }), setPrototypeOf(Wrapper, t);
+  }, _wrapNativeSuper(t);
+}
+export { _wrapNativeSuper as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js b/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecf821e7dbd6f719e6c9eec50b5ae45aaf8c27db
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js
@@ -0,0 +1,51 @@
+import _typeof from "./typeof.js";
+import setPrototypeOf from "./setPrototypeOf.js";
+import inherits from "./inherits.js";
+function _wrapRegExp() {
+  _wrapRegExp = function _wrapRegExp(e, r) {
+    return new BabelRegExp(e, void 0, r);
+  };
+  var e = RegExp.prototype,
+    r = new WeakMap();
+  function BabelRegExp(e, t, p) {
+    var o = RegExp(e, t);
+    return r.set(o, p || r.get(e)), setPrototypeOf(o, BabelRegExp.prototype);
+  }
+  function buildGroups(e, t) {
+    var p = r.get(t);
+    return Object.keys(p).reduce(function (r, t) {
+      var o = p[t];
+      if ("number" == typeof o) r[t] = e[o];else {
+        for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;
+        r[t] = e[o[i]];
+      }
+      return r;
+    }, Object.create(null));
+  }
+  return inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {
+    var t = e.exec.call(this, r);
+    if (t) {
+      t.groups = buildGroups(t, this);
+      var p = t.indices;
+      p && (p.groups = buildGroups(p, this));
+    }
+    return t;
+  }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {
+    if ("string" == typeof p) {
+      var o = r.get(this);
+      return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) {
+        var t = o[r];
+        return "$" + (Array.isArray(t) ? t.join("$") : t);
+      }));
+    }
+    if ("function" == typeof p) {
+      var i = this;
+      return e[Symbol.replace].call(this, t, function () {
+        var e = arguments;
+        return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);
+      });
+    }
+    return e[Symbol.replace].call(this, t, p);
+  }, _wrapRegExp.apply(this, arguments);
+}
+export { _wrapRegExp as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js b/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js
new file mode 100644
index 0000000000000000000000000000000000000000..250c2869f89a0d4d9d35b14895109876f86aac4e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js
@@ -0,0 +1,4 @@
+function _writeOnlyError(r) {
+  throw new TypeError('"' + r + '" is write-only');
+}
+export { _writeOnlyError as default };
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/extends.js b/node_modules/@babel/runtime/helpers/extends.js
new file mode 100644
index 0000000000000000000000000000000000000000..eee4a1f438f4d8cdc3fee8d8d17fdb4652cbba15
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/extends.js
@@ -0,0 +1,10 @@
+function _extends() {
+  return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {
+    for (var e = 1; e < arguments.length; e++) {
+      var t = arguments[e];
+      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
+    }
+    return n;
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _extends.apply(null, arguments);
+}
+module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/get.js b/node_modules/@babel/runtime/helpers/get.js
new file mode 100644
index 0000000000000000000000000000000000000000..15428ded5087858c0c2ab636d2ad961a7c063ff3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/get.js
@@ -0,0 +1,11 @@
+var superPropBase = require("./superPropBase.js");
+function _get() {
+  return module.exports = _get = "undefined" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {
+    var p = superPropBase(e, t);
+    if (p) {
+      var n = Object.getOwnPropertyDescriptor(p, t);
+      return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;
+    }
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _get.apply(null, arguments);
+}
+module.exports = _get, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/getPrototypeOf.js b/node_modules/@babel/runtime/helpers/getPrototypeOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..90707481a906f33927c5394a5159bdb159fce09f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/getPrototypeOf.js
@@ -0,0 +1,6 @@
+function _getPrototypeOf(t) {
+  return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
+    return t.__proto__ || Object.getPrototypeOf(t);
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _getPrototypeOf(t);
+}
+module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/identity.js b/node_modules/@babel/runtime/helpers/identity.js
new file mode 100644
index 0000000000000000000000000000000000000000..54de5b5b81d543d9768a8bca343bfa996cb26176
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/identity.js
@@ -0,0 +1,4 @@
+function _identity(t) {
+  return t;
+}
+module.exports = _identity, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/importDeferProxy.js b/node_modules/@babel/runtime/helpers/importDeferProxy.js
new file mode 100644
index 0000000000000000000000000000000000000000..cffaae65f25c821671f2cc6f50a3cb89ce391b29
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/importDeferProxy.js
@@ -0,0 +1,27 @@
+function _importDeferProxy(e) {
+  var t = null,
+    constValue = function constValue(e) {
+      return function () {
+        return e;
+      };
+    },
+    proxy = function proxy(r) {
+      return function (n, o, f) {
+        return null === t && (t = e()), r(t, o, f);
+      };
+    };
+  return new Proxy({}, {
+    defineProperty: constValue(!1),
+    deleteProperty: constValue(!1),
+    get: proxy(Reflect.get),
+    getOwnPropertyDescriptor: proxy(Reflect.getOwnPropertyDescriptor),
+    getPrototypeOf: constValue(null),
+    isExtensible: constValue(!1),
+    has: proxy(Reflect.has),
+    ownKeys: proxy(Reflect.ownKeys),
+    preventExtensions: constValue(!0),
+    set: constValue(!1),
+    setPrototypeOf: constValue(!1)
+  });
+}
+module.exports = _importDeferProxy, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/inherits.js b/node_modules/@babel/runtime/helpers/inherits.js
new file mode 100644
index 0000000000000000000000000000000000000000..715a78ef5cb1366455fbbdbe15c02a317ed29ee8
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/inherits.js
@@ -0,0 +1,14 @@
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _inherits(t, e) {
+  if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
+  t.prototype = Object.create(e && e.prototype, {
+    constructor: {
+      value: t,
+      writable: !0,
+      configurable: !0
+    }
+  }), Object.defineProperty(t, "prototype", {
+    writable: !1
+  }), e && setPrototypeOf(t, e);
+}
+module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/inheritsLoose.js b/node_modules/@babel/runtime/helpers/inheritsLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..a27baf01709fcaf20ac9ff926af0fa0b7b928da3
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/inheritsLoose.js
@@ -0,0 +1,5 @@
+var setPrototypeOf = require("./setPrototypeOf.js");
+function _inheritsLoose(t, o) {
+  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);
+}
+module.exports = _inheritsLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/initializerDefineProperty.js b/node_modules/@babel/runtime/helpers/initializerDefineProperty.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9fa31730028fd24e7a89a86f4eb4c5102a4f798
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/initializerDefineProperty.js
@@ -0,0 +1,9 @@
+function _initializerDefineProperty(e, i, r, l) {
+  r && Object.defineProperty(e, i, {
+    enumerable: r.enumerable,
+    configurable: r.configurable,
+    writable: r.writable,
+    value: r.initializer ? r.initializer.call(l) : void 0
+  });
+}
+module.exports = _initializerDefineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/initializerWarningHelper.js b/node_modules/@babel/runtime/helpers/initializerWarningHelper.js
new file mode 100644
index 0000000000000000000000000000000000000000..e14ce59a05dba489202c9bc7bcec289de29d7ab2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/initializerWarningHelper.js
@@ -0,0 +1,4 @@
+function _initializerWarningHelper(r, e) {
+  throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.");
+}
+module.exports = _initializerWarningHelper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/instanceof.js b/node_modules/@babel/runtime/helpers/instanceof.js
new file mode 100644
index 0000000000000000000000000000000000000000..9952301dc17c5b41188c7dbe534f90ad6017d512
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/instanceof.js
@@ -0,0 +1,4 @@
+function _instanceof(n, e) {
+  return null != e && "undefined" != typeof Symbol && e[Symbol.hasInstance] ? !!e[Symbol.hasInstance](n) : n instanceof e;
+}
+module.exports = _instanceof, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/interopRequireDefault.js b/node_modules/@babel/runtime/helpers/interopRequireDefault.js
new file mode 100644
index 0000000000000000000000000000000000000000..69447158f687f3a6995316a66d5ca7d17aa0f100
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/interopRequireDefault.js
@@ -0,0 +1,6 @@
+function _interopRequireDefault(e) {
+  return e && e.__esModule ? e : {
+    "default": e
+  };
+}
+module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/interopRequireWildcard.js b/node_modules/@babel/runtime/helpers/interopRequireWildcard.js
new file mode 100644
index 0000000000000000000000000000000000000000..41411cc307050868e813d2b25d0b51899ccc2532
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/interopRequireWildcard.js
@@ -0,0 +1,27 @@
+var _typeof = require("./typeof.js")["default"];
+function _getRequireWildcardCache(e) {
+  if ("function" != typeof WeakMap) return null;
+  var r = new WeakMap(),
+    t = new WeakMap();
+  return (_getRequireWildcardCache = function _getRequireWildcardCache(e) {
+    return e ? t : r;
+  })(e);
+}
+function _interopRequireWildcard(e, r) {
+  if (!r && e && e.__esModule) return e;
+  if (null === e || "object" != _typeof(e) && "function" != typeof e) return {
+    "default": e
+  };
+  var t = _getRequireWildcardCache(r);
+  if (t && t.has(e)) return t.get(e);
+  var n = {
+      __proto__: null
+    },
+    a = Object.defineProperty && Object.getOwnPropertyDescriptor;
+  for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) {
+    var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
+    i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
+  }
+  return n["default"] = e, t && t.set(e, n), n;
+}
+module.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/isNativeFunction.js b/node_modules/@babel/runtime/helpers/isNativeFunction.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0eb49e3fdf38b8ddbacc127efe7a39e1d2b0844
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/isNativeFunction.js
@@ -0,0 +1,8 @@
+function _isNativeFunction(t) {
+  try {
+    return -1 !== Function.toString.call(t).indexOf("[native code]");
+  } catch (n) {
+    return "function" == typeof t;
+  }
+}
+module.exports = _isNativeFunction, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js b/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js
new file mode 100644
index 0000000000000000000000000000000000000000..b677e1076382e0cb07e18348b90d8d0b3292394f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js
@@ -0,0 +1,9 @@
+function _isNativeReflectConstruct() {
+  try {
+    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+  } catch (t) {}
+  return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {
+    return !!t;
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
+}
+module.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/iterableToArray.js b/node_modules/@babel/runtime/helpers/iterableToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..c839a32164b6e28580bf4fa908f6c780b7fdc3ee
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/iterableToArray.js
@@ -0,0 +1,4 @@
+function _iterableToArray(r) {
+  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
+}
+module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js b/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js
new file mode 100644
index 0000000000000000000000000000000000000000..2671778bfb27059c18af95497064c094f2183ba8
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js
@@ -0,0 +1,28 @@
+function _iterableToArrayLimit(r, l) {
+  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
+  if (null != t) {
+    var e,
+      n,
+      i,
+      u,
+      a = [],
+      f = !0,
+      o = !1;
+    try {
+      if (i = (t = t.call(r)).next, 0 === l) {
+        if (Object(t) !== t) return;
+        f = !1;
+      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
+    } catch (r) {
+      o = !0, n = r;
+    } finally {
+      try {
+        if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;
+      } finally {
+        if (o) throw n;
+      }
+    }
+    return a;
+  }
+}
+module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/jsx.js b/node_modules/@babel/runtime/helpers/jsx.js
new file mode 100644
index 0000000000000000000000000000000000000000..3415eead6dfb7fe6c3c8d87add5c8fa16e62f98d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/jsx.js
@@ -0,0 +1,22 @@
+var REACT_ELEMENT_TYPE;
+function _createRawReactElement(e, r, E, l) {
+  REACT_ELEMENT_TYPE || (REACT_ELEMENT_TYPE = "function" == typeof Symbol && Symbol["for"] && Symbol["for"]("react.element") || 60103);
+  var o = e && e.defaultProps,
+    n = arguments.length - 3;
+  if (r || 0 === n || (r = {
+    children: void 0
+  }), 1 === n) r.children = l;else if (n > 1) {
+    for (var t = Array(n), f = 0; f < n; f++) t[f] = arguments[f + 3];
+    r.children = t;
+  }
+  if (r && o) for (var i in o) void 0 === r[i] && (r[i] = o[i]);else r || (r = o || {});
+  return {
+    $$typeof: REACT_ELEMENT_TYPE,
+    type: e,
+    key: void 0 === E ? null : "" + E,
+    ref: null,
+    props: r,
+    _owner: null
+  };
+}
+module.exports = _createRawReactElement, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/maybeArrayLike.js b/node_modules/@babel/runtime/helpers/maybeArrayLike.js
new file mode 100644
index 0000000000000000000000000000000000000000..9873cc76bfb7dea05c5fcc28594529644adeeb78
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/maybeArrayLike.js
@@ -0,0 +1,9 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _maybeArrayLike(r, a, e) {
+  if (a && !Array.isArray(a) && "number" == typeof a.length) {
+    var y = a.length;
+    return arrayLikeToArray(a, void 0 !== e && e < y ? e : y);
+  }
+  return r(a, e);
+}
+module.exports = _maybeArrayLike, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/newArrowCheck.js b/node_modules/@babel/runtime/helpers/newArrowCheck.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e74d99161d486e3511e7e758b6ab359baadb4f1
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/newArrowCheck.js
@@ -0,0 +1,4 @@
+function _newArrowCheck(n, r) {
+  if (n !== r) throw new TypeError("Cannot instantiate an arrow function");
+}
+module.exports = _newArrowCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/nonIterableRest.js b/node_modules/@babel/runtime/helpers/nonIterableRest.js
new file mode 100644
index 0000000000000000000000000000000000000000..95265ba32fd124ca4a999b99c16f743e0ff1ef94
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/nonIterableRest.js
@@ -0,0 +1,4 @@
+function _nonIterableRest() {
+  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/nonIterableSpread.js b/node_modules/@babel/runtime/helpers/nonIterableSpread.js
new file mode 100644
index 0000000000000000000000000000000000000000..3fcf23f04315e39bf8d1aabff0284a7b7f20e287
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/nonIterableSpread.js
@@ -0,0 +1,4 @@
+function _nonIterableSpread() {
+  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/nullishReceiverError.js b/node_modules/@babel/runtime/helpers/nullishReceiverError.js
new file mode 100644
index 0000000000000000000000000000000000000000..970e02319032d5c6d9aa1ec15fba5c7a6c957b8f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/nullishReceiverError.js
@@ -0,0 +1,4 @@
+function _nullishReceiverError(r) {
+  throw new TypeError("Cannot set property of null or undefined.");
+}
+module.exports = _nullishReceiverError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js b/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f62a1b0525c41f1d80b343ea3861e48c8ce2b92
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js
@@ -0,0 +1,4 @@
+function _objectDestructuringEmpty(t) {
+  if (null == t) throw new TypeError("Cannot destructure " + t);
+}
+module.exports = _objectDestructuringEmpty, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/objectSpread.js b/node_modules/@babel/runtime/helpers/objectSpread.js
new file mode 100644
index 0000000000000000000000000000000000000000..a367643812c64fc4fa8b5be971323b0447aaf951
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/objectSpread.js
@@ -0,0 +1,14 @@
+var defineProperty = require("./defineProperty.js");
+function _objectSpread(e) {
+  for (var r = 1; r < arguments.length; r++) {
+    var t = null != arguments[r] ? Object(arguments[r]) : {},
+      o = Object.keys(t);
+    "function" == typeof Object.getOwnPropertySymbols && o.push.apply(o, Object.getOwnPropertySymbols(t).filter(function (e) {
+      return Object.getOwnPropertyDescriptor(t, e).enumerable;
+    })), o.forEach(function (r) {
+      defineProperty(e, r, t[r]);
+    });
+  }
+  return e;
+}
+module.exports = _objectSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/objectSpread2.js b/node_modules/@babel/runtime/helpers/objectSpread2.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f3b9fa020acbed2e10d2c32e2566991c00ba47b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/objectSpread2.js
@@ -0,0 +1,23 @@
+var defineProperty = require("./defineProperty.js");
+function ownKeys(e, r) {
+  var t = Object.keys(e);
+  if (Object.getOwnPropertySymbols) {
+    var o = Object.getOwnPropertySymbols(e);
+    r && (o = o.filter(function (r) {
+      return Object.getOwnPropertyDescriptor(e, r).enumerable;
+    })), t.push.apply(t, o);
+  }
+  return t;
+}
+function _objectSpread2(e) {
+  for (var r = 1; r < arguments.length; r++) {
+    var t = null != arguments[r] ? arguments[r] : {};
+    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
+      defineProperty(e, r, t[r]);
+    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
+      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
+    });
+  }
+  return e;
+}
+module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/objectWithoutProperties.js b/node_modules/@babel/runtime/helpers/objectWithoutProperties.js
new file mode 100644
index 0000000000000000000000000000000000000000..6482b9868a2ebb73e3d6b3c9954eef5a6d38d5a7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/objectWithoutProperties.js
@@ -0,0 +1,13 @@
+var objectWithoutPropertiesLoose = require("./objectWithoutPropertiesLoose.js");
+function _objectWithoutProperties(e, t) {
+  if (null == e) return {};
+  var o,
+    r,
+    i = objectWithoutPropertiesLoose(e, t);
+  if (Object.getOwnPropertySymbols) {
+    var s = Object.getOwnPropertySymbols(e);
+    for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
+  }
+  return i;
+}
+module.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js b/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..2465e3b92fab0dc75fdb5151f193ddf2fa77967e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js
@@ -0,0 +1,10 @@
+function _objectWithoutPropertiesLoose(r, e) {
+  if (null == r) return {};
+  var t = {};
+  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
+    if (e.includes(n)) continue;
+    t[n] = r[n];
+  }
+  return t;
+}
+module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js b/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js
new file mode 100644
index 0000000000000000000000000000000000000000..06e6e6d865d50b00dde04a172f2bd2bcaa2aa044
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js
@@ -0,0 +1,8 @@
+var _typeof = require("./typeof.js")["default"];
+var assertThisInitialized = require("./assertThisInitialized.js");
+function _possibleConstructorReturn(t, e) {
+  if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
+  if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
+  return assertThisInitialized(t);
+}
+module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/readOnlyError.js b/node_modules/@babel/runtime/helpers/readOnlyError.js
new file mode 100644
index 0000000000000000000000000000000000000000..1bf3e0929f916e4c05e4009150ffedf84329447d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/readOnlyError.js
@@ -0,0 +1,4 @@
+function _readOnlyError(r) {
+  throw new TypeError('"' + r + '" is read-only');
+}
+module.exports = _readOnlyError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/regeneratorRuntime.js b/node_modules/@babel/runtime/helpers/regeneratorRuntime.js
new file mode 100644
index 0000000000000000000000000000000000000000..f33e49451635cb08335c4af0bf230079a9c78676
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/regeneratorRuntime.js
@@ -0,0 +1,304 @@
+var _typeof = require("./typeof.js")["default"];
+function _regeneratorRuntime() {
+  "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
+  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
+    return e;
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
+  var t,
+    e = {},
+    r = Object.prototype,
+    n = r.hasOwnProperty,
+    o = Object.defineProperty || function (t, e, r) {
+      t[e] = r.value;
+    },
+    i = "function" == typeof Symbol ? Symbol : {},
+    a = i.iterator || "@@iterator",
+    c = i.asyncIterator || "@@asyncIterator",
+    u = i.toStringTag || "@@toStringTag";
+  function define(t, e, r) {
+    return Object.defineProperty(t, e, {
+      value: r,
+      enumerable: !0,
+      configurable: !0,
+      writable: !0
+    }), t[e];
+  }
+  try {
+    define({}, "");
+  } catch (t) {
+    define = function define(t, e, r) {
+      return t[e] = r;
+    };
+  }
+  function wrap(t, e, r, n) {
+    var i = e && e.prototype instanceof Generator ? e : Generator,
+      a = Object.create(i.prototype),
+      c = new Context(n || []);
+    return o(a, "_invoke", {
+      value: makeInvokeMethod(t, r, c)
+    }), a;
+  }
+  function tryCatch(t, e, r) {
+    try {
+      return {
+        type: "normal",
+        arg: t.call(e, r)
+      };
+    } catch (t) {
+      return {
+        type: "throw",
+        arg: t
+      };
+    }
+  }
+  e.wrap = wrap;
+  var h = "suspendedStart",
+    l = "suspendedYield",
+    f = "executing",
+    s = "completed",
+    y = {};
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+  var p = {};
+  define(p, a, function () {
+    return this;
+  });
+  var d = Object.getPrototypeOf,
+    v = d && d(d(values([])));
+  v && v !== r && n.call(v, a) && (p = v);
+  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
+  function defineIteratorMethods(t) {
+    ["next", "throw", "return"].forEach(function (e) {
+      define(t, e, function (t) {
+        return this._invoke(e, t);
+      });
+    });
+  }
+  function AsyncIterator(t, e) {
+    function invoke(r, o, i, a) {
+      var c = tryCatch(t[r], t, o);
+      if ("throw" !== c.type) {
+        var u = c.arg,
+          h = u.value;
+        return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
+          invoke("next", t, i, a);
+        }, function (t) {
+          invoke("throw", t, i, a);
+        }) : e.resolve(h).then(function (t) {
+          u.value = t, i(u);
+        }, function (t) {
+          return invoke("throw", t, i, a);
+        });
+      }
+      a(c.arg);
+    }
+    var r;
+    o(this, "_invoke", {
+      value: function value(t, n) {
+        function callInvokeWithMethodAndArg() {
+          return new e(function (e, r) {
+            invoke(t, n, e, r);
+          });
+        }
+        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
+      }
+    });
+  }
+  function makeInvokeMethod(e, r, n) {
+    var o = h;
+    return function (i, a) {
+      if (o === f) throw Error("Generator is already running");
+      if (o === s) {
+        if ("throw" === i) throw a;
+        return {
+          value: t,
+          done: !0
+        };
+      }
+      for (n.method = i, n.arg = a;;) {
+        var c = n.delegate;
+        if (c) {
+          var u = maybeInvokeDelegate(c, n);
+          if (u) {
+            if (u === y) continue;
+            return u;
+          }
+        }
+        if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
+          if (o === h) throw o = s, n.arg;
+          n.dispatchException(n.arg);
+        } else "return" === n.method && n.abrupt("return", n.arg);
+        o = f;
+        var p = tryCatch(e, r, n);
+        if ("normal" === p.type) {
+          if (o = n.done ? s : l, p.arg === y) continue;
+          return {
+            value: p.arg,
+            done: n.done
+          };
+        }
+        "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
+      }
+    };
+  }
+  function maybeInvokeDelegate(e, r) {
+    var n = r.method,
+      o = e.iterator[n];
+    if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
+    var i = tryCatch(o, e.iterator, r.arg);
+    if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
+    var a = i.arg;
+    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
+  }
+  function pushTryEntry(t) {
+    var e = {
+      tryLoc: t[0]
+    };
+    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
+  }
+  function resetTryEntry(t) {
+    var e = t.completion || {};
+    e.type = "normal", delete e.arg, t.completion = e;
+  }
+  function Context(t) {
+    this.tryEntries = [{
+      tryLoc: "root"
+    }], t.forEach(pushTryEntry, this), this.reset(!0);
+  }
+  function values(e) {
+    if (e || "" === e) {
+      var r = e[a];
+      if (r) return r.call(e);
+      if ("function" == typeof e.next) return e;
+      if (!isNaN(e.length)) {
+        var o = -1,
+          i = function next() {
+            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
+            return next.value = t, next.done = !0, next;
+          };
+        return i.next = i;
+      }
+    }
+    throw new TypeError(_typeof(e) + " is not iterable");
+  }
+  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
+    value: GeneratorFunctionPrototype,
+    configurable: !0
+  }), o(GeneratorFunctionPrototype, "constructor", {
+    value: GeneratorFunction,
+    configurable: !0
+  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
+    var e = "function" == typeof t && t.constructor;
+    return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
+  }, e.mark = function (t) {
+    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
+  }, e.awrap = function (t) {
+    return {
+      __await: t
+    };
+  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
+    return this;
+  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
+    void 0 === i && (i = Promise);
+    var a = new AsyncIterator(wrap(t, r, n, o), i);
+    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
+      return t.done ? t.value : a.next();
+    });
+  }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
+    return this;
+  }), define(g, "toString", function () {
+    return "[object Generator]";
+  }), e.keys = function (t) {
+    var e = Object(t),
+      r = [];
+    for (var n in e) r.push(n);
+    return r.reverse(), function next() {
+      for (; r.length;) {
+        var t = r.pop();
+        if (t in e) return next.value = t, next.done = !1, next;
+      }
+      return next.done = !0, next;
+    };
+  }, e.values = values, Context.prototype = {
+    constructor: Context,
+    reset: function reset(e) {
+      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
+    },
+    stop: function stop() {
+      this.done = !0;
+      var t = this.tryEntries[0].completion;
+      if ("throw" === t.type) throw t.arg;
+      return this.rval;
+    },
+    dispatchException: function dispatchException(e) {
+      if (this.done) throw e;
+      var r = this;
+      function handle(n, o) {
+        return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
+      }
+      for (var o = this.tryEntries.length - 1; o >= 0; --o) {
+        var i = this.tryEntries[o],
+          a = i.completion;
+        if ("root" === i.tryLoc) return handle("end");
+        if (i.tryLoc <= this.prev) {
+          var c = n.call(i, "catchLoc"),
+            u = n.call(i, "finallyLoc");
+          if (c && u) {
+            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
+            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
+          } else if (c) {
+            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
+          } else {
+            if (!u) throw Error("try statement without catch or finally");
+            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
+          }
+        }
+      }
+    },
+    abrupt: function abrupt(t, e) {
+      for (var r = this.tryEntries.length - 1; r >= 0; --r) {
+        var o = this.tryEntries[r];
+        if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
+          var i = o;
+          break;
+        }
+      }
+      i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
+      var a = i ? i.completion : {};
+      return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
+    },
+    complete: function complete(t, e) {
+      if ("throw" === t.type) throw t.arg;
+      return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
+    },
+    finish: function finish(t) {
+      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+        var r = this.tryEntries[e];
+        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
+      }
+    },
+    "catch": function _catch(t) {
+      for (var e = this.tryEntries.length - 1; e >= 0; --e) {
+        var r = this.tryEntries[e];
+        if (r.tryLoc === t) {
+          var n = r.completion;
+          if ("throw" === n.type) {
+            var o = n.arg;
+            resetTryEntry(r);
+          }
+          return o;
+        }
+      }
+      throw Error("illegal catch attempt");
+    },
+    delegateYield: function delegateYield(e, r, n) {
+      return this.delegate = {
+        iterator: values(e),
+        resultName: r,
+        nextLoc: n
+      }, "next" === this.method && (this.arg = t), y;
+    }
+  }, e;
+}
+module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/set.js b/node_modules/@babel/runtime/helpers/set.js
new file mode 100644
index 0000000000000000000000000000000000000000..6421470aa17e98983210b3fe2b69081bdb7d0d6e
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/set.js
@@ -0,0 +1,22 @@
+var superPropBase = require("./superPropBase.js");
+var defineProperty = require("./defineProperty.js");
+function set(e, r, t, o) {
+  return set = "undefined" != typeof Reflect && Reflect.set ? Reflect.set : function (e, r, t, o) {
+    var f,
+      i = superPropBase(e, r);
+    if (i) {
+      if ((f = Object.getOwnPropertyDescriptor(i, r)).set) return f.set.call(o, t), !0;
+      if (!f.writable) return !1;
+    }
+    if (f = Object.getOwnPropertyDescriptor(o, r)) {
+      if (!f.writable) return !1;
+      f.value = t, Object.defineProperty(o, r, f);
+    } else defineProperty(o, r, t);
+    return !0;
+  }, set(e, r, t, o);
+}
+function _set(e, r, t, o, f) {
+  if (!set(e, r, t, o || e) && f) throw new TypeError("failed to set property");
+  return t;
+}
+module.exports = _set, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/setFunctionName.js b/node_modules/@babel/runtime/helpers/setFunctionName.js
new file mode 100644
index 0000000000000000000000000000000000000000..9664076a861f6fd4516d124a32924ed7eeccccee
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/setFunctionName.js
@@ -0,0 +1,12 @@
+var _typeof = require("./typeof.js")["default"];
+function setFunctionName(e, t, n) {
+  "symbol" == _typeof(t) && (t = (t = t.description) ? "[" + t + "]" : "");
+  try {
+    Object.defineProperty(e, "name", {
+      configurable: !0,
+      value: n ? n + " " + t : t
+    });
+  } catch (e) {}
+  return e;
+}
+module.exports = setFunctionName, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/setPrototypeOf.js b/node_modules/@babel/runtime/helpers/setPrototypeOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d991ffa6f0966a0cb455959f0b736ccf445f9ac
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/setPrototypeOf.js
@@ -0,0 +1,6 @@
+function _setPrototypeOf(t, e) {
+  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
+    return t.__proto__ = e, t;
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _setPrototypeOf(t, e);
+}
+module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js b/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js
new file mode 100644
index 0000000000000000000000000000000000000000..2aed548efc8d5fffeb0c3d3f75f2e3df4f698bf7
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js
@@ -0,0 +1,7 @@
+function _skipFirstGeneratorNext(t) {
+  return function () {
+    var r = t.apply(this, arguments);
+    return r.next(), r;
+  };
+}
+module.exports = _skipFirstGeneratorNext, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/slicedToArray.js b/node_modules/@babel/runtime/helpers/slicedToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d752c4251abfe03fdbb9bc1a8965e4779f0d8e2
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/slicedToArray.js
@@ -0,0 +1,8 @@
+var arrayWithHoles = require("./arrayWithHoles.js");
+var iterableToArrayLimit = require("./iterableToArrayLimit.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableRest = require("./nonIterableRest.js");
+function _slicedToArray(r, e) {
+  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();
+}
+module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/superPropBase.js b/node_modules/@babel/runtime/helpers/superPropBase.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cad45953f6a6348a5ea3f5bcebdaf60e3778226
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/superPropBase.js
@@ -0,0 +1,6 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropBase(t, o) {
+  for (; !{}.hasOwnProperty.call(t, o) && null !== (t = getPrototypeOf(t)););
+  return t;
+}
+module.exports = _superPropBase, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/superPropGet.js b/node_modules/@babel/runtime/helpers/superPropGet.js
new file mode 100644
index 0000000000000000000000000000000000000000..baf8b1024cf484ec5e1ab14418bd3efb6696d067
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/superPropGet.js
@@ -0,0 +1,9 @@
+var get = require("./get.js");
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropGet(t, o, e, r) {
+  var p = get(getPrototypeOf(1 & r ? t.prototype : t), o, e);
+  return 2 & r && "function" == typeof p ? function (t) {
+    return p.apply(e, t);
+  } : p;
+}
+module.exports = _superPropGet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/superPropSet.js b/node_modules/@babel/runtime/helpers/superPropSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0578c049039e7f286bbe0b81716e116e174131f
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/superPropSet.js
@@ -0,0 +1,6 @@
+var set = require("./set.js");
+var getPrototypeOf = require("./getPrototypeOf.js");
+function _superPropSet(t, e, o, r, p, f) {
+  return set(getPrototypeOf(f ? t.prototype : t), e, o, r, p);
+}
+module.exports = _superPropSet, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js b/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js
new file mode 100644
index 0000000000000000000000000000000000000000..38d6065ae92ab78b0dde3aabcc4fd1986910cb30
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js
@@ -0,0 +1,8 @@
+function _taggedTemplateLiteral(e, t) {
+  return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, {
+    raw: {
+      value: Object.freeze(t)
+    }
+  }));
+}
+module.exports = _taggedTemplateLiteral, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js b/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f8c146aece3a14910cd934c593f9e2d0c2c5f22
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js
@@ -0,0 +1,4 @@
+function _taggedTemplateLiteralLoose(e, t) {
+  return t || (t = e.slice(0)), e.raw = t, e;
+}
+module.exports = _taggedTemplateLiteralLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/tdz.js b/node_modules/@babel/runtime/helpers/tdz.js
new file mode 100644
index 0000000000000000000000000000000000000000..c66f476c6c10d5ea7685d92f7311d04a5a68ee9b
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/tdz.js
@@ -0,0 +1,4 @@
+function _tdzError(e) {
+  throw new ReferenceError(e + " is not defined - temporal dead zone");
+}
+module.exports = _tdzError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/temporalRef.js b/node_modules/@babel/runtime/helpers/temporalRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..54c9190c4aca91f7128fdb8404fe6c23eca47183
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/temporalRef.js
@@ -0,0 +1,6 @@
+var temporalUndefined = require("./temporalUndefined.js");
+var tdz = require("./tdz.js");
+function _temporalRef(r, e) {
+  return r === temporalUndefined ? tdz(e) : r;
+}
+module.exports = _temporalRef, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/temporalUndefined.js b/node_modules/@babel/runtime/helpers/temporalUndefined.js
new file mode 100644
index 0000000000000000000000000000000000000000..f8def80021dbb3f39d3ad67730c2ad87e7748c6d
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/temporalUndefined.js
@@ -0,0 +1,2 @@
+function _temporalUndefined() {}
+module.exports = _temporalUndefined, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/toArray.js b/node_modules/@babel/runtime/helpers/toArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..2be1d2bd70286b66a52a317643e8d843e4d58a54
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/toArray.js
@@ -0,0 +1,8 @@
+var arrayWithHoles = require("./arrayWithHoles.js");
+var iterableToArray = require("./iterableToArray.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableRest = require("./nonIterableRest.js");
+function _toArray(r) {
+  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();
+}
+module.exports = _toArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/toConsumableArray.js b/node_modules/@babel/runtime/helpers/toConsumableArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..698f9c69c29bd6d0112c46275dd0f99bd228268c
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/toConsumableArray.js
@@ -0,0 +1,8 @@
+var arrayWithoutHoles = require("./arrayWithoutHoles.js");
+var iterableToArray = require("./iterableToArray.js");
+var unsupportedIterableToArray = require("./unsupportedIterableToArray.js");
+var nonIterableSpread = require("./nonIterableSpread.js");
+function _toConsumableArray(r) {
+  return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();
+}
+module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/toPrimitive.js b/node_modules/@babel/runtime/helpers/toPrimitive.js
new file mode 100644
index 0000000000000000000000000000000000000000..ef9d249b5cb2fba37c43154f56c3d9b282b994dc
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/toPrimitive.js
@@ -0,0 +1,12 @@
+var _typeof = require("./typeof.js")["default"];
+function toPrimitive(t, r) {
+  if ("object" != _typeof(t) || !t) return t;
+  var e = t[Symbol.toPrimitive];
+  if (void 0 !== e) {
+    var i = e.call(t, r || "default");
+    if ("object" != _typeof(i)) return i;
+    throw new TypeError("@@toPrimitive must return a primitive value.");
+  }
+  return ("string" === r ? String : Number)(t);
+}
+module.exports = toPrimitive, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/toPropertyKey.js b/node_modules/@babel/runtime/helpers/toPropertyKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ca3d4fcba6752a10a4defbd2ab146215fc19d58
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/toPropertyKey.js
@@ -0,0 +1,7 @@
+var _typeof = require("./typeof.js")["default"];
+var toPrimitive = require("./toPrimitive.js");
+function toPropertyKey(t) {
+  var i = toPrimitive(t, "string");
+  return "symbol" == _typeof(i) ? i : i + "";
+}
+module.exports = toPropertyKey, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/toSetter.js b/node_modules/@babel/runtime/helpers/toSetter.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0012a8f8fc7d92fceb1eda1ff47607e3078c205
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/toSetter.js
@@ -0,0 +1,10 @@
+function _toSetter(t, e, n) {
+  e || (e = []);
+  var r = e.length++;
+  return Object.defineProperty({}, "_", {
+    set: function set(o) {
+      e[r] = o, t.apply(n, e);
+    }
+  });
+}
+module.exports = _toSetter, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/typeof.js b/node_modules/@babel/runtime/helpers/typeof.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6fbfaf8c102a66332e3d899c2e688eb80c52c69
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/typeof.js
@@ -0,0 +1,10 @@
+function _typeof(o) {
+  "@babel/helpers - typeof";
+
+  return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+    return typeof o;
+  } : function (o) {
+    return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
+}
+module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js b/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fb1a71de61213141368a8341f9140bdb4b6bc20
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js
@@ -0,0 +1,9 @@
+var arrayLikeToArray = require("./arrayLikeToArray.js");
+function _unsupportedIterableToArray(r, a) {
+  if (r) {
+    if ("string" == typeof r) return arrayLikeToArray(r, a);
+    var t = {}.toString.call(r).slice(8, -1);
+    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;
+  }
+}
+module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/using.js b/node_modules/@babel/runtime/helpers/using.js
new file mode 100644
index 0000000000000000000000000000000000000000..37c79e2c17d74f89638d26166d75b83fbb4c17af
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/using.js
@@ -0,0 +1,12 @@
+function _using(o, n, e) {
+  if (null == n) return n;
+  if (Object(n) !== n) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+  if (e) var r = n[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+  if (null == r && (r = n[Symbol.dispose || Symbol["for"]("Symbol.dispose")]), "function" != typeof r) throw new TypeError("Property [Symbol.dispose] is not a function.");
+  return o.push({
+    v: n,
+    d: r,
+    a: e
+  }), n;
+}
+module.exports = _using, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/usingCtx.js b/node_modules/@babel/runtime/helpers/usingCtx.js
new file mode 100644
index 0000000000000000000000000000000000000000..652ab15d5494264f449ca38486cc47dd7fdeb420
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/usingCtx.js
@@ -0,0 +1,59 @@
+function _usingCtx() {
+  var r = "function" == typeof SuppressedError ? SuppressedError : function (r, e) {
+      var n = Error();
+      return n.name = "SuppressedError", n.error = r, n.suppressed = e, n;
+    },
+    e = {},
+    n = [];
+  function using(r, e) {
+    if (null != e) {
+      if (Object(e) !== e) throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+      if (r) var o = e[Symbol.asyncDispose || Symbol["for"]("Symbol.asyncDispose")];
+      if (void 0 === o && (o = e[Symbol.dispose || Symbol["for"]("Symbol.dispose")], r)) var t = o;
+      if ("function" != typeof o) throw new TypeError("Object is not disposable.");
+      t && (o = function o() {
+        try {
+          t.call(e);
+        } catch (r) {
+          return Promise.reject(r);
+        }
+      }), n.push({
+        v: e,
+        d: o,
+        a: r
+      });
+    } else r && n.push({
+      d: e,
+      a: r
+    });
+    return e;
+  }
+  return {
+    e: e,
+    u: using.bind(null, !1),
+    a: using.bind(null, !0),
+    d: function d() {
+      var o,
+        t = this.e,
+        s = 0;
+      function next() {
+        for (; o = n.pop();) try {
+          if (!o.a && 1 === s) return s = 0, n.push(o), Promise.resolve().then(next);
+          if (o.d) {
+            var r = o.d.call(o.v);
+            if (o.a) return s |= 2, Promise.resolve(r).then(next, err);
+          } else s |= 1;
+        } catch (r) {
+          return err(r);
+        }
+        if (1 === s) return t !== e ? Promise.reject(t) : Promise.resolve();
+        if (t !== e) throw t;
+      }
+      function err(n) {
+        return t = t !== e ? new r(n, t) : n, next();
+      }
+      return next();
+    }
+  };
+}
+module.exports = _usingCtx, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js b/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..b818e2e4a0dcc9c5d731b4e53cac7651c7d982b6
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js
@@ -0,0 +1,69 @@
+var OverloadYield = require("./OverloadYield.js");
+function _wrapAsyncGenerator(e) {
+  return function () {
+    return new AsyncGenerator(e.apply(this, arguments));
+  };
+}
+function AsyncGenerator(e) {
+  var r, t;
+  function resume(r, t) {
+    try {
+      var n = e[r](t),
+        o = n.value,
+        u = o instanceof OverloadYield;
+      Promise.resolve(u ? o.v : o).then(function (t) {
+        if (u) {
+          var i = "return" === r ? "return" : "next";
+          if (!o.k || t.done) return resume(i, t);
+          t = e[i](t).value;
+        }
+        settle(n.done ? "return" : "normal", t);
+      }, function (e) {
+        resume("throw", e);
+      });
+    } catch (e) {
+      settle("throw", e);
+    }
+  }
+  function settle(e, n) {
+    switch (e) {
+      case "return":
+        r.resolve({
+          value: n,
+          done: !0
+        });
+        break;
+      case "throw":
+        r.reject(n);
+        break;
+      default:
+        r.resolve({
+          value: n,
+          done: !1
+        });
+    }
+    (r = r.next) ? resume(r.key, r.arg) : t = null;
+  }
+  this._invoke = function (e, n) {
+    return new Promise(function (o, u) {
+      var i = {
+        key: e,
+        arg: n,
+        resolve: o,
+        reject: u,
+        next: null
+      };
+      t ? t = t.next = i : (r = t = i, resume(e, n));
+    });
+  }, "function" != typeof e["return"] && (this["return"] = void 0);
+}
+AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () {
+  return this;
+}, AsyncGenerator.prototype.next = function (e) {
+  return this._invoke("next", e);
+}, AsyncGenerator.prototype["throw"] = function (e) {
+  return this._invoke("throw", e);
+}, AsyncGenerator.prototype["return"] = function (e) {
+  return this._invoke("return", e);
+};
+module.exports = _wrapAsyncGenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/wrapNativeSuper.js b/node_modules/@babel/runtime/helpers/wrapNativeSuper.js
new file mode 100644
index 0000000000000000000000000000000000000000..acd87aba61f46a45c9946d62113c14cd892ae33a
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/wrapNativeSuper.js
@@ -0,0 +1,27 @@
+var getPrototypeOf = require("./getPrototypeOf.js");
+var setPrototypeOf = require("./setPrototypeOf.js");
+var isNativeFunction = require("./isNativeFunction.js");
+var construct = require("./construct.js");
+function _wrapNativeSuper(t) {
+  var r = "function" == typeof Map ? new Map() : void 0;
+  return module.exports = _wrapNativeSuper = function _wrapNativeSuper(t) {
+    if (null === t || !isNativeFunction(t)) return t;
+    if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function");
+    if (void 0 !== r) {
+      if (r.has(t)) return r.get(t);
+      r.set(t, Wrapper);
+    }
+    function Wrapper() {
+      return construct(t, arguments, getPrototypeOf(this).constructor);
+    }
+    return Wrapper.prototype = Object.create(t.prototype, {
+      constructor: {
+        value: Wrapper,
+        enumerable: !1,
+        writable: !0,
+        configurable: !0
+      }
+    }), setPrototypeOf(Wrapper, t);
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports, _wrapNativeSuper(t);
+}
+module.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/wrapRegExp.js b/node_modules/@babel/runtime/helpers/wrapRegExp.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5271688013133e326815a1d7bbd1e14025440ae
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/wrapRegExp.js
@@ -0,0 +1,51 @@
+var _typeof = require("./typeof.js")["default"];
+var setPrototypeOf = require("./setPrototypeOf.js");
+var inherits = require("./inherits.js");
+function _wrapRegExp() {
+  module.exports = _wrapRegExp = function _wrapRegExp(e, r) {
+    return new BabelRegExp(e, void 0, r);
+  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
+  var e = RegExp.prototype,
+    r = new WeakMap();
+  function BabelRegExp(e, t, p) {
+    var o = RegExp(e, t);
+    return r.set(o, p || r.get(e)), setPrototypeOf(o, BabelRegExp.prototype);
+  }
+  function buildGroups(e, t) {
+    var p = r.get(t);
+    return Object.keys(p).reduce(function (r, t) {
+      var o = p[t];
+      if ("number" == typeof o) r[t] = e[o];else {
+        for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++;
+        r[t] = e[o[i]];
+      }
+      return r;
+    }, Object.create(null));
+  }
+  return inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) {
+    var t = e.exec.call(this, r);
+    if (t) {
+      t.groups = buildGroups(t, this);
+      var p = t.indices;
+      p && (p.groups = buildGroups(p, this));
+    }
+    return t;
+  }, BabelRegExp.prototype[Symbol.replace] = function (t, p) {
+    if ("string" == typeof p) {
+      var o = r.get(this);
+      return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) {
+        var t = o[r];
+        return "$" + (Array.isArray(t) ? t.join("$") : t);
+      }));
+    }
+    if ("function" == typeof p) {
+      var i = this;
+      return e[Symbol.replace].call(this, t, function () {
+        var e = arguments;
+        return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e);
+      });
+    }
+    return e[Symbol.replace].call(this, t, p);
+  }, _wrapRegExp.apply(this, arguments);
+}
+module.exports = _wrapRegExp, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/helpers/writeOnlyError.js b/node_modules/@babel/runtime/helpers/writeOnlyError.js
new file mode 100644
index 0000000000000000000000000000000000000000..c98ee825dc33bac8498ba0799587cf994f6893bc
--- /dev/null
+++ b/node_modules/@babel/runtime/helpers/writeOnlyError.js
@@ -0,0 +1,4 @@
+function _writeOnlyError(r) {
+  throw new TypeError('"' + r + '" is write-only');
+}
+module.exports = _writeOnlyError, module.exports.__esModule = true, module.exports["default"] = module.exports;
\ No newline at end of file
diff --git a/node_modules/@babel/runtime/package.json b/node_modules/@babel/runtime/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7fded93c6fff781bf142c48d77542b61509a1546
--- /dev/null
+++ b/node_modules/@babel/runtime/package.json
@@ -0,0 +1,1092 @@
+{
+  "_from": "@babel/runtime@^7.24.7",
+  "_id": "@babel/runtime@7.26.0",
+  "_inBundle": false,
+  "_integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+  "_location": "/@babel/runtime",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@babel/runtime@^7.24.7",
+    "name": "@babel/runtime",
+    "escapedName": "@babel%2fruntime",
+    "scope": "@babel",
+    "rawSpec": "^7.24.7",
+    "saveSpec": null,
+    "fetchSpec": "^7.24.7"
+  },
+  "_requiredBy": [
+    "/@restart/ui",
+    "/dom-helpers",
+    "/react-bootstrap",
+    "/react-transition-group",
+    "/uncontrollable"
+  ],
+  "_resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+  "_shasum": "8600c2f595f277c60815256418b85356a65173c1",
+  "_spec": "@babel/runtime@^7.24.7",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "The Babel Team",
+    "url": "https://babel.dev/team"
+  },
+  "bugs": {
+    "url": "https://github.com/babel/babel/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "regenerator-runtime": "^0.14.0"
+  },
+  "deprecated": false,
+  "description": "babel's modular runtime helpers",
+  "engines": {
+    "node": ">=6.9.0"
+  },
+  "exports": {
+    "./helpers/OverloadYield": [
+      {
+        "node": "./helpers/OverloadYield.js",
+        "import": "./helpers/esm/OverloadYield.js",
+        "default": "./helpers/OverloadYield.js"
+      },
+      "./helpers/OverloadYield.js"
+    ],
+    "./helpers/esm/OverloadYield": "./helpers/esm/OverloadYield.js",
+    "./helpers/applyDecoratedDescriptor": [
+      {
+        "node": "./helpers/applyDecoratedDescriptor.js",
+        "import": "./helpers/esm/applyDecoratedDescriptor.js",
+        "default": "./helpers/applyDecoratedDescriptor.js"
+      },
+      "./helpers/applyDecoratedDescriptor.js"
+    ],
+    "./helpers/esm/applyDecoratedDescriptor": "./helpers/esm/applyDecoratedDescriptor.js",
+    "./helpers/applyDecs2311": [
+      {
+        "node": "./helpers/applyDecs2311.js",
+        "import": "./helpers/esm/applyDecs2311.js",
+        "default": "./helpers/applyDecs2311.js"
+      },
+      "./helpers/applyDecs2311.js"
+    ],
+    "./helpers/esm/applyDecs2311": "./helpers/esm/applyDecs2311.js",
+    "./helpers/arrayLikeToArray": [
+      {
+        "node": "./helpers/arrayLikeToArray.js",
+        "import": "./helpers/esm/arrayLikeToArray.js",
+        "default": "./helpers/arrayLikeToArray.js"
+      },
+      "./helpers/arrayLikeToArray.js"
+    ],
+    "./helpers/esm/arrayLikeToArray": "./helpers/esm/arrayLikeToArray.js",
+    "./helpers/arrayWithHoles": [
+      {
+        "node": "./helpers/arrayWithHoles.js",
+        "import": "./helpers/esm/arrayWithHoles.js",
+        "default": "./helpers/arrayWithHoles.js"
+      },
+      "./helpers/arrayWithHoles.js"
+    ],
+    "./helpers/esm/arrayWithHoles": "./helpers/esm/arrayWithHoles.js",
+    "./helpers/arrayWithoutHoles": [
+      {
+        "node": "./helpers/arrayWithoutHoles.js",
+        "import": "./helpers/esm/arrayWithoutHoles.js",
+        "default": "./helpers/arrayWithoutHoles.js"
+      },
+      "./helpers/arrayWithoutHoles.js"
+    ],
+    "./helpers/esm/arrayWithoutHoles": "./helpers/esm/arrayWithoutHoles.js",
+    "./helpers/assertClassBrand": [
+      {
+        "node": "./helpers/assertClassBrand.js",
+        "import": "./helpers/esm/assertClassBrand.js",
+        "default": "./helpers/assertClassBrand.js"
+      },
+      "./helpers/assertClassBrand.js"
+    ],
+    "./helpers/esm/assertClassBrand": "./helpers/esm/assertClassBrand.js",
+    "./helpers/assertThisInitialized": [
+      {
+        "node": "./helpers/assertThisInitialized.js",
+        "import": "./helpers/esm/assertThisInitialized.js",
+        "default": "./helpers/assertThisInitialized.js"
+      },
+      "./helpers/assertThisInitialized.js"
+    ],
+    "./helpers/esm/assertThisInitialized": "./helpers/esm/assertThisInitialized.js",
+    "./helpers/asyncGeneratorDelegate": [
+      {
+        "node": "./helpers/asyncGeneratorDelegate.js",
+        "import": "./helpers/esm/asyncGeneratorDelegate.js",
+        "default": "./helpers/asyncGeneratorDelegate.js"
+      },
+      "./helpers/asyncGeneratorDelegate.js"
+    ],
+    "./helpers/esm/asyncGeneratorDelegate": "./helpers/esm/asyncGeneratorDelegate.js",
+    "./helpers/asyncIterator": [
+      {
+        "node": "./helpers/asyncIterator.js",
+        "import": "./helpers/esm/asyncIterator.js",
+        "default": "./helpers/asyncIterator.js"
+      },
+      "./helpers/asyncIterator.js"
+    ],
+    "./helpers/esm/asyncIterator": "./helpers/esm/asyncIterator.js",
+    "./helpers/asyncToGenerator": [
+      {
+        "node": "./helpers/asyncToGenerator.js",
+        "import": "./helpers/esm/asyncToGenerator.js",
+        "default": "./helpers/asyncToGenerator.js"
+      },
+      "./helpers/asyncToGenerator.js"
+    ],
+    "./helpers/esm/asyncToGenerator": "./helpers/esm/asyncToGenerator.js",
+    "./helpers/awaitAsyncGenerator": [
+      {
+        "node": "./helpers/awaitAsyncGenerator.js",
+        "import": "./helpers/esm/awaitAsyncGenerator.js",
+        "default": "./helpers/awaitAsyncGenerator.js"
+      },
+      "./helpers/awaitAsyncGenerator.js"
+    ],
+    "./helpers/esm/awaitAsyncGenerator": "./helpers/esm/awaitAsyncGenerator.js",
+    "./helpers/callSuper": [
+      {
+        "node": "./helpers/callSuper.js",
+        "import": "./helpers/esm/callSuper.js",
+        "default": "./helpers/callSuper.js"
+      },
+      "./helpers/callSuper.js"
+    ],
+    "./helpers/esm/callSuper": "./helpers/esm/callSuper.js",
+    "./helpers/checkInRHS": [
+      {
+        "node": "./helpers/checkInRHS.js",
+        "import": "./helpers/esm/checkInRHS.js",
+        "default": "./helpers/checkInRHS.js"
+      },
+      "./helpers/checkInRHS.js"
+    ],
+    "./helpers/esm/checkInRHS": "./helpers/esm/checkInRHS.js",
+    "./helpers/checkPrivateRedeclaration": [
+      {
+        "node": "./helpers/checkPrivateRedeclaration.js",
+        "import": "./helpers/esm/checkPrivateRedeclaration.js",
+        "default": "./helpers/checkPrivateRedeclaration.js"
+      },
+      "./helpers/checkPrivateRedeclaration.js"
+    ],
+    "./helpers/esm/checkPrivateRedeclaration": "./helpers/esm/checkPrivateRedeclaration.js",
+    "./helpers/classCallCheck": [
+      {
+        "node": "./helpers/classCallCheck.js",
+        "import": "./helpers/esm/classCallCheck.js",
+        "default": "./helpers/classCallCheck.js"
+      },
+      "./helpers/classCallCheck.js"
+    ],
+    "./helpers/esm/classCallCheck": "./helpers/esm/classCallCheck.js",
+    "./helpers/classNameTDZError": [
+      {
+        "node": "./helpers/classNameTDZError.js",
+        "import": "./helpers/esm/classNameTDZError.js",
+        "default": "./helpers/classNameTDZError.js"
+      },
+      "./helpers/classNameTDZError.js"
+    ],
+    "./helpers/esm/classNameTDZError": "./helpers/esm/classNameTDZError.js",
+    "./helpers/classPrivateFieldGet2": [
+      {
+        "node": "./helpers/classPrivateFieldGet2.js",
+        "import": "./helpers/esm/classPrivateFieldGet2.js",
+        "default": "./helpers/classPrivateFieldGet2.js"
+      },
+      "./helpers/classPrivateFieldGet2.js"
+    ],
+    "./helpers/esm/classPrivateFieldGet2": "./helpers/esm/classPrivateFieldGet2.js",
+    "./helpers/classPrivateFieldInitSpec": [
+      {
+        "node": "./helpers/classPrivateFieldInitSpec.js",
+        "import": "./helpers/esm/classPrivateFieldInitSpec.js",
+        "default": "./helpers/classPrivateFieldInitSpec.js"
+      },
+      "./helpers/classPrivateFieldInitSpec.js"
+    ],
+    "./helpers/esm/classPrivateFieldInitSpec": "./helpers/esm/classPrivateFieldInitSpec.js",
+    "./helpers/classPrivateFieldLooseBase": [
+      {
+        "node": "./helpers/classPrivateFieldLooseBase.js",
+        "import": "./helpers/esm/classPrivateFieldLooseBase.js",
+        "default": "./helpers/classPrivateFieldLooseBase.js"
+      },
+      "./helpers/classPrivateFieldLooseBase.js"
+    ],
+    "./helpers/esm/classPrivateFieldLooseBase": "./helpers/esm/classPrivateFieldLooseBase.js",
+    "./helpers/classPrivateFieldLooseKey": [
+      {
+        "node": "./helpers/classPrivateFieldLooseKey.js",
+        "import": "./helpers/esm/classPrivateFieldLooseKey.js",
+        "default": "./helpers/classPrivateFieldLooseKey.js"
+      },
+      "./helpers/classPrivateFieldLooseKey.js"
+    ],
+    "./helpers/esm/classPrivateFieldLooseKey": "./helpers/esm/classPrivateFieldLooseKey.js",
+    "./helpers/classPrivateFieldSet2": [
+      {
+        "node": "./helpers/classPrivateFieldSet2.js",
+        "import": "./helpers/esm/classPrivateFieldSet2.js",
+        "default": "./helpers/classPrivateFieldSet2.js"
+      },
+      "./helpers/classPrivateFieldSet2.js"
+    ],
+    "./helpers/esm/classPrivateFieldSet2": "./helpers/esm/classPrivateFieldSet2.js",
+    "./helpers/classPrivateGetter": [
+      {
+        "node": "./helpers/classPrivateGetter.js",
+        "import": "./helpers/esm/classPrivateGetter.js",
+        "default": "./helpers/classPrivateGetter.js"
+      },
+      "./helpers/classPrivateGetter.js"
+    ],
+    "./helpers/esm/classPrivateGetter": "./helpers/esm/classPrivateGetter.js",
+    "./helpers/classPrivateMethodInitSpec": [
+      {
+        "node": "./helpers/classPrivateMethodInitSpec.js",
+        "import": "./helpers/esm/classPrivateMethodInitSpec.js",
+        "default": "./helpers/classPrivateMethodInitSpec.js"
+      },
+      "./helpers/classPrivateMethodInitSpec.js"
+    ],
+    "./helpers/esm/classPrivateMethodInitSpec": "./helpers/esm/classPrivateMethodInitSpec.js",
+    "./helpers/classPrivateSetter": [
+      {
+        "node": "./helpers/classPrivateSetter.js",
+        "import": "./helpers/esm/classPrivateSetter.js",
+        "default": "./helpers/classPrivateSetter.js"
+      },
+      "./helpers/classPrivateSetter.js"
+    ],
+    "./helpers/esm/classPrivateSetter": "./helpers/esm/classPrivateSetter.js",
+    "./helpers/classStaticPrivateMethodGet": [
+      {
+        "node": "./helpers/classStaticPrivateMethodGet.js",
+        "import": "./helpers/esm/classStaticPrivateMethodGet.js",
+        "default": "./helpers/classStaticPrivateMethodGet.js"
+      },
+      "./helpers/classStaticPrivateMethodGet.js"
+    ],
+    "./helpers/esm/classStaticPrivateMethodGet": "./helpers/esm/classStaticPrivateMethodGet.js",
+    "./helpers/construct": [
+      {
+        "node": "./helpers/construct.js",
+        "import": "./helpers/esm/construct.js",
+        "default": "./helpers/construct.js"
+      },
+      "./helpers/construct.js"
+    ],
+    "./helpers/esm/construct": "./helpers/esm/construct.js",
+    "./helpers/createClass": [
+      {
+        "node": "./helpers/createClass.js",
+        "import": "./helpers/esm/createClass.js",
+        "default": "./helpers/createClass.js"
+      },
+      "./helpers/createClass.js"
+    ],
+    "./helpers/esm/createClass": "./helpers/esm/createClass.js",
+    "./helpers/createForOfIteratorHelper": [
+      {
+        "node": "./helpers/createForOfIteratorHelper.js",
+        "import": "./helpers/esm/createForOfIteratorHelper.js",
+        "default": "./helpers/createForOfIteratorHelper.js"
+      },
+      "./helpers/createForOfIteratorHelper.js"
+    ],
+    "./helpers/esm/createForOfIteratorHelper": "./helpers/esm/createForOfIteratorHelper.js",
+    "./helpers/createForOfIteratorHelperLoose": [
+      {
+        "node": "./helpers/createForOfIteratorHelperLoose.js",
+        "import": "./helpers/esm/createForOfIteratorHelperLoose.js",
+        "default": "./helpers/createForOfIteratorHelperLoose.js"
+      },
+      "./helpers/createForOfIteratorHelperLoose.js"
+    ],
+    "./helpers/esm/createForOfIteratorHelperLoose": "./helpers/esm/createForOfIteratorHelperLoose.js",
+    "./helpers/createSuper": [
+      {
+        "node": "./helpers/createSuper.js",
+        "import": "./helpers/esm/createSuper.js",
+        "default": "./helpers/createSuper.js"
+      },
+      "./helpers/createSuper.js"
+    ],
+    "./helpers/esm/createSuper": "./helpers/esm/createSuper.js",
+    "./helpers/decorate": [
+      {
+        "node": "./helpers/decorate.js",
+        "import": "./helpers/esm/decorate.js",
+        "default": "./helpers/decorate.js"
+      },
+      "./helpers/decorate.js"
+    ],
+    "./helpers/esm/decorate": "./helpers/esm/decorate.js",
+    "./helpers/defaults": [
+      {
+        "node": "./helpers/defaults.js",
+        "import": "./helpers/esm/defaults.js",
+        "default": "./helpers/defaults.js"
+      },
+      "./helpers/defaults.js"
+    ],
+    "./helpers/esm/defaults": "./helpers/esm/defaults.js",
+    "./helpers/defineAccessor": [
+      {
+        "node": "./helpers/defineAccessor.js",
+        "import": "./helpers/esm/defineAccessor.js",
+        "default": "./helpers/defineAccessor.js"
+      },
+      "./helpers/defineAccessor.js"
+    ],
+    "./helpers/esm/defineAccessor": "./helpers/esm/defineAccessor.js",
+    "./helpers/defineProperty": [
+      {
+        "node": "./helpers/defineProperty.js",
+        "import": "./helpers/esm/defineProperty.js",
+        "default": "./helpers/defineProperty.js"
+      },
+      "./helpers/defineProperty.js"
+    ],
+    "./helpers/esm/defineProperty": "./helpers/esm/defineProperty.js",
+    "./helpers/extends": [
+      {
+        "node": "./helpers/extends.js",
+        "import": "./helpers/esm/extends.js",
+        "default": "./helpers/extends.js"
+      },
+      "./helpers/extends.js"
+    ],
+    "./helpers/esm/extends": "./helpers/esm/extends.js",
+    "./helpers/get": [
+      {
+        "node": "./helpers/get.js",
+        "import": "./helpers/esm/get.js",
+        "default": "./helpers/get.js"
+      },
+      "./helpers/get.js"
+    ],
+    "./helpers/esm/get": "./helpers/esm/get.js",
+    "./helpers/getPrototypeOf": [
+      {
+        "node": "./helpers/getPrototypeOf.js",
+        "import": "./helpers/esm/getPrototypeOf.js",
+        "default": "./helpers/getPrototypeOf.js"
+      },
+      "./helpers/getPrototypeOf.js"
+    ],
+    "./helpers/esm/getPrototypeOf": "./helpers/esm/getPrototypeOf.js",
+    "./helpers/identity": [
+      {
+        "node": "./helpers/identity.js",
+        "import": "./helpers/esm/identity.js",
+        "default": "./helpers/identity.js"
+      },
+      "./helpers/identity.js"
+    ],
+    "./helpers/esm/identity": "./helpers/esm/identity.js",
+    "./helpers/importDeferProxy": [
+      {
+        "node": "./helpers/importDeferProxy.js",
+        "import": "./helpers/esm/importDeferProxy.js",
+        "default": "./helpers/importDeferProxy.js"
+      },
+      "./helpers/importDeferProxy.js"
+    ],
+    "./helpers/esm/importDeferProxy": "./helpers/esm/importDeferProxy.js",
+    "./helpers/inherits": [
+      {
+        "node": "./helpers/inherits.js",
+        "import": "./helpers/esm/inherits.js",
+        "default": "./helpers/inherits.js"
+      },
+      "./helpers/inherits.js"
+    ],
+    "./helpers/esm/inherits": "./helpers/esm/inherits.js",
+    "./helpers/inheritsLoose": [
+      {
+        "node": "./helpers/inheritsLoose.js",
+        "import": "./helpers/esm/inheritsLoose.js",
+        "default": "./helpers/inheritsLoose.js"
+      },
+      "./helpers/inheritsLoose.js"
+    ],
+    "./helpers/esm/inheritsLoose": "./helpers/esm/inheritsLoose.js",
+    "./helpers/initializerDefineProperty": [
+      {
+        "node": "./helpers/initializerDefineProperty.js",
+        "import": "./helpers/esm/initializerDefineProperty.js",
+        "default": "./helpers/initializerDefineProperty.js"
+      },
+      "./helpers/initializerDefineProperty.js"
+    ],
+    "./helpers/esm/initializerDefineProperty": "./helpers/esm/initializerDefineProperty.js",
+    "./helpers/initializerWarningHelper": [
+      {
+        "node": "./helpers/initializerWarningHelper.js",
+        "import": "./helpers/esm/initializerWarningHelper.js",
+        "default": "./helpers/initializerWarningHelper.js"
+      },
+      "./helpers/initializerWarningHelper.js"
+    ],
+    "./helpers/esm/initializerWarningHelper": "./helpers/esm/initializerWarningHelper.js",
+    "./helpers/instanceof": [
+      {
+        "node": "./helpers/instanceof.js",
+        "import": "./helpers/esm/instanceof.js",
+        "default": "./helpers/instanceof.js"
+      },
+      "./helpers/instanceof.js"
+    ],
+    "./helpers/esm/instanceof": "./helpers/esm/instanceof.js",
+    "./helpers/interopRequireDefault": [
+      {
+        "node": "./helpers/interopRequireDefault.js",
+        "import": "./helpers/esm/interopRequireDefault.js",
+        "default": "./helpers/interopRequireDefault.js"
+      },
+      "./helpers/interopRequireDefault.js"
+    ],
+    "./helpers/esm/interopRequireDefault": "./helpers/esm/interopRequireDefault.js",
+    "./helpers/interopRequireWildcard": [
+      {
+        "node": "./helpers/interopRequireWildcard.js",
+        "import": "./helpers/esm/interopRequireWildcard.js",
+        "default": "./helpers/interopRequireWildcard.js"
+      },
+      "./helpers/interopRequireWildcard.js"
+    ],
+    "./helpers/esm/interopRequireWildcard": "./helpers/esm/interopRequireWildcard.js",
+    "./helpers/isNativeFunction": [
+      {
+        "node": "./helpers/isNativeFunction.js",
+        "import": "./helpers/esm/isNativeFunction.js",
+        "default": "./helpers/isNativeFunction.js"
+      },
+      "./helpers/isNativeFunction.js"
+    ],
+    "./helpers/esm/isNativeFunction": "./helpers/esm/isNativeFunction.js",
+    "./helpers/isNativeReflectConstruct": [
+      {
+        "node": "./helpers/isNativeReflectConstruct.js",
+        "import": "./helpers/esm/isNativeReflectConstruct.js",
+        "default": "./helpers/isNativeReflectConstruct.js"
+      },
+      "./helpers/isNativeReflectConstruct.js"
+    ],
+    "./helpers/esm/isNativeReflectConstruct": "./helpers/esm/isNativeReflectConstruct.js",
+    "./helpers/iterableToArray": [
+      {
+        "node": "./helpers/iterableToArray.js",
+        "import": "./helpers/esm/iterableToArray.js",
+        "default": "./helpers/iterableToArray.js"
+      },
+      "./helpers/iterableToArray.js"
+    ],
+    "./helpers/esm/iterableToArray": "./helpers/esm/iterableToArray.js",
+    "./helpers/iterableToArrayLimit": [
+      {
+        "node": "./helpers/iterableToArrayLimit.js",
+        "import": "./helpers/esm/iterableToArrayLimit.js",
+        "default": "./helpers/iterableToArrayLimit.js"
+      },
+      "./helpers/iterableToArrayLimit.js"
+    ],
+    "./helpers/esm/iterableToArrayLimit": "./helpers/esm/iterableToArrayLimit.js",
+    "./helpers/jsx": [
+      {
+        "node": "./helpers/jsx.js",
+        "import": "./helpers/esm/jsx.js",
+        "default": "./helpers/jsx.js"
+      },
+      "./helpers/jsx.js"
+    ],
+    "./helpers/esm/jsx": "./helpers/esm/jsx.js",
+    "./helpers/maybeArrayLike": [
+      {
+        "node": "./helpers/maybeArrayLike.js",
+        "import": "./helpers/esm/maybeArrayLike.js",
+        "default": "./helpers/maybeArrayLike.js"
+      },
+      "./helpers/maybeArrayLike.js"
+    ],
+    "./helpers/esm/maybeArrayLike": "./helpers/esm/maybeArrayLike.js",
+    "./helpers/newArrowCheck": [
+      {
+        "node": "./helpers/newArrowCheck.js",
+        "import": "./helpers/esm/newArrowCheck.js",
+        "default": "./helpers/newArrowCheck.js"
+      },
+      "./helpers/newArrowCheck.js"
+    ],
+    "./helpers/esm/newArrowCheck": "./helpers/esm/newArrowCheck.js",
+    "./helpers/nonIterableRest": [
+      {
+        "node": "./helpers/nonIterableRest.js",
+        "import": "./helpers/esm/nonIterableRest.js",
+        "default": "./helpers/nonIterableRest.js"
+      },
+      "./helpers/nonIterableRest.js"
+    ],
+    "./helpers/esm/nonIterableRest": "./helpers/esm/nonIterableRest.js",
+    "./helpers/nonIterableSpread": [
+      {
+        "node": "./helpers/nonIterableSpread.js",
+        "import": "./helpers/esm/nonIterableSpread.js",
+        "default": "./helpers/nonIterableSpread.js"
+      },
+      "./helpers/nonIterableSpread.js"
+    ],
+    "./helpers/esm/nonIterableSpread": "./helpers/esm/nonIterableSpread.js",
+    "./helpers/nullishReceiverError": [
+      {
+        "node": "./helpers/nullishReceiverError.js",
+        "import": "./helpers/esm/nullishReceiverError.js",
+        "default": "./helpers/nullishReceiverError.js"
+      },
+      "./helpers/nullishReceiverError.js"
+    ],
+    "./helpers/esm/nullishReceiverError": "./helpers/esm/nullishReceiverError.js",
+    "./helpers/objectDestructuringEmpty": [
+      {
+        "node": "./helpers/objectDestructuringEmpty.js",
+        "import": "./helpers/esm/objectDestructuringEmpty.js",
+        "default": "./helpers/objectDestructuringEmpty.js"
+      },
+      "./helpers/objectDestructuringEmpty.js"
+    ],
+    "./helpers/esm/objectDestructuringEmpty": "./helpers/esm/objectDestructuringEmpty.js",
+    "./helpers/objectSpread2": [
+      {
+        "node": "./helpers/objectSpread2.js",
+        "import": "./helpers/esm/objectSpread2.js",
+        "default": "./helpers/objectSpread2.js"
+      },
+      "./helpers/objectSpread2.js"
+    ],
+    "./helpers/esm/objectSpread2": "./helpers/esm/objectSpread2.js",
+    "./helpers/objectWithoutProperties": [
+      {
+        "node": "./helpers/objectWithoutProperties.js",
+        "import": "./helpers/esm/objectWithoutProperties.js",
+        "default": "./helpers/objectWithoutProperties.js"
+      },
+      "./helpers/objectWithoutProperties.js"
+    ],
+    "./helpers/esm/objectWithoutProperties": "./helpers/esm/objectWithoutProperties.js",
+    "./helpers/objectWithoutPropertiesLoose": [
+      {
+        "node": "./helpers/objectWithoutPropertiesLoose.js",
+        "import": "./helpers/esm/objectWithoutPropertiesLoose.js",
+        "default": "./helpers/objectWithoutPropertiesLoose.js"
+      },
+      "./helpers/objectWithoutPropertiesLoose.js"
+    ],
+    "./helpers/esm/objectWithoutPropertiesLoose": "./helpers/esm/objectWithoutPropertiesLoose.js",
+    "./helpers/possibleConstructorReturn": [
+      {
+        "node": "./helpers/possibleConstructorReturn.js",
+        "import": "./helpers/esm/possibleConstructorReturn.js",
+        "default": "./helpers/possibleConstructorReturn.js"
+      },
+      "./helpers/possibleConstructorReturn.js"
+    ],
+    "./helpers/esm/possibleConstructorReturn": "./helpers/esm/possibleConstructorReturn.js",
+    "./helpers/readOnlyError": [
+      {
+        "node": "./helpers/readOnlyError.js",
+        "import": "./helpers/esm/readOnlyError.js",
+        "default": "./helpers/readOnlyError.js"
+      },
+      "./helpers/readOnlyError.js"
+    ],
+    "./helpers/esm/readOnlyError": "./helpers/esm/readOnlyError.js",
+    "./helpers/regeneratorRuntime": [
+      {
+        "node": "./helpers/regeneratorRuntime.js",
+        "import": "./helpers/esm/regeneratorRuntime.js",
+        "default": "./helpers/regeneratorRuntime.js"
+      },
+      "./helpers/regeneratorRuntime.js"
+    ],
+    "./helpers/esm/regeneratorRuntime": "./helpers/esm/regeneratorRuntime.js",
+    "./helpers/set": [
+      {
+        "node": "./helpers/set.js",
+        "import": "./helpers/esm/set.js",
+        "default": "./helpers/set.js"
+      },
+      "./helpers/set.js"
+    ],
+    "./helpers/esm/set": "./helpers/esm/set.js",
+    "./helpers/setFunctionName": [
+      {
+        "node": "./helpers/setFunctionName.js",
+        "import": "./helpers/esm/setFunctionName.js",
+        "default": "./helpers/setFunctionName.js"
+      },
+      "./helpers/setFunctionName.js"
+    ],
+    "./helpers/esm/setFunctionName": "./helpers/esm/setFunctionName.js",
+    "./helpers/setPrototypeOf": [
+      {
+        "node": "./helpers/setPrototypeOf.js",
+        "import": "./helpers/esm/setPrototypeOf.js",
+        "default": "./helpers/setPrototypeOf.js"
+      },
+      "./helpers/setPrototypeOf.js"
+    ],
+    "./helpers/esm/setPrototypeOf": "./helpers/esm/setPrototypeOf.js",
+    "./helpers/skipFirstGeneratorNext": [
+      {
+        "node": "./helpers/skipFirstGeneratorNext.js",
+        "import": "./helpers/esm/skipFirstGeneratorNext.js",
+        "default": "./helpers/skipFirstGeneratorNext.js"
+      },
+      "./helpers/skipFirstGeneratorNext.js"
+    ],
+    "./helpers/esm/skipFirstGeneratorNext": "./helpers/esm/skipFirstGeneratorNext.js",
+    "./helpers/slicedToArray": [
+      {
+        "node": "./helpers/slicedToArray.js",
+        "import": "./helpers/esm/slicedToArray.js",
+        "default": "./helpers/slicedToArray.js"
+      },
+      "./helpers/slicedToArray.js"
+    ],
+    "./helpers/esm/slicedToArray": "./helpers/esm/slicedToArray.js",
+    "./helpers/superPropBase": [
+      {
+        "node": "./helpers/superPropBase.js",
+        "import": "./helpers/esm/superPropBase.js",
+        "default": "./helpers/superPropBase.js"
+      },
+      "./helpers/superPropBase.js"
+    ],
+    "./helpers/esm/superPropBase": "./helpers/esm/superPropBase.js",
+    "./helpers/superPropGet": [
+      {
+        "node": "./helpers/superPropGet.js",
+        "import": "./helpers/esm/superPropGet.js",
+        "default": "./helpers/superPropGet.js"
+      },
+      "./helpers/superPropGet.js"
+    ],
+    "./helpers/esm/superPropGet": "./helpers/esm/superPropGet.js",
+    "./helpers/superPropSet": [
+      {
+        "node": "./helpers/superPropSet.js",
+        "import": "./helpers/esm/superPropSet.js",
+        "default": "./helpers/superPropSet.js"
+      },
+      "./helpers/superPropSet.js"
+    ],
+    "./helpers/esm/superPropSet": "./helpers/esm/superPropSet.js",
+    "./helpers/taggedTemplateLiteral": [
+      {
+        "node": "./helpers/taggedTemplateLiteral.js",
+        "import": "./helpers/esm/taggedTemplateLiteral.js",
+        "default": "./helpers/taggedTemplateLiteral.js"
+      },
+      "./helpers/taggedTemplateLiteral.js"
+    ],
+    "./helpers/esm/taggedTemplateLiteral": "./helpers/esm/taggedTemplateLiteral.js",
+    "./helpers/taggedTemplateLiteralLoose": [
+      {
+        "node": "./helpers/taggedTemplateLiteralLoose.js",
+        "import": "./helpers/esm/taggedTemplateLiteralLoose.js",
+        "default": "./helpers/taggedTemplateLiteralLoose.js"
+      },
+      "./helpers/taggedTemplateLiteralLoose.js"
+    ],
+    "./helpers/esm/taggedTemplateLiteralLoose": "./helpers/esm/taggedTemplateLiteralLoose.js",
+    "./helpers/tdz": [
+      {
+        "node": "./helpers/tdz.js",
+        "import": "./helpers/esm/tdz.js",
+        "default": "./helpers/tdz.js"
+      },
+      "./helpers/tdz.js"
+    ],
+    "./helpers/esm/tdz": "./helpers/esm/tdz.js",
+    "./helpers/temporalRef": [
+      {
+        "node": "./helpers/temporalRef.js",
+        "import": "./helpers/esm/temporalRef.js",
+        "default": "./helpers/temporalRef.js"
+      },
+      "./helpers/temporalRef.js"
+    ],
+    "./helpers/esm/temporalRef": "./helpers/esm/temporalRef.js",
+    "./helpers/temporalUndefined": [
+      {
+        "node": "./helpers/temporalUndefined.js",
+        "import": "./helpers/esm/temporalUndefined.js",
+        "default": "./helpers/temporalUndefined.js"
+      },
+      "./helpers/temporalUndefined.js"
+    ],
+    "./helpers/esm/temporalUndefined": "./helpers/esm/temporalUndefined.js",
+    "./helpers/toArray": [
+      {
+        "node": "./helpers/toArray.js",
+        "import": "./helpers/esm/toArray.js",
+        "default": "./helpers/toArray.js"
+      },
+      "./helpers/toArray.js"
+    ],
+    "./helpers/esm/toArray": "./helpers/esm/toArray.js",
+    "./helpers/toConsumableArray": [
+      {
+        "node": "./helpers/toConsumableArray.js",
+        "import": "./helpers/esm/toConsumableArray.js",
+        "default": "./helpers/toConsumableArray.js"
+      },
+      "./helpers/toConsumableArray.js"
+    ],
+    "./helpers/esm/toConsumableArray": "./helpers/esm/toConsumableArray.js",
+    "./helpers/toPrimitive": [
+      {
+        "node": "./helpers/toPrimitive.js",
+        "import": "./helpers/esm/toPrimitive.js",
+        "default": "./helpers/toPrimitive.js"
+      },
+      "./helpers/toPrimitive.js"
+    ],
+    "./helpers/esm/toPrimitive": "./helpers/esm/toPrimitive.js",
+    "./helpers/toPropertyKey": [
+      {
+        "node": "./helpers/toPropertyKey.js",
+        "import": "./helpers/esm/toPropertyKey.js",
+        "default": "./helpers/toPropertyKey.js"
+      },
+      "./helpers/toPropertyKey.js"
+    ],
+    "./helpers/esm/toPropertyKey": "./helpers/esm/toPropertyKey.js",
+    "./helpers/toSetter": [
+      {
+        "node": "./helpers/toSetter.js",
+        "import": "./helpers/esm/toSetter.js",
+        "default": "./helpers/toSetter.js"
+      },
+      "./helpers/toSetter.js"
+    ],
+    "./helpers/esm/toSetter": "./helpers/esm/toSetter.js",
+    "./helpers/typeof": [
+      {
+        "node": "./helpers/typeof.js",
+        "import": "./helpers/esm/typeof.js",
+        "default": "./helpers/typeof.js"
+      },
+      "./helpers/typeof.js"
+    ],
+    "./helpers/esm/typeof": "./helpers/esm/typeof.js",
+    "./helpers/unsupportedIterableToArray": [
+      {
+        "node": "./helpers/unsupportedIterableToArray.js",
+        "import": "./helpers/esm/unsupportedIterableToArray.js",
+        "default": "./helpers/unsupportedIterableToArray.js"
+      },
+      "./helpers/unsupportedIterableToArray.js"
+    ],
+    "./helpers/esm/unsupportedIterableToArray": "./helpers/esm/unsupportedIterableToArray.js",
+    "./helpers/usingCtx": [
+      {
+        "node": "./helpers/usingCtx.js",
+        "import": "./helpers/esm/usingCtx.js",
+        "default": "./helpers/usingCtx.js"
+      },
+      "./helpers/usingCtx.js"
+    ],
+    "./helpers/esm/usingCtx": "./helpers/esm/usingCtx.js",
+    "./helpers/wrapAsyncGenerator": [
+      {
+        "node": "./helpers/wrapAsyncGenerator.js",
+        "import": "./helpers/esm/wrapAsyncGenerator.js",
+        "default": "./helpers/wrapAsyncGenerator.js"
+      },
+      "./helpers/wrapAsyncGenerator.js"
+    ],
+    "./helpers/esm/wrapAsyncGenerator": "./helpers/esm/wrapAsyncGenerator.js",
+    "./helpers/wrapNativeSuper": [
+      {
+        "node": "./helpers/wrapNativeSuper.js",
+        "import": "./helpers/esm/wrapNativeSuper.js",
+        "default": "./helpers/wrapNativeSuper.js"
+      },
+      "./helpers/wrapNativeSuper.js"
+    ],
+    "./helpers/esm/wrapNativeSuper": "./helpers/esm/wrapNativeSuper.js",
+    "./helpers/wrapRegExp": [
+      {
+        "node": "./helpers/wrapRegExp.js",
+        "import": "./helpers/esm/wrapRegExp.js",
+        "default": "./helpers/wrapRegExp.js"
+      },
+      "./helpers/wrapRegExp.js"
+    ],
+    "./helpers/esm/wrapRegExp": "./helpers/esm/wrapRegExp.js",
+    "./helpers/writeOnlyError": [
+      {
+        "node": "./helpers/writeOnlyError.js",
+        "import": "./helpers/esm/writeOnlyError.js",
+        "default": "./helpers/writeOnlyError.js"
+      },
+      "./helpers/writeOnlyError.js"
+    ],
+    "./helpers/esm/writeOnlyError": "./helpers/esm/writeOnlyError.js",
+    "./helpers/AwaitValue": [
+      {
+        "node": "./helpers/AwaitValue.js",
+        "import": "./helpers/esm/AwaitValue.js",
+        "default": "./helpers/AwaitValue.js"
+      },
+      "./helpers/AwaitValue.js"
+    ],
+    "./helpers/esm/AwaitValue": "./helpers/esm/AwaitValue.js",
+    "./helpers/applyDecs": [
+      {
+        "node": "./helpers/applyDecs.js",
+        "import": "./helpers/esm/applyDecs.js",
+        "default": "./helpers/applyDecs.js"
+      },
+      "./helpers/applyDecs.js"
+    ],
+    "./helpers/esm/applyDecs": "./helpers/esm/applyDecs.js",
+    "./helpers/applyDecs2203": [
+      {
+        "node": "./helpers/applyDecs2203.js",
+        "import": "./helpers/esm/applyDecs2203.js",
+        "default": "./helpers/applyDecs2203.js"
+      },
+      "./helpers/applyDecs2203.js"
+    ],
+    "./helpers/esm/applyDecs2203": "./helpers/esm/applyDecs2203.js",
+    "./helpers/applyDecs2203R": [
+      {
+        "node": "./helpers/applyDecs2203R.js",
+        "import": "./helpers/esm/applyDecs2203R.js",
+        "default": "./helpers/applyDecs2203R.js"
+      },
+      "./helpers/applyDecs2203R.js"
+    ],
+    "./helpers/esm/applyDecs2203R": "./helpers/esm/applyDecs2203R.js",
+    "./helpers/applyDecs2301": [
+      {
+        "node": "./helpers/applyDecs2301.js",
+        "import": "./helpers/esm/applyDecs2301.js",
+        "default": "./helpers/applyDecs2301.js"
+      },
+      "./helpers/applyDecs2301.js"
+    ],
+    "./helpers/esm/applyDecs2301": "./helpers/esm/applyDecs2301.js",
+    "./helpers/applyDecs2305": [
+      {
+        "node": "./helpers/applyDecs2305.js",
+        "import": "./helpers/esm/applyDecs2305.js",
+        "default": "./helpers/applyDecs2305.js"
+      },
+      "./helpers/applyDecs2305.js"
+    ],
+    "./helpers/esm/applyDecs2305": "./helpers/esm/applyDecs2305.js",
+    "./helpers/classApplyDescriptorDestructureSet": [
+      {
+        "node": "./helpers/classApplyDescriptorDestructureSet.js",
+        "import": "./helpers/esm/classApplyDescriptorDestructureSet.js",
+        "default": "./helpers/classApplyDescriptorDestructureSet.js"
+      },
+      "./helpers/classApplyDescriptorDestructureSet.js"
+    ],
+    "./helpers/esm/classApplyDescriptorDestructureSet": "./helpers/esm/classApplyDescriptorDestructureSet.js",
+    "./helpers/classApplyDescriptorGet": [
+      {
+        "node": "./helpers/classApplyDescriptorGet.js",
+        "import": "./helpers/esm/classApplyDescriptorGet.js",
+        "default": "./helpers/classApplyDescriptorGet.js"
+      },
+      "./helpers/classApplyDescriptorGet.js"
+    ],
+    "./helpers/esm/classApplyDescriptorGet": "./helpers/esm/classApplyDescriptorGet.js",
+    "./helpers/classApplyDescriptorSet": [
+      {
+        "node": "./helpers/classApplyDescriptorSet.js",
+        "import": "./helpers/esm/classApplyDescriptorSet.js",
+        "default": "./helpers/classApplyDescriptorSet.js"
+      },
+      "./helpers/classApplyDescriptorSet.js"
+    ],
+    "./helpers/esm/classApplyDescriptorSet": "./helpers/esm/classApplyDescriptorSet.js",
+    "./helpers/classCheckPrivateStaticAccess": [
+      {
+        "node": "./helpers/classCheckPrivateStaticAccess.js",
+        "import": "./helpers/esm/classCheckPrivateStaticAccess.js",
+        "default": "./helpers/classCheckPrivateStaticAccess.js"
+      },
+      "./helpers/classCheckPrivateStaticAccess.js"
+    ],
+    "./helpers/esm/classCheckPrivateStaticAccess": "./helpers/esm/classCheckPrivateStaticAccess.js",
+    "./helpers/classCheckPrivateStaticFieldDescriptor": [
+      {
+        "node": "./helpers/classCheckPrivateStaticFieldDescriptor.js",
+        "import": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
+        "default": "./helpers/classCheckPrivateStaticFieldDescriptor.js"
+      },
+      "./helpers/classCheckPrivateStaticFieldDescriptor.js"
+    ],
+    "./helpers/esm/classCheckPrivateStaticFieldDescriptor": "./helpers/esm/classCheckPrivateStaticFieldDescriptor.js",
+    "./helpers/classExtractFieldDescriptor": [
+      {
+        "node": "./helpers/classExtractFieldDescriptor.js",
+        "import": "./helpers/esm/classExtractFieldDescriptor.js",
+        "default": "./helpers/classExtractFieldDescriptor.js"
+      },
+      "./helpers/classExtractFieldDescriptor.js"
+    ],
+    "./helpers/esm/classExtractFieldDescriptor": "./helpers/esm/classExtractFieldDescriptor.js",
+    "./helpers/classPrivateFieldDestructureSet": [
+      {
+        "node": "./helpers/classPrivateFieldDestructureSet.js",
+        "import": "./helpers/esm/classPrivateFieldDestructureSet.js",
+        "default": "./helpers/classPrivateFieldDestructureSet.js"
+      },
+      "./helpers/classPrivateFieldDestructureSet.js"
+    ],
+    "./helpers/esm/classPrivateFieldDestructureSet": "./helpers/esm/classPrivateFieldDestructureSet.js",
+    "./helpers/classPrivateFieldGet": [
+      {
+        "node": "./helpers/classPrivateFieldGet.js",
+        "import": "./helpers/esm/classPrivateFieldGet.js",
+        "default": "./helpers/classPrivateFieldGet.js"
+      },
+      "./helpers/classPrivateFieldGet.js"
+    ],
+    "./helpers/esm/classPrivateFieldGet": "./helpers/esm/classPrivateFieldGet.js",
+    "./helpers/classPrivateFieldSet": [
+      {
+        "node": "./helpers/classPrivateFieldSet.js",
+        "import": "./helpers/esm/classPrivateFieldSet.js",
+        "default": "./helpers/classPrivateFieldSet.js"
+      },
+      "./helpers/classPrivateFieldSet.js"
+    ],
+    "./helpers/esm/classPrivateFieldSet": "./helpers/esm/classPrivateFieldSet.js",
+    "./helpers/classPrivateMethodGet": [
+      {
+        "node": "./helpers/classPrivateMethodGet.js",
+        "import": "./helpers/esm/classPrivateMethodGet.js",
+        "default": "./helpers/classPrivateMethodGet.js"
+      },
+      "./helpers/classPrivateMethodGet.js"
+    ],
+    "./helpers/esm/classPrivateMethodGet": "./helpers/esm/classPrivateMethodGet.js",
+    "./helpers/classPrivateMethodSet": [
+      {
+        "node": "./helpers/classPrivateMethodSet.js",
+        "import": "./helpers/esm/classPrivateMethodSet.js",
+        "default": "./helpers/classPrivateMethodSet.js"
+      },
+      "./helpers/classPrivateMethodSet.js"
+    ],
+    "./helpers/esm/classPrivateMethodSet": "./helpers/esm/classPrivateMethodSet.js",
+    "./helpers/classStaticPrivateFieldDestructureSet": [
+      {
+        "node": "./helpers/classStaticPrivateFieldDestructureSet.js",
+        "import": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
+        "default": "./helpers/classStaticPrivateFieldDestructureSet.js"
+      },
+      "./helpers/classStaticPrivateFieldDestructureSet.js"
+    ],
+    "./helpers/esm/classStaticPrivateFieldDestructureSet": "./helpers/esm/classStaticPrivateFieldDestructureSet.js",
+    "./helpers/classStaticPrivateFieldSpecGet": [
+      {
+        "node": "./helpers/classStaticPrivateFieldSpecGet.js",
+        "import": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
+        "default": "./helpers/classStaticPrivateFieldSpecGet.js"
+      },
+      "./helpers/classStaticPrivateFieldSpecGet.js"
+    ],
+    "./helpers/esm/classStaticPrivateFieldSpecGet": "./helpers/esm/classStaticPrivateFieldSpecGet.js",
+    "./helpers/classStaticPrivateFieldSpecSet": [
+      {
+        "node": "./helpers/classStaticPrivateFieldSpecSet.js",
+        "import": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
+        "default": "./helpers/classStaticPrivateFieldSpecSet.js"
+      },
+      "./helpers/classStaticPrivateFieldSpecSet.js"
+    ],
+    "./helpers/esm/classStaticPrivateFieldSpecSet": "./helpers/esm/classStaticPrivateFieldSpecSet.js",
+    "./helpers/classStaticPrivateMethodSet": [
+      {
+        "node": "./helpers/classStaticPrivateMethodSet.js",
+        "import": "./helpers/esm/classStaticPrivateMethodSet.js",
+        "default": "./helpers/classStaticPrivateMethodSet.js"
+      },
+      "./helpers/classStaticPrivateMethodSet.js"
+    ],
+    "./helpers/esm/classStaticPrivateMethodSet": "./helpers/esm/classStaticPrivateMethodSet.js",
+    "./helpers/defineEnumerableProperties": [
+      {
+        "node": "./helpers/defineEnumerableProperties.js",
+        "import": "./helpers/esm/defineEnumerableProperties.js",
+        "default": "./helpers/defineEnumerableProperties.js"
+      },
+      "./helpers/defineEnumerableProperties.js"
+    ],
+    "./helpers/esm/defineEnumerableProperties": "./helpers/esm/defineEnumerableProperties.js",
+    "./helpers/dispose": [
+      {
+        "node": "./helpers/dispose.js",
+        "import": "./helpers/esm/dispose.js",
+        "default": "./helpers/dispose.js"
+      },
+      "./helpers/dispose.js"
+    ],
+    "./helpers/esm/dispose": "./helpers/esm/dispose.js",
+    "./helpers/objectSpread": [
+      {
+        "node": "./helpers/objectSpread.js",
+        "import": "./helpers/esm/objectSpread.js",
+        "default": "./helpers/objectSpread.js"
+      },
+      "./helpers/objectSpread.js"
+    ],
+    "./helpers/esm/objectSpread": "./helpers/esm/objectSpread.js",
+    "./helpers/using": [
+      {
+        "node": "./helpers/using.js",
+        "import": "./helpers/esm/using.js",
+        "default": "./helpers/using.js"
+      },
+      "./helpers/using.js"
+    ],
+    "./helpers/esm/using": "./helpers/esm/using.js",
+    "./package": "./package.json",
+    "./package.json": "./package.json",
+    "./regenerator": "./regenerator/index.js",
+    "./regenerator/*.js": "./regenerator/*.js",
+    "./regenerator/": "./regenerator/"
+  },
+  "homepage": "https://babel.dev/docs/en/next/babel-runtime",
+  "license": "MIT",
+  "name": "@babel/runtime",
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/babel/babel.git",
+    "directory": "packages/babel-runtime"
+  },
+  "type": "commonjs",
+  "version": "7.26.0"
+}
diff --git a/node_modules/@babel/runtime/regenerator/index.js b/node_modules/@babel/runtime/regenerator/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..5881357364f41aea98c1c01ab2b9056adc79689f
--- /dev/null
+++ b/node_modules/@babel/runtime/regenerator/index.js
@@ -0,0 +1,15 @@
+// TODO(Babel 8): Remove this file.
+
+var runtime = require("../helpers/regeneratorRuntime")();
+module.exports = runtime;
+
+// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
+try {
+  regeneratorRuntime = runtime;
+} catch (accidentalStrictMode) {
+  if (typeof globalThis === "object") {
+    globalThis.regeneratorRuntime = runtime;
+  } else {
+    Function("r", "regeneratorRuntime = r")(runtime);
+  }
+}
diff --git a/node_modules/@popperjs/core/LICENSE.md b/node_modules/@popperjs/core/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..0370c4581eb5d70cbffe2ac4ea8722cb13fd9b0b
--- /dev/null
+++ b/node_modules/@popperjs/core/LICENSE.md
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 Federico Zivolo
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@popperjs/core/README.md b/node_modules/@popperjs/core/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..53be7b9d84ed8e912a2d14b3a075662899397610
--- /dev/null
+++ b/node_modules/@popperjs/core/README.md
@@ -0,0 +1,376 @@
+<!-- <HEADER> // IGNORE IT -->
+<p align="center">
+  <img src="https://rawcdn.githack.com/popperjs/popper-core/8805a5d7599e14619c9e7ac19a3713285d8e5d7f/docs/src/images/popper-logo-outlined.svg" alt="Popper" height="300px"/>
+</p>
+
+<div align="center">
+  <h1>Tooltip & Popover Positioning Engine</h1>
+</div>
+
+<p align="center">
+  <a href="https://www.npmjs.com/package/@popperjs/core">
+    <img src="https://img.shields.io/npm/v/@popperjs/core?style=for-the-badge" alt="npm version" />
+  </a>
+  <a href="https://www.npmjs.com/package/@popperjs/core">
+    <img src="https://img.shields.io/endpoint?style=for-the-badge&url=https://runkit.io/fezvrasta/combined-npm-downloads/1.0.0?packages=popper.js,@popperjs/core" alt="npm downloads per month (popper.js + @popperjs/core)" />
+  </a>
+  <a href="https://rollingversions.com/popperjs/popper-core">
+    <img src="https://img.shields.io/badge/Rolling%20Versions-Enabled-brightgreen?style=for-the-badge" alt="Rolling Versions" />
+  </a>
+</p>
+
+<br />
+<!-- </HEADER> // NOW BEGINS THE README -->
+
+**Positioning tooltips and popovers is difficult. Popper is here to help!**
+
+Given an element, such as a button, and a tooltip element describing it, Popper
+will automatically put the tooltip in the right place near the button.
+
+It will position _any_ UI element that "pops out" from the flow of your document
+and floats near a target element. The most common example is a tooltip, but it
+also includes popovers, drop-downs, and more. All of these can be generically
+described as a "popper" element.
+
+## Demo
+
+[![Popper visualized](https://i.imgur.com/F7qWsmV.jpg)](https://popper.js.org)
+
+## Docs
+
+- [v2.x (latest)](https://popper.js.org/docs/v2/)
+- [v1.x](https://popper.js.org/docs/v1/)
+
+We've created a
+[Migration Guide](https://popper.js.org/docs/v2/migration-guide/) to help you
+migrate from Popper 1 to Popper 2.
+
+To contribute to the Popper website and documentation, please visit the
+[dedicated repository](https://github.com/popperjs/website).
+
+## Why not use pure CSS?
+
+- **Clipping and overflow issues**: Pure CSS poppers will not be prevented from
+  overflowing clipping boundaries, such as the viewport. It will get partially
+  cut off or overflows if it's near the edge since there is no dynamic
+  positioning logic. When using Popper, your popper will always be positioned in
+  the right place without needing manual adjustments.
+- **No flipping**: CSS poppers will not flip to a different placement to fit
+  better in view if necessary. While you can manually adjust for the main axis
+  overflow, this feature cannot be achieved via CSS alone. Popper automatically
+  flips the tooltip to make it fit in view as best as possible for the user.
+- **No virtual positioning**: CSS poppers cannot follow the mouse cursor or be
+  used as a context menu. Popper allows you to position your tooltip relative to
+  any coordinates you desire.
+- **Slower development cycle**: When pure CSS is used to position popper
+  elements, the lack of dynamic positioning means they must be carefully placed
+  to consider overflow on all screen sizes. In reusable component libraries,
+  this means a developer can't just add the component anywhere on the page,
+  because these issues need to be considered and adjusted for every time. With
+  Popper, you can place your elements anywhere and they will be positioned
+  correctly, without needing to consider different screen sizes, layouts, etc.
+  This massively speeds up development time because this work is automatically
+  offloaded to Popper.
+- **Lack of extensibility**: CSS poppers cannot be easily extended to fit any
+  arbitrary use case you may need to adjust for. Popper is built with
+  extensibility in mind.
+
+## Why Popper?
+
+With the CSS drawbacks out of the way, we now move on to Popper in the
+JavaScript space itself.
+
+Naive JavaScript tooltip implementations usually have the following problems:
+
+- **Scrolling containers**: They don't ensure the tooltip stays with the
+  reference element while scrolling when inside any number of scrolling
+  containers.
+- **DOM context**: They often require the tooltip move outside of its original
+  DOM context because they don't handle `offsetParent` contexts.
+- **Compatibility**: Popper handles an incredible number of edge cases regarding
+  different browsers and environments (mobile viewports, RTL, scrollbars enabled
+  or disabled, etc.). Popper is a popular and well-maintained library, so you
+  can be confident positioning will work for your users on any device.
+- **Configurability**: They often lack advanced configurability to suit any
+  possible use case.
+- **Size**: They are usually relatively large in size, or require an ancient
+  jQuery dependency.
+- **Performance**: They often have runtime performance issues and update the
+  tooltip position too slowly.
+
+**Popper solves all of these key problems in an elegant, performant manner.** It
+is a lightweight ~3 kB library that aims to provide a reliable and extensible
+positioning engine you can use to ensure all your popper elements are positioned
+in the right place.
+
+When you start writing your own popper implementation, you'll quickly run into
+all of the problems mentioned above. These widgets are incredibly common in our
+UIs; we've done the hard work figuring this out so you don't need to spend hours
+fixing and handling numerous edge cases that we already ran into while building
+the library!
+
+Popper is used in popular libraries like Bootstrap, Foundation, Material UI, and
+more. It's likely you've already used popper elements on the web positioned by
+Popper at some point in the past few years.
+
+Since we write UIs using powerful abstraction libraries such as React or Angular
+nowadays, you'll also be glad to know Popper can fully integrate with them and
+be a good citizen together with your other components. Check out `react-popper`
+for the official Popper wrapper for React.
+
+## Installation
+
+### 1. Package Manager
+
+```bash
+# With npm
+npm i @popperjs/core
+
+# With Yarn
+yarn add @popperjs/core
+```
+
+### 2. CDN
+
+```html
+<!-- Development version -->
+<script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.js"></script>
+
+<!-- Production version -->
+<script src="https://unpkg.com/@popperjs/core@2"></script>
+```
+
+### 3. Direct Download?
+
+Managing dependencies by "directly downloading" them and placing them into your
+source code is not recommended for a variety of reasons, including missing out
+on feat/fix updates easily. Please use a versioning management system like a CDN
+or npm/Yarn.
+
+## Usage
+
+The most straightforward way to get started is to import Popper from the `unpkg`
+CDN, which includes all of its features. You can call the `Popper.createPopper`
+constructor to create new popper instances.
+
+Here is a complete example:
+
+```html
+<!DOCTYPE html>
+<title>Popper example</title>
+
+<style>
+  #tooltip {
+    background-color: #333;
+    color: white;
+    padding: 5px 10px;
+    border-radius: 4px;
+    font-size: 13px;
+  }
+</style>
+
+<button id="button" aria-describedby="tooltip">I'm a button</button>
+<div id="tooltip" role="tooltip">I'm a tooltip</div>
+
+<script src="https://unpkg.com/@popperjs/core@^2.0.0"></script>
+<script>
+  const button = document.querySelector('#button');
+  const tooltip = document.querySelector('#tooltip');
+
+  // Pass the button, the tooltip, and some options, and Popper will do the
+  // magic positioning for you:
+  Popper.createPopper(button, tooltip, {
+    placement: 'right',
+  });
+</script>
+```
+
+Visit the [tutorial](https://popper.js.org/docs/v2/tutorial/) for an example of
+how to build your own tooltip from scratch using Popper.
+
+### Module bundlers
+
+You can import the `createPopper` constructor from the fully-featured file:
+
+```js
+import { createPopper } from '@popperjs/core';
+
+const button = document.querySelector('#button');
+const tooltip = document.querySelector('#tooltip');
+
+// Pass the button, the tooltip, and some options, and Popper will do the
+// magic positioning for you:
+createPopper(button, tooltip, {
+  placement: 'right',
+});
+```
+
+All the modifiers listed in the docs menu will be enabled and "just work", so
+you don't need to think about setting Popper up. The size of Popper including
+all of its features is about 5 kB minzipped, but it may grow a bit in the
+future.
+
+#### Popper Lite (tree-shaking)
+
+If bundle size is important, you'll want to take advantage of tree-shaking. The
+library is built in a modular way to allow to import only the parts you really
+need.
+
+```js
+import { createPopperLite as createPopper } from '@popperjs/core';
+```
+
+The Lite version includes the most necessary modifiers that will compute the
+offsets of the popper, compute and add the positioning styles, and add event
+listeners. This is close in bundle size to pure CSS tooltip libraries, and
+behaves somewhat similarly.
+
+However, this does not include the features that makes Popper truly useful.
+
+The two most useful modifiers not included in Lite are `preventOverflow` and
+`flip`:
+
+```js
+import {
+  createPopperLite as createPopper,
+  preventOverflow,
+  flip,
+} from '@popperjs/core';
+
+const button = document.querySelector('#button');
+const tooltip = document.querySelector('#tooltip');
+
+createPopper(button, tooltip, {
+  modifiers: [preventOverflow, flip],
+});
+```
+
+As you make more poppers, you may be finding yourself needing other modifiers
+provided by the library.
+
+See [tree-shaking](https://popper.js.org/docs/v2/performance/#tree-shaking) for more
+information.
+
+## Distribution targets
+
+Popper is distributed in 3 different versions, in 3 different file formats.
+
+The 3 file formats are:
+
+- `esm` (works with `import` syntax — **recommended**)
+- `umd` (works with `<script>` tags or RequireJS)
+- `cjs` (works with `require()` syntax)
+
+There are two different `esm` builds, one for bundler consumers (e.g. webpack,
+Rollup, etc..), which is located under `/lib`, and one for browsers with native
+support for ES Modules, under `/dist/esm`. The only difference within the two,
+is that the browser-compatible version doesn't make use of
+`process.env.NODE_ENV` to run development checks.
+
+The 3 versions are:
+
+- `popper`: includes all the modifiers (features) in one file (**default**);
+- `popper-lite`: includes only the minimum amount of modifiers to provide the
+  basic functionality;
+- `popper-base`: doesn't include any modifier, you must import them separately;
+
+Below you can find the size of each version, minified and compressed with the
+[Brotli compression algorithm](https://medium.com/groww-engineering/enable-brotli-compression-in-webpack-with-fallback-to-gzip-397a57cf9fc6):
+
+<!-- Don't change the labels to use hyphens, it breaks, even when encoded -->
+
+![](https://badge-size.now.sh/https://unpkg.com/@popperjs/core/dist/umd/popper.min.js?compression=brotli&label=popper)
+![](https://badge-size.now.sh/https://unpkg.com/@popperjs/core/dist/umd/popper-lite.min.js?compression=brotli&label=popper%20lite)
+![](https://badge-size.now.sh/https://unpkg.com/@popperjs/core/dist/umd/popper-base.min.js?compression=brotli&label=popper%20base)
+
+## Hacking the library
+
+If you want to play with the library, implement new features, fix a bug you
+found, or simply experiment with it, this section is for you!
+
+First of all, make sure to have
+[Yarn installed](https://yarnpkg.com/lang/en/docs/install).
+
+Install the development dependencies:
+
+```bash
+yarn install
+```
+
+And run the development environment:
+
+```bash
+yarn dev
+```
+
+Then, simply open one the development server web page:
+
+```bash
+# macOS and Linux
+open localhost:5000
+
+# Windows
+start localhost:5000
+```
+
+From there, you can open any of the examples (`.html` files) to fiddle with
+them.
+
+Now any change you will made to the source code, will be automatically compiled,
+you just need to refresh the page.
+
+If the page is not working properly, try to go in _"Developer Tools >
+Application > Clear storage"_ and click on "_Clear site data_".  
+To run the examples you need a browser with
+[JavaScript modules via script tag support](https://caniuse.com/#feat=es6-module).
+
+## Test Suite
+
+Popper is currently tested with unit tests, and functional tests. Both of them
+are run by Jest.
+
+### Unit Tests
+
+The unit tests use JSDOM to provide a primitive document object API, they are
+used to ensure the utility functions behave as expected in isolation.
+
+### Functional Tests
+
+The functional tests run with Puppeteer, to take advantage of a complete browser
+environment. They are currently running on Chromium, and Firefox.
+
+You can run them with `yarn test:functional`. Set the `PUPPETEER_BROWSER`
+environment variable to `firefox` to run them on the Mozilla browser.
+
+The assertions are written in form of image snapshots, so that it's easy to
+assert for the correct Popper behavior without having to write a lot of offsets
+comparisons manually.
+
+You can mark a `*.test.js` file to run in the Puppeteer environment by
+prepending a `@jest-environment puppeteer` JSDoc comment to the interested file.
+
+Here's an example of a basic functional test:
+
+```js
+/**
+ * @jest-environment puppeteer
+ * @flow
+ */
+import { screenshot } from '../utils/puppeteer.js';
+
+it('should position the popper on the right', async () => {
+  const page = await browser.newPage();
+  await page.goto(`${TEST_URL}/basic.html`);
+
+  expect(await screenshot(page)).toMatchImageSnapshot();
+});
+```
+
+You can find the complete
+[`jest-puppeteer` documentation here](https://github.com/smooth-code/jest-puppeteer#api),
+and the
+[`jest-image-snapshot` documentation here](https://github.com/americanexpress/jest-image-snapshot#%EF%B8%8F-api).
+
+## License
+
+MIT
diff --git a/node_modules/@popperjs/core/dist/cjs/enums.js b/node_modules/@popperjs/core/dist/cjs/enums.js
new file mode 100644
index 0000000000000000000000000000000000000000..732d544c5f9c23df6ef8861ff9e454467f12bcdc
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/enums.js
@@ -0,0 +1,65 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+var top = 'top';
+var bottom = 'bottom';
+var right = 'right';
+var left = 'left';
+var auto = 'auto';
+var basePlacements = [top, bottom, right, left];
+var start = 'start';
+var end = 'end';
+var clippingParents = 'clippingParents';
+var viewport = 'viewport';
+var popper = 'popper';
+var reference = 'reference';
+var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+  return acc.concat([placement + "-" + start, placement + "-" + end]);
+}, []);
+var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+}, []); // modifiers that need to read the DOM
+
+var beforeRead = 'beforeRead';
+var read = 'read';
+var afterRead = 'afterRead'; // pure-logic modifiers
+
+var beforeMain = 'beforeMain';
+var main = 'main';
+var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+var beforeWrite = 'beforeWrite';
+var write = 'write';
+var afterWrite = 'afterWrite';
+var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+exports.afterMain = afterMain;
+exports.afterRead = afterRead;
+exports.afterWrite = afterWrite;
+exports.auto = auto;
+exports.basePlacements = basePlacements;
+exports.beforeMain = beforeMain;
+exports.beforeRead = beforeRead;
+exports.beforeWrite = beforeWrite;
+exports.bottom = bottom;
+exports.clippingParents = clippingParents;
+exports.end = end;
+exports.left = left;
+exports.main = main;
+exports.modifierPhases = modifierPhases;
+exports.placements = placements;
+exports.popper = popper;
+exports.read = read;
+exports.reference = reference;
+exports.right = right;
+exports.start = start;
+exports.top = top;
+exports.variationPlacements = variationPlacements;
+exports.viewport = viewport;
+exports.write = write;
+//# sourceMappingURL=enums.js.map
diff --git a/node_modules/@popperjs/core/dist/cjs/enums.js.flow b/node_modules/@popperjs/core/dist/cjs/enums.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8512ad042e1ed9d2c41711cb762b1ce68c24cc61
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/enums.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/enums.js'
diff --git a/node_modules/@popperjs/core/dist/cjs/enums.js.map b/node_modules/@popperjs/core/dist/cjs/enums.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..6c5d6d9f7da6c0018f626da5ee8410d53de3a03e
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/enums.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"enums.js","sources":["../../src/enums.js"],"sourcesContent":["// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n"],"names":["top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","concat","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases"],"mappings":";;;;;;;;IACaA,GAAU,GAAG;IACbC,MAAgB,GAAG;IACnBC,KAAc,GAAG;IACjBC,IAAY,GAAG;IACfC,IAAY,GAAG;IAMfC,cAAoC,GAAG,CAACL,GAAD,EAAMC,MAAN,EAAcC,KAAd,EAAqBC,IAArB;IAEvCG,KAAc,GAAG;IACjBC,GAAU,GAAG;IAGbC,eAAkC,GAAG;IACrCC,QAAoB,GAAG;IAIvBC,MAAgB,GAAG;IACnBC,SAAsB,GAAG;IAgBzBC,mBAA8C,gBAAGP,cAAc,CAACQ,MAAf,CAC5D,UAACC,GAAD,EAAiCC,SAAjC;AAAA,SACED,GAAG,CAACE,MAAJ,CAAW,CAAKD,SAAL,SAAkBT,KAAlB,EAAqCS,SAArC,SAAkDR,GAAlD,CAAX,CADF;AAAA,CAD4D,EAG5D,EAH4D;IAKjDU,UAA4B,gBAAG,UAAIZ,cAAJ,GAAoBD,IAApB,GAA0BS,MAA1B,CAC1C,UACEC,GADF,EAEEC,SAFF;AAAA,SAIED,GAAG,CAACE,MAAJ,CAAW,CACTD,SADS,EAELA,SAFK,SAEQT,KAFR,EAGLS,SAHK,SAGQR,GAHR,CAAX,CAJF;AAAA,CAD0C,EAU1C,EAV0C;;IAc/BW,UAAwB,GAAG;IAC3BC,IAAY,GAAG;IACfC,SAAsB,GAAG;;IAEzBC,UAAwB,GAAG;IAC3BC,IAAY,GAAG;IACfC,SAAsB,GAAG;;IAEzBC,WAA0B,GAAG;IAC7BC,KAAc,GAAG;IACjBC,UAAwB,GAAG;IAC3BC,cAAqC,GAAG,CACnDT,UADmD,EAEnDC,IAFmD,EAGnDC,SAHmD,EAInDC,UAJmD,EAKnDC,IALmD,EAMnDC,SANmD,EAOnDC,WAPmD,EAQnDC,KARmD,EASnDC,UATmD;;;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-base.js b/node_modules/@popperjs/core/dist/cjs/popper-base.js
new file mode 100644
index 0000000000000000000000000000000000000000..13939401c6ff6374a4f87deeafb042e34686f530
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-base.js
@@ -0,0 +1,939 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+var max = Math.max;
+var min = Math.min;
+var round = Math.round;
+
+function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
+
+function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
+
+function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
+
+function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
+
+function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
+
+function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
+
+function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
+
+function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
+
+function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
+
+function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
+
+function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
+
+// means it doesn't take into account transforms.
+
+function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
+
+function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
+
+function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
+
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
+
+function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
+
+var top = 'top';
+var bottom = 'bottom';
+var right = 'right';
+var left = 'left';
+var basePlacements = [top, bottom, right, left];
+var start = 'start';
+var end = 'end';
+var clippingParents = 'clippingParents';
+var viewport = 'viewport';
+var popper = 'popper';
+var reference = 'reference';
+
+var beforeRead = 'beforeRead';
+var read = 'read';
+var afterRead = 'afterRead'; // pure-logic modifiers
+
+var beforeMain = 'beforeMain';
+var main = 'main';
+var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+var beforeWrite = 'beforeWrite';
+var write = 'write';
+var afterWrite = 'afterWrite';
+var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
+
+function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
+
+function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
+
+function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
+
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
+
+function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
+
+function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
+
+function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
+
+function getVariation(placement) {
+  return placement.split('-')[1];
+}
+
+function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
+
+function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+    }
+  }
+
+  return offsets;
+}
+
+function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
+
+function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
+
+function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
+
+function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
+
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        });
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref) {
+        var name = _ref.name,
+            _ref$options = _ref.options,
+            options = _ref$options === void 0 ? {} : _ref$options,
+            effect = _ref.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
+
+exports.createPopper = createPopper;
+exports.detectOverflow = detectOverflow;
+exports.popperGenerator = popperGenerator;
+//# sourceMappingURL=popper-base.js.map
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-base.js.flow b/node_modules/@popperjs/core/dist/cjs/popper-base.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..22d88ebd999873602abfa104b11d1a850c034f99
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-base.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper-base.js'
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-base.js.map b/node_modules/@popperjs/core/dist/cjs/popper-base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..cc6686a1a383bd392610904531d8948797c57fb6
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-base.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-base.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","basePlacements","start","end","clippingParents","viewport","popper","reference","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","reduce","acc","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","placement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn"],"mappings":";;;;;;;;AAIe,SAASA,SAAT,CAAmBC,IAAnB,EAAyB;AACtC,MAAIA,IAAI,IAAI,IAAZ,EAAkB;AAChB,WAAOC,MAAP;AACD;;AAED,MAAID,IAAI,CAACE,QAAL,OAAoB,iBAAxB,EAA2C;AACzC,QAAMC,aAAa,GAAGH,IAAI,CAACG,aAA3B;AACA,WAAOA,aAAa,GAAGA,aAAa,CAACC,WAAd,IAA6BH,MAAhC,GAAyCA,MAA7D;AACD;;AAED,SAAOD,IAAP;AACD;;ACVD,SAASK,SAAT,CAAmBL,IAAnB,EAAyB;AACvB,MAAMM,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBO,OAAnC;AACA,SAAOP,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYO,OAArD;AACD;;AAID,SAASC,aAAT,CAAuBR,IAAvB,EAA6B;AAC3B,MAAMM,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBS,WAAnC;AACA,SAAOT,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYS,WAArD;AACD;;AAID,SAASC,YAAT,CAAsBV,IAAtB,EAA4B;AAC1B;AACA,MAAI,OAAOW,UAAP,KAAsB,WAA1B,EAAuC;AACrC,WAAO,KAAP;AACD;;AACD,MAAML,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBW,UAAnC;AACA,SAAOX,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYW,UAArD;AACD;;ACzBM,IAAMC,GAAG,GAAGC,IAAI,CAACD,GAAjB;AACA,IAAME,GAAG,GAAGD,IAAI,CAACC,GAAjB;AACA,IAAMC,KAAK,GAAGF,IAAI,CAACE,KAAnB;;ACMQ,SAASC,WAAT,GAA+B;AAC5C,MAAMC,MAAM,GAAIC,SAAD,CAAuBC,aAAtC;;AAEA,MAAIF,MAAM,QAAN,IAAAA,MAAM,CAAEG,MAAR,IAAkBC,KAAK,CAACC,OAAN,CAAcL,MAAM,CAACG,MAArB,CAAtB,EAAoD;AAClD,WAAOH,MAAM,CAACG,MAAP,CACJG,GADI,CACA,UAACC,IAAD;AAAA,aAAaA,IAAI,CAACC,KAAlB,SAA2BD,IAAI,CAACE,OAAhC;AAAA,KADA,EAEJC,IAFI,CAEC,GAFD,CAAP;AAGD;;AAED,SAAOT,SAAS,CAACU,SAAjB;AACD;;AChBc,SAASC,gBAAT,GAA4B;AACzC,SAAO,CAAC,iCAAiCC,IAAjC,CAAsCd,WAAW,EAAjD,CAAR;AACD;;ACEc,SAASe,qBAAT,CACbC,OADa,EAEbC,YAFa,EAGbC,eAHa,EAIK;AAAA,MAFlBD,YAEkB;AAFlBA,IAAAA,YAEkB,GAFM,KAEN;AAAA;;AAAA,MADlBC,eACkB;AADlBA,IAAAA,eACkB,GADS,KACT;AAAA;;AAClB,MAAMC,UAAU,GAAGH,OAAO,CAACD,qBAAR,EAAnB;AACA,MAAIK,MAAM,GAAG,CAAb;AACA,MAAIC,MAAM,GAAG,CAAb;;AAEA,MAAIJ,YAAY,IAAIzB,aAAa,CAACwB,OAAD,CAAjC,EAA4C;AAC1CI,IAAAA,MAAM,GACHJ,OAAD,CAAuBM,WAAvB,GAAqC,CAArC,GACIvB,KAAK,CAACoB,UAAU,CAACI,KAAZ,CAAL,GAA2BP,OAAD,CAAuBM,WAAjD,IAAgE,CADpE,GAEI,CAHN;AAIAD,IAAAA,MAAM,GACHL,OAAD,CAAuBQ,YAAvB,GAAsC,CAAtC,GACIzB,KAAK,CAACoB,UAAU,CAACM,MAAZ,CAAL,GAA4BT,OAAD,CAAuBQ,YAAlD,IAAkE,CADtE,GAEI,CAHN;AAID;;AAdiB,aAgBSnC,SAAS,CAAC2B,OAAD,CAAT,GAAqBjC,SAAS,CAACiC,OAAD,CAA9B,GAA0C/B,MAhBnD;AAAA,MAgBVyC,cAhBU,QAgBVA,cAhBU;;AAiBlB,MAAMC,gBAAgB,GAAG,CAACd,gBAAgB,EAAjB,IAAuBK,eAAhD;AAEA,MAAMU,CAAC,GACL,CAACT,UAAU,CAACU,IAAX,IACEF,gBAAgB,IAAID,cAApB,GAAqCA,cAAc,CAACI,UAApD,GAAiE,CADnE,CAAD,IAEAV,MAHF;AAIA,MAAMW,CAAC,GACL,CAACZ,UAAU,CAACa,GAAX,IACEL,gBAAgB,IAAID,cAApB,GAAqCA,cAAc,CAACO,SAApD,GAAgE,CADlE,CAAD,IAEAZ,MAHF;AAIA,MAAME,KAAK,GAAGJ,UAAU,CAACI,KAAX,GAAmBH,MAAjC;AACA,MAAMK,MAAM,GAAGN,UAAU,CAACM,MAAX,GAAoBJ,MAAnC;AAEA,SAAO;AACLE,IAAAA,KAAK,EAALA,KADK;AAELE,IAAAA,MAAM,EAANA,MAFK;AAGLO,IAAAA,GAAG,EAAED,CAHA;AAILG,IAAAA,KAAK,EAAEN,CAAC,GAAGL,KAJN;AAKLY,IAAAA,MAAM,EAAEJ,CAAC,GAAGN,MALP;AAMLI,IAAAA,IAAI,EAAED,CAND;AAOLA,IAAAA,CAAC,EAADA,CAPK;AAQLG,IAAAA,CAAC,EAADA;AARK,GAAP;AAUD;;AC/Cc,SAASK,eAAT,CAAyBpD,IAAzB,EAA8C;AAC3D,MAAMqD,GAAG,GAAGtD,SAAS,CAACC,IAAD,CAArB;AACA,MAAMsD,UAAU,GAAGD,GAAG,CAACE,WAAvB;AACA,MAAMC,SAAS,GAAGH,GAAG,CAACI,WAAtB;AAEA,SAAO;AACLH,IAAAA,UAAU,EAAVA,UADK;AAELE,IAAAA,SAAS,EAATA;AAFK,GAAP;AAID;;ACXc,SAASE,oBAAT,CAA8B1B,OAA9B,EAAoD;AACjE,SAAO;AACLsB,IAAAA,UAAU,EAAEtB,OAAO,CAACsB,UADf;AAELE,IAAAA,SAAS,EAAExB,OAAO,CAACwB;AAFd,GAAP;AAID;;ACAc,SAASG,aAAT,CAAuB3D,IAAvB,EAA4C;AACzD,MAAIA,IAAI,KAAKD,SAAS,CAACC,IAAD,CAAlB,IAA4B,CAACQ,aAAa,CAACR,IAAD,CAA9C,EAAsD;AACpD,WAAOoD,eAAe,CAACpD,IAAD,CAAtB;AACD,GAFD,MAEO;AACL,WAAO0D,oBAAoB,CAAC1D,IAAD,CAA3B;AACD;AACF;;ACVc,SAAS4D,WAAT,CAAqB5B,OAArB,EAAuD;AACpE,SAAOA,OAAO,GAAG,CAACA,OAAO,CAAC6B,QAAR,IAAoB,EAArB,EAAyBC,WAAzB,EAAH,GAA4C,IAA1D;AACD;;ACDc,SAASC,kBAAT,CACb/B,OADa,EAEA;AACb;AACA,SAAO,CACL,CAAC3B,SAAS,CAAC2B,OAAD,CAAT,GACGA,OAAO,CAAC7B,aADX;AAGG6B,EAAAA,OAAO,CAACgC,QAHZ,KAGyB/D,MAAM,CAAC+D,QAJ3B,EAKLC,eALF;AAMD;;ACTc,SAASC,mBAAT,CAA6BlC,OAA7B,EAAuD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SACED,qBAAqB,CAACgC,kBAAkB,CAAC/B,OAAD,CAAnB,CAArB,CAAmDa,IAAnD,GACAO,eAAe,CAACpB,OAAD,CAAf,CAAyBsB,UAF3B;AAID;;ACdc,SAASa,gBAAT,CACbnC,OADa,EAEQ;AACrB,SAAOjC,SAAS,CAACiC,OAAD,CAAT,CAAmBmC,gBAAnB,CAAoCnC,OAApC,CAAP;AACD;;ACJc,SAASoC,cAAT,CAAwBpC,OAAxB,EAAuD;AACpE;AADoE,0BAEzBmC,gBAAgB,CAACnC,OAAD,CAFS;AAAA,MAE5DqC,QAF4D,qBAE5DA,QAF4D;AAAA,MAElDC,SAFkD,qBAElDA,SAFkD;AAAA,MAEvCC,SAFuC,qBAEvCA,SAFuC;;AAGpE,SAAO,6BAA6BzC,IAA7B,CAAkCuC,QAAQ,GAAGE,SAAX,GAAuBD,SAAzD,CAAP;AACD;;ACID,SAASE,eAAT,CAAyBxC,OAAzB,EAA+C;AAC7C,MAAMyC,IAAI,GAAGzC,OAAO,CAACD,qBAAR,EAAb;AACA,MAAMK,MAAM,GAAGrB,KAAK,CAAC0D,IAAI,CAAClC,KAAN,CAAL,GAAoBP,OAAO,CAACM,WAA5B,IAA2C,CAA1D;AACA,MAAMD,MAAM,GAAGtB,KAAK,CAAC0D,IAAI,CAAChC,MAAN,CAAL,GAAqBT,OAAO,CAACQ,YAA7B,IAA6C,CAA5D;AAEA,SAAOJ,MAAM,KAAK,CAAX,IAAgBC,MAAM,KAAK,CAAlC;AACD;AAGD;;;AACe,SAASqC,gBAAT,CACbC,uBADa,EAEbC,YAFa,EAGbC,OAHa,EAIP;AAAA,MADNA,OACM;AADNA,IAAAA,OACM,GADa,KACb;AAAA;;AACN,MAAMC,uBAAuB,GAAGtE,aAAa,CAACoE,YAAD,CAA7C;AACA,MAAMG,oBAAoB,GACxBvE,aAAa,CAACoE,YAAD,CAAb,IAA+BJ,eAAe,CAACI,YAAD,CADhD;AAEA,MAAMX,eAAe,GAAGF,kBAAkB,CAACa,YAAD,CAA1C;AACA,MAAMH,IAAI,GAAG1C,qBAAqB,CAChC4C,uBADgC,EAEhCI,oBAFgC,EAGhCF,OAHgC,CAAlC;AAMA,MAAIG,MAAM,GAAG;AAAE1B,IAAAA,UAAU,EAAE,CAAd;AAAiBE,IAAAA,SAAS,EAAE;AAA5B,GAAb;AACA,MAAIyB,OAAO,GAAG;AAAErC,IAAAA,CAAC,EAAE,CAAL;AAAQG,IAAAA,CAAC,EAAE;AAAX,GAAd;;AAEA,MAAI+B,uBAAuB,IAAK,CAACA,uBAAD,IAA4B,CAACD,OAA7D,EAAuE;AACrE,QACEjB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B;AAEAR,IAAAA,cAAc,CAACH,eAAD,CAHhB,EAIE;AACAe,MAAAA,MAAM,GAAGrB,aAAa,CAACiB,YAAD,CAAtB;AACD;;AAED,QAAIpE,aAAa,CAACoE,YAAD,CAAjB,EAAiC;AAC/BK,MAAAA,OAAO,GAAGlD,qBAAqB,CAAC6C,YAAD,EAAe,IAAf,CAA/B;AACAK,MAAAA,OAAO,CAACrC,CAAR,IAAagC,YAAY,CAACM,UAA1B;AACAD,MAAAA,OAAO,CAAClC,CAAR,IAAa6B,YAAY,CAACO,SAA1B;AACD,KAJD,MAIO,IAAIlB,eAAJ,EAAqB;AAC1BgB,MAAAA,OAAO,CAACrC,CAAR,GAAYsB,mBAAmB,CAACD,eAAD,CAA/B;AACD;AACF;;AAED,SAAO;AACLrB,IAAAA,CAAC,EAAE6B,IAAI,CAAC5B,IAAL,GAAYmC,MAAM,CAAC1B,UAAnB,GAAgC2B,OAAO,CAACrC,CADtC;AAELG,IAAAA,CAAC,EAAE0B,IAAI,CAACzB,GAAL,GAAWgC,MAAM,CAACxB,SAAlB,GAA8ByB,OAAO,CAAClC,CAFpC;AAGLR,IAAAA,KAAK,EAAEkC,IAAI,CAAClC,KAHP;AAILE,IAAAA,MAAM,EAAEgC,IAAI,CAAChC;AAJR,GAAP;AAMD;;AC1DD;;AACe,SAAS2C,aAAT,CAAuBpD,OAAvB,EAAmD;AAChE,MAAMG,UAAU,GAAGJ,qBAAqB,CAACC,OAAD,CAAxC,CADgE;AAIhE;;AACA,MAAIO,KAAK,GAAGP,OAAO,CAACM,WAApB;AACA,MAAIG,MAAM,GAAGT,OAAO,CAACQ,YAArB;;AAEA,MAAI3B,IAAI,CAACwE,GAAL,CAASlD,UAAU,CAACI,KAAX,GAAmBA,KAA5B,KAAsC,CAA1C,EAA6C;AAC3CA,IAAAA,KAAK,GAAGJ,UAAU,CAACI,KAAnB;AACD;;AAED,MAAI1B,IAAI,CAACwE,GAAL,CAASlD,UAAU,CAACM,MAAX,GAAoBA,MAA7B,KAAwC,CAA5C,EAA+C;AAC7CA,IAAAA,MAAM,GAAGN,UAAU,CAACM,MAApB;AACD;;AAED,SAAO;AACLG,IAAAA,CAAC,EAAEZ,OAAO,CAACc,UADN;AAELC,IAAAA,CAAC,EAAEf,OAAO,CAACiB,SAFN;AAGLV,IAAAA,KAAK,EAALA,KAHK;AAILE,IAAAA,MAAM,EAANA;AAJK,GAAP;AAMD;;ACvBc,SAAS6C,aAAT,CAAuBtD,OAAvB,EAAyD;AACtE,MAAI4B,WAAW,CAAC5B,OAAD,CAAX,KAAyB,MAA7B,EAAqC;AACnC,WAAOA,OAAP;AACD;;AAED;AAEE;AACA;AACAA,IAAAA,OAAO,CAACuD,YAAR;AACAvD,IAAAA,OAAO,CAACwD,UADR;AAEC9E,IAAAA,YAAY,CAACsB,OAAD,CAAZ,GAAwBA,OAAO,CAACyD,IAAhC,GAAuC,IAFxC;AAGA;AACA1B,IAAAA,kBAAkB,CAAC/B,OAAD,CARpB;;AAAA;AAUD;;ACdc,SAAS0D,eAAT,CAAyB1F,IAAzB,EAAkD;AAC/D,MAAI,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B2F,OAA9B,CAAsC/B,WAAW,CAAC5D,IAAD,CAAjD,KAA4D,CAAhE,EAAmE;AACjE;AACA,WAAOA,IAAI,CAACG,aAAL,CAAmByF,IAA1B;AACD;;AAED,MAAIpF,aAAa,CAACR,IAAD,CAAb,IAAuBoE,cAAc,CAACpE,IAAD,CAAzC,EAAiD;AAC/C,WAAOA,IAAP;AACD;;AAED,SAAO0F,eAAe,CAACJ,aAAa,CAACtF,IAAD,CAAd,CAAtB;AACD;;ACVD;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6F,iBAAT,CACb7D,OADa,EAEb8D,IAFa,EAG6B;AAAA;;AAAA,MAD1CA,IAC0C;AAD1CA,IAAAA,IAC0C,GADV,EACU;AAAA;;AAC1C,MAAMC,YAAY,GAAGL,eAAe,CAAC1D,OAAD,CAApC;AACA,MAAMgE,MAAM,GAAGD,YAAY,+BAAK/D,OAAO,CAAC7B,aAAb,qBAAK,sBAAuByF,IAA5B,CAA3B;AACA,MAAMvC,GAAG,GAAGtD,SAAS,CAACgG,YAAD,CAArB;AACA,MAAME,MAAM,GAAGD,MAAM,GACjB,CAAC3C,GAAD,EAAM6C,MAAN,CACE7C,GAAG,CAACX,cAAJ,IAAsB,EADxB,EAEE0B,cAAc,CAAC2B,YAAD,CAAd,GAA+BA,YAA/B,GAA8C,EAFhD,CADiB,GAKjBA,YALJ;AAMA,MAAMI,WAAW,GAAGL,IAAI,CAACI,MAAL,CAAYD,MAAZ,CAApB;AAEA,SAAOD,MAAM,GACTG,WADS;AAGTA,EAAAA,WAAW,CAACD,MAAZ,CAAmBL,iBAAiB,CAACP,aAAa,CAACW,MAAD,CAAd,CAApC,CAHJ;AAID;;AC7Bc,SAASG,cAAT,CAAwBpE,OAAxB,EAAmD;AAChE,SAAO,CAAC,OAAD,EAAU,IAAV,EAAgB,IAAhB,EAAsB2D,OAAtB,CAA8B/B,WAAW,CAAC5B,OAAD,CAAzC,KAAuD,CAA9D;AACD;;ACID,SAASqE,mBAAT,CAA6BrE,OAA7B,EAAyD;AACvD,MACE,CAACxB,aAAa,CAACwB,OAAD,CAAd;AAEAmC,EAAAA,gBAAgB,CAACnC,OAAD,CAAhB,CAA0BsE,QAA1B,KAAuC,OAHzC,EAIE;AACA,WAAO,IAAP;AACD;;AAED,SAAOtE,OAAO,CAAC4C,YAAf;AACD;AAGD;;;AACA,SAAS2B,kBAAT,CAA4BvE,OAA5B,EAA8C;AAC5C,MAAMwE,SAAS,GAAG,WAAW1E,IAAX,CAAgBd,WAAW,EAA3B,CAAlB;AACA,MAAMyF,IAAI,GAAG,WAAW3E,IAAX,CAAgBd,WAAW,EAA3B,CAAb;;AAEA,MAAIyF,IAAI,IAAIjG,aAAa,CAACwB,OAAD,CAAzB,EAAoC;AAClC;AACA,QAAM0E,UAAU,GAAGvC,gBAAgB,CAACnC,OAAD,CAAnC;;AACA,QAAI0E,UAAU,CAACJ,QAAX,KAAwB,OAA5B,EAAqC;AACnC,aAAO,IAAP;AACD;AACF;;AAED,MAAIK,WAAW,GAAGrB,aAAa,CAACtD,OAAD,CAA/B;;AAEA,MAAItB,YAAY,CAACiG,WAAD,CAAhB,EAA+B;AAC7BA,IAAAA,WAAW,GAAGA,WAAW,CAAClB,IAA1B;AACD;;AAED,SACEjF,aAAa,CAACmG,WAAD,CAAb,IACA,CAAC,MAAD,EAAS,MAAT,EAAiBhB,OAAjB,CAAyB/B,WAAW,CAAC+C,WAAD,CAApC,IAAqD,CAFvD,EAGE;AACA,QAAMC,GAAG,GAAGzC,gBAAgB,CAACwC,WAAD,CAA5B,CADA;AAIA;AACA;;AACA,QACEC,GAAG,CAACC,SAAJ,KAAkB,MAAlB,IACAD,GAAG,CAACE,WAAJ,KAAoB,MADpB,IAEAF,GAAG,CAACG,OAAJ,KAAgB,OAFhB,IAGA,CAAC,WAAD,EAAc,aAAd,EAA6BpB,OAA7B,CAAqCiB,GAAG,CAACI,UAAzC,MAAyD,CAAC,CAH1D,IAICR,SAAS,IAAII,GAAG,CAACI,UAAJ,KAAmB,QAJjC,IAKCR,SAAS,IAAII,GAAG,CAACK,MAAjB,IAA2BL,GAAG,CAACK,MAAJ,KAAe,MAN7C,EAOE;AACA,aAAON,WAAP;AACD,KATD,MASO;AACLA,MAAAA,WAAW,GAAGA,WAAW,CAACnB,UAA1B;AACD;AACF;;AAED,SAAO,IAAP;AACD;AAGD;;;AACe,SAAS0B,eAAT,CAAyBlF,OAAzB,EAA2C;AACxD,MAAM/B,MAAM,GAAGF,SAAS,CAACiC,OAAD,CAAxB;AAEA,MAAI4C,YAAY,GAAGyB,mBAAmB,CAACrE,OAAD,CAAtC;;AAEA,SACE4C,YAAY,IACZwB,cAAc,CAACxB,YAAD,CADd,IAEAT,gBAAgB,CAACS,YAAD,CAAhB,CAA+B0B,QAA/B,KAA4C,QAH9C,EAIE;AACA1B,IAAAA,YAAY,GAAGyB,mBAAmB,CAACzB,YAAD,CAAlC;AACD;;AAED,MACEA,YAAY,KACXhB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B,IACEhB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B,IACCT,gBAAgB,CAACS,YAAD,CAAhB,CAA+B0B,QAA/B,KAA4C,QAHpC,CADd,EAKE;AACA,WAAOrG,MAAP;AACD;;AAED,SAAO2E,YAAY,IAAI2B,kBAAkB,CAACvE,OAAD,CAAlC,IAA+C/B,MAAtD;AACD;;AC3FM,IAAM+C,GAAU,GAAG,KAAnB;AACA,IAAMG,MAAgB,GAAG,QAAzB;AACA,IAAMD,KAAc,GAAG,OAAvB;AACA,IAAML,IAAY,GAAG,MAArB;AAOA,IAAMsE,cAAoC,GAAG,CAACnE,GAAD,EAAMG,MAAN,EAAcD,KAAd,EAAqBL,IAArB,CAA7C;AAEA,IAAMuE,KAAc,GAAG,OAAvB;AACA,IAAMC,GAAU,GAAG,KAAnB;AAGA,IAAMC,eAAkC,GAAG,iBAA3C;AACA,IAAMC,QAAoB,GAAG,UAA7B;AAIA,IAAMC,MAAgB,GAAG,QAAzB;AACA,IAAMC,SAAsB,GAAG,WAA/B;;AAmCA,IAAMC,UAAwB,GAAG,YAAjC;AACA,IAAMC,IAAY,GAAG,MAArB;AACA,IAAMC,SAAsB,GAAG,WAA/B;;AAEA,IAAMC,UAAwB,GAAG,YAAjC;AACA,IAAMC,IAAY,GAAG,MAArB;AACA,IAAMC,SAAsB,GAAG,WAA/B;;AAEA,IAAMC,WAA0B,GAAG,aAAnC;AACA,IAAMC,KAAc,GAAG,OAAvB;AACA,IAAMC,UAAwB,GAAG,YAAjC;AACA,IAAMC,cAAqC,GAAG,CACnDT,UADmD,EAEnDC,IAFmD,EAGnDC,SAHmD,EAInDC,UAJmD,EAKnDC,IALmD,EAMnDC,SANmD,EAOnDC,WAPmD,EAQnDC,KARmD,EASnDC,UATmD,CAA9C;;AChEP,SAASE,KAAT,CAAeC,SAAf,EAA0B;AACxB,MAAM9G,GAAG,GAAG,IAAI+G,GAAJ,EAAZ;AACA,MAAMC,OAAO,GAAG,IAAIC,GAAJ,EAAhB;AACA,MAAMC,MAAM,GAAG,EAAf;AAEAJ,EAAAA,SAAS,CAACK,OAAV,CAAkB,UAAAC,QAAQ,EAAI;AAC5BpH,IAAAA,GAAG,CAACqH,GAAJ,CAAQD,QAAQ,CAACE,IAAjB,EAAuBF,QAAvB;AACD,GAFD,EALwB;;AAUxB,WAASG,IAAT,CAAcH,QAAd,EAA4C;AAC1CJ,IAAAA,OAAO,CAACQ,GAAR,CAAYJ,QAAQ,CAACE,IAArB;AAEA,QAAMG,QAAQ,aACRL,QAAQ,CAACK,QAAT,IAAqB,EADb,EAERL,QAAQ,CAACM,gBAAT,IAA6B,EAFrB,CAAd;AAKAD,IAAAA,QAAQ,CAACN,OAAT,CAAiB,UAAAQ,GAAG,EAAI;AACtB,UAAI,CAACX,OAAO,CAACY,GAAR,CAAYD,GAAZ,CAAL,EAAuB;AACrB,YAAME,WAAW,GAAG7H,GAAG,CAAC8H,GAAJ,CAAQH,GAAR,CAApB;;AAEA,YAAIE,WAAJ,EAAiB;AACfN,UAAAA,IAAI,CAACM,WAAD,CAAJ;AACD;AACF;AACF,KARD;AAUAX,IAAAA,MAAM,CAACa,IAAP,CAAYX,QAAZ;AACD;;AAEDN,EAAAA,SAAS,CAACK,OAAV,CAAkB,UAAAC,QAAQ,EAAI;AAC5B,QAAI,CAACJ,OAAO,CAACY,GAAR,CAAYR,QAAQ,CAACE,IAArB,CAAL,EAAiC;AAC/B;AACAC,MAAAA,IAAI,CAACH,QAAD,CAAJ;AACD;AACF,GALD;AAOA,SAAOF,MAAP;AACD;;AAEc,SAASc,cAAT,CACblB,SADa,EAEc;AAC3B;AACA,MAAMmB,gBAAgB,GAAGpB,KAAK,CAACC,SAAD,CAA9B,CAF2B;;AAK3B,SAAOF,cAAc,CAACsB,MAAf,CAAsB,UAACC,GAAD,EAAMC,KAAN,EAAgB;AAC3C,WAAOD,GAAG,CAACxD,MAAJ,CACLsD,gBAAgB,CAACvC,MAAjB,CAAwB,UAAA0B,QAAQ;AAAA,aAAIA,QAAQ,CAACgB,KAAT,KAAmBA,KAAvB;AAAA,KAAhC,CADK,CAAP;AAGD,GAJM,EAIJ,EAJI,CAAP;AAKD;;ACxDc,SAASC,QAAT,CAAqBC,EAArB,EAAqD;AAClE,MAAIC,OAAJ;AACA,SAAO,YAAM;AACX,QAAI,CAACA,OAAL,EAAc;AACZA,MAAAA,OAAO,GAAG,IAAIC,OAAJ,CAAe,UAAAC,OAAO,EAAI;AAClCD,QAAAA,OAAO,CAACC,OAAR,GAAkBC,IAAlB,CAAuB,YAAM;AAC3BH,UAAAA,OAAO,GAAGI,SAAV;AACAF,UAAAA,OAAO,CAACH,EAAE,EAAH,CAAP;AACD,SAHD;AAID,OALS,CAAV;AAMD;;AAED,WAAOC,OAAP;AACD,GAXD;AAYD;;ACbc,SAASK,WAAT,CACb9B,SADa,EAEsB;AACnC,MAAM+B,MAAM,GAAG/B,SAAS,CAACoB,MAAV,CAAiB,UAACW,MAAD,EAASC,OAAT,EAAqB;AACnD,QAAMC,QAAQ,GAAGF,MAAM,CAACC,OAAO,CAACxB,IAAT,CAAvB;AACAuB,IAAAA,MAAM,CAACC,OAAO,CAACxB,IAAT,CAAN,GAAuByB,QAAQ,qBAEtBA,QAFsB,EAGtBD,OAHsB;AAIzBE,MAAAA,OAAO,oBAAOD,QAAQ,CAACC,OAAhB,EAA4BF,OAAO,CAACE,OAApC,CAJkB;AAKzBC,MAAAA,IAAI,oBAAOF,QAAQ,CAACE,IAAhB,EAAyBH,OAAO,CAACG,IAAjC;AALqB,SAO3BH,OAPJ;AAQA,WAAOD,MAAP;AACD,GAXc,EAWZ,EAXY,CAAf,CADmC;;AAenC,SAAOK,MAAM,CAACC,IAAP,CAAYN,MAAZ,EAAoB7I,GAApB,CAAwB,UAAAoJ,GAAG;AAAA,WAAIP,MAAM,CAACO,GAAD,CAAV;AAAA,GAA3B,CAAP;AACD;;ACdc,SAASC,eAAT,CACb5I,OADa,EAEb6I,QAFa,EAGb;AACA,MAAMxH,GAAG,GAAGtD,SAAS,CAACiC,OAAD,CAArB;AACA,MAAM8I,IAAI,GAAG/G,kBAAkB,CAAC/B,OAAD,CAA/B;AACA,MAAMU,cAAc,GAAGW,GAAG,CAACX,cAA3B;AAEA,MAAIH,KAAK,GAAGuI,IAAI,CAACC,WAAjB;AACA,MAAItI,MAAM,GAAGqI,IAAI,CAACE,YAAlB;AACA,MAAIpI,CAAC,GAAG,CAAR;AACA,MAAIG,CAAC,GAAG,CAAR;;AAEA,MAAIL,cAAJ,EAAoB;AAClBH,IAAAA,KAAK,GAAGG,cAAc,CAACH,KAAvB;AACAE,IAAAA,MAAM,GAAGC,cAAc,CAACD,MAAxB;AAEA,QAAMwI,cAAc,GAAGpJ,gBAAgB,EAAvC;;AAEA,QAAIoJ,cAAc,IAAK,CAACA,cAAD,IAAmBJ,QAAQ,KAAK,OAAvD,EAAiE;AAC/DjI,MAAAA,CAAC,GAAGF,cAAc,CAACI,UAAnB;AACAC,MAAAA,CAAC,GAAGL,cAAc,CAACO,SAAnB;AACD;AACF;;AAED,SAAO;AACLV,IAAAA,KAAK,EAALA,KADK;AAELE,IAAAA,MAAM,EAANA,MAFK;AAGLG,IAAAA,CAAC,EAAEA,CAAC,GAAGsB,mBAAmB,CAAClC,OAAD,CAHrB;AAILe,IAAAA,CAAC,EAADA;AAJK,GAAP;AAMD;;AC7BD;;AACe,SAASmI,eAAT,CAAyBlJ,OAAzB,EAAqD;AAAA;;AAClE,MAAM8I,IAAI,GAAG/G,kBAAkB,CAAC/B,OAAD,CAA/B;AACA,MAAMmJ,SAAS,GAAG/H,eAAe,CAACpB,OAAD,CAAjC;AACA,MAAM4D,IAAI,4BAAG5D,OAAO,CAAC7B,aAAX,qBAAG,sBAAuByF,IAApC;AAEA,MAAMrD,KAAK,GAAG3B,GAAG,CACfkK,IAAI,CAACM,WADU,EAEfN,IAAI,CAACC,WAFU,EAGfnF,IAAI,GAAGA,IAAI,CAACwF,WAAR,GAAsB,CAHX,EAIfxF,IAAI,GAAGA,IAAI,CAACmF,WAAR,GAAsB,CAJX,CAAjB;AAMA,MAAMtI,MAAM,GAAG7B,GAAG,CAChBkK,IAAI,CAACO,YADW,EAEhBP,IAAI,CAACE,YAFW,EAGhBpF,IAAI,GAAGA,IAAI,CAACyF,YAAR,GAAuB,CAHX,EAIhBzF,IAAI,GAAGA,IAAI,CAACoF,YAAR,GAAuB,CAJX,CAAlB;AAOA,MAAIpI,CAAC,GAAG,CAACuI,SAAS,CAAC7H,UAAX,GAAwBY,mBAAmB,CAAClC,OAAD,CAAnD;AACA,MAAMe,CAAC,GAAG,CAACoI,SAAS,CAAC3H,SAArB;;AAEA,MAAIW,gBAAgB,CAACyB,IAAI,IAAIkF,IAAT,CAAhB,CAA+BQ,SAA/B,KAA6C,KAAjD,EAAwD;AACtD1I,IAAAA,CAAC,IAAIhC,GAAG,CAACkK,IAAI,CAACC,WAAN,EAAmBnF,IAAI,GAAGA,IAAI,CAACmF,WAAR,GAAsB,CAA7C,CAAH,GAAqDxI,KAA1D;AACD;;AAED,SAAO;AAAEA,IAAAA,KAAK,EAALA,KAAF;AAASE,IAAAA,MAAM,EAANA,MAAT;AAAiBG,IAAAA,CAAC,EAADA,CAAjB;AAAoBG,IAAAA,CAAC,EAADA;AAApB,GAAP;AACD;;ACjCc,SAASwI,QAAT,CAAkBC,MAAlB,EAAmCC,KAAnC,EAAmD;AAChE,MAAMC,QAAQ,GAAGD,KAAK,CAACE,WAAN,IAAqBF,KAAK,CAACE,WAAN,EAAtC,CADgE;;AAIhE,MAAIH,MAAM,CAACD,QAAP,CAAgBE,KAAhB,CAAJ,EAA4B;AAC1B,WAAO,IAAP;AACD,GAFD;AAAA,OAIK,IAAIC,QAAQ,IAAIhL,YAAY,CAACgL,QAAD,CAA5B,EAAwC;AAC3C,UAAIE,IAAI,GAAGH,KAAX;;AACA,SAAG;AACD,YAAIG,IAAI,IAAIJ,MAAM,CAACK,UAAP,CAAkBD,IAAlB,CAAZ,EAAqC;AACnC,iBAAO,IAAP;AACD,SAHA;;;AAKDA,QAAAA,IAAI,GAAGA,IAAI,CAACpG,UAAL,IAAmBoG,IAAI,CAACnG,IAA/B;AACD,OAND,QAMSmG,IANT;AAOD,KAjB+D;;;AAoBhE,SAAO,KAAP;AACD;;ACrBc,SAASE,gBAAT,CAA0BrH,IAA1B,EAAwD;AACrE,2BACKA,IADL;AAEE5B,IAAAA,IAAI,EAAE4B,IAAI,CAAC7B,CAFb;AAGEI,IAAAA,GAAG,EAAEyB,IAAI,CAAC1B,CAHZ;AAIEG,IAAAA,KAAK,EAAEuB,IAAI,CAAC7B,CAAL,GAAS6B,IAAI,CAAClC,KAJvB;AAKEY,IAAAA,MAAM,EAAEsB,IAAI,CAAC1B,CAAL,GAAS0B,IAAI,CAAChC;AALxB;AAOD;;ACOD,SAASsJ,0BAAT,CACE/J,OADF,EAEE6I,QAFF,EAGE;AACA,MAAMpG,IAAI,GAAG1C,qBAAqB,CAACC,OAAD,EAAU,KAAV,EAAiB6I,QAAQ,KAAK,OAA9B,CAAlC;AAEApG,EAAAA,IAAI,CAACzB,GAAL,GAAWyB,IAAI,CAACzB,GAAL,GAAWhB,OAAO,CAACmD,SAA9B;AACAV,EAAAA,IAAI,CAAC5B,IAAL,GAAY4B,IAAI,CAAC5B,IAAL,GAAYb,OAAO,CAACkD,UAAhC;AACAT,EAAAA,IAAI,CAACtB,MAAL,GAAcsB,IAAI,CAACzB,GAAL,GAAWhB,OAAO,CAACgJ,YAAjC;AACAvG,EAAAA,IAAI,CAACvB,KAAL,GAAauB,IAAI,CAAC5B,IAAL,GAAYb,OAAO,CAAC+I,WAAjC;AACAtG,EAAAA,IAAI,CAAClC,KAAL,GAAaP,OAAO,CAAC+I,WAArB;AACAtG,EAAAA,IAAI,CAAChC,MAAL,GAAcT,OAAO,CAACgJ,YAAtB;AACAvG,EAAAA,IAAI,CAAC7B,CAAL,GAAS6B,IAAI,CAAC5B,IAAd;AACA4B,EAAAA,IAAI,CAAC1B,CAAL,GAAS0B,IAAI,CAACzB,GAAd;AAEA,SAAOyB,IAAP;AACD;;AAED,SAASuH,0BAAT,CACEhK,OADF,EAEEiK,cAFF,EAGEpB,QAHF,EAIoB;AAClB,SAAOoB,cAAc,KAAK1E,QAAnB,GACHuE,gBAAgB,CAAClB,eAAe,CAAC5I,OAAD,EAAU6I,QAAV,CAAhB,CADb,GAEHxK,SAAS,CAAC4L,cAAD,CAAT,GACAF,0BAA0B,CAACE,cAAD,EAAiBpB,QAAjB,CAD1B,GAEAiB,gBAAgB,CAACZ,eAAe,CAACnH,kBAAkB,CAAC/B,OAAD,CAAnB,CAAhB,CAJpB;AAKD;AAGD;AACA;;;AACA,SAASkK,kBAAT,CAA4BlK,OAA5B,EAA8D;AAC5D,MAAMsF,eAAe,GAAGzB,iBAAiB,CAACP,aAAa,CAACtD,OAAD,CAAd,CAAzC;AACA,MAAMmK,iBAAiB,GACrB,CAAC,UAAD,EAAa,OAAb,EAAsBxG,OAAtB,CAA8BxB,gBAAgB,CAACnC,OAAD,CAAhB,CAA0BsE,QAAxD,KAAqE,CADvE;AAEA,MAAM8F,cAAc,GAClBD,iBAAiB,IAAI3L,aAAa,CAACwB,OAAD,CAAlC,GACIkF,eAAe,CAAClF,OAAD,CADnB,GAEIA,OAHN;;AAKA,MAAI,CAAC3B,SAAS,CAAC+L,cAAD,CAAd,EAAgC;AAC9B,WAAO,EAAP;AACD,GAX2D;;;AAc5D,SAAO9E,eAAe,CAACL,MAAhB,CACL,UAACgF,cAAD;AAAA,WACE5L,SAAS,CAAC4L,cAAD,CAAT,IACAV,QAAQ,CAACU,cAAD,EAAiBG,cAAjB,CADR,IAEAxI,WAAW,CAACqI,cAAD,CAAX,KAAgC,MAHlC;AAAA,GADK,CAAP;AAMD;AAGD;;;AACe,SAASI,eAAT,CACbrK,OADa,EAEbsK,QAFa,EAGbC,YAHa,EAIb1B,QAJa,EAKK;AAClB,MAAM2B,mBAAmB,GACvBF,QAAQ,KAAK,iBAAb,GACIJ,kBAAkB,CAAClK,OAAD,CADtB,GAEI,GAAGkE,MAAH,CAAUoG,QAAV,CAHN;AAIA,MAAMhF,eAAe,aAAOkF,mBAAP,GAA4BD,YAA5B,EAArB;AACA,MAAME,mBAAmB,GAAGnF,eAAe,CAAC,CAAD,CAA3C;AAEA,MAAMoF,YAAY,GAAGpF,eAAe,CAACmC,MAAhB,CAAuB,UAACkD,OAAD,EAAUV,cAAV,EAA6B;AACvE,QAAMxH,IAAI,GAAGuH,0BAA0B,CAAChK,OAAD,EAAUiK,cAAV,EAA0BpB,QAA1B,CAAvC;AAEA8B,IAAAA,OAAO,CAAC3J,GAAR,GAAcpC,GAAG,CAAC6D,IAAI,CAACzB,GAAN,EAAW2J,OAAO,CAAC3J,GAAnB,CAAjB;AACA2J,IAAAA,OAAO,CAACzJ,KAAR,GAAgBpC,GAAG,CAAC2D,IAAI,CAACvB,KAAN,EAAayJ,OAAO,CAACzJ,KAArB,CAAnB;AACAyJ,IAAAA,OAAO,CAACxJ,MAAR,GAAiBrC,GAAG,CAAC2D,IAAI,CAACtB,MAAN,EAAcwJ,OAAO,CAACxJ,MAAtB,CAApB;AACAwJ,IAAAA,OAAO,CAAC9J,IAAR,GAAejC,GAAG,CAAC6D,IAAI,CAAC5B,IAAN,EAAY8J,OAAO,CAAC9J,IAApB,CAAlB;AAEA,WAAO8J,OAAP;AACD,GAToB,EASlBX,0BAA0B,CAAChK,OAAD,EAAUyK,mBAAV,EAA+B5B,QAA/B,CATR,CAArB;AAWA6B,EAAAA,YAAY,CAACnK,KAAb,GAAqBmK,YAAY,CAACxJ,KAAb,GAAqBwJ,YAAY,CAAC7J,IAAvD;AACA6J,EAAAA,YAAY,CAACjK,MAAb,GAAsBiK,YAAY,CAACvJ,MAAb,GAAsBuJ,YAAY,CAAC1J,GAAzD;AACA0J,EAAAA,YAAY,CAAC9J,CAAb,GAAiB8J,YAAY,CAAC7J,IAA9B;AACA6J,EAAAA,YAAY,CAAC3J,CAAb,GAAiB2J,YAAY,CAAC1J,GAA9B;AAEA,SAAO0J,YAAP;AACD;;ACtGc,SAASE,gBAAT,CACbC,SADa,EAEE;AACf,SAAQA,SAAS,CAACC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAR;AACD;;ACJc,SAASC,YAAT,CAAsBF,SAAtB,EAAwD;AACrE,SAAQA,SAAS,CAACC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAR;AACD;;ACFc,SAASE,wBAAT,CACbH,SADa,EAEF;AACX,SAAO,CAAC,KAAD,EAAQ,QAAR,EAAkBlH,OAAlB,CAA0BkH,SAA1B,KAAwC,CAAxC,GAA4C,GAA5C,GAAkD,GAAzD;AACD;;ACKc,SAASI,cAAT,OASH;AAAA,MARVxF,SAQU,QARVA,SAQU;AAAA,MAPVzF,OAOU,QAPVA,OAOU;AAAA,MANV6K,SAMU,QANVA,SAMU;AACV,MAAMK,aAAa,GAAGL,SAAS,GAAGD,gBAAgB,CAACC,SAAD,CAAnB,GAAiC,IAAhE;AACA,MAAMM,SAAS,GAAGN,SAAS,GAAGE,YAAY,CAACF,SAAD,CAAf,GAA6B,IAAxD;AACA,MAAMO,OAAO,GAAG3F,SAAS,CAAC7E,CAAV,GAAc6E,SAAS,CAAClF,KAAV,GAAkB,CAAhC,GAAoCP,OAAO,CAACO,KAAR,GAAgB,CAApE;AACA,MAAM8K,OAAO,GAAG5F,SAAS,CAAC1E,CAAV,GAAc0E,SAAS,CAAChF,MAAV,GAAmB,CAAjC,GAAqCT,OAAO,CAACS,MAAR,GAAiB,CAAtE;AAEA,MAAIwC,OAAJ;;AACA,UAAQiI,aAAR;AACE,SAAKlK,GAAL;AACEiC,MAAAA,OAAO,GAAG;AACRrC,QAAAA,CAAC,EAAEwK,OADK;AAERrK,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E,CAAV,GAAcf,OAAO,CAACS;AAFjB,OAAV;AAIA;;AACF,SAAKU,MAAL;AACE8B,MAAAA,OAAO,GAAG;AACRrC,QAAAA,CAAC,EAAEwK,OADK;AAERrK,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E,CAAV,GAAc0E,SAAS,CAAChF;AAFnB,OAAV;AAIA;;AACF,SAAKS,KAAL;AACE+B,MAAAA,OAAO,GAAG;AACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CAAV,GAAc6E,SAAS,CAAClF,KADnB;AAERQ,QAAAA,CAAC,EAAEsK;AAFK,OAAV;AAIA;;AACF,SAAKxK,IAAL;AACEoC,MAAAA,OAAO,GAAG;AACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CAAV,GAAcZ,OAAO,CAACO,KADjB;AAERQ,QAAAA,CAAC,EAAEsK;AAFK,OAAV;AAIA;;AACF;AACEpI,MAAAA,OAAO,GAAG;AACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CADL;AAERG,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E;AAFL,OAAV;AA1BJ;;AAgCA,MAAMuK,QAAQ,GAAGJ,aAAa,GAC1BF,wBAAwB,CAACE,aAAD,CADE,GAE1B,IAFJ;;AAIA,MAAII,QAAQ,IAAI,IAAhB,EAAsB;AACpB,QAAMC,GAAG,GAAGD,QAAQ,KAAK,GAAb,GAAmB,QAAnB,GAA8B,OAA1C;;AAEA,YAAQH,SAAR;AACE,WAAK/F,KAAL;AACEnC,QAAAA,OAAO,CAACqI,QAAD,CAAP,GACErI,OAAO,CAACqI,QAAD,CAAP,IAAqB7F,SAAS,CAAC8F,GAAD,CAAT,GAAiB,CAAjB,GAAqBvL,OAAO,CAACuL,GAAD,CAAP,GAAe,CAAzD,CADF;AAEA;;AACF,WAAKlG,GAAL;AACEpC,QAAAA,OAAO,CAACqI,QAAD,CAAP,GACErI,OAAO,CAACqI,QAAD,CAAP,IAAqB7F,SAAS,CAAC8F,GAAD,CAAT,GAAiB,CAAjB,GAAqBvL,OAAO,CAACuL,GAAD,CAAP,GAAe,CAAzD,CADF;AAEA;AARJ;AAWD;;AAED,SAAOtI,OAAP;AACD;;AC9Ec,SAASuI,kBAAT,GAA0C;AACvD,SAAO;AACLxK,IAAAA,GAAG,EAAE,CADA;AAELE,IAAAA,KAAK,EAAE,CAFF;AAGLC,IAAAA,MAAM,EAAE,CAHH;AAILN,IAAAA,IAAI,EAAE;AAJD,GAAP;AAMD;;ACNc,SAAS4K,kBAAT,CACbC,aADa,EAED;AACZ,2BACKF,kBAAkB,EADvB,EAEKE,aAFL;AAID;;ACTc,SAASC,eAAT,CAGbC,KAHa,EAGHlD,IAHG,EAGmC;AAChD,SAAOA,IAAI,CAACjB,MAAL,CAAY,UAACoE,OAAD,EAAUlD,GAAV,EAAkB;AACnCkD,IAAAA,OAAO,CAAClD,GAAD,CAAP,GAAeiD,KAAf;AACA,WAAOC,OAAP;AACD,GAHM,EAGJ,EAHI,CAAP;AAID;;ACuBc,SAASC,cAAT,CACbC,KADa,EAEbxD,OAFa,EAGD;AAAA,MADZA,OACY;AADZA,IAAAA,OACY,GADe,EACf;AAAA;;AAAA,iBASRA,OATQ;AAAA,oCAEVsC,SAFU;AAAA,MAEVA,SAFU,mCAEEkB,KAAK,CAAClB,SAFR;AAAA,mCAGVhC,QAHU;AAAA,MAGVA,QAHU,kCAGCkD,KAAK,CAAClD,QAHP;AAAA,mCAIVyB,QAJU;AAAA,MAIVA,QAJU,kCAIChF,eAJD;AAAA,uCAKViF,YALU;AAAA,MAKVA,YALU,sCAKKhF,QALL;AAAA,uCAMVyG,cANU;AAAA,MAMVA,cANU,sCAMOxG,MANP;AAAA,sCAOVyG,WAPU;AAAA,MAOVA,WAPU,qCAOI,KAPJ;AAAA,kCAQVC,OARU;AAAA,MAQVA,OARU,iCAQA,CARA;AAWZ,MAAMR,aAAa,GAAGD,kBAAkB,CACtC,OAAOS,OAAP,KAAmB,QAAnB,GACIA,OADJ,GAEIP,eAAe,CAACO,OAAD,EAAU/G,cAAV,CAHmB,CAAxC;AAMA,MAAMgH,UAAU,GAAGH,cAAc,KAAKxG,MAAnB,GAA4BC,SAA5B,GAAwCD,MAA3D;AAEA,MAAM4G,UAAU,GAAGL,KAAK,CAACM,KAAN,CAAY7G,MAA/B;AACA,MAAMxF,OAAO,GAAG+L,KAAK,CAACO,QAAN,CAAeL,WAAW,GAAGE,UAAH,GAAgBH,cAA1C,CAAhB;AAEA,MAAMO,kBAAkB,GAAGlC,eAAe,CACxChM,SAAS,CAAC2B,OAAD,CAAT,GACIA,OADJ,GAEIA,OAAO,CAACwM,cAAR,IAA0BzK,kBAAkB,CAACgK,KAAK,CAACO,QAAN,CAAe9G,MAAhB,CAHR,EAIxC8E,QAJwC,EAKxCC,YALwC,EAMxC1B,QANwC,CAA1C;AASA,MAAM4D,mBAAmB,GAAG1M,qBAAqB,CAACgM,KAAK,CAACO,QAAN,CAAe7G,SAAhB,CAAjD;AAEA,MAAMiH,aAAa,GAAGzB,cAAc,CAAC;AACnCxF,IAAAA,SAAS,EAAEgH,mBADwB;AAEnCzM,IAAAA,OAAO,EAAEoM,UAF0B;AAGnCvD,IAAAA,QAAQ,EAAE,UAHyB;AAInCgC,IAAAA,SAAS,EAATA;AAJmC,GAAD,CAApC;AAOA,MAAM8B,gBAAgB,GAAG7C,gBAAgB,mBACpCsC,UADoC,EAEpCM,aAFoC,EAAzC;AAKA,MAAME,iBAAiB,GACrBZ,cAAc,KAAKxG,MAAnB,GAA4BmH,gBAA5B,GAA+CF,mBADjD,CA7CY;AAiDZ;;AACA,MAAMI,eAAe,GAAG;AACtB7L,IAAAA,GAAG,EAAEuL,kBAAkB,CAACvL,GAAnB,GAAyB4L,iBAAiB,CAAC5L,GAA3C,GAAiD0K,aAAa,CAAC1K,GAD9C;AAEtBG,IAAAA,MAAM,EACJyL,iBAAiB,CAACzL,MAAlB,GACAoL,kBAAkB,CAACpL,MADnB,GAEAuK,aAAa,CAACvK,MALM;AAMtBN,IAAAA,IAAI,EAAE0L,kBAAkB,CAAC1L,IAAnB,GAA0B+L,iBAAiB,CAAC/L,IAA5C,GAAmD6K,aAAa,CAAC7K,IANjD;AAOtBK,IAAAA,KAAK,EACH0L,iBAAiB,CAAC1L,KAAlB,GAA0BqL,kBAAkB,CAACrL,KAA7C,GAAqDwK,aAAa,CAACxK;AAR/C,GAAxB;AAWA,MAAM4L,UAAU,GAAGf,KAAK,CAACgB,aAAN,CAAoBC,MAAvC,CA7DY;;AAgEZ,MAAIhB,cAAc,KAAKxG,MAAnB,IAA6BsH,UAAjC,EAA6C;AAC3C,QAAME,MAAM,GAAGF,UAAU,CAACjC,SAAD,CAAzB;AAEApC,IAAAA,MAAM,CAACC,IAAP,CAAYmE,eAAZ,EAA6BnG,OAA7B,CAAqC,UAACiC,GAAD,EAAS;AAC5C,UAAMsE,QAAQ,GAAG,CAAC/L,KAAD,EAAQC,MAAR,EAAgBwC,OAAhB,CAAwBgF,GAAxB,KAAgC,CAAhC,GAAoC,CAApC,GAAwC,CAAC,CAA1D;AACA,UAAMuE,IAAI,GAAG,CAAClM,GAAD,EAAMG,MAAN,EAAcwC,OAAd,CAAsBgF,GAAtB,KAA8B,CAA9B,GAAkC,GAAlC,GAAwC,GAArD;AACAkE,MAAAA,eAAe,CAAClE,GAAD,CAAf,IAAwBqE,MAAM,CAACE,IAAD,CAAN,GAAeD,QAAvC;AACD,KAJD;AAKD;;AAED,SAAOJ,eAAP;AACD;;AC7FD,IAAMM,eAAoC,GAAG;AAC3CtC,EAAAA,SAAS,EAAE,QADgC;AAE3CxE,EAAAA,SAAS,EAAE,EAFgC;AAG3CwC,EAAAA,QAAQ,EAAE;AAHiC,CAA7C;;AAWA,SAASuE,gBAAT,GAAwD;AAAA,oCAA3BC,IAA2B;AAA3BA,IAAAA,IAA2B;AAAA;;AACtD,SAAO,CAACA,IAAI,CAACC,IAAL,CACN,UAACtN,OAAD;AAAA,WACE,EAAEA,OAAO,IAAI,OAAOA,OAAO,CAACD,qBAAf,KAAyC,UAAtD,CADF;AAAA,GADM,CAAR;AAID;;AAEM,SAASwN,eAAT,CAAyBC,gBAAzB,EAAqE;AAAA,MAA5CA,gBAA4C;AAA5CA,IAAAA,gBAA4C,GAAJ,EAAI;AAAA;;AAAA,0BAExEA,gBAFwE;AAAA,gDAClEC,gBADkE;AAAA,MAClEA,gBADkE,sCAC/C,EAD+C;AAAA,iDAC3CC,cAD2C;AAAA,MAC3CA,cAD2C,uCAC1BP,eAD0B;AAI1E,SAAO,SAASQ,YAAT,CACLlI,SADK,EAELD,MAFK,EAGL+C,OAHK,EAIK;AAAA,QADVA,OACU;AADVA,MAAAA,OACU,GADmCmF,cACnC;AAAA;;AACV,QAAI3B,KAAoB,GAAG;AACzBlB,MAAAA,SAAS,EAAE,QADc;AAEzBrD,MAAAA,gBAAgB,EAAE,EAFO;AAGzBe,MAAAA,OAAO,oBAAO4E,eAAP,EAA2BO,cAA3B,CAHkB;AAIzBX,MAAAA,aAAa,EAAE,EAJU;AAKzBT,MAAAA,QAAQ,EAAE;AACR7G,QAAAA,SAAS,EAATA,SADQ;AAERD,QAAAA,MAAM,EAANA;AAFQ,OALe;AASzBoI,MAAAA,UAAU,EAAE,EATa;AAUzBC,MAAAA,MAAM,EAAE;AAViB,KAA3B;AAaA,QAAIC,gBAAmC,GAAG,EAA1C;AACA,QAAIC,WAAW,GAAG,KAAlB;AAEA,QAAMC,QAAQ,GAAG;AACfjC,MAAAA,KAAK,EAALA,KADe;AAEfkC,MAAAA,UAFe,sBAEJC,gBAFI,EAEc;AAC3B,YAAM3F,OAAO,GACX,OAAO2F,gBAAP,KAA4B,UAA5B,GACIA,gBAAgB,CAACnC,KAAK,CAACxD,OAAP,CADpB,GAEI2F,gBAHN;AAKAC,QAAAA,sBAAsB;AAEtBpC,QAAAA,KAAK,CAACxD,OAAN,qBAEKmF,cAFL,EAGK3B,KAAK,CAACxD,OAHX,EAIKA,OAJL;AAOAwD,QAAAA,KAAK,CAACqC,aAAN,GAAsB;AACpB3I,UAAAA,SAAS,EAAEpH,SAAS,CAACoH,SAAD,CAAT,GACP5B,iBAAiB,CAAC4B,SAAD,CADV,GAEPA,SAAS,CAAC+G,cAAV,GACA3I,iBAAiB,CAAC4B,SAAS,CAAC+G,cAAX,CADjB,GAEA,EALgB;AAMpBhH,UAAAA,MAAM,EAAE3B,iBAAiB,CAAC2B,MAAD;AANL,SAAtB,CAf2B;AAyB3B;;AACA,YAAMgC,gBAAgB,GAAGD,cAAc,CACrCY,WAAW,WAAKsF,gBAAL,EAA0B1B,KAAK,CAACxD,OAAN,CAAclC,SAAxC,EAD0B,CAAvC,CA1B2B;;AA+B3B0F,QAAAA,KAAK,CAACvE,gBAAN,GAAyBA,gBAAgB,CAACvC,MAAjB,CAAwB,UAACoJ,CAAD;AAAA,iBAAOA,CAAC,CAACC,OAAT;AAAA,SAAxB,CAAzB;AAEAC,QAAAA,kBAAkB;AAElB,eAAOP,QAAQ,CAACQ,MAAT,EAAP;AACD,OAtCc;AAwCf;AACA;AACA;AACA;AACA;AACAC,MAAAA,WA7Ce,yBA6CD;AACZ,YAAIV,WAAJ,EAAiB;AACf;AACD;;AAHW,8BAKkBhC,KAAK,CAACO,QALxB;AAAA,YAKJ7G,SALI,mBAKJA,SALI;AAAA,YAKOD,MALP,mBAKOA,MALP;AAQZ;;AACA,YAAI,CAAC4H,gBAAgB,CAAC3H,SAAD,EAAYD,MAAZ,CAArB,EAA0C;AACxC;AACD,SAXW;;;AAcZuG,QAAAA,KAAK,CAACM,KAAN,GAAc;AACZ5G,UAAAA,SAAS,EAAE/C,gBAAgB,CACzB+C,SADyB,EAEzBP,eAAe,CAACM,MAAD,CAFU,EAGzBuG,KAAK,CAACxD,OAAN,CAAcM,QAAd,KAA2B,OAHF,CADf;AAMZrD,UAAAA,MAAM,EAAEpC,aAAa,CAACoC,MAAD;AANT,SAAd,CAdY;AAwBZ;AACA;AACA;AACA;;AACAuG,QAAAA,KAAK,CAAC2C,KAAN,GAAc,KAAd;AAEA3C,QAAAA,KAAK,CAAClB,SAAN,GAAkBkB,KAAK,CAACxD,OAAN,CAAcsC,SAAhC,CA9BY;AAiCZ;AACA;AACA;;AACAkB,QAAAA,KAAK,CAACvE,gBAAN,CAAuBd,OAAvB,CACE,UAACC,QAAD;AAAA,iBACGoF,KAAK,CAACgB,aAAN,CAAoBpG,QAAQ,CAACE,IAA7B,sBACIF,QAAQ,CAAC6B,IADb,CADH;AAAA,SADF;;AAOA,aAAK,IAAImG,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG5C,KAAK,CAACvE,gBAAN,CAAuBoH,MAAnD,EAA2DD,KAAK,EAAhE,EAAoE;AAClE,cAAI5C,KAAK,CAAC2C,KAAN,KAAgB,IAApB,EAA0B;AACxB3C,YAAAA,KAAK,CAAC2C,KAAN,GAAc,KAAd;AACAC,YAAAA,KAAK,GAAG,CAAC,CAAT;AACA;AACD;;AALiE,sCAO/B5C,KAAK,CAACvE,gBAAN,CAAuBmH,KAAvB,CAP+B;AAAA,cAO1D9G,EAP0D,yBAO1DA,EAP0D;AAAA,6DAOtDU,OAPsD;AAAA,cAOtDA,QAPsD,uCAO5C,EAP4C;AAAA,cAOxC1B,IAPwC,yBAOxCA,IAPwC;;AASlE,cAAI,OAAOgB,EAAP,KAAc,UAAlB,EAA8B;AAC5BkE,YAAAA,KAAK,GAAGlE,EAAE,CAAC;AAAEkE,cAAAA,KAAK,EAALA,KAAF;AAASxD,cAAAA,OAAO,EAAPA,QAAT;AAAkB1B,cAAAA,IAAI,EAAJA,IAAlB;AAAwBmH,cAAAA,QAAQ,EAARA;AAAxB,aAAD,CAAF,IAA0CjC,KAAlD;AACD;AACF;AACF,OArGc;AAuGf;AACA;AACAyC,MAAAA,MAAM,EAAE5G,QAAQ,CACd;AAAA,eACE,IAAIG,OAAJ,CAA2B,UAACC,OAAD,EAAa;AACtCgG,UAAAA,QAAQ,CAACS,WAAT;AACAzG,UAAAA,OAAO,CAAC+D,KAAD,CAAP;AACD,SAHD,CADF;AAAA,OADc,CAzGD;AAiHf8C,MAAAA,OAjHe,qBAiHL;AACRV,QAAAA,sBAAsB;AACtBJ,QAAAA,WAAW,GAAG,IAAd;AACD;AApHc,KAAjB;;AAuHA,QAAI,CAACX,gBAAgB,CAAC3H,SAAD,EAAYD,MAAZ,CAArB,EAA0C;AACxC,aAAOwI,QAAP;AACD;;AAEDA,IAAAA,QAAQ,CAACC,UAAT,CAAoB1F,OAApB,EAA6BN,IAA7B,CAAkC,UAAC8D,KAAD,EAAW;AAC3C,UAAI,CAACgC,WAAD,IAAgBxF,OAAO,CAACuG,aAA5B,EAA2C;AACzCvG,QAAAA,OAAO,CAACuG,aAAR,CAAsB/C,KAAtB;AACD;AACF,KAJD,EA5IU;AAmJV;AACA;AACA;AACA;;AACA,aAASwC,kBAAT,GAA8B;AAC5BxC,MAAAA,KAAK,CAACvE,gBAAN,CAAuBd,OAAvB,CAA+B,gBAAoC;AAAA,YAAjCG,IAAiC,QAAjCA,IAAiC;AAAA,gCAA3B0B,OAA2B;AAAA,YAA3BA,OAA2B,6BAAjB,EAAiB;AAAA,YAAbwG,MAAa,QAAbA,MAAa;;AACjE,YAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;AAChC,cAAMC,SAAS,GAAGD,MAAM,CAAC;AAAEhD,YAAAA,KAAK,EAALA,KAAF;AAASlF,YAAAA,IAAI,EAAJA,IAAT;AAAemH,YAAAA,QAAQ,EAARA,QAAf;AAAyBzF,YAAAA,OAAO,EAAPA;AAAzB,WAAD,CAAxB;;AACA,cAAM0G,MAAM,GAAG,SAATA,MAAS,GAAM,EAArB;;AACAnB,UAAAA,gBAAgB,CAACxG,IAAjB,CAAsB0H,SAAS,IAAIC,MAAnC;AACD;AACF,OAND;AAOD;;AAED,aAASd,sBAAT,GAAkC;AAChCL,MAAAA,gBAAgB,CAACpH,OAAjB,CAAyB,UAACmB,EAAD;AAAA,eAAQA,EAAE,EAAV;AAAA,OAAzB;AACAiG,MAAAA,gBAAgB,GAAG,EAAnB;AACD;;AAED,WAAOE,QAAP;AACD,GA3KD;AA4KD;IAEYL,YAAY,gBAAGJ,eAAe;;;;"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-lite.js b/node_modules/@popperjs/core/dist/cjs/popper-lite.js
new file mode 100644
index 0000000000000000000000000000000000000000..11f132234e6a056aab4c61a34da3af1779d4d6db
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-lite.js
@@ -0,0 +1,1260 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+var max = Math.max;
+var min = Math.min;
+var round = Math.round;
+
+function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
+
+function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
+
+function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
+
+function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
+
+function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
+
+function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
+
+function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
+
+function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
+
+function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
+
+function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
+
+function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
+
+// means it doesn't take into account transforms.
+
+function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
+
+function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
+
+function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
+
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
+
+function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
+
+var top = 'top';
+var bottom = 'bottom';
+var right = 'right';
+var left = 'left';
+var basePlacements = [top, bottom, right, left];
+var start = 'start';
+var end = 'end';
+var clippingParents = 'clippingParents';
+var viewport = 'viewport';
+var popper = 'popper';
+var reference = 'reference';
+
+var beforeRead = 'beforeRead';
+var read = 'read';
+var afterRead = 'afterRead'; // pure-logic modifiers
+
+var beforeMain = 'beforeMain';
+var main = 'main';
+var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+var beforeWrite = 'beforeWrite';
+var write = 'write';
+var afterWrite = 'afterWrite';
+var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
+
+function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
+
+function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
+
+function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
+
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
+
+function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
+
+function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
+
+function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
+
+function getVariation(placement) {
+  return placement.split('-')[1];
+}
+
+function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
+
+function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+    }
+  }
+
+  return offsets;
+}
+
+function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
+
+function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
+
+function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
+
+function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
+
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        });
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref) {
+        var name = _ref.name,
+            _ref$options = _ref.options,
+            options = _ref$options === void 0 ? {} : _ref$options,
+            effect = _ref.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+
+var passive = {
+  passive: true
+};
+
+function effect$1(_ref) {
+  var state = _ref.state,
+      instance = _ref.instance,
+      options = _ref.options;
+  var _options$scroll = options.scroll,
+      scroll = _options$scroll === void 0 ? true : _options$scroll,
+      _options$resize = options.resize,
+      resize = _options$resize === void 0 ? true : _options$resize;
+  var window = getWindow(state.elements.popper);
+  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+  if (scroll) {
+    scrollParents.forEach(function (scrollParent) {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return function () {
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var eventListeners = {
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: function fn() {},
+  effect: effect$1,
+  data: {}
+};
+
+function popperOffsets(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var popperOffsets$1 = {
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {}
+};
+
+var unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto'
+}; // Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+
+function roundOffsetsByDPR(_ref, win) {
+  var x = _ref.x,
+      y = _ref.y;
+  var dpr = win.devicePixelRatio || 1;
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0
+  };
+}
+
+function mapToStyles(_ref2) {
+  var _Object$assign2;
+
+  var popper = _ref2.popper,
+      popperRect = _ref2.popperRect,
+      placement = _ref2.placement,
+      variation = _ref2.variation,
+      offsets = _ref2.offsets,
+      position = _ref2.position,
+      gpuAcceleration = _ref2.gpuAcceleration,
+      adaptive = _ref2.adaptive,
+      roundOffsets = _ref2.roundOffsets,
+      isFixed = _ref2.isFixed;
+  var _offsets$x = offsets.x,
+      x = _offsets$x === void 0 ? 0 : _offsets$x,
+      _offsets$y = offsets.y,
+      y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref3.x;
+  y = _ref3.y;
+  var hasX = offsets.hasOwnProperty('x');
+  var hasY = offsets.hasOwnProperty('y');
+  var sideX = left;
+  var sideY = top;
+  var win = window;
+
+  if (adaptive) {
+    var offsetParent = getOffsetParent(popper);
+    var heightProp = 'clientHeight';
+    var widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+    offsetParent = offsetParent;
+
+    if (placement === top || (placement === left || placement === right) && variation === end) {
+      sideY = bottom;
+      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+      offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (placement === left || (placement === top || placement === bottom) && variation === end) {
+      sideX = right;
+      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+      offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  var commonStyles = Object.assign({
+    position: position
+  }, adaptive && unsetSides);
+
+  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+    x: x,
+    y: y
+  }, getWindow(popper)) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref4.x;
+  y = _ref4.y;
+
+  if (gpuAcceleration) {
+    var _Object$assign;
+
+    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+  }
+
+  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+}
+
+function computeStyles(_ref5) {
+  var state = _ref5.state,
+      options = _ref5.options;
+  var _options$gpuAccelerat = options.gpuAcceleration,
+      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+      _options$adaptive = options.adaptive,
+      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+      _options$roundOffsets = options.roundOffsets,
+      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+  var commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration: gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed'
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.popperOffsets,
+      position: state.options.strategy,
+      adaptive: adaptive,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.arrow,
+      position: 'absolute',
+      adaptive: false,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-placement': state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var computeStyles$1 = {
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {}
+};
+
+// and applies them to the HTMLElements such as popper and arrow
+
+function applyStyles(_ref) {
+  var state = _ref.state;
+  Object.keys(state.elements).forEach(function (name) {
+    var style = state.styles[name] || {};
+    var attributes = state.attributes[name] || {};
+    var element = state.elements[name]; // arrow is optional + virtual elements
+
+    if (!isHTMLElement(element) || !getNodeName(element)) {
+      return;
+    } // Flow doesn't support to extend this property, but it's the most
+    // effective way to apply styles to an HTMLElement
+    // $FlowFixMe[cannot-write]
+
+
+    Object.assign(element.style, style);
+    Object.keys(attributes).forEach(function (name) {
+      var value = attributes[name];
+
+      if (value === false) {
+        element.removeAttribute(name);
+      } else {
+        element.setAttribute(name, value === true ? '' : value);
+      }
+    });
+  });
+}
+
+function effect(_ref2) {
+  var state = _ref2.state;
+  var initialStyles = {
+    popper: {
+      position: state.options.strategy,
+      left: '0',
+      top: '0',
+      margin: '0'
+    },
+    arrow: {
+      position: 'absolute'
+    },
+    reference: {}
+  };
+  Object.assign(state.elements.popper.style, initialStyles.popper);
+  state.styles = initialStyles;
+
+  if (state.elements.arrow) {
+    Object.assign(state.elements.arrow.style, initialStyles.arrow);
+  }
+
+  return function () {
+    Object.keys(state.elements).forEach(function (name) {
+      var element = state.elements[name];
+      var attributes = state.attributes[name] || {};
+      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+      var style = styleProperties.reduce(function (style, property) {
+        style[property] = '';
+        return style;
+      }, {}); // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      }
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (attribute) {
+        element.removeAttribute(attribute);
+      });
+    });
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var applyStyles$1 = {
+  name: 'applyStyles',
+  enabled: true,
+  phase: 'write',
+  fn: applyStyles,
+  effect: effect,
+  requires: ['computeStyles']
+};
+
+var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+exports.createPopper = createPopper;
+exports.defaultModifiers = defaultModifiers;
+exports.detectOverflow = detectOverflow;
+exports.popperGenerator = popperGenerator;
+//# sourceMappingURL=popper-lite.js.map
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-lite.js.flow b/node_modules/@popperjs/core/dist/cjs/popper-lite.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8658c44fb7105873656e034d61cd69e8114867e4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-lite.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper-lite.js'
diff --git a/node_modules/@popperjs/core/dist/cjs/popper-lite.js.map b/node_modules/@popperjs/core/dist/cjs/popper-lite.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..35316758a58ddb74dd90870877ff26f49c5c0a84
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper-lite.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-lite.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js","../../src/modifiers/eventListeners.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/computeStyles.js","../../src/modifiers/applyStyles.js","../../src/popper-lite.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","basePlacements","start","end","clippingParents","viewport","popper","reference","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","reduce","acc","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","placement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn","passive","resize","addEventListener","removeEventListener","unsetSides","roundOffsetsByDPR","dpr","devicePixelRatio","mapToStyles","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","computeStyles","arrow","applyStyles","style","assign","removeAttribute","setAttribute","initialStyles","margin","styleProperties","property","attribute","eventListeners"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/cjs/popper.js b/node_modules/@popperjs/core/dist/cjs/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f6f4f0a44b4cd740f35301cfb8a2702a636727e
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper.js
@@ -0,0 +1,1819 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+var max = Math.max;
+var min = Math.min;
+var round = Math.round;
+
+function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
+
+function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
+
+function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
+
+function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
+
+function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
+
+function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
+
+function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
+
+function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
+
+function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
+
+function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
+
+function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
+
+// means it doesn't take into account transforms.
+
+function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
+
+function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
+
+function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
+
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
+
+function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
+
+var top = 'top';
+var bottom = 'bottom';
+var right = 'right';
+var left = 'left';
+var auto = 'auto';
+var basePlacements = [top, bottom, right, left];
+var start = 'start';
+var end = 'end';
+var clippingParents = 'clippingParents';
+var viewport = 'viewport';
+var popper = 'popper';
+var reference = 'reference';
+var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+  return acc.concat([placement + "-" + start, placement + "-" + end]);
+}, []);
+var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+}, []); // modifiers that need to read the DOM
+
+var beforeRead = 'beforeRead';
+var read = 'read';
+var afterRead = 'afterRead'; // pure-logic modifiers
+
+var beforeMain = 'beforeMain';
+var main = 'main';
+var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+var beforeWrite = 'beforeWrite';
+var write = 'write';
+var afterWrite = 'afterWrite';
+var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
+
+function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
+
+function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
+
+function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
+
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
+
+function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
+
+function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
+
+function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
+
+function getVariation(placement) {
+  return placement.split('-')[1];
+}
+
+function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
+
+function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+    }
+  }
+
+  return offsets;
+}
+
+function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
+
+function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
+
+function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
+
+function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
+
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        });
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref) {
+        var name = _ref.name,
+            _ref$options = _ref.options,
+            options = _ref$options === void 0 ? {} : _ref$options,
+            effect = _ref.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+
+var passive = {
+  passive: true
+};
+
+function effect$2(_ref) {
+  var state = _ref.state,
+      instance = _ref.instance,
+      options = _ref.options;
+  var _options$scroll = options.scroll,
+      scroll = _options$scroll === void 0 ? true : _options$scroll,
+      _options$resize = options.resize,
+      resize = _options$resize === void 0 ? true : _options$resize;
+  var window = getWindow(state.elements.popper);
+  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+  if (scroll) {
+    scrollParents.forEach(function (scrollParent) {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return function () {
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var eventListeners = {
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: function fn() {},
+  effect: effect$2,
+  data: {}
+};
+
+function popperOffsets(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var popperOffsets$1 = {
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {}
+};
+
+var unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto'
+}; // Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+
+function roundOffsetsByDPR(_ref, win) {
+  var x = _ref.x,
+      y = _ref.y;
+  var dpr = win.devicePixelRatio || 1;
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0
+  };
+}
+
+function mapToStyles(_ref2) {
+  var _Object$assign2;
+
+  var popper = _ref2.popper,
+      popperRect = _ref2.popperRect,
+      placement = _ref2.placement,
+      variation = _ref2.variation,
+      offsets = _ref2.offsets,
+      position = _ref2.position,
+      gpuAcceleration = _ref2.gpuAcceleration,
+      adaptive = _ref2.adaptive,
+      roundOffsets = _ref2.roundOffsets,
+      isFixed = _ref2.isFixed;
+  var _offsets$x = offsets.x,
+      x = _offsets$x === void 0 ? 0 : _offsets$x,
+      _offsets$y = offsets.y,
+      y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref3.x;
+  y = _ref3.y;
+  var hasX = offsets.hasOwnProperty('x');
+  var hasY = offsets.hasOwnProperty('y');
+  var sideX = left;
+  var sideY = top;
+  var win = window;
+
+  if (adaptive) {
+    var offsetParent = getOffsetParent(popper);
+    var heightProp = 'clientHeight';
+    var widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+    offsetParent = offsetParent;
+
+    if (placement === top || (placement === left || placement === right) && variation === end) {
+      sideY = bottom;
+      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+      offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (placement === left || (placement === top || placement === bottom) && variation === end) {
+      sideX = right;
+      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+      offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  var commonStyles = Object.assign({
+    position: position
+  }, adaptive && unsetSides);
+
+  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+    x: x,
+    y: y
+  }, getWindow(popper)) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref4.x;
+  y = _ref4.y;
+
+  if (gpuAcceleration) {
+    var _Object$assign;
+
+    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+  }
+
+  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+}
+
+function computeStyles(_ref5) {
+  var state = _ref5.state,
+      options = _ref5.options;
+  var _options$gpuAccelerat = options.gpuAcceleration,
+      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+      _options$adaptive = options.adaptive,
+      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+      _options$roundOffsets = options.roundOffsets,
+      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+  var commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration: gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed'
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.popperOffsets,
+      position: state.options.strategy,
+      adaptive: adaptive,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.arrow,
+      position: 'absolute',
+      adaptive: false,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-placement': state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var computeStyles$1 = {
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {}
+};
+
+// and applies them to the HTMLElements such as popper and arrow
+
+function applyStyles(_ref) {
+  var state = _ref.state;
+  Object.keys(state.elements).forEach(function (name) {
+    var style = state.styles[name] || {};
+    var attributes = state.attributes[name] || {};
+    var element = state.elements[name]; // arrow is optional + virtual elements
+
+    if (!isHTMLElement(element) || !getNodeName(element)) {
+      return;
+    } // Flow doesn't support to extend this property, but it's the most
+    // effective way to apply styles to an HTMLElement
+    // $FlowFixMe[cannot-write]
+
+
+    Object.assign(element.style, style);
+    Object.keys(attributes).forEach(function (name) {
+      var value = attributes[name];
+
+      if (value === false) {
+        element.removeAttribute(name);
+      } else {
+        element.setAttribute(name, value === true ? '' : value);
+      }
+    });
+  });
+}
+
+function effect$1(_ref2) {
+  var state = _ref2.state;
+  var initialStyles = {
+    popper: {
+      position: state.options.strategy,
+      left: '0',
+      top: '0',
+      margin: '0'
+    },
+    arrow: {
+      position: 'absolute'
+    },
+    reference: {}
+  };
+  Object.assign(state.elements.popper.style, initialStyles.popper);
+  state.styles = initialStyles;
+
+  if (state.elements.arrow) {
+    Object.assign(state.elements.arrow.style, initialStyles.arrow);
+  }
+
+  return function () {
+    Object.keys(state.elements).forEach(function (name) {
+      var element = state.elements[name];
+      var attributes = state.attributes[name] || {};
+      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+      var style = styleProperties.reduce(function (style, property) {
+        style[property] = '';
+        return style;
+      }, {}); // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      }
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (attribute) {
+        element.removeAttribute(attribute);
+      });
+    });
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var applyStyles$1 = {
+  name: 'applyStyles',
+  enabled: true,
+  phase: 'write',
+  fn: applyStyles,
+  effect: effect$1,
+  requires: ['computeStyles']
+};
+
+function distanceAndSkiddingToXY(placement, rects, offset) {
+  var basePlacement = getBasePlacement(placement);
+  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+    placement: placement
+  })) : offset,
+      skidding = _ref[0],
+      distance = _ref[1];
+
+  skidding = skidding || 0;
+  distance = (distance || 0) * invertDistance;
+  return [left, right].indexOf(basePlacement) >= 0 ? {
+    x: distance,
+    y: skidding
+  } : {
+    x: skidding,
+    y: distance
+  };
+}
+
+function offset(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options,
+      name = _ref2.name;
+  var _options$offset = options.offset,
+      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+  var data = placements.reduce(function (acc, placement) {
+    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+    return acc;
+  }, {});
+  var _data$state$placement = data[state.placement],
+      x = _data$state$placement.x,
+      y = _data$state$placement.y;
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.modifiersData.popperOffsets.x += x;
+    state.modifiersData.popperOffsets.y += y;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var offset$1 = {
+  name: 'offset',
+  enabled: true,
+  phase: 'main',
+  requires: ['popperOffsets'],
+  fn: offset
+};
+
+var hash$1 = {
+  left: 'right',
+  right: 'left',
+  bottom: 'top',
+  top: 'bottom'
+};
+function getOppositePlacement(placement) {
+  return placement.replace(/left|right|bottom|top/g, function (matched) {
+    return hash$1[matched];
+  });
+}
+
+var hash = {
+  start: 'end',
+  end: 'start'
+};
+function getOppositeVariationPlacement(placement) {
+  return placement.replace(/start|end/g, function (matched) {
+    return hash[matched];
+  });
+}
+
+function computeAutoPlacement(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      placement = _options.placement,
+      boundary = _options.boundary,
+      rootBoundary = _options.rootBoundary,
+      padding = _options.padding,
+      flipVariations = _options.flipVariations,
+      _options$allowedAutoP = _options.allowedAutoPlacements,
+      allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
+  var variation = getVariation(placement);
+  var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+    return getVariation(placement) === variation;
+  }) : basePlacements;
+  var allowedPlacements = placements$1.filter(function (placement) {
+    return allowedAutoPlacements.indexOf(placement) >= 0;
+  });
+
+  if (allowedPlacements.length === 0) {
+    allowedPlacements = placements$1;
+  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+  var overflows = allowedPlacements.reduce(function (acc, placement) {
+    acc[placement] = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding
+    })[getBasePlacement(placement)];
+    return acc;
+  }, {});
+  return Object.keys(overflows).sort(function (a, b) {
+    return overflows[a] - overflows[b];
+  });
+}
+
+function getExpandedFallbackPlacements(placement) {
+  if (getBasePlacement(placement) === auto) {
+    return [];
+  }
+
+  var oppositePlacement = getOppositePlacement(placement);
+  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+}
+
+function flip(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+
+  if (state.modifiersData[name]._skip) {
+    return;
+  }
+
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+      specifiedFallbackPlacements = options.fallbackPlacements,
+      padding = options.padding,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      _options$flipVariatio = options.flipVariations,
+      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+      allowedAutoPlacements = options.allowedAutoPlacements;
+  var preferredPlacement = state.options.placement;
+  var basePlacement = getBasePlacement(preferredPlacement);
+  var isBasePlacement = basePlacement === preferredPlacement;
+  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      flipVariations: flipVariations,
+      allowedAutoPlacements: allowedAutoPlacements
+    }) : placement);
+  }, []);
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var checksMap = new Map();
+  var makeFallbackChecks = true;
+  var firstFittingPlacement = placements[0];
+
+  for (var i = 0; i < placements.length; i++) {
+    var placement = placements[i];
+
+    var _basePlacement = getBasePlacement(placement);
+
+    var isStartVariation = getVariation(placement) === start;
+    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+    var len = isVertical ? 'width' : 'height';
+    var overflow = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      altBoundary: altBoundary,
+      padding: padding
+    });
+    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+    if (referenceRect[len] > popperRect[len]) {
+      mainVariationSide = getOppositePlacement(mainVariationSide);
+    }
+
+    var altVariationSide = getOppositePlacement(mainVariationSide);
+    var checks = [];
+
+    if (checkMainAxis) {
+      checks.push(overflow[_basePlacement] <= 0);
+    }
+
+    if (checkAltAxis) {
+      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+    }
+
+    if (checks.every(function (check) {
+      return check;
+    })) {
+      firstFittingPlacement = placement;
+      makeFallbackChecks = false;
+      break;
+    }
+
+    checksMap.set(placement, checks);
+  }
+
+  if (makeFallbackChecks) {
+    // `2` may be desired in some cases – research later
+    var numberOfChecks = flipVariations ? 3 : 1;
+
+    var _loop = function _loop(_i) {
+      var fittingPlacement = placements.find(function (placement) {
+        var checks = checksMap.get(placement);
+
+        if (checks) {
+          return checks.slice(0, _i).every(function (check) {
+            return check;
+          });
+        }
+      });
+
+      if (fittingPlacement) {
+        firstFittingPlacement = fittingPlacement;
+        return "break";
+      }
+    };
+
+    for (var _i = numberOfChecks; _i > 0; _i--) {
+      var _ret = _loop(_i);
+
+      if (_ret === "break") break;
+    }
+  }
+
+  if (state.placement !== firstFittingPlacement) {
+    state.modifiersData[name]._skip = true;
+    state.placement = firstFittingPlacement;
+    state.reset = true;
+  }
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var flip$1 = {
+  name: 'flip',
+  enabled: true,
+  phase: 'main',
+  fn: flip,
+  requiresIfExists: ['offset'],
+  data: {
+    _skip: false
+  }
+};
+
+function getAltAxis(axis) {
+  return axis === 'x' ? 'y' : 'x';
+}
+
+function within(min$1, value, max$1) {
+  return max(min$1, min(value, max$1));
+}
+function withinMaxClamp(min, value, max) {
+  var v = within(min, value, max);
+  return v > max ? max : v;
+}
+
+function preventOverflow(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      padding = options.padding,
+      _options$tether = options.tether,
+      tether = _options$tether === void 0 ? true : _options$tether,
+      _options$tetherOffset = options.tetherOffset,
+      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+  var overflow = detectOverflow(state, {
+    boundary: boundary,
+    rootBoundary: rootBoundary,
+    padding: padding,
+    altBoundary: altBoundary
+  });
+  var basePlacement = getBasePlacement(state.placement);
+  var variation = getVariation(state.placement);
+  var isBasePlacement = !variation;
+  var mainAxis = getMainAxisFromPlacement(basePlacement);
+  var altAxis = getAltAxis(mainAxis);
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : tetherOffset;
+  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+    mainAxis: tetherOffsetValue,
+    altAxis: tetherOffsetValue
+  } : Object.assign({
+    mainAxis: 0,
+    altAxis: 0
+  }, tetherOffsetValue);
+  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+  var data = {
+    x: 0,
+    y: 0
+  };
+
+  if (!popperOffsets) {
+    return;
+  }
+
+  if (checkMainAxis) {
+    var _offsetModifierState$;
+
+    var mainSide = mainAxis === 'y' ? top : left;
+    var altSide = mainAxis === 'y' ? bottom : right;
+    var len = mainAxis === 'y' ? 'height' : 'width';
+    var offset = popperOffsets[mainAxis];
+    var min$1 = offset + overflow[mainSide];
+    var max$1 = offset - overflow[altSide];
+    var additive = tether ? -popperRect[len] / 2 : 0;
+    var minLen = variation === start ? referenceRect[len] : popperRect[len];
+    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+    // outside the reference bounds
+
+    var arrowElement = state.elements.arrow;
+    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+      width: 0,
+      height: 0
+    };
+    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+    var arrowPaddingMin = arrowPaddingObject[mainSide];
+    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+    // to include its full size in the calculation. If the reference is small
+    // and near the edge of a boundary, the popper can overflow even if the
+    // reference is not overflowing as well (e.g. virtual elements with no
+    // width or height)
+
+    var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+    var tetherMax = offset + maxOffset - offsetModifierValue;
+    var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
+    popperOffsets[mainAxis] = preventedOffset;
+    data[mainAxis] = preventedOffset - offset;
+  }
+
+  if (checkAltAxis) {
+    var _offsetModifierState$2;
+
+    var _mainSide = mainAxis === 'x' ? top : left;
+
+    var _altSide = mainAxis === 'x' ? bottom : right;
+
+    var _offset = popperOffsets[altAxis];
+
+    var _len = altAxis === 'y' ? 'height' : 'width';
+
+    var _min = _offset + overflow[_mainSide];
+
+    var _max = _offset - overflow[_altSide];
+
+    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+    popperOffsets[altAxis] = _preventedOffset;
+    data[altAxis] = _preventedOffset - _offset;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var preventOverflow$1 = {
+  name: 'preventOverflow',
+  enabled: true,
+  phase: 'main',
+  fn: preventOverflow,
+  requiresIfExists: ['offset']
+};
+
+var toPaddingObject = function toPaddingObject(padding, state) {
+  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : padding;
+  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+};
+
+function arrow(_ref) {
+  var _state$modifiersData$;
+
+  var state = _ref.state,
+      name = _ref.name,
+      options = _ref.options;
+  var arrowElement = state.elements.arrow;
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var basePlacement = getBasePlacement(state.placement);
+  var axis = getMainAxisFromPlacement(basePlacement);
+  var isVertical = [left, right].indexOf(basePlacement) >= 0;
+  var len = isVertical ? 'height' : 'width';
+
+  if (!arrowElement || !popperOffsets) {
+    return;
+  }
+
+  var paddingObject = toPaddingObject(options.padding, state);
+  var arrowRect = getLayoutRect(arrowElement);
+  var minProp = axis === 'y' ? top : left;
+  var maxProp = axis === 'y' ? bottom : right;
+  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+  var arrowOffsetParent = getOffsetParent(arrowElement);
+  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+  // outside of the popper bounds
+
+  var min = paddingObject[minProp];
+  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+  var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+  var axisProp = axis;
+  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+}
+
+function effect(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options;
+  var _options$element = options.element,
+      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+  if (arrowElement == null) {
+    return;
+  } // CSS selector
+
+
+  if (typeof arrowElement === 'string') {
+    arrowElement = state.elements.popper.querySelector(arrowElement);
+
+    if (!arrowElement) {
+      return;
+    }
+  }
+
+  if (!contains(state.elements.popper, arrowElement)) {
+    return;
+  }
+
+  state.elements.arrow = arrowElement;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var arrow$1 = {
+  name: 'arrow',
+  enabled: true,
+  phase: 'main',
+  fn: arrow,
+  effect: effect,
+  requires: ['popperOffsets'],
+  requiresIfExists: ['preventOverflow']
+};
+
+function getSideOffsets(overflow, rect, preventedOffsets) {
+  if (preventedOffsets === void 0) {
+    preventedOffsets = {
+      x: 0,
+      y: 0
+    };
+  }
+
+  return {
+    top: overflow.top - rect.height - preventedOffsets.y,
+    right: overflow.right - rect.width + preventedOffsets.x,
+    bottom: overflow.bottom - rect.height + preventedOffsets.y,
+    left: overflow.left - rect.width - preventedOffsets.x
+  };
+}
+
+function isAnySideFullyClipped(overflow) {
+  return [top, right, bottom, left].some(function (side) {
+    return overflow[side] >= 0;
+  });
+}
+
+function hide(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var preventedOffsets = state.modifiersData.preventOverflow;
+  var referenceOverflow = detectOverflow(state, {
+    elementContext: 'reference'
+  });
+  var popperAltOverflow = detectOverflow(state, {
+    altBoundary: true
+  });
+  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+  state.modifiersData[name] = {
+    referenceClippingOffsets: referenceClippingOffsets,
+    popperEscapeOffsets: popperEscapeOffsets,
+    isReferenceHidden: isReferenceHidden,
+    hasPopperEscaped: hasPopperEscaped
+  };
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-reference-hidden': isReferenceHidden,
+    'data-popper-escaped': hasPopperEscaped
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var hide$1 = {
+  name: 'hide',
+  enabled: true,
+  phase: 'main',
+  requiresIfExists: ['preventOverflow'],
+  fn: hide
+};
+
+var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
+var createPopper$1 = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers$1
+}); // eslint-disable-next-line import/no-unused-modules
+
+var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+exports.applyStyles = applyStyles$1;
+exports.arrow = arrow$1;
+exports.computeStyles = computeStyles$1;
+exports.createPopper = createPopper;
+exports.createPopperLite = createPopper$1;
+exports.defaultModifiers = defaultModifiers;
+exports.detectOverflow = detectOverflow;
+exports.eventListeners = eventListeners;
+exports.flip = flip$1;
+exports.hide = hide$1;
+exports.offset = offset$1;
+exports.popperGenerator = popperGenerator;
+exports.popperOffsets = popperOffsets$1;
+exports.preventOverflow = preventOverflow$1;
+//# sourceMappingURL=popper.js.map
diff --git a/node_modules/@popperjs/core/dist/cjs/popper.js.flow b/node_modules/@popperjs/core/dist/cjs/popper.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e745d9276a79c84381f845363955c66f9e6fe9c7
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper.js'
diff --git a/node_modules/@popperjs/core/dist/cjs/popper.js.map b/node_modules/@popperjs/core/dist/cjs/popper.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..07cbbbc2d6336d0ee55eebb7380d1d44b854666c
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/cjs/popper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js","../../src/modifiers/eventListeners.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/computeStyles.js","../../src/modifiers/applyStyles.js","../../src/modifiers/offset.js","../../src/utils/getOppositePlacement.js","../../src/utils/getOppositeVariationPlacement.js","../../src/utils/computeAutoPlacement.js","../../src/modifiers/flip.js","../../src/utils/getAltAxis.js","../../src/utils/within.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/arrow.js","../../src/modifiers/hide.js","../../src/popper-lite.js","../../src/popper.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport type { Placement } from '../enums';\nimport type { ModifierArguments, Modifier, Rect, Offsets } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport { top, left, right, placements } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetsFunction = ({\n  popper: Rect,\n  reference: Rect,\n  placement: Placement,\n}) => [?number, ?number];\n\ntype Offset = OffsetsFunction | [?number, ?number];\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  offset: Offset,\n};\n\nexport function distanceAndSkiddingToXY(\n  placement: Placement,\n  rects: { popper: Rect, reference: Rect },\n  offset: Offset\n): Offsets {\n  const basePlacement = getBasePlacement(placement);\n  const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  let [skidding, distance] =\n    typeof offset === 'function'\n      ? offset({\n          ...rects,\n          placement,\n        })\n      : offset;\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n\n  return [left, right].indexOf(basePlacement) >= 0\n    ? { x: distance, y: skidding }\n    : { x: skidding, y: distance };\n}\n\nfunction offset({ state, options, name }: ModifierArguments<Options>) {\n  const { offset = [0, 0] } = options;\n\n  const data = placements.reduce((acc, placement) => {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n\n  const { x, y } = data[state.placement];\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetModifier = Modifier<'offset', Options>;\nexport default ({\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset,\n}: OffsetModifier);\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n\nexport default function getOppositePlacement(placement: Placement): Placement {\n  return (placement.replace(\n    /left|right|bottom|top/g,\n    matched => hash[matched]\n  ): any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { start: 'end', end: 'start' };\n\nexport default function getOppositeVariationPlacement(\n  placement: Placement\n): Placement {\n  return (placement.replace(/start|end/g, matched => hash[matched]): any);\n}\n","// @flow\nimport type { State, Padding } from '../types';\nimport type {\n  Placement,\n  ComputedPlacement,\n  Boundary,\n  RootBoundary,\n} from '../enums';\nimport getVariation from './getVariation';\nimport {\n  variationPlacements,\n  basePlacements,\n  placements as allPlacements,\n} from '../enums';\nimport detectOverflow from './detectOverflow';\nimport getBasePlacement from './getBasePlacement';\n\ntype Options = {\n  placement: Placement,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  flipVariations: boolean,\n  allowedAutoPlacements?: Array<Placement>,\n};\n\ntype OverflowsMap = { [ComputedPlacement]: number };\n\nexport default function computeAutoPlacement(\n  state: $Shape<State>,\n  options: Options = {}\n): Array<ComputedPlacement> {\n  const {\n    placement,\n    boundary,\n    rootBoundary,\n    padding,\n    flipVariations,\n    allowedAutoPlacements = allPlacements,\n  } = options;\n\n  const variation = getVariation(placement);\n\n  const placements = variation\n    ? flipVariations\n      ? variationPlacements\n      : variationPlacements.filter(\n          (placement) => getVariation(placement) === variation\n        )\n    : basePlacements;\n\n  let allowedPlacements = placements.filter(\n    (placement) => allowedAutoPlacements.indexOf(placement) >= 0\n  );\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  }\n\n  // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n  const overflows: OverflowsMap = allowedPlacements.reduce((acc, placement) => {\n    acc[placement] = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      padding,\n    })[getBasePlacement(placement)];\n\n    return acc;\n  }, {});\n\n  return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);\n}\n","// @flow\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { ModifierArguments, Modifier, Padding } from '../types';\nimport getOppositePlacement from '../utils/getOppositePlacement';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';\nimport detectOverflow from '../utils/detectOverflow';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\nimport { bottom, top, start, right, left, auto } from '../enums';\nimport getVariation from '../utils/getVariation';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  mainAxis: boolean,\n  altAxis: boolean,\n  fallbackPlacements: Array<Placement>,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  altBoundary: boolean,\n  flipVariations: boolean,\n  allowedAutoPlacements: Array<Placement>,\n};\n\nfunction getExpandedFallbackPlacements(placement: Placement): Array<Placement> {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  const oppositePlacement = getOppositePlacement(placement);\n\n  return [\n    getOppositeVariationPlacement(placement),\n    oppositePlacement,\n    getOppositeVariationPlacement(oppositePlacement),\n  ];\n}\n\nfunction flip({ state, options, name }: ModifierArguments<Options>) {\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = true,\n    fallbackPlacements: specifiedFallbackPlacements,\n    padding,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    flipVariations = true,\n    allowedAutoPlacements,\n  } = options;\n\n  const preferredPlacement = state.options.placement;\n  const basePlacement = getBasePlacement(preferredPlacement);\n  const isBasePlacement = basePlacement === preferredPlacement;\n\n  const fallbackPlacements =\n    specifiedFallbackPlacements ||\n    (isBasePlacement || !flipVariations\n      ? [getOppositePlacement(preferredPlacement)]\n      : getExpandedFallbackPlacements(preferredPlacement));\n\n  const placements = [preferredPlacement, ...fallbackPlacements].reduce(\n    (acc, placement) => {\n      return acc.concat(\n        getBasePlacement(placement) === auto\n          ? computeAutoPlacement(state, {\n              placement,\n              boundary,\n              rootBoundary,\n              padding,\n              flipVariations,\n              allowedAutoPlacements,\n            })\n          : placement\n      );\n    },\n    []\n  );\n\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n\n  const checksMap = new Map();\n  let makeFallbackChecks = true;\n  let firstFittingPlacement = placements[0];\n\n  for (let i = 0; i < placements.length; i++) {\n    const placement = placements[i];\n    const basePlacement = getBasePlacement(placement);\n    const isStartVariation = getVariation(placement) === start;\n    const isVertical = [top, bottom].indexOf(basePlacement) >= 0;\n    const len = isVertical ? 'width' : 'height';\n\n    const overflow = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      altBoundary,\n      padding,\n    });\n\n    let mainVariationSide: any = isVertical\n      ? isStartVariation\n        ? right\n        : left\n      : isStartVariation\n      ? bottom\n      : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    const altVariationSide: any = getOppositePlacement(mainVariationSide);\n\n    const checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(\n        overflow[mainVariationSide] <= 0,\n        overflow[altVariationSide] <= 0\n      );\n    }\n\n    if (checks.every((check) => check)) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    const numberOfChecks = flipVariations ? 3 : 1;\n\n    for (let i = numberOfChecks; i > 0; i--) {\n      const fittingPlacement = placements.find((placement) => {\n        const checks = checksMap.get(placement);\n        if (checks) {\n          return checks.slice(0, i).every((check) => check);\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        break;\n      }\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type FlipModifier = Modifier<'flip', Options>;\nexport default ({\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: { _skip: false },\n}: FlipModifier);\n","// @flow\n\nexport default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {\n  return axis === 'x' ? 'y' : 'x';\n}\n","// @flow\nimport { max as mathMax, min as mathMin } from './math';\n\nexport function within(min: number, value: number, max: number): number {\n  return mathMax(min, mathMin(value, max));\n}\n\nexport function withinMaxClamp(min: number, value: number, max: number) {\n  const v = within(min, value, max);\n  return v > max ? max : v;\n}\n","// @flow\nimport { top, left, right, bottom, start } from '../enums';\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { Rect, ModifierArguments, Modifier, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport getAltAxis from '../utils/getAltAxis';\nimport { within, withinMaxClamp } from '../utils/within';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport detectOverflow from '../utils/detectOverflow';\nimport getVariation from '../utils/getVariation';\nimport getFreshSideObject from '../utils/getFreshSideObject';\nimport { min as mathMin, max as mathMax } from '../utils/math';\n\ntype TetherOffset =\n  | (({\n      popper: Rect,\n      reference: Rect,\n      placement: Placement,\n    }) => number | { mainAxis: number, altAxis: number })\n  | number\n  | { mainAxis: number, altAxis: number };\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  /* Prevents boundaries overflow on the main axis */\n  mainAxis: boolean,\n  /* Prevents boundaries overflow on the alternate axis */\n  altAxis: boolean,\n  /* The area to check the popper is overflowing in */\n  boundary: Boundary,\n  /* If the popper is not overflowing the main area, fallback to this one */\n  rootBoundary: RootBoundary,\n  /* Use the reference's \"clippingParents\" boundary context */\n  altBoundary: boolean,\n  /**\n   * Allows the popper to overflow from its boundaries to keep it near its\n   * reference element\n   */\n  tether: boolean,\n  /* Offsets when the `tether` option should activate */\n  tetherOffset: TetherOffset,\n  /* Sets a padding to the provided boundary */\n  padding: Padding,\n};\n\nfunction preventOverflow({ state, options, name }: ModifierArguments<Options>) {\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = false,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    padding,\n    tether = true,\n    tetherOffset = 0,\n  } = options;\n\n  const overflow = detectOverflow(state, {\n    boundary,\n    rootBoundary,\n    padding,\n    altBoundary,\n  });\n  const basePlacement = getBasePlacement(state.placement);\n  const variation = getVariation(state.placement);\n  const isBasePlacement = !variation;\n  const mainAxis = getMainAxisFromPlacement(basePlacement);\n  const altAxis = getAltAxis(mainAxis);\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const tetherOffsetValue =\n    typeof tetherOffset === 'function'\n      ? tetherOffset({\n          ...state.rects,\n          placement: state.placement,\n        })\n      : tetherOffset;\n  const normalizedTetherOffsetValue =\n    typeof tetherOffsetValue === 'number'\n      ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue }\n      : { mainAxis: 0, altAxis: 0, ...tetherOffsetValue };\n  const offsetModifierState = state.modifiersData.offset\n    ? state.modifiersData.offset[state.placement]\n    : null;\n\n  const data = { x: 0, y: 0 };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    const mainSide = mainAxis === 'y' ? top : left;\n    const altSide = mainAxis === 'y' ? bottom : right;\n    const len = mainAxis === 'y' ? 'height' : 'width';\n    const offset = popperOffsets[mainAxis];\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const additive = tether ? -popperRect[len] / 2 : 0;\n\n    const minLen = variation === start ? referenceRect[len] : popperRect[len];\n    const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n\n    // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n    const arrowElement = state.elements.arrow;\n    const arrowRect =\n      tether && arrowElement\n        ? getLayoutRect(arrowElement)\n        : { width: 0, height: 0 };\n    const arrowPaddingObject = state.modifiersData['arrow#persistent']\n      ? state.modifiersData['arrow#persistent'].padding\n      : getFreshSideObject();\n    const arrowPaddingMin = arrowPaddingObject[mainSide];\n    const arrowPaddingMax = arrowPaddingObject[altSide];\n\n    // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n    const arrowLen = within(0, referenceRect[len], arrowRect[len]);\n\n    const minOffset = isBasePlacement\n      ? referenceRect[len] / 2 -\n        additive -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis\n      : minLen -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis;\n    const maxOffset = isBasePlacement\n      ? -referenceRect[len] / 2 +\n        additive +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis\n      : maxLen +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis;\n\n    const arrowOffsetParent =\n      state.elements.arrow && getOffsetParent(state.elements.arrow);\n    const clientOffset = arrowOffsetParent\n      ? mainAxis === 'y'\n        ? arrowOffsetParent.clientTop || 0\n        : arrowOffsetParent.clientLeft || 0\n      : 0;\n\n    const offsetModifierValue = offsetModifierState?.[mainAxis] ?? 0;\n    const tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    const tetherMax = offset + maxOffset - offsetModifierValue;\n\n    const preventedOffset = within(\n      tether ? mathMin(min, tetherMin) : min,\n      offset,\n      tether ? mathMax(max, tetherMax) : max\n    );\n\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    const mainSide = mainAxis === 'x' ? top : left;\n    const altSide = mainAxis === 'x' ? bottom : right;\n    const offset = popperOffsets[altAxis];\n\n    const len = altAxis === 'y' ? 'height' : 'width';\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    const offsetModifierValue = offsetModifierState?.[altAxis] ?? 0;\n    const tetherMin = isOriginSide\n      ? min\n      : offset -\n        referenceRect[len] -\n        popperRect[len] -\n        offsetModifierValue +\n        normalizedTetherOffsetValue.altAxis;\n    const tetherMax = isOriginSide\n      ? offset +\n        referenceRect[len] +\n        popperRect[len] -\n        offsetModifierValue -\n        normalizedTetherOffsetValue.altAxis\n      : max;\n\n    const preventedOffset =\n      tether && isOriginSide\n        ? withinMaxClamp(tetherMin, offset, tetherMax)\n        : within(tether ? tetherMin : min, offset, tether ? tetherMax : max);\n\n    popperOffsets[altAxis] = preventedOffset;\n    data[altAxis] = preventedOffset - offset;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PreventOverflowModifier = Modifier<'preventOverflow', Options>;\nexport default ({\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset'],\n}: PreventOverflowModifier);\n","// @flow\nimport type { Modifier, ModifierArguments, Padding, Rect } from '../types';\nimport type { Placement } from '../enums';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport contains from '../dom-utils/contains';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport { within } from '../utils/within';\nimport mergePaddingObject from '../utils/mergePaddingObject';\nimport expandToHashMap from '../utils/expandToHashMap';\nimport { left, right, basePlacements, top, bottom } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  element: HTMLElement | string | null,\n  padding:\n    | Padding\n    | (({|\n        popper: Rect,\n        reference: Rect,\n        placement: Placement,\n      |}) => Padding),\n};\n\nconst toPaddingObject = (padding, state) => {\n  padding =\n    typeof padding === 'function'\n      ? padding({ ...state.rects, placement: state.placement })\n      : padding;\n\n  return mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n};\n\nfunction arrow({ state, name, options }: ModifierArguments<Options>) {\n  const arrowElement = state.elements.arrow;\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const basePlacement = getBasePlacement(state.placement);\n  const axis = getMainAxisFromPlacement(basePlacement);\n  const isVertical = [left, right].indexOf(basePlacement) >= 0;\n  const len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  const paddingObject = toPaddingObject(options.padding, state);\n  const arrowRect = getLayoutRect(arrowElement);\n  const minProp = axis === 'y' ? top : left;\n  const maxProp = axis === 'y' ? bottom : right;\n\n  const endDiff =\n    state.rects.reference[len] +\n    state.rects.reference[axis] -\n    popperOffsets[axis] -\n    state.rects.popper[len];\n  const startDiff = popperOffsets[axis] - state.rects.reference[axis];\n\n  const arrowOffsetParent = getOffsetParent(arrowElement);\n  const clientSize = arrowOffsetParent\n    ? axis === 'y'\n      ? arrowOffsetParent.clientHeight || 0\n      : arrowOffsetParent.clientWidth || 0\n    : 0;\n\n  const centerToReference = endDiff / 2 - startDiff / 2;\n\n  // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n  const min = paddingObject[minProp];\n  const max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  const offset = within(min, center, max);\n\n  // Prevents breaking syntax highlighting...\n  const axisProp: string = axis;\n  state.modifiersData[name] = {\n    [axisProp]: offset,\n    centerOffset: offset - center,\n  };\n}\n\nfunction effect({ state, options }: ModifierArguments<Options>) {\n  let { element: arrowElement = '[data-popper-arrow]' } = options;\n\n  if (arrowElement == null) {\n    return;\n  }\n\n  // CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ArrowModifier = Modifier<'arrow', Options>;\nexport default ({\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow'],\n}: ArrowModifier);\n","// @flow\nimport type {\n  ModifierArguments,\n  Modifier,\n  Rect,\n  SideObject,\n  Offsets,\n} from '../types';\nimport { top, bottom, left, right } from '../enums';\nimport detectOverflow from '../utils/detectOverflow';\n\nfunction getSideOffsets(\n  overflow: SideObject,\n  rect: Rect,\n  preventedOffsets: Offsets = { x: 0, y: 0 }\n): SideObject {\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x,\n  };\n}\n\nfunction isAnySideFullyClipped(overflow: SideObject): boolean {\n  return [top, right, bottom, left].some((side) => overflow[side] >= 0);\n}\n\nfunction hide({ state, name }: ModifierArguments<{||}>) {\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const preventedOffsets = state.modifiersData.preventOverflow;\n\n  const referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference',\n  });\n  const popperAltOverflow = detectOverflow(state, {\n    altBoundary: true,\n  });\n\n  const referenceClippingOffsets = getSideOffsets(\n    referenceOverflow,\n    referenceRect\n  );\n  const popperEscapeOffsets = getSideOffsets(\n    popperAltOverflow,\n    popperRect,\n    preventedOffsets\n  );\n\n  const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n\n  state.modifiersData[name] = {\n    referenceClippingOffsets,\n    popperEscapeOffsets,\n    isReferenceHidden,\n    hasPopperEscaped,\n  };\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type HideModifier = Modifier<'hide', {||}>;\nexport default ({\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide,\n}: HideModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\nimport offset from './modifiers/offset';\nimport flip from './modifiers/flip';\nimport preventOverflow from './modifiers/preventOverflow';\nimport arrow from './modifiers/arrow';\nimport hide from './modifiers/hide';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n  offset,\n  flip,\n  preventOverflow,\n  arrow,\n  hide,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper as createPopperLite } from './popper-lite';\n// eslint-disable-next-line import/no-unused-modules\nexport * from './modifiers';\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn","passive","resize","addEventListener","removeEventListener","unsetSides","roundOffsetsByDPR","dpr","devicePixelRatio","mapToStyles","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","computeStyles","arrow","applyStyles","style","assign","removeAttribute","setAttribute","initialStyles","margin","styleProperties","property","attribute","distanceAndSkiddingToXY","invertDistance","skidding","distance","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","computeAutoPlacement","flipVariations","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","b","getExpandedFallbackPlacements","oppositePlacement","flip","_skip","checkMainAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","preferredPlacement","isBasePlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","numberOfChecks","fittingPlacement","find","slice","getAltAxis","within","mathMax","mathMin","withinMaxClamp","v","preventOverflow","tether","tetherOffset","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","isOriginSide","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","eventListeners"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/createPopper.js b/node_modules/@popperjs/core/dist/esm/createPopper.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af3ce336dd60d3f7c8bcc7aeb4abd44a2da80ed
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/createPopper.js
@@ -0,0 +1,199 @@
+import getCompositeRect from "./dom-utils/getCompositeRect.js";
+import getLayoutRect from "./dom-utils/getLayoutRect.js";
+import listScrollParents from "./dom-utils/listScrollParents.js";
+import getOffsetParent from "./dom-utils/getOffsetParent.js";
+import orderModifiers from "./utils/orderModifiers.js";
+import debounce from "./utils/debounce.js";
+import mergeByName from "./utils/mergeByName.js";
+import detectOverflow from "./utils/detectOverflow.js";
+import { isElement } from "./dom-utils/instanceOf.js";
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+export function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        });
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref) {
+        var name = _ref.name,
+            _ref$options = _ref.options,
+            options = _ref$options === void 0 ? {} : _ref$options,
+            effect = _ref.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+export var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
+
+export { detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/contains.js b/node_modules/@popperjs/core/dist/esm/dom-utils/contains.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a537728a2ab012aee3bd55fde9349a8d7b274c6
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/contains.js
@@ -0,0 +1,23 @@
+import { isShadowRoot } from "./instanceOf.js";
+export default function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getBoundingClientRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getBoundingClientRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa065a21108c5fa4be795997184832dc36ff6696
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getBoundingClientRect.js
@@ -0,0 +1,41 @@
+import { isElement, isHTMLElement } from "./instanceOf.js";
+import { round } from "../utils/math.js";
+import getWindow from "./getWindow.js";
+import isLayoutViewport from "./isLayoutViewport.js";
+export default function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getClippingRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getClippingRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..99d66e89a8400cc75ee3eac17ffab4900266b098
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getClippingRect.js
@@ -0,0 +1,70 @@
+import { viewport } from "../enums.js";
+import getViewportRect from "./getViewportRect.js";
+import getDocumentRect from "./getDocumentRect.js";
+import listScrollParents from "./listScrollParents.js";
+import getOffsetParent from "./getOffsetParent.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getComputedStyle from "./getComputedStyle.js";
+import { isElement, isHTMLElement } from "./instanceOf.js";
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getParentNode from "./getParentNode.js";
+import contains from "./contains.js";
+import getNodeName from "./getNodeName.js";
+import rectToClientRect from "../utils/rectToClientRect.js";
+import { max, min } from "../utils/math.js";
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+export default function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getCompositeRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getCompositeRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..565e9ee0db6d5276f8d4c4e98d340c9b15761359
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getCompositeRect.js
@@ -0,0 +1,58 @@
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getNodeScroll from "./getNodeScroll.js";
+import getNodeName from "./getNodeName.js";
+import { isHTMLElement } from "./instanceOf.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import getDocumentElement from "./getDocumentElement.js";
+import isScrollParent from "./isScrollParent.js";
+import { round } from "../utils/math.js";
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+export default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getComputedStyle.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getComputedStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..08221de1fd70a536ece095085871d9e2b41f9759
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getComputedStyle.js
@@ -0,0 +1,4 @@
+import getWindow from "./getWindow.js";
+export default function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentElement.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..c01240bb266039bcfbbc4246c0c9a4e88fbbc01e
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentElement.js
@@ -0,0 +1,6 @@
+import { isElement } from "./instanceOf.js";
+export default function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..d24df8eef9213cbdb6b274731ab73f79fef119e8
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getDocumentRect.js
@@ -0,0 +1,29 @@
+import getDocumentElement from "./getDocumentElement.js";
+import getComputedStyle from "./getComputedStyle.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import getWindowScroll from "./getWindowScroll.js";
+import { max } from "../utils/math.js"; // Gets the entire size of the scrollable document area, even extending outside
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+export default function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getHTMLElementScroll.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getHTMLElementScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..d7f360003e4765a50d79211b07d7a965860835c9
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getHTMLElementScroll.js
@@ -0,0 +1,6 @@
+export default function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getLayoutRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getLayoutRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3b421e956efb4e126ee346135a273f2590a31ea
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getLayoutRect.js
@@ -0,0 +1,25 @@
+import getBoundingClientRect from "./getBoundingClientRect.js"; // Returns the layout rect of an element relative to its offsetParent. Layout
+// means it doesn't take into account transforms.
+
+export default function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeName.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeName.js
new file mode 100644
index 0000000000000000000000000000000000000000..393ae7ace5fb93f751c82cd6e663aa698d5981d1
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeName.js
@@ -0,0 +1,3 @@
+export default function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeScroll.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..afef36661e4a99241288a97e1f05b544ae100833
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getNodeScroll.js
@@ -0,0 +1,11 @@
+import getWindowScroll from "./getWindowScroll.js";
+import getWindow from "./getWindow.js";
+import { isHTMLElement } from "./instanceOf.js";
+import getHTMLElementScroll from "./getHTMLElementScroll.js";
+export default function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getOffsetParent.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getOffsetParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..add0b15eb7ce11caa354a15035f515bff59f6a1d
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getOffsetParent.js
@@ -0,0 +1,69 @@
+import getWindow from "./getWindow.js";
+import getNodeName from "./getNodeName.js";
+import getComputedStyle from "./getComputedStyle.js";
+import { isHTMLElement, isShadowRoot } from "./instanceOf.js";
+import isTableElement from "./isTableElement.js";
+import getParentNode from "./getParentNode.js";
+import getUAString from "../utils/userAgent.js";
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+export default function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getParentNode.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getParentNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..06d3e98aecb227aa28b936cb952a17cc7e154cbb
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getParentNode.js
@@ -0,0 +1,19 @@
+import getNodeName from "./getNodeName.js";
+import getDocumentElement from "./getDocumentElement.js";
+import { isShadowRoot } from "./instanceOf.js";
+export default function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getScrollParent.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..a264c4b30e2de8b0f00ad1112dfe8fce8b6bd9e4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getScrollParent.js
@@ -0,0 +1,16 @@
+import getParentNode from "./getParentNode.js";
+import isScrollParent from "./isScrollParent.js";
+import getNodeName from "./getNodeName.js";
+import { isHTMLElement } from "./instanceOf.js";
+export default function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getViewportRect.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getViewportRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ee4760d1fe6cbbfaf119b13c298d87d9798bda7
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getViewportRect.js
@@ -0,0 +1,31 @@
+import getWindow from "./getWindow.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import isLayoutViewport from "./isLayoutViewport.js";
+export default function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getWindow.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..5df7a4879609204e0d8b988a13990dad07a1fffa
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindow.js
@@ -0,0 +1,12 @@
+export default function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScroll.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..61eb751278272462b9e4948062da268c0d82dceb
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScroll.js
@@ -0,0 +1,10 @@
+import getWindow from "./getWindow.js";
+export default function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScrollBarX.js b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScrollBarX.js
new file mode 100644
index 0000000000000000000000000000000000000000..b650d947b07f43292d5c9d0d18fbd1e4e1d48828
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/getWindowScrollBarX.js
@@ -0,0 +1,13 @@
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getWindowScroll from "./getWindowScroll.js";
+export default function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/instanceOf.js b/node_modules/@popperjs/core/dist/esm/dom-utils/instanceOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee51ea655e39b5dcbb14796c82be76196567e1c6
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/instanceOf.js
@@ -0,0 +1,23 @@
+import getWindow from "./getWindow.js";
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+export { isElement, isHTMLElement, isShadowRoot };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/isLayoutViewport.js b/node_modules/@popperjs/core/dist/esm/dom-utils/isLayoutViewport.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4f665aabcad48631d6a6f228f52aab24e8b031c
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/isLayoutViewport.js
@@ -0,0 +1,4 @@
+import getUAString from "../utils/userAgent.js";
+export default function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/isScrollParent.js b/node_modules/@popperjs/core/dist/esm/dom-utils/isScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d6e18eb4bbbd9ad637a1c7518105155ad795762
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/isScrollParent.js
@@ -0,0 +1,10 @@
+import getComputedStyle from "./getComputedStyle.js";
+export default function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/isTableElement.js b/node_modules/@popperjs/core/dist/esm/dom-utils/isTableElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c36c8a4faf1eed112a4b70c1b2926fb0d08fdec
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/isTableElement.js
@@ -0,0 +1,4 @@
+import getNodeName from "./getNodeName.js";
+export default function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/dom-utils/listScrollParents.js b/node_modules/@popperjs/core/dist/esm/dom-utils/listScrollParents.js
new file mode 100644
index 0000000000000000000000000000000000000000..24e8bd2a697cbc8b907e8e47c8c49dae7c7d3136
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/dom-utils/listScrollParents.js
@@ -0,0 +1,26 @@
+import getScrollParent from "./getScrollParent.js";
+import getParentNode from "./getParentNode.js";
+import getWindow from "./getWindow.js";
+import isScrollParent from "./isScrollParent.js";
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+export default function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/enums.js b/node_modules/@popperjs/core/dist/esm/enums.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3714f511e7771c7c765836ab6e094febc2b1617
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/enums.js
@@ -0,0 +1,31 @@
+export var top = 'top';
+export var bottom = 'bottom';
+export var right = 'right';
+export var left = 'left';
+export var auto = 'auto';
+export var basePlacements = [top, bottom, right, left];
+export var start = 'start';
+export var end = 'end';
+export var clippingParents = 'clippingParents';
+export var viewport = 'viewport';
+export var popper = 'popper';
+export var reference = 'reference';
+export var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+  return acc.concat([placement + "-" + start, placement + "-" + end]);
+}, []);
+export var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+}, []); // modifiers that need to read the DOM
+
+export var beforeRead = 'beforeRead';
+export var read = 'read';
+export var afterRead = 'afterRead'; // pure-logic modifiers
+
+export var beforeMain = 'beforeMain';
+export var main = 'main';
+export var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+export var beforeWrite = 'beforeWrite';
+export var write = 'write';
+export var afterWrite = 'afterWrite';
+export var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/index.js b/node_modules/@popperjs/core/dist/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0c8b52db9f339e17fbf68c8e2aa36862776fe0a
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/index.js
@@ -0,0 +1,8 @@
+export * from "./enums.js";
+export * from "./modifiers/index.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { popperGenerator, detectOverflow, createPopper as createPopperBase } from "./createPopper.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper } from "./popper.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper as createPopperLite } from "./popper-lite.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/applyStyles.js b/node_modules/@popperjs/core/dist/esm/modifiers/applyStyles.js
new file mode 100644
index 0000000000000000000000000000000000000000..84ac4ba91838397c76e6cf9b34f91abe9dda0c13
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/applyStyles.js
@@ -0,0 +1,84 @@
+import getNodeName from "../dom-utils/getNodeName.js";
+import { isHTMLElement } from "../dom-utils/instanceOf.js"; // This modifier takes the styles prepared by the `computeStyles` modifier
+// and applies them to the HTMLElements such as popper and arrow
+
+function applyStyles(_ref) {
+  var state = _ref.state;
+  Object.keys(state.elements).forEach(function (name) {
+    var style = state.styles[name] || {};
+    var attributes = state.attributes[name] || {};
+    var element = state.elements[name]; // arrow is optional + virtual elements
+
+    if (!isHTMLElement(element) || !getNodeName(element)) {
+      return;
+    } // Flow doesn't support to extend this property, but it's the most
+    // effective way to apply styles to an HTMLElement
+    // $FlowFixMe[cannot-write]
+
+
+    Object.assign(element.style, style);
+    Object.keys(attributes).forEach(function (name) {
+      var value = attributes[name];
+
+      if (value === false) {
+        element.removeAttribute(name);
+      } else {
+        element.setAttribute(name, value === true ? '' : value);
+      }
+    });
+  });
+}
+
+function effect(_ref2) {
+  var state = _ref2.state;
+  var initialStyles = {
+    popper: {
+      position: state.options.strategy,
+      left: '0',
+      top: '0',
+      margin: '0'
+    },
+    arrow: {
+      position: 'absolute'
+    },
+    reference: {}
+  };
+  Object.assign(state.elements.popper.style, initialStyles.popper);
+  state.styles = initialStyles;
+
+  if (state.elements.arrow) {
+    Object.assign(state.elements.arrow.style, initialStyles.arrow);
+  }
+
+  return function () {
+    Object.keys(state.elements).forEach(function (name) {
+      var element = state.elements[name];
+      var attributes = state.attributes[name] || {};
+      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+      var style = styleProperties.reduce(function (style, property) {
+        style[property] = '';
+        return style;
+      }, {}); // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      }
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (attribute) {
+        element.removeAttribute(attribute);
+      });
+    });
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'applyStyles',
+  enabled: true,
+  phase: 'write',
+  fn: applyStyles,
+  effect: effect,
+  requires: ['computeStyles']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/arrow.js b/node_modules/@popperjs/core/dist/esm/modifiers/arrow.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0fc36f409b86b718e06f1aa1b77086d84aed5f
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/arrow.js
@@ -0,0 +1,90 @@
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getLayoutRect from "../dom-utils/getLayoutRect.js";
+import contains from "../dom-utils/contains.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import getMainAxisFromPlacement from "../utils/getMainAxisFromPlacement.js";
+import { within } from "../utils/within.js";
+import mergePaddingObject from "../utils/mergePaddingObject.js";
+import expandToHashMap from "../utils/expandToHashMap.js";
+import { left, right, basePlacements, top, bottom } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules
+
+var toPaddingObject = function toPaddingObject(padding, state) {
+  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : padding;
+  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+};
+
+function arrow(_ref) {
+  var _state$modifiersData$;
+
+  var state = _ref.state,
+      name = _ref.name,
+      options = _ref.options;
+  var arrowElement = state.elements.arrow;
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var basePlacement = getBasePlacement(state.placement);
+  var axis = getMainAxisFromPlacement(basePlacement);
+  var isVertical = [left, right].indexOf(basePlacement) >= 0;
+  var len = isVertical ? 'height' : 'width';
+
+  if (!arrowElement || !popperOffsets) {
+    return;
+  }
+
+  var paddingObject = toPaddingObject(options.padding, state);
+  var arrowRect = getLayoutRect(arrowElement);
+  var minProp = axis === 'y' ? top : left;
+  var maxProp = axis === 'y' ? bottom : right;
+  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+  var arrowOffsetParent = getOffsetParent(arrowElement);
+  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+  // outside of the popper bounds
+
+  var min = paddingObject[minProp];
+  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+  var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+  var axisProp = axis;
+  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+}
+
+function effect(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options;
+  var _options$element = options.element,
+      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+  if (arrowElement == null) {
+    return;
+  } // CSS selector
+
+
+  if (typeof arrowElement === 'string') {
+    arrowElement = state.elements.popper.querySelector(arrowElement);
+
+    if (!arrowElement) {
+      return;
+    }
+  }
+
+  if (!contains(state.elements.popper, arrowElement)) {
+    return;
+  }
+
+  state.elements.arrow = arrowElement;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'arrow',
+  enabled: true,
+  phase: 'main',
+  fn: arrow,
+  effect: effect,
+  requires: ['popperOffsets'],
+  requiresIfExists: ['preventOverflow']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/computeStyles.js b/node_modules/@popperjs/core/dist/esm/modifiers/computeStyles.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ebb026d5aec37822c9a24e30964f3931fc745ee
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/computeStyles.js
@@ -0,0 +1,169 @@
+import { top, left, right, bottom, end } from "../enums.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import getWindow from "../dom-utils/getWindow.js";
+import getDocumentElement from "../dom-utils/getDocumentElement.js";
+import getComputedStyle from "../dom-utils/getComputedStyle.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getVariation from "../utils/getVariation.js";
+import { round } from "../utils/math.js"; // eslint-disable-next-line import/no-unused-modules
+
+var unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto'
+}; // Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+
+function roundOffsetsByDPR(_ref, win) {
+  var x = _ref.x,
+      y = _ref.y;
+  var dpr = win.devicePixelRatio || 1;
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0
+  };
+}
+
+export function mapToStyles(_ref2) {
+  var _Object$assign2;
+
+  var popper = _ref2.popper,
+      popperRect = _ref2.popperRect,
+      placement = _ref2.placement,
+      variation = _ref2.variation,
+      offsets = _ref2.offsets,
+      position = _ref2.position,
+      gpuAcceleration = _ref2.gpuAcceleration,
+      adaptive = _ref2.adaptive,
+      roundOffsets = _ref2.roundOffsets,
+      isFixed = _ref2.isFixed;
+  var _offsets$x = offsets.x,
+      x = _offsets$x === void 0 ? 0 : _offsets$x,
+      _offsets$y = offsets.y,
+      y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref3.x;
+  y = _ref3.y;
+  var hasX = offsets.hasOwnProperty('x');
+  var hasY = offsets.hasOwnProperty('y');
+  var sideX = left;
+  var sideY = top;
+  var win = window;
+
+  if (adaptive) {
+    var offsetParent = getOffsetParent(popper);
+    var heightProp = 'clientHeight';
+    var widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+    offsetParent = offsetParent;
+
+    if (placement === top || (placement === left || placement === right) && variation === end) {
+      sideY = bottom;
+      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+      offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (placement === left || (placement === top || placement === bottom) && variation === end) {
+      sideX = right;
+      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+      offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  var commonStyles = Object.assign({
+    position: position
+  }, adaptive && unsetSides);
+
+  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+    x: x,
+    y: y
+  }, getWindow(popper)) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref4.x;
+  y = _ref4.y;
+
+  if (gpuAcceleration) {
+    var _Object$assign;
+
+    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+  }
+
+  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+}
+
+function computeStyles(_ref5) {
+  var state = _ref5.state,
+      options = _ref5.options;
+  var _options$gpuAccelerat = options.gpuAcceleration,
+      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+      _options$adaptive = options.adaptive,
+      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+      _options$roundOffsets = options.roundOffsets,
+      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+  var commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration: gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed'
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.popperOffsets,
+      position: state.options.strategy,
+      adaptive: adaptive,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.arrow,
+      position: 'absolute',
+      adaptive: false,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-placement': state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/eventListeners.js b/node_modules/@popperjs/core/dist/esm/modifiers/eventListeners.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc68f35ea42c45330ba0d27c62c5c52d26f5ca3c
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/eventListeners.js
@@ -0,0 +1,49 @@
+import getWindow from "../dom-utils/getWindow.js"; // eslint-disable-next-line import/no-unused-modules
+
+var passive = {
+  passive: true
+};
+
+function effect(_ref) {
+  var state = _ref.state,
+      instance = _ref.instance,
+      options = _ref.options;
+  var _options$scroll = options.scroll,
+      scroll = _options$scroll === void 0 ? true : _options$scroll,
+      _options$resize = options.resize,
+      resize = _options$resize === void 0 ? true : _options$resize;
+  var window = getWindow(state.elements.popper);
+  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+  if (scroll) {
+    scrollParents.forEach(function (scrollParent) {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return function () {
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: function fn() {},
+  effect: effect,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/flip.js b/node_modules/@popperjs/core/dist/esm/modifiers/flip.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c332168fef088768226c4203c17ca6d57bfcaaf
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/flip.js
@@ -0,0 +1,147 @@
+import getOppositePlacement from "../utils/getOppositePlacement.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getOppositeVariationPlacement from "../utils/getOppositeVariationPlacement.js";
+import detectOverflow from "../utils/detectOverflow.js";
+import computeAutoPlacement from "../utils/computeAutoPlacement.js";
+import { bottom, top, start, right, left, auto } from "../enums.js";
+import getVariation from "../utils/getVariation.js"; // eslint-disable-next-line import/no-unused-modules
+
+function getExpandedFallbackPlacements(placement) {
+  if (getBasePlacement(placement) === auto) {
+    return [];
+  }
+
+  var oppositePlacement = getOppositePlacement(placement);
+  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+}
+
+function flip(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+
+  if (state.modifiersData[name]._skip) {
+    return;
+  }
+
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+      specifiedFallbackPlacements = options.fallbackPlacements,
+      padding = options.padding,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      _options$flipVariatio = options.flipVariations,
+      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+      allowedAutoPlacements = options.allowedAutoPlacements;
+  var preferredPlacement = state.options.placement;
+  var basePlacement = getBasePlacement(preferredPlacement);
+  var isBasePlacement = basePlacement === preferredPlacement;
+  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      flipVariations: flipVariations,
+      allowedAutoPlacements: allowedAutoPlacements
+    }) : placement);
+  }, []);
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var checksMap = new Map();
+  var makeFallbackChecks = true;
+  var firstFittingPlacement = placements[0];
+
+  for (var i = 0; i < placements.length; i++) {
+    var placement = placements[i];
+
+    var _basePlacement = getBasePlacement(placement);
+
+    var isStartVariation = getVariation(placement) === start;
+    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+    var len = isVertical ? 'width' : 'height';
+    var overflow = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      altBoundary: altBoundary,
+      padding: padding
+    });
+    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+    if (referenceRect[len] > popperRect[len]) {
+      mainVariationSide = getOppositePlacement(mainVariationSide);
+    }
+
+    var altVariationSide = getOppositePlacement(mainVariationSide);
+    var checks = [];
+
+    if (checkMainAxis) {
+      checks.push(overflow[_basePlacement] <= 0);
+    }
+
+    if (checkAltAxis) {
+      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+    }
+
+    if (checks.every(function (check) {
+      return check;
+    })) {
+      firstFittingPlacement = placement;
+      makeFallbackChecks = false;
+      break;
+    }
+
+    checksMap.set(placement, checks);
+  }
+
+  if (makeFallbackChecks) {
+    // `2` may be desired in some cases – research later
+    var numberOfChecks = flipVariations ? 3 : 1;
+
+    var _loop = function _loop(_i) {
+      var fittingPlacement = placements.find(function (placement) {
+        var checks = checksMap.get(placement);
+
+        if (checks) {
+          return checks.slice(0, _i).every(function (check) {
+            return check;
+          });
+        }
+      });
+
+      if (fittingPlacement) {
+        firstFittingPlacement = fittingPlacement;
+        return "break";
+      }
+    };
+
+    for (var _i = numberOfChecks; _i > 0; _i--) {
+      var _ret = _loop(_i);
+
+      if (_ret === "break") break;
+    }
+  }
+
+  if (state.placement !== firstFittingPlacement) {
+    state.modifiersData[name]._skip = true;
+    state.placement = firstFittingPlacement;
+    state.reset = true;
+  }
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'flip',
+  enabled: true,
+  phase: 'main',
+  fn: flip,
+  requiresIfExists: ['offset'],
+  data: {
+    _skip: false
+  }
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/hide.js b/node_modules/@popperjs/core/dist/esm/modifiers/hide.js
new file mode 100644
index 0000000000000000000000000000000000000000..799c4a781f12ffc88ae60eb2c00e3e8c069ad769
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/hide.js
@@ -0,0 +1,61 @@
+import { top, bottom, left, right } from "../enums.js";
+import detectOverflow from "../utils/detectOverflow.js";
+
+function getSideOffsets(overflow, rect, preventedOffsets) {
+  if (preventedOffsets === void 0) {
+    preventedOffsets = {
+      x: 0,
+      y: 0
+    };
+  }
+
+  return {
+    top: overflow.top - rect.height - preventedOffsets.y,
+    right: overflow.right - rect.width + preventedOffsets.x,
+    bottom: overflow.bottom - rect.height + preventedOffsets.y,
+    left: overflow.left - rect.width - preventedOffsets.x
+  };
+}
+
+function isAnySideFullyClipped(overflow) {
+  return [top, right, bottom, left].some(function (side) {
+    return overflow[side] >= 0;
+  });
+}
+
+function hide(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var preventedOffsets = state.modifiersData.preventOverflow;
+  var referenceOverflow = detectOverflow(state, {
+    elementContext: 'reference'
+  });
+  var popperAltOverflow = detectOverflow(state, {
+    altBoundary: true
+  });
+  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+  state.modifiersData[name] = {
+    referenceClippingOffsets: referenceClippingOffsets,
+    popperEscapeOffsets: popperEscapeOffsets,
+    isReferenceHidden: isReferenceHidden,
+    hasPopperEscaped: hasPopperEscaped
+  };
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-reference-hidden': isReferenceHidden,
+    'data-popper-escaped': hasPopperEscaped
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'hide',
+  enabled: true,
+  phase: 'main',
+  requiresIfExists: ['preventOverflow'],
+  fn: hide
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/index.js b/node_modules/@popperjs/core/dist/esm/modifiers/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d5990909c902eeee9df8422ff9eddfde298f95b
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/index.js
@@ -0,0 +1,9 @@
+export { default as applyStyles } from "./applyStyles.js";
+export { default as arrow } from "./arrow.js";
+export { default as computeStyles } from "./computeStyles.js";
+export { default as eventListeners } from "./eventListeners.js";
+export { default as flip } from "./flip.js";
+export { default as hide } from "./hide.js";
+export { default as offset } from "./offset.js";
+export { default as popperOffsets } from "./popperOffsets.js";
+export { default as preventOverflow } from "./preventOverflow.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/offset.js b/node_modules/@popperjs/core/dist/esm/modifiers/offset.js
new file mode 100644
index 0000000000000000000000000000000000000000..12fa0076a1cda6234fe5194b02e9ec20d66835ed
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/offset.js
@@ -0,0 +1,54 @@
+import getBasePlacement from "../utils/getBasePlacement.js";
+import { top, left, right, placements } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules
+
+export function distanceAndSkiddingToXY(placement, rects, offset) {
+  var basePlacement = getBasePlacement(placement);
+  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+    placement: placement
+  })) : offset,
+      skidding = _ref[0],
+      distance = _ref[1];
+
+  skidding = skidding || 0;
+  distance = (distance || 0) * invertDistance;
+  return [left, right].indexOf(basePlacement) >= 0 ? {
+    x: distance,
+    y: skidding
+  } : {
+    x: skidding,
+    y: distance
+  };
+}
+
+function offset(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options,
+      name = _ref2.name;
+  var _options$offset = options.offset,
+      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+  var data = placements.reduce(function (acc, placement) {
+    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+    return acc;
+  }, {});
+  var _data$state$placement = data[state.placement],
+      x = _data$state$placement.x,
+      y = _data$state$placement.y;
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.modifiersData.popperOffsets.x += x;
+    state.modifiersData.popperOffsets.y += y;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'offset',
+  enabled: true,
+  phase: 'main',
+  requires: ['popperOffsets'],
+  fn: offset
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/popperOffsets.js b/node_modules/@popperjs/core/dist/esm/modifiers/popperOffsets.js
new file mode 100644
index 0000000000000000000000000000000000000000..5440ab7884c78ce1b123dda0da3c0442be60f6d7
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/popperOffsets.js
@@ -0,0 +1,25 @@
+import computeOffsets from "../utils/computeOffsets.js";
+
+function popperOffsets(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/modifiers/preventOverflow.js b/node_modules/@popperjs/core/dist/esm/modifiers/preventOverflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..729eedd6306c49d84aacec69cf0f8cddb6f468cc
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/modifiers/preventOverflow.js
@@ -0,0 +1,142 @@
+import { top, left, right, bottom, start } from "../enums.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getMainAxisFromPlacement from "../utils/getMainAxisFromPlacement.js";
+import getAltAxis from "../utils/getAltAxis.js";
+import { within, withinMaxClamp } from "../utils/within.js";
+import getLayoutRect from "../dom-utils/getLayoutRect.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import detectOverflow from "../utils/detectOverflow.js";
+import getVariation from "../utils/getVariation.js";
+import getFreshSideObject from "../utils/getFreshSideObject.js";
+import { min as mathMin, max as mathMax } from "../utils/math.js";
+
+function preventOverflow(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      padding = options.padding,
+      _options$tether = options.tether,
+      tether = _options$tether === void 0 ? true : _options$tether,
+      _options$tetherOffset = options.tetherOffset,
+      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+  var overflow = detectOverflow(state, {
+    boundary: boundary,
+    rootBoundary: rootBoundary,
+    padding: padding,
+    altBoundary: altBoundary
+  });
+  var basePlacement = getBasePlacement(state.placement);
+  var variation = getVariation(state.placement);
+  var isBasePlacement = !variation;
+  var mainAxis = getMainAxisFromPlacement(basePlacement);
+  var altAxis = getAltAxis(mainAxis);
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : tetherOffset;
+  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+    mainAxis: tetherOffsetValue,
+    altAxis: tetherOffsetValue
+  } : Object.assign({
+    mainAxis: 0,
+    altAxis: 0
+  }, tetherOffsetValue);
+  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+  var data = {
+    x: 0,
+    y: 0
+  };
+
+  if (!popperOffsets) {
+    return;
+  }
+
+  if (checkMainAxis) {
+    var _offsetModifierState$;
+
+    var mainSide = mainAxis === 'y' ? top : left;
+    var altSide = mainAxis === 'y' ? bottom : right;
+    var len = mainAxis === 'y' ? 'height' : 'width';
+    var offset = popperOffsets[mainAxis];
+    var min = offset + overflow[mainSide];
+    var max = offset - overflow[altSide];
+    var additive = tether ? -popperRect[len] / 2 : 0;
+    var minLen = variation === start ? referenceRect[len] : popperRect[len];
+    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+    // outside the reference bounds
+
+    var arrowElement = state.elements.arrow;
+    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+      width: 0,
+      height: 0
+    };
+    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+    var arrowPaddingMin = arrowPaddingObject[mainSide];
+    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+    // to include its full size in the calculation. If the reference is small
+    // and near the edge of a boundary, the popper can overflow even if the
+    // reference is not overflowing as well (e.g. virtual elements with no
+    // width or height)
+
+    var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+    var tetherMax = offset + maxOffset - offsetModifierValue;
+    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);
+    popperOffsets[mainAxis] = preventedOffset;
+    data[mainAxis] = preventedOffset - offset;
+  }
+
+  if (checkAltAxis) {
+    var _offsetModifierState$2;
+
+    var _mainSide = mainAxis === 'x' ? top : left;
+
+    var _altSide = mainAxis === 'x' ? bottom : right;
+
+    var _offset = popperOffsets[altAxis];
+
+    var _len = altAxis === 'y' ? 'height' : 'width';
+
+    var _min = _offset + overflow[_mainSide];
+
+    var _max = _offset - overflow[_altSide];
+
+    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+    popperOffsets[altAxis] = _preventedOffset;
+    data[altAxis] = _preventedOffset - _offset;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'preventOverflow',
+  enabled: true,
+  phase: 'main',
+  fn: preventOverflow,
+  requiresIfExists: ['offset']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/popper-base.js b/node_modules/@popperjs/core/dist/esm/popper-base.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7c8a32fc00452cabdb9efd40ddff80ea99213c3
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/popper-base.js
@@ -0,0 +1,3 @@
+import { createPopper, popperGenerator, detectOverflow } from "./createPopper.js";
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper, popperGenerator, detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/popper-lite.js b/node_modules/@popperjs/core/dist/esm/popper-lite.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fb32beba37948fc4d42beb67887fc3a7c30fe51
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/popper-lite.js
@@ -0,0 +1,11 @@
+import { popperGenerator, detectOverflow } from "./createPopper.js";
+import eventListeners from "./modifiers/eventListeners.js";
+import popperOffsets from "./modifiers/popperOffsets.js";
+import computeStyles from "./modifiers/computeStyles.js";
+import applyStyles from "./modifiers/applyStyles.js";
+var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/popper.js b/node_modules/@popperjs/core/dist/esm/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..00f67a000a1a141acadf438f1c95e060f359e6d8
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/popper.js
@@ -0,0 +1,20 @@
+import { popperGenerator, detectOverflow } from "./createPopper.js";
+import eventListeners from "./modifiers/eventListeners.js";
+import popperOffsets from "./modifiers/popperOffsets.js";
+import computeStyles from "./modifiers/computeStyles.js";
+import applyStyles from "./modifiers/applyStyles.js";
+import offset from "./modifiers/offset.js";
+import flip from "./modifiers/flip.js";
+import preventOverflow from "./modifiers/preventOverflow.js";
+import arrow from "./modifiers/arrow.js";
+import hide from "./modifiers/hide.js";
+var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper as createPopperLite } from "./popper-lite.js"; // eslint-disable-next-line import/no-unused-modules
+
+export * from "./modifiers/index.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/types.js b/node_modules/@popperjs/core/dist/esm/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/node_modules/@popperjs/core/dist/esm/utils/computeAutoPlacement.js b/node_modules/@popperjs/core/dist/esm/utils/computeAutoPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..307292dec02caec20eded31c04f7ca6b9f21b79c
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/computeAutoPlacement.js
@@ -0,0 +1,43 @@
+import getVariation from "./getVariation.js";
+import { variationPlacements, basePlacements, placements as allPlacements } from "../enums.js";
+import detectOverflow from "./detectOverflow.js";
+import getBasePlacement from "./getBasePlacement.js";
+export default function computeAutoPlacement(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      placement = _options.placement,
+      boundary = _options.boundary,
+      rootBoundary = _options.rootBoundary,
+      padding = _options.padding,
+      flipVariations = _options.flipVariations,
+      _options$allowedAutoP = _options.allowedAutoPlacements,
+      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;
+  var variation = getVariation(placement);
+  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+    return getVariation(placement) === variation;
+  }) : basePlacements;
+  var allowedPlacements = placements.filter(function (placement) {
+    return allowedAutoPlacements.indexOf(placement) >= 0;
+  });
+
+  if (allowedPlacements.length === 0) {
+    allowedPlacements = placements;
+  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+  var overflows = allowedPlacements.reduce(function (acc, placement) {
+    acc[placement] = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding
+    })[getBasePlacement(placement)];
+    return acc;
+  }, {});
+  return Object.keys(overflows).sort(function (a, b) {
+    return overflows[a] - overflows[b];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/computeOffsets.js b/node_modules/@popperjs/core/dist/esm/utils/computeOffsets.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a8169016a5dc24066df5d9c52680b499e4c5a03
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/computeOffsets.js
@@ -0,0 +1,70 @@
+import getBasePlacement from "./getBasePlacement.js";
+import getVariation from "./getVariation.js";
+import getMainAxisFromPlacement from "./getMainAxisFromPlacement.js";
+import { top, right, bottom, left, start, end } from "../enums.js";
+export default function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+
+      default:
+    }
+  }
+
+  return offsets;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/debounce.js b/node_modules/@popperjs/core/dist/esm/utils/debounce.js
new file mode 100644
index 0000000000000000000000000000000000000000..15a78da6acae527e453bf244ebc122f5a0f2de52
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/debounce.js
@@ -0,0 +1,15 @@
+export default function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/detectOverflow.js b/node_modules/@popperjs/core/dist/esm/utils/detectOverflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdc08a17e693ee41cd1aa6dbb10a4a47761b08eb
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/detectOverflow.js
@@ -0,0 +1,65 @@
+import getClippingRect from "../dom-utils/getClippingRect.js";
+import getDocumentElement from "../dom-utils/getDocumentElement.js";
+import getBoundingClientRect from "../dom-utils/getBoundingClientRect.js";
+import computeOffsets from "./computeOffsets.js";
+import rectToClientRect from "./rectToClientRect.js";
+import { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from "../enums.js";
+import { isElement } from "../dom-utils/instanceOf.js";
+import mergePaddingObject from "./mergePaddingObject.js";
+import expandToHashMap from "./expandToHashMap.js"; // eslint-disable-next-line import/no-unused-modules
+
+export default function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/expandToHashMap.js b/node_modules/@popperjs/core/dist/esm/utils/expandToHashMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..e428d5843c3216a350cfbfe84146f478c257096a
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/expandToHashMap.js
@@ -0,0 +1,6 @@
+export default function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getAltAxis.js b/node_modules/@popperjs/core/dist/esm/utils/getAltAxis.js
new file mode 100644
index 0000000000000000000000000000000000000000..d834474b26695166ddccc1c389dfe83eb2349e99
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getAltAxis.js
@@ -0,0 +1,3 @@
+export default function getAltAxis(axis) {
+  return axis === 'x' ? 'y' : 'x';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getAltLen.js b/node_modules/@popperjs/core/dist/esm/utils/getAltLen.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb68d1975093ba2535956cd4f5e9b047e8575df2
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getAltLen.js
@@ -0,0 +1,3 @@
+export default function getAltLen(len) {
+  return len === 'width' ? 'height' : 'width';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getBasePlacement.js b/node_modules/@popperjs/core/dist/esm/utils/getBasePlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eebf96b3a81d49ce6d7eeec7deb84ed085f3adb
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getBasePlacement.js
@@ -0,0 +1,4 @@
+import { auto } from "../enums.js";
+export default function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getFreshSideObject.js b/node_modules/@popperjs/core/dist/esm/utils/getFreshSideObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..fcec47ec9061719b397aa97eac6ac4412fb73dd2
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getFreshSideObject.js
@@ -0,0 +1,8 @@
+export default function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getMainAxisFromPlacement.js b/node_modules/@popperjs/core/dist/esm/utils/getMainAxisFromPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe186b31122c8433b9907810c13536eeb7ad79b7
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getMainAxisFromPlacement.js
@@ -0,0 +1,3 @@
+export default function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getOppositePlacement.js b/node_modules/@popperjs/core/dist/esm/utils/getOppositePlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..180ec6e7a8ee5b8f5a49799cd4de14157df9b14c
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getOppositePlacement.js
@@ -0,0 +1,11 @@
+var hash = {
+  left: 'right',
+  right: 'left',
+  bottom: 'top',
+  top: 'bottom'
+};
+export default function getOppositePlacement(placement) {
+  return placement.replace(/left|right|bottom|top/g, function (matched) {
+    return hash[matched];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getOppositeVariationPlacement.js b/node_modules/@popperjs/core/dist/esm/utils/getOppositeVariationPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..379d0718a54b550ff06b4d9cee802299979cf9e9
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getOppositeVariationPlacement.js
@@ -0,0 +1,9 @@
+var hash = {
+  start: 'end',
+  end: 'start'
+};
+export default function getOppositeVariationPlacement(placement) {
+  return placement.replace(/start|end/g, function (matched) {
+    return hash[matched];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/getVariation.js b/node_modules/@popperjs/core/dist/esm/utils/getVariation.js
new file mode 100644
index 0000000000000000000000000000000000000000..c760df2a12db4a9f83b461f8214efe9fb2ce2b78
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/getVariation.js
@@ -0,0 +1,3 @@
+export default function getVariation(placement) {
+  return placement.split('-')[1];
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/math.js b/node_modules/@popperjs/core/dist/esm/utils/math.js
new file mode 100644
index 0000000000000000000000000000000000000000..d92a000ea610b58d0119498313c51bc81aa1a674
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/math.js
@@ -0,0 +1,3 @@
+export var max = Math.max;
+export var min = Math.min;
+export var round = Math.round;
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/mergeByName.js b/node_modules/@popperjs/core/dist/esm/utils/mergeByName.js
new file mode 100644
index 0000000000000000000000000000000000000000..35f508a5bc014192be18f19ebc25582fc340168d
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/mergeByName.js
@@ -0,0 +1,14 @@
+export default function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/mergePaddingObject.js b/node_modules/@popperjs/core/dist/esm/utils/mergePaddingObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..26af6c56b8571fd948b10b477ea994462a02af75
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/mergePaddingObject.js
@@ -0,0 +1,4 @@
+import getFreshSideObject from "./getFreshSideObject.js";
+export default function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/orderModifiers.js b/node_modules/@popperjs/core/dist/esm/utils/orderModifiers.js
new file mode 100644
index 0000000000000000000000000000000000000000..82572bcf3646ccb7d88ceef0ebad977d76ecc8fe
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/orderModifiers.js
@@ -0,0 +1,44 @@
+import { modifierPhases } from "../enums.js"; // source: https://stackoverflow.com/questions/49875255
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+export default function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/rectToClientRect.js b/node_modules/@popperjs/core/dist/esm/utils/rectToClientRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..5685476199350782ff7a4cad6993c5febea04f53
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/rectToClientRect.js
@@ -0,0 +1,8 @@
+export default function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/uniqueBy.js b/node_modules/@popperjs/core/dist/esm/utils/uniqueBy.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e083f3e68a88223027ed01a20c9cf99bc167a9b
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/uniqueBy.js
@@ -0,0 +1,11 @@
+export default function uniqueBy(arr, fn) {
+  var identifiers = new Set();
+  return arr.filter(function (item) {
+    var identifier = fn(item);
+
+    if (!identifiers.has(identifier)) {
+      identifiers.add(identifier);
+      return true;
+    }
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/userAgent.js b/node_modules/@popperjs/core/dist/esm/utils/userAgent.js
new file mode 100644
index 0000000000000000000000000000000000000000..9652af724d8249a33e07d117068e1500187e5c75
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/userAgent.js
@@ -0,0 +1,11 @@
+export default function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/esm/utils/within.js b/node_modules/@popperjs/core/dist/esm/utils/within.js
new file mode 100644
index 0000000000000000000000000000000000000000..da7bf7635ddf154003a9278a9af88bfaf2ef8563
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/esm/utils/within.js
@@ -0,0 +1,8 @@
+import { max as mathMax, min as mathMin } from "./math.js";
+export function within(min, value, max) {
+  return mathMax(min, mathMin(value, max));
+}
+export function withinMaxClamp(min, value, max) {
+  var v = within(min, value, max);
+  return v > max ? max : v;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/enums.js b/node_modules/@popperjs/core/dist/umd/enums.js
new file mode 100644
index 0000000000000000000000000000000000000000..286a8a8d766e711ba68210920138a5e14a294e8d
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/enums.js
@@ -0,0 +1,71 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Popper = {}));
+}(this, (function (exports) { 'use strict';
+
+  var top = 'top';
+  var bottom = 'bottom';
+  var right = 'right';
+  var left = 'left';
+  var auto = 'auto';
+  var basePlacements = [top, bottom, right, left];
+  var start = 'start';
+  var end = 'end';
+  var clippingParents = 'clippingParents';
+  var viewport = 'viewport';
+  var popper = 'popper';
+  var reference = 'reference';
+  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+    return acc.concat([placement + "-" + start, placement + "-" + end]);
+  }, []);
+  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+  }, []); // modifiers that need to read the DOM
+
+  var beforeRead = 'beforeRead';
+  var read = 'read';
+  var afterRead = 'afterRead'; // pure-logic modifiers
+
+  var beforeMain = 'beforeMain';
+  var main = 'main';
+  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+  var beforeWrite = 'beforeWrite';
+  var write = 'write';
+  var afterWrite = 'afterWrite';
+  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+  exports.afterMain = afterMain;
+  exports.afterRead = afterRead;
+  exports.afterWrite = afterWrite;
+  exports.auto = auto;
+  exports.basePlacements = basePlacements;
+  exports.beforeMain = beforeMain;
+  exports.beforeRead = beforeRead;
+  exports.beforeWrite = beforeWrite;
+  exports.bottom = bottom;
+  exports.clippingParents = clippingParents;
+  exports.end = end;
+  exports.left = left;
+  exports.main = main;
+  exports.modifierPhases = modifierPhases;
+  exports.placements = placements;
+  exports.popper = popper;
+  exports.read = read;
+  exports.reference = reference;
+  exports.right = right;
+  exports.start = start;
+  exports.top = top;
+  exports.variationPlacements = variationPlacements;
+  exports.viewport = viewport;
+  exports.write = write;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=enums.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/enums.js.map b/node_modules/@popperjs/core/dist/umd/enums.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..022e338acf76dee578ec77e8ff8ae34a7c10c247
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/enums.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"enums.js","sources":["../../src/enums.js"],"sourcesContent":["// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n"],"names":["top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","concat","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases"],"mappings":";;;;;;;;;;MACaA,GAAU,GAAG;MACbC,MAAgB,GAAG;MACnBC,KAAc,GAAG;MACjBC,IAAY,GAAG;MACfC,IAAY,GAAG;MAMfC,cAAoC,GAAG,CAACL,GAAD,EAAMC,MAAN,EAAcC,KAAd,EAAqBC,IAArB;MAEvCG,KAAc,GAAG;MACjBC,GAAU,GAAG;MAGbC,eAAkC,GAAG;MACrCC,QAAoB,GAAG;MAIvBC,MAAgB,GAAG;MACnBC,SAAsB,GAAG;MAgBzBC,mBAA8C,gBAAGP,cAAc,CAACQ,MAAf,CAC5D,UAACC,GAAD,EAAiCC,SAAjC;EAAA,SACED,GAAG,CAACE,MAAJ,CAAW,CAAKD,SAAL,SAAkBT,KAAlB,EAAqCS,SAArC,SAAkDR,GAAlD,CAAX,CADF;EAAA,CAD4D,EAG5D,EAH4D;MAKjDU,UAA4B,gBAAG,UAAIZ,cAAJ,GAAoBD,IAApB,GAA0BS,MAA1B,CAC1C,UACEC,GADF,EAEEC,SAFF;EAAA,SAIED,GAAG,CAACE,MAAJ,CAAW,CACTD,SADS,EAELA,SAFK,SAEQT,KAFR,EAGLS,SAHK,SAGQR,GAHR,CAAX,CAJF;EAAA,CAD0C,EAU1C,EAV0C;;MAc/BW,UAAwB,GAAG;MAC3BC,IAAY,GAAG;MACfC,SAAsB,GAAG;;MAEzBC,UAAwB,GAAG;MAC3BC,IAAY,GAAG;MACfC,SAAsB,GAAG;;MAEzBC,WAA0B,GAAG;MAC7BC,KAAc,GAAG;MACjBC,UAAwB,GAAG;MAC3BC,cAAqC,GAAG,CACnDT,UADmD,EAEnDC,IAFmD,EAGnDC,SAHmD,EAInDC,UAJmD,EAKnDC,IALmD,EAMnDC,SANmD,EAOnDC,WAPmD,EAQnDC,KARmD,EASnDC,UATmD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/enums.min.js b/node_modules/@popperjs/core/dist/umd/enums.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..4618f98fab7b60270424c86f614f23512bcb9b74
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/enums.min.js
@@ -0,0 +1,6 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";var t="bottom",r="right",o="left",n="auto",a=["top",t,r,o],i="start",f="end",p=a.reduce((function(e,t){return e.concat([t+"-"+i,t+"-"+f])}),[]),c=[].concat(a,[n]).reduce((function(e,t){return e.concat([t,t+"-"+i,t+"-"+f])}),[]),d="beforeRead",s="read",u="afterRead",l="beforeMain",b="main",m="afterMain",P="beforeWrite",g="write",h="afterWrite",v=[d,s,u,l,b,m,P,g,h];e.afterMain=m,e.afterRead=u,e.afterWrite=h,e.auto=n,e.basePlacements=a,e.beforeMain=l,e.beforeRead=d,e.beforeWrite=P,e.bottom=t,e.clippingParents="clippingParents",e.end=f,e.left=o,e.main=b,e.modifierPhases=v,e.placements=c,e.popper="popper",e.read=s,e.reference="reference",e.right=r,e.start=i,e.top="top",e.variationPlacements=p,e.viewport="viewport",e.write=g,Object.defineProperty(e,"__esModule",{value:!0})}));
+//# sourceMappingURL=enums.min.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/enums.min.js.flow b/node_modules/@popperjs/core/dist/umd/enums.min.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8512ad042e1ed9d2c41711cb762b1ce68c24cc61
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/enums.min.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/enums.js'
diff --git a/node_modules/@popperjs/core/dist/umd/enums.min.js.map b/node_modules/@popperjs/core/dist/umd/enums.min.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..41d5f0f0bbe324667049e5fd04ea752481989011
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/enums.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"enums.min.js","sources":["../../src/enums.js"],"sourcesContent":["// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n"],"names":["bottom","right","left","auto","basePlacements","start","end","variationPlacements","reduce","acc","placement","concat","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases"],"mappings":";;;;kPAEaA,EAAmB,SACnBC,EAAiB,QACjBC,EAAe,OACfC,EAAe,OAMfC,EAAuC,CAV1B,MAUgCJ,EAAQC,EAAOC,GAE5DG,EAAiB,QACjBC,EAAa,MAyBbC,EAAiDH,EAAeI,QAC3E,SAACC,EAAgCC,UAC/BD,EAAIE,OAAO,CAAKD,MAAaL,EAAmBK,MAAaJ,MAC/D,IAEWM,EAA+B,UAAIR,GAAgBD,IAAMK,QACpE,SACEC,EACAC,UAEAD,EAAIE,OAAO,CACTD,EACIA,MAAaL,EACbK,MAAaJ,MAErB,IAIWO,EAA2B,aAC3BC,EAAe,OACfC,EAAyB,YAEzBC,EAA2B,aAC3BC,EAAe,OACfC,EAAyB,YAEzBC,EAA6B,cAC7BC,EAAiB,QACjBC,EAA2B,aAC3BC,EAAwC,CACnDT,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,qJA7DgD,uFAKlB,8BACM,sCAtBZ,yCAiBU"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper-base.js b/node_modules/@popperjs/core/dist/umd/popper-base.js
new file mode 100644
index 0000000000000000000000000000000000000000..c18fc9c8a05405a53817f38e90c32e40c1ab5cd4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-base.js
@@ -0,0 +1,945 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Popper = {}));
+}(this, (function (exports) { 'use strict';
+
+  function getWindow(node) {
+    if (node == null) {
+      return window;
+    }
+
+    if (node.toString() !== '[object Window]') {
+      var ownerDocument = node.ownerDocument;
+      return ownerDocument ? ownerDocument.defaultView || window : window;
+    }
+
+    return node;
+  }
+
+  function isElement(node) {
+    var OwnElement = getWindow(node).Element;
+    return node instanceof OwnElement || node instanceof Element;
+  }
+
+  function isHTMLElement(node) {
+    var OwnElement = getWindow(node).HTMLElement;
+    return node instanceof OwnElement || node instanceof HTMLElement;
+  }
+
+  function isShadowRoot(node) {
+    // IE 11 has no ShadowRoot
+    if (typeof ShadowRoot === 'undefined') {
+      return false;
+    }
+
+    var OwnElement = getWindow(node).ShadowRoot;
+    return node instanceof OwnElement || node instanceof ShadowRoot;
+  }
+
+  var max = Math.max;
+  var min = Math.min;
+  var round = Math.round;
+
+  function getUAString() {
+    var uaData = navigator.userAgentData;
+
+    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+      return uaData.brands.map(function (item) {
+        return item.brand + "/" + item.version;
+      }).join(' ');
+    }
+
+    return navigator.userAgent;
+  }
+
+  function isLayoutViewport() {
+    return !/^((?!chrome|android).)*safari/i.test(getUAString());
+  }
+
+  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+    if (includeScale === void 0) {
+      includeScale = false;
+    }
+
+    if (isFixedStrategy === void 0) {
+      isFixedStrategy = false;
+    }
+
+    var clientRect = element.getBoundingClientRect();
+    var scaleX = 1;
+    var scaleY = 1;
+
+    if (includeScale && isHTMLElement(element)) {
+      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+    }
+
+    var _ref = isElement(element) ? getWindow(element) : window,
+        visualViewport = _ref.visualViewport;
+
+    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+    var width = clientRect.width / scaleX;
+    var height = clientRect.height / scaleY;
+    return {
+      width: width,
+      height: height,
+      top: y,
+      right: x + width,
+      bottom: y + height,
+      left: x,
+      x: x,
+      y: y
+    };
+  }
+
+  function getWindowScroll(node) {
+    var win = getWindow(node);
+    var scrollLeft = win.pageXOffset;
+    var scrollTop = win.pageYOffset;
+    return {
+      scrollLeft: scrollLeft,
+      scrollTop: scrollTop
+    };
+  }
+
+  function getHTMLElementScroll(element) {
+    return {
+      scrollLeft: element.scrollLeft,
+      scrollTop: element.scrollTop
+    };
+  }
+
+  function getNodeScroll(node) {
+    if (node === getWindow(node) || !isHTMLElement(node)) {
+      return getWindowScroll(node);
+    } else {
+      return getHTMLElementScroll(node);
+    }
+  }
+
+  function getNodeName(element) {
+    return element ? (element.nodeName || '').toLowerCase() : null;
+  }
+
+  function getDocumentElement(element) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+    element.document) || window.document).documentElement;
+  }
+
+  function getWindowScrollBarX(element) {
+    // If <html> has a CSS width greater than the viewport, then this will be
+    // incorrect for RTL.
+    // Popper 1 is broken in this case and never had a bug report so let's assume
+    // it's not an issue. I don't think anyone ever specifies width on <html>
+    // anyway.
+    // Browsers where the left scrollbar doesn't cause an issue report `0` for
+    // this (e.g. Edge 2019, IE11, Safari)
+    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+  }
+
+  function getComputedStyle(element) {
+    return getWindow(element).getComputedStyle(element);
+  }
+
+  function isScrollParent(element) {
+    // Firefox wants us to check `-x` and `-y` variations as well
+    var _getComputedStyle = getComputedStyle(element),
+        overflow = _getComputedStyle.overflow,
+        overflowX = _getComputedStyle.overflowX,
+        overflowY = _getComputedStyle.overflowY;
+
+    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+  }
+
+  function isElementScaled(element) {
+    var rect = element.getBoundingClientRect();
+    var scaleX = round(rect.width) / element.offsetWidth || 1;
+    var scaleY = round(rect.height) / element.offsetHeight || 1;
+    return scaleX !== 1 || scaleY !== 1;
+  } // Returns the composite rect of an element relative to its offsetParent.
+  // Composite means it takes into account transforms as well as layout.
+
+
+  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+    if (isFixed === void 0) {
+      isFixed = false;
+    }
+
+    var isOffsetParentAnElement = isHTMLElement(offsetParent);
+    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+    var documentElement = getDocumentElement(offsetParent);
+    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+    var scroll = {
+      scrollLeft: 0,
+      scrollTop: 0
+    };
+    var offsets = {
+      x: 0,
+      y: 0
+    };
+
+    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+      isScrollParent(documentElement)) {
+        scroll = getNodeScroll(offsetParent);
+      }
+
+      if (isHTMLElement(offsetParent)) {
+        offsets = getBoundingClientRect(offsetParent, true);
+        offsets.x += offsetParent.clientLeft;
+        offsets.y += offsetParent.clientTop;
+      } else if (documentElement) {
+        offsets.x = getWindowScrollBarX(documentElement);
+      }
+    }
+
+    return {
+      x: rect.left + scroll.scrollLeft - offsets.x,
+      y: rect.top + scroll.scrollTop - offsets.y,
+      width: rect.width,
+      height: rect.height
+    };
+  }
+
+  // means it doesn't take into account transforms.
+
+  function getLayoutRect(element) {
+    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+    // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+    var width = element.offsetWidth;
+    var height = element.offsetHeight;
+
+    if (Math.abs(clientRect.width - width) <= 1) {
+      width = clientRect.width;
+    }
+
+    if (Math.abs(clientRect.height - height) <= 1) {
+      height = clientRect.height;
+    }
+
+    return {
+      x: element.offsetLeft,
+      y: element.offsetTop,
+      width: width,
+      height: height
+    };
+  }
+
+  function getParentNode(element) {
+    if (getNodeName(element) === 'html') {
+      return element;
+    }
+
+    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+      // $FlowFixMe[incompatible-return]
+      // $FlowFixMe[prop-missing]
+      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+      element.parentNode || ( // DOM Element detected
+      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+      getDocumentElement(element) // fallback
+
+    );
+  }
+
+  function getScrollParent(node) {
+    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+      // $FlowFixMe[incompatible-return]: assume body is always available
+      return node.ownerDocument.body;
+    }
+
+    if (isHTMLElement(node) && isScrollParent(node)) {
+      return node;
+    }
+
+    return getScrollParent(getParentNode(node));
+  }
+
+  /*
+  given a DOM element, return the list of all scroll parents, up the list of ancesors
+  until we get to the top window object. This list is what we attach scroll listeners
+  to, because if any of these parent elements scroll, we'll need to re-calculate the
+  reference element's position.
+  */
+
+  function listScrollParents(element, list) {
+    var _element$ownerDocumen;
+
+    if (list === void 0) {
+      list = [];
+    }
+
+    var scrollParent = getScrollParent(element);
+    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+    var win = getWindow(scrollParent);
+    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+    var updatedList = list.concat(target);
+    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+    updatedList.concat(listScrollParents(getParentNode(target)));
+  }
+
+  function isTableElement(element) {
+    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+  }
+
+  function getTrueOffsetParent(element) {
+    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+    getComputedStyle(element).position === 'fixed') {
+      return null;
+    }
+
+    return element.offsetParent;
+  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
+  // return the containing block
+
+
+  function getContainingBlock(element) {
+    var isFirefox = /firefox/i.test(getUAString());
+    var isIE = /Trident/i.test(getUAString());
+
+    if (isIE && isHTMLElement(element)) {
+      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+      var elementCss = getComputedStyle(element);
+
+      if (elementCss.position === 'fixed') {
+        return null;
+      }
+    }
+
+    var currentNode = getParentNode(element);
+
+    if (isShadowRoot(currentNode)) {
+      currentNode = currentNode.host;
+    }
+
+    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+      var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+      // create a containing block.
+      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+        return currentNode;
+      } else {
+        currentNode = currentNode.parentNode;
+      }
+    }
+
+    return null;
+  } // Gets the closest ancestor positioned element. Handles some edge cases,
+  // such as table ancestors and cross browser bugs.
+
+
+  function getOffsetParent(element) {
+    var window = getWindow(element);
+    var offsetParent = getTrueOffsetParent(element);
+
+    while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+      offsetParent = getTrueOffsetParent(offsetParent);
+    }
+
+    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+      return window;
+    }
+
+    return offsetParent || getContainingBlock(element) || window;
+  }
+
+  var top = 'top';
+  var bottom = 'bottom';
+  var right = 'right';
+  var left = 'left';
+  var basePlacements = [top, bottom, right, left];
+  var start = 'start';
+  var end = 'end';
+  var clippingParents = 'clippingParents';
+  var viewport = 'viewport';
+  var popper = 'popper';
+  var reference = 'reference';
+
+  var beforeRead = 'beforeRead';
+  var read = 'read';
+  var afterRead = 'afterRead'; // pure-logic modifiers
+
+  var beforeMain = 'beforeMain';
+  var main = 'main';
+  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+  var beforeWrite = 'beforeWrite';
+  var write = 'write';
+  var afterWrite = 'afterWrite';
+  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+  function order(modifiers) {
+    var map = new Map();
+    var visited = new Set();
+    var result = [];
+    modifiers.forEach(function (modifier) {
+      map.set(modifier.name, modifier);
+    }); // On visiting object, check for its dependencies and visit them recursively
+
+    function sort(modifier) {
+      visited.add(modifier.name);
+      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+      requires.forEach(function (dep) {
+        if (!visited.has(dep)) {
+          var depModifier = map.get(dep);
+
+          if (depModifier) {
+            sort(depModifier);
+          }
+        }
+      });
+      result.push(modifier);
+    }
+
+    modifiers.forEach(function (modifier) {
+      if (!visited.has(modifier.name)) {
+        // check for visited object
+        sort(modifier);
+      }
+    });
+    return result;
+  }
+
+  function orderModifiers(modifiers) {
+    // order based on dependencies
+    var orderedModifiers = order(modifiers); // order based on phase
+
+    return modifierPhases.reduce(function (acc, phase) {
+      return acc.concat(orderedModifiers.filter(function (modifier) {
+        return modifier.phase === phase;
+      }));
+    }, []);
+  }
+
+  function debounce(fn) {
+    var pending;
+    return function () {
+      if (!pending) {
+        pending = new Promise(function (resolve) {
+          Promise.resolve().then(function () {
+            pending = undefined;
+            resolve(fn());
+          });
+        });
+      }
+
+      return pending;
+    };
+  }
+
+  function mergeByName(modifiers) {
+    var merged = modifiers.reduce(function (merged, current) {
+      var existing = merged[current.name];
+      merged[current.name] = existing ? Object.assign({}, existing, current, {
+        options: Object.assign({}, existing.options, current.options),
+        data: Object.assign({}, existing.data, current.data)
+      }) : current;
+      return merged;
+    }, {}); // IE11 does not support Object.values
+
+    return Object.keys(merged).map(function (key) {
+      return merged[key];
+    });
+  }
+
+  function getViewportRect(element, strategy) {
+    var win = getWindow(element);
+    var html = getDocumentElement(element);
+    var visualViewport = win.visualViewport;
+    var width = html.clientWidth;
+    var height = html.clientHeight;
+    var x = 0;
+    var y = 0;
+
+    if (visualViewport) {
+      width = visualViewport.width;
+      height = visualViewport.height;
+      var layoutViewport = isLayoutViewport();
+
+      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+        x = visualViewport.offsetLeft;
+        y = visualViewport.offsetTop;
+      }
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x + getWindowScrollBarX(element),
+      y: y
+    };
+  }
+
+  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+  function getDocumentRect(element) {
+    var _element$ownerDocumen;
+
+    var html = getDocumentElement(element);
+    var winScroll = getWindowScroll(element);
+    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+    var y = -winScroll.scrollTop;
+
+    if (getComputedStyle(body || html).direction === 'rtl') {
+      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x,
+      y: y
+    };
+  }
+
+  function contains(parent, child) {
+    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+    if (parent.contains(child)) {
+      return true;
+    } // then fallback to custom implementation with Shadow DOM support
+    else if (rootNode && isShadowRoot(rootNode)) {
+        var next = child;
+
+        do {
+          if (next && parent.isSameNode(next)) {
+            return true;
+          } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+          next = next.parentNode || next.host;
+        } while (next);
+      } // Give up, the result is false
+
+
+    return false;
+  }
+
+  function rectToClientRect(rect) {
+    return Object.assign({}, rect, {
+      left: rect.x,
+      top: rect.y,
+      right: rect.x + rect.width,
+      bottom: rect.y + rect.height
+    });
+  }
+
+  function getInnerBoundingClientRect(element, strategy) {
+    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+    rect.top = rect.top + element.clientTop;
+    rect.left = rect.left + element.clientLeft;
+    rect.bottom = rect.top + element.clientHeight;
+    rect.right = rect.left + element.clientWidth;
+    rect.width = element.clientWidth;
+    rect.height = element.clientHeight;
+    rect.x = rect.left;
+    rect.y = rect.top;
+    return rect;
+  }
+
+  function getClientRectFromMixedType(element, clippingParent, strategy) {
+    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+  } // A "clipping parent" is an overflowable container with the characteristic of
+  // clipping (or hiding) overflowing elements with a position different from
+  // `initial`
+
+
+  function getClippingParents(element) {
+    var clippingParents = listScrollParents(getParentNode(element));
+    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+    if (!isElement(clipperElement)) {
+      return [];
+    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+    return clippingParents.filter(function (clippingParent) {
+      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+    });
+  } // Gets the maximum area that the element is visible in due to any number of
+  // clipping parents
+
+
+  function getClippingRect(element, boundary, rootBoundary, strategy) {
+    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+    var firstClippingParent = clippingParents[0];
+    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+      accRect.top = max(rect.top, accRect.top);
+      accRect.right = min(rect.right, accRect.right);
+      accRect.bottom = min(rect.bottom, accRect.bottom);
+      accRect.left = max(rect.left, accRect.left);
+      return accRect;
+    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+    clippingRect.width = clippingRect.right - clippingRect.left;
+    clippingRect.height = clippingRect.bottom - clippingRect.top;
+    clippingRect.x = clippingRect.left;
+    clippingRect.y = clippingRect.top;
+    return clippingRect;
+  }
+
+  function getBasePlacement(placement) {
+    return placement.split('-')[0];
+  }
+
+  function getVariation(placement) {
+    return placement.split('-')[1];
+  }
+
+  function getMainAxisFromPlacement(placement) {
+    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+  }
+
+  function computeOffsets(_ref) {
+    var reference = _ref.reference,
+        element = _ref.element,
+        placement = _ref.placement;
+    var basePlacement = placement ? getBasePlacement(placement) : null;
+    var variation = placement ? getVariation(placement) : null;
+    var commonX = reference.x + reference.width / 2 - element.width / 2;
+    var commonY = reference.y + reference.height / 2 - element.height / 2;
+    var offsets;
+
+    switch (basePlacement) {
+      case top:
+        offsets = {
+          x: commonX,
+          y: reference.y - element.height
+        };
+        break;
+
+      case bottom:
+        offsets = {
+          x: commonX,
+          y: reference.y + reference.height
+        };
+        break;
+
+      case right:
+        offsets = {
+          x: reference.x + reference.width,
+          y: commonY
+        };
+        break;
+
+      case left:
+        offsets = {
+          x: reference.x - element.width,
+          y: commonY
+        };
+        break;
+
+      default:
+        offsets = {
+          x: reference.x,
+          y: reference.y
+        };
+    }
+
+    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+    if (mainAxis != null) {
+      var len = mainAxis === 'y' ? 'height' : 'width';
+
+      switch (variation) {
+        case start:
+          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+          break;
+
+        case end:
+          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+          break;
+      }
+    }
+
+    return offsets;
+  }
+
+  function getFreshSideObject() {
+    return {
+      top: 0,
+      right: 0,
+      bottom: 0,
+      left: 0
+    };
+  }
+
+  function mergePaddingObject(paddingObject) {
+    return Object.assign({}, getFreshSideObject(), paddingObject);
+  }
+
+  function expandToHashMap(value, keys) {
+    return keys.reduce(function (hashMap, key) {
+      hashMap[key] = value;
+      return hashMap;
+    }, {});
+  }
+
+  function detectOverflow(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        _options$placement = _options.placement,
+        placement = _options$placement === void 0 ? state.placement : _options$placement,
+        _options$strategy = _options.strategy,
+        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+        _options$boundary = _options.boundary,
+        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+        _options$rootBoundary = _options.rootBoundary,
+        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+        _options$elementConte = _options.elementContext,
+        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+        _options$altBoundary = _options.altBoundary,
+        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+        _options$padding = _options.padding,
+        padding = _options$padding === void 0 ? 0 : _options$padding;
+    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+    var altContext = elementContext === popper ? reference : popper;
+    var popperRect = state.rects.popper;
+    var element = state.elements[altBoundary ? altContext : elementContext];
+    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+    var referenceClientRect = getBoundingClientRect(state.elements.reference);
+    var popperOffsets = computeOffsets({
+      reference: referenceClientRect,
+      element: popperRect,
+      strategy: 'absolute',
+      placement: placement
+    });
+    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+    // 0 or negative = within the clipping rect
+
+    var overflowOffsets = {
+      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+    };
+    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+    if (elementContext === popper && offsetData) {
+      var offset = offsetData[placement];
+      Object.keys(overflowOffsets).forEach(function (key) {
+        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+        overflowOffsets[key] += offset[axis] * multiply;
+      });
+    }
+
+    return overflowOffsets;
+  }
+
+  var DEFAULT_OPTIONS = {
+    placement: 'bottom',
+    modifiers: [],
+    strategy: 'absolute'
+  };
+
+  function areValidElements() {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return !args.some(function (element) {
+      return !(element && typeof element.getBoundingClientRect === 'function');
+    });
+  }
+
+  function popperGenerator(generatorOptions) {
+    if (generatorOptions === void 0) {
+      generatorOptions = {};
+    }
+
+    var _generatorOptions = generatorOptions,
+        _generatorOptions$def = _generatorOptions.defaultModifiers,
+        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+        _generatorOptions$def2 = _generatorOptions.defaultOptions,
+        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+    return function createPopper(reference, popper, options) {
+      if (options === void 0) {
+        options = defaultOptions;
+      }
+
+      var state = {
+        placement: 'bottom',
+        orderedModifiers: [],
+        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+        modifiersData: {},
+        elements: {
+          reference: reference,
+          popper: popper
+        },
+        attributes: {},
+        styles: {}
+      };
+      var effectCleanupFns = [];
+      var isDestroyed = false;
+      var instance = {
+        state: state,
+        setOptions: function setOptions(setOptionsAction) {
+          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+          cleanupModifierEffects();
+          state.options = Object.assign({}, defaultOptions, state.options, options);
+          state.scrollParents = {
+            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+            popper: listScrollParents(popper)
+          }; // Orders the modifiers based on their dependencies and `phase`
+          // properties
+
+          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+          state.orderedModifiers = orderedModifiers.filter(function (m) {
+            return m.enabled;
+          });
+          runModifierEffects();
+          return instance.update();
+        },
+        // Sync update – it will always be executed, even if not necessary. This
+        // is useful for low frequency updates where sync behavior simplifies the
+        // logic.
+        // For high frequency updates (e.g. `resize` and `scroll` events), always
+        // prefer the async Popper#update method
+        forceUpdate: function forceUpdate() {
+          if (isDestroyed) {
+            return;
+          }
+
+          var _state$elements = state.elements,
+              reference = _state$elements.reference,
+              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+          // anymore
+
+          if (!areValidElements(reference, popper)) {
+            return;
+          } // Store the reference and popper rects to be read by modifiers
+
+
+          state.rects = {
+            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+            popper: getLayoutRect(popper)
+          }; // Modifiers have the ability to reset the current update cycle. The
+          // most common use case for this is the `flip` modifier changing the
+          // placement, which then needs to re-run all the modifiers, because the
+          // logic was previously ran for the previous placement and is therefore
+          // stale/incorrect
+
+          state.reset = false;
+          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+          // is filled with the initial data specified by the modifier. This means
+          // it doesn't persist and is fresh on each update.
+          // To ensure persistent data, use `${name}#persistent`
+
+          state.orderedModifiers.forEach(function (modifier) {
+            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+          });
+
+          for (var index = 0; index < state.orderedModifiers.length; index++) {
+            if (state.reset === true) {
+              state.reset = false;
+              index = -1;
+              continue;
+            }
+
+            var _state$orderedModifie = state.orderedModifiers[index],
+                fn = _state$orderedModifie.fn,
+                _state$orderedModifie2 = _state$orderedModifie.options,
+                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+                name = _state$orderedModifie.name;
+
+            if (typeof fn === 'function') {
+              state = fn({
+                state: state,
+                options: _options,
+                name: name,
+                instance: instance
+              }) || state;
+            }
+          }
+        },
+        // Async and optimistically optimized update – it will not be executed if
+        // not necessary (debounced to run at most once-per-tick)
+        update: debounce(function () {
+          return new Promise(function (resolve) {
+            instance.forceUpdate();
+            resolve(state);
+          });
+        }),
+        destroy: function destroy() {
+          cleanupModifierEffects();
+          isDestroyed = true;
+        }
+      };
+
+      if (!areValidElements(reference, popper)) {
+        return instance;
+      }
+
+      instance.setOptions(options).then(function (state) {
+        if (!isDestroyed && options.onFirstUpdate) {
+          options.onFirstUpdate(state);
+        }
+      }); // Modifiers have the ability to execute arbitrary code before the first
+      // update cycle runs. They will be executed in the same order as the update
+      // cycle. This is useful when a modifier adds some persistent data that
+      // other modifiers need to use, but the modifier is run after the dependent
+      // one.
+
+      function runModifierEffects() {
+        state.orderedModifiers.forEach(function (_ref) {
+          var name = _ref.name,
+              _ref$options = _ref.options,
+              options = _ref$options === void 0 ? {} : _ref$options,
+              effect = _ref.effect;
+
+          if (typeof effect === 'function') {
+            var cleanupFn = effect({
+              state: state,
+              name: name,
+              instance: instance,
+              options: options
+            });
+
+            var noopFn = function noopFn() {};
+
+            effectCleanupFns.push(cleanupFn || noopFn);
+          }
+        });
+      }
+
+      function cleanupModifierEffects() {
+        effectCleanupFns.forEach(function (fn) {
+          return fn();
+        });
+        effectCleanupFns = [];
+      }
+
+      return instance;
+    };
+  }
+  var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
+
+  exports.createPopper = createPopper;
+  exports.detectOverflow = detectOverflow;
+  exports.popperGenerator = popperGenerator;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=popper-base.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper-base.js.map b/node_modules/@popperjs/core/dist/umd/popper-base.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..08b2feb7cdcd69e2dcd2ee388cf208969834977a
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-base.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-base.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","basePlacements","start","end","clippingParents","viewport","popper","reference","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","reduce","acc","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","placement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper-base.min.js b/node_modules/@popperjs/core/dist/umd/popper-base.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..577b98fecdcf83db01f16a162249fcf386b1412e
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-base.min.js
@@ -0,0 +1,6 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Popper={})}(this,(function(t){"use strict";function e(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function n(t){return t instanceof e(t).Element||t instanceof Element}function o(t){return t instanceof e(t).HTMLElement||t instanceof HTMLElement}function r(t){return"undefined"!=typeof ShadowRoot&&(t instanceof e(t).ShadowRoot||t instanceof ShadowRoot)}var i=Math.max,f=Math.min,a=Math.round;function c(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function u(){return!/^((?!chrome|android).)*safari/i.test(c())}function s(t,r,i){void 0===r&&(r=!1),void 0===i&&(i=!1);var f=t.getBoundingClientRect(),c=1,s=1;r&&o(t)&&(c=t.offsetWidth>0&&a(f.width)/t.offsetWidth||1,s=t.offsetHeight>0&&a(f.height)/t.offsetHeight||1);var d=(n(t)?e(t):window).visualViewport,l=!u()&&i,h=(f.left+(l&&d?d.offsetLeft:0))/c,p=(f.top+(l&&d?d.offsetTop:0))/s,m=f.width/c,g=f.height/s;return{width:m,height:g,top:p,right:h+m,bottom:p+g,left:h,x:h,y:p}}function d(t){var n=e(t);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(t){return t?(t.nodeName||"").toLowerCase():null}function h(t){return((n(t)?t.ownerDocument:t.document)||window.document).documentElement}function p(t){return s(h(t)).left+d(t).scrollLeft}function m(t){return e(t).getComputedStyle(t)}function g(t){var e=m(t),n=e.overflow,o=e.overflowX,r=e.overflowY;return/auto|scroll|overlay|hidden/.test(n+r+o)}function v(t,n,r){void 0===r&&(r=!1);var i,f,c=o(n),u=o(n)&&function(t){var e=t.getBoundingClientRect(),n=a(e.width)/t.offsetWidth||1,o=a(e.height)/t.offsetHeight||1;return 1!==n||1!==o}(n),m=h(n),v=s(t,u,r),b={scrollLeft:0,scrollTop:0},y={x:0,y:0};return(c||!c&&!r)&&(("body"!==l(n)||g(m))&&(b=(i=n)!==e(i)&&o(i)?{scrollLeft:(f=i).scrollLeft,scrollTop:f.scrollTop}:d(i)),o(n)?((y=s(n,!0)).x+=n.clientLeft,y.y+=n.clientTop):m&&(y.x=p(m))),{x:v.left+b.scrollLeft-y.x,y:v.top+b.scrollTop-y.y,width:v.width,height:v.height}}function b(t){return"html"===l(t)?t:t.assignedSlot||t.parentNode||(r(t)?t.host:null)||h(t)}function y(t){return["html","body","#document"].indexOf(l(t))>=0?t.ownerDocument.body:o(t)&&g(t)?t:y(b(t))}function w(t,n){var o;void 0===n&&(n=[]);var r=y(t),i=r===(null==(o=t.ownerDocument)?void 0:o.body),f=e(r),a=i?[f].concat(f.visualViewport||[],g(r)?r:[]):r,c=n.concat(a);return i?c:c.concat(w(b(a)))}function x(t){return["table","td","th"].indexOf(l(t))>=0}function O(t){return o(t)&&"fixed"!==m(t).position?t.offsetParent:null}function M(t){for(var n=e(t),i=O(t);i&&x(i)&&"static"===m(i).position;)i=O(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(t){var e=/firefox/i.test(c());if(/Trident/i.test(c())&&o(t)&&"fixed"===m(t).position)return null;var n=b(t);for(r(n)&&(n=n.host);o(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||e&&"filter"===i.willChange||e&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(t)||n}var E="top",T="bottom",W="right",j="left",L=[E,T,W,j],H="viewport",P="popper",R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function D(t){var e=new Map,n=new Set,o=[];function r(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!n.has(t)){var o=e.get(t);o&&r(o)}})),o.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){n.has(t.name)||r(t)})),o}function C(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function S(t,o,r){return o===H?C(function(t,n){var o=e(t),r=h(t),i=o.visualViewport,f=r.clientWidth,a=r.clientHeight,c=0,s=0;if(i){f=i.width,a=i.height;var d=u();(d||!d&&"fixed"===n)&&(c=i.offsetLeft,s=i.offsetTop)}return{width:f,height:a,x:c+p(t),y:s}}(t,r)):n(o)?function(t,e){var n=s(t,!1,"fixed"===e);return n.top=n.top+t.clientTop,n.left=n.left+t.clientLeft,n.bottom=n.top+t.clientHeight,n.right=n.left+t.clientWidth,n.width=t.clientWidth,n.height=t.clientHeight,n.x=n.left,n.y=n.top,n}(o,r):C(function(t){var e,n=h(t),o=d(t),r=null==(e=t.ownerDocument)?void 0:e.body,f=i(n.scrollWidth,n.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),a=i(n.scrollHeight,n.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),c=-o.scrollLeft+p(t),u=-o.scrollTop;return"rtl"===m(r||n).direction&&(c+=i(n.clientWidth,r?r.clientWidth:0)-f),{width:f,height:a,x:c,y:u}}(h(t)))}function k(t){var e=w(b(t)),i=["absolute","fixed"].indexOf(m(t).position)>=0&&o(t)?M(t):t;return n(i)?e.filter((function(t){return n(t)&&function(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(n&&r(n)){var o=e;do{if(o&&t.isSameNode(o))return!0;o=o.parentNode||o.host}while(o)}return!1}(t,i)&&"body"!==l(t)})):[]}var N={placement:"bottom",modifiers:[],strategy:"absolute"};function A(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function B(t){void 0===t&&(t={});var e=t,o=e.defaultModifiers,r=void 0===o?[]:o,i=e.defaultOptions,f=void 0===i?N:i;return function(t,e,o){void 0===o&&(o=f);var i,a,c={placement:"bottom",orderedModifiers:[],options:Object.assign({},N,f),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},u=[],d=!1,l={state:c,setOptions:function(o){var i="function"==typeof o?o(c.options):o;h(),c.options=Object.assign({},f,c.options,i),c.scrollParents={reference:n(t)?w(t):t.contextElement?w(t.contextElement):[],popper:w(e)};var a,s,d=function(t){var e=D(t);return R.reduce((function(t,n){return t.concat(e.filter((function(t){return t.phase===n})))}),[])}((a=[].concat(r,c.options.modifiers),s=a.reduce((function(t,e){var n=t[e.name];return t[e.name]=n?Object.assign({},n,e,{options:Object.assign({},n.options,e.options),data:Object.assign({},n.data,e.data)}):e,t}),{}),Object.keys(s).map((function(t){return s[t]}))));return c.orderedModifiers=d.filter((function(t){return t.enabled})),c.orderedModifiers.forEach((function(t){var e=t.name,n=t.options,o=void 0===n?{}:n,r=t.effect;if("function"==typeof r){var i=r({state:c,name:e,instance:l,options:o}),f=function(){};u.push(i||f)}})),l.update()},forceUpdate:function(){if(!d){var t=c.elements,e=t.reference,n=t.popper;if(A(e,n)){var o,r,i,f;c.rects={reference:v(e,M(n),"fixed"===c.options.strategy),popper:(o=n,r=s(o),i=o.offsetWidth,f=o.offsetHeight,Math.abs(r.width-i)<=1&&(i=r.width),Math.abs(r.height-f)<=1&&(f=r.height),{x:o.offsetLeft,y:o.offsetTop,width:i,height:f})},c.reset=!1,c.placement=c.options.placement,c.orderedModifiers.forEach((function(t){return c.modifiersData[t.name]=Object.assign({},t.data)}));for(var a=0;a<c.orderedModifiers.length;a++)if(!0!==c.reset){var u=c.orderedModifiers[a],h=u.fn,p=u.options,m=void 0===p?{}:p,g=u.name;"function"==typeof h&&(c=h({state:c,options:m,name:g,instance:l})||c)}else c.reset=!1,a=-1}}},update:(i=function(){return new Promise((function(t){l.forceUpdate(),t(c)}))},function(){return a||(a=new Promise((function(t){Promise.resolve().then((function(){a=void 0,t(i())}))}))),a}),destroy:function(){h(),d=!0}};if(!A(t,e))return l;function h(){u.forEach((function(t){return t()})),u=[]}return l.setOptions(o).then((function(t){!d&&o.onFirstUpdate&&o.onFirstUpdate(t)})),l}}var U=B();t.createPopper=U,t.detectOverflow=function(t,e){void 0===e&&(e={});var o,r=e,a=r.placement,c=void 0===a?t.placement:a,u=r.strategy,d=void 0===u?t.strategy:u,l=r.boundary,p=void 0===l?"clippingParents":l,m=r.rootBoundary,g=void 0===m?H:m,v=r.elementContext,b=void 0===v?P:v,y=r.altBoundary,w=void 0!==y&&y,x=r.padding,O=void 0===x?0:x,M=function(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}("number"!=typeof O?O:(o=O,L.reduce((function(t,e){return t[e]=o,t}),{}))),R=b===P?"reference":P,D=t.rects.popper,N=t.elements[w?R:b],A=function(t,e,n,o){var r="clippingParents"===e?k(t):[].concat(e),a=[].concat(r,[n]),c=a[0],u=a.reduce((function(e,n){var r=S(t,n,o);return e.top=i(r.top,e.top),e.right=f(r.right,e.right),e.bottom=f(r.bottom,e.bottom),e.left=i(r.left,e.left),e}),S(t,c,o));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}(n(N)?N:N.contextElement||h(t.elements.popper),p,g,d),B=s(t.elements.reference),U=function(t){var e,n=t.reference,o=t.element,r=t.placement,i=r?function(t){return t.split("-")[0]}(r):null,f=r?function(t){return t.split("-")[1]}(r):null,a=n.x+n.width/2-o.width/2,c=n.y+n.height/2-o.height/2;switch(i){case E:e={x:a,y:n.y-o.height};break;case T:e={x:a,y:n.y+n.height};break;case W:e={x:n.x+n.width,y:c};break;case j:e={x:n.x-o.width,y:c};break;default:e={x:n.x,y:n.y}}var u=i?function(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}(i):null;if(null!=u){var s="y"===u?"height":"width";switch(f){case"start":e[u]=e[u]-(n[s]/2-o[s]/2);break;case"end":e[u]=e[u]+(n[s]/2-o[s]/2)}}return e}({reference:B,element:D,strategy:"absolute",placement:c}),V=C(Object.assign({},D,U)),q=b===P?V:B,F={top:A.top-q.top+M.top,bottom:q.bottom-A.bottom+M.bottom,left:A.left-q.left+M.left,right:q.right-A.right+M.right},X=t.modifiersData.offset;if(b===P&&X){var Y=X[c];Object.keys(F).forEach((function(t){var e=[W,T].indexOf(t)>=0?1:-1,n=[E,T].indexOf(t)>=0?"y":"x";F[t]+=Y[n]*e}))}return F},t.popperGenerator=B,Object.defineProperty(t,"__esModule",{value:!0})}));
+//# sourceMappingURL=popper-base.min.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper-base.min.js.flow b/node_modules/@popperjs/core/dist/umd/popper-base.min.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..22d88ebd999873602abfa104b11d1a850c034f99
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-base.min.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper-base.js'
diff --git a/node_modules/@popperjs/core/dist/umd/popper-base.min.js.map b/node_modules/@popperjs/core/dist/umd/popper-base.min.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..105025d680423bf995f944a4bf2c737fec5c99f1
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-base.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-base.min.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/createPopper.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getLayoutRect.js","../../src/utils/detectOverflow.js","../../src/utils/expandToHashMap.js","../../src/utils/mergePaddingObject.js","../../src/utils/getFreshSideObject.js","../../src/utils/computeOffsets.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","clientLeft","clientTop","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","_element$ownerDocumen","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","basePlacements","viewport","popper","modifierPhases","order","modifiers","Map","visited","Set","result","sort","modifier","add","name","requires","requiresIfExists","forEach","dep","has","depModifier","get","push","set","rectToClientRect","getClientRectFromMixedType","clippingParent","strategy","html","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingParents","clippingParents","clipperElement","parent","child","rootNode","getRootNode","contains","next","isSameNode","DEFAULT_OPTIONS","placement","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","reference","options","fn","pending","state","orderedModifiers","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","merged","reduce","acc","phase","orderModifiers","current","existing","data","Object","keys","key","m","enabled","effect","cleanupFn","noopFn","update","forceUpdate","rects","abs","reset","index","length","Promise","resolve","then","undefined","destroy","onFirstUpdate","createPopper","value","boundary","rootBoundary","elementContext","altBoundary","padding","paddingObject","mergePaddingObject","hashMap","altContext","popperRect","clippingClientRect","mainClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","referenceClientRect","popperOffsets","basePlacement","split","getBasePlacement","variation","getVariation","commonX","commonY","mainAxis","getMainAxisFromPlacement","len","computeOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper-lite.js b/node_modules/@popperjs/core/dist/umd/popper-lite.js
new file mode 100644
index 0000000000000000000000000000000000000000..a41018b2b8307c312cf1144bb6d276ee3938940f
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-lite.js
@@ -0,0 +1,1266 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Popper = {}));
+}(this, (function (exports) { 'use strict';
+
+  function getWindow(node) {
+    if (node == null) {
+      return window;
+    }
+
+    if (node.toString() !== '[object Window]') {
+      var ownerDocument = node.ownerDocument;
+      return ownerDocument ? ownerDocument.defaultView || window : window;
+    }
+
+    return node;
+  }
+
+  function isElement(node) {
+    var OwnElement = getWindow(node).Element;
+    return node instanceof OwnElement || node instanceof Element;
+  }
+
+  function isHTMLElement(node) {
+    var OwnElement = getWindow(node).HTMLElement;
+    return node instanceof OwnElement || node instanceof HTMLElement;
+  }
+
+  function isShadowRoot(node) {
+    // IE 11 has no ShadowRoot
+    if (typeof ShadowRoot === 'undefined') {
+      return false;
+    }
+
+    var OwnElement = getWindow(node).ShadowRoot;
+    return node instanceof OwnElement || node instanceof ShadowRoot;
+  }
+
+  var max = Math.max;
+  var min = Math.min;
+  var round = Math.round;
+
+  function getUAString() {
+    var uaData = navigator.userAgentData;
+
+    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+      return uaData.brands.map(function (item) {
+        return item.brand + "/" + item.version;
+      }).join(' ');
+    }
+
+    return navigator.userAgent;
+  }
+
+  function isLayoutViewport() {
+    return !/^((?!chrome|android).)*safari/i.test(getUAString());
+  }
+
+  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+    if (includeScale === void 0) {
+      includeScale = false;
+    }
+
+    if (isFixedStrategy === void 0) {
+      isFixedStrategy = false;
+    }
+
+    var clientRect = element.getBoundingClientRect();
+    var scaleX = 1;
+    var scaleY = 1;
+
+    if (includeScale && isHTMLElement(element)) {
+      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+    }
+
+    var _ref = isElement(element) ? getWindow(element) : window,
+        visualViewport = _ref.visualViewport;
+
+    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+    var width = clientRect.width / scaleX;
+    var height = clientRect.height / scaleY;
+    return {
+      width: width,
+      height: height,
+      top: y,
+      right: x + width,
+      bottom: y + height,
+      left: x,
+      x: x,
+      y: y
+    };
+  }
+
+  function getWindowScroll(node) {
+    var win = getWindow(node);
+    var scrollLeft = win.pageXOffset;
+    var scrollTop = win.pageYOffset;
+    return {
+      scrollLeft: scrollLeft,
+      scrollTop: scrollTop
+    };
+  }
+
+  function getHTMLElementScroll(element) {
+    return {
+      scrollLeft: element.scrollLeft,
+      scrollTop: element.scrollTop
+    };
+  }
+
+  function getNodeScroll(node) {
+    if (node === getWindow(node) || !isHTMLElement(node)) {
+      return getWindowScroll(node);
+    } else {
+      return getHTMLElementScroll(node);
+    }
+  }
+
+  function getNodeName(element) {
+    return element ? (element.nodeName || '').toLowerCase() : null;
+  }
+
+  function getDocumentElement(element) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+    element.document) || window.document).documentElement;
+  }
+
+  function getWindowScrollBarX(element) {
+    // If <html> has a CSS width greater than the viewport, then this will be
+    // incorrect for RTL.
+    // Popper 1 is broken in this case and never had a bug report so let's assume
+    // it's not an issue. I don't think anyone ever specifies width on <html>
+    // anyway.
+    // Browsers where the left scrollbar doesn't cause an issue report `0` for
+    // this (e.g. Edge 2019, IE11, Safari)
+    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+  }
+
+  function getComputedStyle(element) {
+    return getWindow(element).getComputedStyle(element);
+  }
+
+  function isScrollParent(element) {
+    // Firefox wants us to check `-x` and `-y` variations as well
+    var _getComputedStyle = getComputedStyle(element),
+        overflow = _getComputedStyle.overflow,
+        overflowX = _getComputedStyle.overflowX,
+        overflowY = _getComputedStyle.overflowY;
+
+    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+  }
+
+  function isElementScaled(element) {
+    var rect = element.getBoundingClientRect();
+    var scaleX = round(rect.width) / element.offsetWidth || 1;
+    var scaleY = round(rect.height) / element.offsetHeight || 1;
+    return scaleX !== 1 || scaleY !== 1;
+  } // Returns the composite rect of an element relative to its offsetParent.
+  // Composite means it takes into account transforms as well as layout.
+
+
+  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+    if (isFixed === void 0) {
+      isFixed = false;
+    }
+
+    var isOffsetParentAnElement = isHTMLElement(offsetParent);
+    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+    var documentElement = getDocumentElement(offsetParent);
+    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+    var scroll = {
+      scrollLeft: 0,
+      scrollTop: 0
+    };
+    var offsets = {
+      x: 0,
+      y: 0
+    };
+
+    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+      isScrollParent(documentElement)) {
+        scroll = getNodeScroll(offsetParent);
+      }
+
+      if (isHTMLElement(offsetParent)) {
+        offsets = getBoundingClientRect(offsetParent, true);
+        offsets.x += offsetParent.clientLeft;
+        offsets.y += offsetParent.clientTop;
+      } else if (documentElement) {
+        offsets.x = getWindowScrollBarX(documentElement);
+      }
+    }
+
+    return {
+      x: rect.left + scroll.scrollLeft - offsets.x,
+      y: rect.top + scroll.scrollTop - offsets.y,
+      width: rect.width,
+      height: rect.height
+    };
+  }
+
+  // means it doesn't take into account transforms.
+
+  function getLayoutRect(element) {
+    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+    // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+    var width = element.offsetWidth;
+    var height = element.offsetHeight;
+
+    if (Math.abs(clientRect.width - width) <= 1) {
+      width = clientRect.width;
+    }
+
+    if (Math.abs(clientRect.height - height) <= 1) {
+      height = clientRect.height;
+    }
+
+    return {
+      x: element.offsetLeft,
+      y: element.offsetTop,
+      width: width,
+      height: height
+    };
+  }
+
+  function getParentNode(element) {
+    if (getNodeName(element) === 'html') {
+      return element;
+    }
+
+    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+      // $FlowFixMe[incompatible-return]
+      // $FlowFixMe[prop-missing]
+      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+      element.parentNode || ( // DOM Element detected
+      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+      getDocumentElement(element) // fallback
+
+    );
+  }
+
+  function getScrollParent(node) {
+    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+      // $FlowFixMe[incompatible-return]: assume body is always available
+      return node.ownerDocument.body;
+    }
+
+    if (isHTMLElement(node) && isScrollParent(node)) {
+      return node;
+    }
+
+    return getScrollParent(getParentNode(node));
+  }
+
+  /*
+  given a DOM element, return the list of all scroll parents, up the list of ancesors
+  until we get to the top window object. This list is what we attach scroll listeners
+  to, because if any of these parent elements scroll, we'll need to re-calculate the
+  reference element's position.
+  */
+
+  function listScrollParents(element, list) {
+    var _element$ownerDocumen;
+
+    if (list === void 0) {
+      list = [];
+    }
+
+    var scrollParent = getScrollParent(element);
+    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+    var win = getWindow(scrollParent);
+    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+    var updatedList = list.concat(target);
+    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+    updatedList.concat(listScrollParents(getParentNode(target)));
+  }
+
+  function isTableElement(element) {
+    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+  }
+
+  function getTrueOffsetParent(element) {
+    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+    getComputedStyle(element).position === 'fixed') {
+      return null;
+    }
+
+    return element.offsetParent;
+  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
+  // return the containing block
+
+
+  function getContainingBlock(element) {
+    var isFirefox = /firefox/i.test(getUAString());
+    var isIE = /Trident/i.test(getUAString());
+
+    if (isIE && isHTMLElement(element)) {
+      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+      var elementCss = getComputedStyle(element);
+
+      if (elementCss.position === 'fixed') {
+        return null;
+      }
+    }
+
+    var currentNode = getParentNode(element);
+
+    if (isShadowRoot(currentNode)) {
+      currentNode = currentNode.host;
+    }
+
+    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+      var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+      // create a containing block.
+      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+        return currentNode;
+      } else {
+        currentNode = currentNode.parentNode;
+      }
+    }
+
+    return null;
+  } // Gets the closest ancestor positioned element. Handles some edge cases,
+  // such as table ancestors and cross browser bugs.
+
+
+  function getOffsetParent(element) {
+    var window = getWindow(element);
+    var offsetParent = getTrueOffsetParent(element);
+
+    while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+      offsetParent = getTrueOffsetParent(offsetParent);
+    }
+
+    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+      return window;
+    }
+
+    return offsetParent || getContainingBlock(element) || window;
+  }
+
+  var top = 'top';
+  var bottom = 'bottom';
+  var right = 'right';
+  var left = 'left';
+  var basePlacements = [top, bottom, right, left];
+  var start = 'start';
+  var end = 'end';
+  var clippingParents = 'clippingParents';
+  var viewport = 'viewport';
+  var popper = 'popper';
+  var reference = 'reference';
+
+  var beforeRead = 'beforeRead';
+  var read = 'read';
+  var afterRead = 'afterRead'; // pure-logic modifiers
+
+  var beforeMain = 'beforeMain';
+  var main = 'main';
+  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+  var beforeWrite = 'beforeWrite';
+  var write = 'write';
+  var afterWrite = 'afterWrite';
+  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+  function order(modifiers) {
+    var map = new Map();
+    var visited = new Set();
+    var result = [];
+    modifiers.forEach(function (modifier) {
+      map.set(modifier.name, modifier);
+    }); // On visiting object, check for its dependencies and visit them recursively
+
+    function sort(modifier) {
+      visited.add(modifier.name);
+      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+      requires.forEach(function (dep) {
+        if (!visited.has(dep)) {
+          var depModifier = map.get(dep);
+
+          if (depModifier) {
+            sort(depModifier);
+          }
+        }
+      });
+      result.push(modifier);
+    }
+
+    modifiers.forEach(function (modifier) {
+      if (!visited.has(modifier.name)) {
+        // check for visited object
+        sort(modifier);
+      }
+    });
+    return result;
+  }
+
+  function orderModifiers(modifiers) {
+    // order based on dependencies
+    var orderedModifiers = order(modifiers); // order based on phase
+
+    return modifierPhases.reduce(function (acc, phase) {
+      return acc.concat(orderedModifiers.filter(function (modifier) {
+        return modifier.phase === phase;
+      }));
+    }, []);
+  }
+
+  function debounce(fn) {
+    var pending;
+    return function () {
+      if (!pending) {
+        pending = new Promise(function (resolve) {
+          Promise.resolve().then(function () {
+            pending = undefined;
+            resolve(fn());
+          });
+        });
+      }
+
+      return pending;
+    };
+  }
+
+  function mergeByName(modifiers) {
+    var merged = modifiers.reduce(function (merged, current) {
+      var existing = merged[current.name];
+      merged[current.name] = existing ? Object.assign({}, existing, current, {
+        options: Object.assign({}, existing.options, current.options),
+        data: Object.assign({}, existing.data, current.data)
+      }) : current;
+      return merged;
+    }, {}); // IE11 does not support Object.values
+
+    return Object.keys(merged).map(function (key) {
+      return merged[key];
+    });
+  }
+
+  function getViewportRect(element, strategy) {
+    var win = getWindow(element);
+    var html = getDocumentElement(element);
+    var visualViewport = win.visualViewport;
+    var width = html.clientWidth;
+    var height = html.clientHeight;
+    var x = 0;
+    var y = 0;
+
+    if (visualViewport) {
+      width = visualViewport.width;
+      height = visualViewport.height;
+      var layoutViewport = isLayoutViewport();
+
+      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+        x = visualViewport.offsetLeft;
+        y = visualViewport.offsetTop;
+      }
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x + getWindowScrollBarX(element),
+      y: y
+    };
+  }
+
+  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+  function getDocumentRect(element) {
+    var _element$ownerDocumen;
+
+    var html = getDocumentElement(element);
+    var winScroll = getWindowScroll(element);
+    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+    var y = -winScroll.scrollTop;
+
+    if (getComputedStyle(body || html).direction === 'rtl') {
+      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x,
+      y: y
+    };
+  }
+
+  function contains(parent, child) {
+    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+    if (parent.contains(child)) {
+      return true;
+    } // then fallback to custom implementation with Shadow DOM support
+    else if (rootNode && isShadowRoot(rootNode)) {
+        var next = child;
+
+        do {
+          if (next && parent.isSameNode(next)) {
+            return true;
+          } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+          next = next.parentNode || next.host;
+        } while (next);
+      } // Give up, the result is false
+
+
+    return false;
+  }
+
+  function rectToClientRect(rect) {
+    return Object.assign({}, rect, {
+      left: rect.x,
+      top: rect.y,
+      right: rect.x + rect.width,
+      bottom: rect.y + rect.height
+    });
+  }
+
+  function getInnerBoundingClientRect(element, strategy) {
+    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+    rect.top = rect.top + element.clientTop;
+    rect.left = rect.left + element.clientLeft;
+    rect.bottom = rect.top + element.clientHeight;
+    rect.right = rect.left + element.clientWidth;
+    rect.width = element.clientWidth;
+    rect.height = element.clientHeight;
+    rect.x = rect.left;
+    rect.y = rect.top;
+    return rect;
+  }
+
+  function getClientRectFromMixedType(element, clippingParent, strategy) {
+    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+  } // A "clipping parent" is an overflowable container with the characteristic of
+  // clipping (or hiding) overflowing elements with a position different from
+  // `initial`
+
+
+  function getClippingParents(element) {
+    var clippingParents = listScrollParents(getParentNode(element));
+    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+    if (!isElement(clipperElement)) {
+      return [];
+    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+    return clippingParents.filter(function (clippingParent) {
+      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+    });
+  } // Gets the maximum area that the element is visible in due to any number of
+  // clipping parents
+
+
+  function getClippingRect(element, boundary, rootBoundary, strategy) {
+    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+    var firstClippingParent = clippingParents[0];
+    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+      accRect.top = max(rect.top, accRect.top);
+      accRect.right = min(rect.right, accRect.right);
+      accRect.bottom = min(rect.bottom, accRect.bottom);
+      accRect.left = max(rect.left, accRect.left);
+      return accRect;
+    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+    clippingRect.width = clippingRect.right - clippingRect.left;
+    clippingRect.height = clippingRect.bottom - clippingRect.top;
+    clippingRect.x = clippingRect.left;
+    clippingRect.y = clippingRect.top;
+    return clippingRect;
+  }
+
+  function getBasePlacement(placement) {
+    return placement.split('-')[0];
+  }
+
+  function getVariation(placement) {
+    return placement.split('-')[1];
+  }
+
+  function getMainAxisFromPlacement(placement) {
+    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+  }
+
+  function computeOffsets(_ref) {
+    var reference = _ref.reference,
+        element = _ref.element,
+        placement = _ref.placement;
+    var basePlacement = placement ? getBasePlacement(placement) : null;
+    var variation = placement ? getVariation(placement) : null;
+    var commonX = reference.x + reference.width / 2 - element.width / 2;
+    var commonY = reference.y + reference.height / 2 - element.height / 2;
+    var offsets;
+
+    switch (basePlacement) {
+      case top:
+        offsets = {
+          x: commonX,
+          y: reference.y - element.height
+        };
+        break;
+
+      case bottom:
+        offsets = {
+          x: commonX,
+          y: reference.y + reference.height
+        };
+        break;
+
+      case right:
+        offsets = {
+          x: reference.x + reference.width,
+          y: commonY
+        };
+        break;
+
+      case left:
+        offsets = {
+          x: reference.x - element.width,
+          y: commonY
+        };
+        break;
+
+      default:
+        offsets = {
+          x: reference.x,
+          y: reference.y
+        };
+    }
+
+    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+    if (mainAxis != null) {
+      var len = mainAxis === 'y' ? 'height' : 'width';
+
+      switch (variation) {
+        case start:
+          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+          break;
+
+        case end:
+          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+          break;
+      }
+    }
+
+    return offsets;
+  }
+
+  function getFreshSideObject() {
+    return {
+      top: 0,
+      right: 0,
+      bottom: 0,
+      left: 0
+    };
+  }
+
+  function mergePaddingObject(paddingObject) {
+    return Object.assign({}, getFreshSideObject(), paddingObject);
+  }
+
+  function expandToHashMap(value, keys) {
+    return keys.reduce(function (hashMap, key) {
+      hashMap[key] = value;
+      return hashMap;
+    }, {});
+  }
+
+  function detectOverflow(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        _options$placement = _options.placement,
+        placement = _options$placement === void 0 ? state.placement : _options$placement,
+        _options$strategy = _options.strategy,
+        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+        _options$boundary = _options.boundary,
+        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+        _options$rootBoundary = _options.rootBoundary,
+        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+        _options$elementConte = _options.elementContext,
+        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+        _options$altBoundary = _options.altBoundary,
+        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+        _options$padding = _options.padding,
+        padding = _options$padding === void 0 ? 0 : _options$padding;
+    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+    var altContext = elementContext === popper ? reference : popper;
+    var popperRect = state.rects.popper;
+    var element = state.elements[altBoundary ? altContext : elementContext];
+    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+    var referenceClientRect = getBoundingClientRect(state.elements.reference);
+    var popperOffsets = computeOffsets({
+      reference: referenceClientRect,
+      element: popperRect,
+      strategy: 'absolute',
+      placement: placement
+    });
+    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+    // 0 or negative = within the clipping rect
+
+    var overflowOffsets = {
+      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+    };
+    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+    if (elementContext === popper && offsetData) {
+      var offset = offsetData[placement];
+      Object.keys(overflowOffsets).forEach(function (key) {
+        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+        overflowOffsets[key] += offset[axis] * multiply;
+      });
+    }
+
+    return overflowOffsets;
+  }
+
+  var DEFAULT_OPTIONS = {
+    placement: 'bottom',
+    modifiers: [],
+    strategy: 'absolute'
+  };
+
+  function areValidElements() {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return !args.some(function (element) {
+      return !(element && typeof element.getBoundingClientRect === 'function');
+    });
+  }
+
+  function popperGenerator(generatorOptions) {
+    if (generatorOptions === void 0) {
+      generatorOptions = {};
+    }
+
+    var _generatorOptions = generatorOptions,
+        _generatorOptions$def = _generatorOptions.defaultModifiers,
+        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+        _generatorOptions$def2 = _generatorOptions.defaultOptions,
+        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+    return function createPopper(reference, popper, options) {
+      if (options === void 0) {
+        options = defaultOptions;
+      }
+
+      var state = {
+        placement: 'bottom',
+        orderedModifiers: [],
+        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+        modifiersData: {},
+        elements: {
+          reference: reference,
+          popper: popper
+        },
+        attributes: {},
+        styles: {}
+      };
+      var effectCleanupFns = [];
+      var isDestroyed = false;
+      var instance = {
+        state: state,
+        setOptions: function setOptions(setOptionsAction) {
+          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+          cleanupModifierEffects();
+          state.options = Object.assign({}, defaultOptions, state.options, options);
+          state.scrollParents = {
+            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+            popper: listScrollParents(popper)
+          }; // Orders the modifiers based on their dependencies and `phase`
+          // properties
+
+          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+          state.orderedModifiers = orderedModifiers.filter(function (m) {
+            return m.enabled;
+          });
+          runModifierEffects();
+          return instance.update();
+        },
+        // Sync update – it will always be executed, even if not necessary. This
+        // is useful for low frequency updates where sync behavior simplifies the
+        // logic.
+        // For high frequency updates (e.g. `resize` and `scroll` events), always
+        // prefer the async Popper#update method
+        forceUpdate: function forceUpdate() {
+          if (isDestroyed) {
+            return;
+          }
+
+          var _state$elements = state.elements,
+              reference = _state$elements.reference,
+              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+          // anymore
+
+          if (!areValidElements(reference, popper)) {
+            return;
+          } // Store the reference and popper rects to be read by modifiers
+
+
+          state.rects = {
+            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+            popper: getLayoutRect(popper)
+          }; // Modifiers have the ability to reset the current update cycle. The
+          // most common use case for this is the `flip` modifier changing the
+          // placement, which then needs to re-run all the modifiers, because the
+          // logic was previously ran for the previous placement and is therefore
+          // stale/incorrect
+
+          state.reset = false;
+          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+          // is filled with the initial data specified by the modifier. This means
+          // it doesn't persist and is fresh on each update.
+          // To ensure persistent data, use `${name}#persistent`
+
+          state.orderedModifiers.forEach(function (modifier) {
+            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+          });
+
+          for (var index = 0; index < state.orderedModifiers.length; index++) {
+            if (state.reset === true) {
+              state.reset = false;
+              index = -1;
+              continue;
+            }
+
+            var _state$orderedModifie = state.orderedModifiers[index],
+                fn = _state$orderedModifie.fn,
+                _state$orderedModifie2 = _state$orderedModifie.options,
+                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+                name = _state$orderedModifie.name;
+
+            if (typeof fn === 'function') {
+              state = fn({
+                state: state,
+                options: _options,
+                name: name,
+                instance: instance
+              }) || state;
+            }
+          }
+        },
+        // Async and optimistically optimized update – it will not be executed if
+        // not necessary (debounced to run at most once-per-tick)
+        update: debounce(function () {
+          return new Promise(function (resolve) {
+            instance.forceUpdate();
+            resolve(state);
+          });
+        }),
+        destroy: function destroy() {
+          cleanupModifierEffects();
+          isDestroyed = true;
+        }
+      };
+
+      if (!areValidElements(reference, popper)) {
+        return instance;
+      }
+
+      instance.setOptions(options).then(function (state) {
+        if (!isDestroyed && options.onFirstUpdate) {
+          options.onFirstUpdate(state);
+        }
+      }); // Modifiers have the ability to execute arbitrary code before the first
+      // update cycle runs. They will be executed in the same order as the update
+      // cycle. This is useful when a modifier adds some persistent data that
+      // other modifiers need to use, but the modifier is run after the dependent
+      // one.
+
+      function runModifierEffects() {
+        state.orderedModifiers.forEach(function (_ref) {
+          var name = _ref.name,
+              _ref$options = _ref.options,
+              options = _ref$options === void 0 ? {} : _ref$options,
+              effect = _ref.effect;
+
+          if (typeof effect === 'function') {
+            var cleanupFn = effect({
+              state: state,
+              name: name,
+              instance: instance,
+              options: options
+            });
+
+            var noopFn = function noopFn() {};
+
+            effectCleanupFns.push(cleanupFn || noopFn);
+          }
+        });
+      }
+
+      function cleanupModifierEffects() {
+        effectCleanupFns.forEach(function (fn) {
+          return fn();
+        });
+        effectCleanupFns = [];
+      }
+
+      return instance;
+    };
+  }
+
+  var passive = {
+    passive: true
+  };
+
+  function effect$1(_ref) {
+    var state = _ref.state,
+        instance = _ref.instance,
+        options = _ref.options;
+    var _options$scroll = options.scroll,
+        scroll = _options$scroll === void 0 ? true : _options$scroll,
+        _options$resize = options.resize,
+        resize = _options$resize === void 0 ? true : _options$resize;
+    var window = getWindow(state.elements.popper);
+    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.addEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.addEventListener('resize', instance.update, passive);
+    }
+
+    return function () {
+      if (scroll) {
+        scrollParents.forEach(function (scrollParent) {
+          scrollParent.removeEventListener('scroll', instance.update, passive);
+        });
+      }
+
+      if (resize) {
+        window.removeEventListener('resize', instance.update, passive);
+      }
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var eventListeners = {
+    name: 'eventListeners',
+    enabled: true,
+    phase: 'write',
+    fn: function fn() {},
+    effect: effect$1,
+    data: {}
+  };
+
+  function popperOffsets(_ref) {
+    var state = _ref.state,
+        name = _ref.name;
+    // Offsets are the actual position the popper needs to have to be
+    // properly positioned near its reference element
+    // This is the most basic placement, and will be adjusted by
+    // the modifiers in the next step
+    state.modifiersData[name] = computeOffsets({
+      reference: state.rects.reference,
+      element: state.rects.popper,
+      strategy: 'absolute',
+      placement: state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var popperOffsets$1 = {
+    name: 'popperOffsets',
+    enabled: true,
+    phase: 'read',
+    fn: popperOffsets,
+    data: {}
+  };
+
+  var unsetSides = {
+    top: 'auto',
+    right: 'auto',
+    bottom: 'auto',
+    left: 'auto'
+  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
+  // Zooming can change the DPR, but it seems to report a value that will
+  // cleanly divide the values into the appropriate subpixels.
+
+  function roundOffsetsByDPR(_ref, win) {
+    var x = _ref.x,
+        y = _ref.y;
+    var dpr = win.devicePixelRatio || 1;
+    return {
+      x: round(x * dpr) / dpr || 0,
+      y: round(y * dpr) / dpr || 0
+    };
+  }
+
+  function mapToStyles(_ref2) {
+    var _Object$assign2;
+
+    var popper = _ref2.popper,
+        popperRect = _ref2.popperRect,
+        placement = _ref2.placement,
+        variation = _ref2.variation,
+        offsets = _ref2.offsets,
+        position = _ref2.position,
+        gpuAcceleration = _ref2.gpuAcceleration,
+        adaptive = _ref2.adaptive,
+        roundOffsets = _ref2.roundOffsets,
+        isFixed = _ref2.isFixed;
+    var _offsets$x = offsets.x,
+        x = _offsets$x === void 0 ? 0 : _offsets$x,
+        _offsets$y = offsets.y,
+        y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+      x: x,
+      y: y
+    }) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref3.x;
+    y = _ref3.y;
+    var hasX = offsets.hasOwnProperty('x');
+    var hasY = offsets.hasOwnProperty('y');
+    var sideX = left;
+    var sideY = top;
+    var win = window;
+
+    if (adaptive) {
+      var offsetParent = getOffsetParent(popper);
+      var heightProp = 'clientHeight';
+      var widthProp = 'clientWidth';
+
+      if (offsetParent === getWindow(popper)) {
+        offsetParent = getDocumentElement(popper);
+
+        if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+          heightProp = 'scrollHeight';
+          widthProp = 'scrollWidth';
+        }
+      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+      offsetParent = offsetParent;
+
+      if (placement === top || (placement === left || placement === right) && variation === end) {
+        sideY = bottom;
+        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+        offsetParent[heightProp];
+        y -= offsetY - popperRect.height;
+        y *= gpuAcceleration ? 1 : -1;
+      }
+
+      if (placement === left || (placement === top || placement === bottom) && variation === end) {
+        sideX = right;
+        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+        offsetParent[widthProp];
+        x -= offsetX - popperRect.width;
+        x *= gpuAcceleration ? 1 : -1;
+      }
+    }
+
+    var commonStyles = Object.assign({
+      position: position
+    }, adaptive && unsetSides);
+
+    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+      x: x,
+      y: y
+    }, getWindow(popper)) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref4.x;
+    y = _ref4.y;
+
+    if (gpuAcceleration) {
+      var _Object$assign;
+
+      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+    }
+
+    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+  }
+
+  function computeStyles(_ref5) {
+    var state = _ref5.state,
+        options = _ref5.options;
+    var _options$gpuAccelerat = options.gpuAcceleration,
+        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+        _options$adaptive = options.adaptive,
+        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+        _options$roundOffsets = options.roundOffsets,
+        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+    var commonStyles = {
+      placement: getBasePlacement(state.placement),
+      variation: getVariation(state.placement),
+      popper: state.elements.popper,
+      popperRect: state.rects.popper,
+      gpuAcceleration: gpuAcceleration,
+      isFixed: state.options.strategy === 'fixed'
+    };
+
+    if (state.modifiersData.popperOffsets != null) {
+      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.popperOffsets,
+        position: state.options.strategy,
+        adaptive: adaptive,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    if (state.modifiersData.arrow != null) {
+      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.arrow,
+        position: 'absolute',
+        adaptive: false,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    state.attributes.popper = Object.assign({}, state.attributes.popper, {
+      'data-popper-placement': state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var computeStyles$1 = {
+    name: 'computeStyles',
+    enabled: true,
+    phase: 'beforeWrite',
+    fn: computeStyles,
+    data: {}
+  };
+
+  // and applies them to the HTMLElements such as popper and arrow
+
+  function applyStyles(_ref) {
+    var state = _ref.state;
+    Object.keys(state.elements).forEach(function (name) {
+      var style = state.styles[name] || {};
+      var attributes = state.attributes[name] || {};
+      var element = state.elements[name]; // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      } // Flow doesn't support to extend this property, but it's the most
+      // effective way to apply styles to an HTMLElement
+      // $FlowFixMe[cannot-write]
+
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (name) {
+        var value = attributes[name];
+
+        if (value === false) {
+          element.removeAttribute(name);
+        } else {
+          element.setAttribute(name, value === true ? '' : value);
+        }
+      });
+    });
+  }
+
+  function effect(_ref2) {
+    var state = _ref2.state;
+    var initialStyles = {
+      popper: {
+        position: state.options.strategy,
+        left: '0',
+        top: '0',
+        margin: '0'
+      },
+      arrow: {
+        position: 'absolute'
+      },
+      reference: {}
+    };
+    Object.assign(state.elements.popper.style, initialStyles.popper);
+    state.styles = initialStyles;
+
+    if (state.elements.arrow) {
+      Object.assign(state.elements.arrow.style, initialStyles.arrow);
+    }
+
+    return function () {
+      Object.keys(state.elements).forEach(function (name) {
+        var element = state.elements[name];
+        var attributes = state.attributes[name] || {};
+        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+        var style = styleProperties.reduce(function (style, property) {
+          style[property] = '';
+          return style;
+        }, {}); // arrow is optional + virtual elements
+
+        if (!isHTMLElement(element) || !getNodeName(element)) {
+          return;
+        }
+
+        Object.assign(element.style, style);
+        Object.keys(attributes).forEach(function (attribute) {
+          element.removeAttribute(attribute);
+        });
+      });
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var applyStyles$1 = {
+    name: 'applyStyles',
+    enabled: true,
+    phase: 'write',
+    fn: applyStyles,
+    effect: effect,
+    requires: ['computeStyles']
+  };
+
+  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
+  var createPopper = /*#__PURE__*/popperGenerator({
+    defaultModifiers: defaultModifiers
+  }); // eslint-disable-next-line import/no-unused-modules
+
+  exports.createPopper = createPopper;
+  exports.defaultModifiers = defaultModifiers;
+  exports.detectOverflow = detectOverflow;
+  exports.popperGenerator = popperGenerator;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=popper-lite.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper-lite.js.map b/node_modules/@popperjs/core/dist/umd/popper-lite.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..c0dc83084b18f945eede6a3020fa75089ac51e18
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-lite.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-lite.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js","../../src/modifiers/eventListeners.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/computeStyles.js","../../src/modifiers/applyStyles.js","../../src/popper-lite.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","basePlacements","start","end","clippingParents","viewport","popper","reference","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","reduce","acc","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","placement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn","passive","resize","addEventListener","removeEventListener","unsetSides","roundOffsetsByDPR","dpr","devicePixelRatio","mapToStyles","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","computeStyles","arrow","applyStyles","style","assign","removeAttribute","setAttribute","initialStyles","margin","styleProperties","property","attribute","eventListeners"],"mappings":";;;;;;;;;;EAIe,SAASA,SAAT,CAAmBC,IAAnB,EAAyB;EACtC,MAAIA,IAAI,IAAI,IAAZ,EAAkB;EAChB,WAAOC,MAAP;EACD;;EAED,MAAID,IAAI,CAACE,QAAL,OAAoB,iBAAxB,EAA2C;EACzC,QAAMC,aAAa,GAAGH,IAAI,CAACG,aAA3B;EACA,WAAOA,aAAa,GAAGA,aAAa,CAACC,WAAd,IAA6BH,MAAhC,GAAyCA,MAA7D;EACD;;EAED,SAAOD,IAAP;EACD;;ECVD,SAASK,SAAT,CAAmBL,IAAnB,EAAyB;EACvB,MAAMM,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBO,OAAnC;EACA,SAAOP,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYO,OAArD;EACD;;EAID,SAASC,aAAT,CAAuBR,IAAvB,EAA6B;EAC3B,MAAMM,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBS,WAAnC;EACA,SAAOT,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYS,WAArD;EACD;;EAID,SAASC,YAAT,CAAsBV,IAAtB,EAA4B;EAC1B;EACA,MAAI,OAAOW,UAAP,KAAsB,WAA1B,EAAuC;EACrC,WAAO,KAAP;EACD;;EACD,MAAML,UAAU,GAAGP,SAAS,CAACC,IAAD,CAAT,CAAgBW,UAAnC;EACA,SAAOX,IAAI,YAAYM,UAAhB,IAA8BN,IAAI,YAAYW,UAArD;EACD;;ECzBM,IAAMC,GAAG,GAAGC,IAAI,CAACD,GAAjB;EACA,IAAME,GAAG,GAAGD,IAAI,CAACC,GAAjB;EACA,IAAMC,KAAK,GAAGF,IAAI,CAACE,KAAnB;;ECMQ,SAASC,WAAT,GAA+B;EAC5C,MAAMC,MAAM,GAAIC,SAAD,CAAuBC,aAAtC;;EAEA,MAAIF,MAAM,QAAN,IAAAA,MAAM,CAAEG,MAAR,IAAkBC,KAAK,CAACC,OAAN,CAAcL,MAAM,CAACG,MAArB,CAAtB,EAAoD;EAClD,WAAOH,MAAM,CAACG,MAAP,CACJG,GADI,CACA,UAACC,IAAD;EAAA,aAAaA,IAAI,CAACC,KAAlB,SAA2BD,IAAI,CAACE,OAAhC;EAAA,KADA,EAEJC,IAFI,CAEC,GAFD,CAAP;EAGD;;EAED,SAAOT,SAAS,CAACU,SAAjB;EACD;;EChBc,SAASC,gBAAT,GAA4B;EACzC,SAAO,CAAC,iCAAiCC,IAAjC,CAAsCd,WAAW,EAAjD,CAAR;EACD;;ECEc,SAASe,qBAAT,CACbC,OADa,EAEbC,YAFa,EAGbC,eAHa,EAIK;EAAA,MAFlBD,YAEkB;EAFlBA,IAAAA,YAEkB,GAFM,KAEN;EAAA;;EAAA,MADlBC,eACkB;EADlBA,IAAAA,eACkB,GADS,KACT;EAAA;;EAClB,MAAMC,UAAU,GAAGH,OAAO,CAACD,qBAAR,EAAnB;EACA,MAAIK,MAAM,GAAG,CAAb;EACA,MAAIC,MAAM,GAAG,CAAb;;EAEA,MAAIJ,YAAY,IAAIzB,aAAa,CAACwB,OAAD,CAAjC,EAA4C;EAC1CI,IAAAA,MAAM,GACHJ,OAAD,CAAuBM,WAAvB,GAAqC,CAArC,GACIvB,KAAK,CAACoB,UAAU,CAACI,KAAZ,CAAL,GAA2BP,OAAD,CAAuBM,WAAjD,IAAgE,CADpE,GAEI,CAHN;EAIAD,IAAAA,MAAM,GACHL,OAAD,CAAuBQ,YAAvB,GAAsC,CAAtC,GACIzB,KAAK,CAACoB,UAAU,CAACM,MAAZ,CAAL,GAA4BT,OAAD,CAAuBQ,YAAlD,IAAkE,CADtE,GAEI,CAHN;EAID;;EAdiB,aAgBSnC,SAAS,CAAC2B,OAAD,CAAT,GAAqBjC,SAAS,CAACiC,OAAD,CAA9B,GAA0C/B,MAhBnD;EAAA,MAgBVyC,cAhBU,QAgBVA,cAhBU;;EAiBlB,MAAMC,gBAAgB,GAAG,CAACd,gBAAgB,EAAjB,IAAuBK,eAAhD;EAEA,MAAMU,CAAC,GACL,CAACT,UAAU,CAACU,IAAX,IACEF,gBAAgB,IAAID,cAApB,GAAqCA,cAAc,CAACI,UAApD,GAAiE,CADnE,CAAD,IAEAV,MAHF;EAIA,MAAMW,CAAC,GACL,CAACZ,UAAU,CAACa,GAAX,IACEL,gBAAgB,IAAID,cAApB,GAAqCA,cAAc,CAACO,SAApD,GAAgE,CADlE,CAAD,IAEAZ,MAHF;EAIA,MAAME,KAAK,GAAGJ,UAAU,CAACI,KAAX,GAAmBH,MAAjC;EACA,MAAMK,MAAM,GAAGN,UAAU,CAACM,MAAX,GAAoBJ,MAAnC;EAEA,SAAO;EACLE,IAAAA,KAAK,EAALA,KADK;EAELE,IAAAA,MAAM,EAANA,MAFK;EAGLO,IAAAA,GAAG,EAAED,CAHA;EAILG,IAAAA,KAAK,EAAEN,CAAC,GAAGL,KAJN;EAKLY,IAAAA,MAAM,EAAEJ,CAAC,GAAGN,MALP;EAMLI,IAAAA,IAAI,EAAED,CAND;EAOLA,IAAAA,CAAC,EAADA,CAPK;EAQLG,IAAAA,CAAC,EAADA;EARK,GAAP;EAUD;;EC/Cc,SAASK,eAAT,CAAyBpD,IAAzB,EAA8C;EAC3D,MAAMqD,GAAG,GAAGtD,SAAS,CAACC,IAAD,CAArB;EACA,MAAMsD,UAAU,GAAGD,GAAG,CAACE,WAAvB;EACA,MAAMC,SAAS,GAAGH,GAAG,CAACI,WAAtB;EAEA,SAAO;EACLH,IAAAA,UAAU,EAAVA,UADK;EAELE,IAAAA,SAAS,EAATA;EAFK,GAAP;EAID;;ECXc,SAASE,oBAAT,CAA8B1B,OAA9B,EAAoD;EACjE,SAAO;EACLsB,IAAAA,UAAU,EAAEtB,OAAO,CAACsB,UADf;EAELE,IAAAA,SAAS,EAAExB,OAAO,CAACwB;EAFd,GAAP;EAID;;ECAc,SAASG,aAAT,CAAuB3D,IAAvB,EAA4C;EACzD,MAAIA,IAAI,KAAKD,SAAS,CAACC,IAAD,CAAlB,IAA4B,CAACQ,aAAa,CAACR,IAAD,CAA9C,EAAsD;EACpD,WAAOoD,eAAe,CAACpD,IAAD,CAAtB;EACD,GAFD,MAEO;EACL,WAAO0D,oBAAoB,CAAC1D,IAAD,CAA3B;EACD;EACF;;ECVc,SAAS4D,WAAT,CAAqB5B,OAArB,EAAuD;EACpE,SAAOA,OAAO,GAAG,CAACA,OAAO,CAAC6B,QAAR,IAAoB,EAArB,EAAyBC,WAAzB,EAAH,GAA4C,IAA1D;EACD;;ECDc,SAASC,kBAAT,CACb/B,OADa,EAEA;EACb;EACA,SAAO,CACL,CAAC3B,SAAS,CAAC2B,OAAD,CAAT,GACGA,OAAO,CAAC7B,aADX;EAGG6B,EAAAA,OAAO,CAACgC,QAHZ,KAGyB/D,MAAM,CAAC+D,QAJ3B,EAKLC,eALF;EAMD;;ECTc,SAASC,mBAAT,CAA6BlC,OAA7B,EAAuD;EACpE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SACED,qBAAqB,CAACgC,kBAAkB,CAAC/B,OAAD,CAAnB,CAArB,CAAmDa,IAAnD,GACAO,eAAe,CAACpB,OAAD,CAAf,CAAyBsB,UAF3B;EAID;;ECdc,SAASa,gBAAT,CACbnC,OADa,EAEQ;EACrB,SAAOjC,SAAS,CAACiC,OAAD,CAAT,CAAmBmC,gBAAnB,CAAoCnC,OAApC,CAAP;EACD;;ECJc,SAASoC,cAAT,CAAwBpC,OAAxB,EAAuD;EACpE;EADoE,0BAEzBmC,gBAAgB,CAACnC,OAAD,CAFS;EAAA,MAE5DqC,QAF4D,qBAE5DA,QAF4D;EAAA,MAElDC,SAFkD,qBAElDA,SAFkD;EAAA,MAEvCC,SAFuC,qBAEvCA,SAFuC;;EAGpE,SAAO,6BAA6BzC,IAA7B,CAAkCuC,QAAQ,GAAGE,SAAX,GAAuBD,SAAzD,CAAP;EACD;;ECID,SAASE,eAAT,CAAyBxC,OAAzB,EAA+C;EAC7C,MAAMyC,IAAI,GAAGzC,OAAO,CAACD,qBAAR,EAAb;EACA,MAAMK,MAAM,GAAGrB,KAAK,CAAC0D,IAAI,CAAClC,KAAN,CAAL,GAAoBP,OAAO,CAACM,WAA5B,IAA2C,CAA1D;EACA,MAAMD,MAAM,GAAGtB,KAAK,CAAC0D,IAAI,CAAChC,MAAN,CAAL,GAAqBT,OAAO,CAACQ,YAA7B,IAA6C,CAA5D;EAEA,SAAOJ,MAAM,KAAK,CAAX,IAAgBC,MAAM,KAAK,CAAlC;EACD;EAGD;;;EACe,SAASqC,gBAAT,CACbC,uBADa,EAEbC,YAFa,EAGbC,OAHa,EAIP;EAAA,MADNA,OACM;EADNA,IAAAA,OACM,GADa,KACb;EAAA;;EACN,MAAMC,uBAAuB,GAAGtE,aAAa,CAACoE,YAAD,CAA7C;EACA,MAAMG,oBAAoB,GACxBvE,aAAa,CAACoE,YAAD,CAAb,IAA+BJ,eAAe,CAACI,YAAD,CADhD;EAEA,MAAMX,eAAe,GAAGF,kBAAkB,CAACa,YAAD,CAA1C;EACA,MAAMH,IAAI,GAAG1C,qBAAqB,CAChC4C,uBADgC,EAEhCI,oBAFgC,EAGhCF,OAHgC,CAAlC;EAMA,MAAIG,MAAM,GAAG;EAAE1B,IAAAA,UAAU,EAAE,CAAd;EAAiBE,IAAAA,SAAS,EAAE;EAA5B,GAAb;EACA,MAAIyB,OAAO,GAAG;EAAErC,IAAAA,CAAC,EAAE,CAAL;EAAQG,IAAAA,CAAC,EAAE;EAAX,GAAd;;EAEA,MAAI+B,uBAAuB,IAAK,CAACA,uBAAD,IAA4B,CAACD,OAA7D,EAAuE;EACrE,QACEjB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B;EAEAR,IAAAA,cAAc,CAACH,eAAD,CAHhB,EAIE;EACAe,MAAAA,MAAM,GAAGrB,aAAa,CAACiB,YAAD,CAAtB;EACD;;EAED,QAAIpE,aAAa,CAACoE,YAAD,CAAjB,EAAiC;EAC/BK,MAAAA,OAAO,GAAGlD,qBAAqB,CAAC6C,YAAD,EAAe,IAAf,CAA/B;EACAK,MAAAA,OAAO,CAACrC,CAAR,IAAagC,YAAY,CAACM,UAA1B;EACAD,MAAAA,OAAO,CAAClC,CAAR,IAAa6B,YAAY,CAACO,SAA1B;EACD,KAJD,MAIO,IAAIlB,eAAJ,EAAqB;EAC1BgB,MAAAA,OAAO,CAACrC,CAAR,GAAYsB,mBAAmB,CAACD,eAAD,CAA/B;EACD;EACF;;EAED,SAAO;EACLrB,IAAAA,CAAC,EAAE6B,IAAI,CAAC5B,IAAL,GAAYmC,MAAM,CAAC1B,UAAnB,GAAgC2B,OAAO,CAACrC,CADtC;EAELG,IAAAA,CAAC,EAAE0B,IAAI,CAACzB,GAAL,GAAWgC,MAAM,CAACxB,SAAlB,GAA8ByB,OAAO,CAAClC,CAFpC;EAGLR,IAAAA,KAAK,EAAEkC,IAAI,CAAClC,KAHP;EAILE,IAAAA,MAAM,EAAEgC,IAAI,CAAChC;EAJR,GAAP;EAMD;;EC1DD;;EACe,SAAS2C,aAAT,CAAuBpD,OAAvB,EAAmD;EAChE,MAAMG,UAAU,GAAGJ,qBAAqB,CAACC,OAAD,CAAxC,CADgE;EAIhE;;EACA,MAAIO,KAAK,GAAGP,OAAO,CAACM,WAApB;EACA,MAAIG,MAAM,GAAGT,OAAO,CAACQ,YAArB;;EAEA,MAAI3B,IAAI,CAACwE,GAAL,CAASlD,UAAU,CAACI,KAAX,GAAmBA,KAA5B,KAAsC,CAA1C,EAA6C;EAC3CA,IAAAA,KAAK,GAAGJ,UAAU,CAACI,KAAnB;EACD;;EAED,MAAI1B,IAAI,CAACwE,GAAL,CAASlD,UAAU,CAACM,MAAX,GAAoBA,MAA7B,KAAwC,CAA5C,EAA+C;EAC7CA,IAAAA,MAAM,GAAGN,UAAU,CAACM,MAApB;EACD;;EAED,SAAO;EACLG,IAAAA,CAAC,EAAEZ,OAAO,CAACc,UADN;EAELC,IAAAA,CAAC,EAAEf,OAAO,CAACiB,SAFN;EAGLV,IAAAA,KAAK,EAALA,KAHK;EAILE,IAAAA,MAAM,EAANA;EAJK,GAAP;EAMD;;ECvBc,SAAS6C,aAAT,CAAuBtD,OAAvB,EAAyD;EACtE,MAAI4B,WAAW,CAAC5B,OAAD,CAAX,KAAyB,MAA7B,EAAqC;EACnC,WAAOA,OAAP;EACD;;EAED;EAEE;EACA;EACAA,IAAAA,OAAO,CAACuD,YAAR;EACAvD,IAAAA,OAAO,CAACwD,UADR;EAEC9E,IAAAA,YAAY,CAACsB,OAAD,CAAZ,GAAwBA,OAAO,CAACyD,IAAhC,GAAuC,IAFxC;EAGA;EACA1B,IAAAA,kBAAkB,CAAC/B,OAAD,CARpB;;EAAA;EAUD;;ECdc,SAAS0D,eAAT,CAAyB1F,IAAzB,EAAkD;EAC/D,MAAI,CAAC,MAAD,EAAS,MAAT,EAAiB,WAAjB,EAA8B2F,OAA9B,CAAsC/B,WAAW,CAAC5D,IAAD,CAAjD,KAA4D,CAAhE,EAAmE;EACjE;EACA,WAAOA,IAAI,CAACG,aAAL,CAAmByF,IAA1B;EACD;;EAED,MAAIpF,aAAa,CAACR,IAAD,CAAb,IAAuBoE,cAAc,CAACpE,IAAD,CAAzC,EAAiD;EAC/C,WAAOA,IAAP;EACD;;EAED,SAAO0F,eAAe,CAACJ,aAAa,CAACtF,IAAD,CAAd,CAAtB;EACD;;ECVD;EACA;EACA;EACA;EACA;EACA;;EACe,SAAS6F,iBAAT,CACb7D,OADa,EAEb8D,IAFa,EAG6B;EAAA;;EAAA,MAD1CA,IAC0C;EAD1CA,IAAAA,IAC0C,GADV,EACU;EAAA;;EAC1C,MAAMC,YAAY,GAAGL,eAAe,CAAC1D,OAAD,CAApC;EACA,MAAMgE,MAAM,GAAGD,YAAY,+BAAK/D,OAAO,CAAC7B,aAAb,qBAAK,sBAAuByF,IAA5B,CAA3B;EACA,MAAMvC,GAAG,GAAGtD,SAAS,CAACgG,YAAD,CAArB;EACA,MAAME,MAAM,GAAGD,MAAM,GACjB,CAAC3C,GAAD,EAAM6C,MAAN,CACE7C,GAAG,CAACX,cAAJ,IAAsB,EADxB,EAEE0B,cAAc,CAAC2B,YAAD,CAAd,GAA+BA,YAA/B,GAA8C,EAFhD,CADiB,GAKjBA,YALJ;EAMA,MAAMI,WAAW,GAAGL,IAAI,CAACI,MAAL,CAAYD,MAAZ,CAApB;EAEA,SAAOD,MAAM,GACTG,WADS;EAGTA,EAAAA,WAAW,CAACD,MAAZ,CAAmBL,iBAAiB,CAACP,aAAa,CAACW,MAAD,CAAd,CAApC,CAHJ;EAID;;EC7Bc,SAASG,cAAT,CAAwBpE,OAAxB,EAAmD;EAChE,SAAO,CAAC,OAAD,EAAU,IAAV,EAAgB,IAAhB,EAAsB2D,OAAtB,CAA8B/B,WAAW,CAAC5B,OAAD,CAAzC,KAAuD,CAA9D;EACD;;ECID,SAASqE,mBAAT,CAA6BrE,OAA7B,EAAyD;EACvD,MACE,CAACxB,aAAa,CAACwB,OAAD,CAAd;EAEAmC,EAAAA,gBAAgB,CAACnC,OAAD,CAAhB,CAA0BsE,QAA1B,KAAuC,OAHzC,EAIE;EACA,WAAO,IAAP;EACD;;EAED,SAAOtE,OAAO,CAAC4C,YAAf;EACD;EAGD;;;EACA,SAAS2B,kBAAT,CAA4BvE,OAA5B,EAA8C;EAC5C,MAAMwE,SAAS,GAAG,WAAW1E,IAAX,CAAgBd,WAAW,EAA3B,CAAlB;EACA,MAAMyF,IAAI,GAAG,WAAW3E,IAAX,CAAgBd,WAAW,EAA3B,CAAb;;EAEA,MAAIyF,IAAI,IAAIjG,aAAa,CAACwB,OAAD,CAAzB,EAAoC;EAClC;EACA,QAAM0E,UAAU,GAAGvC,gBAAgB,CAACnC,OAAD,CAAnC;;EACA,QAAI0E,UAAU,CAACJ,QAAX,KAAwB,OAA5B,EAAqC;EACnC,aAAO,IAAP;EACD;EACF;;EAED,MAAIK,WAAW,GAAGrB,aAAa,CAACtD,OAAD,CAA/B;;EAEA,MAAItB,YAAY,CAACiG,WAAD,CAAhB,EAA+B;EAC7BA,IAAAA,WAAW,GAAGA,WAAW,CAAClB,IAA1B;EACD;;EAED,SACEjF,aAAa,CAACmG,WAAD,CAAb,IACA,CAAC,MAAD,EAAS,MAAT,EAAiBhB,OAAjB,CAAyB/B,WAAW,CAAC+C,WAAD,CAApC,IAAqD,CAFvD,EAGE;EACA,QAAMC,GAAG,GAAGzC,gBAAgB,CAACwC,WAAD,CAA5B,CADA;EAIA;EACA;;EACA,QACEC,GAAG,CAACC,SAAJ,KAAkB,MAAlB,IACAD,GAAG,CAACE,WAAJ,KAAoB,MADpB,IAEAF,GAAG,CAACG,OAAJ,KAAgB,OAFhB,IAGA,CAAC,WAAD,EAAc,aAAd,EAA6BpB,OAA7B,CAAqCiB,GAAG,CAACI,UAAzC,MAAyD,CAAC,CAH1D,IAICR,SAAS,IAAII,GAAG,CAACI,UAAJ,KAAmB,QAJjC,IAKCR,SAAS,IAAII,GAAG,CAACK,MAAjB,IAA2BL,GAAG,CAACK,MAAJ,KAAe,MAN7C,EAOE;EACA,aAAON,WAAP;EACD,KATD,MASO;EACLA,MAAAA,WAAW,GAAGA,WAAW,CAACnB,UAA1B;EACD;EACF;;EAED,SAAO,IAAP;EACD;EAGD;;;EACe,SAAS0B,eAAT,CAAyBlF,OAAzB,EAA2C;EACxD,MAAM/B,MAAM,GAAGF,SAAS,CAACiC,OAAD,CAAxB;EAEA,MAAI4C,YAAY,GAAGyB,mBAAmB,CAACrE,OAAD,CAAtC;;EAEA,SACE4C,YAAY,IACZwB,cAAc,CAACxB,YAAD,CADd,IAEAT,gBAAgB,CAACS,YAAD,CAAhB,CAA+B0B,QAA/B,KAA4C,QAH9C,EAIE;EACA1B,IAAAA,YAAY,GAAGyB,mBAAmB,CAACzB,YAAD,CAAlC;EACD;;EAED,MACEA,YAAY,KACXhB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B,IACEhB,WAAW,CAACgB,YAAD,CAAX,KAA8B,MAA9B,IACCT,gBAAgB,CAACS,YAAD,CAAhB,CAA+B0B,QAA/B,KAA4C,QAHpC,CADd,EAKE;EACA,WAAOrG,MAAP;EACD;;EAED,SAAO2E,YAAY,IAAI2B,kBAAkB,CAACvE,OAAD,CAAlC,IAA+C/B,MAAtD;EACD;;EC3FM,IAAM+C,GAAU,GAAG,KAAnB;EACA,IAAMG,MAAgB,GAAG,QAAzB;EACA,IAAMD,KAAc,GAAG,OAAvB;EACA,IAAML,IAAY,GAAG,MAArB;EAOA,IAAMsE,cAAoC,GAAG,CAACnE,GAAD,EAAMG,MAAN,EAAcD,KAAd,EAAqBL,IAArB,CAA7C;EAEA,IAAMuE,KAAc,GAAG,OAAvB;EACA,IAAMC,GAAU,GAAG,KAAnB;EAGA,IAAMC,eAAkC,GAAG,iBAA3C;EACA,IAAMC,QAAoB,GAAG,UAA7B;EAIA,IAAMC,MAAgB,GAAG,QAAzB;EACA,IAAMC,SAAsB,GAAG,WAA/B;;EAmCA,IAAMC,UAAwB,GAAG,YAAjC;EACA,IAAMC,IAAY,GAAG,MAArB;EACA,IAAMC,SAAsB,GAAG,WAA/B;;EAEA,IAAMC,UAAwB,GAAG,YAAjC;EACA,IAAMC,IAAY,GAAG,MAArB;EACA,IAAMC,SAAsB,GAAG,WAA/B;;EAEA,IAAMC,WAA0B,GAAG,aAAnC;EACA,IAAMC,KAAc,GAAG,OAAvB;EACA,IAAMC,UAAwB,GAAG,YAAjC;EACA,IAAMC,cAAqC,GAAG,CACnDT,UADmD,EAEnDC,IAFmD,EAGnDC,SAHmD,EAInDC,UAJmD,EAKnDC,IALmD,EAMnDC,SANmD,EAOnDC,WAPmD,EAQnDC,KARmD,EASnDC,UATmD,CAA9C;;EChEP,SAASE,KAAT,CAAeC,SAAf,EAA0B;EACxB,MAAM9G,GAAG,GAAG,IAAI+G,GAAJ,EAAZ;EACA,MAAMC,OAAO,GAAG,IAAIC,GAAJ,EAAhB;EACA,MAAMC,MAAM,GAAG,EAAf;EAEAJ,EAAAA,SAAS,CAACK,OAAV,CAAkB,UAAAC,QAAQ,EAAI;EAC5BpH,IAAAA,GAAG,CAACqH,GAAJ,CAAQD,QAAQ,CAACE,IAAjB,EAAuBF,QAAvB;EACD,GAFD,EALwB;;EAUxB,WAASG,IAAT,CAAcH,QAAd,EAA4C;EAC1CJ,IAAAA,OAAO,CAACQ,GAAR,CAAYJ,QAAQ,CAACE,IAArB;EAEA,QAAMG,QAAQ,aACRL,QAAQ,CAACK,QAAT,IAAqB,EADb,EAERL,QAAQ,CAACM,gBAAT,IAA6B,EAFrB,CAAd;EAKAD,IAAAA,QAAQ,CAACN,OAAT,CAAiB,UAAAQ,GAAG,EAAI;EACtB,UAAI,CAACX,OAAO,CAACY,GAAR,CAAYD,GAAZ,CAAL,EAAuB;EACrB,YAAME,WAAW,GAAG7H,GAAG,CAAC8H,GAAJ,CAAQH,GAAR,CAApB;;EAEA,YAAIE,WAAJ,EAAiB;EACfN,UAAAA,IAAI,CAACM,WAAD,CAAJ;EACD;EACF;EACF,KARD;EAUAX,IAAAA,MAAM,CAACa,IAAP,CAAYX,QAAZ;EACD;;EAEDN,EAAAA,SAAS,CAACK,OAAV,CAAkB,UAAAC,QAAQ,EAAI;EAC5B,QAAI,CAACJ,OAAO,CAACY,GAAR,CAAYR,QAAQ,CAACE,IAArB,CAAL,EAAiC;EAC/B;EACAC,MAAAA,IAAI,CAACH,QAAD,CAAJ;EACD;EACF,GALD;EAOA,SAAOF,MAAP;EACD;;EAEc,SAASc,cAAT,CACblB,SADa,EAEc;EAC3B;EACA,MAAMmB,gBAAgB,GAAGpB,KAAK,CAACC,SAAD,CAA9B,CAF2B;;EAK3B,SAAOF,cAAc,CAACsB,MAAf,CAAsB,UAACC,GAAD,EAAMC,KAAN,EAAgB;EAC3C,WAAOD,GAAG,CAACxD,MAAJ,CACLsD,gBAAgB,CAACvC,MAAjB,CAAwB,UAAA0B,QAAQ;EAAA,aAAIA,QAAQ,CAACgB,KAAT,KAAmBA,KAAvB;EAAA,KAAhC,CADK,CAAP;EAGD,GAJM,EAIJ,EAJI,CAAP;EAKD;;ECxDc,SAASC,QAAT,CAAqBC,EAArB,EAAqD;EAClE,MAAIC,OAAJ;EACA,SAAO,YAAM;EACX,QAAI,CAACA,OAAL,EAAc;EACZA,MAAAA,OAAO,GAAG,IAAIC,OAAJ,CAAe,UAAAC,OAAO,EAAI;EAClCD,QAAAA,OAAO,CAACC,OAAR,GAAkBC,IAAlB,CAAuB,YAAM;EAC3BH,UAAAA,OAAO,GAAGI,SAAV;EACAF,UAAAA,OAAO,CAACH,EAAE,EAAH,CAAP;EACD,SAHD;EAID,OALS,CAAV;EAMD;;EAED,WAAOC,OAAP;EACD,GAXD;EAYD;;ECbc,SAASK,WAAT,CACb9B,SADa,EAEsB;EACnC,MAAM+B,MAAM,GAAG/B,SAAS,CAACoB,MAAV,CAAiB,UAACW,MAAD,EAASC,OAAT,EAAqB;EACnD,QAAMC,QAAQ,GAAGF,MAAM,CAACC,OAAO,CAACxB,IAAT,CAAvB;EACAuB,IAAAA,MAAM,CAACC,OAAO,CAACxB,IAAT,CAAN,GAAuByB,QAAQ,qBAEtBA,QAFsB,EAGtBD,OAHsB;EAIzBE,MAAAA,OAAO,oBAAOD,QAAQ,CAACC,OAAhB,EAA4BF,OAAO,CAACE,OAApC,CAJkB;EAKzBC,MAAAA,IAAI,oBAAOF,QAAQ,CAACE,IAAhB,EAAyBH,OAAO,CAACG,IAAjC;EALqB,SAO3BH,OAPJ;EAQA,WAAOD,MAAP;EACD,GAXc,EAWZ,EAXY,CAAf,CADmC;;EAenC,SAAOK,MAAM,CAACC,IAAP,CAAYN,MAAZ,EAAoB7I,GAApB,CAAwB,UAAAoJ,GAAG;EAAA,WAAIP,MAAM,CAACO,GAAD,CAAV;EAAA,GAA3B,CAAP;EACD;;ECdc,SAASC,eAAT,CACb5I,OADa,EAEb6I,QAFa,EAGb;EACA,MAAMxH,GAAG,GAAGtD,SAAS,CAACiC,OAAD,CAArB;EACA,MAAM8I,IAAI,GAAG/G,kBAAkB,CAAC/B,OAAD,CAA/B;EACA,MAAMU,cAAc,GAAGW,GAAG,CAACX,cAA3B;EAEA,MAAIH,KAAK,GAAGuI,IAAI,CAACC,WAAjB;EACA,MAAItI,MAAM,GAAGqI,IAAI,CAACE,YAAlB;EACA,MAAIpI,CAAC,GAAG,CAAR;EACA,MAAIG,CAAC,GAAG,CAAR;;EAEA,MAAIL,cAAJ,EAAoB;EAClBH,IAAAA,KAAK,GAAGG,cAAc,CAACH,KAAvB;EACAE,IAAAA,MAAM,GAAGC,cAAc,CAACD,MAAxB;EAEA,QAAMwI,cAAc,GAAGpJ,gBAAgB,EAAvC;;EAEA,QAAIoJ,cAAc,IAAK,CAACA,cAAD,IAAmBJ,QAAQ,KAAK,OAAvD,EAAiE;EAC/DjI,MAAAA,CAAC,GAAGF,cAAc,CAACI,UAAnB;EACAC,MAAAA,CAAC,GAAGL,cAAc,CAACO,SAAnB;EACD;EACF;;EAED,SAAO;EACLV,IAAAA,KAAK,EAALA,KADK;EAELE,IAAAA,MAAM,EAANA,MAFK;EAGLG,IAAAA,CAAC,EAAEA,CAAC,GAAGsB,mBAAmB,CAAClC,OAAD,CAHrB;EAILe,IAAAA,CAAC,EAADA;EAJK,GAAP;EAMD;;EC7BD;;EACe,SAASmI,eAAT,CAAyBlJ,OAAzB,EAAqD;EAAA;;EAClE,MAAM8I,IAAI,GAAG/G,kBAAkB,CAAC/B,OAAD,CAA/B;EACA,MAAMmJ,SAAS,GAAG/H,eAAe,CAACpB,OAAD,CAAjC;EACA,MAAM4D,IAAI,4BAAG5D,OAAO,CAAC7B,aAAX,qBAAG,sBAAuByF,IAApC;EAEA,MAAMrD,KAAK,GAAG3B,GAAG,CACfkK,IAAI,CAACM,WADU,EAEfN,IAAI,CAACC,WAFU,EAGfnF,IAAI,GAAGA,IAAI,CAACwF,WAAR,GAAsB,CAHX,EAIfxF,IAAI,GAAGA,IAAI,CAACmF,WAAR,GAAsB,CAJX,CAAjB;EAMA,MAAMtI,MAAM,GAAG7B,GAAG,CAChBkK,IAAI,CAACO,YADW,EAEhBP,IAAI,CAACE,YAFW,EAGhBpF,IAAI,GAAGA,IAAI,CAACyF,YAAR,GAAuB,CAHX,EAIhBzF,IAAI,GAAGA,IAAI,CAACoF,YAAR,GAAuB,CAJX,CAAlB;EAOA,MAAIpI,CAAC,GAAG,CAACuI,SAAS,CAAC7H,UAAX,GAAwBY,mBAAmB,CAAClC,OAAD,CAAnD;EACA,MAAMe,CAAC,GAAG,CAACoI,SAAS,CAAC3H,SAArB;;EAEA,MAAIW,gBAAgB,CAACyB,IAAI,IAAIkF,IAAT,CAAhB,CAA+BQ,SAA/B,KAA6C,KAAjD,EAAwD;EACtD1I,IAAAA,CAAC,IAAIhC,GAAG,CAACkK,IAAI,CAACC,WAAN,EAAmBnF,IAAI,GAAGA,IAAI,CAACmF,WAAR,GAAsB,CAA7C,CAAH,GAAqDxI,KAA1D;EACD;;EAED,SAAO;EAAEA,IAAAA,KAAK,EAALA,KAAF;EAASE,IAAAA,MAAM,EAANA,MAAT;EAAiBG,IAAAA,CAAC,EAADA,CAAjB;EAAoBG,IAAAA,CAAC,EAADA;EAApB,GAAP;EACD;;ECjCc,SAASwI,QAAT,CAAkBC,MAAlB,EAAmCC,KAAnC,EAAmD;EAChE,MAAMC,QAAQ,GAAGD,KAAK,CAACE,WAAN,IAAqBF,KAAK,CAACE,WAAN,EAAtC,CADgE;;EAIhE,MAAIH,MAAM,CAACD,QAAP,CAAgBE,KAAhB,CAAJ,EAA4B;EAC1B,WAAO,IAAP;EACD,GAFD;EAAA,OAIK,IAAIC,QAAQ,IAAIhL,YAAY,CAACgL,QAAD,CAA5B,EAAwC;EAC3C,UAAIE,IAAI,GAAGH,KAAX;;EACA,SAAG;EACD,YAAIG,IAAI,IAAIJ,MAAM,CAACK,UAAP,CAAkBD,IAAlB,CAAZ,EAAqC;EACnC,iBAAO,IAAP;EACD,SAHA;;;EAKDA,QAAAA,IAAI,GAAGA,IAAI,CAACpG,UAAL,IAAmBoG,IAAI,CAACnG,IAA/B;EACD,OAND,QAMSmG,IANT;EAOD,KAjB+D;;;EAoBhE,SAAO,KAAP;EACD;;ECrBc,SAASE,gBAAT,CAA0BrH,IAA1B,EAAwD;EACrE,2BACKA,IADL;EAEE5B,IAAAA,IAAI,EAAE4B,IAAI,CAAC7B,CAFb;EAGEI,IAAAA,GAAG,EAAEyB,IAAI,CAAC1B,CAHZ;EAIEG,IAAAA,KAAK,EAAEuB,IAAI,CAAC7B,CAAL,GAAS6B,IAAI,CAAClC,KAJvB;EAKEY,IAAAA,MAAM,EAAEsB,IAAI,CAAC1B,CAAL,GAAS0B,IAAI,CAAChC;EALxB;EAOD;;ECOD,SAASsJ,0BAAT,CACE/J,OADF,EAEE6I,QAFF,EAGE;EACA,MAAMpG,IAAI,GAAG1C,qBAAqB,CAACC,OAAD,EAAU,KAAV,EAAiB6I,QAAQ,KAAK,OAA9B,CAAlC;EAEApG,EAAAA,IAAI,CAACzB,GAAL,GAAWyB,IAAI,CAACzB,GAAL,GAAWhB,OAAO,CAACmD,SAA9B;EACAV,EAAAA,IAAI,CAAC5B,IAAL,GAAY4B,IAAI,CAAC5B,IAAL,GAAYb,OAAO,CAACkD,UAAhC;EACAT,EAAAA,IAAI,CAACtB,MAAL,GAAcsB,IAAI,CAACzB,GAAL,GAAWhB,OAAO,CAACgJ,YAAjC;EACAvG,EAAAA,IAAI,CAACvB,KAAL,GAAauB,IAAI,CAAC5B,IAAL,GAAYb,OAAO,CAAC+I,WAAjC;EACAtG,EAAAA,IAAI,CAAClC,KAAL,GAAaP,OAAO,CAAC+I,WAArB;EACAtG,EAAAA,IAAI,CAAChC,MAAL,GAAcT,OAAO,CAACgJ,YAAtB;EACAvG,EAAAA,IAAI,CAAC7B,CAAL,GAAS6B,IAAI,CAAC5B,IAAd;EACA4B,EAAAA,IAAI,CAAC1B,CAAL,GAAS0B,IAAI,CAACzB,GAAd;EAEA,SAAOyB,IAAP;EACD;;EAED,SAASuH,0BAAT,CACEhK,OADF,EAEEiK,cAFF,EAGEpB,QAHF,EAIoB;EAClB,SAAOoB,cAAc,KAAK1E,QAAnB,GACHuE,gBAAgB,CAAClB,eAAe,CAAC5I,OAAD,EAAU6I,QAAV,CAAhB,CADb,GAEHxK,SAAS,CAAC4L,cAAD,CAAT,GACAF,0BAA0B,CAACE,cAAD,EAAiBpB,QAAjB,CAD1B,GAEAiB,gBAAgB,CAACZ,eAAe,CAACnH,kBAAkB,CAAC/B,OAAD,CAAnB,CAAhB,CAJpB;EAKD;EAGD;EACA;;;EACA,SAASkK,kBAAT,CAA4BlK,OAA5B,EAA8D;EAC5D,MAAMsF,eAAe,GAAGzB,iBAAiB,CAACP,aAAa,CAACtD,OAAD,CAAd,CAAzC;EACA,MAAMmK,iBAAiB,GACrB,CAAC,UAAD,EAAa,OAAb,EAAsBxG,OAAtB,CAA8BxB,gBAAgB,CAACnC,OAAD,CAAhB,CAA0BsE,QAAxD,KAAqE,CADvE;EAEA,MAAM8F,cAAc,GAClBD,iBAAiB,IAAI3L,aAAa,CAACwB,OAAD,CAAlC,GACIkF,eAAe,CAAClF,OAAD,CADnB,GAEIA,OAHN;;EAKA,MAAI,CAAC3B,SAAS,CAAC+L,cAAD,CAAd,EAAgC;EAC9B,WAAO,EAAP;EACD,GAX2D;;;EAc5D,SAAO9E,eAAe,CAACL,MAAhB,CACL,UAACgF,cAAD;EAAA,WACE5L,SAAS,CAAC4L,cAAD,CAAT,IACAV,QAAQ,CAACU,cAAD,EAAiBG,cAAjB,CADR,IAEAxI,WAAW,CAACqI,cAAD,CAAX,KAAgC,MAHlC;EAAA,GADK,CAAP;EAMD;EAGD;;;EACe,SAASI,eAAT,CACbrK,OADa,EAEbsK,QAFa,EAGbC,YAHa,EAIb1B,QAJa,EAKK;EAClB,MAAM2B,mBAAmB,GACvBF,QAAQ,KAAK,iBAAb,GACIJ,kBAAkB,CAAClK,OAAD,CADtB,GAEI,GAAGkE,MAAH,CAAUoG,QAAV,CAHN;EAIA,MAAMhF,eAAe,aAAOkF,mBAAP,GAA4BD,YAA5B,EAArB;EACA,MAAME,mBAAmB,GAAGnF,eAAe,CAAC,CAAD,CAA3C;EAEA,MAAMoF,YAAY,GAAGpF,eAAe,CAACmC,MAAhB,CAAuB,UAACkD,OAAD,EAAUV,cAAV,EAA6B;EACvE,QAAMxH,IAAI,GAAGuH,0BAA0B,CAAChK,OAAD,EAAUiK,cAAV,EAA0BpB,QAA1B,CAAvC;EAEA8B,IAAAA,OAAO,CAAC3J,GAAR,GAAcpC,GAAG,CAAC6D,IAAI,CAACzB,GAAN,EAAW2J,OAAO,CAAC3J,GAAnB,CAAjB;EACA2J,IAAAA,OAAO,CAACzJ,KAAR,GAAgBpC,GAAG,CAAC2D,IAAI,CAACvB,KAAN,EAAayJ,OAAO,CAACzJ,KAArB,CAAnB;EACAyJ,IAAAA,OAAO,CAACxJ,MAAR,GAAiBrC,GAAG,CAAC2D,IAAI,CAACtB,MAAN,EAAcwJ,OAAO,CAACxJ,MAAtB,CAApB;EACAwJ,IAAAA,OAAO,CAAC9J,IAAR,GAAejC,GAAG,CAAC6D,IAAI,CAAC5B,IAAN,EAAY8J,OAAO,CAAC9J,IAApB,CAAlB;EAEA,WAAO8J,OAAP;EACD,GAToB,EASlBX,0BAA0B,CAAChK,OAAD,EAAUyK,mBAAV,EAA+B5B,QAA/B,CATR,CAArB;EAWA6B,EAAAA,YAAY,CAACnK,KAAb,GAAqBmK,YAAY,CAACxJ,KAAb,GAAqBwJ,YAAY,CAAC7J,IAAvD;EACA6J,EAAAA,YAAY,CAACjK,MAAb,GAAsBiK,YAAY,CAACvJ,MAAb,GAAsBuJ,YAAY,CAAC1J,GAAzD;EACA0J,EAAAA,YAAY,CAAC9J,CAAb,GAAiB8J,YAAY,CAAC7J,IAA9B;EACA6J,EAAAA,YAAY,CAAC3J,CAAb,GAAiB2J,YAAY,CAAC1J,GAA9B;EAEA,SAAO0J,YAAP;EACD;;ECtGc,SAASE,gBAAT,CACbC,SADa,EAEE;EACf,SAAQA,SAAS,CAACC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAR;EACD;;ECJc,SAASC,YAAT,CAAsBF,SAAtB,EAAwD;EACrE,SAAQA,SAAS,CAACC,KAAV,CAAgB,GAAhB,EAAqB,CAArB,CAAR;EACD;;ECFc,SAASE,wBAAT,CACbH,SADa,EAEF;EACX,SAAO,CAAC,KAAD,EAAQ,QAAR,EAAkBlH,OAAlB,CAA0BkH,SAA1B,KAAwC,CAAxC,GAA4C,GAA5C,GAAkD,GAAzD;EACD;;ECKc,SAASI,cAAT,OASH;EAAA,MARVxF,SAQU,QARVA,SAQU;EAAA,MAPVzF,OAOU,QAPVA,OAOU;EAAA,MANV6K,SAMU,QANVA,SAMU;EACV,MAAMK,aAAa,GAAGL,SAAS,GAAGD,gBAAgB,CAACC,SAAD,CAAnB,GAAiC,IAAhE;EACA,MAAMM,SAAS,GAAGN,SAAS,GAAGE,YAAY,CAACF,SAAD,CAAf,GAA6B,IAAxD;EACA,MAAMO,OAAO,GAAG3F,SAAS,CAAC7E,CAAV,GAAc6E,SAAS,CAAClF,KAAV,GAAkB,CAAhC,GAAoCP,OAAO,CAACO,KAAR,GAAgB,CAApE;EACA,MAAM8K,OAAO,GAAG5F,SAAS,CAAC1E,CAAV,GAAc0E,SAAS,CAAChF,MAAV,GAAmB,CAAjC,GAAqCT,OAAO,CAACS,MAAR,GAAiB,CAAtE;EAEA,MAAIwC,OAAJ;;EACA,UAAQiI,aAAR;EACE,SAAKlK,GAAL;EACEiC,MAAAA,OAAO,GAAG;EACRrC,QAAAA,CAAC,EAAEwK,OADK;EAERrK,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E,CAAV,GAAcf,OAAO,CAACS;EAFjB,OAAV;EAIA;;EACF,SAAKU,MAAL;EACE8B,MAAAA,OAAO,GAAG;EACRrC,QAAAA,CAAC,EAAEwK,OADK;EAERrK,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E,CAAV,GAAc0E,SAAS,CAAChF;EAFnB,OAAV;EAIA;;EACF,SAAKS,KAAL;EACE+B,MAAAA,OAAO,GAAG;EACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CAAV,GAAc6E,SAAS,CAAClF,KADnB;EAERQ,QAAAA,CAAC,EAAEsK;EAFK,OAAV;EAIA;;EACF,SAAKxK,IAAL;EACEoC,MAAAA,OAAO,GAAG;EACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CAAV,GAAcZ,OAAO,CAACO,KADjB;EAERQ,QAAAA,CAAC,EAAEsK;EAFK,OAAV;EAIA;;EACF;EACEpI,MAAAA,OAAO,GAAG;EACRrC,QAAAA,CAAC,EAAE6E,SAAS,CAAC7E,CADL;EAERG,QAAAA,CAAC,EAAE0E,SAAS,CAAC1E;EAFL,OAAV;EA1BJ;;EAgCA,MAAMuK,QAAQ,GAAGJ,aAAa,GAC1BF,wBAAwB,CAACE,aAAD,CADE,GAE1B,IAFJ;;EAIA,MAAII,QAAQ,IAAI,IAAhB,EAAsB;EACpB,QAAMC,GAAG,GAAGD,QAAQ,KAAK,GAAb,GAAmB,QAAnB,GAA8B,OAA1C;;EAEA,YAAQH,SAAR;EACE,WAAK/F,KAAL;EACEnC,QAAAA,OAAO,CAACqI,QAAD,CAAP,GACErI,OAAO,CAACqI,QAAD,CAAP,IAAqB7F,SAAS,CAAC8F,GAAD,CAAT,GAAiB,CAAjB,GAAqBvL,OAAO,CAACuL,GAAD,CAAP,GAAe,CAAzD,CADF;EAEA;;EACF,WAAKlG,GAAL;EACEpC,QAAAA,OAAO,CAACqI,QAAD,CAAP,GACErI,OAAO,CAACqI,QAAD,CAAP,IAAqB7F,SAAS,CAAC8F,GAAD,CAAT,GAAiB,CAAjB,GAAqBvL,OAAO,CAACuL,GAAD,CAAP,GAAe,CAAzD,CADF;EAEA;EARJ;EAWD;;EAED,SAAOtI,OAAP;EACD;;EC9Ec,SAASuI,kBAAT,GAA0C;EACvD,SAAO;EACLxK,IAAAA,GAAG,EAAE,CADA;EAELE,IAAAA,KAAK,EAAE,CAFF;EAGLC,IAAAA,MAAM,EAAE,CAHH;EAILN,IAAAA,IAAI,EAAE;EAJD,GAAP;EAMD;;ECNc,SAAS4K,kBAAT,CACbC,aADa,EAED;EACZ,2BACKF,kBAAkB,EADvB,EAEKE,aAFL;EAID;;ECTc,SAASC,eAAT,CAGbC,KAHa,EAGHlD,IAHG,EAGmC;EAChD,SAAOA,IAAI,CAACjB,MAAL,CAAY,UAACoE,OAAD,EAAUlD,GAAV,EAAkB;EACnCkD,IAAAA,OAAO,CAAClD,GAAD,CAAP,GAAeiD,KAAf;EACA,WAAOC,OAAP;EACD,GAHM,EAGJ,EAHI,CAAP;EAID;;ECuBc,SAASC,cAAT,CACbC,KADa,EAEbxD,OAFa,EAGD;EAAA,MADZA,OACY;EADZA,IAAAA,OACY,GADe,EACf;EAAA;;EAAA,iBASRA,OATQ;EAAA,oCAEVsC,SAFU;EAAA,MAEVA,SAFU,mCAEEkB,KAAK,CAAClB,SAFR;EAAA,mCAGVhC,QAHU;EAAA,MAGVA,QAHU,kCAGCkD,KAAK,CAAClD,QAHP;EAAA,mCAIVyB,QAJU;EAAA,MAIVA,QAJU,kCAIChF,eAJD;EAAA,uCAKViF,YALU;EAAA,MAKVA,YALU,sCAKKhF,QALL;EAAA,uCAMVyG,cANU;EAAA,MAMVA,cANU,sCAMOxG,MANP;EAAA,sCAOVyG,WAPU;EAAA,MAOVA,WAPU,qCAOI,KAPJ;EAAA,kCAQVC,OARU;EAAA,MAQVA,OARU,iCAQA,CARA;EAWZ,MAAMR,aAAa,GAAGD,kBAAkB,CACtC,OAAOS,OAAP,KAAmB,QAAnB,GACIA,OADJ,GAEIP,eAAe,CAACO,OAAD,EAAU/G,cAAV,CAHmB,CAAxC;EAMA,MAAMgH,UAAU,GAAGH,cAAc,KAAKxG,MAAnB,GAA4BC,SAA5B,GAAwCD,MAA3D;EAEA,MAAM4G,UAAU,GAAGL,KAAK,CAACM,KAAN,CAAY7G,MAA/B;EACA,MAAMxF,OAAO,GAAG+L,KAAK,CAACO,QAAN,CAAeL,WAAW,GAAGE,UAAH,GAAgBH,cAA1C,CAAhB;EAEA,MAAMO,kBAAkB,GAAGlC,eAAe,CACxChM,SAAS,CAAC2B,OAAD,CAAT,GACIA,OADJ,GAEIA,OAAO,CAACwM,cAAR,IAA0BzK,kBAAkB,CAACgK,KAAK,CAACO,QAAN,CAAe9G,MAAhB,CAHR,EAIxC8E,QAJwC,EAKxCC,YALwC,EAMxC1B,QANwC,CAA1C;EASA,MAAM4D,mBAAmB,GAAG1M,qBAAqB,CAACgM,KAAK,CAACO,QAAN,CAAe7G,SAAhB,CAAjD;EAEA,MAAMiH,aAAa,GAAGzB,cAAc,CAAC;EACnCxF,IAAAA,SAAS,EAAEgH,mBADwB;EAEnCzM,IAAAA,OAAO,EAAEoM,UAF0B;EAGnCvD,IAAAA,QAAQ,EAAE,UAHyB;EAInCgC,IAAAA,SAAS,EAATA;EAJmC,GAAD,CAApC;EAOA,MAAM8B,gBAAgB,GAAG7C,gBAAgB,mBACpCsC,UADoC,EAEpCM,aAFoC,EAAzC;EAKA,MAAME,iBAAiB,GACrBZ,cAAc,KAAKxG,MAAnB,GAA4BmH,gBAA5B,GAA+CF,mBADjD,CA7CY;EAiDZ;;EACA,MAAMI,eAAe,GAAG;EACtB7L,IAAAA,GAAG,EAAEuL,kBAAkB,CAACvL,GAAnB,GAAyB4L,iBAAiB,CAAC5L,GAA3C,GAAiD0K,aAAa,CAAC1K,GAD9C;EAEtBG,IAAAA,MAAM,EACJyL,iBAAiB,CAACzL,MAAlB,GACAoL,kBAAkB,CAACpL,MADnB,GAEAuK,aAAa,CAACvK,MALM;EAMtBN,IAAAA,IAAI,EAAE0L,kBAAkB,CAAC1L,IAAnB,GAA0B+L,iBAAiB,CAAC/L,IAA5C,GAAmD6K,aAAa,CAAC7K,IANjD;EAOtBK,IAAAA,KAAK,EACH0L,iBAAiB,CAAC1L,KAAlB,GAA0BqL,kBAAkB,CAACrL,KAA7C,GAAqDwK,aAAa,CAACxK;EAR/C,GAAxB;EAWA,MAAM4L,UAAU,GAAGf,KAAK,CAACgB,aAAN,CAAoBC,MAAvC,CA7DY;;EAgEZ,MAAIhB,cAAc,KAAKxG,MAAnB,IAA6BsH,UAAjC,EAA6C;EAC3C,QAAME,MAAM,GAAGF,UAAU,CAACjC,SAAD,CAAzB;EAEApC,IAAAA,MAAM,CAACC,IAAP,CAAYmE,eAAZ,EAA6BnG,OAA7B,CAAqC,UAACiC,GAAD,EAAS;EAC5C,UAAMsE,QAAQ,GAAG,CAAC/L,KAAD,EAAQC,MAAR,EAAgBwC,OAAhB,CAAwBgF,GAAxB,KAAgC,CAAhC,GAAoC,CAApC,GAAwC,CAAC,CAA1D;EACA,UAAMuE,IAAI,GAAG,CAAClM,GAAD,EAAMG,MAAN,EAAcwC,OAAd,CAAsBgF,GAAtB,KAA8B,CAA9B,GAAkC,GAAlC,GAAwC,GAArD;EACAkE,MAAAA,eAAe,CAAClE,GAAD,CAAf,IAAwBqE,MAAM,CAACE,IAAD,CAAN,GAAeD,QAAvC;EACD,KAJD;EAKD;;EAED,SAAOJ,eAAP;EACD;;EC7FD,IAAMM,eAAoC,GAAG;EAC3CtC,EAAAA,SAAS,EAAE,QADgC;EAE3CxE,EAAAA,SAAS,EAAE,EAFgC;EAG3CwC,EAAAA,QAAQ,EAAE;EAHiC,CAA7C;;EAWA,SAASuE,gBAAT,GAAwD;EAAA,oCAA3BC,IAA2B;EAA3BA,IAAAA,IAA2B;EAAA;;EACtD,SAAO,CAACA,IAAI,CAACC,IAAL,CACN,UAACtN,OAAD;EAAA,WACE,EAAEA,OAAO,IAAI,OAAOA,OAAO,CAACD,qBAAf,KAAyC,UAAtD,CADF;EAAA,GADM,CAAR;EAID;;EAEM,SAASwN,eAAT,CAAyBC,gBAAzB,EAAqE;EAAA,MAA5CA,gBAA4C;EAA5CA,IAAAA,gBAA4C,GAAJ,EAAI;EAAA;;EAAA,0BAExEA,gBAFwE;EAAA,gDAClEC,gBADkE;EAAA,MAClEA,gBADkE,sCAC/C,EAD+C;EAAA,iDAC3CC,cAD2C;EAAA,MAC3CA,cAD2C,uCAC1BP,eAD0B;EAI1E,SAAO,SAASQ,YAAT,CACLlI,SADK,EAELD,MAFK,EAGL+C,OAHK,EAIK;EAAA,QADVA,OACU;EADVA,MAAAA,OACU,GADmCmF,cACnC;EAAA;;EACV,QAAI3B,KAAoB,GAAG;EACzBlB,MAAAA,SAAS,EAAE,QADc;EAEzBrD,MAAAA,gBAAgB,EAAE,EAFO;EAGzBe,MAAAA,OAAO,oBAAO4E,eAAP,EAA2BO,cAA3B,CAHkB;EAIzBX,MAAAA,aAAa,EAAE,EAJU;EAKzBT,MAAAA,QAAQ,EAAE;EACR7G,QAAAA,SAAS,EAATA,SADQ;EAERD,QAAAA,MAAM,EAANA;EAFQ,OALe;EASzBoI,MAAAA,UAAU,EAAE,EATa;EAUzBC,MAAAA,MAAM,EAAE;EAViB,KAA3B;EAaA,QAAIC,gBAAmC,GAAG,EAA1C;EACA,QAAIC,WAAW,GAAG,KAAlB;EAEA,QAAMC,QAAQ,GAAG;EACfjC,MAAAA,KAAK,EAALA,KADe;EAEfkC,MAAAA,UAFe,sBAEJC,gBAFI,EAEc;EAC3B,YAAM3F,OAAO,GACX,OAAO2F,gBAAP,KAA4B,UAA5B,GACIA,gBAAgB,CAACnC,KAAK,CAACxD,OAAP,CADpB,GAEI2F,gBAHN;EAKAC,QAAAA,sBAAsB;EAEtBpC,QAAAA,KAAK,CAACxD,OAAN,qBAEKmF,cAFL,EAGK3B,KAAK,CAACxD,OAHX,EAIKA,OAJL;EAOAwD,QAAAA,KAAK,CAACqC,aAAN,GAAsB;EACpB3I,UAAAA,SAAS,EAAEpH,SAAS,CAACoH,SAAD,CAAT,GACP5B,iBAAiB,CAAC4B,SAAD,CADV,GAEPA,SAAS,CAAC+G,cAAV,GACA3I,iBAAiB,CAAC4B,SAAS,CAAC+G,cAAX,CADjB,GAEA,EALgB;EAMpBhH,UAAAA,MAAM,EAAE3B,iBAAiB,CAAC2B,MAAD;EANL,SAAtB,CAf2B;EAyB3B;;EACA,YAAMgC,gBAAgB,GAAGD,cAAc,CACrCY,WAAW,WAAKsF,gBAAL,EAA0B1B,KAAK,CAACxD,OAAN,CAAclC,SAAxC,EAD0B,CAAvC,CA1B2B;;EA+B3B0F,QAAAA,KAAK,CAACvE,gBAAN,GAAyBA,gBAAgB,CAACvC,MAAjB,CAAwB,UAACoJ,CAAD;EAAA,iBAAOA,CAAC,CAACC,OAAT;EAAA,SAAxB,CAAzB;EAEAC,QAAAA,kBAAkB;EAElB,eAAOP,QAAQ,CAACQ,MAAT,EAAP;EACD,OAtCc;EAwCf;EACA;EACA;EACA;EACA;EACAC,MAAAA,WA7Ce,yBA6CD;EACZ,YAAIV,WAAJ,EAAiB;EACf;EACD;;EAHW,8BAKkBhC,KAAK,CAACO,QALxB;EAAA,YAKJ7G,SALI,mBAKJA,SALI;EAAA,YAKOD,MALP,mBAKOA,MALP;EAQZ;;EACA,YAAI,CAAC4H,gBAAgB,CAAC3H,SAAD,EAAYD,MAAZ,CAArB,EAA0C;EACxC;EACD,SAXW;;;EAcZuG,QAAAA,KAAK,CAACM,KAAN,GAAc;EACZ5G,UAAAA,SAAS,EAAE/C,gBAAgB,CACzB+C,SADyB,EAEzBP,eAAe,CAACM,MAAD,CAFU,EAGzBuG,KAAK,CAACxD,OAAN,CAAcM,QAAd,KAA2B,OAHF,CADf;EAMZrD,UAAAA,MAAM,EAAEpC,aAAa,CAACoC,MAAD;EANT,SAAd,CAdY;EAwBZ;EACA;EACA;EACA;;EACAuG,QAAAA,KAAK,CAAC2C,KAAN,GAAc,KAAd;EAEA3C,QAAAA,KAAK,CAAClB,SAAN,GAAkBkB,KAAK,CAACxD,OAAN,CAAcsC,SAAhC,CA9BY;EAiCZ;EACA;EACA;;EACAkB,QAAAA,KAAK,CAACvE,gBAAN,CAAuBd,OAAvB,CACE,UAACC,QAAD;EAAA,iBACGoF,KAAK,CAACgB,aAAN,CAAoBpG,QAAQ,CAACE,IAA7B,sBACIF,QAAQ,CAAC6B,IADb,CADH;EAAA,SADF;;EAOA,aAAK,IAAImG,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG5C,KAAK,CAACvE,gBAAN,CAAuBoH,MAAnD,EAA2DD,KAAK,EAAhE,EAAoE;EAClE,cAAI5C,KAAK,CAAC2C,KAAN,KAAgB,IAApB,EAA0B;EACxB3C,YAAAA,KAAK,CAAC2C,KAAN,GAAc,KAAd;EACAC,YAAAA,KAAK,GAAG,CAAC,CAAT;EACA;EACD;;EALiE,sCAO/B5C,KAAK,CAACvE,gBAAN,CAAuBmH,KAAvB,CAP+B;EAAA,cAO1D9G,EAP0D,yBAO1DA,EAP0D;EAAA,6DAOtDU,OAPsD;EAAA,cAOtDA,QAPsD,uCAO5C,EAP4C;EAAA,cAOxC1B,IAPwC,yBAOxCA,IAPwC;;EASlE,cAAI,OAAOgB,EAAP,KAAc,UAAlB,EAA8B;EAC5BkE,YAAAA,KAAK,GAAGlE,EAAE,CAAC;EAAEkE,cAAAA,KAAK,EAALA,KAAF;EAASxD,cAAAA,OAAO,EAAPA,QAAT;EAAkB1B,cAAAA,IAAI,EAAJA,IAAlB;EAAwBmH,cAAAA,QAAQ,EAARA;EAAxB,aAAD,CAAF,IAA0CjC,KAAlD;EACD;EACF;EACF,OArGc;EAuGf;EACA;EACAyC,MAAAA,MAAM,EAAE5G,QAAQ,CACd;EAAA,eACE,IAAIG,OAAJ,CAA2B,UAACC,OAAD,EAAa;EACtCgG,UAAAA,QAAQ,CAACS,WAAT;EACAzG,UAAAA,OAAO,CAAC+D,KAAD,CAAP;EACD,SAHD,CADF;EAAA,OADc,CAzGD;EAiHf8C,MAAAA,OAjHe,qBAiHL;EACRV,QAAAA,sBAAsB;EACtBJ,QAAAA,WAAW,GAAG,IAAd;EACD;EApHc,KAAjB;;EAuHA,QAAI,CAACX,gBAAgB,CAAC3H,SAAD,EAAYD,MAAZ,CAArB,EAA0C;EACxC,aAAOwI,QAAP;EACD;;EAEDA,IAAAA,QAAQ,CAACC,UAAT,CAAoB1F,OAApB,EAA6BN,IAA7B,CAAkC,UAAC8D,KAAD,EAAW;EAC3C,UAAI,CAACgC,WAAD,IAAgBxF,OAAO,CAACuG,aAA5B,EAA2C;EACzCvG,QAAAA,OAAO,CAACuG,aAAR,CAAsB/C,KAAtB;EACD;EACF,KAJD,EA5IU;EAmJV;EACA;EACA;EACA;;EACA,aAASwC,kBAAT,GAA8B;EAC5BxC,MAAAA,KAAK,CAACvE,gBAAN,CAAuBd,OAAvB,CAA+B,gBAAoC;EAAA,YAAjCG,IAAiC,QAAjCA,IAAiC;EAAA,gCAA3B0B,OAA2B;EAAA,YAA3BA,OAA2B,6BAAjB,EAAiB;EAAA,YAAbwG,MAAa,QAAbA,MAAa;;EACjE,YAAI,OAAOA,MAAP,KAAkB,UAAtB,EAAkC;EAChC,cAAMC,SAAS,GAAGD,MAAM,CAAC;EAAEhD,YAAAA,KAAK,EAALA,KAAF;EAASlF,YAAAA,IAAI,EAAJA,IAAT;EAAemH,YAAAA,QAAQ,EAARA,QAAf;EAAyBzF,YAAAA,OAAO,EAAPA;EAAzB,WAAD,CAAxB;;EACA,cAAM0G,MAAM,GAAG,SAATA,MAAS,GAAM,EAArB;;EACAnB,UAAAA,gBAAgB,CAACxG,IAAjB,CAAsB0H,SAAS,IAAIC,MAAnC;EACD;EACF,OAND;EAOD;;EAED,aAASd,sBAAT,GAAkC;EAChCL,MAAAA,gBAAgB,CAACpH,OAAjB,CAAyB,UAACmB,EAAD;EAAA,eAAQA,EAAE,EAAV;EAAA,OAAzB;EACAiG,MAAAA,gBAAgB,GAAG,EAAnB;EACD;;EAED,WAAOE,QAAP;EACD,GA3KD;EA4KD;;EC1MD,IAAMkB,OAAO,GAAG;EAAEA,EAAAA,OAAO,EAAE;EAAX,CAAhB;;EAEA,SAASH,QAAT,OAA0E;EAAA,MAAxDhD,KAAwD,QAAxDA,KAAwD;EAAA,MAAjDiC,QAAiD,QAAjDA,QAAiD;EAAA,MAAvCzF,OAAuC,QAAvCA,OAAuC;EAAA,wBAC/BA,OAD+B,CAChEvF,MADgE;EAAA,MAChEA,MADgE,gCACvD,IADuD;EAAA,wBAC/BuF,OAD+B,CACjD4G,MADiD;EAAA,MACjDA,MADiD,gCACxC,IADwC;EAGxE,MAAMlR,MAAM,GAAGF,SAAS,CAACgO,KAAK,CAACO,QAAN,CAAe9G,MAAhB,CAAxB;EACA,MAAM4I,aAAa,aACdrC,KAAK,CAACqC,aAAN,CAAoB3I,SADN,EAEdsG,KAAK,CAACqC,aAAN,CAAoB5I,MAFN,CAAnB;;EAKA,MAAIxC,MAAJ,EAAY;EACVoL,IAAAA,aAAa,CAAC1H,OAAd,CAAsB,UAAA3C,YAAY,EAAI;EACpCA,MAAAA,YAAY,CAACqL,gBAAb,CAA8B,QAA9B,EAAwCpB,QAAQ,CAACQ,MAAjD,EAAyDU,OAAzD;EACD,KAFD;EAGD;;EAED,MAAIC,MAAJ,EAAY;EACVlR,IAAAA,MAAM,CAACmR,gBAAP,CAAwB,QAAxB,EAAkCpB,QAAQ,CAACQ,MAA3C,EAAmDU,OAAnD;EACD;;EAED,SAAO,YAAM;EACX,QAAIlM,MAAJ,EAAY;EACVoL,MAAAA,aAAa,CAAC1H,OAAd,CAAsB,UAAA3C,YAAY,EAAI;EACpCA,QAAAA,YAAY,CAACsL,mBAAb,CAAiC,QAAjC,EAA2CrB,QAAQ,CAACQ,MAApD,EAA4DU,OAA5D;EACD,OAFD;EAGD;;EAED,QAAIC,MAAJ,EAAY;EACVlR,MAAAA,MAAM,CAACoR,mBAAP,CAA2B,QAA3B,EAAqCrB,QAAQ,CAACQ,MAA9C,EAAsDU,OAAtD;EACD;EACF,GAVD;EAWD;;;AAID,uBAAgB;EACdrI,EAAAA,IAAI,EAAE,gBADQ;EAEdyH,EAAAA,OAAO,EAAE,IAFK;EAGd3G,EAAAA,KAAK,EAAE,OAHO;EAIdE,EAAAA,EAAE,EAAE,cAAM,EAJI;EAKdkH,EAAAA,MAAM,EAANA,QALc;EAMdvG,EAAAA,IAAI,EAAE;EANQ,CAAhB;;EC1CA,SAASkE,aAAT,OAAiE;EAAA,MAAxCX,KAAwC,QAAxCA,KAAwC;EAAA,MAAjClF,IAAiC,QAAjCA,IAAiC;EAC/D;EACA;EACA;EACA;EACAkF,EAAAA,KAAK,CAACgB,aAAN,CAAoBlG,IAApB,IAA4BoE,cAAc,CAAC;EACzCxF,IAAAA,SAAS,EAAEsG,KAAK,CAACM,KAAN,CAAY5G,SADkB;EAEzCzF,IAAAA,OAAO,EAAE+L,KAAK,CAACM,KAAN,CAAY7G,MAFoB;EAGzCqD,IAAAA,QAAQ,EAAE,UAH+B;EAIzCgC,IAAAA,SAAS,EAAEkB,KAAK,CAAClB;EAJwB,GAAD,CAA1C;EAMD;;;AAID,wBAAgB;EACdhE,EAAAA,IAAI,EAAE,eADQ;EAEdyH,EAAAA,OAAO,EAAE,IAFK;EAGd3G,EAAAA,KAAK,EAAE,MAHO;EAIdE,EAAAA,EAAE,EAAE6E,aAJU;EAKdlE,EAAAA,IAAI,EAAE;EALQ,CAAhB;;ECmBA,IAAM8G,UAAU,GAAG;EACjBtO,EAAAA,GAAG,EAAE,MADY;EAEjBE,EAAAA,KAAK,EAAE,MAFU;EAGjBC,EAAAA,MAAM,EAAE,MAHS;EAIjBN,EAAAA,IAAI,EAAE;EAJW,CAAnB;EAQA;EACA;;EACA,SAAS0O,iBAAT,OAAqClO,GAArC,EAA2D;EAAA,MAA9BT,CAA8B,QAA9BA,CAA8B;EAAA,MAA3BG,CAA2B,QAA3BA,CAA2B;EACzD,MAAMyO,GAAG,GAAGnO,GAAG,CAACoO,gBAAJ,IAAwB,CAApC;EAEA,SAAO;EACL7O,IAAAA,CAAC,EAAE7B,KAAK,CAAC6B,CAAC,GAAG4O,GAAL,CAAL,GAAiBA,GAAjB,IAAwB,CADtB;EAELzO,IAAAA,CAAC,EAAEhC,KAAK,CAACgC,CAAC,GAAGyO,GAAL,CAAL,GAAiBA,GAAjB,IAAwB;EAFtB,GAAP;EAID;;EAEM,SAASE,WAAT,QAsBJ;EAAA;;EAAA,MArBDlK,MAqBC,SArBDA,MAqBC;EAAA,MApBD4G,UAoBC,SApBDA,UAoBC;EAAA,MAnBDvB,SAmBC,SAnBDA,SAmBC;EAAA,MAlBDM,SAkBC,SAlBDA,SAkBC;EAAA,MAjBDlI,OAiBC,SAjBDA,OAiBC;EAAA,MAhBDqB,QAgBC,SAhBDA,QAgBC;EAAA,MAfDqL,eAeC,SAfDA,eAeC;EAAA,MAdDC,QAcC,SAdDA,QAcC;EAAA,MAbDC,YAaC,SAbDA,YAaC;EAAA,MAZDhN,OAYC,SAZDA,OAYC;EAAA,mBACsBI,OADtB,CACKrC,CADL;EAAA,MACKA,CADL,2BACS,CADT;EAAA,mBACsBqC,OADtB,CACYlC,CADZ;EAAA,MACYA,CADZ,2BACgB,CADhB;;EAAA,cAIC,OAAO8O,YAAP,KAAwB,UAAxB,GAAqCA,YAAY,CAAC;EAAEjP,IAAAA,CAAC,EAADA,CAAF;EAAKG,IAAAA,CAAC,EAADA;EAAL,GAAD,CAAjD,GAA8D;EAAEH,IAAAA,CAAC,EAADA,CAAF;EAAKG,IAAAA,CAAC,EAADA;EAAL,GAJ/D;;EAGEH,EAAAA,CAHF,SAGEA,CAHF;EAGKG,EAAAA,CAHL,SAGKA,CAHL;EAMD,MAAM+O,IAAI,GAAG7M,OAAO,CAAC8M,cAAR,CAAuB,GAAvB,CAAb;EACA,MAAMC,IAAI,GAAG/M,OAAO,CAAC8M,cAAR,CAAuB,GAAvB,CAAb;EAEA,MAAIE,KAAa,GAAGpP,IAApB;EACA,MAAIqP,KAAa,GAAGlP,GAApB;EAEA,MAAMK,GAAW,GAAGpD,MAApB;;EAEA,MAAI2R,QAAJ,EAAc;EACZ,QAAIhN,YAAY,GAAGsC,eAAe,CAACM,MAAD,CAAlC;EACA,QAAI2K,UAAU,GAAG,cAAjB;EACA,QAAIC,SAAS,GAAG,aAAhB;;EAEA,QAAIxN,YAAY,KAAK7E,SAAS,CAACyH,MAAD,CAA9B,EAAwC;EACtC5C,MAAAA,YAAY,GAAGb,kBAAkB,CAACyD,MAAD,CAAjC;;EAEA,UACErD,gBAAgB,CAACS,YAAD,CAAhB,CAA+B0B,QAA/B,KAA4C,QAA5C,IACAA,QAAQ,KAAK,UAFf,EAGE;EACA6L,QAAAA,UAAU,GAAG,cAAb;EACAC,QAAAA,SAAS,GAAG,aAAZ;EACD;EACF,KAfW;;;EAkBZxN,IAAAA,YAAY,GAAIA,YAAhB;;EAEA,QACEiI,SAAS,KAAK7J,GAAd,IACC,CAAC6J,SAAS,KAAKhK,IAAd,IAAsBgK,SAAS,KAAK3J,KAArC,KAA+CiK,SAAS,KAAK9F,GAFhE,EAGE;EACA6K,MAAAA,KAAK,GAAG/O,MAAR;EACA,UAAMkP,OAAO,GACXxN,OAAO,IAAID,YAAY,KAAKvB,GAA5B,IAAmCA,GAAG,CAACX,cAAvC,GACIW,GAAG,CAACX,cAAJ,CAAmBD,MADvB;EAGImC,MAAAA,YAAY,CAACuN,UAAD,CAJlB;EAKApP,MAAAA,CAAC,IAAIsP,OAAO,GAAGjE,UAAU,CAAC3L,MAA1B;EACAM,MAAAA,CAAC,IAAI4O,eAAe,GAAG,CAAH,GAAO,CAAC,CAA5B;EACD;;EAED,QACE9E,SAAS,KAAKhK,IAAd,IACC,CAACgK,SAAS,KAAK7J,GAAd,IAAqB6J,SAAS,KAAK1J,MAApC,KAA+CgK,SAAS,KAAK9F,GAFhE,EAGE;EACA4K,MAAAA,KAAK,GAAG/O,KAAR;EACA,UAAMoP,OAAO,GACXzN,OAAO,IAAID,YAAY,KAAKvB,GAA5B,IAAmCA,GAAG,CAACX,cAAvC,GACIW,GAAG,CAACX,cAAJ,CAAmBH,KADvB;EAGIqC,MAAAA,YAAY,CAACwN,SAAD,CAJlB;EAKAxP,MAAAA,CAAC,IAAI0P,OAAO,GAAGlE,UAAU,CAAC7L,KAA1B;EACAK,MAAAA,CAAC,IAAI+O,eAAe,GAAG,CAAH,GAAO,CAAC,CAA5B;EACD;EACF;;EAED,MAAMY,YAAY;EAChBjM,IAAAA,QAAQ,EAARA;EADgB,KAEZsL,QAAQ,IAAIN,UAFA,CAAlB;;EA/DC,cAqECO,YAAY,KAAK,IAAjB,GACIN,iBAAiB,CAAC;EAAE3O,IAAAA,CAAC,EAADA,CAAF;EAAKG,IAAAA,CAAC,EAADA;EAAL,GAAD,EAAWhD,SAAS,CAACyH,MAAD,CAApB,CADrB,GAEI;EAAE5E,IAAAA,CAAC,EAADA,CAAF;EAAKG,IAAAA,CAAC,EAADA;EAAL,GAvEL;;EAoEEH,EAAAA,CApEF,SAoEEA,CApEF;EAoEKG,EAAAA,CApEL,SAoEKA,CApEL;;EAyED,MAAI4O,eAAJ,EAAqB;EAAA;;EACnB,6BACKY,YADL,uCAEGL,KAFH,IAEWF,IAAI,GAAG,GAAH,GAAS,EAFxB,iBAGGC,KAHH,IAGWH,IAAI,GAAG,GAAH,GAAS,EAHxB,iBAOEjL,SAPF,GAQI,CAACxD,GAAG,CAACoO,gBAAJ,IAAwB,CAAzB,KAA+B,CAA/B,kBACiB7O,CADjB,YACyBG,CADzB,4BAEmBH,CAFnB,YAE2BG,CAF3B,WARJ;EAYD;;EAED,2BACKwP,YADL,yCAEGL,KAFH,IAEWF,IAAI,GAAMjP,CAAN,UAAc,EAF7B,kBAGGkP,KAHH,IAGWH,IAAI,GAAMlP,CAAN,UAAc,EAH7B,kBAIEiE,SAJF,GAIa,EAJb;EAMD;;EAED,SAAS2L,aAAT,QAAuE;EAAA,MAA9CzE,KAA8C,SAA9CA,KAA8C;EAAA,MAAvCxD,OAAuC,SAAvCA,OAAuC;EAAA,8BAMjEA,OANiE,CAEnEoH,eAFmE;EAAA,MAEnEA,eAFmE,sCAEjD,IAFiD;EAAA,0BAMjEpH,OANiE,CAGnEqH,QAHmE;EAAA,MAGnEA,QAHmE,kCAGxD,IAHwD;EAAA,8BAMjErH,OANiE,CAKnEsH,YALmE;EAAA,MAKnEA,YALmE,sCAKpD,IALoD;EAQrE,MAAMU,YAAY,GAAG;EACnB1F,IAAAA,SAAS,EAAED,gBAAgB,CAACmB,KAAK,CAAClB,SAAP,CADR;EAEnBM,IAAAA,SAAS,EAAEJ,YAAY,CAACgB,KAAK,CAAClB,SAAP,CAFJ;EAGnBrF,IAAAA,MAAM,EAAEuG,KAAK,CAACO,QAAN,CAAe9G,MAHJ;EAInB4G,IAAAA,UAAU,EAAEL,KAAK,CAACM,KAAN,CAAY7G,MAJL;EAKnBmK,IAAAA,eAAe,EAAfA,eALmB;EAMnB9M,IAAAA,OAAO,EAAEkJ,KAAK,CAACxD,OAAN,CAAcM,QAAd,KAA2B;EANjB,GAArB;;EASA,MAAIkD,KAAK,CAACgB,aAAN,CAAoBL,aAApB,IAAqC,IAAzC,EAA+C;EAC7CX,IAAAA,KAAK,CAAC8B,MAAN,CAAarI,MAAb,qBACKuG,KAAK,CAAC8B,MAAN,CAAarI,MADlB,EAEKkK,WAAW,mBACTa,YADS;EAEZtN,MAAAA,OAAO,EAAE8I,KAAK,CAACgB,aAAN,CAAoBL,aAFjB;EAGZpI,MAAAA,QAAQ,EAAEyH,KAAK,CAACxD,OAAN,CAAcM,QAHZ;EAIZ+G,MAAAA,QAAQ,EAARA,QAJY;EAKZC,MAAAA,YAAY,EAAZA;EALY,OAFhB;EAUD;;EAED,MAAI9D,KAAK,CAACgB,aAAN,CAAoB0D,KAApB,IAA6B,IAAjC,EAAuC;EACrC1E,IAAAA,KAAK,CAAC8B,MAAN,CAAa4C,KAAb,qBACK1E,KAAK,CAAC8B,MAAN,CAAa4C,KADlB,EAEKf,WAAW,mBACTa,YADS;EAEZtN,MAAAA,OAAO,EAAE8I,KAAK,CAACgB,aAAN,CAAoB0D,KAFjB;EAGZnM,MAAAA,QAAQ,EAAE,UAHE;EAIZsL,MAAAA,QAAQ,EAAE,KAJE;EAKZC,MAAAA,YAAY,EAAZA;EALY,OAFhB;EAUD;;EAED9D,EAAAA,KAAK,CAAC6B,UAAN,CAAiBpI,MAAjB,qBACKuG,KAAK,CAAC6B,UAAN,CAAiBpI,MADtB;EAEE,6BAAyBuG,KAAK,CAAClB;EAFjC;EAID;;;AAID,wBAAgB;EACdhE,EAAAA,IAAI,EAAE,eADQ;EAEdyH,EAAAA,OAAO,EAAE,IAFK;EAGd3G,EAAAA,KAAK,EAAE,aAHO;EAIdE,EAAAA,EAAE,EAAE2I,aAJU;EAKdhI,EAAAA,IAAI,EAAE;EALQ,CAAhB;;EC5NA;;EAEA,SAASkI,WAAT,OAAyD;EAAA,MAAlC3E,KAAkC,QAAlCA,KAAkC;EACvDtD,EAAAA,MAAM,CAACC,IAAP,CAAYqD,KAAK,CAACO,QAAlB,EAA4B5F,OAA5B,CAAoC,UAACG,IAAD,EAAU;EAC5C,QAAM8J,KAAK,GAAG5E,KAAK,CAAC8B,MAAN,CAAahH,IAAb,KAAsB,EAApC;EAEA,QAAM+G,UAAU,GAAG7B,KAAK,CAAC6B,UAAN,CAAiB/G,IAAjB,KAA0B,EAA7C;EACA,QAAM7G,OAAO,GAAG+L,KAAK,CAACO,QAAN,CAAezF,IAAf,CAAhB,CAJ4C;;EAO5C,QAAI,CAACrI,aAAa,CAACwB,OAAD,CAAd,IAA2B,CAAC4B,WAAW,CAAC5B,OAAD,CAA3C,EAAsD;EACpD;EACD,KAT2C;EAY5C;EACA;;;EACAyI,IAAAA,MAAM,CAACmI,MAAP,CAAc5Q,OAAO,CAAC2Q,KAAtB,EAA6BA,KAA7B;EAEAlI,IAAAA,MAAM,CAACC,IAAP,CAAYkF,UAAZ,EAAwBlH,OAAxB,CAAgC,UAACG,IAAD,EAAU;EACxC,UAAM+E,KAAK,GAAGgC,UAAU,CAAC/G,IAAD,CAAxB;;EACA,UAAI+E,KAAK,KAAK,KAAd,EAAqB;EACnB5L,QAAAA,OAAO,CAAC6Q,eAAR,CAAwBhK,IAAxB;EACD,OAFD,MAEO;EACL7G,QAAAA,OAAO,CAAC8Q,YAAR,CAAqBjK,IAArB,EAA2B+E,KAAK,KAAK,IAAV,GAAiB,EAAjB,GAAsBA,KAAjD;EACD;EACF,KAPD;EAQD,GAxBD;EAyBD;;EAED,SAASmD,MAAT,QAAoD;EAAA,MAAlChD,KAAkC,SAAlCA,KAAkC;EAClD,MAAMgF,aAAa,GAAG;EACpBvL,IAAAA,MAAM,EAAE;EACNlB,MAAAA,QAAQ,EAAEyH,KAAK,CAACxD,OAAN,CAAcM,QADlB;EAENhI,MAAAA,IAAI,EAAE,GAFA;EAGNG,MAAAA,GAAG,EAAE,GAHC;EAINgQ,MAAAA,MAAM,EAAE;EAJF,KADY;EAOpBP,IAAAA,KAAK,EAAE;EACLnM,MAAAA,QAAQ,EAAE;EADL,KAPa;EAUpBmB,IAAAA,SAAS,EAAE;EAVS,GAAtB;EAaAgD,EAAAA,MAAM,CAACmI,MAAP,CAAc7E,KAAK,CAACO,QAAN,CAAe9G,MAAf,CAAsBmL,KAApC,EAA2CI,aAAa,CAACvL,MAAzD;EACAuG,EAAAA,KAAK,CAAC8B,MAAN,GAAekD,aAAf;;EAEA,MAAIhF,KAAK,CAACO,QAAN,CAAemE,KAAnB,EAA0B;EACxBhI,IAAAA,MAAM,CAACmI,MAAP,CAAc7E,KAAK,CAACO,QAAN,CAAemE,KAAf,CAAqBE,KAAnC,EAA0CI,aAAa,CAACN,KAAxD;EACD;;EAED,SAAO,YAAM;EACXhI,IAAAA,MAAM,CAACC,IAAP,CAAYqD,KAAK,CAACO,QAAlB,EAA4B5F,OAA5B,CAAoC,UAACG,IAAD,EAAU;EAC5C,UAAM7G,OAAO,GAAG+L,KAAK,CAACO,QAAN,CAAezF,IAAf,CAAhB;EACA,UAAM+G,UAAU,GAAG7B,KAAK,CAAC6B,UAAN,CAAiB/G,IAAjB,KAA0B,EAA7C;EAEA,UAAMoK,eAAe,GAAGxI,MAAM,CAACC,IAAP,CACtBqD,KAAK,CAAC8B,MAAN,CAAakC,cAAb,CAA4BlJ,IAA5B,IACIkF,KAAK,CAAC8B,MAAN,CAAahH,IAAb,CADJ,GAEIkK,aAAa,CAAClK,IAAD,CAHK,CAAxB,CAJ4C;;EAW5C,UAAM8J,KAAK,GAAGM,eAAe,CAACxJ,MAAhB,CAAuB,UAACkJ,KAAD,EAAQO,QAAR,EAAqB;EACxDP,QAAAA,KAAK,CAACO,QAAD,CAAL,GAAkB,EAAlB;EACA,eAAOP,KAAP;EACD,OAHa,EAGX,EAHW,CAAd,CAX4C;;EAiB5C,UAAI,CAACnS,aAAa,CAACwB,OAAD,CAAd,IAA2B,CAAC4B,WAAW,CAAC5B,OAAD,CAA3C,EAAsD;EACpD;EACD;;EAEDyI,MAAAA,MAAM,CAACmI,MAAP,CAAc5Q,OAAO,CAAC2Q,KAAtB,EAA6BA,KAA7B;EAEAlI,MAAAA,MAAM,CAACC,IAAP,CAAYkF,UAAZ,EAAwBlH,OAAxB,CAAgC,UAACyK,SAAD,EAAe;EAC7CnR,QAAAA,OAAO,CAAC6Q,eAAR,CAAwBM,SAAxB;EACD,OAFD;EAGD,KA1BD;EA2BD,GA5BD;EA6BD;;;AAID,sBAAgB;EACdtK,EAAAA,IAAI,EAAE,aADQ;EAEdyH,EAAAA,OAAO,EAAE,IAFK;EAGd3G,EAAAA,KAAK,EAAE,OAHO;EAIdE,EAAAA,EAAE,EAAE6I,WAJU;EAKd3B,EAAAA,MAAM,EAANA,MALc;EAMd/H,EAAAA,QAAQ,EAAE,CAAC,eAAD;EANI,CAAhB;;MChFMyG,gBAAgB,GAAG,CACvB2D,cADuB,EAEvB1E,eAFuB,EAGvB8D,eAHuB,EAIvBE,aAJuB;MAOnB/C,YAAY,gBAAGJ,eAAe,CAAC;EAAEE,EAAAA,gBAAgB,EAAhBA;EAAF,CAAD;;;;;;;;;"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper-lite.min.js b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1173513aa3617735d761603e4977620bb737677
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js
@@ -0,0 +1,6 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function o(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function r(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function u(e,r,i){void 0===r&&(r=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,u=1;r&&o(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,u=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var l=(n(e)?t(e):window).visualViewport,p=!c()&&i,d=(a.left+(p&&l?l.offsetLeft:0))/f,h=(a.top+(p&&l?l.offsetTop:0))/u,v=a.width/f,m=a.height/u;return{width:v,height:m,top:h,right:d+v,bottom:h+m,left:d,x:d,y:h}}function l(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function p(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return u(d(e)).left+l(e).scrollLeft}function v(e){return t(e).getComputedStyle(e)}function m(e){var t=v(e),n=t.overflow,o=t.overflowX,r=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+r+o)}function g(e,n,r){void 0===r&&(r=!1);var i,a,f=o(n),c=o(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,o=s(t.height)/e.offsetHeight||1;return 1!==n||1!==o}(n),v=d(n),g=u(e,c,r),y={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!r)&&(("body"!==p(n)||m(v))&&(y=(i=n)!==t(i)&&o(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:l(i)),o(n)?((b=u(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):v&&(b.x=h(v))),{x:g.left+y.scrollLeft-b.x,y:g.top+y.scrollTop-b.y,width:g.width,height:g.height}}function y(e){return"html"===p(e)?e:e.assignedSlot||e.parentNode||(r(e)?e.host:null)||d(e)}function b(e){return["html","body","#document"].indexOf(p(e))>=0?e.ownerDocument.body:o(e)&&m(e)?e:b(y(e))}function w(e,n){var o;void 0===n&&(n=[]);var r=b(e),i=r===(null==(o=e.ownerDocument)?void 0:o.body),a=t(r),s=i?[a].concat(a.visualViewport||[],m(r)?r:[]):r,f=n.concat(s);return i?f:f.concat(w(y(s)))}function x(e){return["table","td","th"].indexOf(p(e))>=0}function O(e){return o(e)&&"fixed"!==v(e).position?e.offsetParent:null}function j(e){for(var n=t(e),i=O(e);i&&x(i)&&"static"===v(i).position;)i=O(i);return i&&("html"===p(i)||"body"===p(i)&&"static"===v(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&o(e)&&"fixed"===v(e).position)return null;var n=y(e);for(r(n)&&(n=n.host);o(n)&&["html","body"].indexOf(p(n))<0;){var i=v(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var E="top",L="bottom",M="right",W="left",P=[E,L,M,W],T="end",H="viewport",D="popper",R=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function k(e){var t=new Map,n=new Set,o=[];function r(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var o=t.get(e);o&&r(o)}})),o.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||r(e)})),o}function A(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function S(e,o,r){return o===H?A(function(e,n){var o=t(e),r=d(e),i=o.visualViewport,a=r.clientWidth,s=r.clientHeight,f=0,u=0;if(i){a=i.width,s=i.height;var l=c();(l||!l&&"fixed"===n)&&(f=i.offsetLeft,u=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:u}}(e,r)):n(o)?function(e,t){var n=u(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(o,r):A(function(e){var t,n=d(e),o=l(e),r=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,r?r.scrollWidth:0,r?r.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,r?r.scrollHeight:0,r?r.clientHeight:0),f=-o.scrollLeft+h(e),c=-o.scrollTop;return"rtl"===v(r||n).direction&&(f+=i(n.clientWidth,r?r.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function C(e){var t=w(y(e)),i=["absolute","fixed"].indexOf(v(e).position)>=0&&o(e)?j(e):e;return n(i)?t.filter((function(e){return n(e)&&function(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&r(n)){var o=t;do{if(o&&e.isSameNode(o))return!0;o=o.parentNode||o.host}while(o)}return!1}(e,i)&&"body"!==p(e)})):[]}function V(e){return e.split("-")[0]}function N(e){return e.split("-")[1]}function B(e){var t,n=e.reference,o=e.element,r=e.placement,i=r?V(r):null,a=r?N(r):null,s=n.x+n.width/2-o.width/2,f=n.y+n.height/2-o.height/2;switch(i){case E:t={x:s,y:n.y-o.height};break;case L:t={x:s,y:n.y+n.height};break;case M:t={x:n.x+n.width,y:f};break;case W:t={x:n.x-o.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?function(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}(i):null;if(null!=c){var u="y"===c?"height":"width";switch(a){case"start":t[c]=t[c]-(n[u]/2-o[u]/2);break;case T:t[c]=t[c]+(n[u]/2-o[u]/2)}}return t}var F={placement:"bottom",modifiers:[],strategy:"absolute"};function U(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function q(e){void 0===e&&(e={});var t=e,o=t.defaultModifiers,r=void 0===o?[]:o,i=t.defaultOptions,a=void 0===i?F:i;return function(e,t,o){void 0===o&&(o=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},F,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],l=!1,p={state:f,setOptions:function(o){var i="function"==typeof o?o(f.options):o;d(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?w(e):e.contextElement?w(e.contextElement):[],popper:w(t)};var s,u,l=function(e){var t=k(e);return R.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(r,f.options.modifiers),u=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(u).map((function(e){return u[e]}))));return f.orderedModifiers=l.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,o=void 0===n?{}:n,r=e.effect;if("function"==typeof r){var i=r({state:f,name:t,instance:p,options:o}),a=function(){};c.push(i||a)}})),p.update()},forceUpdate:function(){if(!l){var e=f.elements,t=e.reference,n=e.popper;if(U(t,n)){var o,r,i,a;f.rects={reference:g(t,j(n),"fixed"===f.options.strategy),popper:(o=n,r=u(o),i=o.offsetWidth,a=o.offsetHeight,Math.abs(r.width-i)<=1&&(i=r.width),Math.abs(r.height-a)<=1&&(a=r.height),{x:o.offsetLeft,y:o.offsetTop,width:i,height:a})},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var s=0;s<f.orderedModifiers.length;s++)if(!0!==f.reset){var c=f.orderedModifiers[s],d=c.fn,h=c.options,v=void 0===h?{}:h,m=c.name;"function"==typeof d&&(f=d({state:f,options:v,name:m,instance:p})||f)}else f.reset=!1,s=-1}}},update:(i=function(){return new Promise((function(e){p.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){d(),l=!0}};if(!U(e,t))return p;function d(){c.forEach((function(e){return e()})),c=[]}return p.setOptions(o).then((function(e){!l&&o.onFirstUpdate&&o.onFirstUpdate(e)})),p}}var z={passive:!0};var X={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Y(e){var n,o=e.popper,r=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,u=e.gpuAcceleration,l=e.adaptive,p=e.roundOffsets,h=e.isFixed,m=f.x,g=void 0===m?0:m,y=f.y,b=void 0===y?0:y,w="function"==typeof p?p({x:g,y:b}):{x:g,y:b};g=w.x,b=w.y;var x=f.hasOwnProperty("x"),O=f.hasOwnProperty("y"),P=W,H=E,D=window;if(l){var R=j(o),k="clientHeight",A="clientWidth";if(R===t(o)&&"static"!==v(R=d(o)).position&&"absolute"===c&&(k="scrollHeight",A="scrollWidth"),R=R,i===E||(i===W||i===M)&&a===T)H=L,b-=(h&&R===D&&D.visualViewport?D.visualViewport.height:R[k])-r.height,b*=u?1:-1;if(i===W||(i===E||i===L)&&a===T)P=M,g-=(h&&R===D&&D.visualViewport?D.visualViewport.width:R[A])-r.width,g*=u?1:-1}var S,C=Object.assign({position:c},l&&X),V=!0===p?function(e,t){var n=e.x,o=e.y,r=t.devicePixelRatio||1;return{x:s(n*r)/r||0,y:s(o*r)/r||0}}({x:g,y:b},t(o)):{x:g,y:b};return g=V.x,b=V.y,u?Object.assign({},C,((S={})[H]=O?"0":"",S[P]=x?"0":"",S.transform=(D.devicePixelRatio||1)<=1?"translate("+g+"px, "+b+"px)":"translate3d("+g+"px, "+b+"px, 0)",S)):Object.assign({},C,((n={})[H]=O?b+"px":"",n[P]=x?g+"px":"",n.transform="",n))}var _=[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,o=e.instance,r=e.options,i=r.scroll,a=void 0===i||i,s=r.resize,f=void 0===s||s,c=t(n.elements.popper),u=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&u.forEach((function(e){e.addEventListener("scroll",o.update,z)})),f&&c.addEventListener("resize",o.update,z),function(){a&&u.forEach((function(e){e.removeEventListener("scroll",o.update,z)})),f&&c.removeEventListener("resize",o.update,z)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=B({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,o=n.gpuAcceleration,r=void 0===o||o,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:V(t.placement),variation:N(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:r,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,Y(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,Y(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];o(i)&&p(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});o(r)&&p(r)&&(Object.assign(r.style,a),Object.keys(i).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]}],G=q({defaultModifiers:_});e.createPopper=G,e.defaultModifiers=_,e.detectOverflow=function(e,t){void 0===t&&(t={});var o,r=t,s=r.placement,f=void 0===s?e.placement:s,c=r.strategy,l=void 0===c?e.strategy:c,p=r.boundary,h=void 0===p?"clippingParents":p,v=r.rootBoundary,m=void 0===v?H:v,g=r.elementContext,y=void 0===g?D:g,b=r.altBoundary,w=void 0!==b&&b,x=r.padding,O=void 0===x?0:x,j=function(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}("number"!=typeof O?O:(o=O,P.reduce((function(e,t){return e[t]=o,e}),{}))),W=y===D?"reference":D,T=e.rects.popper,R=e.elements[w?W:y],k=function(e,t,n,o){var r="clippingParents"===t?C(e):[].concat(t),s=[].concat(r,[n]),f=s[0],c=s.reduce((function(t,n){var r=S(e,n,o);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),S(e,f,o));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c}(n(R)?R:R.contextElement||d(e.elements.popper),h,m,l),V=u(e.elements.reference),N=B({reference:V,element:T,strategy:"absolute",placement:f}),F=A(Object.assign({},T,N)),U=y===D?F:V,q={top:k.top-U.top+j.top,bottom:U.bottom-k.bottom+j.bottom,left:k.left-U.left+j.left,right:U.right-k.right+j.right},z=e.modifiersData.offset;if(y===D&&z){var X=z[f];Object.keys(q).forEach((function(e){var t=[M,L].indexOf(e)>=0?1:-1,n=[E,L].indexOf(e)>=0?"y":"x";q[e]+=X[n]*t}))}return q},e.popperGenerator=q,Object.defineProperty(e,"__esModule",{value:!0})}));
+//# sourceMappingURL=popper-lite.min.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.flow b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8658c44fb7105873656e034d61cd69e8114867e4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper-lite.js'
diff --git a/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.map b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..16b3db296b4a9fafc63dd1b249db9859b6115e9e
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper-lite.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper-lite.min.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/computeOffsets.js","../../src/utils/getMainAxisFromPlacement.js","../../src/createPopper.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getLayoutRect.js","../../src/modifiers/eventListeners.js","../../src/modifiers/computeStyles.js","../../src/popper-lite.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/applyStyles.js","../../src/utils/detectOverflow.js","../../src/utils/expandToHashMap.js","../../src/utils/mergePaddingObject.js","../../src/utils/getFreshSideObject.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","clientLeft","clientTop","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","_element$ownerDocumen","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","basePlacements","end","viewport","popper","modifierPhases","order","modifiers","Map","visited","Set","result","sort","modifier","add","name","requires","requiresIfExists","forEach","dep","has","depModifier","get","push","set","rectToClientRect","getClientRectFromMixedType","clippingParent","strategy","html","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingParents","clippingParents","clipperElement","parent","child","rootNode","getRootNode","contains","next","isSameNode","getBasePlacement","placement","split","getVariation","computeOffsets","reference","basePlacement","variation","commonX","commonY","mainAxis","getMainAxisFromPlacement","len","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","options","fn","pending","state","orderedModifiers","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","merged","reduce","acc","phase","orderModifiers","current","existing","data","Object","keys","key","m","enabled","effect","cleanupFn","noopFn","update","forceUpdate","rects","abs","reset","index","length","Promise","resolve","then","undefined","destroy","onFirstUpdate","passive","unsetSides","mapToStyles","popperRect","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","resize","addEventListener","removeEventListener","popperOffsets","arrow","style","assign","value","removeAttribute","setAttribute","initialStyles","margin","property","attribute","createPopper","boundary","rootBoundary","elementContext","altBoundary","padding","paddingObject","mergePaddingObject","hashMap","altContext","clippingClientRect","mainClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","offset","multiply","axis"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper.js b/node_modules/@popperjs/core/dist/umd/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..a00f13995f6ec9133ddfbd98a01427bff11956b4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper.js
@@ -0,0 +1,1825 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Popper = {}));
+}(this, (function (exports) { 'use strict';
+
+  function getWindow(node) {
+    if (node == null) {
+      return window;
+    }
+
+    if (node.toString() !== '[object Window]') {
+      var ownerDocument = node.ownerDocument;
+      return ownerDocument ? ownerDocument.defaultView || window : window;
+    }
+
+    return node;
+  }
+
+  function isElement(node) {
+    var OwnElement = getWindow(node).Element;
+    return node instanceof OwnElement || node instanceof Element;
+  }
+
+  function isHTMLElement(node) {
+    var OwnElement = getWindow(node).HTMLElement;
+    return node instanceof OwnElement || node instanceof HTMLElement;
+  }
+
+  function isShadowRoot(node) {
+    // IE 11 has no ShadowRoot
+    if (typeof ShadowRoot === 'undefined') {
+      return false;
+    }
+
+    var OwnElement = getWindow(node).ShadowRoot;
+    return node instanceof OwnElement || node instanceof ShadowRoot;
+  }
+
+  var max = Math.max;
+  var min = Math.min;
+  var round = Math.round;
+
+  function getUAString() {
+    var uaData = navigator.userAgentData;
+
+    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+      return uaData.brands.map(function (item) {
+        return item.brand + "/" + item.version;
+      }).join(' ');
+    }
+
+    return navigator.userAgent;
+  }
+
+  function isLayoutViewport() {
+    return !/^((?!chrome|android).)*safari/i.test(getUAString());
+  }
+
+  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+    if (includeScale === void 0) {
+      includeScale = false;
+    }
+
+    if (isFixedStrategy === void 0) {
+      isFixedStrategy = false;
+    }
+
+    var clientRect = element.getBoundingClientRect();
+    var scaleX = 1;
+    var scaleY = 1;
+
+    if (includeScale && isHTMLElement(element)) {
+      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+    }
+
+    var _ref = isElement(element) ? getWindow(element) : window,
+        visualViewport = _ref.visualViewport;
+
+    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+    var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+    var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+    var width = clientRect.width / scaleX;
+    var height = clientRect.height / scaleY;
+    return {
+      width: width,
+      height: height,
+      top: y,
+      right: x + width,
+      bottom: y + height,
+      left: x,
+      x: x,
+      y: y
+    };
+  }
+
+  function getWindowScroll(node) {
+    var win = getWindow(node);
+    var scrollLeft = win.pageXOffset;
+    var scrollTop = win.pageYOffset;
+    return {
+      scrollLeft: scrollLeft,
+      scrollTop: scrollTop
+    };
+  }
+
+  function getHTMLElementScroll(element) {
+    return {
+      scrollLeft: element.scrollLeft,
+      scrollTop: element.scrollTop
+    };
+  }
+
+  function getNodeScroll(node) {
+    if (node === getWindow(node) || !isHTMLElement(node)) {
+      return getWindowScroll(node);
+    } else {
+      return getHTMLElementScroll(node);
+    }
+  }
+
+  function getNodeName(element) {
+    return element ? (element.nodeName || '').toLowerCase() : null;
+  }
+
+  function getDocumentElement(element) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+    element.document) || window.document).documentElement;
+  }
+
+  function getWindowScrollBarX(element) {
+    // If <html> has a CSS width greater than the viewport, then this will be
+    // incorrect for RTL.
+    // Popper 1 is broken in this case and never had a bug report so let's assume
+    // it's not an issue. I don't think anyone ever specifies width on <html>
+    // anyway.
+    // Browsers where the left scrollbar doesn't cause an issue report `0` for
+    // this (e.g. Edge 2019, IE11, Safari)
+    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+  }
+
+  function getComputedStyle(element) {
+    return getWindow(element).getComputedStyle(element);
+  }
+
+  function isScrollParent(element) {
+    // Firefox wants us to check `-x` and `-y` variations as well
+    var _getComputedStyle = getComputedStyle(element),
+        overflow = _getComputedStyle.overflow,
+        overflowX = _getComputedStyle.overflowX,
+        overflowY = _getComputedStyle.overflowY;
+
+    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+  }
+
+  function isElementScaled(element) {
+    var rect = element.getBoundingClientRect();
+    var scaleX = round(rect.width) / element.offsetWidth || 1;
+    var scaleY = round(rect.height) / element.offsetHeight || 1;
+    return scaleX !== 1 || scaleY !== 1;
+  } // Returns the composite rect of an element relative to its offsetParent.
+  // Composite means it takes into account transforms as well as layout.
+
+
+  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+    if (isFixed === void 0) {
+      isFixed = false;
+    }
+
+    var isOffsetParentAnElement = isHTMLElement(offsetParent);
+    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+    var documentElement = getDocumentElement(offsetParent);
+    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+    var scroll = {
+      scrollLeft: 0,
+      scrollTop: 0
+    };
+    var offsets = {
+      x: 0,
+      y: 0
+    };
+
+    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+      if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+      isScrollParent(documentElement)) {
+        scroll = getNodeScroll(offsetParent);
+      }
+
+      if (isHTMLElement(offsetParent)) {
+        offsets = getBoundingClientRect(offsetParent, true);
+        offsets.x += offsetParent.clientLeft;
+        offsets.y += offsetParent.clientTop;
+      } else if (documentElement) {
+        offsets.x = getWindowScrollBarX(documentElement);
+      }
+    }
+
+    return {
+      x: rect.left + scroll.scrollLeft - offsets.x,
+      y: rect.top + scroll.scrollTop - offsets.y,
+      width: rect.width,
+      height: rect.height
+    };
+  }
+
+  // means it doesn't take into account transforms.
+
+  function getLayoutRect(element) {
+    var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+    // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+    var width = element.offsetWidth;
+    var height = element.offsetHeight;
+
+    if (Math.abs(clientRect.width - width) <= 1) {
+      width = clientRect.width;
+    }
+
+    if (Math.abs(clientRect.height - height) <= 1) {
+      height = clientRect.height;
+    }
+
+    return {
+      x: element.offsetLeft,
+      y: element.offsetTop,
+      width: width,
+      height: height
+    };
+  }
+
+  function getParentNode(element) {
+    if (getNodeName(element) === 'html') {
+      return element;
+    }
+
+    return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+      // $FlowFixMe[incompatible-return]
+      // $FlowFixMe[prop-missing]
+      element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+      element.parentNode || ( // DOM Element detected
+      isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+      // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+      getDocumentElement(element) // fallback
+
+    );
+  }
+
+  function getScrollParent(node) {
+    if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+      // $FlowFixMe[incompatible-return]: assume body is always available
+      return node.ownerDocument.body;
+    }
+
+    if (isHTMLElement(node) && isScrollParent(node)) {
+      return node;
+    }
+
+    return getScrollParent(getParentNode(node));
+  }
+
+  /*
+  given a DOM element, return the list of all scroll parents, up the list of ancesors
+  until we get to the top window object. This list is what we attach scroll listeners
+  to, because if any of these parent elements scroll, we'll need to re-calculate the
+  reference element's position.
+  */
+
+  function listScrollParents(element, list) {
+    var _element$ownerDocumen;
+
+    if (list === void 0) {
+      list = [];
+    }
+
+    var scrollParent = getScrollParent(element);
+    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+    var win = getWindow(scrollParent);
+    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+    var updatedList = list.concat(target);
+    return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+    updatedList.concat(listScrollParents(getParentNode(target)));
+  }
+
+  function isTableElement(element) {
+    return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+  }
+
+  function getTrueOffsetParent(element) {
+    if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+    getComputedStyle(element).position === 'fixed') {
+      return null;
+    }
+
+    return element.offsetParent;
+  } // `.offsetParent` reports `null` for fixed elements, while absolute elements
+  // return the containing block
+
+
+  function getContainingBlock(element) {
+    var isFirefox = /firefox/i.test(getUAString());
+    var isIE = /Trident/i.test(getUAString());
+
+    if (isIE && isHTMLElement(element)) {
+      // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+      var elementCss = getComputedStyle(element);
+
+      if (elementCss.position === 'fixed') {
+        return null;
+      }
+    }
+
+    var currentNode = getParentNode(element);
+
+    if (isShadowRoot(currentNode)) {
+      currentNode = currentNode.host;
+    }
+
+    while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+      var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+      // create a containing block.
+      // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+      if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+        return currentNode;
+      } else {
+        currentNode = currentNode.parentNode;
+      }
+    }
+
+    return null;
+  } // Gets the closest ancestor positioned element. Handles some edge cases,
+  // such as table ancestors and cross browser bugs.
+
+
+  function getOffsetParent(element) {
+    var window = getWindow(element);
+    var offsetParent = getTrueOffsetParent(element);
+
+    while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+      offsetParent = getTrueOffsetParent(offsetParent);
+    }
+
+    if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+      return window;
+    }
+
+    return offsetParent || getContainingBlock(element) || window;
+  }
+
+  var top = 'top';
+  var bottom = 'bottom';
+  var right = 'right';
+  var left = 'left';
+  var auto = 'auto';
+  var basePlacements = [top, bottom, right, left];
+  var start = 'start';
+  var end = 'end';
+  var clippingParents = 'clippingParents';
+  var viewport = 'viewport';
+  var popper = 'popper';
+  var reference = 'reference';
+  var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+    return acc.concat([placement + "-" + start, placement + "-" + end]);
+  }, []);
+  var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+    return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+  }, []); // modifiers that need to read the DOM
+
+  var beforeRead = 'beforeRead';
+  var read = 'read';
+  var afterRead = 'afterRead'; // pure-logic modifiers
+
+  var beforeMain = 'beforeMain';
+  var main = 'main';
+  var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+  var beforeWrite = 'beforeWrite';
+  var write = 'write';
+  var afterWrite = 'afterWrite';
+  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+  function order(modifiers) {
+    var map = new Map();
+    var visited = new Set();
+    var result = [];
+    modifiers.forEach(function (modifier) {
+      map.set(modifier.name, modifier);
+    }); // On visiting object, check for its dependencies and visit them recursively
+
+    function sort(modifier) {
+      visited.add(modifier.name);
+      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+      requires.forEach(function (dep) {
+        if (!visited.has(dep)) {
+          var depModifier = map.get(dep);
+
+          if (depModifier) {
+            sort(depModifier);
+          }
+        }
+      });
+      result.push(modifier);
+    }
+
+    modifiers.forEach(function (modifier) {
+      if (!visited.has(modifier.name)) {
+        // check for visited object
+        sort(modifier);
+      }
+    });
+    return result;
+  }
+
+  function orderModifiers(modifiers) {
+    // order based on dependencies
+    var orderedModifiers = order(modifiers); // order based on phase
+
+    return modifierPhases.reduce(function (acc, phase) {
+      return acc.concat(orderedModifiers.filter(function (modifier) {
+        return modifier.phase === phase;
+      }));
+    }, []);
+  }
+
+  function debounce(fn) {
+    var pending;
+    return function () {
+      if (!pending) {
+        pending = new Promise(function (resolve) {
+          Promise.resolve().then(function () {
+            pending = undefined;
+            resolve(fn());
+          });
+        });
+      }
+
+      return pending;
+    };
+  }
+
+  function mergeByName(modifiers) {
+    var merged = modifiers.reduce(function (merged, current) {
+      var existing = merged[current.name];
+      merged[current.name] = existing ? Object.assign({}, existing, current, {
+        options: Object.assign({}, existing.options, current.options),
+        data: Object.assign({}, existing.data, current.data)
+      }) : current;
+      return merged;
+    }, {}); // IE11 does not support Object.values
+
+    return Object.keys(merged).map(function (key) {
+      return merged[key];
+    });
+  }
+
+  function getViewportRect(element, strategy) {
+    var win = getWindow(element);
+    var html = getDocumentElement(element);
+    var visualViewport = win.visualViewport;
+    var width = html.clientWidth;
+    var height = html.clientHeight;
+    var x = 0;
+    var y = 0;
+
+    if (visualViewport) {
+      width = visualViewport.width;
+      height = visualViewport.height;
+      var layoutViewport = isLayoutViewport();
+
+      if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+        x = visualViewport.offsetLeft;
+        y = visualViewport.offsetTop;
+      }
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x + getWindowScrollBarX(element),
+      y: y
+    };
+  }
+
+  // of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+  function getDocumentRect(element) {
+    var _element$ownerDocumen;
+
+    var html = getDocumentElement(element);
+    var winScroll = getWindowScroll(element);
+    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+    var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+    var y = -winScroll.scrollTop;
+
+    if (getComputedStyle(body || html).direction === 'rtl') {
+      x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+    }
+
+    return {
+      width: width,
+      height: height,
+      x: x,
+      y: y
+    };
+  }
+
+  function contains(parent, child) {
+    var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+    if (parent.contains(child)) {
+      return true;
+    } // then fallback to custom implementation with Shadow DOM support
+    else if (rootNode && isShadowRoot(rootNode)) {
+        var next = child;
+
+        do {
+          if (next && parent.isSameNode(next)) {
+            return true;
+          } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+          next = next.parentNode || next.host;
+        } while (next);
+      } // Give up, the result is false
+
+
+    return false;
+  }
+
+  function rectToClientRect(rect) {
+    return Object.assign({}, rect, {
+      left: rect.x,
+      top: rect.y,
+      right: rect.x + rect.width,
+      bottom: rect.y + rect.height
+    });
+  }
+
+  function getInnerBoundingClientRect(element, strategy) {
+    var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+    rect.top = rect.top + element.clientTop;
+    rect.left = rect.left + element.clientLeft;
+    rect.bottom = rect.top + element.clientHeight;
+    rect.right = rect.left + element.clientWidth;
+    rect.width = element.clientWidth;
+    rect.height = element.clientHeight;
+    rect.x = rect.left;
+    rect.y = rect.top;
+    return rect;
+  }
+
+  function getClientRectFromMixedType(element, clippingParent, strategy) {
+    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+  } // A "clipping parent" is an overflowable container with the characteristic of
+  // clipping (or hiding) overflowing elements with a position different from
+  // `initial`
+
+
+  function getClippingParents(element) {
+    var clippingParents = listScrollParents(getParentNode(element));
+    var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+    if (!isElement(clipperElement)) {
+      return [];
+    } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+    return clippingParents.filter(function (clippingParent) {
+      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+    });
+  } // Gets the maximum area that the element is visible in due to any number of
+  // clipping parents
+
+
+  function getClippingRect(element, boundary, rootBoundary, strategy) {
+    var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+    var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+    var firstClippingParent = clippingParents[0];
+    var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+      accRect.top = max(rect.top, accRect.top);
+      accRect.right = min(rect.right, accRect.right);
+      accRect.bottom = min(rect.bottom, accRect.bottom);
+      accRect.left = max(rect.left, accRect.left);
+      return accRect;
+    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+    clippingRect.width = clippingRect.right - clippingRect.left;
+    clippingRect.height = clippingRect.bottom - clippingRect.top;
+    clippingRect.x = clippingRect.left;
+    clippingRect.y = clippingRect.top;
+    return clippingRect;
+  }
+
+  function getBasePlacement(placement) {
+    return placement.split('-')[0];
+  }
+
+  function getVariation(placement) {
+    return placement.split('-')[1];
+  }
+
+  function getMainAxisFromPlacement(placement) {
+    return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+  }
+
+  function computeOffsets(_ref) {
+    var reference = _ref.reference,
+        element = _ref.element,
+        placement = _ref.placement;
+    var basePlacement = placement ? getBasePlacement(placement) : null;
+    var variation = placement ? getVariation(placement) : null;
+    var commonX = reference.x + reference.width / 2 - element.width / 2;
+    var commonY = reference.y + reference.height / 2 - element.height / 2;
+    var offsets;
+
+    switch (basePlacement) {
+      case top:
+        offsets = {
+          x: commonX,
+          y: reference.y - element.height
+        };
+        break;
+
+      case bottom:
+        offsets = {
+          x: commonX,
+          y: reference.y + reference.height
+        };
+        break;
+
+      case right:
+        offsets = {
+          x: reference.x + reference.width,
+          y: commonY
+        };
+        break;
+
+      case left:
+        offsets = {
+          x: reference.x - element.width,
+          y: commonY
+        };
+        break;
+
+      default:
+        offsets = {
+          x: reference.x,
+          y: reference.y
+        };
+    }
+
+    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+    if (mainAxis != null) {
+      var len = mainAxis === 'y' ? 'height' : 'width';
+
+      switch (variation) {
+        case start:
+          offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+          break;
+
+        case end:
+          offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+          break;
+      }
+    }
+
+    return offsets;
+  }
+
+  function getFreshSideObject() {
+    return {
+      top: 0,
+      right: 0,
+      bottom: 0,
+      left: 0
+    };
+  }
+
+  function mergePaddingObject(paddingObject) {
+    return Object.assign({}, getFreshSideObject(), paddingObject);
+  }
+
+  function expandToHashMap(value, keys) {
+    return keys.reduce(function (hashMap, key) {
+      hashMap[key] = value;
+      return hashMap;
+    }, {});
+  }
+
+  function detectOverflow(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        _options$placement = _options.placement,
+        placement = _options$placement === void 0 ? state.placement : _options$placement,
+        _options$strategy = _options.strategy,
+        strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+        _options$boundary = _options.boundary,
+        boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+        _options$rootBoundary = _options.rootBoundary,
+        rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+        _options$elementConte = _options.elementContext,
+        elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+        _options$altBoundary = _options.altBoundary,
+        altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+        _options$padding = _options.padding,
+        padding = _options$padding === void 0 ? 0 : _options$padding;
+    var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+    var altContext = elementContext === popper ? reference : popper;
+    var popperRect = state.rects.popper;
+    var element = state.elements[altBoundary ? altContext : elementContext];
+    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+    var referenceClientRect = getBoundingClientRect(state.elements.reference);
+    var popperOffsets = computeOffsets({
+      reference: referenceClientRect,
+      element: popperRect,
+      strategy: 'absolute',
+      placement: placement
+    });
+    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+    // 0 or negative = within the clipping rect
+
+    var overflowOffsets = {
+      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+    };
+    var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+    if (elementContext === popper && offsetData) {
+      var offset = offsetData[placement];
+      Object.keys(overflowOffsets).forEach(function (key) {
+        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+        var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+        overflowOffsets[key] += offset[axis] * multiply;
+      });
+    }
+
+    return overflowOffsets;
+  }
+
+  var DEFAULT_OPTIONS = {
+    placement: 'bottom',
+    modifiers: [],
+    strategy: 'absolute'
+  };
+
+  function areValidElements() {
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return !args.some(function (element) {
+      return !(element && typeof element.getBoundingClientRect === 'function');
+    });
+  }
+
+  function popperGenerator(generatorOptions) {
+    if (generatorOptions === void 0) {
+      generatorOptions = {};
+    }
+
+    var _generatorOptions = generatorOptions,
+        _generatorOptions$def = _generatorOptions.defaultModifiers,
+        defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+        _generatorOptions$def2 = _generatorOptions.defaultOptions,
+        defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+    return function createPopper(reference, popper, options) {
+      if (options === void 0) {
+        options = defaultOptions;
+      }
+
+      var state = {
+        placement: 'bottom',
+        orderedModifiers: [],
+        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+        modifiersData: {},
+        elements: {
+          reference: reference,
+          popper: popper
+        },
+        attributes: {},
+        styles: {}
+      };
+      var effectCleanupFns = [];
+      var isDestroyed = false;
+      var instance = {
+        state: state,
+        setOptions: function setOptions(setOptionsAction) {
+          var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+          cleanupModifierEffects();
+          state.options = Object.assign({}, defaultOptions, state.options, options);
+          state.scrollParents = {
+            reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+            popper: listScrollParents(popper)
+          }; // Orders the modifiers based on their dependencies and `phase`
+          // properties
+
+          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+          state.orderedModifiers = orderedModifiers.filter(function (m) {
+            return m.enabled;
+          });
+          runModifierEffects();
+          return instance.update();
+        },
+        // Sync update – it will always be executed, even if not necessary. This
+        // is useful for low frequency updates where sync behavior simplifies the
+        // logic.
+        // For high frequency updates (e.g. `resize` and `scroll` events), always
+        // prefer the async Popper#update method
+        forceUpdate: function forceUpdate() {
+          if (isDestroyed) {
+            return;
+          }
+
+          var _state$elements = state.elements,
+              reference = _state$elements.reference,
+              popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+          // anymore
+
+          if (!areValidElements(reference, popper)) {
+            return;
+          } // Store the reference and popper rects to be read by modifiers
+
+
+          state.rects = {
+            reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+            popper: getLayoutRect(popper)
+          }; // Modifiers have the ability to reset the current update cycle. The
+          // most common use case for this is the `flip` modifier changing the
+          // placement, which then needs to re-run all the modifiers, because the
+          // logic was previously ran for the previous placement and is therefore
+          // stale/incorrect
+
+          state.reset = false;
+          state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+          // is filled with the initial data specified by the modifier. This means
+          // it doesn't persist and is fresh on each update.
+          // To ensure persistent data, use `${name}#persistent`
+
+          state.orderedModifiers.forEach(function (modifier) {
+            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+          });
+
+          for (var index = 0; index < state.orderedModifiers.length; index++) {
+            if (state.reset === true) {
+              state.reset = false;
+              index = -1;
+              continue;
+            }
+
+            var _state$orderedModifie = state.orderedModifiers[index],
+                fn = _state$orderedModifie.fn,
+                _state$orderedModifie2 = _state$orderedModifie.options,
+                _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+                name = _state$orderedModifie.name;
+
+            if (typeof fn === 'function') {
+              state = fn({
+                state: state,
+                options: _options,
+                name: name,
+                instance: instance
+              }) || state;
+            }
+          }
+        },
+        // Async and optimistically optimized update – it will not be executed if
+        // not necessary (debounced to run at most once-per-tick)
+        update: debounce(function () {
+          return new Promise(function (resolve) {
+            instance.forceUpdate();
+            resolve(state);
+          });
+        }),
+        destroy: function destroy() {
+          cleanupModifierEffects();
+          isDestroyed = true;
+        }
+      };
+
+      if (!areValidElements(reference, popper)) {
+        return instance;
+      }
+
+      instance.setOptions(options).then(function (state) {
+        if (!isDestroyed && options.onFirstUpdate) {
+          options.onFirstUpdate(state);
+        }
+      }); // Modifiers have the ability to execute arbitrary code before the first
+      // update cycle runs. They will be executed in the same order as the update
+      // cycle. This is useful when a modifier adds some persistent data that
+      // other modifiers need to use, but the modifier is run after the dependent
+      // one.
+
+      function runModifierEffects() {
+        state.orderedModifiers.forEach(function (_ref) {
+          var name = _ref.name,
+              _ref$options = _ref.options,
+              options = _ref$options === void 0 ? {} : _ref$options,
+              effect = _ref.effect;
+
+          if (typeof effect === 'function') {
+            var cleanupFn = effect({
+              state: state,
+              name: name,
+              instance: instance,
+              options: options
+            });
+
+            var noopFn = function noopFn() {};
+
+            effectCleanupFns.push(cleanupFn || noopFn);
+          }
+        });
+      }
+
+      function cleanupModifierEffects() {
+        effectCleanupFns.forEach(function (fn) {
+          return fn();
+        });
+        effectCleanupFns = [];
+      }
+
+      return instance;
+    };
+  }
+
+  var passive = {
+    passive: true
+  };
+
+  function effect$2(_ref) {
+    var state = _ref.state,
+        instance = _ref.instance,
+        options = _ref.options;
+    var _options$scroll = options.scroll,
+        scroll = _options$scroll === void 0 ? true : _options$scroll,
+        _options$resize = options.resize,
+        resize = _options$resize === void 0 ? true : _options$resize;
+    var window = getWindow(state.elements.popper);
+    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.addEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.addEventListener('resize', instance.update, passive);
+    }
+
+    return function () {
+      if (scroll) {
+        scrollParents.forEach(function (scrollParent) {
+          scrollParent.removeEventListener('scroll', instance.update, passive);
+        });
+      }
+
+      if (resize) {
+        window.removeEventListener('resize', instance.update, passive);
+      }
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var eventListeners = {
+    name: 'eventListeners',
+    enabled: true,
+    phase: 'write',
+    fn: function fn() {},
+    effect: effect$2,
+    data: {}
+  };
+
+  function popperOffsets(_ref) {
+    var state = _ref.state,
+        name = _ref.name;
+    // Offsets are the actual position the popper needs to have to be
+    // properly positioned near its reference element
+    // This is the most basic placement, and will be adjusted by
+    // the modifiers in the next step
+    state.modifiersData[name] = computeOffsets({
+      reference: state.rects.reference,
+      element: state.rects.popper,
+      strategy: 'absolute',
+      placement: state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var popperOffsets$1 = {
+    name: 'popperOffsets',
+    enabled: true,
+    phase: 'read',
+    fn: popperOffsets,
+    data: {}
+  };
+
+  var unsetSides = {
+    top: 'auto',
+    right: 'auto',
+    bottom: 'auto',
+    left: 'auto'
+  }; // Round the offsets to the nearest suitable subpixel based on the DPR.
+  // Zooming can change the DPR, but it seems to report a value that will
+  // cleanly divide the values into the appropriate subpixels.
+
+  function roundOffsetsByDPR(_ref, win) {
+    var x = _ref.x,
+        y = _ref.y;
+    var dpr = win.devicePixelRatio || 1;
+    return {
+      x: round(x * dpr) / dpr || 0,
+      y: round(y * dpr) / dpr || 0
+    };
+  }
+
+  function mapToStyles(_ref2) {
+    var _Object$assign2;
+
+    var popper = _ref2.popper,
+        popperRect = _ref2.popperRect,
+        placement = _ref2.placement,
+        variation = _ref2.variation,
+        offsets = _ref2.offsets,
+        position = _ref2.position,
+        gpuAcceleration = _ref2.gpuAcceleration,
+        adaptive = _ref2.adaptive,
+        roundOffsets = _ref2.roundOffsets,
+        isFixed = _ref2.isFixed;
+    var _offsets$x = offsets.x,
+        x = _offsets$x === void 0 ? 0 : _offsets$x,
+        _offsets$y = offsets.y,
+        y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+    var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+      x: x,
+      y: y
+    }) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref3.x;
+    y = _ref3.y;
+    var hasX = offsets.hasOwnProperty('x');
+    var hasY = offsets.hasOwnProperty('y');
+    var sideX = left;
+    var sideY = top;
+    var win = window;
+
+    if (adaptive) {
+      var offsetParent = getOffsetParent(popper);
+      var heightProp = 'clientHeight';
+      var widthProp = 'clientWidth';
+
+      if (offsetParent === getWindow(popper)) {
+        offsetParent = getDocumentElement(popper);
+
+        if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+          heightProp = 'scrollHeight';
+          widthProp = 'scrollWidth';
+        }
+      } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+      offsetParent = offsetParent;
+
+      if (placement === top || (placement === left || placement === right) && variation === end) {
+        sideY = bottom;
+        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+        offsetParent[heightProp];
+        y -= offsetY - popperRect.height;
+        y *= gpuAcceleration ? 1 : -1;
+      }
+
+      if (placement === left || (placement === top || placement === bottom) && variation === end) {
+        sideX = right;
+        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+        offsetParent[widthProp];
+        x -= offsetX - popperRect.width;
+        x *= gpuAcceleration ? 1 : -1;
+      }
+    }
+
+    var commonStyles = Object.assign({
+      position: position
+    }, adaptive && unsetSides);
+
+    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+      x: x,
+      y: y
+    }, getWindow(popper)) : {
+      x: x,
+      y: y
+    };
+
+    x = _ref4.x;
+    y = _ref4.y;
+
+    if (gpuAcceleration) {
+      var _Object$assign;
+
+      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+    }
+
+    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+  }
+
+  function computeStyles(_ref5) {
+    var state = _ref5.state,
+        options = _ref5.options;
+    var _options$gpuAccelerat = options.gpuAcceleration,
+        gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+        _options$adaptive = options.adaptive,
+        adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+        _options$roundOffsets = options.roundOffsets,
+        roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+    var commonStyles = {
+      placement: getBasePlacement(state.placement),
+      variation: getVariation(state.placement),
+      popper: state.elements.popper,
+      popperRect: state.rects.popper,
+      gpuAcceleration: gpuAcceleration,
+      isFixed: state.options.strategy === 'fixed'
+    };
+
+    if (state.modifiersData.popperOffsets != null) {
+      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.popperOffsets,
+        position: state.options.strategy,
+        adaptive: adaptive,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    if (state.modifiersData.arrow != null) {
+      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+        offsets: state.modifiersData.arrow,
+        position: 'absolute',
+        adaptive: false,
+        roundOffsets: roundOffsets
+      })));
+    }
+
+    state.attributes.popper = Object.assign({}, state.attributes.popper, {
+      'data-popper-placement': state.placement
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var computeStyles$1 = {
+    name: 'computeStyles',
+    enabled: true,
+    phase: 'beforeWrite',
+    fn: computeStyles,
+    data: {}
+  };
+
+  // and applies them to the HTMLElements such as popper and arrow
+
+  function applyStyles(_ref) {
+    var state = _ref.state;
+    Object.keys(state.elements).forEach(function (name) {
+      var style = state.styles[name] || {};
+      var attributes = state.attributes[name] || {};
+      var element = state.elements[name]; // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      } // Flow doesn't support to extend this property, but it's the most
+      // effective way to apply styles to an HTMLElement
+      // $FlowFixMe[cannot-write]
+
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (name) {
+        var value = attributes[name];
+
+        if (value === false) {
+          element.removeAttribute(name);
+        } else {
+          element.setAttribute(name, value === true ? '' : value);
+        }
+      });
+    });
+  }
+
+  function effect$1(_ref2) {
+    var state = _ref2.state;
+    var initialStyles = {
+      popper: {
+        position: state.options.strategy,
+        left: '0',
+        top: '0',
+        margin: '0'
+      },
+      arrow: {
+        position: 'absolute'
+      },
+      reference: {}
+    };
+    Object.assign(state.elements.popper.style, initialStyles.popper);
+    state.styles = initialStyles;
+
+    if (state.elements.arrow) {
+      Object.assign(state.elements.arrow.style, initialStyles.arrow);
+    }
+
+    return function () {
+      Object.keys(state.elements).forEach(function (name) {
+        var element = state.elements[name];
+        var attributes = state.attributes[name] || {};
+        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+        var style = styleProperties.reduce(function (style, property) {
+          style[property] = '';
+          return style;
+        }, {}); // arrow is optional + virtual elements
+
+        if (!isHTMLElement(element) || !getNodeName(element)) {
+          return;
+        }
+
+        Object.assign(element.style, style);
+        Object.keys(attributes).forEach(function (attribute) {
+          element.removeAttribute(attribute);
+        });
+      });
+    };
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var applyStyles$1 = {
+    name: 'applyStyles',
+    enabled: true,
+    phase: 'write',
+    fn: applyStyles,
+    effect: effect$1,
+    requires: ['computeStyles']
+  };
+
+  function distanceAndSkiddingToXY(placement, rects, offset) {
+    var basePlacement = getBasePlacement(placement);
+    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+    var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+      placement: placement
+    })) : offset,
+        skidding = _ref[0],
+        distance = _ref[1];
+
+    skidding = skidding || 0;
+    distance = (distance || 0) * invertDistance;
+    return [left, right].indexOf(basePlacement) >= 0 ? {
+      x: distance,
+      y: skidding
+    } : {
+      x: skidding,
+      y: distance
+    };
+  }
+
+  function offset(_ref2) {
+    var state = _ref2.state,
+        options = _ref2.options,
+        name = _ref2.name;
+    var _options$offset = options.offset,
+        offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+    var data = placements.reduce(function (acc, placement) {
+      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+      return acc;
+    }, {});
+    var _data$state$placement = data[state.placement],
+        x = _data$state$placement.x,
+        y = _data$state$placement.y;
+
+    if (state.modifiersData.popperOffsets != null) {
+      state.modifiersData.popperOffsets.x += x;
+      state.modifiersData.popperOffsets.y += y;
+    }
+
+    state.modifiersData[name] = data;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var offset$1 = {
+    name: 'offset',
+    enabled: true,
+    phase: 'main',
+    requires: ['popperOffsets'],
+    fn: offset
+  };
+
+  var hash$1 = {
+    left: 'right',
+    right: 'left',
+    bottom: 'top',
+    top: 'bottom'
+  };
+  function getOppositePlacement(placement) {
+    return placement.replace(/left|right|bottom|top/g, function (matched) {
+      return hash$1[matched];
+    });
+  }
+
+  var hash = {
+    start: 'end',
+    end: 'start'
+  };
+  function getOppositeVariationPlacement(placement) {
+    return placement.replace(/start|end/g, function (matched) {
+      return hash[matched];
+    });
+  }
+
+  function computeAutoPlacement(state, options) {
+    if (options === void 0) {
+      options = {};
+    }
+
+    var _options = options,
+        placement = _options.placement,
+        boundary = _options.boundary,
+        rootBoundary = _options.rootBoundary,
+        padding = _options.padding,
+        flipVariations = _options.flipVariations,
+        _options$allowedAutoP = _options.allowedAutoPlacements,
+        allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
+    var variation = getVariation(placement);
+    var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+      return getVariation(placement) === variation;
+    }) : basePlacements;
+    var allowedPlacements = placements$1.filter(function (placement) {
+      return allowedAutoPlacements.indexOf(placement) >= 0;
+    });
+
+    if (allowedPlacements.length === 0) {
+      allowedPlacements = placements$1;
+    } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+    var overflows = allowedPlacements.reduce(function (acc, placement) {
+      acc[placement] = detectOverflow(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        padding: padding
+      })[getBasePlacement(placement)];
+      return acc;
+    }, {});
+    return Object.keys(overflows).sort(function (a, b) {
+      return overflows[a] - overflows[b];
+    });
+  }
+
+  function getExpandedFallbackPlacements(placement) {
+    if (getBasePlacement(placement) === auto) {
+      return [];
+    }
+
+    var oppositePlacement = getOppositePlacement(placement);
+    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+  }
+
+  function flip(_ref) {
+    var state = _ref.state,
+        options = _ref.options,
+        name = _ref.name;
+
+    if (state.modifiersData[name]._skip) {
+      return;
+    }
+
+    var _options$mainAxis = options.mainAxis,
+        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+        _options$altAxis = options.altAxis,
+        checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+        specifiedFallbackPlacements = options.fallbackPlacements,
+        padding = options.padding,
+        boundary = options.boundary,
+        rootBoundary = options.rootBoundary,
+        altBoundary = options.altBoundary,
+        _options$flipVariatio = options.flipVariations,
+        flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+        allowedAutoPlacements = options.allowedAutoPlacements;
+    var preferredPlacement = state.options.placement;
+    var basePlacement = getBasePlacement(preferredPlacement);
+    var isBasePlacement = basePlacement === preferredPlacement;
+    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+    var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+      return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        padding: padding,
+        flipVariations: flipVariations,
+        allowedAutoPlacements: allowedAutoPlacements
+      }) : placement);
+    }, []);
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var checksMap = new Map();
+    var makeFallbackChecks = true;
+    var firstFittingPlacement = placements[0];
+
+    for (var i = 0; i < placements.length; i++) {
+      var placement = placements[i];
+
+      var _basePlacement = getBasePlacement(placement);
+
+      var isStartVariation = getVariation(placement) === start;
+      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+      var len = isVertical ? 'width' : 'height';
+      var overflow = detectOverflow(state, {
+        placement: placement,
+        boundary: boundary,
+        rootBoundary: rootBoundary,
+        altBoundary: altBoundary,
+        padding: padding
+      });
+      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+      if (referenceRect[len] > popperRect[len]) {
+        mainVariationSide = getOppositePlacement(mainVariationSide);
+      }
+
+      var altVariationSide = getOppositePlacement(mainVariationSide);
+      var checks = [];
+
+      if (checkMainAxis) {
+        checks.push(overflow[_basePlacement] <= 0);
+      }
+
+      if (checkAltAxis) {
+        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+      }
+
+      if (checks.every(function (check) {
+        return check;
+      })) {
+        firstFittingPlacement = placement;
+        makeFallbackChecks = false;
+        break;
+      }
+
+      checksMap.set(placement, checks);
+    }
+
+    if (makeFallbackChecks) {
+      // `2` may be desired in some cases – research later
+      var numberOfChecks = flipVariations ? 3 : 1;
+
+      var _loop = function _loop(_i) {
+        var fittingPlacement = placements.find(function (placement) {
+          var checks = checksMap.get(placement);
+
+          if (checks) {
+            return checks.slice(0, _i).every(function (check) {
+              return check;
+            });
+          }
+        });
+
+        if (fittingPlacement) {
+          firstFittingPlacement = fittingPlacement;
+          return "break";
+        }
+      };
+
+      for (var _i = numberOfChecks; _i > 0; _i--) {
+        var _ret = _loop(_i);
+
+        if (_ret === "break") break;
+      }
+    }
+
+    if (state.placement !== firstFittingPlacement) {
+      state.modifiersData[name]._skip = true;
+      state.placement = firstFittingPlacement;
+      state.reset = true;
+    }
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var flip$1 = {
+    name: 'flip',
+    enabled: true,
+    phase: 'main',
+    fn: flip,
+    requiresIfExists: ['offset'],
+    data: {
+      _skip: false
+    }
+  };
+
+  function getAltAxis(axis) {
+    return axis === 'x' ? 'y' : 'x';
+  }
+
+  function within(min$1, value, max$1) {
+    return max(min$1, min(value, max$1));
+  }
+  function withinMaxClamp(min, value, max) {
+    var v = within(min, value, max);
+    return v > max ? max : v;
+  }
+
+  function preventOverflow(_ref) {
+    var state = _ref.state,
+        options = _ref.options,
+        name = _ref.name;
+    var _options$mainAxis = options.mainAxis,
+        checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+        _options$altAxis = options.altAxis,
+        checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+        boundary = options.boundary,
+        rootBoundary = options.rootBoundary,
+        altBoundary = options.altBoundary,
+        padding = options.padding,
+        _options$tether = options.tether,
+        tether = _options$tether === void 0 ? true : _options$tether,
+        _options$tetherOffset = options.tetherOffset,
+        tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+    var overflow = detectOverflow(state, {
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      altBoundary: altBoundary
+    });
+    var basePlacement = getBasePlacement(state.placement);
+    var variation = getVariation(state.placement);
+    var isBasePlacement = !variation;
+    var mainAxis = getMainAxisFromPlacement(basePlacement);
+    var altAxis = getAltAxis(mainAxis);
+    var popperOffsets = state.modifiersData.popperOffsets;
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+      placement: state.placement
+    })) : tetherOffset;
+    var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+      mainAxis: tetherOffsetValue,
+      altAxis: tetherOffsetValue
+    } : Object.assign({
+      mainAxis: 0,
+      altAxis: 0
+    }, tetherOffsetValue);
+    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+    var data = {
+      x: 0,
+      y: 0
+    };
+
+    if (!popperOffsets) {
+      return;
+    }
+
+    if (checkMainAxis) {
+      var _offsetModifierState$;
+
+      var mainSide = mainAxis === 'y' ? top : left;
+      var altSide = mainAxis === 'y' ? bottom : right;
+      var len = mainAxis === 'y' ? 'height' : 'width';
+      var offset = popperOffsets[mainAxis];
+      var min$1 = offset + overflow[mainSide];
+      var max$1 = offset - overflow[altSide];
+      var additive = tether ? -popperRect[len] / 2 : 0;
+      var minLen = variation === start ? referenceRect[len] : popperRect[len];
+      var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+      // outside the reference bounds
+
+      var arrowElement = state.elements.arrow;
+      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+        width: 0,
+        height: 0
+      };
+      var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+      var arrowPaddingMin = arrowPaddingObject[mainSide];
+      var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+      // to include its full size in the calculation. If the reference is small
+      // and near the edge of a boundary, the popper can overflow even if the
+      // reference is not overflowing as well (e.g. virtual elements with no
+      // width or height)
+
+      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+      var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+      var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+      var tetherMax = offset + maxOffset - offsetModifierValue;
+      var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
+      popperOffsets[mainAxis] = preventedOffset;
+      data[mainAxis] = preventedOffset - offset;
+    }
+
+    if (checkAltAxis) {
+      var _offsetModifierState$2;
+
+      var _mainSide = mainAxis === 'x' ? top : left;
+
+      var _altSide = mainAxis === 'x' ? bottom : right;
+
+      var _offset = popperOffsets[altAxis];
+
+      var _len = altAxis === 'y' ? 'height' : 'width';
+
+      var _min = _offset + overflow[_mainSide];
+
+      var _max = _offset - overflow[_altSide];
+
+      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+      popperOffsets[altAxis] = _preventedOffset;
+      data[altAxis] = _preventedOffset - _offset;
+    }
+
+    state.modifiersData[name] = data;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var preventOverflow$1 = {
+    name: 'preventOverflow',
+    enabled: true,
+    phase: 'main',
+    fn: preventOverflow,
+    requiresIfExists: ['offset']
+  };
+
+  var toPaddingObject = function toPaddingObject(padding, state) {
+    padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+      placement: state.placement
+    })) : padding;
+    return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  };
+
+  function arrow(_ref) {
+    var _state$modifiersData$;
+
+    var state = _ref.state,
+        name = _ref.name,
+        options = _ref.options;
+    var arrowElement = state.elements.arrow;
+    var popperOffsets = state.modifiersData.popperOffsets;
+    var basePlacement = getBasePlacement(state.placement);
+    var axis = getMainAxisFromPlacement(basePlacement);
+    var isVertical = [left, right].indexOf(basePlacement) >= 0;
+    var len = isVertical ? 'height' : 'width';
+
+    if (!arrowElement || !popperOffsets) {
+      return;
+    }
+
+    var paddingObject = toPaddingObject(options.padding, state);
+    var arrowRect = getLayoutRect(arrowElement);
+    var minProp = axis === 'y' ? top : left;
+    var maxProp = axis === 'y' ? bottom : right;
+    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+    var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+    var arrowOffsetParent = getOffsetParent(arrowElement);
+    var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+    var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+    // outside of the popper bounds
+
+    var min = paddingObject[minProp];
+    var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+    var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+    var axisProp = axis;
+    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+  }
+
+  function effect(_ref2) {
+    var state = _ref2.state,
+        options = _ref2.options;
+    var _options$element = options.element,
+        arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+    if (arrowElement == null) {
+      return;
+    } // CSS selector
+
+
+    if (typeof arrowElement === 'string') {
+      arrowElement = state.elements.popper.querySelector(arrowElement);
+
+      if (!arrowElement) {
+        return;
+      }
+    }
+
+    if (!contains(state.elements.popper, arrowElement)) {
+      return;
+    }
+
+    state.elements.arrow = arrowElement;
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var arrow$1 = {
+    name: 'arrow',
+    enabled: true,
+    phase: 'main',
+    fn: arrow,
+    effect: effect,
+    requires: ['popperOffsets'],
+    requiresIfExists: ['preventOverflow']
+  };
+
+  function getSideOffsets(overflow, rect, preventedOffsets) {
+    if (preventedOffsets === void 0) {
+      preventedOffsets = {
+        x: 0,
+        y: 0
+      };
+    }
+
+    return {
+      top: overflow.top - rect.height - preventedOffsets.y,
+      right: overflow.right - rect.width + preventedOffsets.x,
+      bottom: overflow.bottom - rect.height + preventedOffsets.y,
+      left: overflow.left - rect.width - preventedOffsets.x
+    };
+  }
+
+  function isAnySideFullyClipped(overflow) {
+    return [top, right, bottom, left].some(function (side) {
+      return overflow[side] >= 0;
+    });
+  }
+
+  function hide(_ref) {
+    var state = _ref.state,
+        name = _ref.name;
+    var referenceRect = state.rects.reference;
+    var popperRect = state.rects.popper;
+    var preventedOffsets = state.modifiersData.preventOverflow;
+    var referenceOverflow = detectOverflow(state, {
+      elementContext: 'reference'
+    });
+    var popperAltOverflow = detectOverflow(state, {
+      altBoundary: true
+    });
+    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+    state.modifiersData[name] = {
+      referenceClippingOffsets: referenceClippingOffsets,
+      popperEscapeOffsets: popperEscapeOffsets,
+      isReferenceHidden: isReferenceHidden,
+      hasPopperEscaped: hasPopperEscaped
+    };
+    state.attributes.popper = Object.assign({}, state.attributes.popper, {
+      'data-popper-reference-hidden': isReferenceHidden,
+      'data-popper-escaped': hasPopperEscaped
+    });
+  } // eslint-disable-next-line import/no-unused-modules
+
+
+  var hide$1 = {
+    name: 'hide',
+    enabled: true,
+    phase: 'main',
+    requiresIfExists: ['preventOverflow'],
+    fn: hide
+  };
+
+  var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1];
+  var createPopper$1 = /*#__PURE__*/popperGenerator({
+    defaultModifiers: defaultModifiers$1
+  }); // eslint-disable-next-line import/no-unused-modules
+
+  var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1];
+  var createPopper = /*#__PURE__*/popperGenerator({
+    defaultModifiers: defaultModifiers
+  }); // eslint-disable-next-line import/no-unused-modules
+
+  exports.applyStyles = applyStyles$1;
+  exports.arrow = arrow$1;
+  exports.computeStyles = computeStyles$1;
+  exports.createPopper = createPopper;
+  exports.createPopperLite = createPopper$1;
+  exports.defaultModifiers = defaultModifiers;
+  exports.detectOverflow = detectOverflow;
+  exports.eventListeners = eventListeners;
+  exports.flip = flip$1;
+  exports.hide = hide$1;
+  exports.offset = offset$1;
+  exports.popperGenerator = popperGenerator;
+  exports.popperOffsets = popperOffsets$1;
+  exports.preventOverflow = preventOverflow$1;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+//# sourceMappingURL=popper.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper.js.map b/node_modules/@popperjs/core/dist/umd/popper.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..ae9f94cb8bc06521168bbf9f3520b096dc17cf1f
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/getFreshSideObject.js","../../src/utils/mergePaddingObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js","../../src/modifiers/eventListeners.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/computeStyles.js","../../src/modifiers/applyStyles.js","../../src/modifiers/offset.js","../../src/utils/getOppositePlacement.js","../../src/utils/getOppositeVariationPlacement.js","../../src/utils/computeAutoPlacement.js","../../src/modifiers/flip.js","../../src/utils/getAltAxis.js","../../src/utils/within.js","../../src/modifiers/preventOverflow.js","../../src/modifiers/arrow.js","../../src/modifiers/hide.js","../../src/popper-lite.js","../../src/popper.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport type { Placement } from '../enums';\nimport type { ModifierArguments, Modifier, Rect, Offsets } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport { top, left, right, placements } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetsFunction = ({\n  popper: Rect,\n  reference: Rect,\n  placement: Placement,\n}) => [?number, ?number];\n\ntype Offset = OffsetsFunction | [?number, ?number];\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  offset: Offset,\n};\n\nexport function distanceAndSkiddingToXY(\n  placement: Placement,\n  rects: { popper: Rect, reference: Rect },\n  offset: Offset\n): Offsets {\n  const basePlacement = getBasePlacement(placement);\n  const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  let [skidding, distance] =\n    typeof offset === 'function'\n      ? offset({\n          ...rects,\n          placement,\n        })\n      : offset;\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n\n  return [left, right].indexOf(basePlacement) >= 0\n    ? { x: distance, y: skidding }\n    : { x: skidding, y: distance };\n}\n\nfunction offset({ state, options, name }: ModifierArguments<Options>) {\n  const { offset = [0, 0] } = options;\n\n  const data = placements.reduce((acc, placement) => {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n\n  const { x, y } = data[state.placement];\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetModifier = Modifier<'offset', Options>;\nexport default ({\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset,\n}: OffsetModifier);\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n\nexport default function getOppositePlacement(placement: Placement): Placement {\n  return (placement.replace(\n    /left|right|bottom|top/g,\n    matched => hash[matched]\n  ): any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { start: 'end', end: 'start' };\n\nexport default function getOppositeVariationPlacement(\n  placement: Placement\n): Placement {\n  return (placement.replace(/start|end/g, matched => hash[matched]): any);\n}\n","// @flow\nimport type { State, Padding } from '../types';\nimport type {\n  Placement,\n  ComputedPlacement,\n  Boundary,\n  RootBoundary,\n} from '../enums';\nimport getVariation from './getVariation';\nimport {\n  variationPlacements,\n  basePlacements,\n  placements as allPlacements,\n} from '../enums';\nimport detectOverflow from './detectOverflow';\nimport getBasePlacement from './getBasePlacement';\n\ntype Options = {\n  placement: Placement,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  flipVariations: boolean,\n  allowedAutoPlacements?: Array<Placement>,\n};\n\ntype OverflowsMap = { [ComputedPlacement]: number };\n\nexport default function computeAutoPlacement(\n  state: $Shape<State>,\n  options: Options = {}\n): Array<ComputedPlacement> {\n  const {\n    placement,\n    boundary,\n    rootBoundary,\n    padding,\n    flipVariations,\n    allowedAutoPlacements = allPlacements,\n  } = options;\n\n  const variation = getVariation(placement);\n\n  const placements = variation\n    ? flipVariations\n      ? variationPlacements\n      : variationPlacements.filter(\n          (placement) => getVariation(placement) === variation\n        )\n    : basePlacements;\n\n  let allowedPlacements = placements.filter(\n    (placement) => allowedAutoPlacements.indexOf(placement) >= 0\n  );\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  }\n\n  // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n  const overflows: OverflowsMap = allowedPlacements.reduce((acc, placement) => {\n    acc[placement] = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      padding,\n    })[getBasePlacement(placement)];\n\n    return acc;\n  }, {});\n\n  return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);\n}\n","// @flow\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { ModifierArguments, Modifier, Padding } from '../types';\nimport getOppositePlacement from '../utils/getOppositePlacement';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';\nimport detectOverflow from '../utils/detectOverflow';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\nimport { bottom, top, start, right, left, auto } from '../enums';\nimport getVariation from '../utils/getVariation';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  mainAxis: boolean,\n  altAxis: boolean,\n  fallbackPlacements: Array<Placement>,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  altBoundary: boolean,\n  flipVariations: boolean,\n  allowedAutoPlacements: Array<Placement>,\n};\n\nfunction getExpandedFallbackPlacements(placement: Placement): Array<Placement> {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  const oppositePlacement = getOppositePlacement(placement);\n\n  return [\n    getOppositeVariationPlacement(placement),\n    oppositePlacement,\n    getOppositeVariationPlacement(oppositePlacement),\n  ];\n}\n\nfunction flip({ state, options, name }: ModifierArguments<Options>) {\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = true,\n    fallbackPlacements: specifiedFallbackPlacements,\n    padding,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    flipVariations = true,\n    allowedAutoPlacements,\n  } = options;\n\n  const preferredPlacement = state.options.placement;\n  const basePlacement = getBasePlacement(preferredPlacement);\n  const isBasePlacement = basePlacement === preferredPlacement;\n\n  const fallbackPlacements =\n    specifiedFallbackPlacements ||\n    (isBasePlacement || !flipVariations\n      ? [getOppositePlacement(preferredPlacement)]\n      : getExpandedFallbackPlacements(preferredPlacement));\n\n  const placements = [preferredPlacement, ...fallbackPlacements].reduce(\n    (acc, placement) => {\n      return acc.concat(\n        getBasePlacement(placement) === auto\n          ? computeAutoPlacement(state, {\n              placement,\n              boundary,\n              rootBoundary,\n              padding,\n              flipVariations,\n              allowedAutoPlacements,\n            })\n          : placement\n      );\n    },\n    []\n  );\n\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n\n  const checksMap = new Map();\n  let makeFallbackChecks = true;\n  let firstFittingPlacement = placements[0];\n\n  for (let i = 0; i < placements.length; i++) {\n    const placement = placements[i];\n    const basePlacement = getBasePlacement(placement);\n    const isStartVariation = getVariation(placement) === start;\n    const isVertical = [top, bottom].indexOf(basePlacement) >= 0;\n    const len = isVertical ? 'width' : 'height';\n\n    const overflow = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      altBoundary,\n      padding,\n    });\n\n    let mainVariationSide: any = isVertical\n      ? isStartVariation\n        ? right\n        : left\n      : isStartVariation\n      ? bottom\n      : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    const altVariationSide: any = getOppositePlacement(mainVariationSide);\n\n    const checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(\n        overflow[mainVariationSide] <= 0,\n        overflow[altVariationSide] <= 0\n      );\n    }\n\n    if (checks.every((check) => check)) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    const numberOfChecks = flipVariations ? 3 : 1;\n\n    for (let i = numberOfChecks; i > 0; i--) {\n      const fittingPlacement = placements.find((placement) => {\n        const checks = checksMap.get(placement);\n        if (checks) {\n          return checks.slice(0, i).every((check) => check);\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        break;\n      }\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type FlipModifier = Modifier<'flip', Options>;\nexport default ({\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: { _skip: false },\n}: FlipModifier);\n","// @flow\n\nexport default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {\n  return axis === 'x' ? 'y' : 'x';\n}\n","// @flow\nimport { max as mathMax, min as mathMin } from './math';\n\nexport function within(min: number, value: number, max: number): number {\n  return mathMax(min, mathMin(value, max));\n}\n\nexport function withinMaxClamp(min: number, value: number, max: number) {\n  const v = within(min, value, max);\n  return v > max ? max : v;\n}\n","// @flow\nimport { top, left, right, bottom, start } from '../enums';\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { Rect, ModifierArguments, Modifier, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport getAltAxis from '../utils/getAltAxis';\nimport { within, withinMaxClamp } from '../utils/within';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport detectOverflow from '../utils/detectOverflow';\nimport getVariation from '../utils/getVariation';\nimport getFreshSideObject from '../utils/getFreshSideObject';\nimport { min as mathMin, max as mathMax } from '../utils/math';\n\ntype TetherOffset =\n  | (({\n      popper: Rect,\n      reference: Rect,\n      placement: Placement,\n    }) => number | { mainAxis: number, altAxis: number })\n  | number\n  | { mainAxis: number, altAxis: number };\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  /* Prevents boundaries overflow on the main axis */\n  mainAxis: boolean,\n  /* Prevents boundaries overflow on the alternate axis */\n  altAxis: boolean,\n  /* The area to check the popper is overflowing in */\n  boundary: Boundary,\n  /* If the popper is not overflowing the main area, fallback to this one */\n  rootBoundary: RootBoundary,\n  /* Use the reference's \"clippingParents\" boundary context */\n  altBoundary: boolean,\n  /**\n   * Allows the popper to overflow from its boundaries to keep it near its\n   * reference element\n   */\n  tether: boolean,\n  /* Offsets when the `tether` option should activate */\n  tetherOffset: TetherOffset,\n  /* Sets a padding to the provided boundary */\n  padding: Padding,\n};\n\nfunction preventOverflow({ state, options, name }: ModifierArguments<Options>) {\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = false,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    padding,\n    tether = true,\n    tetherOffset = 0,\n  } = options;\n\n  const overflow = detectOverflow(state, {\n    boundary,\n    rootBoundary,\n    padding,\n    altBoundary,\n  });\n  const basePlacement = getBasePlacement(state.placement);\n  const variation = getVariation(state.placement);\n  const isBasePlacement = !variation;\n  const mainAxis = getMainAxisFromPlacement(basePlacement);\n  const altAxis = getAltAxis(mainAxis);\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const tetherOffsetValue =\n    typeof tetherOffset === 'function'\n      ? tetherOffset({\n          ...state.rects,\n          placement: state.placement,\n        })\n      : tetherOffset;\n  const normalizedTetherOffsetValue =\n    typeof tetherOffsetValue === 'number'\n      ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue }\n      : { mainAxis: 0, altAxis: 0, ...tetherOffsetValue };\n  const offsetModifierState = state.modifiersData.offset\n    ? state.modifiersData.offset[state.placement]\n    : null;\n\n  const data = { x: 0, y: 0 };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    const mainSide = mainAxis === 'y' ? top : left;\n    const altSide = mainAxis === 'y' ? bottom : right;\n    const len = mainAxis === 'y' ? 'height' : 'width';\n    const offset = popperOffsets[mainAxis];\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const additive = tether ? -popperRect[len] / 2 : 0;\n\n    const minLen = variation === start ? referenceRect[len] : popperRect[len];\n    const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n\n    // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n    const arrowElement = state.elements.arrow;\n    const arrowRect =\n      tether && arrowElement\n        ? getLayoutRect(arrowElement)\n        : { width: 0, height: 0 };\n    const arrowPaddingObject = state.modifiersData['arrow#persistent']\n      ? state.modifiersData['arrow#persistent'].padding\n      : getFreshSideObject();\n    const arrowPaddingMin = arrowPaddingObject[mainSide];\n    const arrowPaddingMax = arrowPaddingObject[altSide];\n\n    // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n    const arrowLen = within(0, referenceRect[len], arrowRect[len]);\n\n    const minOffset = isBasePlacement\n      ? referenceRect[len] / 2 -\n        additive -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis\n      : minLen -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis;\n    const maxOffset = isBasePlacement\n      ? -referenceRect[len] / 2 +\n        additive +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis\n      : maxLen +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis;\n\n    const arrowOffsetParent =\n      state.elements.arrow && getOffsetParent(state.elements.arrow);\n    const clientOffset = arrowOffsetParent\n      ? mainAxis === 'y'\n        ? arrowOffsetParent.clientTop || 0\n        : arrowOffsetParent.clientLeft || 0\n      : 0;\n\n    const offsetModifierValue = offsetModifierState?.[mainAxis] ?? 0;\n    const tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    const tetherMax = offset + maxOffset - offsetModifierValue;\n\n    const preventedOffset = within(\n      tether ? mathMin(min, tetherMin) : min,\n      offset,\n      tether ? mathMax(max, tetherMax) : max\n    );\n\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    const mainSide = mainAxis === 'x' ? top : left;\n    const altSide = mainAxis === 'x' ? bottom : right;\n    const offset = popperOffsets[altAxis];\n\n    const len = altAxis === 'y' ? 'height' : 'width';\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    const offsetModifierValue = offsetModifierState?.[altAxis] ?? 0;\n    const tetherMin = isOriginSide\n      ? min\n      : offset -\n        referenceRect[len] -\n        popperRect[len] -\n        offsetModifierValue +\n        normalizedTetherOffsetValue.altAxis;\n    const tetherMax = isOriginSide\n      ? offset +\n        referenceRect[len] +\n        popperRect[len] -\n        offsetModifierValue -\n        normalizedTetherOffsetValue.altAxis\n      : max;\n\n    const preventedOffset =\n      tether && isOriginSide\n        ? withinMaxClamp(tetherMin, offset, tetherMax)\n        : within(tether ? tetherMin : min, offset, tether ? tetherMax : max);\n\n    popperOffsets[altAxis] = preventedOffset;\n    data[altAxis] = preventedOffset - offset;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PreventOverflowModifier = Modifier<'preventOverflow', Options>;\nexport default ({\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset'],\n}: PreventOverflowModifier);\n","// @flow\nimport type { Modifier, ModifierArguments, Padding, Rect } from '../types';\nimport type { Placement } from '../enums';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport contains from '../dom-utils/contains';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport { within } from '../utils/within';\nimport mergePaddingObject from '../utils/mergePaddingObject';\nimport expandToHashMap from '../utils/expandToHashMap';\nimport { left, right, basePlacements, top, bottom } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  element: HTMLElement | string | null,\n  padding:\n    | Padding\n    | (({|\n        popper: Rect,\n        reference: Rect,\n        placement: Placement,\n      |}) => Padding),\n};\n\nconst toPaddingObject = (padding, state) => {\n  padding =\n    typeof padding === 'function'\n      ? padding({ ...state.rects, placement: state.placement })\n      : padding;\n\n  return mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n};\n\nfunction arrow({ state, name, options }: ModifierArguments<Options>) {\n  const arrowElement = state.elements.arrow;\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const basePlacement = getBasePlacement(state.placement);\n  const axis = getMainAxisFromPlacement(basePlacement);\n  const isVertical = [left, right].indexOf(basePlacement) >= 0;\n  const len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  const paddingObject = toPaddingObject(options.padding, state);\n  const arrowRect = getLayoutRect(arrowElement);\n  const minProp = axis === 'y' ? top : left;\n  const maxProp = axis === 'y' ? bottom : right;\n\n  const endDiff =\n    state.rects.reference[len] +\n    state.rects.reference[axis] -\n    popperOffsets[axis] -\n    state.rects.popper[len];\n  const startDiff = popperOffsets[axis] - state.rects.reference[axis];\n\n  const arrowOffsetParent = getOffsetParent(arrowElement);\n  const clientSize = arrowOffsetParent\n    ? axis === 'y'\n      ? arrowOffsetParent.clientHeight || 0\n      : arrowOffsetParent.clientWidth || 0\n    : 0;\n\n  const centerToReference = endDiff / 2 - startDiff / 2;\n\n  // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n  const min = paddingObject[minProp];\n  const max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  const offset = within(min, center, max);\n\n  // Prevents breaking syntax highlighting...\n  const axisProp: string = axis;\n  state.modifiersData[name] = {\n    [axisProp]: offset,\n    centerOffset: offset - center,\n  };\n}\n\nfunction effect({ state, options }: ModifierArguments<Options>) {\n  let { element: arrowElement = '[data-popper-arrow]' } = options;\n\n  if (arrowElement == null) {\n    return;\n  }\n\n  // CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ArrowModifier = Modifier<'arrow', Options>;\nexport default ({\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow'],\n}: ArrowModifier);\n","// @flow\nimport type {\n  ModifierArguments,\n  Modifier,\n  Rect,\n  SideObject,\n  Offsets,\n} from '../types';\nimport { top, bottom, left, right } from '../enums';\nimport detectOverflow from '../utils/detectOverflow';\n\nfunction getSideOffsets(\n  overflow: SideObject,\n  rect: Rect,\n  preventedOffsets: Offsets = { x: 0, y: 0 }\n): SideObject {\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x,\n  };\n}\n\nfunction isAnySideFullyClipped(overflow: SideObject): boolean {\n  return [top, right, bottom, left].some((side) => overflow[side] >= 0);\n}\n\nfunction hide({ state, name }: ModifierArguments<{||}>) {\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const preventedOffsets = state.modifiersData.preventOverflow;\n\n  const referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference',\n  });\n  const popperAltOverflow = detectOverflow(state, {\n    altBoundary: true,\n  });\n\n  const referenceClippingOffsets = getSideOffsets(\n    referenceOverflow,\n    referenceRect\n  );\n  const popperEscapeOffsets = getSideOffsets(\n    popperAltOverflow,\n    popperRect,\n    preventedOffsets\n  );\n\n  const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n\n  state.modifiersData[name] = {\n    referenceClippingOffsets,\n    popperEscapeOffsets,\n    isReferenceHidden,\n    hasPopperEscaped,\n  };\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type HideModifier = Modifier<'hide', {||}>;\nexport default ({\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide,\n}: HideModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\nimport offset from './modifiers/offset';\nimport flip from './modifiers/flip';\nimport preventOverflow from './modifiers/preventOverflow';\nimport arrow from './modifiers/arrow';\nimport hide from './modifiers/hide';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n  offset,\n  flip,\n  preventOverflow,\n  arrow,\n  hide,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper as createPopperLite } from './popper-lite';\n// eslint-disable-next-line import/no-unused-modules\nexport * from './modifiers';\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getHTMLElementScroll","getNodeScroll","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","isElementScaled","rect","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","transform","perspective","contain","willChange","filter","getOffsetParent","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","order","modifiers","Map","visited","Set","result","forEach","modifier","set","name","sort","add","requires","requiresIfExists","dep","has","depModifier","get","push","orderModifiers","orderedModifiers","phase","debounce","fn","pending","Promise","resolve","then","undefined","mergeByName","merged","current","existing","options","data","Object","keys","key","getViewportRect","strategy","html","clientWidth","clientHeight","layoutViewport","getDocumentRect","winScroll","scrollWidth","scrollHeight","direction","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getInnerBoundingClientRect","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","len","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","value","hashMap","detectOverflow","state","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","createPopper","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","m","enabled","runModifierEffects","update","forceUpdate","reset","index","length","destroy","onFirstUpdate","effect","cleanupFn","noopFn","passive","resize","addEventListener","removeEventListener","unsetSides","roundOffsetsByDPR","dpr","devicePixelRatio","mapToStyles","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","computeStyles","arrow","applyStyles","style","assign","removeAttribute","setAttribute","initialStyles","margin","styleProperties","property","attribute","distanceAndSkiddingToXY","invertDistance","skidding","distance","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","computeAutoPlacement","flipVariations","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","b","getExpandedFallbackPlacements","oppositePlacement","flip","_skip","checkMainAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","preferredPlacement","isBasePlacement","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","numberOfChecks","fittingPlacement","find","slice","getAltAxis","within","mathMax","mathMin","withinMaxClamp","v","preventOverflow","tether","tetherOffset","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","isOriginSide","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","hide","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","eventListeners"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/dist/umd/popper.min.js b/node_modules/@popperjs/core/dist/umd/popper.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..393856474db766510ad33830f557e6e7ea58e5e5
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper.min.js
@@ -0,0 +1,6 @@
+/**
+ * @popperjs/core v2.11.8 - MIT License
+ */
+
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function N(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function I(e,r,o){return r===H?N(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):N(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function _(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&C(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=I(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),I(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function F(e){return e.split("-")[0]}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?F(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=_(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=N(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function Z(e){void 0===e&&(e={});var t=e,r=t.defaultModifiers,o=void 0===r?[]:r,i=t.defaultOptions,a=void 0===i?K:i;return function(e,t,r){void 0===r&&(r=a);var i,s,f={placement:"bottom",orderedModifiers:[],options:Object.assign({},K,a),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},c=[],p=!1,u={state:f,setOptions:function(r){var i="function"==typeof r?r(f.options):r;l(),f.options=Object.assign({},a,f.options,i),f.scrollParents={reference:n(e)?w(e):e.contextElement?w(e.contextElement):[],popper:w(t)};var s,p,d=function(e){var t=q(e);return V.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((s=[].concat(o,f.options.modifiers),p=s.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(p).map((function(e){return p[e]}))));return f.orderedModifiers=d.filter((function(e){return e.enabled})),f.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,r=void 0===n?{}:n,o=e.effect;if("function"==typeof o){var i=o({state:f,name:t,instance:u,options:r}),a=function(){};c.push(i||a)}})),u.update()},forceUpdate:function(){if(!p){var e=f.elements,t=e.reference,n=e.popper;if(Q(t,n)){f.rects={reference:y(t,E(n),"fixed"===f.options.strategy),popper:g(n)},f.reset=!1,f.placement=f.options.placement,f.orderedModifiers.forEach((function(e){return f.modifiersData[e.name]=Object.assign({},e.data)}));for(var r=0;r<f.orderedModifiers.length;r++)if(!0!==f.reset){var o=f.orderedModifiers[r],i=o.fn,a=o.options,s=void 0===a?{}:a,c=o.name;"function"==typeof i&&(f=i({state:f,options:s,name:c,instance:u})||f)}else f.reset=!1,r=-1}}},update:(i=function(){return new Promise((function(e){u.forceUpdate(),e(f)}))},function(){return s||(s=new Promise((function(e){Promise.resolve().then((function(){s=void 0,e(i())}))}))),s}),destroy:function(){l(),p=!0}};if(!Q(e,t))return u;function l(){c.forEach((function(e){return e()})),c=[]}return u.setOptions(r).then((function(e){!p&&r.onFirstUpdate&&r.onFirstUpdate(e)})),u}}var $={passive:!0};var ee={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var n=e.state,r=e.instance,o=e.options,i=o.scroll,a=void 0===i||i,s=o.resize,f=void 0===s||s,c=t(n.elements.popper),p=[].concat(n.scrollParents.reference,n.scrollParents.popper);return a&&p.forEach((function(e){e.addEventListener("scroll",r.update,$)})),f&&c.addEventListener("resize",r.update,$),function(){a&&p.forEach((function(e){e.removeEventListener("scroll",r.update,$)})),f&&c.removeEventListener("resize",r.update,$)}},data:{}};var te={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=X({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},ne={top:"auto",right:"auto",bottom:"auto",left:"auto"};function re(e){var n,r=e.popper,o=e.popperRect,i=e.placement,a=e.variation,f=e.offsets,c=e.position,p=e.gpuAcceleration,u=e.adaptive,l=e.roundOffsets,h=e.isFixed,v=f.x,y=void 0===v?0:v,g=f.y,b=void 0===g?0:g,x="function"==typeof l?l({x:y,y:b}):{x:y,y:b};y=x.x,b=x.y;var w=f.hasOwnProperty("x"),O=f.hasOwnProperty("y"),j=P,M=D,k=window;if(u){var W=E(r),H="clientHeight",T="clientWidth";if(W===t(r)&&"static"!==m(W=d(r)).position&&"absolute"===c&&(H="scrollHeight",T="scrollWidth"),W=W,i===D||(i===P||i===L)&&a===B)M=A,b-=(h&&W===k&&k.visualViewport?k.visualViewport.height:W[H])-o.height,b*=p?1:-1;if(i===P||(i===D||i===A)&&a===B)j=L,y-=(h&&W===k&&k.visualViewport?k.visualViewport.width:W[T])-o.width,y*=p?1:-1}var R,S=Object.assign({position:c},u&&ne),V=!0===l?function(e,t){var n=e.x,r=e.y,o=t.devicePixelRatio||1;return{x:s(n*o)/o||0,y:s(r*o)/o||0}}({x:y,y:b},t(r)):{x:y,y:b};return y=V.x,b=V.y,p?Object.assign({},S,((R={})[M]=O?"0":"",R[j]=w?"0":"",R.transform=(k.devicePixelRatio||1)<=1?"translate("+y+"px, "+b+"px)":"translate3d("+y+"px, "+b+"px, 0)",R)):Object.assign({},S,((n={})[M]=O?b+"px":"",n[j]=w?y+"px":"",n.transform="",n))}var oe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,o=void 0===r||r,i=n.adaptive,a=void 0===i||i,s=n.roundOffsets,f=void 0===s||s,c={placement:F(t.placement),variation:U(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,re(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:f})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,re(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};var ie={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},o=t.attributes[e]||{},i=t.elements[e];r(i)&&l(i)&&(Object.assign(i.style,n),Object.keys(o).forEach((function(e){var t=o[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var o=t.elements[e],i=t.attributes[e]||{},a=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});r(o)&&l(o)&&(Object.assign(o.style,a),Object.keys(i).forEach((function(e){o.removeAttribute(e)})))}))}},requires:["computeStyles"]};var ae={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,i=void 0===o?[0,0]:o,a=S.reduce((function(e,n){return e[n]=function(e,t,n){var r=F(e),o=[P,D].indexOf(r)>=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[F(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=F(v),g=f||(y===v||!h?[fe(v)]:function(e){if(F(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(F(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k<b.length;k++){var B=b[k],H=F(B),T=U(B)===W,R=[D,A].indexOf(H)>=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var C=fe(q),N=[];if(i&&N.push(V[H]<=0),s&&N.push(V[q]<=0,V[C]<=0),N.every((function(e){return e}))){E=B,j=!1;break}O.set(B,N)}if(j)for(var I=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},_=h?3:1;_>0;_--){if("break"===I(_))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=F(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,C="y"===j?D:P,N="y"===j?A:L,I="y"===j?"height":"width",_=k[j],X=_+b[C],Y=_-b[N],G=m?-H[I]/2:0,K=w===W?B[I]:H[I],Q=w===W?-H[I]:-B[I],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[C],ne=ee[N],re=de(0,B[I],$[I]),oe=O?B[I]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[I]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=_+ie-fe,pe=de(m?a(X,_+oe-fe-se):X,_,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-_}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=F(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&C(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})}));
+//# sourceMappingURL=popper.min.js.map
diff --git a/node_modules/@popperjs/core/dist/umd/popper.min.js.flow b/node_modules/@popperjs/core/dist/umd/popper.min.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e745d9276a79c84381f845363955c66f9e6fe9c7
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper.min.js.flow
@@ -0,0 +1,3 @@
+// @flow
+
+export * from '../../lib/popper.js'
diff --git a/node_modules/@popperjs/core/dist/umd/popper.min.js.map b/node_modules/@popperjs/core/dist/umd/popper.min.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e3471cff65fea4b0c05f55d0bdd24f5e9c3f08f4
--- /dev/null
+++ b/node_modules/@popperjs/core/dist/umd/popper.min.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"popper.min.js","sources":["../../src/dom-utils/getWindow.js","../../src/dom-utils/instanceOf.js","../../src/utils/math.js","../../src/utils/userAgent.js","../../src/dom-utils/isLayoutViewport.js","../../src/dom-utils/getBoundingClientRect.js","../../src/dom-utils/getWindowScroll.js","../../src/dom-utils/getNodeName.js","../../src/dom-utils/getDocumentElement.js","../../src/dom-utils/getWindowScrollBarX.js","../../src/dom-utils/getComputedStyle.js","../../src/dom-utils/isScrollParent.js","../../src/dom-utils/getCompositeRect.js","../../src/dom-utils/getNodeScroll.js","../../src/dom-utils/getHTMLElementScroll.js","../../src/dom-utils/getLayoutRect.js","../../src/dom-utils/getParentNode.js","../../src/dom-utils/getScrollParent.js","../../src/dom-utils/listScrollParents.js","../../src/dom-utils/isTableElement.js","../../src/dom-utils/getOffsetParent.js","../../src/enums.js","../../src/utils/orderModifiers.js","../../src/dom-utils/contains.js","../../src/utils/rectToClientRect.js","../../src/dom-utils/getClippingRect.js","../../src/dom-utils/getViewportRect.js","../../src/dom-utils/getDocumentRect.js","../../src/utils/getBasePlacement.js","../../src/utils/getVariation.js","../../src/utils/getMainAxisFromPlacement.js","../../src/utils/computeOffsets.js","../../src/utils/mergePaddingObject.js","../../src/utils/getFreshSideObject.js","../../src/utils/expandToHashMap.js","../../src/utils/detectOverflow.js","../../src/createPopper.js","../../src/utils/debounce.js","../../src/utils/mergeByName.js","../../src/modifiers/eventListeners.js","../../src/modifiers/popperOffsets.js","../../src/modifiers/computeStyles.js","../../src/modifiers/applyStyles.js","../../src/modifiers/offset.js","../../src/utils/getOppositePlacement.js","../../src/utils/getOppositeVariationPlacement.js","../../src/utils/computeAutoPlacement.js","../../src/modifiers/flip.js","../../src/utils/within.js","../../src/modifiers/preventOverflow.js","../../src/utils/getAltAxis.js","../../src/modifiers/arrow.js","../../src/modifiers/hide.js","../../src/popper-lite.js","../../src/popper.js"],"sourcesContent":["// @flow\nimport type { Window } from '../types';\ndeclare function getWindow(node: Node | Window): Window;\n\nexport default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n","// @flow\nimport getWindow from './getWindow';\n\ndeclare function isElement(node: mixed): boolean %checks(node instanceof\n  Element);\nfunction isElement(node) {\n  const OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\ndeclare function isHTMLElement(node: mixed): boolean %checks(node instanceof\n  HTMLElement);\nfunction isHTMLElement(node) {\n  const OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\ndeclare function isShadowRoot(node: mixed): boolean %checks(node instanceof\n  ShadowRoot);\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };\n","// @flow\nexport const max = Math.max;\nexport const min = Math.min;\nexport const round = Math.round;\n","// @flow\ntype Navigator = Navigator & { userAgentData?: NavigatorUAData };\n\ninterface NavigatorUAData {\n  brands: Array<{ brand: string, version: string }>;\n  mobile: boolean;\n  platform: string;\n}\n\nexport default function getUAString(): string {\n  const uaData = (navigator: Navigator).userAgentData;\n\n  if (uaData?.brands && Array.isArray(uaData.brands)) {\n    return uaData.brands\n      .map((item) => `${item.brand}/${item.version}`)\n      .join(' ');\n  }\n\n  return navigator.userAgent;\n}\n","// @flow\nimport getUAString from '../utils/userAgent';\n\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}\n","// @flow\nimport type { ClientRectObject, VirtualElement } from '../types';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport { round } from '../utils/math';\nimport getWindow from './getWindow';\nimport isLayoutViewport from './isLayoutViewport';\n\nexport default function getBoundingClientRect(\n  element: Element | VirtualElement,\n  includeScale: boolean = false,\n  isFixedStrategy: boolean = false\n): ClientRectObject {\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX =\n      (element: HTMLElement).offsetWidth > 0\n        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1\n        : 1;\n    scaleY =\n      (element: HTMLElement).offsetHeight > 0\n        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1\n        : 1;\n  }\n\n  const { visualViewport } = isElement(element) ? getWindow(element) : window;\n  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n\n  const x =\n    (clientRect.left +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /\n    scaleX;\n  const y =\n    (clientRect.top +\n      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /\n    scaleY;\n  const width = clientRect.width / scaleX;\n  const height = clientRect.height / scaleY;\n\n  return {\n    width,\n    height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x,\n    y,\n  };\n}\n","// @flow\nimport getWindow from './getWindow';\nimport type { Window } from '../types';\n\nexport default function getWindowScroll(node: Node | Window) {\n  const win = getWindow(node);\n  const scrollLeft = win.pageXOffset;\n  const scrollTop = win.pageYOffset;\n\n  return {\n    scrollLeft,\n    scrollTop,\n  };\n}\n","// @flow\nimport type { Window } from '../types';\n\nexport default function getNodeName(element: ?Node | Window): ?string {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}\n","// @flow\nimport { isElement } from './instanceOf';\nimport type { Window } from '../types';\n\nexport default function getDocumentElement(\n  element: Element | Window\n): HTMLElement {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return (\n    (isElement(element)\n      ? element.ownerDocument\n      : // $FlowFixMe[prop-missing]\n        element.document) || window.document\n  ).documentElement;\n}\n","// @flow\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScroll from './getWindowScroll';\n\nexport default function getWindowScrollBarX(element: Element): number {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return (\n    getBoundingClientRect(getDocumentElement(element)).left +\n    getWindowScroll(element).scrollLeft\n  );\n}\n","// @flow\nimport getWindow from './getWindow';\n\nexport default function getComputedStyle(\n  element: Element\n): CSSStyleDeclaration {\n  return getWindow(element).getComputedStyle(element);\n}\n","// @flow\nimport getComputedStyle from './getComputedStyle';\n\nexport default function isScrollParent(element: HTMLElement): boolean {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const { overflow, overflowX, overflowY } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n","// @flow\nimport type { Rect, VirtualElement, Window } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getNodeScroll from './getNodeScroll';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getDocumentElement from './getDocumentElement';\nimport isScrollParent from './isScrollParent';\nimport { round } from '../utils/math';\n\nfunction isElementScaled(element: HTMLElement) {\n  const rect = element.getBoundingClientRect();\n  const scaleX = round(rect.width) / element.offsetWidth || 1;\n  const scaleY = round(rect.height) / element.offsetHeight || 1;\n\n  return scaleX !== 1 || scaleY !== 1;\n}\n\n// Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\nexport default function getCompositeRect(\n  elementOrVirtualElement: Element | VirtualElement,\n  offsetParent: Element | Window,\n  isFixed: boolean = false\n): Rect {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const offsetParentIsScaled =\n    isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(\n    elementOrVirtualElement,\n    offsetParentIsScaled,\n    isFixed\n  );\n\n  let scroll = { scrollLeft: 0, scrollTop: 0 };\n  let offsets = { x: 0, y: 0 };\n\n  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {\n    if (\n      getNodeName(offsetParent) !== 'body' ||\n      // https://github.com/popperjs/popper-core/issues/1078\n      isScrollParent(documentElement)\n    ) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height,\n  };\n}\n","// @flow\nimport getWindowScroll from './getWindowScroll';\nimport getWindow from './getWindow';\nimport { isHTMLElement } from './instanceOf';\nimport getHTMLElementScroll from './getHTMLElementScroll';\nimport type { Window } from '../types';\n\nexport default function getNodeScroll(node: Node | Window) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}\n","// @flow\n\nexport default function getHTMLElementScroll(element: HTMLElement) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getBoundingClientRect from './getBoundingClientRect';\n\n// Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\nexport default function getLayoutRect(element: HTMLElement): Rect {\n  const clientRect = getBoundingClientRect(element);\n\n  // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n  let width = element.offsetWidth;\n  let height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width,\n    height,\n  };\n}\n","// @flow\nimport getNodeName from './getNodeName';\nimport getDocumentElement from './getDocumentElement';\nimport { isShadowRoot } from './instanceOf';\n\nexport default function getParentNode(element: Node | ShadowRoot): Node {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (\n    // this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || // DOM Element detected\n    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n  );\n}\n","// @flow\nimport getParentNode from './getParentNode';\nimport isScrollParent from './isScrollParent';\nimport getNodeName from './getNodeName';\nimport { isHTMLElement } from './instanceOf';\n\nexport default function getScrollParent(node: Node): HTMLElement {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n","// @flow\nimport getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getWindow from './getWindow';\nimport type { Window, VisualViewport } from '../types';\nimport isScrollParent from './isScrollParent';\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\nexport default function listScrollParents(\n  element: Node,\n  list: Array<Element | Window> = []\n): Array<Element | Window | VisualViewport> {\n  const scrollParent = getScrollParent(element);\n  const isBody = scrollParent === element.ownerDocument?.body;\n  const win = getWindow(scrollParent);\n  const target = isBody\n    ? [win].concat(\n        win.visualViewport || [],\n        isScrollParent(scrollParent) ? scrollParent : []\n      )\n    : scrollParent;\n  const updatedList = list.concat(target);\n\n  return isBody\n    ? updatedList\n    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n      updatedList.concat(listScrollParents(getParentNode(target)));\n}\n","// @flow\nimport getNodeName from './getNodeName';\n\nexport default function isTableElement(element: Element): boolean {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getNodeName from './getNodeName';\nimport getComputedStyle from './getComputedStyle';\nimport { isHTMLElement, isShadowRoot } from './instanceOf';\nimport isTableElement from './isTableElement';\nimport getParentNode from './getParentNode';\nimport getUAString from '../utils/userAgent';\n\nfunction getTrueOffsetParent(element: Element): ?Element {\n  if (\n    !isHTMLElement(element) ||\n    // https://github.com/popperjs/popper-core/issues/837\n    getComputedStyle(element).position === 'fixed'\n  ) {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\n// `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\nfunction getContainingBlock(element: Element) {\n  const isFirefox = /firefox/i.test(getUAString());\n  const isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    const elementCss = getComputedStyle(element);\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  let currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (\n    isHTMLElement(currentNode) &&\n    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0\n  ) {\n    const css = getComputedStyle(currentNode);\n\n    // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n    if (\n      css.transform !== 'none' ||\n      css.perspective !== 'none' ||\n      css.contain === 'paint' ||\n      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||\n      (isFirefox && css.willChange === 'filter') ||\n      (isFirefox && css.filter && css.filter !== 'none')\n    ) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nexport default function getOffsetParent(element: Element) {\n  const window = getWindow(element);\n\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (\n    offsetParent &&\n    isTableElement(offsetParent) &&\n    getComputedStyle(offsetParent).position === 'static'\n  ) {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (\n    offsetParent &&\n    (getNodeName(offsetParent) === 'html' ||\n      (getNodeName(offsetParent) === 'body' &&\n        getComputedStyle(offsetParent).position === 'static'))\n  ) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n","// @flow\nexport const top: 'top' = 'top';\nexport const bottom: 'bottom' = 'bottom';\nexport const right: 'right' = 'right';\nexport const left: 'left' = 'left';\nexport const auto: 'auto' = 'auto';\nexport type BasePlacement =\n  | typeof top\n  | typeof bottom\n  | typeof right\n  | typeof left;\nexport const basePlacements: Array<BasePlacement> = [top, bottom, right, left];\n\nexport const start: 'start' = 'start';\nexport const end: 'end' = 'end';\nexport type Variation = typeof start | typeof end;\n\nexport const clippingParents: 'clippingParents' = 'clippingParents';\nexport const viewport: 'viewport' = 'viewport';\nexport type Boundary = Element | Array<Element> | typeof clippingParents;\nexport type RootBoundary = typeof viewport | 'document';\n\nexport const popper: 'popper' = 'popper';\nexport const reference: 'reference' = 'reference';\nexport type Context = typeof popper | typeof reference;\n\nexport type VariationPlacement =\n  | 'top-start'\n  | 'top-end'\n  | 'bottom-start'\n  | 'bottom-end'\n  | 'right-start'\n  | 'right-end'\n  | 'left-start'\n  | 'left-end';\nexport type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';\nexport type ComputedPlacement = VariationPlacement | BasePlacement;\nexport type Placement = AutoPlacement | BasePlacement | VariationPlacement;\n\nexport const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(\n  (acc: Array<VariationPlacement>, placement: BasePlacement) =>\n    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),\n  []\n);\nexport const placements: Array<Placement> = [...basePlacements, auto].reduce(\n  (\n    acc: Array<Placement>,\n    placement: BasePlacement | typeof auto\n  ): Array<Placement> =>\n    acc.concat([\n      placement,\n      (`${placement}-${start}`: any),\n      (`${placement}-${end}`: any),\n    ]),\n  []\n);\n\n// modifiers that need to read the DOM\nexport const beforeRead: 'beforeRead' = 'beforeRead';\nexport const read: 'read' = 'read';\nexport const afterRead: 'afterRead' = 'afterRead';\n// pure-logic modifiers\nexport const beforeMain: 'beforeMain' = 'beforeMain';\nexport const main: 'main' = 'main';\nexport const afterMain: 'afterMain' = 'afterMain';\n// modifier with the purpose to write to the DOM (or write into a framework state)\nexport const beforeWrite: 'beforeWrite' = 'beforeWrite';\nexport const write: 'write' = 'write';\nexport const afterWrite: 'afterWrite' = 'afterWrite';\nexport const modifierPhases: Array<ModifierPhases> = [\n  beforeRead,\n  read,\n  afterRead,\n  beforeMain,\n  main,\n  afterMain,\n  beforeWrite,\n  write,\n  afterWrite,\n];\n\nexport type ModifierPhases =\n  | typeof beforeRead\n  | typeof read\n  | typeof afterRead\n  | typeof beforeMain\n  | typeof main\n  | typeof afterMain\n  | typeof beforeWrite\n  | typeof write\n  | typeof afterWrite;\n","// @flow\nimport type { Modifier } from '../types';\nimport { modifierPhases } from '../enums';\n\n// source: https://stackoverflow.com/questions/49875255\nfunction order(modifiers) {\n  const map = new Map();\n  const visited = new Set();\n  const result = [];\n\n  modifiers.forEach(modifier => {\n    map.set(modifier.name, modifier);\n  });\n\n  // On visiting object, check for its dependencies and visit them recursively\n  function sort(modifier: Modifier<any, any>) {\n    visited.add(modifier.name);\n\n    const requires = [\n      ...(modifier.requires || []),\n      ...(modifier.requiresIfExists || []),\n    ];\n\n    requires.forEach(dep => {\n      if (!visited.has(dep)) {\n        const depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n\n    result.push(modifier);\n  }\n\n  modifiers.forEach(modifier => {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n\n  return result;\n}\n\nexport default function orderModifiers(\n  modifiers: Array<Modifier<any, any>>\n): Array<Modifier<any, any>> {\n  // order based on dependencies\n  const orderedModifiers = order(modifiers);\n\n  // order based on phase\n  return modifierPhases.reduce((acc, phase) => {\n    return acc.concat(\n      orderedModifiers.filter(modifier => modifier.phase === phase)\n    );\n  }, []);\n}\n","// @flow\nimport { isShadowRoot } from './instanceOf';\n\nexport default function contains(parent: Element, child: Element) {\n  const rootNode = child.getRootNode && child.getRootNode();\n\n  // First, attempt with faster native method\n  if (parent.contains(child)) {\n    return true;\n  }\n  // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n    do {\n      if (next && parent.isSameNode(next)) {\n        return true;\n      }\n      // $FlowFixMe[prop-missing]: need a better way to handle this...\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  // Give up, the result is false\n  return false;\n}\n","// @flow\nimport type { Rect, ClientRectObject } from '../types';\n\nexport default function rectToClientRect(rect: Rect): ClientRectObject {\n  return {\n    ...rect,\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height,\n  };\n}\n","// @flow\nimport type { ClientRectObject, PositioningStrategy } from '../types';\nimport type { Boundary, RootBoundary } from '../enums';\nimport { viewport } from '../enums';\nimport getViewportRect from './getViewportRect';\nimport getDocumentRect from './getDocumentRect';\nimport listScrollParents from './listScrollParents';\nimport getOffsetParent from './getOffsetParent';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport { isElement, isHTMLElement } from './instanceOf';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport getParentNode from './getParentNode';\nimport contains from './contains';\nimport getNodeName from './getNodeName';\nimport rectToClientRect from '../utils/rectToClientRect';\nimport { max, min } from '../utils/math';\n\nfunction getInnerBoundingClientRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const rect = getBoundingClientRect(element, false, strategy === 'fixed');\n\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n\n  return rect;\n}\n\nfunction getClientRectFromMixedType(\n  element: Element,\n  clippingParent: Element | RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  return clippingParent === viewport\n    ? rectToClientRect(getViewportRect(element, strategy))\n    : isElement(clippingParent)\n    ? getInnerBoundingClientRect(clippingParent, strategy)\n    : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n}\n\n// A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\nfunction getClippingParents(element: Element): Array<Element> {\n  const clippingParents = listScrollParents(getParentNode(element));\n  const canEscapeClipping =\n    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  const clipperElement =\n    canEscapeClipping && isHTMLElement(element)\n      ? getOffsetParent(element)\n      : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  }\n\n  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n  return clippingParents.filter(\n    (clippingParent) =>\n      isElement(clippingParent) &&\n      contains(clippingParent, clipperElement) &&\n      getNodeName(clippingParent) !== 'body'\n  );\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping parents\nexport default function getClippingRect(\n  element: Element,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  strategy: PositioningStrategy\n): ClientRectObject {\n  const mainClippingParents =\n    boundary === 'clippingParents'\n      ? getClippingParents(element)\n      : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromMixedType(element, clippingParent, strategy);\n\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n\n  return clippingRect;\n}\n","// @flow\nimport getWindow from './getWindow';\nimport getDocumentElement from './getDocumentElement';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport isLayoutViewport from './isLayoutViewport';\nimport type { PositioningStrategy } from '../types';\n\nexport default function getViewportRect(\n  element: Element,\n  strategy: PositioningStrategy\n) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n\n    const layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x: x + getWindowScrollBarX(element),\n    y,\n  };\n}\n","// @flow\nimport type { Rect } from '../types';\nimport getDocumentElement from './getDocumentElement';\nimport getComputedStyle from './getComputedStyle';\nimport getWindowScrollBarX from './getWindowScrollBarX';\nimport getWindowScroll from './getWindowScroll';\nimport { max } from '../utils/math';\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\nexport default function getDocumentRect(element: HTMLElement): Rect {\n  const html = getDocumentElement(element);\n  const winScroll = getWindowScroll(element);\n  const body = element.ownerDocument?.body;\n\n  const width = max(\n    html.scrollWidth,\n    html.clientWidth,\n    body ? body.scrollWidth : 0,\n    body ? body.clientWidth : 0\n  );\n  const height = max(\n    html.scrollHeight,\n    html.clientHeight,\n    body ? body.scrollHeight : 0,\n    body ? body.clientHeight : 0\n  );\n\n  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return { width, height, x, y };\n}\n","// @flow\nimport { type BasePlacement, type Placement, auto } from '../enums';\n\nexport default function getBasePlacement(\n  placement: Placement | typeof auto\n): BasePlacement {\n  return (placement.split('-')[0]: any);\n}\n","// @flow\nimport { type Variation, type Placement } from '../enums';\n\nexport default function getVariation(placement: Placement): ?Variation {\n  return (placement.split('-')[1]: any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nexport default function getMainAxisFromPlacement(\n  placement: Placement\n): 'x' | 'y' {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n","// @flow\nimport getBasePlacement from './getBasePlacement';\nimport getVariation from './getVariation';\nimport getMainAxisFromPlacement from './getMainAxisFromPlacement';\nimport type {\n  Rect,\n  PositioningStrategy,\n  Offsets,\n  ClientRectObject,\n} from '../types';\nimport { top, right, bottom, left, start, end, type Placement } from '../enums';\n\nexport default function computeOffsets({\n  reference,\n  element,\n  placement,\n}: {\n  reference: Rect | ClientRectObject,\n  element: Rect | ClientRectObject,\n  strategy: PositioningStrategy,\n  placement?: Placement,\n}): Offsets {\n  const basePlacement = placement ? getBasePlacement(placement) : null;\n  const variation = placement ? getVariation(placement) : null;\n  const commonX = reference.x + reference.width / 2 - element.width / 2;\n  const commonY = reference.y + reference.height / 2 - element.height / 2;\n\n  let offsets;\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height,\n      };\n      break;\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height,\n      };\n      break;\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY,\n      };\n      break;\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY,\n      };\n      break;\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y,\n      };\n  }\n\n  const mainAxis = basePlacement\n    ? getMainAxisFromPlacement(basePlacement)\n    : null;\n\n  if (mainAxis != null) {\n    const len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] =\n          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n      case end:\n        offsets[mainAxis] =\n          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n      default:\n    }\n  }\n\n  return offsets;\n}\n","// @flow\nimport type { SideObject } from '../types';\nimport getFreshSideObject from './getFreshSideObject';\n\nexport default function mergePaddingObject(\n  paddingObject: $Shape<SideObject>\n): SideObject {\n  return {\n    ...getFreshSideObject(),\n    ...paddingObject,\n  };\n}\n","// @flow\nimport type { SideObject } from '../types';\n\nexport default function getFreshSideObject(): SideObject {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n  };\n}\n","// @flow\n\nexport default function expandToHashMap<\n  T: number | string | boolean,\n  K: string\n>(value: T, keys: Array<K>): { [key: string]: T } {\n  return keys.reduce((hashMap, key) => {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}\n","// @flow\nimport type { State, SideObject, Padding, PositioningStrategy } from '../types';\nimport type { Placement, Boundary, RootBoundary, Context } from '../enums';\nimport getClippingRect from '../dom-utils/getClippingRect';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getBoundingClientRect from '../dom-utils/getBoundingClientRect';\nimport computeOffsets from './computeOffsets';\nimport rectToClientRect from './rectToClientRect';\nimport {\n  clippingParents,\n  reference,\n  popper,\n  bottom,\n  top,\n  right,\n  basePlacements,\n  viewport,\n} from '../enums';\nimport { isElement } from '../dom-utils/instanceOf';\nimport mergePaddingObject from './mergePaddingObject';\nimport expandToHashMap from './expandToHashMap';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  placement: Placement,\n  strategy: PositioningStrategy,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  elementContext: Context,\n  altBoundary: boolean,\n  padding: Padding,\n};\n\nexport default function detectOverflow(\n  state: State,\n  options: $Shape<Options> = {}\n): SideObject {\n  const {\n    placement = state.placement,\n    strategy = state.strategy,\n    boundary = clippingParents,\n    rootBoundary = viewport,\n    elementContext = popper,\n    altBoundary = false,\n    padding = 0,\n  } = options;\n\n  const paddingObject = mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n\n  const altContext = elementContext === popper ? reference : popper;\n\n  const popperRect = state.rects.popper;\n  const element = state.elements[altBoundary ? altContext : elementContext];\n\n  const clippingClientRect = getClippingRect(\n    isElement(element)\n      ? element\n      : element.contextElement || getDocumentElement(state.elements.popper),\n    boundary,\n    rootBoundary,\n    strategy\n  );\n\n  const referenceClientRect = getBoundingClientRect(state.elements.reference);\n\n  const popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement,\n  });\n\n  const popperClientRect = rectToClientRect({\n    ...popperRect,\n    ...popperOffsets,\n  });\n\n  const elementClientRect =\n    elementContext === popper ? popperClientRect : referenceClientRect;\n\n  // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n  const overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom:\n      elementClientRect.bottom -\n      clippingClientRect.bottom +\n      paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right:\n      elementClientRect.right - clippingClientRect.right + paddingObject.right,\n  };\n\n  const offsetData = state.modifiersData.offset;\n\n  // Offsets can be applied only to the popper element\n  if (elementContext === popper && offsetData) {\n    const offset = offsetData[placement];\n\n    Object.keys(overflowOffsets).forEach((key) => {\n      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}\n","// @flow\nimport type {\n  State,\n  OptionsGeneric,\n  Modifier,\n  Instance,\n  VirtualElement,\n} from './types';\nimport getCompositeRect from './dom-utils/getCompositeRect';\nimport getLayoutRect from './dom-utils/getLayoutRect';\nimport listScrollParents from './dom-utils/listScrollParents';\nimport getOffsetParent from './dom-utils/getOffsetParent';\nimport orderModifiers from './utils/orderModifiers';\nimport debounce from './utils/debounce';\nimport mergeByName from './utils/mergeByName';\nimport detectOverflow from './utils/detectOverflow';\nimport { isElement } from './dom-utils/instanceOf';\n\nconst DEFAULT_OPTIONS: OptionsGeneric<any> = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute',\n};\n\ntype PopperGeneratorArgs = {\n  defaultModifiers?: Array<Modifier<any, any>>,\n  defaultOptions?: $Shape<OptionsGeneric<any>>,\n};\n\nfunction areValidElements(...args: Array<any>): boolean {\n  return !args.some(\n    (element) =>\n      !(element && typeof element.getBoundingClientRect === 'function')\n  );\n}\n\nexport function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {\n  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =\n    generatorOptions;\n\n  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(\n    reference: Element | VirtualElement,\n    popper: HTMLElement,\n    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions\n  ): Instance {\n    let state: $Shape<State> = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: { ...DEFAULT_OPTIONS, ...defaultOptions },\n      modifiersData: {},\n      elements: {\n        reference,\n        popper,\n      },\n      attributes: {},\n      styles: {},\n    };\n\n    let effectCleanupFns: Array<() => void> = [];\n    let isDestroyed = false;\n\n    const instance = {\n      state,\n      setOptions(setOptionsAction) {\n        const options =\n          typeof setOptionsAction === 'function'\n            ? setOptionsAction(state.options)\n            : setOptionsAction;\n\n        cleanupModifierEffects();\n\n        state.options = {\n          // $FlowFixMe[exponential-spread]\n          ...defaultOptions,\n          ...state.options,\n          ...options,\n        };\n\n        state.scrollParents = {\n          reference: isElement(reference)\n            ? listScrollParents(reference)\n            : reference.contextElement\n            ? listScrollParents(reference.contextElement)\n            : [],\n          popper: listScrollParents(popper),\n        };\n\n        // Orders the modifiers based on their dependencies and `phase`\n        // properties\n        const orderedModifiers = orderModifiers(\n          mergeByName([...defaultModifiers, ...state.options.modifiers])\n        );\n\n        // Strip out disabled modifiers\n        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);\n\n        runModifierEffects();\n\n        return instance.update();\n      },\n\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        const { reference, popper } = state.elements;\n\n        // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n        if (!areValidElements(reference, popper)) {\n          return;\n        }\n\n        // Store the reference and popper rects to be read by modifiers\n        state.rects = {\n          reference: getCompositeRect(\n            reference,\n            getOffsetParent(popper),\n            state.options.strategy === 'fixed'\n          ),\n          popper: getLayoutRect(popper),\n        };\n\n        // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n        state.reset = false;\n\n        state.placement = state.options.placement;\n\n        // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n        state.orderedModifiers.forEach(\n          (modifier) =>\n            (state.modifiersData[modifier.name] = {\n              ...modifier.data,\n            })\n        );\n\n        for (let index = 0; index < state.orderedModifiers.length; index++) {\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          const { fn, options = {}, name } = state.orderedModifiers[index];\n\n          if (typeof fn === 'function') {\n            state = fn({ state, options, name, instance }) || state;\n          }\n        }\n      },\n\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce<$Shape<State>>(\n        () =>\n          new Promise<$Shape<State>>((resolve) => {\n            instance.forceUpdate();\n            resolve(state);\n          })\n      ),\n\n      destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      },\n    };\n\n    if (!areValidElements(reference, popper)) {\n      return instance;\n    }\n\n    instance.setOptions(options).then((state) => {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    });\n\n    // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {\n        if (typeof effect === 'function') {\n          const cleanupFn = effect({ state, name, instance, options });\n          const noopFn = () => {};\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach((fn) => fn());\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\n\nexport const createPopper = popperGenerator();\n\n// eslint-disable-next-line import/no-unused-modules\nexport { detectOverflow };\n","// @flow\n\nexport default function debounce<T>(fn: Function): () => Promise<T> {\n  let pending;\n  return () => {\n    if (!pending) {\n      pending = new Promise<T>(resolve => {\n        Promise.resolve().then(() => {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}\n","// @flow\nimport type { Modifier } from '../types';\n\nexport default function mergeByName(\n  modifiers: Array<$Shape<Modifier<any, any>>>\n): Array<$Shape<Modifier<any, any>>> {\n  const merged = modifiers.reduce((merged, current) => {\n    const existing = merged[current.name];\n    merged[current.name] = existing\n      ? {\n          ...existing,\n          ...current,\n          options: { ...existing.options, ...current.options },\n          data: { ...existing.data, ...current.data },\n        }\n      : current;\n    return merged;\n  }, {});\n\n  // IE11 does not support Object.values\n  return Object.keys(merged).map(key => merged[key]);\n}\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport getWindow from '../dom-utils/getWindow';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  scroll: boolean,\n  resize: boolean,\n};\n\nconst passive = { passive: true };\n\nfunction effect({ state, instance, options }: ModifierArguments<Options>) {\n  const { scroll = true, resize = true } = options;\n\n  const window = getWindow(state.elements.popper);\n  const scrollParents = [\n    ...state.scrollParents.reference,\n    ...state.scrollParents.popper,\n  ];\n\n  if (scroll) {\n    scrollParents.forEach(scrollParent => {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return () => {\n    if (scroll) {\n      scrollParents.forEach(scrollParent => {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type EventListenersModifier = Modifier<'eventListeners', Options>;\nexport default ({\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: () => {},\n  effect,\n  data: {},\n}: EventListenersModifier);\n","// @flow\nimport type { ModifierArguments, Modifier } from '../types';\nimport computeOffsets from '../utils/computeOffsets';\n\nfunction popperOffsets({ state, name }: ModifierArguments<{||}>) {\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement,\n  });\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;\nexport default ({\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {},\n}: PopperOffsetsModifier);\n","// @flow\nimport type {\n  PositioningStrategy,\n  Offsets,\n  Modifier,\n  ModifierArguments,\n  Rect,\n  Window,\n} from '../types';\nimport {\n  type BasePlacement,\n  type Variation,\n  top,\n  left,\n  right,\n  bottom,\n  end,\n} from '../enums';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getWindow from '../dom-utils/getWindow';\nimport getDocumentElement from '../dom-utils/getDocumentElement';\nimport getComputedStyle from '../dom-utils/getComputedStyle';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getVariation from '../utils/getVariation';\nimport { round } from '../utils/math';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type RoundOffsets = (\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>\n) => Offsets;\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets?: boolean | RoundOffsets,\n};\n\nconst unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto',\n};\n\n// Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\nfunction roundOffsetsByDPR({ x, y }, win: Window): Offsets {\n  const dpr = win.devicePixelRatio || 1;\n\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0,\n  };\n}\n\nexport function mapToStyles({\n  popper,\n  popperRect,\n  placement,\n  variation,\n  offsets,\n  position,\n  gpuAcceleration,\n  adaptive,\n  roundOffsets,\n  isFixed,\n}: {\n  popper: HTMLElement,\n  popperRect: Rect,\n  placement: BasePlacement,\n  variation: ?Variation,\n  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,\n  position: PositioningStrategy,\n  gpuAcceleration: boolean,\n  adaptive: boolean,\n  roundOffsets: boolean | RoundOffsets,\n  isFixed: boolean,\n}) {\n  let { x = 0, y = 0 } = offsets;\n\n  ({ x, y } =\n    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });\n\n  const hasX = offsets.hasOwnProperty('x');\n  const hasY = offsets.hasOwnProperty('y');\n\n  let sideX: string = left;\n  let sideY: string = top;\n\n  const win: Window = window;\n\n  if (adaptive) {\n    let offsetParent = getOffsetParent(popper);\n    let heightProp = 'clientHeight';\n    let widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (\n        getComputedStyle(offsetParent).position !== 'static' &&\n        position === 'absolute'\n      ) {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    }\n\n    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n    offsetParent = (offsetParent: Element);\n\n    if (\n      placement === top ||\n      ((placement === left || placement === right) && variation === end)\n    ) {\n      sideY = bottom;\n      const offsetY =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.height\n          : // $FlowFixMe[prop-missing]\n            offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (\n      placement === left ||\n      ((placement === top || placement === bottom) && variation === end)\n    ) {\n      sideX = right;\n      const offsetX =\n        isFixed && offsetParent === win && win.visualViewport\n          ? win.visualViewport.width\n          : // $FlowFixMe[prop-missing]\n            offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  const commonStyles = {\n    position,\n    ...(adaptive && unsetSides),\n  };\n\n  ({ x, y } =\n    roundOffsets === true\n      ? roundOffsetsByDPR({ x, y }, getWindow(popper))\n      : { x, y });\n\n  if (gpuAcceleration) {\n    return {\n      ...commonStyles,\n      [sideY]: hasY ? '0' : '',\n      [sideX]: hasX ? '0' : '',\n      // Layer acceleration can disable subpixel rendering which causes slightly\n      // blurry text on low PPI displays, so we want to use 2D transforms\n      // instead\n      transform:\n        (win.devicePixelRatio || 1) <= 1\n          ? `translate(${x}px, ${y}px)`\n          : `translate3d(${x}px, ${y}px, 0)`,\n    };\n  }\n\n  return {\n    ...commonStyles,\n    [sideY]: hasY ? `${y}px` : '',\n    [sideX]: hasX ? `${x}px` : '',\n    transform: '',\n  };\n}\n\nfunction computeStyles({ state, options }: ModifierArguments<Options>) {\n  const {\n    gpuAcceleration = true,\n    adaptive = true,\n    // defaults to use builtin `roundOffsetsByDPR`\n    roundOffsets = true,\n  } = options;\n\n  const commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed',\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = {\n      ...state.styles.popper,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.popperOffsets,\n        position: state.options.strategy,\n        adaptive,\n        roundOffsets,\n      }),\n    };\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = {\n      ...state.styles.arrow,\n      ...mapToStyles({\n        ...commonStyles,\n        offsets: state.modifiersData.arrow,\n        position: 'absolute',\n        adaptive: false,\n        roundOffsets,\n      }),\n    };\n  }\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-placement': state.placement,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ComputeStylesModifier = Modifier<'computeStyles', Options>;\nexport default ({\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {},\n}: ComputeStylesModifier);\n","// @flow\nimport type { Modifier, ModifierArguments } from '../types';\nimport getNodeName from '../dom-utils/getNodeName';\nimport { isHTMLElement } from '../dom-utils/instanceOf';\n\n// This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles({ state }: ModifierArguments<{||}>) {\n  Object.keys(state.elements).forEach((name) => {\n    const style = state.styles[name] || {};\n\n    const attributes = state.attributes[name] || {};\n    const element = state.elements[name];\n\n    // arrow is optional + virtual elements\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    }\n\n    // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n    Object.assign(element.style, style);\n\n    Object.keys(attributes).forEach((name) => {\n      const value = attributes[name];\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect({ state }: ModifierArguments<{||}>) {\n  const initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0',\n    },\n    arrow: {\n      position: 'absolute',\n    },\n    reference: {},\n  };\n\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return () => {\n    Object.keys(state.elements).forEach((name) => {\n      const element = state.elements[name];\n      const attributes = state.attributes[name] || {};\n\n      const styleProperties = Object.keys(\n        state.styles.hasOwnProperty(name)\n          ? state.styles[name]\n          : initialStyles[name]\n      );\n\n      // Set all values to an empty string to unset them\n      const style = styleProperties.reduce((style, property) => {\n        style[property] = '';\n        return style;\n      }, {});\n\n      // arrow is optional + virtual elements\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n\n      Object.keys(attributes).forEach((attribute) => {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ApplyStylesModifier = Modifier<'applyStyles', {||}>;\nexport default ({\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect,\n  requires: ['computeStyles'],\n}: ApplyStylesModifier);\n","// @flow\nimport type { Placement } from '../enums';\nimport type { ModifierArguments, Modifier, Rect, Offsets } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport { top, left, right, placements } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetsFunction = ({\n  popper: Rect,\n  reference: Rect,\n  placement: Placement,\n}) => [?number, ?number];\n\ntype Offset = OffsetsFunction | [?number, ?number];\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  offset: Offset,\n};\n\nexport function distanceAndSkiddingToXY(\n  placement: Placement,\n  rects: { popper: Rect, reference: Rect },\n  offset: Offset\n): Offsets {\n  const basePlacement = getBasePlacement(placement);\n  const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  let [skidding, distance] =\n    typeof offset === 'function'\n      ? offset({\n          ...rects,\n          placement,\n        })\n      : offset;\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n\n  return [left, right].indexOf(basePlacement) >= 0\n    ? { x: distance, y: skidding }\n    : { x: skidding, y: distance };\n}\n\nfunction offset({ state, options, name }: ModifierArguments<Options>) {\n  const { offset = [0, 0] } = options;\n\n  const data = placements.reduce((acc, placement) => {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n\n  const { x, y } = data[state.placement];\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type OffsetModifier = Modifier<'offset', Options>;\nexport default ({\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset,\n}: OffsetModifier);\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n\nexport default function getOppositePlacement(placement: Placement): Placement {\n  return (placement.replace(\n    /left|right|bottom|top/g,\n    matched => hash[matched]\n  ): any);\n}\n","// @flow\nimport type { Placement } from '../enums';\n\nconst hash = { start: 'end', end: 'start' };\n\nexport default function getOppositeVariationPlacement(\n  placement: Placement\n): Placement {\n  return (placement.replace(/start|end/g, matched => hash[matched]): any);\n}\n","// @flow\nimport type { State, Padding } from '../types';\nimport type {\n  Placement,\n  ComputedPlacement,\n  Boundary,\n  RootBoundary,\n} from '../enums';\nimport getVariation from './getVariation';\nimport {\n  variationPlacements,\n  basePlacements,\n  placements as allPlacements,\n} from '../enums';\nimport detectOverflow from './detectOverflow';\nimport getBasePlacement from './getBasePlacement';\n\ntype Options = {\n  placement: Placement,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  flipVariations: boolean,\n  allowedAutoPlacements?: Array<Placement>,\n};\n\ntype OverflowsMap = { [ComputedPlacement]: number };\n\nexport default function computeAutoPlacement(\n  state: $Shape<State>,\n  options: Options = {}\n): Array<ComputedPlacement> {\n  const {\n    placement,\n    boundary,\n    rootBoundary,\n    padding,\n    flipVariations,\n    allowedAutoPlacements = allPlacements,\n  } = options;\n\n  const variation = getVariation(placement);\n\n  const placements = variation\n    ? flipVariations\n      ? variationPlacements\n      : variationPlacements.filter(\n          (placement) => getVariation(placement) === variation\n        )\n    : basePlacements;\n\n  let allowedPlacements = placements.filter(\n    (placement) => allowedAutoPlacements.indexOf(placement) >= 0\n  );\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n  }\n\n  // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n  const overflows: OverflowsMap = allowedPlacements.reduce((acc, placement) => {\n    acc[placement] = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      padding,\n    })[getBasePlacement(placement)];\n\n    return acc;\n  }, {});\n\n  return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);\n}\n","// @flow\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { ModifierArguments, Modifier, Padding } from '../types';\nimport getOppositePlacement from '../utils/getOppositePlacement';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';\nimport detectOverflow from '../utils/detectOverflow';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\nimport { bottom, top, start, right, left, auto } from '../enums';\nimport getVariation from '../utils/getVariation';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  mainAxis: boolean,\n  altAxis: boolean,\n  fallbackPlacements: Array<Placement>,\n  padding: Padding,\n  boundary: Boundary,\n  rootBoundary: RootBoundary,\n  altBoundary: boolean,\n  flipVariations: boolean,\n  allowedAutoPlacements: Array<Placement>,\n};\n\nfunction getExpandedFallbackPlacements(placement: Placement): Array<Placement> {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  const oppositePlacement = getOppositePlacement(placement);\n\n  return [\n    getOppositeVariationPlacement(placement),\n    oppositePlacement,\n    getOppositeVariationPlacement(oppositePlacement),\n  ];\n}\n\nfunction flip({ state, options, name }: ModifierArguments<Options>) {\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = true,\n    fallbackPlacements: specifiedFallbackPlacements,\n    padding,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    flipVariations = true,\n    allowedAutoPlacements,\n  } = options;\n\n  const preferredPlacement = state.options.placement;\n  const basePlacement = getBasePlacement(preferredPlacement);\n  const isBasePlacement = basePlacement === preferredPlacement;\n\n  const fallbackPlacements =\n    specifiedFallbackPlacements ||\n    (isBasePlacement || !flipVariations\n      ? [getOppositePlacement(preferredPlacement)]\n      : getExpandedFallbackPlacements(preferredPlacement));\n\n  const placements = [preferredPlacement, ...fallbackPlacements].reduce(\n    (acc, placement) => {\n      return acc.concat(\n        getBasePlacement(placement) === auto\n          ? computeAutoPlacement(state, {\n              placement,\n              boundary,\n              rootBoundary,\n              padding,\n              flipVariations,\n              allowedAutoPlacements,\n            })\n          : placement\n      );\n    },\n    []\n  );\n\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n\n  const checksMap = new Map();\n  let makeFallbackChecks = true;\n  let firstFittingPlacement = placements[0];\n\n  for (let i = 0; i < placements.length; i++) {\n    const placement = placements[i];\n    const basePlacement = getBasePlacement(placement);\n    const isStartVariation = getVariation(placement) === start;\n    const isVertical = [top, bottom].indexOf(basePlacement) >= 0;\n    const len = isVertical ? 'width' : 'height';\n\n    const overflow = detectOverflow(state, {\n      placement,\n      boundary,\n      rootBoundary,\n      altBoundary,\n      padding,\n    });\n\n    let mainVariationSide: any = isVertical\n      ? isStartVariation\n        ? right\n        : left\n      : isStartVariation\n      ? bottom\n      : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    const altVariationSide: any = getOppositePlacement(mainVariationSide);\n\n    const checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(\n        overflow[mainVariationSide] <= 0,\n        overflow[altVariationSide] <= 0\n      );\n    }\n\n    if (checks.every((check) => check)) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    const numberOfChecks = flipVariations ? 3 : 1;\n\n    for (let i = numberOfChecks; i > 0; i--) {\n      const fittingPlacement = placements.find((placement) => {\n        const checks = checksMap.get(placement);\n        if (checks) {\n          return checks.slice(0, i).every((check) => check);\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        break;\n      }\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type FlipModifier = Modifier<'flip', Options>;\nexport default ({\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: { _skip: false },\n}: FlipModifier);\n","// @flow\nimport { max as mathMax, min as mathMin } from './math';\n\nexport function within(min: number, value: number, max: number): number {\n  return mathMax(min, mathMin(value, max));\n}\n\nexport function withinMaxClamp(min: number, value: number, max: number) {\n  const v = within(min, value, max);\n  return v > max ? max : v;\n}\n","// @flow\nimport { top, left, right, bottom, start } from '../enums';\nimport type { Placement, Boundary, RootBoundary } from '../enums';\nimport type { Rect, ModifierArguments, Modifier, Padding } from '../types';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport getAltAxis from '../utils/getAltAxis';\nimport { within, withinMaxClamp } from '../utils/within';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport detectOverflow from '../utils/detectOverflow';\nimport getVariation from '../utils/getVariation';\nimport getFreshSideObject from '../utils/getFreshSideObject';\nimport { min as mathMin, max as mathMax } from '../utils/math';\n\ntype TetherOffset =\n  | (({\n      popper: Rect,\n      reference: Rect,\n      placement: Placement,\n    }) => number | { mainAxis: number, altAxis: number })\n  | number\n  | { mainAxis: number, altAxis: number };\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  /* Prevents boundaries overflow on the main axis */\n  mainAxis: boolean,\n  /* Prevents boundaries overflow on the alternate axis */\n  altAxis: boolean,\n  /* The area to check the popper is overflowing in */\n  boundary: Boundary,\n  /* If the popper is not overflowing the main area, fallback to this one */\n  rootBoundary: RootBoundary,\n  /* Use the reference's \"clippingParents\" boundary context */\n  altBoundary: boolean,\n  /**\n   * Allows the popper to overflow from its boundaries to keep it near its\n   * reference element\n   */\n  tether: boolean,\n  /* Offsets when the `tether` option should activate */\n  tetherOffset: TetherOffset,\n  /* Sets a padding to the provided boundary */\n  padding: Padding,\n};\n\nfunction preventOverflow({ state, options, name }: ModifierArguments<Options>) {\n  const {\n    mainAxis: checkMainAxis = true,\n    altAxis: checkAltAxis = false,\n    boundary,\n    rootBoundary,\n    altBoundary,\n    padding,\n    tether = true,\n    tetherOffset = 0,\n  } = options;\n\n  const overflow = detectOverflow(state, {\n    boundary,\n    rootBoundary,\n    padding,\n    altBoundary,\n  });\n  const basePlacement = getBasePlacement(state.placement);\n  const variation = getVariation(state.placement);\n  const isBasePlacement = !variation;\n  const mainAxis = getMainAxisFromPlacement(basePlacement);\n  const altAxis = getAltAxis(mainAxis);\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const tetherOffsetValue =\n    typeof tetherOffset === 'function'\n      ? tetherOffset({\n          ...state.rects,\n          placement: state.placement,\n        })\n      : tetherOffset;\n  const normalizedTetherOffsetValue =\n    typeof tetherOffsetValue === 'number'\n      ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue }\n      : { mainAxis: 0, altAxis: 0, ...tetherOffsetValue };\n  const offsetModifierState = state.modifiersData.offset\n    ? state.modifiersData.offset[state.placement]\n    : null;\n\n  const data = { x: 0, y: 0 };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    const mainSide = mainAxis === 'y' ? top : left;\n    const altSide = mainAxis === 'y' ? bottom : right;\n    const len = mainAxis === 'y' ? 'height' : 'width';\n    const offset = popperOffsets[mainAxis];\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const additive = tether ? -popperRect[len] / 2 : 0;\n\n    const minLen = variation === start ? referenceRect[len] : popperRect[len];\n    const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];\n\n    // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n    const arrowElement = state.elements.arrow;\n    const arrowRect =\n      tether && arrowElement\n        ? getLayoutRect(arrowElement)\n        : { width: 0, height: 0 };\n    const arrowPaddingObject = state.modifiersData['arrow#persistent']\n      ? state.modifiersData['arrow#persistent'].padding\n      : getFreshSideObject();\n    const arrowPaddingMin = arrowPaddingObject[mainSide];\n    const arrowPaddingMax = arrowPaddingObject[altSide];\n\n    // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n    const arrowLen = within(0, referenceRect[len], arrowRect[len]);\n\n    const minOffset = isBasePlacement\n      ? referenceRect[len] / 2 -\n        additive -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis\n      : minLen -\n        arrowLen -\n        arrowPaddingMin -\n        normalizedTetherOffsetValue.mainAxis;\n    const maxOffset = isBasePlacement\n      ? -referenceRect[len] / 2 +\n        additive +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis\n      : maxLen +\n        arrowLen +\n        arrowPaddingMax +\n        normalizedTetherOffsetValue.mainAxis;\n\n    const arrowOffsetParent =\n      state.elements.arrow && getOffsetParent(state.elements.arrow);\n    const clientOffset = arrowOffsetParent\n      ? mainAxis === 'y'\n        ? arrowOffsetParent.clientTop || 0\n        : arrowOffsetParent.clientLeft || 0\n      : 0;\n\n    const offsetModifierValue = offsetModifierState?.[mainAxis] ?? 0;\n    const tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    const tetherMax = offset + maxOffset - offsetModifierValue;\n\n    const preventedOffset = within(\n      tether ? mathMin(min, tetherMin) : min,\n      offset,\n      tether ? mathMax(max, tetherMax) : max\n    );\n\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    const mainSide = mainAxis === 'x' ? top : left;\n    const altSide = mainAxis === 'x' ? bottom : right;\n    const offset = popperOffsets[altAxis];\n\n    const len = altAxis === 'y' ? 'height' : 'width';\n\n    const min = offset + overflow[mainSide];\n    const max = offset - overflow[altSide];\n\n    const isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    const offsetModifierValue = offsetModifierState?.[altAxis] ?? 0;\n    const tetherMin = isOriginSide\n      ? min\n      : offset -\n        referenceRect[len] -\n        popperRect[len] -\n        offsetModifierValue +\n        normalizedTetherOffsetValue.altAxis;\n    const tetherMax = isOriginSide\n      ? offset +\n        referenceRect[len] +\n        popperRect[len] -\n        offsetModifierValue -\n        normalizedTetherOffsetValue.altAxis\n      : max;\n\n    const preventedOffset =\n      tether && isOriginSide\n        ? withinMaxClamp(tetherMin, offset, tetherMax)\n        : within(tether ? tetherMin : min, offset, tether ? tetherMax : max);\n\n    popperOffsets[altAxis] = preventedOffset;\n    data[altAxis] = preventedOffset - offset;\n  }\n\n  state.modifiersData[name] = data;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type PreventOverflowModifier = Modifier<'preventOverflow', Options>;\nexport default ({\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset'],\n}: PreventOverflowModifier);\n","// @flow\n\nexport default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {\n  return axis === 'x' ? 'y' : 'x';\n}\n","// @flow\nimport type { Modifier, ModifierArguments, Padding, Rect } from '../types';\nimport type { Placement } from '../enums';\nimport getBasePlacement from '../utils/getBasePlacement';\nimport getLayoutRect from '../dom-utils/getLayoutRect';\nimport contains from '../dom-utils/contains';\nimport getOffsetParent from '../dom-utils/getOffsetParent';\nimport getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';\nimport { within } from '../utils/within';\nimport mergePaddingObject from '../utils/mergePaddingObject';\nimport expandToHashMap from '../utils/expandToHashMap';\nimport { left, right, basePlacements, top, bottom } from '../enums';\n\n// eslint-disable-next-line import/no-unused-modules\nexport type Options = {\n  element: HTMLElement | string | null,\n  padding:\n    | Padding\n    | (({|\n        popper: Rect,\n        reference: Rect,\n        placement: Placement,\n      |}) => Padding),\n};\n\nconst toPaddingObject = (padding, state) => {\n  padding =\n    typeof padding === 'function'\n      ? padding({ ...state.rects, placement: state.placement })\n      : padding;\n\n  return mergePaddingObject(\n    typeof padding !== 'number'\n      ? padding\n      : expandToHashMap(padding, basePlacements)\n  );\n};\n\nfunction arrow({ state, name, options }: ModifierArguments<Options>) {\n  const arrowElement = state.elements.arrow;\n  const popperOffsets = state.modifiersData.popperOffsets;\n  const basePlacement = getBasePlacement(state.placement);\n  const axis = getMainAxisFromPlacement(basePlacement);\n  const isVertical = [left, right].indexOf(basePlacement) >= 0;\n  const len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  const paddingObject = toPaddingObject(options.padding, state);\n  const arrowRect = getLayoutRect(arrowElement);\n  const minProp = axis === 'y' ? top : left;\n  const maxProp = axis === 'y' ? bottom : right;\n\n  const endDiff =\n    state.rects.reference[len] +\n    state.rects.reference[axis] -\n    popperOffsets[axis] -\n    state.rects.popper[len];\n  const startDiff = popperOffsets[axis] - state.rects.reference[axis];\n\n  const arrowOffsetParent = getOffsetParent(arrowElement);\n  const clientSize = arrowOffsetParent\n    ? axis === 'y'\n      ? arrowOffsetParent.clientHeight || 0\n      : arrowOffsetParent.clientWidth || 0\n    : 0;\n\n  const centerToReference = endDiff / 2 - startDiff / 2;\n\n  // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n  const min = paddingObject[minProp];\n  const max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  const offset = within(min, center, max);\n\n  // Prevents breaking syntax highlighting...\n  const axisProp: string = axis;\n  state.modifiersData[name] = {\n    [axisProp]: offset,\n    centerOffset: offset - center,\n  };\n}\n\nfunction effect({ state, options }: ModifierArguments<Options>) {\n  let { element: arrowElement = '[data-popper-arrow]' } = options;\n\n  if (arrowElement == null) {\n    return;\n  }\n\n  // CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type ArrowModifier = Modifier<'arrow', Options>;\nexport default ({\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow'],\n}: ArrowModifier);\n","// @flow\nimport type {\n  ModifierArguments,\n  Modifier,\n  Rect,\n  SideObject,\n  Offsets,\n} from '../types';\nimport { top, bottom, left, right } from '../enums';\nimport detectOverflow from '../utils/detectOverflow';\n\nfunction getSideOffsets(\n  overflow: SideObject,\n  rect: Rect,\n  preventedOffsets: Offsets = { x: 0, y: 0 }\n): SideObject {\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x,\n  };\n}\n\nfunction isAnySideFullyClipped(overflow: SideObject): boolean {\n  return [top, right, bottom, left].some((side) => overflow[side] >= 0);\n}\n\nfunction hide({ state, name }: ModifierArguments<{||}>) {\n  const referenceRect = state.rects.reference;\n  const popperRect = state.rects.popper;\n  const preventedOffsets = state.modifiersData.preventOverflow;\n\n  const referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference',\n  });\n  const popperAltOverflow = detectOverflow(state, {\n    altBoundary: true,\n  });\n\n  const referenceClippingOffsets = getSideOffsets(\n    referenceOverflow,\n    referenceRect\n  );\n  const popperEscapeOffsets = getSideOffsets(\n    popperAltOverflow,\n    popperRect,\n    preventedOffsets\n  );\n\n  const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n\n  state.modifiersData[name] = {\n    referenceClippingOffsets,\n    popperEscapeOffsets,\n    isReferenceHidden,\n    hasPopperEscaped,\n  };\n\n  state.attributes.popper = {\n    ...state.attributes.popper,\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped,\n  };\n}\n\n// eslint-disable-next-line import/no-unused-modules\nexport type HideModifier = Modifier<'hide', {||}>;\nexport default ({\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide,\n}: HideModifier);\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n","// @flow\nimport { popperGenerator, detectOverflow } from './createPopper';\n\nimport eventListeners from './modifiers/eventListeners';\nimport popperOffsets from './modifiers/popperOffsets';\nimport computeStyles from './modifiers/computeStyles';\nimport applyStyles from './modifiers/applyStyles';\nimport offset from './modifiers/offset';\nimport flip from './modifiers/flip';\nimport preventOverflow from './modifiers/preventOverflow';\nimport arrow from './modifiers/arrow';\nimport hide from './modifiers/hide';\n\nexport type * from './types';\n\nconst defaultModifiers = [\n  eventListeners,\n  popperOffsets,\n  computeStyles,\n  applyStyles,\n  offset,\n  flip,\n  preventOverflow,\n  arrow,\n  hide,\n];\n\nconst createPopper = popperGenerator({ defaultModifiers });\n\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };\n// eslint-disable-next-line import/no-unused-modules\nexport { createPopper as createPopperLite } from './popper-lite';\n// eslint-disable-next-line import/no-unused-modules\nexport * from './modifiers';\n"],"names":["getWindow","node","window","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","Math","min","round","getUAString","uaData","navigator","userAgentData","brands","Array","isArray","map","item","brand","version","join","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","offsetHeight","height","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","toLowerCase","getDocumentElement","document","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","overflow","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","scrollParent","isBody","_element$ownerDocumen","target","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","auto","basePlacements","start","end","viewport","popper","variationPlacements","reduce","acc","placement","placements","modifierPhases","order","modifiers","Map","visited","Set","result","sort","modifier","add","name","requires","requiresIfExists","forEach","dep","has","depModifier","get","push","set","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","strategy","html","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","reference","basePlacement","variation","commonX","commonY","mainAxis","len","mergePaddingObject","paddingObject","expandToHashMap","value","keys","hashMap","key","detectOverflow","state","options","elementContext","altBoundary","padding","altContext","popperRect","rects","elements","clippingClientRect","contextElement","referenceClientRect","popperOffsets","popperClientRect","elementClientRect","overflowOffsets","offsetData","modifiersData","offset","Object","multiply","axis","DEFAULT_OPTIONS","areValidElements","args","some","popperGenerator","generatorOptions","defaultModifiers","defaultOptions","fn","pending","orderedModifiers","attributes","styles","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","merged","phase","orderModifiers","current","existing","data","m","enabled","effect","cleanupFn","noopFn","update","forceUpdate","reset","index","length","Promise","resolve","then","undefined","destroy","onFirstUpdate","passive","resize","addEventListener","removeEventListener","unsetSides","mapToStyles","gpuAcceleration","adaptive","roundOffsets","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","commonStyles","dpr","devicePixelRatio","roundOffsetsByDPR","arrow","style","assign","removeAttribute","setAttribute","initialStyles","margin","property","attribute","invertDistance","skidding","distance","distanceAndSkiddingToXY","hash","getOppositePlacement","replace","matched","getOppositeVariationPlacement","computeAutoPlacement","flipVariations","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","a","b","_skip","checkMainAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","fittingPlacement","find","slice","within","mathMax","mathMin","tether","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","isOriginSide","tetherMin","v","withinMaxClamp","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","createPopper","eventListeners","computeStyles","applyStyles","flip","hide"],"mappings":"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"}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/index.d.ts b/node_modules/@popperjs/core/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f41a696fd204db5a4678c415898736f452ffc0c2
--- /dev/null
+++ b/node_modules/@popperjs/core/index.d.ts
@@ -0,0 +1 @@
+export * from './lib';
diff --git a/node_modules/@popperjs/core/lib/createPopper.d.ts b/node_modules/@popperjs/core/lib/createPopper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e1c038456ddb1e12ffa883069cf674f74ae69cb2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/createPopper.d.ts
@@ -0,0 +1,9 @@
+import type { OptionsGeneric, Modifier, Instance, VirtualElement } from "./types";
+import detectOverflow from "./utils/detectOverflow";
+declare type PopperGeneratorArgs = {
+    defaultModifiers?: Array<Modifier<any, any>>;
+    defaultOptions?: Partial<OptionsGeneric<any>>;
+};
+export declare function popperGenerator(generatorOptions?: PopperGeneratorArgs): <TModifier extends Partial<Modifier<any, any>>>(reference: Element | VirtualElement, popper: HTMLElement, options?: Partial<OptionsGeneric<TModifier>>) => Instance;
+export declare const createPopper: <TModifier extends Partial<Modifier<any, any>>>(reference: Element | VirtualElement, popper: HTMLElement, options?: Partial<OptionsGeneric<TModifier>>) => Instance;
+export { detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/createPopper.js b/node_modules/@popperjs/core/lib/createPopper.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af3ce336dd60d3f7c8bcc7aeb4abd44a2da80ed
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/createPopper.js
@@ -0,0 +1,199 @@
+import getCompositeRect from "./dom-utils/getCompositeRect.js";
+import getLayoutRect from "./dom-utils/getLayoutRect.js";
+import listScrollParents from "./dom-utils/listScrollParents.js";
+import getOffsetParent from "./dom-utils/getOffsetParent.js";
+import orderModifiers from "./utils/orderModifiers.js";
+import debounce from "./utils/debounce.js";
+import mergeByName from "./utils/mergeByName.js";
+import detectOverflow from "./utils/detectOverflow.js";
+import { isElement } from "./dom-utils/instanceOf.js";
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+export function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        });
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref) {
+        var name = _ref.name,
+            _ref$options = _ref.options,
+            options = _ref$options === void 0 ? {} : _ref$options,
+            effect = _ref.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+export var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules
+
+export { detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/createPopper.js.flow b/node_modules/@popperjs/core/lib/createPopper.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..94b3325fba42df5ce6d136009069a8f34f152090
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/createPopper.js.flow
@@ -0,0 +1,218 @@
+// @flow
+import type {
+  State,
+  OptionsGeneric,
+  Modifier,
+  Instance,
+  VirtualElement,
+} from './types';
+import getCompositeRect from './dom-utils/getCompositeRect';
+import getLayoutRect from './dom-utils/getLayoutRect';
+import listScrollParents from './dom-utils/listScrollParents';
+import getOffsetParent from './dom-utils/getOffsetParent';
+import orderModifiers from './utils/orderModifiers';
+import debounce from './utils/debounce';
+import mergeByName from './utils/mergeByName';
+import detectOverflow from './utils/detectOverflow';
+import { isElement } from './dom-utils/instanceOf';
+
+const DEFAULT_OPTIONS: OptionsGeneric<any> = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute',
+};
+
+type PopperGeneratorArgs = {
+  defaultModifiers?: Array<Modifier<any, any>>,
+  defaultOptions?: $Shape<OptionsGeneric<any>>,
+};
+
+function areValidElements(...args: Array<any>): boolean {
+  return !args.some(
+    (element) =>
+      !(element && typeof element.getBoundingClientRect === 'function')
+  );
+}
+
+export function popperGenerator(generatorOptions: PopperGeneratorArgs = {}) {
+  const { defaultModifiers = [], defaultOptions = DEFAULT_OPTIONS } =
+    generatorOptions;
+
+  return function createPopper<TModifier: $Shape<Modifier<any, any>>>(
+    reference: Element | VirtualElement,
+    popper: HTMLElement,
+    options: $Shape<OptionsGeneric<TModifier>> = defaultOptions
+  ): Instance {
+    let state: $Shape<State> = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: { ...DEFAULT_OPTIONS, ...defaultOptions },
+      modifiersData: {},
+      elements: {
+        reference,
+        popper,
+      },
+      attributes: {},
+      styles: {},
+    };
+
+    let effectCleanupFns: Array<() => void> = [];
+    let isDestroyed = false;
+
+    const instance = {
+      state,
+      setOptions(setOptionsAction) {
+        const options =
+          typeof setOptionsAction === 'function'
+            ? setOptionsAction(state.options)
+            : setOptionsAction;
+
+        cleanupModifierEffects();
+
+        state.options = {
+          // $FlowFixMe[exponential-spread]
+          ...defaultOptions,
+          ...state.options,
+          ...options,
+        };
+
+        state.scrollParents = {
+          reference: isElement(reference)
+            ? listScrollParents(reference)
+            : reference.contextElement
+            ? listScrollParents(reference.contextElement)
+            : [],
+          popper: listScrollParents(popper),
+        };
+
+        // Orders the modifiers based on their dependencies and `phase`
+        // properties
+        const orderedModifiers = orderModifiers(
+          mergeByName([...defaultModifiers, ...state.options.modifiers])
+        );
+
+        // Strip out disabled modifiers
+        state.orderedModifiers = orderedModifiers.filter((m) => m.enabled);
+
+        runModifierEffects();
+
+        return instance.update();
+      },
+
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        const { reference, popper } = state.elements;
+
+        // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+        if (!areValidElements(reference, popper)) {
+          return;
+        }
+
+        // Store the reference and popper rects to be read by modifiers
+        state.rects = {
+          reference: getCompositeRect(
+            reference,
+            getOffsetParent(popper),
+            state.options.strategy === 'fixed'
+          ),
+          popper: getLayoutRect(popper),
+        };
+
+        // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+        state.reset = false;
+
+        state.placement = state.options.placement;
+
+        // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+        state.orderedModifiers.forEach(
+          (modifier) =>
+            (state.modifiersData[modifier.name] = {
+              ...modifier.data,
+            })
+        );
+
+        for (let index = 0; index < state.orderedModifiers.length; index++) {
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          const { fn, options = {}, name } = state.orderedModifiers[index];
+
+          if (typeof fn === 'function') {
+            state = fn({ state, options, name, instance }) || state;
+          }
+        }
+      },
+
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce<$Shape<State>>(
+        () =>
+          new Promise<$Shape<State>>((resolve) => {
+            instance.forceUpdate();
+            resolve(state);
+          })
+      ),
+
+      destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      },
+    };
+
+    if (!areValidElements(reference, popper)) {
+      return instance;
+    }
+
+    instance.setOptions(options).then((state) => {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    });
+
+    // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(({ name, options = {}, effect }) => {
+        if (typeof effect === 'function') {
+          const cleanupFn = effect({ state, name, instance, options });
+          const noopFn = () => {};
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach((fn) => fn());
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+
+export const createPopper = popperGenerator();
+
+// eslint-disable-next-line import/no-unused-modules
+export { detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/dom-utils/contains.d.ts b/node_modules/@popperjs/core/lib/dom-utils/contains.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c6347d87ba6116d0c49bcfd74af1c7ebd59c05fb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/contains.d.ts
@@ -0,0 +1 @@
+export default function contains(parent: Element, child: Element): boolean;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/contains.js b/node_modules/@popperjs/core/lib/dom-utils/contains.js
new file mode 100644
index 0000000000000000000000000000000000000000..2a537728a2ab012aee3bd55fde9349a8d7b274c6
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/contains.js
@@ -0,0 +1,23 @@
+import { isShadowRoot } from "./instanceOf.js";
+export default function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/contains.js.flow b/node_modules/@popperjs/core/lib/dom-utils/contains.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..316479295c65b4db2a01a8d4339f0ba74e2f4405
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/contains.js.flow
@@ -0,0 +1,25 @@
+// @flow
+import { isShadowRoot } from './instanceOf';
+
+export default function contains(parent: Element, child: Element) {
+  const rootNode = child.getRootNode && child.getRootNode();
+
+  // First, attempt with faster native method
+  if (parent.contains(child)) {
+    return true;
+  }
+  // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+    let next = child;
+    do {
+      if (next && parent.isSameNode(next)) {
+        return true;
+      }
+      // $FlowFixMe[prop-missing]: need a better way to handle this...
+      next = next.parentNode || next.host;
+    } while (next);
+  }
+
+  // Give up, the result is false
+  return false;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd1b313e0c0342b255eb12883a804912597206cc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.d.ts
@@ -0,0 +1,2 @@
+import type { ClientRectObject, VirtualElement } from "../types";
+export default function getBoundingClientRect(element: Element | VirtualElement, includeScale?: boolean, isFixedStrategy?: boolean): ClientRectObject;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..fa065a21108c5fa4be795997184832dc36ff6696
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
@@ -0,0 +1,41 @@
+import { isElement, isHTMLElement } from "./instanceOf.js";
+import { round } from "../utils/math.js";
+import getWindow from "./getWindow.js";
+import isLayoutViewport from "./isLayoutViewport.js";
+export default function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e6fb477a811f2c0c09f21f72f5baa751e0b5c228
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js.flow
@@ -0,0 +1,52 @@
+// @flow
+import type { ClientRectObject, VirtualElement } from '../types';
+import { isElement, isHTMLElement } from './instanceOf';
+import { round } from '../utils/math';
+import getWindow from './getWindow';
+import isLayoutViewport from './isLayoutViewport';
+
+export default function getBoundingClientRect(
+  element: Element | VirtualElement,
+  includeScale: boolean = false,
+  isFixedStrategy: boolean = false
+): ClientRectObject {
+  const clientRect = element.getBoundingClientRect();
+  let scaleX = 1;
+  let scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX =
+      (element: HTMLElement).offsetWidth > 0
+        ? round(clientRect.width) / (element: HTMLElement).offsetWidth || 1
+        : 1;
+    scaleY =
+      (element: HTMLElement).offsetHeight > 0
+        ? round(clientRect.height) / (element: HTMLElement).offsetHeight || 1
+        : 1;
+  }
+
+  const { visualViewport } = isElement(element) ? getWindow(element) : window;
+  const addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+
+  const x =
+    (clientRect.left +
+      (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) /
+    scaleX;
+  const y =
+    (clientRect.top +
+      (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) /
+    scaleY;
+  const width = clientRect.width / scaleX;
+  const height = clientRect.height / scaleY;
+
+  return {
+    width,
+    height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x,
+    y,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8aa71e99f7cbba14724de569be62e8f033a239c3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.d.ts
@@ -0,0 +1,3 @@
+import type { ClientRectObject, PositioningStrategy } from "../types";
+import type { Boundary, RootBoundary } from "../enums";
+export default function getClippingRect(element: Element, boundary: Boundary, rootBoundary: RootBoundary, strategy: PositioningStrategy): ClientRectObject;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..99d66e89a8400cc75ee3eac17ffab4900266b098
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js
@@ -0,0 +1,70 @@
+import { viewport } from "../enums.js";
+import getViewportRect from "./getViewportRect.js";
+import getDocumentRect from "./getDocumentRect.js";
+import listScrollParents from "./listScrollParents.js";
+import getOffsetParent from "./getOffsetParent.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getComputedStyle from "./getComputedStyle.js";
+import { isElement, isHTMLElement } from "./instanceOf.js";
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getParentNode from "./getParentNode.js";
+import contains from "./contains.js";
+import getNodeName from "./getNodeName.js";
+import rectToClientRect from "../utils/rectToClientRect.js";
+import { max, min } from "../utils/math.js";
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+export default function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..c50749ff0b90424d365c1b3feb220ad92b08d227
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js.flow
@@ -0,0 +1,106 @@
+// @flow
+import type { ClientRectObject, PositioningStrategy } from '../types';
+import type { Boundary, RootBoundary } from '../enums';
+import { viewport } from '../enums';
+import getViewportRect from './getViewportRect';
+import getDocumentRect from './getDocumentRect';
+import listScrollParents from './listScrollParents';
+import getOffsetParent from './getOffsetParent';
+import getDocumentElement from './getDocumentElement';
+import getComputedStyle from './getComputedStyle';
+import { isElement, isHTMLElement } from './instanceOf';
+import getBoundingClientRect from './getBoundingClientRect';
+import getParentNode from './getParentNode';
+import contains from './contains';
+import getNodeName from './getNodeName';
+import rectToClientRect from '../utils/rectToClientRect';
+import { max, min } from '../utils/math';
+
+function getInnerBoundingClientRect(
+  element: Element,
+  strategy: PositioningStrategy
+) {
+  const rect = getBoundingClientRect(element, false, strategy === 'fixed');
+
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+
+  return rect;
+}
+
+function getClientRectFromMixedType(
+  element: Element,
+  clippingParent: Element | RootBoundary,
+  strategy: PositioningStrategy
+): ClientRectObject {
+  return clippingParent === viewport
+    ? rectToClientRect(getViewportRect(element, strategy))
+    : isElement(clippingParent)
+    ? getInnerBoundingClientRect(clippingParent, strategy)
+    : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+}
+
+// A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+function getClippingParents(element: Element): Array<Element> {
+  const clippingParents = listScrollParents(getParentNode(element));
+  const canEscapeClipping =
+    ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  const clipperElement =
+    canEscapeClipping && isHTMLElement(element)
+      ? getOffsetParent(element)
+      : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  }
+
+  // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+  return clippingParents.filter(
+    (clippingParent) =>
+      isElement(clippingParent) &&
+      contains(clippingParent, clipperElement) &&
+      getNodeName(clippingParent) !== 'body'
+  );
+}
+
+// Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+export default function getClippingRect(
+  element: Element,
+  boundary: Boundary,
+  rootBoundary: RootBoundary,
+  strategy: PositioningStrategy
+): ClientRectObject {
+  const mainClippingParents =
+    boundary === 'clippingParents'
+      ? getClippingParents(element)
+      : [].concat(boundary);
+  const clippingParents = [...mainClippingParents, rootBoundary];
+  const firstClippingParent = clippingParents[0];
+
+  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {
+    const rect = getClientRectFromMixedType(element, clippingParent, strategy);
+
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+
+  return clippingRect;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..19f7aa4728ca184877d371c8f4c3b78a5b4d38b1
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.d.ts
@@ -0,0 +1,2 @@
+import type { Rect, VirtualElement, Window } from "../types";
+export default function getCompositeRect(elementOrVirtualElement: Element | VirtualElement, offsetParent: Element | Window, isFixed?: boolean): Rect;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..565e9ee0db6d5276f8d4c4e98d340c9b15761359
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js
@@ -0,0 +1,58 @@
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getNodeScroll from "./getNodeScroll.js";
+import getNodeName from "./getNodeName.js";
+import { isHTMLElement } from "./instanceOf.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import getDocumentElement from "./getDocumentElement.js";
+import isScrollParent from "./isScrollParent.js";
+import { round } from "../utils/math.js";
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+export default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..a930a5ff9beef6ed02f95b995c0f47fd3228e26f
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js.flow
@@ -0,0 +1,64 @@
+// @flow
+import type { Rect, VirtualElement, Window } from '../types';
+import getBoundingClientRect from './getBoundingClientRect';
+import getNodeScroll from './getNodeScroll';
+import getNodeName from './getNodeName';
+import { isHTMLElement } from './instanceOf';
+import getWindowScrollBarX from './getWindowScrollBarX';
+import getDocumentElement from './getDocumentElement';
+import isScrollParent from './isScrollParent';
+import { round } from '../utils/math';
+
+function isElementScaled(element: HTMLElement) {
+  const rect = element.getBoundingClientRect();
+  const scaleX = round(rect.width) / element.offsetWidth || 1;
+  const scaleY = round(rect.height) / element.offsetHeight || 1;
+
+  return scaleX !== 1 || scaleY !== 1;
+}
+
+// Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+export default function getCompositeRect(
+  elementOrVirtualElement: Element | VirtualElement,
+  offsetParent: Element | Window,
+  isFixed: boolean = false
+): Rect {
+  const isOffsetParentAnElement = isHTMLElement(offsetParent);
+  const offsetParentIsScaled =
+    isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  const documentElement = getDocumentElement(offsetParent);
+  const rect = getBoundingClientRect(
+    elementOrVirtualElement,
+    offsetParentIsScaled,
+    isFixed
+  );
+
+  let scroll = { scrollLeft: 0, scrollTop: 0 };
+  let offsets = { x: 0, y: 0 };
+
+  if (isOffsetParentAnElement || (!isOffsetParentAnElement && !isFixed)) {
+    if (
+      getNodeName(offsetParent) !== 'body' ||
+      // https://github.com/popperjs/popper-core/issues/1078
+      isScrollParent(documentElement)
+    ) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..718e16afc93ba4bcab422c6ba0ed31d4ee21fbc3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.d.ts
@@ -0,0 +1 @@
+export default function getComputedStyle(element: Element): CSSStyleDeclaration;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..08221de1fd70a536ece095085871d9e2b41f9759
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js
@@ -0,0 +1,4 @@
+import getWindow from "./getWindow.js";
+export default function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..dcd733bb2586847465f96c420d34bc6e638d016e
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js.flow
@@ -0,0 +1,8 @@
+// @flow
+import getWindow from './getWindow';
+
+export default function getComputedStyle(
+  element: Element
+): CSSStyleDeclaration {
+  return getWindow(element).getComputedStyle(element);
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..262375c3f8ae172fe1a6f840971d9f606d233076
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.d.ts
@@ -0,0 +1,2 @@
+import type { Window } from "../types";
+export default function getDocumentElement(element: Element | Window): HTMLElement;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..c01240bb266039bcfbbc4246c0c9a4e88fbbc01e
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js
@@ -0,0 +1,6 @@
+import { isElement } from "./instanceOf.js";
+export default function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ad6fa5f16e27744aa4363000a6e91c87ae9f6a7b
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js.flow
@@ -0,0 +1,15 @@
+// @flow
+import { isElement } from './instanceOf';
+import type { Window } from '../types';
+
+export default function getDocumentElement(
+  element: Element | Window
+): HTMLElement {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return (
+    (isElement(element)
+      ? element.ownerDocument
+      : // $FlowFixMe[prop-missing]
+        element.document) || window.document
+  ).documentElement;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..16ca02cf7c2fe15e07426f675fb738d29c2b5d6c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.d.ts
@@ -0,0 +1,2 @@
+import type { Rect } from "../types";
+export default function getDocumentRect(element: HTMLElement): Rect;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..d24df8eef9213cbdb6b274731ab73f79fef119e8
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js
@@ -0,0 +1,29 @@
+import getDocumentElement from "./getDocumentElement.js";
+import getComputedStyle from "./getComputedStyle.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import getWindowScroll from "./getWindowScroll.js";
+import { max } from "../utils/math.js"; // Gets the entire size of the scrollable document area, even extending outside
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+export default function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..c9f63b0db6283c69538f66124b6414cc0119e99f
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js.flow
@@ -0,0 +1,37 @@
+// @flow
+import type { Rect } from '../types';
+import getDocumentElement from './getDocumentElement';
+import getComputedStyle from './getComputedStyle';
+import getWindowScrollBarX from './getWindowScrollBarX';
+import getWindowScroll from './getWindowScroll';
+import { max } from '../utils/math';
+
+// Gets the entire size of the scrollable document area, even extending outside
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+export default function getDocumentRect(element: HTMLElement): Rect {
+  const html = getDocumentElement(element);
+  const winScroll = getWindowScroll(element);
+  const body = element.ownerDocument?.body;
+
+  const width = max(
+    html.scrollWidth,
+    html.clientWidth,
+    body ? body.scrollWidth : 0,
+    body ? body.clientWidth : 0
+  );
+  const height = max(
+    html.scrollHeight,
+    html.clientHeight,
+    body ? body.scrollHeight : 0,
+    body ? body.clientHeight : 0
+  );
+
+  let x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  const y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return { width, height, x, y };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..df6cec9cb232153ca117c23e517a43ed9660193b
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.d.ts
@@ -0,0 +1,4 @@
+export default function getHTMLElementScroll(element: HTMLElement): {
+    scrollLeft: number;
+    scrollTop: number;
+};
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..d7f360003e4765a50d79211b07d7a965860835c9
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js
@@ -0,0 +1,6 @@
+export default function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ac27aa16b016846f56187661b383fac4d5af1d30
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js.flow
@@ -0,0 +1,8 @@
+// @flow
+
+export default function getHTMLElementScroll(element: HTMLElement) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..537fcb1ee1abd6b266adbe9cd7f98e1defa95384
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.d.ts
@@ -0,0 +1,2 @@
+import type { Rect } from "../types";
+export default function getLayoutRect(element: HTMLElement): Rect;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3b421e956efb4e126ee346135a273f2590a31ea
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js
@@ -0,0 +1,25 @@
+import getBoundingClientRect from "./getBoundingClientRect.js"; // Returns the layout rect of an element relative to its offsetParent. Layout
+// means it doesn't take into account transforms.
+
+export default function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..fe99526476d43d987e19aaecb15d9d0498ddb0cc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js.flow
@@ -0,0 +1,29 @@
+// @flow
+import type { Rect } from '../types';
+import getBoundingClientRect from './getBoundingClientRect';
+
+// Returns the layout rect of an element relative to its offsetParent. Layout
+// means it doesn't take into account transforms.
+export default function getLayoutRect(element: HTMLElement): Rect {
+  const clientRect = getBoundingClientRect(element);
+
+  // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+  let width = element.offsetWidth;
+  let height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width,
+    height,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeName.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..38e3798b57b3e23afd59b5472dc60a7817635c20
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.d.ts
@@ -0,0 +1,2 @@
+import type { Window } from "../types";
+export default function getNodeName(element: (Node | null | undefined) | Window): string | null | undefined;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js
new file mode 100644
index 0000000000000000000000000000000000000000..393ae7ace5fb93f751c82cd6e663aa698d5981d1
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js
@@ -0,0 +1,3 @@
+export default function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..72e5b81771a10d2ea01b16b831e49184cc706888
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js.flow
@@ -0,0 +1,6 @@
+// @flow
+import type { Window } from '../types';
+
+export default function getNodeName(element: ?Node | Window): ?string {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6f5b1aabb8b2bd2ecd03e16e479a27627ace24bc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.d.ts
@@ -0,0 +1,5 @@
+import type { Window } from "../types";
+export default function getNodeScroll(node: Node | Window): {
+    scrollLeft: any;
+    scrollTop: any;
+};
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..afef36661e4a99241288a97e1f05b544ae100833
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js
@@ -0,0 +1,11 @@
+import getWindowScroll from "./getWindowScroll.js";
+import getWindow from "./getWindow.js";
+import { isHTMLElement } from "./instanceOf.js";
+import getHTMLElementScroll from "./getHTMLElementScroll.js";
+export default function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..314574efdd6680c1b9d3a45c290edd91e7a72381
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js.flow
@@ -0,0 +1,14 @@
+// @flow
+import getWindowScroll from './getWindowScroll';
+import getWindow from './getWindow';
+import { isHTMLElement } from './instanceOf';
+import getHTMLElementScroll from './getHTMLElementScroll';
+import type { Window } from '../types';
+
+export default function getNodeScroll(node: Node | Window) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..94b4301e1a3382c575d9f102157ec058345c96b5
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.d.ts
@@ -0,0 +1 @@
+export default function getOffsetParent(element: Element): any;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..add0b15eb7ce11caa354a15035f515bff59f6a1d
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js
@@ -0,0 +1,69 @@
+import getWindow from "./getWindow.js";
+import getNodeName from "./getNodeName.js";
+import getComputedStyle from "./getComputedStyle.js";
+import { isHTMLElement, isShadowRoot } from "./instanceOf.js";
+import isTableElement from "./isTableElement.js";
+import getParentNode from "./getParentNode.js";
+import getUAString from "../utils/userAgent.js";
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+export default function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..86fbd167f34e5de86f02469222788562b5f5ea77
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js.flow
@@ -0,0 +1,93 @@
+// @flow
+import getWindow from './getWindow';
+import getNodeName from './getNodeName';
+import getComputedStyle from './getComputedStyle';
+import { isHTMLElement, isShadowRoot } from './instanceOf';
+import isTableElement from './isTableElement';
+import getParentNode from './getParentNode';
+import getUAString from '../utils/userAgent';
+
+function getTrueOffsetParent(element: Element): ?Element {
+  if (
+    !isHTMLElement(element) ||
+    // https://github.com/popperjs/popper-core/issues/837
+    getComputedStyle(element).position === 'fixed'
+  ) {
+    return null;
+  }
+
+  return element.offsetParent;
+}
+
+// `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+function getContainingBlock(element: Element) {
+  const isFirefox = /firefox/i.test(getUAString());
+  const isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    const elementCss = getComputedStyle(element);
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  let currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (
+    isHTMLElement(currentNode) &&
+    ['html', 'body'].indexOf(getNodeName(currentNode)) < 0
+  ) {
+    const css = getComputedStyle(currentNode);
+
+    // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+    if (
+      css.transform !== 'none' ||
+      css.perspective !== 'none' ||
+      css.contain === 'paint' ||
+      ['transform', 'perspective'].indexOf(css.willChange) !== -1 ||
+      (isFirefox && css.willChange === 'filter') ||
+      (isFirefox && css.filter && css.filter !== 'none')
+    ) {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+}
+
+// Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+export default function getOffsetParent(element: Element) {
+  const window = getWindow(element);
+
+  let offsetParent = getTrueOffsetParent(element);
+
+  while (
+    offsetParent &&
+    isTableElement(offsetParent) &&
+    getComputedStyle(offsetParent).position === 'static'
+  ) {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (
+    offsetParent &&
+    (getNodeName(offsetParent) === 'html' ||
+      (getNodeName(offsetParent) === 'body' &&
+        getComputedStyle(offsetParent).position === 'static'))
+  ) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getParentNode.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..85b3e8bf80b8b318c2a4c13782247fe86667dc63
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.d.ts
@@ -0,0 +1 @@
+export default function getParentNode(element: Node | ShadowRoot): Node;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..06d3e98aecb227aa28b936cb952a17cc7e154cbb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js
@@ -0,0 +1,19 @@
+import getNodeName from "./getNodeName.js";
+import getDocumentElement from "./getDocumentElement.js";
+import { isShadowRoot } from "./instanceOf.js";
+export default function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..c2c379b660795ec3d3a78bb5b8dabc9bdfa99cd3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js.flow
@@ -0,0 +1,21 @@
+// @flow
+import getNodeName from './getNodeName';
+import getDocumentElement from './getDocumentElement';
+import { isShadowRoot } from './instanceOf';
+
+export default function getParentNode(element: Node | ShadowRoot): Node {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (
+    // this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || // DOM Element detected
+    (isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+  );
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c5f758ce163df0cad4ba6e8b98a95fa74035018
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.d.ts
@@ -0,0 +1 @@
+export default function getScrollParent(node: Node): HTMLElement;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..a264c4b30e2de8b0f00ad1112dfe8fce8b6bd9e4
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js
@@ -0,0 +1,16 @@
+import getParentNode from "./getParentNode.js";
+import isScrollParent from "./isScrollParent.js";
+import getNodeName from "./getNodeName.js";
+import { isHTMLElement } from "./instanceOf.js";
+export default function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ee0002d17f5d3d75fa418c2f577fcdca766a53bc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js.flow
@@ -0,0 +1,18 @@
+// @flow
+import getParentNode from './getParentNode';
+import isScrollParent from './isScrollParent';
+import getNodeName from './getNodeName';
+import { isHTMLElement } from './instanceOf';
+
+export default function getScrollParent(node: Node): HTMLElement {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7ee8397e74e9cc57026a8354ceea5fb170ff0537
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.d.ts
@@ -0,0 +1,7 @@
+import type { PositioningStrategy } from "../types";
+export default function getViewportRect(element: Element, strategy: PositioningStrategy): {
+    width: number;
+    height: number;
+    x: number;
+    y: number;
+};
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..0ee4760d1fe6cbbfaf119b13c298d87d9798bda7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js
@@ -0,0 +1,31 @@
+import getWindow from "./getWindow.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getWindowScrollBarX from "./getWindowScrollBarX.js";
+import isLayoutViewport from "./isLayoutViewport.js";
+export default function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..2d85fe6a6bb591c66fef80dd857cb860e3215737
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js.flow
@@ -0,0 +1,39 @@
+// @flow
+import getWindow from './getWindow';
+import getDocumentElement from './getDocumentElement';
+import getWindowScrollBarX from './getWindowScrollBarX';
+import isLayoutViewport from './isLayoutViewport';
+import type { PositioningStrategy } from '../types';
+
+export default function getViewportRect(
+  element: Element,
+  strategy: PositioningStrategy
+) {
+  const win = getWindow(element);
+  const html = getDocumentElement(element);
+  const visualViewport = win.visualViewport;
+
+  let width = html.clientWidth;
+  let height = html.clientHeight;
+  let x = 0;
+  let y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+
+    const layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || (!layoutViewport && strategy === 'fixed')) {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width,
+    height,
+    x: x + getWindowScrollBarX(element),
+    y,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindow.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b61ec96d6a90d038ac67ae88f8af051c40799e7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindow.d.ts
@@ -0,0 +1 @@
+export default function getWindow(node: any): any;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindow.js b/node_modules/@popperjs/core/lib/dom-utils/getWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..5df7a4879609204e0d8b988a13990dad07a1fffa
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindow.js
@@ -0,0 +1,12 @@
+export default function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindow.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getWindow.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ff38250ad279f5000f85cc6f9e8f2c89471dff00
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindow.js.flow
@@ -0,0 +1,16 @@
+// @flow
+import type { Window } from '../types';
+declare function getWindow(node: Node | Window): Window;
+
+export default function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    const ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..708058e223493f481cc2fab7880f992ea6be5c8f
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.d.ts
@@ -0,0 +1,5 @@
+import type { Window } from "../types";
+export default function getWindowScroll(node: Node | Window): {
+    scrollLeft: any;
+    scrollTop: any;
+};
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js
new file mode 100644
index 0000000000000000000000000000000000000000..61eb751278272462b9e4948062da268c0d82dceb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js
@@ -0,0 +1,10 @@
+import getWindow from "./getWindow.js";
+export default function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..2b4c26719497240527219409729642904be9ad1c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js.flow
@@ -0,0 +1,14 @@
+// @flow
+import getWindow from './getWindow';
+import type { Window } from '../types';
+
+export default function getWindowScroll(node: Node | Window) {
+  const win = getWindow(node);
+  const scrollLeft = win.pageXOffset;
+  const scrollTop = win.pageYOffset;
+
+  return {
+    scrollLeft,
+    scrollTop,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.d.ts b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d71457dc5b93160ef71bdefe9a6fe5baf609b0f0
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.d.ts
@@ -0,0 +1 @@
+export default function getWindowScrollBarX(element: Element): number;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js
new file mode 100644
index 0000000000000000000000000000000000000000..b650d947b07f43292d5c9d0d18fbd1e4e1d48828
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js
@@ -0,0 +1,13 @@
+import getBoundingClientRect from "./getBoundingClientRect.js";
+import getDocumentElement from "./getDocumentElement.js";
+import getWindowScroll from "./getWindowScroll.js";
+export default function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js.flow b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..9d0d86dee239b9c6e501b395b4279035c07a6eab
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js.flow
@@ -0,0 +1,18 @@
+// @flow
+import getBoundingClientRect from './getBoundingClientRect';
+import getDocumentElement from './getDocumentElement';
+import getWindowScroll from './getWindowScroll';
+
+export default function getWindowScrollBarX(element: Element): number {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return (
+    getBoundingClientRect(getDocumentElement(element)).left +
+    getWindowScroll(element).scrollLeft
+  );
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/instanceOf.d.ts b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bc81ffcde2c85256ed99e044f54e13dbc8815054
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.d.ts
@@ -0,0 +1,4 @@
+declare function isElement(node: unknown): boolean;
+declare function isHTMLElement(node: unknown): boolean;
+declare function isShadowRoot(node: unknown): boolean;
+export { isElement, isHTMLElement, isShadowRoot };
diff --git a/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee51ea655e39b5dcbb14796c82be76196567e1c6
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js
@@ -0,0 +1,23 @@
+import getWindow from "./getWindow.js";
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+export { isElement, isHTMLElement, isShadowRoot };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js.flow b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..28f6477809320191390f21ab022dce6a4cad8781
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js.flow
@@ -0,0 +1,29 @@
+// @flow
+import getWindow from './getWindow';
+
+declare function isElement(node: mixed): boolean %checks(node instanceof
+  Element);
+function isElement(node) {
+  const OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+declare function isHTMLElement(node: mixed): boolean %checks(node instanceof
+  HTMLElement);
+function isHTMLElement(node) {
+  const OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+declare function isShadowRoot(node: mixed): boolean %checks(node instanceof
+  ShadowRoot);
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+  const OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+export { isElement, isHTMLElement, isShadowRoot };
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.d.ts b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ae337845dd6ae3c3319651cdece7822249060595
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.d.ts
@@ -0,0 +1 @@
+export default function isLayoutViewport(): boolean;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4f665aabcad48631d6a6f228f52aab24e8b031c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js
@@ -0,0 +1,4 @@
+import getUAString from "../utils/userAgent.js";
+export default function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js.flow b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..a7530dbae23593aca567cd62f4249c059218b3dd
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js.flow
@@ -0,0 +1,6 @@
+// @flow
+import getUAString from '../utils/userAgent';
+
+export default function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.d.ts b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4e76a9561ac68c87f1545c7fb2102114e52de487
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.d.ts
@@ -0,0 +1 @@
+export default function isScrollParent(element: HTMLElement): boolean;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d6e18eb4bbbd9ad637a1c7518105155ad795762
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js
@@ -0,0 +1,10 @@
+import getComputedStyle from "./getComputedStyle.js";
+export default function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js.flow b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..0e12f95f904942e049ac735fcb1efa9d8fc3d5b6
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js.flow
@@ -0,0 +1,8 @@
+// @flow
+import getComputedStyle from './getComputedStyle';
+
+export default function isScrollParent(element: HTMLElement): boolean {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  const { overflow, overflowX, overflowY } = getComputedStyle(element);
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isTableElement.d.ts b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..24c55fcfa55d6387fc332f2f596f106fb02344ad
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.d.ts
@@ -0,0 +1 @@
+export default function isTableElement(element: Element): boolean;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c36c8a4faf1eed112a4b70c1b2926fb0d08fdec
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js
@@ -0,0 +1,4 @@
+import getNodeName from "./getNodeName.js";
+export default function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js.flow b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..adb7f8d0f18de9c34a3530d2fa557a736b6f9c98
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js.flow
@@ -0,0 +1,6 @@
+// @flow
+import getNodeName from './getNodeName';
+
+export default function isTableElement(element: Element): boolean {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
diff --git a/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.d.ts b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..96e68c5a00a9f2f8296b6524751dae861fe05607
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.d.ts
@@ -0,0 +1,2 @@
+import type { Window, VisualViewport } from "../types";
+export default function listScrollParents(element: Node, list?: Array<Element | Window>): Array<Element | Window | VisualViewport>;
diff --git a/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js
new file mode 100644
index 0000000000000000000000000000000000000000..24e8bd2a697cbc8b907e8e47c8c49dae7c7d3136
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js
@@ -0,0 +1,26 @@
+import getScrollParent from "./getScrollParent.js";
+import getParentNode from "./getParentNode.js";
+import getWindow from "./getWindow.js";
+import isScrollParent from "./isScrollParent.js";
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+export default function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js.flow b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ef86b04fe790402212d92fc9a5b151013da85287
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js.flow
@@ -0,0 +1,33 @@
+// @flow
+import getScrollParent from './getScrollParent';
+import getParentNode from './getParentNode';
+import getWindow from './getWindow';
+import type { Window, VisualViewport } from '../types';
+import isScrollParent from './isScrollParent';
+
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+export default function listScrollParents(
+  element: Node,
+  list: Array<Element | Window> = []
+): Array<Element | Window | VisualViewport> {
+  const scrollParent = getScrollParent(element);
+  const isBody = scrollParent === element.ownerDocument?.body;
+  const win = getWindow(scrollParent);
+  const target = isBody
+    ? [win].concat(
+        win.visualViewport || [],
+        isScrollParent(scrollParent) ? scrollParent : []
+      )
+    : scrollParent;
+  const updatedList = list.concat(target);
+
+  return isBody
+    ? updatedList
+    : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+      updatedList.concat(listScrollParents(getParentNode(target)));
+}
diff --git a/node_modules/@popperjs/core/lib/enums.d.ts b/node_modules/@popperjs/core/lib/enums.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4b4a8918be092b9c387bffac2008ca238e239384
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/enums.d.ts
@@ -0,0 +1,34 @@
+export declare const top: "top";
+export declare const bottom: "bottom";
+export declare const right: "right";
+export declare const left: "left";
+export declare const auto: "auto";
+export declare type BasePlacement = typeof top | typeof bottom | typeof right | typeof left;
+export declare const basePlacements: Array<BasePlacement>;
+export declare const start: "start";
+export declare const end: "end";
+export declare type Variation = typeof start | typeof end;
+export declare const clippingParents: "clippingParents";
+export declare const viewport: "viewport";
+export declare type Boundary = Element | Array<Element> | typeof clippingParents;
+export declare type RootBoundary = typeof viewport | "document";
+export declare const popper: "popper";
+export declare const reference: "reference";
+export declare type Context = typeof popper | typeof reference;
+export declare type VariationPlacement = "top-start" | "top-end" | "bottom-start" | "bottom-end" | "right-start" | "right-end" | "left-start" | "left-end";
+export declare type AutoPlacement = "auto" | "auto-start" | "auto-end";
+export declare type ComputedPlacement = VariationPlacement | BasePlacement;
+export declare type Placement = AutoPlacement | BasePlacement | VariationPlacement;
+export declare const variationPlacements: Array<VariationPlacement>;
+export declare const placements: Array<Placement>;
+export declare const beforeRead: "beforeRead";
+export declare const read: "read";
+export declare const afterRead: "afterRead";
+export declare const beforeMain: "beforeMain";
+export declare const main: "main";
+export declare const afterMain: "afterMain";
+export declare const beforeWrite: "beforeWrite";
+export declare const write: "write";
+export declare const afterWrite: "afterWrite";
+export declare const modifierPhases: Array<ModifierPhases>;
+export declare type ModifierPhases = typeof beforeRead | typeof read | typeof afterRead | typeof beforeMain | typeof main | typeof afterMain | typeof beforeWrite | typeof write | typeof afterWrite;
diff --git a/node_modules/@popperjs/core/lib/enums.js b/node_modules/@popperjs/core/lib/enums.js
new file mode 100644
index 0000000000000000000000000000000000000000..e3714f511e7771c7c765836ab6e094febc2b1617
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/enums.js
@@ -0,0 +1,31 @@
+export var top = 'top';
+export var bottom = 'bottom';
+export var right = 'right';
+export var left = 'left';
+export var auto = 'auto';
+export var basePlacements = [top, bottom, right, left];
+export var start = 'start';
+export var end = 'end';
+export var clippingParents = 'clippingParents';
+export var viewport = 'viewport';
+export var popper = 'popper';
+export var reference = 'reference';
+export var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+  return acc.concat([placement + "-" + start, placement + "-" + end]);
+}, []);
+export var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+}, []); // modifiers that need to read the DOM
+
+export var beforeRead = 'beforeRead';
+export var read = 'read';
+export var afterRead = 'afterRead'; // pure-logic modifiers
+
+export var beforeMain = 'beforeMain';
+export var main = 'main';
+export var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+export var beforeWrite = 'beforeWrite';
+export var write = 'write';
+export var afterWrite = 'afterWrite';
+export var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/enums.js.flow b/node_modules/@popperjs/core/lib/enums.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..256f26bdf1027f9eb207560e2e9ec269e621c400
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/enums.js.flow
@@ -0,0 +1,91 @@
+// @flow
+export const top: 'top' = 'top';
+export const bottom: 'bottom' = 'bottom';
+export const right: 'right' = 'right';
+export const left: 'left' = 'left';
+export const auto: 'auto' = 'auto';
+export type BasePlacement =
+  | typeof top
+  | typeof bottom
+  | typeof right
+  | typeof left;
+export const basePlacements: Array<BasePlacement> = [top, bottom, right, left];
+
+export const start: 'start' = 'start';
+export const end: 'end' = 'end';
+export type Variation = typeof start | typeof end;
+
+export const clippingParents: 'clippingParents' = 'clippingParents';
+export const viewport: 'viewport' = 'viewport';
+export type Boundary = Element | Array<Element> | typeof clippingParents;
+export type RootBoundary = typeof viewport | 'document';
+
+export const popper: 'popper' = 'popper';
+export const reference: 'reference' = 'reference';
+export type Context = typeof popper | typeof reference;
+
+export type VariationPlacement =
+  | 'top-start'
+  | 'top-end'
+  | 'bottom-start'
+  | 'bottom-end'
+  | 'right-start'
+  | 'right-end'
+  | 'left-start'
+  | 'left-end';
+export type AutoPlacement = 'auto' | 'auto-start' | 'auto-end';
+export type ComputedPlacement = VariationPlacement | BasePlacement;
+export type Placement = AutoPlacement | BasePlacement | VariationPlacement;
+
+export const variationPlacements: Array<VariationPlacement> = basePlacements.reduce(
+  (acc: Array<VariationPlacement>, placement: BasePlacement) =>
+    acc.concat([(`${placement}-${start}`: any), (`${placement}-${end}`: any)]),
+  []
+);
+export const placements: Array<Placement> = [...basePlacements, auto].reduce(
+  (
+    acc: Array<Placement>,
+    placement: BasePlacement | typeof auto
+  ): Array<Placement> =>
+    acc.concat([
+      placement,
+      (`${placement}-${start}`: any),
+      (`${placement}-${end}`: any),
+    ]),
+  []
+);
+
+// modifiers that need to read the DOM
+export const beforeRead: 'beforeRead' = 'beforeRead';
+export const read: 'read' = 'read';
+export const afterRead: 'afterRead' = 'afterRead';
+// pure-logic modifiers
+export const beforeMain: 'beforeMain' = 'beforeMain';
+export const main: 'main' = 'main';
+export const afterMain: 'afterMain' = 'afterMain';
+// modifier with the purpose to write to the DOM (or write into a framework state)
+export const beforeWrite: 'beforeWrite' = 'beforeWrite';
+export const write: 'write' = 'write';
+export const afterWrite: 'afterWrite' = 'afterWrite';
+export const modifierPhases: Array<ModifierPhases> = [
+  beforeRead,
+  read,
+  afterRead,
+  beforeMain,
+  main,
+  afterMain,
+  beforeWrite,
+  write,
+  afterWrite,
+];
+
+export type ModifierPhases =
+  | typeof beforeRead
+  | typeof read
+  | typeof afterRead
+  | typeof beforeMain
+  | typeof main
+  | typeof afterMain
+  | typeof beforeWrite
+  | typeof write
+  | typeof afterWrite;
diff --git a/node_modules/@popperjs/core/lib/index.d.ts b/node_modules/@popperjs/core/lib/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..842c74fc16f526d40047051bb76c855baa992133
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/index.d.ts
@@ -0,0 +1,6 @@
+export * from "./types";
+export * from "./enums";
+export * from "./modifiers";
+export { popperGenerator, detectOverflow, createPopper as createPopperBase } from "./createPopper";
+export { createPopper } from "./popper";
+export { createPopper as createPopperLite } from "./popper-lite";
diff --git a/node_modules/@popperjs/core/lib/index.js b/node_modules/@popperjs/core/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0c8b52db9f339e17fbf68c8e2aa36862776fe0a
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/index.js
@@ -0,0 +1,8 @@
+export * from "./enums.js";
+export * from "./modifiers/index.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { popperGenerator, detectOverflow, createPopper as createPopperBase } from "./createPopper.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper } from "./popper.js"; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper as createPopperLite } from "./popper-lite.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/index.js.flow b/node_modules/@popperjs/core/lib/index.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..86b2ac2ed64cf5a330cbb440f1d1258f00666ceb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/index.js.flow
@@ -0,0 +1,13 @@
+// @flow
+export type * from './types';
+export * from './enums';
+export * from './modifiers';
+
+// eslint-disable-next-line import/no-unused-modules
+export { popperGenerator, detectOverflow, createPopper as createPopperBase } from './createPopper';
+
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper } from './popper';
+
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper as createPopperLite } from './popper-lite';
diff --git a/node_modules/@popperjs/core/lib/modifiers/applyStyles.d.ts b/node_modules/@popperjs/core/lib/modifiers/applyStyles.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..317306fe40799ceb2808f577067cd070075abb03
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/applyStyles.d.ts
@@ -0,0 +1,4 @@
+import type { Modifier } from "../types";
+export declare type ApplyStylesModifier = Modifier<"applyStyles", {}>;
+declare const _default: ApplyStylesModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/applyStyles.js b/node_modules/@popperjs/core/lib/modifiers/applyStyles.js
new file mode 100644
index 0000000000000000000000000000000000000000..84ac4ba91838397c76e6cf9b34f91abe9dda0c13
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/applyStyles.js
@@ -0,0 +1,84 @@
+import getNodeName from "../dom-utils/getNodeName.js";
+import { isHTMLElement } from "../dom-utils/instanceOf.js"; // This modifier takes the styles prepared by the `computeStyles` modifier
+// and applies them to the HTMLElements such as popper and arrow
+
+function applyStyles(_ref) {
+  var state = _ref.state;
+  Object.keys(state.elements).forEach(function (name) {
+    var style = state.styles[name] || {};
+    var attributes = state.attributes[name] || {};
+    var element = state.elements[name]; // arrow is optional + virtual elements
+
+    if (!isHTMLElement(element) || !getNodeName(element)) {
+      return;
+    } // Flow doesn't support to extend this property, but it's the most
+    // effective way to apply styles to an HTMLElement
+    // $FlowFixMe[cannot-write]
+
+
+    Object.assign(element.style, style);
+    Object.keys(attributes).forEach(function (name) {
+      var value = attributes[name];
+
+      if (value === false) {
+        element.removeAttribute(name);
+      } else {
+        element.setAttribute(name, value === true ? '' : value);
+      }
+    });
+  });
+}
+
+function effect(_ref2) {
+  var state = _ref2.state;
+  var initialStyles = {
+    popper: {
+      position: state.options.strategy,
+      left: '0',
+      top: '0',
+      margin: '0'
+    },
+    arrow: {
+      position: 'absolute'
+    },
+    reference: {}
+  };
+  Object.assign(state.elements.popper.style, initialStyles.popper);
+  state.styles = initialStyles;
+
+  if (state.elements.arrow) {
+    Object.assign(state.elements.arrow.style, initialStyles.arrow);
+  }
+
+  return function () {
+    Object.keys(state.elements).forEach(function (name) {
+      var element = state.elements[name];
+      var attributes = state.attributes[name] || {};
+      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them
+
+      var style = styleProperties.reduce(function (style, property) {
+        style[property] = '';
+        return style;
+      }, {}); // arrow is optional + virtual elements
+
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      }
+
+      Object.assign(element.style, style);
+      Object.keys(attributes).forEach(function (attribute) {
+        element.removeAttribute(attribute);
+      });
+    });
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'applyStyles',
+  enabled: true,
+  phase: 'write',
+  fn: applyStyles,
+  effect: effect,
+  requires: ['computeStyles']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/applyStyles.js.flow b/node_modules/@popperjs/core/lib/modifiers/applyStyles.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e976cf0dbb1564598720777563acd099f4f1ceb2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/applyStyles.js.flow
@@ -0,0 +1,98 @@
+// @flow
+import type { Modifier, ModifierArguments } from '../types';
+import getNodeName from '../dom-utils/getNodeName';
+import { isHTMLElement } from '../dom-utils/instanceOf';
+
+// This modifier takes the styles prepared by the `computeStyles` modifier
+// and applies them to the HTMLElements such as popper and arrow
+
+function applyStyles({ state }: ModifierArguments<{||}>) {
+  Object.keys(state.elements).forEach((name) => {
+    const style = state.styles[name] || {};
+
+    const attributes = state.attributes[name] || {};
+    const element = state.elements[name];
+
+    // arrow is optional + virtual elements
+    if (!isHTMLElement(element) || !getNodeName(element)) {
+      return;
+    }
+
+    // Flow doesn't support to extend this property, but it's the most
+    // effective way to apply styles to an HTMLElement
+    // $FlowFixMe[cannot-write]
+    Object.assign(element.style, style);
+
+    Object.keys(attributes).forEach((name) => {
+      const value = attributes[name];
+      if (value === false) {
+        element.removeAttribute(name);
+      } else {
+        element.setAttribute(name, value === true ? '' : value);
+      }
+    });
+  });
+}
+
+function effect({ state }: ModifierArguments<{||}>) {
+  const initialStyles = {
+    popper: {
+      position: state.options.strategy,
+      left: '0',
+      top: '0',
+      margin: '0',
+    },
+    arrow: {
+      position: 'absolute',
+    },
+    reference: {},
+  };
+
+  Object.assign(state.elements.popper.style, initialStyles.popper);
+  state.styles = initialStyles;
+
+  if (state.elements.arrow) {
+    Object.assign(state.elements.arrow.style, initialStyles.arrow);
+  }
+
+  return () => {
+    Object.keys(state.elements).forEach((name) => {
+      const element = state.elements[name];
+      const attributes = state.attributes[name] || {};
+
+      const styleProperties = Object.keys(
+        state.styles.hasOwnProperty(name)
+          ? state.styles[name]
+          : initialStyles[name]
+      );
+
+      // Set all values to an empty string to unset them
+      const style = styleProperties.reduce((style, property) => {
+        style[property] = '';
+        return style;
+      }, {});
+
+      // arrow is optional + virtual elements
+      if (!isHTMLElement(element) || !getNodeName(element)) {
+        return;
+      }
+
+      Object.assign(element.style, style);
+
+      Object.keys(attributes).forEach((attribute) => {
+        element.removeAttribute(attribute);
+      });
+    });
+  };
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type ApplyStylesModifier = Modifier<'applyStyles', {||}>;
+export default ({
+  name: 'applyStyles',
+  enabled: true,
+  phase: 'write',
+  fn: applyStyles,
+  effect,
+  requires: ['computeStyles'],
+}: ApplyStylesModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/arrow.d.ts b/node_modules/@popperjs/core/lib/modifiers/arrow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71126982ae206f09aa7ee58110ce4d01015924fc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/arrow.d.ts
@@ -0,0 +1,13 @@
+import type { Modifier, Padding, Rect } from "../types";
+import type { Placement } from "../enums";
+export declare type Options = {
+    element: HTMLElement | string | null;
+    padding: Padding | ((arg0: {
+        popper: Rect;
+        reference: Rect;
+        placement: Placement;
+    }) => Padding);
+};
+export declare type ArrowModifier = Modifier<"arrow", Options>;
+declare const _default: ArrowModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/arrow.js b/node_modules/@popperjs/core/lib/modifiers/arrow.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb0fc36f409b86b718e06f1aa1b77086d84aed5f
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/arrow.js
@@ -0,0 +1,90 @@
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getLayoutRect from "../dom-utils/getLayoutRect.js";
+import contains from "../dom-utils/contains.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import getMainAxisFromPlacement from "../utils/getMainAxisFromPlacement.js";
+import { within } from "../utils/within.js";
+import mergePaddingObject from "../utils/mergePaddingObject.js";
+import expandToHashMap from "../utils/expandToHashMap.js";
+import { left, right, basePlacements, top, bottom } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules
+
+var toPaddingObject = function toPaddingObject(padding, state) {
+  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : padding;
+  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+};
+
+function arrow(_ref) {
+  var _state$modifiersData$;
+
+  var state = _ref.state,
+      name = _ref.name,
+      options = _ref.options;
+  var arrowElement = state.elements.arrow;
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var basePlacement = getBasePlacement(state.placement);
+  var axis = getMainAxisFromPlacement(basePlacement);
+  var isVertical = [left, right].indexOf(basePlacement) >= 0;
+  var len = isVertical ? 'height' : 'width';
+
+  if (!arrowElement || !popperOffsets) {
+    return;
+  }
+
+  var paddingObject = toPaddingObject(options.padding, state);
+  var arrowRect = getLayoutRect(arrowElement);
+  var minProp = axis === 'y' ? top : left;
+  var maxProp = axis === 'y' ? bottom : right;
+  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+  var arrowOffsetParent = getOffsetParent(arrowElement);
+  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+  // outside of the popper bounds
+
+  var min = paddingObject[minProp];
+  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+  var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+  var axisProp = axis;
+  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+}
+
+function effect(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options;
+  var _options$element = options.element,
+      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+  if (arrowElement == null) {
+    return;
+  } // CSS selector
+
+
+  if (typeof arrowElement === 'string') {
+    arrowElement = state.elements.popper.querySelector(arrowElement);
+
+    if (!arrowElement) {
+      return;
+    }
+  }
+
+  if (!contains(state.elements.popper, arrowElement)) {
+    return;
+  }
+
+  state.elements.arrow = arrowElement;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'arrow',
+  enabled: true,
+  phase: 'main',
+  fn: arrow,
+  effect: effect,
+  requires: ['popperOffsets'],
+  requiresIfExists: ['preventOverflow']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/arrow.js.flow b/node_modules/@popperjs/core/lib/modifiers/arrow.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..5e55b50631af56a9ee6f8508d7cd1adb2678b8e7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/arrow.js.flow
@@ -0,0 +1,120 @@
+// @flow
+import type { Modifier, ModifierArguments, Padding, Rect } from '../types';
+import type { Placement } from '../enums';
+import getBasePlacement from '../utils/getBasePlacement';
+import getLayoutRect from '../dom-utils/getLayoutRect';
+import contains from '../dom-utils/contains';
+import getOffsetParent from '../dom-utils/getOffsetParent';
+import getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';
+import { within } from '../utils/within';
+import mergePaddingObject from '../utils/mergePaddingObject';
+import expandToHashMap from '../utils/expandToHashMap';
+import { left, right, basePlacements, top, bottom } from '../enums';
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  element: HTMLElement | string | null,
+  padding:
+    | Padding
+    | (({|
+        popper: Rect,
+        reference: Rect,
+        placement: Placement,
+      |}) => Padding),
+};
+
+const toPaddingObject = (padding, state) => {
+  padding =
+    typeof padding === 'function'
+      ? padding({ ...state.rects, placement: state.placement })
+      : padding;
+
+  return mergePaddingObject(
+    typeof padding !== 'number'
+      ? padding
+      : expandToHashMap(padding, basePlacements)
+  );
+};
+
+function arrow({ state, name, options }: ModifierArguments<Options>) {
+  const arrowElement = state.elements.arrow;
+  const popperOffsets = state.modifiersData.popperOffsets;
+  const basePlacement = getBasePlacement(state.placement);
+  const axis = getMainAxisFromPlacement(basePlacement);
+  const isVertical = [left, right].indexOf(basePlacement) >= 0;
+  const len = isVertical ? 'height' : 'width';
+
+  if (!arrowElement || !popperOffsets) {
+    return;
+  }
+
+  const paddingObject = toPaddingObject(options.padding, state);
+  const arrowRect = getLayoutRect(arrowElement);
+  const minProp = axis === 'y' ? top : left;
+  const maxProp = axis === 'y' ? bottom : right;
+
+  const endDiff =
+    state.rects.reference[len] +
+    state.rects.reference[axis] -
+    popperOffsets[axis] -
+    state.rects.popper[len];
+  const startDiff = popperOffsets[axis] - state.rects.reference[axis];
+
+  const arrowOffsetParent = getOffsetParent(arrowElement);
+  const clientSize = arrowOffsetParent
+    ? axis === 'y'
+      ? arrowOffsetParent.clientHeight || 0
+      : arrowOffsetParent.clientWidth || 0
+    : 0;
+
+  const centerToReference = endDiff / 2 - startDiff / 2;
+
+  // Make sure the arrow doesn't overflow the popper if the center point is
+  // outside of the popper bounds
+  const min = paddingObject[minProp];
+  const max = clientSize - arrowRect[len] - paddingObject[maxProp];
+  const center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+  const offset = within(min, center, max);
+
+  // Prevents breaking syntax highlighting...
+  const axisProp: string = axis;
+  state.modifiersData[name] = {
+    [axisProp]: offset,
+    centerOffset: offset - center,
+  };
+}
+
+function effect({ state, options }: ModifierArguments<Options>) {
+  let { element: arrowElement = '[data-popper-arrow]' } = options;
+
+  if (arrowElement == null) {
+    return;
+  }
+
+  // CSS selector
+  if (typeof arrowElement === 'string') {
+    arrowElement = state.elements.popper.querySelector(arrowElement);
+
+    if (!arrowElement) {
+      return;
+    }
+  }
+
+  if (!contains(state.elements.popper, arrowElement)) {
+    return;
+  }
+
+  state.elements.arrow = arrowElement;
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type ArrowModifier = Modifier<'arrow', Options>;
+export default ({
+  name: 'arrow',
+  enabled: true,
+  phase: 'main',
+  fn: arrow,
+  effect,
+  requires: ['popperOffsets'],
+  requiresIfExists: ['preventOverflow'],
+}: ArrowModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/computeStyles.d.ts b/node_modules/@popperjs/core/lib/modifiers/computeStyles.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..30394b5ec6b093f69221417522ca3688811789d1
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/computeStyles.d.ts
@@ -0,0 +1,38 @@
+import type { PositioningStrategy, Offsets, Modifier, Rect } from "../types";
+import { BasePlacement, Variation } from "../enums";
+export declare type RoundOffsets = (offsets: Partial<{
+    x: number;
+    y: number;
+    centerOffset: number;
+}>) => Offsets;
+export declare type Options = {
+    gpuAcceleration: boolean;
+    adaptive: boolean;
+    roundOffsets?: boolean | RoundOffsets;
+};
+export declare function mapToStyles({ popper, popperRect, placement, variation, offsets, position, gpuAcceleration, adaptive, roundOffsets, isFixed }: {
+    popper: HTMLElement;
+    popperRect: Rect;
+    placement: BasePlacement;
+    variation: Variation | null | undefined;
+    offsets: Partial<{
+        x: number;
+        y: number;
+        centerOffset: number;
+    }>;
+    position: PositioningStrategy;
+    gpuAcceleration: boolean;
+    adaptive: boolean;
+    roundOffsets: boolean | RoundOffsets;
+    isFixed: boolean;
+}): {
+    transform: string;
+    top: string;
+    right: string;
+    bottom: string;
+    left: string;
+    position: PositioningStrategy;
+};
+export declare type ComputeStylesModifier = Modifier<"computeStyles", Options>;
+declare const _default: ComputeStylesModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/computeStyles.js b/node_modules/@popperjs/core/lib/modifiers/computeStyles.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ebb026d5aec37822c9a24e30964f3931fc745ee
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/computeStyles.js
@@ -0,0 +1,169 @@
+import { top, left, right, bottom, end } from "../enums.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import getWindow from "../dom-utils/getWindow.js";
+import getDocumentElement from "../dom-utils/getDocumentElement.js";
+import getComputedStyle from "../dom-utils/getComputedStyle.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getVariation from "../utils/getVariation.js";
+import { round } from "../utils/math.js"; // eslint-disable-next-line import/no-unused-modules
+
+var unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto'
+}; // Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+
+function roundOffsetsByDPR(_ref, win) {
+  var x = _ref.x,
+      y = _ref.y;
+  var dpr = win.devicePixelRatio || 1;
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0
+  };
+}
+
+export function mapToStyles(_ref2) {
+  var _Object$assign2;
+
+  var popper = _ref2.popper,
+      popperRect = _ref2.popperRect,
+      placement = _ref2.placement,
+      variation = _ref2.variation,
+      offsets = _ref2.offsets,
+      position = _ref2.position,
+      gpuAcceleration = _ref2.gpuAcceleration,
+      adaptive = _ref2.adaptive,
+      roundOffsets = _ref2.roundOffsets,
+      isFixed = _ref2.isFixed;
+  var _offsets$x = offsets.x,
+      x = _offsets$x === void 0 ? 0 : _offsets$x,
+      _offsets$y = offsets.y,
+      y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref3.x;
+  y = _ref3.y;
+  var hasX = offsets.hasOwnProperty('x');
+  var hasY = offsets.hasOwnProperty('y');
+  var sideX = left;
+  var sideY = top;
+  var win = window;
+
+  if (adaptive) {
+    var offsetParent = getOffsetParent(popper);
+    var heightProp = 'clientHeight';
+    var widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+    offsetParent = offsetParent;
+
+    if (placement === top || (placement === left || placement === right) && variation === end) {
+      sideY = bottom;
+      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+      offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (placement === left || (placement === top || placement === bottom) && variation === end) {
+      sideX = right;
+      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+      offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  var commonStyles = Object.assign({
+    position: position
+  }, adaptive && unsetSides);
+
+  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+    x: x,
+    y: y
+  }, getWindow(popper)) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref4.x;
+  y = _ref4.y;
+
+  if (gpuAcceleration) {
+    var _Object$assign;
+
+    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+  }
+
+  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+}
+
+function computeStyles(_ref5) {
+  var state = _ref5.state,
+      options = _ref5.options;
+  var _options$gpuAccelerat = options.gpuAcceleration,
+      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+      _options$adaptive = options.adaptive,
+      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+      _options$roundOffsets = options.roundOffsets,
+      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+  var commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration: gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed'
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.popperOffsets,
+      position: state.options.strategy,
+      adaptive: adaptive,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.arrow,
+      position: 'absolute',
+      adaptive: false,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-placement': state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/computeStyles.js.flow b/node_modules/@popperjs/core/lib/modifiers/computeStyles.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..35ad8fb967f2a319f6440d6cc334fa6e223db9bb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/computeStyles.js.flow
@@ -0,0 +1,233 @@
+// @flow
+import type {
+  PositioningStrategy,
+  Offsets,
+  Modifier,
+  ModifierArguments,
+  Rect,
+  Window,
+} from '../types';
+import {
+  type BasePlacement,
+  type Variation,
+  top,
+  left,
+  right,
+  bottom,
+  end,
+} from '../enums';
+import getOffsetParent from '../dom-utils/getOffsetParent';
+import getWindow from '../dom-utils/getWindow';
+import getDocumentElement from '../dom-utils/getDocumentElement';
+import getComputedStyle from '../dom-utils/getComputedStyle';
+import getBasePlacement from '../utils/getBasePlacement';
+import getVariation from '../utils/getVariation';
+import { round } from '../utils/math';
+
+// eslint-disable-next-line import/no-unused-modules
+export type RoundOffsets = (
+  offsets: $Shape<{ x: number, y: number, centerOffset: number }>
+) => Offsets;
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  gpuAcceleration: boolean,
+  adaptive: boolean,
+  roundOffsets?: boolean | RoundOffsets,
+};
+
+const unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto',
+};
+
+// Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+function roundOffsetsByDPR({ x, y }, win: Window): Offsets {
+  const dpr = win.devicePixelRatio || 1;
+
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0,
+  };
+}
+
+export function mapToStyles({
+  popper,
+  popperRect,
+  placement,
+  variation,
+  offsets,
+  position,
+  gpuAcceleration,
+  adaptive,
+  roundOffsets,
+  isFixed,
+}: {
+  popper: HTMLElement,
+  popperRect: Rect,
+  placement: BasePlacement,
+  variation: ?Variation,
+  offsets: $Shape<{ x: number, y: number, centerOffset: number }>,
+  position: PositioningStrategy,
+  gpuAcceleration: boolean,
+  adaptive: boolean,
+  roundOffsets: boolean | RoundOffsets,
+  isFixed: boolean,
+}) {
+  let { x = 0, y = 0 } = offsets;
+
+  ({ x, y } =
+    typeof roundOffsets === 'function' ? roundOffsets({ x, y }) : { x, y });
+
+  const hasX = offsets.hasOwnProperty('x');
+  const hasY = offsets.hasOwnProperty('y');
+
+  let sideX: string = left;
+  let sideY: string = top;
+
+  const win: Window = window;
+
+  if (adaptive) {
+    let offsetParent = getOffsetParent(popper);
+    let heightProp = 'clientHeight';
+    let widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (
+        getComputedStyle(offsetParent).position !== 'static' &&
+        position === 'absolute'
+      ) {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    }
+
+    // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+    offsetParent = (offsetParent: Element);
+
+    if (
+      placement === top ||
+      ((placement === left || placement === right) && variation === end)
+    ) {
+      sideY = bottom;
+      const offsetY =
+        isFixed && offsetParent === win && win.visualViewport
+          ? win.visualViewport.height
+          : // $FlowFixMe[prop-missing]
+            offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (
+      placement === left ||
+      ((placement === top || placement === bottom) && variation === end)
+    ) {
+      sideX = right;
+      const offsetX =
+        isFixed && offsetParent === win && win.visualViewport
+          ? win.visualViewport.width
+          : // $FlowFixMe[prop-missing]
+            offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  const commonStyles = {
+    position,
+    ...(adaptive && unsetSides),
+  };
+
+  ({ x, y } =
+    roundOffsets === true
+      ? roundOffsetsByDPR({ x, y }, getWindow(popper))
+      : { x, y });
+
+  if (gpuAcceleration) {
+    return {
+      ...commonStyles,
+      [sideY]: hasY ? '0' : '',
+      [sideX]: hasX ? '0' : '',
+      // Layer acceleration can disable subpixel rendering which causes slightly
+      // blurry text on low PPI displays, so we want to use 2D transforms
+      // instead
+      transform:
+        (win.devicePixelRatio || 1) <= 1
+          ? `translate(${x}px, ${y}px)`
+          : `translate3d(${x}px, ${y}px, 0)`,
+    };
+  }
+
+  return {
+    ...commonStyles,
+    [sideY]: hasY ? `${y}px` : '',
+    [sideX]: hasX ? `${x}px` : '',
+    transform: '',
+  };
+}
+
+function computeStyles({ state, options }: ModifierArguments<Options>) {
+  const {
+    gpuAcceleration = true,
+    adaptive = true,
+    // defaults to use builtin `roundOffsetsByDPR`
+    roundOffsets = true,
+  } = options;
+
+  const commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed',
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = {
+      ...state.styles.popper,
+      ...mapToStyles({
+        ...commonStyles,
+        offsets: state.modifiersData.popperOffsets,
+        position: state.options.strategy,
+        adaptive,
+        roundOffsets,
+      }),
+    };
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = {
+      ...state.styles.arrow,
+      ...mapToStyles({
+        ...commonStyles,
+        offsets: state.modifiersData.arrow,
+        position: 'absolute',
+        adaptive: false,
+        roundOffsets,
+      }),
+    };
+  }
+
+  state.attributes.popper = {
+    ...state.attributes.popper,
+    'data-popper-placement': state.placement,
+  };
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type ComputeStylesModifier = Modifier<'computeStyles', Options>;
+export default ({
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {},
+}: ComputeStylesModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/eventListeners.d.ts b/node_modules/@popperjs/core/lib/modifiers/eventListeners.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..077a7fb2bd68da06873e2deabbe37a964a983d71
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/eventListeners.d.ts
@@ -0,0 +1,8 @@
+import type { Modifier } from "../types";
+export declare type Options = {
+    scroll: boolean;
+    resize: boolean;
+};
+export declare type EventListenersModifier = Modifier<"eventListeners", Options>;
+declare const _default: EventListenersModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/eventListeners.js b/node_modules/@popperjs/core/lib/modifiers/eventListeners.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc68f35ea42c45330ba0d27c62c5c52d26f5ca3c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/eventListeners.js
@@ -0,0 +1,49 @@
+import getWindow from "../dom-utils/getWindow.js"; // eslint-disable-next-line import/no-unused-modules
+
+var passive = {
+  passive: true
+};
+
+function effect(_ref) {
+  var state = _ref.state,
+      instance = _ref.instance,
+      options = _ref.options;
+  var _options$scroll = options.scroll,
+      scroll = _options$scroll === void 0 ? true : _options$scroll,
+      _options$resize = options.resize,
+      resize = _options$resize === void 0 ? true : _options$resize;
+  var window = getWindow(state.elements.popper);
+  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+  if (scroll) {
+    scrollParents.forEach(function (scrollParent) {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return function () {
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: function fn() {},
+  effect: effect,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/eventListeners.js.flow b/node_modules/@popperjs/core/lib/modifiers/eventListeners.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..eab18a52fb01b4ecf6ad1165b3a514c68982feee
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/eventListeners.js.flow
@@ -0,0 +1,54 @@
+// @flow
+import type { ModifierArguments, Modifier } from '../types';
+import getWindow from '../dom-utils/getWindow';
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  scroll: boolean,
+  resize: boolean,
+};
+
+const passive = { passive: true };
+
+function effect({ state, instance, options }: ModifierArguments<Options>) {
+  const { scroll = true, resize = true } = options;
+
+  const window = getWindow(state.elements.popper);
+  const scrollParents = [
+    ...state.scrollParents.reference,
+    ...state.scrollParents.popper,
+  ];
+
+  if (scroll) {
+    scrollParents.forEach(scrollParent => {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return () => {
+    if (scroll) {
+      scrollParents.forEach(scrollParent => {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type EventListenersModifier = Modifier<'eventListeners', Options>;
+export default ({
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: () => {},
+  effect,
+  data: {},
+}: EventListenersModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/flip.d.ts b/node_modules/@popperjs/core/lib/modifiers/flip.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..01157983aa5a01ec080e29083d577d38d582ef5d
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/flip.d.ts
@@ -0,0 +1,16 @@
+import type { Placement, Boundary, RootBoundary } from "../enums";
+import type { Modifier, Padding } from "../types";
+export declare type Options = {
+    mainAxis: boolean;
+    altAxis: boolean;
+    fallbackPlacements: Array<Placement>;
+    padding: Padding;
+    boundary: Boundary;
+    rootBoundary: RootBoundary;
+    altBoundary: boolean;
+    flipVariations: boolean;
+    allowedAutoPlacements: Array<Placement>;
+};
+export declare type FlipModifier = Modifier<"flip", Options>;
+declare const _default: FlipModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/flip.js b/node_modules/@popperjs/core/lib/modifiers/flip.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c332168fef088768226c4203c17ca6d57bfcaaf
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/flip.js
@@ -0,0 +1,147 @@
+import getOppositePlacement from "../utils/getOppositePlacement.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getOppositeVariationPlacement from "../utils/getOppositeVariationPlacement.js";
+import detectOverflow from "../utils/detectOverflow.js";
+import computeAutoPlacement from "../utils/computeAutoPlacement.js";
+import { bottom, top, start, right, left, auto } from "../enums.js";
+import getVariation from "../utils/getVariation.js"; // eslint-disable-next-line import/no-unused-modules
+
+function getExpandedFallbackPlacements(placement) {
+  if (getBasePlacement(placement) === auto) {
+    return [];
+  }
+
+  var oppositePlacement = getOppositePlacement(placement);
+  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+}
+
+function flip(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+
+  if (state.modifiersData[name]._skip) {
+    return;
+  }
+
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+      specifiedFallbackPlacements = options.fallbackPlacements,
+      padding = options.padding,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      _options$flipVariatio = options.flipVariations,
+      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+      allowedAutoPlacements = options.allowedAutoPlacements;
+  var preferredPlacement = state.options.placement;
+  var basePlacement = getBasePlacement(preferredPlacement);
+  var isBasePlacement = basePlacement === preferredPlacement;
+  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      flipVariations: flipVariations,
+      allowedAutoPlacements: allowedAutoPlacements
+    }) : placement);
+  }, []);
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var checksMap = new Map();
+  var makeFallbackChecks = true;
+  var firstFittingPlacement = placements[0];
+
+  for (var i = 0; i < placements.length; i++) {
+    var placement = placements[i];
+
+    var _basePlacement = getBasePlacement(placement);
+
+    var isStartVariation = getVariation(placement) === start;
+    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+    var len = isVertical ? 'width' : 'height';
+    var overflow = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      altBoundary: altBoundary,
+      padding: padding
+    });
+    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+    if (referenceRect[len] > popperRect[len]) {
+      mainVariationSide = getOppositePlacement(mainVariationSide);
+    }
+
+    var altVariationSide = getOppositePlacement(mainVariationSide);
+    var checks = [];
+
+    if (checkMainAxis) {
+      checks.push(overflow[_basePlacement] <= 0);
+    }
+
+    if (checkAltAxis) {
+      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+    }
+
+    if (checks.every(function (check) {
+      return check;
+    })) {
+      firstFittingPlacement = placement;
+      makeFallbackChecks = false;
+      break;
+    }
+
+    checksMap.set(placement, checks);
+  }
+
+  if (makeFallbackChecks) {
+    // `2` may be desired in some cases – research later
+    var numberOfChecks = flipVariations ? 3 : 1;
+
+    var _loop = function _loop(_i) {
+      var fittingPlacement = placements.find(function (placement) {
+        var checks = checksMap.get(placement);
+
+        if (checks) {
+          return checks.slice(0, _i).every(function (check) {
+            return check;
+          });
+        }
+      });
+
+      if (fittingPlacement) {
+        firstFittingPlacement = fittingPlacement;
+        return "break";
+      }
+    };
+
+    for (var _i = numberOfChecks; _i > 0; _i--) {
+      var _ret = _loop(_i);
+
+      if (_ret === "break") break;
+    }
+  }
+
+  if (state.placement !== firstFittingPlacement) {
+    state.modifiersData[name]._skip = true;
+    state.placement = firstFittingPlacement;
+    state.reset = true;
+  }
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'flip',
+  enabled: true,
+  phase: 'main',
+  fn: flip,
+  requiresIfExists: ['offset'],
+  data: {
+    _skip: false
+  }
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/flip.js.flow b/node_modules/@popperjs/core/lib/modifiers/flip.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..c74b852503686bb96629f52eaf5d3d61d87bc135
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/flip.js.flow
@@ -0,0 +1,177 @@
+// @flow
+import type { Placement, Boundary, RootBoundary } from '../enums';
+import type { ModifierArguments, Modifier, Padding } from '../types';
+import getOppositePlacement from '../utils/getOppositePlacement';
+import getBasePlacement from '../utils/getBasePlacement';
+import getOppositeVariationPlacement from '../utils/getOppositeVariationPlacement';
+import detectOverflow from '../utils/detectOverflow';
+import computeAutoPlacement from '../utils/computeAutoPlacement';
+import { bottom, top, start, right, left, auto } from '../enums';
+import getVariation from '../utils/getVariation';
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  mainAxis: boolean,
+  altAxis: boolean,
+  fallbackPlacements: Array<Placement>,
+  padding: Padding,
+  boundary: Boundary,
+  rootBoundary: RootBoundary,
+  altBoundary: boolean,
+  flipVariations: boolean,
+  allowedAutoPlacements: Array<Placement>,
+};
+
+function getExpandedFallbackPlacements(placement: Placement): Array<Placement> {
+  if (getBasePlacement(placement) === auto) {
+    return [];
+  }
+
+  const oppositePlacement = getOppositePlacement(placement);
+
+  return [
+    getOppositeVariationPlacement(placement),
+    oppositePlacement,
+    getOppositeVariationPlacement(oppositePlacement),
+  ];
+}
+
+function flip({ state, options, name }: ModifierArguments<Options>) {
+  if (state.modifiersData[name]._skip) {
+    return;
+  }
+
+  const {
+    mainAxis: checkMainAxis = true,
+    altAxis: checkAltAxis = true,
+    fallbackPlacements: specifiedFallbackPlacements,
+    padding,
+    boundary,
+    rootBoundary,
+    altBoundary,
+    flipVariations = true,
+    allowedAutoPlacements,
+  } = options;
+
+  const preferredPlacement = state.options.placement;
+  const basePlacement = getBasePlacement(preferredPlacement);
+  const isBasePlacement = basePlacement === preferredPlacement;
+
+  const fallbackPlacements =
+    specifiedFallbackPlacements ||
+    (isBasePlacement || !flipVariations
+      ? [getOppositePlacement(preferredPlacement)]
+      : getExpandedFallbackPlacements(preferredPlacement));
+
+  const placements = [preferredPlacement, ...fallbackPlacements].reduce(
+    (acc, placement) => {
+      return acc.concat(
+        getBasePlacement(placement) === auto
+          ? computeAutoPlacement(state, {
+              placement,
+              boundary,
+              rootBoundary,
+              padding,
+              flipVariations,
+              allowedAutoPlacements,
+            })
+          : placement
+      );
+    },
+    []
+  );
+
+  const referenceRect = state.rects.reference;
+  const popperRect = state.rects.popper;
+
+  const checksMap = new Map();
+  let makeFallbackChecks = true;
+  let firstFittingPlacement = placements[0];
+
+  for (let i = 0; i < placements.length; i++) {
+    const placement = placements[i];
+    const basePlacement = getBasePlacement(placement);
+    const isStartVariation = getVariation(placement) === start;
+    const isVertical = [top, bottom].indexOf(basePlacement) >= 0;
+    const len = isVertical ? 'width' : 'height';
+
+    const overflow = detectOverflow(state, {
+      placement,
+      boundary,
+      rootBoundary,
+      altBoundary,
+      padding,
+    });
+
+    let mainVariationSide: any = isVertical
+      ? isStartVariation
+        ? right
+        : left
+      : isStartVariation
+      ? bottom
+      : top;
+
+    if (referenceRect[len] > popperRect[len]) {
+      mainVariationSide = getOppositePlacement(mainVariationSide);
+    }
+
+    const altVariationSide: any = getOppositePlacement(mainVariationSide);
+
+    const checks = [];
+
+    if (checkMainAxis) {
+      checks.push(overflow[basePlacement] <= 0);
+    }
+
+    if (checkAltAxis) {
+      checks.push(
+        overflow[mainVariationSide] <= 0,
+        overflow[altVariationSide] <= 0
+      );
+    }
+
+    if (checks.every((check) => check)) {
+      firstFittingPlacement = placement;
+      makeFallbackChecks = false;
+      break;
+    }
+
+    checksMap.set(placement, checks);
+  }
+
+  if (makeFallbackChecks) {
+    // `2` may be desired in some cases – research later
+    const numberOfChecks = flipVariations ? 3 : 1;
+
+    for (let i = numberOfChecks; i > 0; i--) {
+      const fittingPlacement = placements.find((placement) => {
+        const checks = checksMap.get(placement);
+        if (checks) {
+          return checks.slice(0, i).every((check) => check);
+        }
+      });
+
+      if (fittingPlacement) {
+        firstFittingPlacement = fittingPlacement;
+        break;
+      }
+    }
+  }
+
+  if (state.placement !== firstFittingPlacement) {
+    state.modifiersData[name]._skip = true;
+    state.placement = firstFittingPlacement;
+    state.reset = true;
+  }
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type FlipModifier = Modifier<'flip', Options>;
+export default ({
+  name: 'flip',
+  enabled: true,
+  phase: 'main',
+  fn: flip,
+  requiresIfExists: ['offset'],
+  data: { _skip: false },
+}: FlipModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/hide.d.ts b/node_modules/@popperjs/core/lib/modifiers/hide.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2d2f2e12ecae8d73cb5de2c0e6cb870b7b9fd1ad
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/hide.d.ts
@@ -0,0 +1,4 @@
+import type { Modifier } from "../types";
+export declare type HideModifier = Modifier<"hide", {}>;
+declare const _default: HideModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/hide.js b/node_modules/@popperjs/core/lib/modifiers/hide.js
new file mode 100644
index 0000000000000000000000000000000000000000..799c4a781f12ffc88ae60eb2c00e3e8c069ad769
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/hide.js
@@ -0,0 +1,61 @@
+import { top, bottom, left, right } from "../enums.js";
+import detectOverflow from "../utils/detectOverflow.js";
+
+function getSideOffsets(overflow, rect, preventedOffsets) {
+  if (preventedOffsets === void 0) {
+    preventedOffsets = {
+      x: 0,
+      y: 0
+    };
+  }
+
+  return {
+    top: overflow.top - rect.height - preventedOffsets.y,
+    right: overflow.right - rect.width + preventedOffsets.x,
+    bottom: overflow.bottom - rect.height + preventedOffsets.y,
+    left: overflow.left - rect.width - preventedOffsets.x
+  };
+}
+
+function isAnySideFullyClipped(overflow) {
+  return [top, right, bottom, left].some(function (side) {
+    return overflow[side] >= 0;
+  });
+}
+
+function hide(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var preventedOffsets = state.modifiersData.preventOverflow;
+  var referenceOverflow = detectOverflow(state, {
+    elementContext: 'reference'
+  });
+  var popperAltOverflow = detectOverflow(state, {
+    altBoundary: true
+  });
+  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+  state.modifiersData[name] = {
+    referenceClippingOffsets: referenceClippingOffsets,
+    popperEscapeOffsets: popperEscapeOffsets,
+    isReferenceHidden: isReferenceHidden,
+    hasPopperEscaped: hasPopperEscaped
+  };
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-reference-hidden': isReferenceHidden,
+    'data-popper-escaped': hasPopperEscaped
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'hide',
+  enabled: true,
+  phase: 'main',
+  requiresIfExists: ['preventOverflow'],
+  fn: hide
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/hide.js.flow b/node_modules/@popperjs/core/lib/modifiers/hide.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ee7476a15c5b782af1e89b14a31d036586cd58dc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/hide.js.flow
@@ -0,0 +1,76 @@
+// @flow
+import type {
+  ModifierArguments,
+  Modifier,
+  Rect,
+  SideObject,
+  Offsets,
+} from '../types';
+import { top, bottom, left, right } from '../enums';
+import detectOverflow from '../utils/detectOverflow';
+
+function getSideOffsets(
+  overflow: SideObject,
+  rect: Rect,
+  preventedOffsets: Offsets = { x: 0, y: 0 }
+): SideObject {
+  return {
+    top: overflow.top - rect.height - preventedOffsets.y,
+    right: overflow.right - rect.width + preventedOffsets.x,
+    bottom: overflow.bottom - rect.height + preventedOffsets.y,
+    left: overflow.left - rect.width - preventedOffsets.x,
+  };
+}
+
+function isAnySideFullyClipped(overflow: SideObject): boolean {
+  return [top, right, bottom, left].some((side) => overflow[side] >= 0);
+}
+
+function hide({ state, name }: ModifierArguments<{||}>) {
+  const referenceRect = state.rects.reference;
+  const popperRect = state.rects.popper;
+  const preventedOffsets = state.modifiersData.preventOverflow;
+
+  const referenceOverflow = detectOverflow(state, {
+    elementContext: 'reference',
+  });
+  const popperAltOverflow = detectOverflow(state, {
+    altBoundary: true,
+  });
+
+  const referenceClippingOffsets = getSideOffsets(
+    referenceOverflow,
+    referenceRect
+  );
+  const popperEscapeOffsets = getSideOffsets(
+    popperAltOverflow,
+    popperRect,
+    preventedOffsets
+  );
+
+  const isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+  const hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+
+  state.modifiersData[name] = {
+    referenceClippingOffsets,
+    popperEscapeOffsets,
+    isReferenceHidden,
+    hasPopperEscaped,
+  };
+
+  state.attributes.popper = {
+    ...state.attributes.popper,
+    'data-popper-reference-hidden': isReferenceHidden,
+    'data-popper-escaped': hasPopperEscaped,
+  };
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type HideModifier = Modifier<'hide', {||}>;
+export default ({
+  name: 'hide',
+  enabled: true,
+  phase: 'main',
+  requiresIfExists: ['preventOverflow'],
+  fn: hide,
+}: HideModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/index.d.ts b/node_modules/@popperjs/core/lib/modifiers/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b457cd7f87a403f0fb462d52030aa19ac40d010
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/index.d.ts
@@ -0,0 +1,9 @@
+export { default as applyStyles } from "./applyStyles";
+export { default as arrow } from "./arrow";
+export { default as computeStyles } from "./computeStyles";
+export { default as eventListeners } from "./eventListeners";
+export { default as flip } from "./flip";
+export { default as hide } from "./hide";
+export { default as offset } from "./offset";
+export { default as popperOffsets } from "./popperOffsets";
+export { default as preventOverflow } from "./preventOverflow";
diff --git a/node_modules/@popperjs/core/lib/modifiers/index.js b/node_modules/@popperjs/core/lib/modifiers/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d5990909c902eeee9df8422ff9eddfde298f95b
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/index.js
@@ -0,0 +1,9 @@
+export { default as applyStyles } from "./applyStyles.js";
+export { default as arrow } from "./arrow.js";
+export { default as computeStyles } from "./computeStyles.js";
+export { default as eventListeners } from "./eventListeners.js";
+export { default as flip } from "./flip.js";
+export { default as hide } from "./hide.js";
+export { default as offset } from "./offset.js";
+export { default as popperOffsets } from "./popperOffsets.js";
+export { default as preventOverflow } from "./preventOverflow.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/index.js.flow b/node_modules/@popperjs/core/lib/modifiers/index.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e3ee823b6b9c229797a6fdb2cca2d2e76701d727
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/index.js.flow
@@ -0,0 +1,10 @@
+// @flow
+export { default as applyStyles } from './applyStyles';
+export { default as arrow } from './arrow';
+export { default as computeStyles } from './computeStyles';
+export { default as eventListeners } from './eventListeners';
+export { default as flip } from './flip';
+export { default as hide } from './hide';
+export { default as offset } from './offset';
+export { default as popperOffsets } from './popperOffsets';
+export { default as preventOverflow } from './preventOverflow';
diff --git a/node_modules/@popperjs/core/lib/modifiers/offset.d.ts b/node_modules/@popperjs/core/lib/modifiers/offset.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..081956d54b71068946b74f04df1e121672da1b84
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/offset.d.ts
@@ -0,0 +1,18 @@
+import type { Placement } from "../enums";
+import type { Modifier, Rect, Offsets } from "../types";
+export declare type OffsetsFunction = (arg0: {
+    popper: Rect;
+    reference: Rect;
+    placement: Placement;
+}) => [number | null | undefined, number | null | undefined];
+declare type Offset = OffsetsFunction | [number | null | undefined, number | null | undefined];
+export declare type Options = {
+    offset: Offset;
+};
+export declare function distanceAndSkiddingToXY(placement: Placement, rects: {
+    popper: Rect;
+    reference: Rect;
+}, offset: Offset): Offsets;
+export declare type OffsetModifier = Modifier<"offset", Options>;
+declare const _default: OffsetModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/offset.js b/node_modules/@popperjs/core/lib/modifiers/offset.js
new file mode 100644
index 0000000000000000000000000000000000000000..12fa0076a1cda6234fe5194b02e9ec20d66835ed
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/offset.js
@@ -0,0 +1,54 @@
+import getBasePlacement from "../utils/getBasePlacement.js";
+import { top, left, right, placements } from "../enums.js"; // eslint-disable-next-line import/no-unused-modules
+
+export function distanceAndSkiddingToXY(placement, rects, offset) {
+  var basePlacement = getBasePlacement(placement);
+  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+    placement: placement
+  })) : offset,
+      skidding = _ref[0],
+      distance = _ref[1];
+
+  skidding = skidding || 0;
+  distance = (distance || 0) * invertDistance;
+  return [left, right].indexOf(basePlacement) >= 0 ? {
+    x: distance,
+    y: skidding
+  } : {
+    x: skidding,
+    y: distance
+  };
+}
+
+function offset(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options,
+      name = _ref2.name;
+  var _options$offset = options.offset,
+      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+  var data = placements.reduce(function (acc, placement) {
+    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+    return acc;
+  }, {});
+  var _data$state$placement = data[state.placement],
+      x = _data$state$placement.x,
+      y = _data$state$placement.y;
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.modifiersData.popperOffsets.x += x;
+    state.modifiersData.popperOffsets.y += y;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'offset',
+  enabled: true,
+  phase: 'main',
+  requires: ['popperOffsets'],
+  fn: offset
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/offset.js.flow b/node_modules/@popperjs/core/lib/modifiers/offset.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..b39edc425718c381b086e536873f2256eda9448c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/offset.js.flow
@@ -0,0 +1,71 @@
+// @flow
+import type { Placement } from '../enums';
+import type { ModifierArguments, Modifier, Rect, Offsets } from '../types';
+import getBasePlacement from '../utils/getBasePlacement';
+import { top, left, right, placements } from '../enums';
+
+// eslint-disable-next-line import/no-unused-modules
+export type OffsetsFunction = ({
+  popper: Rect,
+  reference: Rect,
+  placement: Placement,
+}) => [?number, ?number];
+
+type Offset = OffsetsFunction | [?number, ?number];
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  offset: Offset,
+};
+
+export function distanceAndSkiddingToXY(
+  placement: Placement,
+  rects: { popper: Rect, reference: Rect },
+  offset: Offset
+): Offsets {
+  const basePlacement = getBasePlacement(placement);
+  const invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+  let [skidding, distance] =
+    typeof offset === 'function'
+      ? offset({
+          ...rects,
+          placement,
+        })
+      : offset;
+
+  skidding = skidding || 0;
+  distance = (distance || 0) * invertDistance;
+
+  return [left, right].indexOf(basePlacement) >= 0
+    ? { x: distance, y: skidding }
+    : { x: skidding, y: distance };
+}
+
+function offset({ state, options, name }: ModifierArguments<Options>) {
+  const { offset = [0, 0] } = options;
+
+  const data = placements.reduce((acc, placement) => {
+    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+    return acc;
+  }, {});
+
+  const { x, y } = data[state.placement];
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.modifiersData.popperOffsets.x += x;
+    state.modifiersData.popperOffsets.y += y;
+  }
+
+  state.modifiersData[name] = data;
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type OffsetModifier = Modifier<'offset', Options>;
+export default ({
+  name: 'offset',
+  enabled: true,
+  phase: 'main',
+  requires: ['popperOffsets'],
+  fn: offset,
+}: OffsetModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/popperOffsets.d.ts b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..831cd55bded7fc737c3f6329bcac642a5ee67e8c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.d.ts
@@ -0,0 +1,4 @@
+import type { Modifier } from "../types";
+export declare type PopperOffsetsModifier = Modifier<"popperOffsets", {}>;
+declare const _default: PopperOffsetsModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js
new file mode 100644
index 0000000000000000000000000000000000000000..5440ab7884c78ce1b123dda0da3c0442be60f6d7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js
@@ -0,0 +1,25 @@
+import computeOffsets from "../utils/computeOffsets.js";
+
+function popperOffsets(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {}
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js.flow b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..30b5894544c79d0950e31ba28d2cde6f79290796
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js.flow
@@ -0,0 +1,26 @@
+// @flow
+import type { ModifierArguments, Modifier } from '../types';
+import computeOffsets from '../utils/computeOffsets';
+
+function popperOffsets({ state, name }: ModifierArguments<{||}>) {
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement,
+  });
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type PopperOffsetsModifier = Modifier<'popperOffsets', {||}>;
+export default ({
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {},
+}: PopperOffsetsModifier);
diff --git a/node_modules/@popperjs/core/lib/modifiers/preventOverflow.d.ts b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..393cc8b2ac986fc4cd0482d117bb5805a7061146
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.d.ts
@@ -0,0 +1,30 @@
+import type { Placement, Boundary, RootBoundary } from "../enums";
+import type { Rect, Modifier, Padding } from "../types";
+declare type TetherOffset = ((arg0: {
+    popper: Rect;
+    reference: Rect;
+    placement: Placement;
+}) => number | {
+    mainAxis: number;
+    altAxis: number;
+}) | number | {
+    mainAxis: number;
+    altAxis: number;
+};
+export declare type Options = {
+    mainAxis: boolean;
+    altAxis: boolean;
+    boundary: Boundary;
+    rootBoundary: RootBoundary;
+    altBoundary: boolean;
+    /**
+     * Allows the popper to overflow from its boundaries to keep it near its
+     * reference element
+     */
+    tether: boolean;
+    tetherOffset: TetherOffset;
+    padding: Padding;
+};
+export declare type PreventOverflowModifier = Modifier<"preventOverflow", Options>;
+declare const _default: PreventOverflowModifier;
+export default _default;
diff --git a/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..729eedd6306c49d84aacec69cf0f8cddb6f468cc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js
@@ -0,0 +1,142 @@
+import { top, left, right, bottom, start } from "../enums.js";
+import getBasePlacement from "../utils/getBasePlacement.js";
+import getMainAxisFromPlacement from "../utils/getMainAxisFromPlacement.js";
+import getAltAxis from "../utils/getAltAxis.js";
+import { within, withinMaxClamp } from "../utils/within.js";
+import getLayoutRect from "../dom-utils/getLayoutRect.js";
+import getOffsetParent from "../dom-utils/getOffsetParent.js";
+import detectOverflow from "../utils/detectOverflow.js";
+import getVariation from "../utils/getVariation.js";
+import getFreshSideObject from "../utils/getFreshSideObject.js";
+import { min as mathMin, max as mathMax } from "../utils/math.js";
+
+function preventOverflow(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      padding = options.padding,
+      _options$tether = options.tether,
+      tether = _options$tether === void 0 ? true : _options$tether,
+      _options$tetherOffset = options.tetherOffset,
+      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+  var overflow = detectOverflow(state, {
+    boundary: boundary,
+    rootBoundary: rootBoundary,
+    padding: padding,
+    altBoundary: altBoundary
+  });
+  var basePlacement = getBasePlacement(state.placement);
+  var variation = getVariation(state.placement);
+  var isBasePlacement = !variation;
+  var mainAxis = getMainAxisFromPlacement(basePlacement);
+  var altAxis = getAltAxis(mainAxis);
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : tetherOffset;
+  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+    mainAxis: tetherOffsetValue,
+    altAxis: tetherOffsetValue
+  } : Object.assign({
+    mainAxis: 0,
+    altAxis: 0
+  }, tetherOffsetValue);
+  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+  var data = {
+    x: 0,
+    y: 0
+  };
+
+  if (!popperOffsets) {
+    return;
+  }
+
+  if (checkMainAxis) {
+    var _offsetModifierState$;
+
+    var mainSide = mainAxis === 'y' ? top : left;
+    var altSide = mainAxis === 'y' ? bottom : right;
+    var len = mainAxis === 'y' ? 'height' : 'width';
+    var offset = popperOffsets[mainAxis];
+    var min = offset + overflow[mainSide];
+    var max = offset - overflow[altSide];
+    var additive = tether ? -popperRect[len] / 2 : 0;
+    var minLen = variation === start ? referenceRect[len] : popperRect[len];
+    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+    // outside the reference bounds
+
+    var arrowElement = state.elements.arrow;
+    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+      width: 0,
+      height: 0
+    };
+    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+    var arrowPaddingMin = arrowPaddingObject[mainSide];
+    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+    // to include its full size in the calculation. If the reference is small
+    // and near the edge of a boundary, the popper can overflow even if the
+    // reference is not overflowing as well (e.g. virtual elements with no
+    // width or height)
+
+    var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+    var tetherMax = offset + maxOffset - offsetModifierValue;
+    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);
+    popperOffsets[mainAxis] = preventedOffset;
+    data[mainAxis] = preventedOffset - offset;
+  }
+
+  if (checkAltAxis) {
+    var _offsetModifierState$2;
+
+    var _mainSide = mainAxis === 'x' ? top : left;
+
+    var _altSide = mainAxis === 'x' ? bottom : right;
+
+    var _offset = popperOffsets[altAxis];
+
+    var _len = altAxis === 'y' ? 'height' : 'width';
+
+    var _min = _offset + overflow[_mainSide];
+
+    var _max = _offset - overflow[_altSide];
+
+    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+    popperOffsets[altAxis] = _preventedOffset;
+    data[altAxis] = _preventedOffset - _offset;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+export default {
+  name: 'preventOverflow',
+  enabled: true,
+  phase: 'main',
+  fn: preventOverflow,
+  requiresIfExists: ['offset']
+};
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js.flow b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..d503cb9a17f30d7fb39bf2bf301653427beacce6
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js.flow
@@ -0,0 +1,220 @@
+// @flow
+import { top, left, right, bottom, start } from '../enums';
+import type { Placement, Boundary, RootBoundary } from '../enums';
+import type { Rect, ModifierArguments, Modifier, Padding } from '../types';
+import getBasePlacement from '../utils/getBasePlacement';
+import getMainAxisFromPlacement from '../utils/getMainAxisFromPlacement';
+import getAltAxis from '../utils/getAltAxis';
+import { within, withinMaxClamp } from '../utils/within';
+import getLayoutRect from '../dom-utils/getLayoutRect';
+import getOffsetParent from '../dom-utils/getOffsetParent';
+import detectOverflow from '../utils/detectOverflow';
+import getVariation from '../utils/getVariation';
+import getFreshSideObject from '../utils/getFreshSideObject';
+import { min as mathMin, max as mathMax } from '../utils/math';
+
+type TetherOffset =
+  | (({
+      popper: Rect,
+      reference: Rect,
+      placement: Placement,
+    }) => number | { mainAxis: number, altAxis: number })
+  | number
+  | { mainAxis: number, altAxis: number };
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  /* Prevents boundaries overflow on the main axis */
+  mainAxis: boolean,
+  /* Prevents boundaries overflow on the alternate axis */
+  altAxis: boolean,
+  /* The area to check the popper is overflowing in */
+  boundary: Boundary,
+  /* If the popper is not overflowing the main area, fallback to this one */
+  rootBoundary: RootBoundary,
+  /* Use the reference's "clippingParents" boundary context */
+  altBoundary: boolean,
+  /**
+   * Allows the popper to overflow from its boundaries to keep it near its
+   * reference element
+   */
+  tether: boolean,
+  /* Offsets when the `tether` option should activate */
+  tetherOffset: TetherOffset,
+  /* Sets a padding to the provided boundary */
+  padding: Padding,
+};
+
+function preventOverflow({ state, options, name }: ModifierArguments<Options>) {
+  const {
+    mainAxis: checkMainAxis = true,
+    altAxis: checkAltAxis = false,
+    boundary,
+    rootBoundary,
+    altBoundary,
+    padding,
+    tether = true,
+    tetherOffset = 0,
+  } = options;
+
+  const overflow = detectOverflow(state, {
+    boundary,
+    rootBoundary,
+    padding,
+    altBoundary,
+  });
+  const basePlacement = getBasePlacement(state.placement);
+  const variation = getVariation(state.placement);
+  const isBasePlacement = !variation;
+  const mainAxis = getMainAxisFromPlacement(basePlacement);
+  const altAxis = getAltAxis(mainAxis);
+  const popperOffsets = state.modifiersData.popperOffsets;
+  const referenceRect = state.rects.reference;
+  const popperRect = state.rects.popper;
+  const tetherOffsetValue =
+    typeof tetherOffset === 'function'
+      ? tetherOffset({
+          ...state.rects,
+          placement: state.placement,
+        })
+      : tetherOffset;
+  const normalizedTetherOffsetValue =
+    typeof tetherOffsetValue === 'number'
+      ? { mainAxis: tetherOffsetValue, altAxis: tetherOffsetValue }
+      : { mainAxis: 0, altAxis: 0, ...tetherOffsetValue };
+  const offsetModifierState = state.modifiersData.offset
+    ? state.modifiersData.offset[state.placement]
+    : null;
+
+  const data = { x: 0, y: 0 };
+
+  if (!popperOffsets) {
+    return;
+  }
+
+  if (checkMainAxis) {
+    const mainSide = mainAxis === 'y' ? top : left;
+    const altSide = mainAxis === 'y' ? bottom : right;
+    const len = mainAxis === 'y' ? 'height' : 'width';
+    const offset = popperOffsets[mainAxis];
+
+    const min = offset + overflow[mainSide];
+    const max = offset - overflow[altSide];
+
+    const additive = tether ? -popperRect[len] / 2 : 0;
+
+    const minLen = variation === start ? referenceRect[len] : popperRect[len];
+    const maxLen = variation === start ? -popperRect[len] : -referenceRect[len];
+
+    // We need to include the arrow in the calculation so the arrow doesn't go
+    // outside the reference bounds
+    const arrowElement = state.elements.arrow;
+    const arrowRect =
+      tether && arrowElement
+        ? getLayoutRect(arrowElement)
+        : { width: 0, height: 0 };
+    const arrowPaddingObject = state.modifiersData['arrow#persistent']
+      ? state.modifiersData['arrow#persistent'].padding
+      : getFreshSideObject();
+    const arrowPaddingMin = arrowPaddingObject[mainSide];
+    const arrowPaddingMax = arrowPaddingObject[altSide];
+
+    // If the reference length is smaller than the arrow length, we don't want
+    // to include its full size in the calculation. If the reference is small
+    // and near the edge of a boundary, the popper can overflow even if the
+    // reference is not overflowing as well (e.g. virtual elements with no
+    // width or height)
+    const arrowLen = within(0, referenceRect[len], arrowRect[len]);
+
+    const minOffset = isBasePlacement
+      ? referenceRect[len] / 2 -
+        additive -
+        arrowLen -
+        arrowPaddingMin -
+        normalizedTetherOffsetValue.mainAxis
+      : minLen -
+        arrowLen -
+        arrowPaddingMin -
+        normalizedTetherOffsetValue.mainAxis;
+    const maxOffset = isBasePlacement
+      ? -referenceRect[len] / 2 +
+        additive +
+        arrowLen +
+        arrowPaddingMax +
+        normalizedTetherOffsetValue.mainAxis
+      : maxLen +
+        arrowLen +
+        arrowPaddingMax +
+        normalizedTetherOffsetValue.mainAxis;
+
+    const arrowOffsetParent =
+      state.elements.arrow && getOffsetParent(state.elements.arrow);
+    const clientOffset = arrowOffsetParent
+      ? mainAxis === 'y'
+        ? arrowOffsetParent.clientTop || 0
+        : arrowOffsetParent.clientLeft || 0
+      : 0;
+
+    const offsetModifierValue = offsetModifierState?.[mainAxis] ?? 0;
+    const tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+    const tetherMax = offset + maxOffset - offsetModifierValue;
+
+    const preventedOffset = within(
+      tether ? mathMin(min, tetherMin) : min,
+      offset,
+      tether ? mathMax(max, tetherMax) : max
+    );
+
+    popperOffsets[mainAxis] = preventedOffset;
+    data[mainAxis] = preventedOffset - offset;
+  }
+
+  if (checkAltAxis) {
+    const mainSide = mainAxis === 'x' ? top : left;
+    const altSide = mainAxis === 'x' ? bottom : right;
+    const offset = popperOffsets[altAxis];
+
+    const len = altAxis === 'y' ? 'height' : 'width';
+
+    const min = offset + overflow[mainSide];
+    const max = offset - overflow[altSide];
+
+    const isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+    const offsetModifierValue = offsetModifierState?.[altAxis] ?? 0;
+    const tetherMin = isOriginSide
+      ? min
+      : offset -
+        referenceRect[len] -
+        popperRect[len] -
+        offsetModifierValue +
+        normalizedTetherOffsetValue.altAxis;
+    const tetherMax = isOriginSide
+      ? offset +
+        referenceRect[len] +
+        popperRect[len] -
+        offsetModifierValue -
+        normalizedTetherOffsetValue.altAxis
+      : max;
+
+    const preventedOffset =
+      tether && isOriginSide
+        ? withinMaxClamp(tetherMin, offset, tetherMax)
+        : within(tether ? tetherMin : min, offset, tether ? tetherMax : max);
+
+    popperOffsets[altAxis] = preventedOffset;
+    data[altAxis] = preventedOffset - offset;
+  }
+
+  state.modifiersData[name] = data;
+}
+
+// eslint-disable-next-line import/no-unused-modules
+export type PreventOverflowModifier = Modifier<'preventOverflow', Options>;
+export default ({
+  name: 'preventOverflow',
+  enabled: true,
+  phase: 'main',
+  fn: preventOverflow,
+  requiresIfExists: ['offset'],
+}: PreventOverflowModifier);
diff --git a/node_modules/@popperjs/core/lib/popper-base.d.ts b/node_modules/@popperjs/core/lib/popper-base.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6ced8ee595eaad7fe6ad06e2cae5dce93a4cd8c0
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-base.d.ts
@@ -0,0 +1,3 @@
+import { createPopper, popperGenerator, detectOverflow } from "./createPopper";
+export * from "./types";
+export { createPopper, popperGenerator, detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/popper-base.js b/node_modules/@popperjs/core/lib/popper-base.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7c8a32fc00452cabdb9efd40ddff80ea99213c3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-base.js
@@ -0,0 +1,3 @@
+import { createPopper, popperGenerator, detectOverflow } from "./createPopper.js";
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper, popperGenerator, detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/popper-base.js.flow b/node_modules/@popperjs/core/lib/popper-base.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..35e31ff0ae9a054739762796c2a96e94495945dc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-base.js.flow
@@ -0,0 +1,7 @@
+// @flow
+import { createPopper, popperGenerator, detectOverflow } from './createPopper';
+
+export type * from './types';
+
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper, popperGenerator, detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/popper-lite.d.ts b/node_modules/@popperjs/core/lib/popper-lite.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3bb7af63df2a9baee5d4393063619b2e4b0887fb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-lite.d.ts
@@ -0,0 +1,5 @@
+import { popperGenerator, detectOverflow } from "./createPopper";
+export * from "./types";
+declare const defaultModifiers: (import("./modifiers/popperOffsets").PopperOffsetsModifier | import("./modifiers/eventListeners").EventListenersModifier | import("./modifiers/computeStyles").ComputeStylesModifier | import("./modifiers/applyStyles").ApplyStylesModifier)[];
+declare const createPopper: <TModifier extends Partial<import("./types").Modifier<any, any>>>(reference: Element | import("./types").VirtualElement, popper: HTMLElement, options?: Partial<import("./types").OptionsGeneric<TModifier>>) => import("./types").Instance;
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/popper-lite.js b/node_modules/@popperjs/core/lib/popper-lite.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fb32beba37948fc4d42beb67887fc3a7c30fe51
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-lite.js
@@ -0,0 +1,11 @@
+import { popperGenerator, detectOverflow } from "./createPopper.js";
+import eventListeners from "./modifiers/eventListeners.js";
+import popperOffsets from "./modifiers/popperOffsets.js";
+import computeStyles from "./modifiers/computeStyles.js";
+import applyStyles from "./modifiers/applyStyles.js";
+var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/popper-lite.js.flow b/node_modules/@popperjs/core/lib/popper-lite.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..1ec957bb0d9ecec734f1a9bc7341b3ed5edabfc3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper-lite.js.flow
@@ -0,0 +1,21 @@
+// @flow
+import { popperGenerator, detectOverflow } from './createPopper';
+
+import eventListeners from './modifiers/eventListeners';
+import popperOffsets from './modifiers/popperOffsets';
+import computeStyles from './modifiers/computeStyles';
+import applyStyles from './modifiers/applyStyles';
+
+export type * from './types';
+
+const defaultModifiers = [
+  eventListeners,
+  popperOffsets,
+  computeStyles,
+  applyStyles,
+];
+
+const createPopper = popperGenerator({ defaultModifiers });
+
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
diff --git a/node_modules/@popperjs/core/lib/popper.d.ts b/node_modules/@popperjs/core/lib/popper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d7491a383e8aa76e9527db79d8113b547b2a9f7a
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper.d.ts
@@ -0,0 +1,7 @@
+import { popperGenerator, detectOverflow } from "./createPopper";
+export * from "./types";
+declare const defaultModifiers: (import("./modifiers/popperOffsets").PopperOffsetsModifier | import("./modifiers/flip").FlipModifier | import("./modifiers/hide").HideModifier | import("./modifiers/offset").OffsetModifier | import("./modifiers/eventListeners").EventListenersModifier | import("./modifiers/computeStyles").ComputeStylesModifier | import("./modifiers/arrow").ArrowModifier | import("./modifiers/preventOverflow").PreventOverflowModifier | import("./modifiers/applyStyles").ApplyStylesModifier)[];
+declare const createPopper: <TModifier extends Partial<import("./types").Modifier<any, any>>>(reference: Element | import("./types").VirtualElement, popper: HTMLElement, options?: Partial<import("./types").OptionsGeneric<TModifier>>) => import("./types").Instance;
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
+export { createPopper as createPopperLite } from "./popper-lite";
+export * from "./modifiers";
diff --git a/node_modules/@popperjs/core/lib/popper.js b/node_modules/@popperjs/core/lib/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..00f67a000a1a141acadf438f1c95e060f359e6d8
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper.js
@@ -0,0 +1,20 @@
+import { popperGenerator, detectOverflow } from "./createPopper.js";
+import eventListeners from "./modifiers/eventListeners.js";
+import popperOffsets from "./modifiers/popperOffsets.js";
+import computeStyles from "./modifiers/computeStyles.js";
+import applyStyles from "./modifiers/applyStyles.js";
+import offset from "./modifiers/offset.js";
+import flip from "./modifiers/flip.js";
+import preventOverflow from "./modifiers/preventOverflow.js";
+import arrow from "./modifiers/arrow.js";
+import hide from "./modifiers/hide.js";
+var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];
+var createPopper = /*#__PURE__*/popperGenerator({
+  defaultModifiers: defaultModifiers
+}); // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules
+
+export { createPopper as createPopperLite } from "./popper-lite.js"; // eslint-disable-next-line import/no-unused-modules
+
+export * from "./modifiers/index.js";
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/popper.js.flow b/node_modules/@popperjs/core/lib/popper.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..72388408375da94365cd499ed0ebf75bdd23e24e
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/popper.js.flow
@@ -0,0 +1,35 @@
+// @flow
+import { popperGenerator, detectOverflow } from './createPopper';
+
+import eventListeners from './modifiers/eventListeners';
+import popperOffsets from './modifiers/popperOffsets';
+import computeStyles from './modifiers/computeStyles';
+import applyStyles from './modifiers/applyStyles';
+import offset from './modifiers/offset';
+import flip from './modifiers/flip';
+import preventOverflow from './modifiers/preventOverflow';
+import arrow from './modifiers/arrow';
+import hide from './modifiers/hide';
+
+export type * from './types';
+
+const defaultModifiers = [
+  eventListeners,
+  popperOffsets,
+  computeStyles,
+  applyStyles,
+  offset,
+  flip,
+  preventOverflow,
+  arrow,
+  hide,
+];
+
+const createPopper = popperGenerator({ defaultModifiers });
+
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper, popperGenerator, defaultModifiers, detectOverflow };
+// eslint-disable-next-line import/no-unused-modules
+export { createPopper as createPopperLite } from './popper-lite';
+// eslint-disable-next-line import/no-unused-modules
+export * from './modifiers';
diff --git a/node_modules/@popperjs/core/lib/types.d.ts b/node_modules/@popperjs/core/lib/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1aed7b2294db52de7ff7a08e7cfe66c9c10df120
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/types.d.ts
@@ -0,0 +1,167 @@
+import type { Placement, ModifierPhases } from "./enums";
+import type { PopperOffsetsModifier } from "./modifiers/popperOffsets";
+import type { FlipModifier } from "./modifiers/flip";
+import type { HideModifier } from "./modifiers/hide";
+import type { OffsetModifier } from "./modifiers/offset";
+import type { EventListenersModifier } from "./modifiers/eventListeners";
+import type { ComputeStylesModifier } from "./modifiers/computeStyles";
+import type { ArrowModifier } from "./modifiers/arrow";
+import type { PreventOverflowModifier } from "./modifiers/preventOverflow";
+import type { ApplyStylesModifier } from "./modifiers/applyStyles";
+export declare type Obj = {
+    [key: string]: any;
+};
+export declare type VisualViewport = EventTarget & {
+    width: number;
+    height: number;
+    offsetLeft: number;
+    offsetTop: number;
+    scale: number;
+};
+export declare type Window = {
+    innerHeight: number;
+    offsetHeight: number;
+    innerWidth: number;
+    offsetWidth: number;
+    pageXOffset: number;
+    pageYOffset: number;
+    getComputedStyle: typeof getComputedStyle;
+    addEventListener(type: any, listener: any, optionsOrUseCapture?: any): void;
+    removeEventListener(type: any, listener: any, optionsOrUseCapture?: any): void;
+    Element: Element;
+    HTMLElement: HTMLElement;
+    Node: Node;
+    toString(): "[object Window]";
+    devicePixelRatio: number;
+    visualViewport?: VisualViewport;
+    ShadowRoot: ShadowRoot;
+};
+export declare type Rect = {
+    width: number;
+    height: number;
+    x: number;
+    y: number;
+};
+export declare type Offsets = {
+    y: number;
+    x: number;
+};
+export declare type PositioningStrategy = "absolute" | "fixed";
+export declare type StateRects = {
+    reference: Rect;
+    popper: Rect;
+};
+export declare type StateOffsets = {
+    popper: Offsets;
+    arrow?: Offsets;
+};
+declare type OffsetData = {
+    [key in Placement]?: Offsets;
+};
+export declare type State = {
+    elements: {
+        reference: Element | VirtualElement;
+        popper: HTMLElement;
+        arrow?: HTMLElement;
+    };
+    options: OptionsGeneric<any>;
+    placement: Placement;
+    strategy: PositioningStrategy;
+    orderedModifiers: Array<Modifier<any, any>>;
+    rects: StateRects;
+    scrollParents: {
+        reference: Array<Element | Window | VisualViewport>;
+        popper: Array<Element | Window | VisualViewport>;
+    };
+    styles: {
+        [key: string]: Partial<CSSStyleDeclaration>;
+    };
+    attributes: {
+        [key: string]: {
+            [key: string]: string | boolean;
+        };
+    };
+    modifiersData: {
+        arrow?: {
+            x?: number;
+            y?: number;
+            centerOffset: number;
+        };
+        hide?: {
+            isReferenceHidden: boolean;
+            hasPopperEscaped: boolean;
+            referenceClippingOffsets: SideObject;
+            popperEscapeOffsets: SideObject;
+        };
+        offset?: OffsetData;
+        preventOverflow?: Offsets;
+        popperOffsets?: Offsets;
+        [key: string]: any;
+    };
+    reset: boolean;
+};
+declare type SetAction<S> = S | ((prev: S) => S);
+export declare type Instance = {
+    state: State;
+    destroy: () => void;
+    forceUpdate: () => void;
+    update: () => Promise<Partial<State>>;
+    setOptions: (setOptionsAction: SetAction<Partial<OptionsGeneric<any>>>) => Promise<Partial<State>>;
+};
+export declare type ModifierArguments<Options extends Obj> = {
+    state: State;
+    instance: Instance;
+    options: Partial<Options>;
+    name: string;
+};
+export declare type Modifier<Name, Options extends Obj> = {
+    name: Name;
+    enabled: boolean;
+    phase: ModifierPhases;
+    requires?: Array<string>;
+    requiresIfExists?: Array<string>;
+    fn: (arg0: ModifierArguments<Options>) => State | void;
+    effect?: (arg0: ModifierArguments<Options>) => (() => void) | void;
+    options?: Partial<Options>;
+    data?: Obj;
+};
+export declare type StrictModifiers = Partial<OffsetModifier> | Partial<ApplyStylesModifier> | Partial<ArrowModifier> | Partial<HideModifier> | Partial<ComputeStylesModifier> | Partial<EventListenersModifier> | Partial<FlipModifier> | Partial<PreventOverflowModifier> | Partial<PopperOffsetsModifier>;
+export declare type EventListeners = {
+    scroll: boolean;
+    resize: boolean;
+};
+export declare type Options = {
+    placement: Placement;
+    modifiers: Array<Partial<Modifier<any, any>>>;
+    strategy: PositioningStrategy;
+    onFirstUpdate?: (arg0: Partial<State>) => void;
+};
+export declare type OptionsGeneric<TModifier> = {
+    placement: Placement;
+    modifiers: Array<TModifier>;
+    strategy: PositioningStrategy;
+    onFirstUpdate?: (arg0: Partial<State>) => void;
+};
+export declare type UpdateCallback = (arg0: State) => void;
+export declare type ClientRectObject = {
+    x: number;
+    y: number;
+    top: number;
+    left: number;
+    right: number;
+    bottom: number;
+    width: number;
+    height: number;
+};
+export declare type SideObject = {
+    top: number;
+    left: number;
+    right: number;
+    bottom: number;
+};
+export declare type Padding = number | Partial<SideObject>;
+export declare type VirtualElement = {
+    getBoundingClientRect: () => ClientRect | DOMRect;
+    contextElement?: Element;
+};
+export {};
diff --git a/node_modules/@popperjs/core/lib/types.js b/node_modules/@popperjs/core/lib/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/node_modules/@popperjs/core/lib/types.js.flow b/node_modules/@popperjs/core/lib/types.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..e5f20ab219a51cc7f8689b90ec10e5b769350902
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/types.js.flow
@@ -0,0 +1,199 @@
+// @flow
+/* eslint-disable import/no-unused-modules */
+import type { Placement, ModifierPhases } from './enums';
+
+import type { PopperOffsetsModifier } from './modifiers/popperOffsets';
+import type { FlipModifier } from './modifiers/flip';
+import type { HideModifier } from './modifiers/hide';
+import type { OffsetModifier } from './modifiers/offset';
+import type { EventListenersModifier } from './modifiers/eventListeners';
+import type { ComputeStylesModifier } from './modifiers/computeStyles';
+import type { ArrowModifier } from './modifiers/arrow';
+import type { PreventOverflowModifier } from './modifiers/preventOverflow';
+import type { ApplyStylesModifier } from './modifiers/applyStyles';
+
+export type Obj = { [key: string]: any };
+
+export type VisualViewport = EventTarget & {
+  width: number,
+  height: number,
+  offsetLeft: number,
+  offsetTop: number,
+  scale: number,
+};
+
+// This is a limited subset of the Window object, Flow doesn't provide one
+// so we define our own, with just the properties we need
+export type Window = {|
+  innerHeight: number,
+  offsetHeight: number,
+  innerWidth: number,
+  offsetWidth: number,
+  pageXOffset: number,
+  pageYOffset: number,
+  getComputedStyle: typeof getComputedStyle,
+  addEventListener(type: any, listener: any, optionsOrUseCapture?: any): void,
+  removeEventListener(
+    type: any,
+    listener: any,
+    optionsOrUseCapture?: any
+  ): void,
+  Element: Element,
+  HTMLElement: HTMLElement,
+  Node: Node,
+  toString(): '[object Window]',
+  devicePixelRatio: number,
+  visualViewport?: VisualViewport,
+  ShadowRoot: ShadowRoot,
+|};
+
+export type Rect = {|
+  width: number,
+  height: number,
+  x: number,
+  y: number,
+|};
+
+export type Offsets = {|
+  y: number,
+  x: number,
+|};
+
+export type PositioningStrategy = 'absolute' | 'fixed';
+
+export type StateRects = {|
+  reference: Rect,
+  popper: Rect,
+|};
+
+export type StateOffsets = {|
+  popper: Offsets,
+  arrow?: Offsets,
+|};
+
+type OffsetData = { [Placement]: Offsets };
+
+export type State = {|
+  elements: {|
+    reference: Element | VirtualElement,
+    popper: HTMLElement,
+    arrow?: HTMLElement,
+  |},
+  options: OptionsGeneric<any>,
+  placement: Placement,
+  strategy: PositioningStrategy,
+  orderedModifiers: Array<Modifier<any, any>>,
+  rects: StateRects,
+  scrollParents: {|
+    reference: Array<Element | Window | VisualViewport>,
+    popper: Array<Element | Window | VisualViewport>,
+  |},
+  styles: {|
+    [key: string]: $Shape<CSSStyleDeclaration>,
+  |},
+  attributes: {|
+    [key: string]: { [key: string]: string | boolean },
+  |},
+  modifiersData: {
+    arrow?: {
+      x?: number,
+      y?: number,
+      centerOffset: number,
+    },
+    hide?: {
+      isReferenceHidden: boolean,
+      hasPopperEscaped: boolean,
+      referenceClippingOffsets: SideObject,
+      popperEscapeOffsets: SideObject,
+    },
+    offset?: OffsetData,
+    preventOverflow?: Offsets,
+    popperOffsets?: Offsets,
+    [key: string]: any,
+  },
+  reset: boolean,
+|};
+
+type SetAction<S> = S | ((prev: S) => S);
+
+export type Instance = {|
+  state: State,
+  destroy: () => void,
+  forceUpdate: () => void,
+  update: () => Promise<$Shape<State>>,
+  setOptions: (
+    setOptionsAction: SetAction<$Shape<OptionsGeneric<any>>>
+  ) => Promise<$Shape<State>>,
+|};
+
+export type ModifierArguments<Options: Obj> = {
+  state: State,
+  instance: Instance,
+  options: $Shape<Options>,
+  name: string,
+};
+export type Modifier<Name, Options: Obj> = {|
+  name: Name,
+  enabled: boolean,
+  phase: ModifierPhases,
+  requires?: Array<string>,
+  requiresIfExists?: Array<string>,
+  fn: (ModifierArguments<Options>) => State | void,
+  effect?: (ModifierArguments<Options>) => (() => void) | void,
+  options?: $Shape<Options>,
+  data?: Obj,
+|};
+
+export type StrictModifiers =
+  | $Shape<OffsetModifier>
+  | $Shape<ApplyStylesModifier>
+  | $Shape<ArrowModifier>
+  | $Shape<HideModifier>
+  | $Shape<ComputeStylesModifier>
+  | $Shape<EventListenersModifier>
+  | $Shape<FlipModifier>
+  | $Shape<PreventOverflowModifier>
+  | $Shape<PopperOffsetsModifier>;
+
+export type EventListeners = {| scroll: boolean, resize: boolean |};
+
+export type Options = {|
+  placement: Placement,
+  modifiers: Array<$Shape<Modifier<any, any>>>,
+  strategy: PositioningStrategy,
+  onFirstUpdate?: ($Shape<State>) => void,
+|};
+
+export type OptionsGeneric<TModifier> = {|
+  placement: Placement,
+  modifiers: Array<TModifier>,
+  strategy: PositioningStrategy,
+  onFirstUpdate?: ($Shape<State>) => void,
+|};
+
+export type UpdateCallback = (State) => void;
+
+export type ClientRectObject = {|
+  x: number,
+  y: number,
+  top: number,
+  left: number,
+  right: number,
+  bottom: number,
+  width: number,
+  height: number,
+|};
+
+export type SideObject = {|
+  top: number,
+  left: number,
+  right: number,
+  bottom: number,
+|};
+
+export type Padding = number | $Shape<SideObject>;
+
+export type VirtualElement = {|
+  getBoundingClientRect: () => ClientRect | DOMRect,
+  contextElement?: Element,
+|};
diff --git a/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.d.ts b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ba1f7ae489cdd5418a2e02f36a3018201c5579c7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.d.ts
@@ -0,0 +1,12 @@
+import type { State, Padding } from "../types";
+import type { Placement, ComputedPlacement, Boundary, RootBoundary } from "../enums";
+declare type Options = {
+    placement: Placement;
+    padding: Padding;
+    boundary: Boundary;
+    rootBoundary: RootBoundary;
+    flipVariations: boolean;
+    allowedAutoPlacements?: Array<Placement>;
+};
+export default function computeAutoPlacement(state: Partial<State>, options?: Options): Array<ComputedPlacement>;
+export {};
diff --git a/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..307292dec02caec20eded31c04f7ca6b9f21b79c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js
@@ -0,0 +1,43 @@
+import getVariation from "./getVariation.js";
+import { variationPlacements, basePlacements, placements as allPlacements } from "../enums.js";
+import detectOverflow from "./detectOverflow.js";
+import getBasePlacement from "./getBasePlacement.js";
+export default function computeAutoPlacement(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      placement = _options.placement,
+      boundary = _options.boundary,
+      rootBoundary = _options.rootBoundary,
+      padding = _options.padding,
+      flipVariations = _options.flipVariations,
+      _options$allowedAutoP = _options.allowedAutoPlacements,
+      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;
+  var variation = getVariation(placement);
+  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+    return getVariation(placement) === variation;
+  }) : basePlacements;
+  var allowedPlacements = placements.filter(function (placement) {
+    return allowedAutoPlacements.indexOf(placement) >= 0;
+  });
+
+  if (allowedPlacements.length === 0) {
+    allowedPlacements = placements;
+  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+  var overflows = allowedPlacements.reduce(function (acc, placement) {
+    acc[placement] = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding
+    })[getBasePlacement(placement)];
+    return acc;
+  }, {});
+  return Object.keys(overflows).sort(function (a, b) {
+    return overflows[a] - overflows[b];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js.flow b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..2350541526f9508ecf786d81b401cfbef16ab4b8
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js.flow
@@ -0,0 +1,73 @@
+// @flow
+import type { State, Padding } from '../types';
+import type {
+  Placement,
+  ComputedPlacement,
+  Boundary,
+  RootBoundary,
+} from '../enums';
+import getVariation from './getVariation';
+import {
+  variationPlacements,
+  basePlacements,
+  placements as allPlacements,
+} from '../enums';
+import detectOverflow from './detectOverflow';
+import getBasePlacement from './getBasePlacement';
+
+type Options = {
+  placement: Placement,
+  padding: Padding,
+  boundary: Boundary,
+  rootBoundary: RootBoundary,
+  flipVariations: boolean,
+  allowedAutoPlacements?: Array<Placement>,
+};
+
+type OverflowsMap = { [ComputedPlacement]: number };
+
+export default function computeAutoPlacement(
+  state: $Shape<State>,
+  options: Options = {}
+): Array<ComputedPlacement> {
+  const {
+    placement,
+    boundary,
+    rootBoundary,
+    padding,
+    flipVariations,
+    allowedAutoPlacements = allPlacements,
+  } = options;
+
+  const variation = getVariation(placement);
+
+  const placements = variation
+    ? flipVariations
+      ? variationPlacements
+      : variationPlacements.filter(
+          (placement) => getVariation(placement) === variation
+        )
+    : basePlacements;
+
+  let allowedPlacements = placements.filter(
+    (placement) => allowedAutoPlacements.indexOf(placement) >= 0
+  );
+
+  if (allowedPlacements.length === 0) {
+    allowedPlacements = placements;
+  }
+
+  // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+  const overflows: OverflowsMap = allowedPlacements.reduce((acc, placement) => {
+    acc[placement] = detectOverflow(state, {
+      placement,
+      boundary,
+      rootBoundary,
+      padding,
+    })[getBasePlacement(placement)];
+
+    return acc;
+  }, {});
+
+  return Object.keys(overflows).sort((a, b) => overflows[a] - overflows[b]);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/computeOffsets.d.ts b/node_modules/@popperjs/core/lib/utils/computeOffsets.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf02a6841d45588e210db6388a74800e7e4c4fa3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeOffsets.d.ts
@@ -0,0 +1,8 @@
+import type { Rect, PositioningStrategy, Offsets, ClientRectObject } from "../types";
+import { Placement } from "../enums";
+export default function computeOffsets({ reference, element, placement }: {
+    reference: Rect | ClientRectObject;
+    element: Rect | ClientRectObject;
+    strategy: PositioningStrategy;
+    placement?: Placement;
+}): Offsets;
diff --git a/node_modules/@popperjs/core/lib/utils/computeOffsets.js b/node_modules/@popperjs/core/lib/utils/computeOffsets.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a8169016a5dc24066df5d9c52680b499e4c5a03
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeOffsets.js
@@ -0,0 +1,70 @@
+import getBasePlacement from "./getBasePlacement.js";
+import getVariation from "./getVariation.js";
+import getMainAxisFromPlacement from "./getMainAxisFromPlacement.js";
+import { top, right, bottom, left, start, end } from "../enums.js";
+export default function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+
+      default:
+    }
+  }
+
+  return offsets;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/computeOffsets.js.flow b/node_modules/@popperjs/core/lib/utils/computeOffsets.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..404b56a57333687e4fa83c78139c3289e5ed0dc7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/computeOffsets.js.flow
@@ -0,0 +1,82 @@
+// @flow
+import getBasePlacement from './getBasePlacement';
+import getVariation from './getVariation';
+import getMainAxisFromPlacement from './getMainAxisFromPlacement';
+import type {
+  Rect,
+  PositioningStrategy,
+  Offsets,
+  ClientRectObject,
+} from '../types';
+import { top, right, bottom, left, start, end, type Placement } from '../enums';
+
+export default function computeOffsets({
+  reference,
+  element,
+  placement,
+}: {
+  reference: Rect | ClientRectObject,
+  element: Rect | ClientRectObject,
+  strategy: PositioningStrategy,
+  placement?: Placement,
+}): Offsets {
+  const basePlacement = placement ? getBasePlacement(placement) : null;
+  const variation = placement ? getVariation(placement) : null;
+  const commonX = reference.x + reference.width / 2 - element.width / 2;
+  const commonY = reference.y + reference.height / 2 - element.height / 2;
+
+  let offsets;
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height,
+      };
+      break;
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height,
+      };
+      break;
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY,
+      };
+      break;
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY,
+      };
+      break;
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y,
+      };
+  }
+
+  const mainAxis = basePlacement
+    ? getMainAxisFromPlacement(basePlacement)
+    : null;
+
+  if (mainAxis != null) {
+    const len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] =
+          offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+      case end:
+        offsets[mainAxis] =
+          offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+      default:
+    }
+  }
+
+  return offsets;
+}
diff --git a/node_modules/@popperjs/core/lib/utils/debounce.d.ts b/node_modules/@popperjs/core/lib/utils/debounce.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e0b5d5ff38fdde6e01b631d7b5a7e662d4654f5a
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/debounce.d.ts
@@ -0,0 +1 @@
+export default function debounce<T>(fn: (...args: Array<any>) => any): () => Promise<T>;
diff --git a/node_modules/@popperjs/core/lib/utils/debounce.js b/node_modules/@popperjs/core/lib/utils/debounce.js
new file mode 100644
index 0000000000000000000000000000000000000000..15a78da6acae527e453bf244ebc122f5a0f2de52
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/debounce.js
@@ -0,0 +1,15 @@
+export default function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/debounce.js.flow b/node_modules/@popperjs/core/lib/utils/debounce.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ff0a5d9dee51ab05af4f12d8a56851892a683e57
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/debounce.js.flow
@@ -0,0 +1,17 @@
+// @flow
+
+export default function debounce<T>(fn: Function): () => Promise<T> {
+  let pending;
+  return () => {
+    if (!pending) {
+      pending = new Promise<T>(resolve => {
+        Promise.resolve().then(() => {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/utils/detectOverflow.d.ts b/node_modules/@popperjs/core/lib/utils/detectOverflow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..740c6c26b424b26ffe2ba71fdfa1809feeb05269
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/detectOverflow.d.ts
@@ -0,0 +1,12 @@
+import type { State, SideObject, Padding, PositioningStrategy } from "../types";
+import type { Placement, Boundary, RootBoundary, Context } from "../enums";
+export declare type Options = {
+    placement: Placement;
+    strategy: PositioningStrategy;
+    boundary: Boundary;
+    rootBoundary: RootBoundary;
+    elementContext: Context;
+    altBoundary: boolean;
+    padding: Padding;
+};
+export default function detectOverflow(state: State, options?: Partial<Options>): SideObject;
diff --git a/node_modules/@popperjs/core/lib/utils/detectOverflow.js b/node_modules/@popperjs/core/lib/utils/detectOverflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdc08a17e693ee41cd1aa6dbb10a4a47761b08eb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/detectOverflow.js
@@ -0,0 +1,65 @@
+import getClippingRect from "../dom-utils/getClippingRect.js";
+import getDocumentElement from "../dom-utils/getDocumentElement.js";
+import getBoundingClientRect from "../dom-utils/getBoundingClientRect.js";
+import computeOffsets from "./computeOffsets.js";
+import rectToClientRect from "./rectToClientRect.js";
+import { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from "../enums.js";
+import { isElement } from "../dom-utils/instanceOf.js";
+import mergePaddingObject from "./mergePaddingObject.js";
+import expandToHashMap from "./expandToHashMap.js"; // eslint-disable-next-line import/no-unused-modules
+
+export default function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/detectOverflow.js.flow b/node_modules/@popperjs/core/lib/utils/detectOverflow.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..af9bb885b414ba908e107d11ff01ba1897104124
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/detectOverflow.js.flow
@@ -0,0 +1,112 @@
+// @flow
+import type { State, SideObject, Padding, PositioningStrategy } from '../types';
+import type { Placement, Boundary, RootBoundary, Context } from '../enums';
+import getClippingRect from '../dom-utils/getClippingRect';
+import getDocumentElement from '../dom-utils/getDocumentElement';
+import getBoundingClientRect from '../dom-utils/getBoundingClientRect';
+import computeOffsets from './computeOffsets';
+import rectToClientRect from './rectToClientRect';
+import {
+  clippingParents,
+  reference,
+  popper,
+  bottom,
+  top,
+  right,
+  basePlacements,
+  viewport,
+} from '../enums';
+import { isElement } from '../dom-utils/instanceOf';
+import mergePaddingObject from './mergePaddingObject';
+import expandToHashMap from './expandToHashMap';
+
+// eslint-disable-next-line import/no-unused-modules
+export type Options = {
+  placement: Placement,
+  strategy: PositioningStrategy,
+  boundary: Boundary,
+  rootBoundary: RootBoundary,
+  elementContext: Context,
+  altBoundary: boolean,
+  padding: Padding,
+};
+
+export default function detectOverflow(
+  state: State,
+  options: $Shape<Options> = {}
+): SideObject {
+  const {
+    placement = state.placement,
+    strategy = state.strategy,
+    boundary = clippingParents,
+    rootBoundary = viewport,
+    elementContext = popper,
+    altBoundary = false,
+    padding = 0,
+  } = options;
+
+  const paddingObject = mergePaddingObject(
+    typeof padding !== 'number'
+      ? padding
+      : expandToHashMap(padding, basePlacements)
+  );
+
+  const altContext = elementContext === popper ? reference : popper;
+
+  const popperRect = state.rects.popper;
+  const element = state.elements[altBoundary ? altContext : elementContext];
+
+  const clippingClientRect = getClippingRect(
+    isElement(element)
+      ? element
+      : element.contextElement || getDocumentElement(state.elements.popper),
+    boundary,
+    rootBoundary,
+    strategy
+  );
+
+  const referenceClientRect = getBoundingClientRect(state.elements.reference);
+
+  const popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement,
+  });
+
+  const popperClientRect = rectToClientRect({
+    ...popperRect,
+    ...popperOffsets,
+  });
+
+  const elementClientRect =
+    elementContext === popper ? popperClientRect : referenceClientRect;
+
+  // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+  const overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom:
+      elementClientRect.bottom -
+      clippingClientRect.bottom +
+      paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right:
+      elementClientRect.right - clippingClientRect.right + paddingObject.right,
+  };
+
+  const offsetData = state.modifiersData.offset;
+
+  // Offsets can be applied only to the popper element
+  if (elementContext === popper && offsetData) {
+    const offset = offsetData[placement];
+
+    Object.keys(overflowOffsets).forEach((key) => {
+      const multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      const axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
diff --git a/node_modules/@popperjs/core/lib/utils/expandToHashMap.d.ts b/node_modules/@popperjs/core/lib/utils/expandToHashMap.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b0fb406bf74a92c3a8e03aae1806d04bf3f8c9a9
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/expandToHashMap.d.ts
@@ -0,0 +1,3 @@
+export default function expandToHashMap<T extends number | string | boolean, K extends string>(value: T, keys: Array<K>): {
+    [key: string]: T;
+};
diff --git a/node_modules/@popperjs/core/lib/utils/expandToHashMap.js b/node_modules/@popperjs/core/lib/utils/expandToHashMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..e428d5843c3216a350cfbfe84146f478c257096a
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/expandToHashMap.js
@@ -0,0 +1,6 @@
+export default function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/expandToHashMap.js.flow b/node_modules/@popperjs/core/lib/utils/expandToHashMap.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..bfcc9680ce5169a35086a248ad55fc7d710d8036
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/expandToHashMap.js.flow
@@ -0,0 +1,11 @@
+// @flow
+
+export default function expandToHashMap<
+  T: number | string | boolean,
+  K: string
+>(value: T, keys: Array<K>): { [key: string]: T } {
+  return keys.reduce((hashMap, key) => {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getAltAxis.d.ts b/node_modules/@popperjs/core/lib/utils/getAltAxis.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dc456147eb4666e6f0db072c83a23e33841561c2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltAxis.d.ts
@@ -0,0 +1 @@
+export default function getAltAxis(axis: "x" | "y"): "x" | "y";
diff --git a/node_modules/@popperjs/core/lib/utils/getAltAxis.js b/node_modules/@popperjs/core/lib/utils/getAltAxis.js
new file mode 100644
index 0000000000000000000000000000000000000000..d834474b26695166ddccc1c389dfe83eb2349e99
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltAxis.js
@@ -0,0 +1,3 @@
+export default function getAltAxis(axis) {
+  return axis === 'x' ? 'y' : 'x';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getAltAxis.js.flow b/node_modules/@popperjs/core/lib/utils/getAltAxis.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..7835e0376ebfa975b8024384db6ef3b371e5bfce
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltAxis.js.flow
@@ -0,0 +1,5 @@
+// @flow
+
+export default function getAltAxis(axis: 'x' | 'y'): 'x' | 'y' {
+  return axis === 'x' ? 'y' : 'x';
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getAltLen.d.ts b/node_modules/@popperjs/core/lib/utils/getAltLen.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..61b521193b067f48297d318cca641497a0ed2e5d
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltLen.d.ts
@@ -0,0 +1 @@
+export default function getAltLen(len: "width" | "height"): "width" | "height";
diff --git a/node_modules/@popperjs/core/lib/utils/getAltLen.js b/node_modules/@popperjs/core/lib/utils/getAltLen.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb68d1975093ba2535956cd4f5e9b047e8575df2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltLen.js
@@ -0,0 +1,3 @@
+export default function getAltLen(len) {
+  return len === 'width' ? 'height' : 'width';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getAltLen.js.flow b/node_modules/@popperjs/core/lib/utils/getAltLen.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..ad484daa5a3df366e58f68cba9b2e48b1c649edb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getAltLen.js.flow
@@ -0,0 +1,5 @@
+// @flow
+
+export default function getAltLen(len: 'width' | 'height'): 'width' | 'height' {
+  return len === 'width' ? 'height' : 'width';
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getBasePlacement.d.ts b/node_modules/@popperjs/core/lib/utils/getBasePlacement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..533ed0ee42abdcdc4201db9e1da8f4e688ff8eac
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getBasePlacement.d.ts
@@ -0,0 +1,2 @@
+import { BasePlacement, Placement, auto } from "../enums";
+export default function getBasePlacement(placement: Placement | typeof auto): BasePlacement;
diff --git a/node_modules/@popperjs/core/lib/utils/getBasePlacement.js b/node_modules/@popperjs/core/lib/utils/getBasePlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eebf96b3a81d49ce6d7eeec7deb84ed085f3adb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getBasePlacement.js
@@ -0,0 +1,4 @@
+import { auto } from "../enums.js";
+export default function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getBasePlacement.js.flow b/node_modules/@popperjs/core/lib/utils/getBasePlacement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..56916a15351329a50e263875396ee65990ac0bd2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getBasePlacement.js.flow
@@ -0,0 +1,8 @@
+// @flow
+import { type BasePlacement, type Placement, auto } from '../enums';
+
+export default function getBasePlacement(
+  placement: Placement | typeof auto
+): BasePlacement {
+  return (placement.split('-')[0]: any);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getFreshSideObject.d.ts b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e820ffdca2159bbf8873dacf47e0c8d09dfeb8dc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.d.ts
@@ -0,0 +1,2 @@
+import type { SideObject } from "../types";
+export default function getFreshSideObject(): SideObject;
diff --git a/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..fcec47ec9061719b397aa97eac6ac4412fb73dd2
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js
@@ -0,0 +1,8 @@
+export default function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js.flow b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..1b57a5bf89ccbe2df1b7117ca63b0f01d61f5b67
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js.flow
@@ -0,0 +1,11 @@
+// @flow
+import type { SideObject } from '../types';
+
+export default function getFreshSideObject(): SideObject {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.d.ts b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0fda65c4ffd0198826f9ef3936985b867497a2cc
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.d.ts
@@ -0,0 +1,2 @@
+import type { Placement } from "../enums";
+export default function getMainAxisFromPlacement(placement: Placement): "x" | "y";
diff --git a/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe186b31122c8433b9907810c13536eeb7ad79b7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js
@@ -0,0 +1,3 @@
+export default function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js.flow b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..93fa806c6569265c60749d97587b14d011c6f488
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js.flow
@@ -0,0 +1,8 @@
+// @flow
+import type { Placement } from '../enums';
+
+export default function getMainAxisFromPlacement(
+  placement: Placement
+): 'x' | 'y' {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositePlacement.d.ts b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b02a9c09c54a488752af57ec37285733ea18643c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.d.ts
@@ -0,0 +1,2 @@
+import type { Placement } from "../enums";
+export default function getOppositePlacement(placement: Placement): Placement;
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..180ec6e7a8ee5b8f5a49799cd4de14157df9b14c
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js
@@ -0,0 +1,11 @@
+var hash = {
+  left: 'right',
+  right: 'left',
+  bottom: 'top',
+  top: 'bottom'
+};
+export default function getOppositePlacement(placement) {
+  return placement.replace(/left|right|bottom|top/g, function (matched) {
+    return hash[matched];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js.flow b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8decc5765009facf78e0f7c7257e5aeb02bab88d
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js.flow
@@ -0,0 +1,11 @@
+// @flow
+import type { Placement } from '../enums';
+
+const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };
+
+export default function getOppositePlacement(placement: Placement): Placement {
+  return (placement.replace(
+    /left|right|bottom|top/g,
+    matched => hash[matched]
+  ): any);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.d.ts b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c37be911db87b1f6b5cdf6892ef12f194408e1b8
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.d.ts
@@ -0,0 +1,2 @@
+import type { Placement } from "../enums";
+export default function getOppositeVariationPlacement(placement: Placement): Placement;
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js
new file mode 100644
index 0000000000000000000000000000000000000000..379d0718a54b550ff06b4d9cee802299979cf9e9
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js
@@ -0,0 +1,9 @@
+var hash = {
+  start: 'end',
+  end: 'start'
+};
+export default function getOppositeVariationPlacement(placement) {
+  return placement.replace(/start|end/g, function (matched) {
+    return hash[matched];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js.flow b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..2887948de2e2631596d1ddf9c7db5087378d4205
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js.flow
@@ -0,0 +1,10 @@
+// @flow
+import type { Placement } from '../enums';
+
+const hash = { start: 'end', end: 'start' };
+
+export default function getOppositeVariationPlacement(
+  placement: Placement
+): Placement {
+  return (placement.replace(/start|end/g, matched => hash[matched]): any);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/getVariation.d.ts b/node_modules/@popperjs/core/lib/utils/getVariation.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ae830e9e649078643e2e011bc7ffdf9cc26fd08b
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getVariation.d.ts
@@ -0,0 +1,2 @@
+import { Variation, Placement } from "../enums";
+export default function getVariation(placement: Placement): Variation | null | undefined;
diff --git a/node_modules/@popperjs/core/lib/utils/getVariation.js b/node_modules/@popperjs/core/lib/utils/getVariation.js
new file mode 100644
index 0000000000000000000000000000000000000000..c760df2a12db4a9f83b461f8214efe9fb2ce2b78
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getVariation.js
@@ -0,0 +1,3 @@
+export default function getVariation(placement) {
+  return placement.split('-')[1];
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/getVariation.js.flow b/node_modules/@popperjs/core/lib/utils/getVariation.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..d0ead8a2885838e4889b0397c9a448c8f78c3136
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/getVariation.js.flow
@@ -0,0 +1,6 @@
+// @flow
+import { type Variation, type Placement } from '../enums';
+
+export default function getVariation(placement: Placement): ?Variation {
+  return (placement.split('-')[1]: any);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/math.d.ts b/node_modules/@popperjs/core/lib/utils/math.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2fbf4758f1f98370f181c21207517835a905d40a
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/math.d.ts
@@ -0,0 +1,3 @@
+export declare const max: (...values: number[]) => number;
+export declare const min: (...values: number[]) => number;
+export declare const round: (x: number) => number;
diff --git a/node_modules/@popperjs/core/lib/utils/math.js b/node_modules/@popperjs/core/lib/utils/math.js
new file mode 100644
index 0000000000000000000000000000000000000000..d92a000ea610b58d0119498313c51bc81aa1a674
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/math.js
@@ -0,0 +1,3 @@
+export var max = Math.max;
+export var min = Math.min;
+export var round = Math.round;
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/math.js.flow b/node_modules/@popperjs/core/lib/utils/math.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..80f0e440a2107d1f2effd41be1b36423de7999ba
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/math.js.flow
@@ -0,0 +1,4 @@
+// @flow
+export const max = Math.max;
+export const min = Math.min;
+export const round = Math.round;
diff --git a/node_modules/@popperjs/core/lib/utils/mergeByName.d.ts b/node_modules/@popperjs/core/lib/utils/mergeByName.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3ca484d1b9088ebc1f42ef8c3acf1088be449b34
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergeByName.d.ts
@@ -0,0 +1,2 @@
+import type { Modifier } from "../types";
+export default function mergeByName(modifiers: Array<Partial<Modifier<any, any>>>): Array<Partial<Modifier<any, any>>>;
diff --git a/node_modules/@popperjs/core/lib/utils/mergeByName.js b/node_modules/@popperjs/core/lib/utils/mergeByName.js
new file mode 100644
index 0000000000000000000000000000000000000000..35f508a5bc014192be18f19ebc25582fc340168d
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergeByName.js
@@ -0,0 +1,14 @@
+export default function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/mergeByName.js.flow b/node_modules/@popperjs/core/lib/utils/mergeByName.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..2d0377f2a9c174295eed5b5770ff8514e9c25ffb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergeByName.js.flow
@@ -0,0 +1,22 @@
+// @flow
+import type { Modifier } from '../types';
+
+export default function mergeByName(
+  modifiers: Array<$Shape<Modifier<any, any>>>
+): Array<$Shape<Modifier<any, any>>> {
+  const merged = modifiers.reduce((merged, current) => {
+    const existing = merged[current.name];
+    merged[current.name] = existing
+      ? {
+          ...existing,
+          ...current,
+          options: { ...existing.options, ...current.options },
+          data: { ...existing.data, ...current.data },
+        }
+      : current;
+    return merged;
+  }, {});
+
+  // IE11 does not support Object.values
+  return Object.keys(merged).map(key => merged[key]);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/mergePaddingObject.d.ts b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68f87bf99b2fb8339187ffbe5b2f69a45954e851
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.d.ts
@@ -0,0 +1,2 @@
+import type { SideObject } from "../types";
+export default function mergePaddingObject(paddingObject: Partial<SideObject>): SideObject;
diff --git a/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js
new file mode 100644
index 0000000000000000000000000000000000000000..26af6c56b8571fd948b10b477ea994462a02af75
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js
@@ -0,0 +1,4 @@
+import getFreshSideObject from "./getFreshSideObject.js";
+export default function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js.flow b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..a2db66194d7cc919b74adf7bcd4d01df38e669ed
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js.flow
@@ -0,0 +1,12 @@
+// @flow
+import type { SideObject } from '../types';
+import getFreshSideObject from './getFreshSideObject';
+
+export default function mergePaddingObject(
+  paddingObject: $Shape<SideObject>
+): SideObject {
+  return {
+    ...getFreshSideObject(),
+    ...paddingObject,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/utils/orderModifiers.d.ts b/node_modules/@popperjs/core/lib/utils/orderModifiers.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aea99d7f08b4e868ced8b866ceed33505fcfd3d9
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/orderModifiers.d.ts
@@ -0,0 +1,2 @@
+import type { Modifier } from "../types";
+export default function orderModifiers(modifiers: Array<Modifier<any, any>>): Array<Modifier<any, any>>;
diff --git a/node_modules/@popperjs/core/lib/utils/orderModifiers.js b/node_modules/@popperjs/core/lib/utils/orderModifiers.js
new file mode 100644
index 0000000000000000000000000000000000000000..82572bcf3646ccb7d88ceef0ebad977d76ecc8fe
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/orderModifiers.js
@@ -0,0 +1,44 @@
+import { modifierPhases } from "../enums.js"; // source: https://stackoverflow.com/questions/49875255
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+export default function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/orderModifiers.js.flow b/node_modules/@popperjs/core/lib/utils/orderModifiers.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..8094d6ed438bf064cc830e679774de057cdcf1f7
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/orderModifiers.js.flow
@@ -0,0 +1,59 @@
+// @flow
+import type { Modifier } from '../types';
+import { modifierPhases } from '../enums';
+
+// source: https://stackoverflow.com/questions/49875255
+function order(modifiers) {
+  const map = new Map();
+  const visited = new Set();
+  const result = [];
+
+  modifiers.forEach(modifier => {
+    map.set(modifier.name, modifier);
+  });
+
+  // On visiting object, check for its dependencies and visit them recursively
+  function sort(modifier: Modifier<any, any>) {
+    visited.add(modifier.name);
+
+    const requires = [
+      ...(modifier.requires || []),
+      ...(modifier.requiresIfExists || []),
+    ];
+
+    requires.forEach(dep => {
+      if (!visited.has(dep)) {
+        const depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+
+    result.push(modifier);
+  }
+
+  modifiers.forEach(modifier => {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+
+  return result;
+}
+
+export default function orderModifiers(
+  modifiers: Array<Modifier<any, any>>
+): Array<Modifier<any, any>> {
+  // order based on dependencies
+  const orderedModifiers = order(modifiers);
+
+  // order based on phase
+  return modifierPhases.reduce((acc, phase) => {
+    return acc.concat(
+      orderedModifiers.filter(modifier => modifier.phase === phase)
+    );
+  }, []);
+}
diff --git a/node_modules/@popperjs/core/lib/utils/rectToClientRect.d.ts b/node_modules/@popperjs/core/lib/utils/rectToClientRect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5489294ce48c08e9113edfd755dc716ab47dc902
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/rectToClientRect.d.ts
@@ -0,0 +1,2 @@
+import type { Rect, ClientRectObject } from "../types";
+export default function rectToClientRect(rect: Rect): ClientRectObject;
diff --git a/node_modules/@popperjs/core/lib/utils/rectToClientRect.js b/node_modules/@popperjs/core/lib/utils/rectToClientRect.js
new file mode 100644
index 0000000000000000000000000000000000000000..5685476199350782ff7a4cad6993c5febea04f53
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/rectToClientRect.js
@@ -0,0 +1,8 @@
+export default function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/rectToClientRect.js.flow b/node_modules/@popperjs/core/lib/utils/rectToClientRect.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..4e05a51ec37e91586c38168a0cb060d0801d7f52
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/rectToClientRect.js.flow
@@ -0,0 +1,12 @@
+// @flow
+import type { Rect, ClientRectObject } from '../types';
+
+export default function rectToClientRect(rect: Rect): ClientRectObject {
+  return {
+    ...rect,
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height,
+  };
+}
diff --git a/node_modules/@popperjs/core/lib/utils/uniqueBy.d.ts b/node_modules/@popperjs/core/lib/utils/uniqueBy.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2549f7deccb44fd6b1f059ec56ffa7036e9b4504
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/uniqueBy.d.ts
@@ -0,0 +1 @@
+export default function uniqueBy<T>(arr: Array<T>, fn: (arg0: T) => any): Array<T>;
diff --git a/node_modules/@popperjs/core/lib/utils/uniqueBy.js b/node_modules/@popperjs/core/lib/utils/uniqueBy.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e083f3e68a88223027ed01a20c9cf99bc167a9b
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/uniqueBy.js
@@ -0,0 +1,11 @@
+export default function uniqueBy(arr, fn) {
+  var identifiers = new Set();
+  return arr.filter(function (item) {
+    var identifier = fn(item);
+
+    if (!identifiers.has(identifier)) {
+      identifiers.add(identifier);
+      return true;
+    }
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/uniqueBy.js.flow b/node_modules/@popperjs/core/lib/utils/uniqueBy.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..0f79ae9c1ab6d5aa4cdda31e77401f8514604bcb
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/uniqueBy.js.flow
@@ -0,0 +1,14 @@
+// @flow
+
+export default function uniqueBy<T>(arr: Array<T>, fn: T => any): Array<T> {
+  const identifiers = new Set();
+
+  return arr.filter(item => {
+    const identifier = fn(item);
+
+    if (!identifiers.has(identifier)) {
+      identifiers.add(identifier);
+      return true;
+    }
+  });
+}
diff --git a/node_modules/@popperjs/core/lib/utils/userAgent.d.ts b/node_modules/@popperjs/core/lib/utils/userAgent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f5a41f8449819c415c6d4c51bed3bd29a1761142
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/userAgent.d.ts
@@ -0,0 +1 @@
+export default function getUAString(): string;
diff --git a/node_modules/@popperjs/core/lib/utils/userAgent.js b/node_modules/@popperjs/core/lib/utils/userAgent.js
new file mode 100644
index 0000000000000000000000000000000000000000..9652af724d8249a33e07d117068e1500187e5c75
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/userAgent.js
@@ -0,0 +1,11 @@
+export default function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/userAgent.js.flow b/node_modules/@popperjs/core/lib/utils/userAgent.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..09a9e2ffc87bfd77b27b0517527861f4d33f3fa3
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/userAgent.js.flow
@@ -0,0 +1,20 @@
+// @flow
+type Navigator = Navigator & { userAgentData?: NavigatorUAData };
+
+interface NavigatorUAData {
+  brands: Array<{ brand: string, version: string }>;
+  mobile: boolean;
+  platform: string;
+}
+
+export default function getUAString(): string {
+  const uaData = (navigator: Navigator).userAgentData;
+
+  if (uaData?.brands && Array.isArray(uaData.brands)) {
+    return uaData.brands
+      .map((item) => `${item.brand}/${item.version}`)
+      .join(' ');
+  }
+
+  return navigator.userAgent;
+}
diff --git a/node_modules/@popperjs/core/lib/utils/within.d.ts b/node_modules/@popperjs/core/lib/utils/within.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..46be6a45495fb05044ab59b7084ce4b141f6be62
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/within.d.ts
@@ -0,0 +1,2 @@
+export declare function within(min: number, value: number, max: number): number;
+export declare function withinMaxClamp(min: number, value: number, max: number): number;
diff --git a/node_modules/@popperjs/core/lib/utils/within.js b/node_modules/@popperjs/core/lib/utils/within.js
new file mode 100644
index 0000000000000000000000000000000000000000..da7bf7635ddf154003a9278a9af88bfaf2ef8563
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/within.js
@@ -0,0 +1,8 @@
+import { max as mathMax, min as mathMin } from "./math.js";
+export function within(min, value, max) {
+  return mathMax(min, mathMin(value, max));
+}
+export function withinMaxClamp(min, value, max) {
+  var v = within(min, value, max);
+  return v > max ? max : v;
+}
\ No newline at end of file
diff --git a/node_modules/@popperjs/core/lib/utils/within.js.flow b/node_modules/@popperjs/core/lib/utils/within.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..bc946f2f1de4da5284897202a6c0f9aab542e03f
--- /dev/null
+++ b/node_modules/@popperjs/core/lib/utils/within.js.flow
@@ -0,0 +1,11 @@
+// @flow
+import { max as mathMax, min as mathMin } from './math';
+
+export function within(min: number, value: number, max: number): number {
+  return mathMax(min, mathMin(value, max));
+}
+
+export function withinMaxClamp(min: number, value: number, max: number) {
+  const v = within(min, value, max);
+  return v > max ? max : v;
+}
diff --git a/node_modules/@popperjs/core/package.json b/node_modules/@popperjs/core/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9cebbbd652e6f03676131c5cc014463a77a0e895
--- /dev/null
+++ b/node_modules/@popperjs/core/package.json
@@ -0,0 +1,155 @@
+{
+  "_from": "@popperjs/core@^2.11.6",
+  "_id": "@popperjs/core@2.11.8",
+  "_inBundle": false,
+  "_integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
+  "_location": "/@popperjs/core",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@popperjs/core@^2.11.6",
+    "name": "@popperjs/core",
+    "escapedName": "@popperjs%2fcore",
+    "scope": "@popperjs",
+    "rawSpec": "^2.11.6",
+    "saveSpec": null,
+    "fetchSpec": "^2.11.6"
+  },
+  "_requiredBy": [
+    "/@restart/ui"
+  ],
+  "_resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+  "_shasum": "6b79032e760a0899cd4204710beede972a3a185f",
+  "_spec": "@popperjs/core@^2.11.6",
+  "_where": "/home/ethan2.clay/flask/node_modules/@restart/ui",
+  "author": {
+    "name": "Federico Zivolo",
+    "email": "federico.zivolo@gmail.com"
+  },
+  "babel": {
+    "extends": "./.config/babel.config"
+  },
+  "bugs": {
+    "url": "https://github.com/popperjs/popper-core/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Tooltip and Popover Positioning Engine",
+  "devDependencies": {
+    "@ampproject/rollup-plugin-closure-compiler": "^0.26.0",
+    "@atomico/rollup-plugin-sizes": "^1.1.4",
+    "@babel/cli": "^7.12.17",
+    "@babel/core": "^7.12.17",
+    "@babel/plugin-transform-flow-strip-types": "^7.12.13",
+    "@babel/plugin-transform-runtime": "^7.12.17",
+    "@babel/preset-env": "^7.12.17",
+    "@fezvrasta/tsc-silent": "^1.3.0",
+    "@khanacademy/flow-to-ts": "^0.3.0",
+    "@rollup/plugin-babel": "^5.3.0",
+    "@rollup/plugin-replace": "^2.3.4",
+    "babel-eslint": "^10.0.3",
+    "babel-jest": "^26.6.3",
+    "babel-plugin-add-import-extension": "^1.4.4",
+    "babel-plugin-annotate-pure-calls": "^0.4.0",
+    "babel-plugin-dev-expression": "^0.2.2",
+    "babel-plugin-inline-replace-variables": "^1.3.1",
+    "babel-plugin-transform-inline-environment-variables": "^0.4.3",
+    "concurrently": "^5.3.0",
+    "dotenv": "^8.2.0",
+    "eslint": "^7.20.0",
+    "eslint-plugin-flowtype": "^5.2.2",
+    "eslint-plugin-import": "^2.22.1",
+    "eslint-plugin-unused-imports": "^1.1.0",
+    "flow-bin": "^0.139.0",
+    "flow-copy-source": "^2.0.9",
+    "get-port-cli": "^2.0.0",
+    "husky": "^5.0.9",
+    "jest": "^26.6.3",
+    "jest-environment-jsdom-sixteen": "^1.0.3",
+    "jest-environment-puppeteer": "^4.4.0",
+    "jest-image-snapshot": "^4.3.0",
+    "jest-puppeteer": "^4.4.0",
+    "pinst": "^2.1.4",
+    "poster": "^0.0.9",
+    "prettier": "^2.2.1",
+    "pretty-quick": "^3.1.0",
+    "puppeteer": "^10.4.0",
+    "replace-in-files-cli": "^1.0.0",
+    "rollup": "^2.39.0",
+    "rollup-plugin-flow-entry": "^0.3.3",
+    "rollup-plugin-license": "^2.2.0",
+    "rollup-plugin-terser": "^7.0.2",
+    "rollup-plugin-visualizer": "^4.2.0",
+    "serve": "^11.3.2",
+    "typescript": "^4.1.5"
+  },
+  "eslintConfig": {
+    "extends": "./.config/eslint.config"
+  },
+  "files": [
+    "index.d.ts",
+    "/dist",
+    "/lib"
+  ],
+  "funding": {
+    "type": "opencollective",
+    "url": "https://opencollective.com/popperjs"
+  },
+  "homepage": "https://github.com/popperjs/popper-core#readme",
+  "husky": {
+    "hooks": {
+      "pre-commit": "pretty-quick --staged"
+    }
+  },
+  "jest": {
+    "preset": "./.config/jest.config"
+  },
+  "keywords": [
+    "tooltip",
+    "popover",
+    "dropdown",
+    "popup",
+    "popper",
+    "positioning engine"
+  ],
+  "license": "MIT",
+  "main": "dist/cjs/popper.js",
+  "main:umd": "dist/umd/popper.js",
+  "module": "lib/index.js",
+  "name": "@popperjs/core",
+  "prettier": {
+    "semi": true,
+    "trailingComma": "es5",
+    "singleQuote": true,
+    "proseWrap": "always"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/popperjs/popper-core.git"
+  },
+  "scripts": {
+    "build": "yarn clean && yarn build:es && yarn build:esbrowser && yarn build:bundles && yarn build:flow && yarn build:typescript",
+    "build:bundles": "rollup -c .config/rollup.config.js",
+    "build:dev": "NODE_ENV=dev babel src -d tests/visual/dist",
+    "build:es": "babel src -d lib --ignore '**/*.test.js','**/__mocks__'",
+    "build:esbrowser": "BROWSER_COMPAT=true yarn build:es -d dist/esm",
+    "build:flow": "flow-copy-source --ignore \"**/*.test.js\" src lib && replace-in-files --string=__DEV__ --replacement=false 'lib/**/*.flow'",
+    "build:typescript": "rimraf dist/typescript; flow-to-ts \"src/**/*.js\" --write --inline-utility-types; tsc-silent --project .config/tsconfig.json --createSourceFile .config/createSourceFile.js --suppress @; rimraf \"src/**/*.ts\"",
+    "clean": "rimraf lib && rimraf dist && rimraf test/visual/dist",
+    "dev": "NODE_ENV=dev concurrently 'yarn serve' 'yarn build:dev --watch'",
+    "postpublish": "pinst --enable",
+    "prepare": "husky install .config/husky",
+    "prepublishOnly": "yarn build && pinst --disable",
+    "serve": "serve -l ${DEV_PORT:-5000} tests/visual",
+    "test": "yarn test:unit && yarn test:functional",
+    "test:eslint": "eslint .",
+    "test:flow": "flow",
+    "test:functional": "DEV_PORT=`get-port` jest tests/functional",
+    "test:typescript": "tsc --project tests/typescript/tsconfig.json",
+    "test:unit": "jest --coverage src"
+  },
+  "sideEffects": false,
+  "unpkg": "dist/umd/popper.min.js",
+  "version": "2.11.8"
+}
diff --git a/node_modules/@react-aria/ssr/README.md b/node_modules/@react-aria/ssr/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..13f4ef1df14d2f9340fa104df84cefc4dada72ba
--- /dev/null
+++ b/node_modules/@react-aria/ssr/README.md
@@ -0,0 +1,3 @@
+# @react-aria/ssr
+
+This package is part of [react-spectrum](https://github.com/adobe/react-spectrum). See the repo for more details.
diff --git a/node_modules/@react-aria/ssr/dist/SSRProvider.main.js b/node_modules/@react-aria/ssr/dist/SSRProvider.main.js
new file mode 100644
index 0000000000000000000000000000000000000000..f307e6cef2ef842c2b51122271ad32206ec26648
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/SSRProvider.main.js
@@ -0,0 +1,155 @@
+var $14Xyt$react = require("react");
+
+
+function $parcel$interopDefault(a) {
+  return a && a.__esModule ? a.default : a;
+}
+
+function $parcel$export(e, n, v, s) {
+  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
+}
+
+$parcel$export(module.exports, "SSRProvider", () => $97d95f6660b1bb14$export$9f8ac96af4b1b2ae);
+$parcel$export(module.exports, "useIsSSR", () => $97d95f6660b1bb14$export$535bd6ca7f90a273);
+$parcel$export(module.exports, "useSSRSafeId", () => $97d95f6660b1bb14$export$619500959fc48b26);
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is
+// guarded by a check that it only runs on the client side.
+// eslint-disable-next-line rulesdir/useLayoutEffectRule
+
+// Default context value to use in case there is no SSRProvider. This is fine for
+// client-only apps. In order to support multiple copies of React Aria potentially
+// being on the page at once, the prefix is set to a random number. SSRProvider
+// will reset this to zero for consistency between server and client, so in the
+// SSR case multiple copies of React Aria is not supported.
+const $97d95f6660b1bb14$var$defaultContext = {
+    prefix: String(Math.round(Math.random() * 10000000000)),
+    current: 0
+};
+const $97d95f6660b1bb14$var$SSRContext = /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createContext($97d95f6660b1bb14$var$defaultContext);
+const $97d95f6660b1bb14$var$IsSSRContext = /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createContext(false);
+// This is only used in React < 18.
+function $97d95f6660b1bb14$var$LegacySSRProvider(props) {
+    let cur = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext);
+    let counter = $97d95f6660b1bb14$var$useCounter(cur === $97d95f6660b1bb14$var$defaultContext);
+    let [isSSR, setIsSSR] = (0, $14Xyt$react.useState)(true);
+    let value = (0, $14Xyt$react.useMemo)(()=>({
+            // If this is the first SSRProvider, start with an empty string prefix, otherwise
+            // append and increment the counter.
+            prefix: cur === $97d95f6660b1bb14$var$defaultContext ? '' : `${cur.prefix}-${counter}`,
+            current: 0
+        }), [
+        cur,
+        counter
+    ]);
+    // If on the client, and the component was initially server rendered,
+    // then schedule a layout effect to update the component after hydration.
+    if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe
+    // because the condition never changes after mounting.
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    (0, $14Xyt$react.useLayoutEffect)(()=>{
+        setIsSSR(false);
+    }, []);
+    return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$SSRContext.Provider, {
+        value: value
+    }, /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$IsSSRContext.Provider, {
+        value: isSSR
+    }, props.children));
+}
+let $97d95f6660b1bb14$var$warnedAboutSSRProvider = false;
+function $97d95f6660b1bb14$export$9f8ac96af4b1b2ae(props) {
+    if (typeof (0, ($parcel$interopDefault($14Xyt$react)))['useId'] === 'function') {
+        if (process.env.NODE_ENV !== 'test' && !$97d95f6660b1bb14$var$warnedAboutSSRProvider) {
+            console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');
+            $97d95f6660b1bb14$var$warnedAboutSSRProvider = true;
+        }
+        return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement((0, ($parcel$interopDefault($14Xyt$react))).Fragment, null, props.children);
+    }
+    return /*#__PURE__*/ (0, ($parcel$interopDefault($14Xyt$react))).createElement($97d95f6660b1bb14$var$LegacySSRProvider, props);
+}
+let $97d95f6660b1bb14$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
+let $97d95f6660b1bb14$var$componentIds = new WeakMap();
+function $97d95f6660b1bb14$var$useCounter(isDisabled = false) {
+    let ctx = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext);
+    let ref = (0, $14Xyt$react.useRef)(null);
+    // eslint-disable-next-line rulesdir/pure-render
+    if (ref.current === null && !isDisabled) {
+        var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+        // In strict mode, React renders components twice, and the ref will be reset to null on the second render.
+        // This means our id counter will be incremented twice instead of once. This is a problem because on the
+        // server, components are only rendered once and so ids generated on the server won't match the client.
+        // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this
+        // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.
+        // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.
+        // To ensure that we only increment the global counter once, we store the starting id for this component in
+        // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.
+        // Since React runs the second render immediately after the first, this is safe.
+        // @ts-ignore
+        let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, ($parcel$interopDefault($14Xyt$react))).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;
+        if (currentOwner) {
+            let prevComponentValue = $97d95f6660b1bb14$var$componentIds.get(currentOwner);
+            if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.
+            $97d95f6660b1bb14$var$componentIds.set(currentOwner, {
+                id: ctx.current,
+                state: currentOwner.memoizedState
+            });
+            else if (currentOwner.memoizedState !== prevComponentValue.state) {
+                // On the second render, the memoizedState gets reset by React.
+                // Reset the counter, and remove from the weak map so we don't
+                // do this for subsequent useId calls.
+                ctx.current = prevComponentValue.id;
+                $97d95f6660b1bb14$var$componentIds.delete(currentOwner);
+            }
+        }
+        // eslint-disable-next-line rulesdir/pure-render
+        ref.current = ++ctx.current;
+    }
+    // eslint-disable-next-line rulesdir/pure-render
+    return ref.current;
+}
+function $97d95f6660b1bb14$var$useLegacySSRSafeId(defaultId) {
+    let ctx = (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$SSRContext);
+    // If we are rendering in a non-DOM environment, and there's no SSRProvider,
+    // provide a warning to hint to the developer to add one.
+    if (ctx === $97d95f6660b1bb14$var$defaultContext && !$97d95f6660b1bb14$var$canUseDOM) console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');
+    let counter = $97d95f6660b1bb14$var$useCounter(!!defaultId);
+    let prefix = ctx === $97d95f6660b1bb14$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;
+    return defaultId || `${prefix}-${counter}`;
+}
+function $97d95f6660b1bb14$var$useModernSSRSafeId(defaultId) {
+    // @ts-ignore
+    let id = (0, ($parcel$interopDefault($14Xyt$react))).useId();
+    let [didSSR] = (0, $14Xyt$react.useState)($97d95f6660b1bb14$export$535bd6ca7f90a273());
+    let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$97d95f6660b1bb14$var$defaultContext.prefix}`;
+    return defaultId || `${prefix}-${id}`;
+}
+const $97d95f6660b1bb14$export$619500959fc48b26 = typeof (0, ($parcel$interopDefault($14Xyt$react)))['useId'] === 'function' ? $97d95f6660b1bb14$var$useModernSSRSafeId : $97d95f6660b1bb14$var$useLegacySSRSafeId;
+function $97d95f6660b1bb14$var$getSnapshot() {
+    return false;
+}
+function $97d95f6660b1bb14$var$getServerSnapshot() {
+    return true;
+}
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+function $97d95f6660b1bb14$var$subscribe(onStoreChange) {
+    // noop
+    return ()=>{};
+}
+function $97d95f6660b1bb14$export$535bd6ca7f90a273() {
+    // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.
+    if (typeof (0, ($parcel$interopDefault($14Xyt$react)))['useSyncExternalStore'] === 'function') return (0, ($parcel$interopDefault($14Xyt$react)))['useSyncExternalStore']($97d95f6660b1bb14$var$subscribe, $97d95f6660b1bb14$var$getSnapshot, $97d95f6660b1bb14$var$getServerSnapshot);
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    return (0, $14Xyt$react.useContext)($97d95f6660b1bb14$var$IsSSRContext);
+}
+
+
+//# sourceMappingURL=SSRProvider.main.js.map
diff --git a/node_modules/@react-aria/ssr/dist/SSRProvider.main.js.map b/node_modules/@react-aria/ssr/dist/SSRProvider.main.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..eb9c63833bc785aaf0ebed44a68b6c220aabe3c1
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/SSRProvider.main.js.map
@@ -0,0 +1 @@
+{"mappings":"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","sources":["packages/@react-aria/ssr/src/SSRProvider.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n  prefix: string,\n  current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n  prefix: String(Math.round(Math.random() * 10000000000)),\n  current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n  /** Your application here. */\n  children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n  let cur = useContext(SSRContext);\n  let counter = useCounter(cur === defaultContext);\n  let [isSSR, setIsSSR] = useState(true);\n  let value: SSRContextValue = useMemo(() => ({\n    // If this is the first SSRProvider, start with an empty string prefix, otherwise\n    // append and increment the counter.\n    prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n    current: 0\n  }), [cur, counter]);\n\n  // If on the client, and the component was initially server rendered,\n  // then schedule a layout effect to update the component after hydration.\n  if (typeof document !== 'undefined') {\n    // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useLayoutEffect(() => {\n      setIsSSR(false);\n    }, []);\n  }\n\n  return (\n    <SSRContext.Provider value={value}>\n      <IsSSRContext.Provider value={isSSR}>\n        {props.children}\n      </IsSSRContext.Provider>\n    </SSRContext.Provider>\n  );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n  if (typeof React['useId'] === 'function') {\n    if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {\n      console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n      warnedAboutSSRProvider = true;\n    }\n    return <>{props.children}</>;\n  }\n  return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n  let ctx = useContext(SSRContext);\n  let ref = useRef<number | null>(null);\n  // eslint-disable-next-line rulesdir/pure-render\n  if (ref.current === null && !isDisabled) {\n    // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n    // This means our id counter will be incremented twice instead of once. This is a problem because on the\n    // server, components are only rendered once and so ids generated on the server won't match the client.\n    // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n    // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n    // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n    // To ensure that we only increment the global counter once, we store the starting id for this component in\n    // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n    // Since React runs the second render immediately after the first, this is safe.\n    // @ts-ignore\n    let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n    if (currentOwner) {\n      let prevComponentValue = componentIds.get(currentOwner);\n      if (prevComponentValue == null) {\n        // On the first render, and first call to useId, store the id and state in our weak map.\n        componentIds.set(currentOwner, {\n          id: ctx.current,\n          state: currentOwner.memoizedState\n        });\n      } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n        // On the second render, the memoizedState gets reset by React.\n        // Reset the counter, and remove from the weak map so we don't\n        // do this for subsequent useId calls.\n        ctx.current = prevComponentValue.id;\n        componentIds.delete(currentOwner);\n      }\n    }\n\n    // eslint-disable-next-line rulesdir/pure-render\n    ref.current = ++ctx.current;\n  }\n\n  // eslint-disable-next-line rulesdir/pure-render\n  return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n  let ctx = useContext(SSRContext);\n\n  // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n  // provide a warning to hint to the developer to add one.\n  if (ctx === defaultContext && !canUseDOM) {\n    console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n  }\n\n  let counter = useCounter(!!defaultId);\n  let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n  return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n  // @ts-ignore\n  let id = React.useId();\n  let [didSSR] = useState(useIsSSR());\n  let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n  return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n  return false;\n}\n\nfunction getServerSnapshot() {\n  return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n  // noop\n  return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n  // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n  if (typeof React['useSyncExternalStore'] === 'function') {\n    return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n  }\n\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return useContext(IsSSRContext);\n}\n"],"names":[],"version":3,"file":"SSRProvider.main.js.map","sourceRoot":"../../../../"}
\ No newline at end of file
diff --git a/node_modules/@react-aria/ssr/dist/SSRProvider.mjs b/node_modules/@react-aria/ssr/dist/SSRProvider.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..1d23ebaa6bbc39aae16ee10cb3bd972a04dcb53b
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/SSRProvider.mjs
@@ -0,0 +1,144 @@
+import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from "react";
+
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is
+// guarded by a check that it only runs on the client side.
+// eslint-disable-next-line rulesdir/useLayoutEffectRule
+
+// Default context value to use in case there is no SSRProvider. This is fine for
+// client-only apps. In order to support multiple copies of React Aria potentially
+// being on the page at once, the prefix is set to a random number. SSRProvider
+// will reset this to zero for consistency between server and client, so in the
+// SSR case multiple copies of React Aria is not supported.
+const $b5e257d569688ac6$var$defaultContext = {
+    prefix: String(Math.round(Math.random() * 10000000000)),
+    current: 0
+};
+const $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext);
+const $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false);
+// This is only used in React < 18.
+function $b5e257d569688ac6$var$LegacySSRProvider(props) {
+    let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext);
+    let [isSSR, setIsSSR] = (0, $670gB$useState)(true);
+    let value = (0, $670gB$useMemo)(()=>({
+            // If this is the first SSRProvider, start with an empty string prefix, otherwise
+            // append and increment the counter.
+            prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`,
+            current: 0
+        }), [
+        cur,
+        counter
+    ]);
+    // If on the client, and the component was initially server rendered,
+    // then schedule a layout effect to update the component after hydration.
+    if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe
+    // because the condition never changes after mounting.
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    (0, $670gB$useLayoutEffect)(()=>{
+        setIsSSR(false);
+    }, []);
+    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, {
+        value: value
+    }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, {
+        value: isSSR
+    }, props.children));
+}
+let $b5e257d569688ac6$var$warnedAboutSSRProvider = false;
+function $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) {
+    if (typeof (0, $670gB$react)['useId'] === 'function') {
+        if (process.env.NODE_ENV !== 'test' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) {
+            console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');
+            $b5e257d569688ac6$var$warnedAboutSSRProvider = true;
+        }
+        return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children);
+    }
+    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props);
+}
+let $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
+let $b5e257d569688ac6$var$componentIds = new WeakMap();
+function $b5e257d569688ac6$var$useCounter(isDisabled = false) {
+    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    let ref = (0, $670gB$useRef)(null);
+    // eslint-disable-next-line rulesdir/pure-render
+    if (ref.current === null && !isDisabled) {
+        var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+        // In strict mode, React renders components twice, and the ref will be reset to null on the second render.
+        // This means our id counter will be incremented twice instead of once. This is a problem because on the
+        // server, components are only rendered once and so ids generated on the server won't match the client.
+        // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this
+        // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.
+        // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.
+        // To ensure that we only increment the global counter once, we store the starting id for this component in
+        // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.
+        // Since React runs the second render immediately after the first, this is safe.
+        // @ts-ignore
+        let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;
+        if (currentOwner) {
+            let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner);
+            if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.
+            $b5e257d569688ac6$var$componentIds.set(currentOwner, {
+                id: ctx.current,
+                state: currentOwner.memoizedState
+            });
+            else if (currentOwner.memoizedState !== prevComponentValue.state) {
+                // On the second render, the memoizedState gets reset by React.
+                // Reset the counter, and remove from the weak map so we don't
+                // do this for subsequent useId calls.
+                ctx.current = prevComponentValue.id;
+                $b5e257d569688ac6$var$componentIds.delete(currentOwner);
+            }
+        }
+        // eslint-disable-next-line rulesdir/pure-render
+        ref.current = ++ctx.current;
+    }
+    // eslint-disable-next-line rulesdir/pure-render
+    return ref.current;
+}
+function $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) {
+    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    // If we are rendering in a non-DOM environment, and there's no SSRProvider,
+    // provide a warning to hint to the developer to add one.
+    if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM) console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');
+    let counter = $b5e257d569688ac6$var$useCounter(!!defaultId);
+    let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;
+    return defaultId || `${prefix}-${counter}`;
+}
+function $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) {
+    // @ts-ignore
+    let id = (0, $670gB$react).useId();
+    let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273());
+    let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;
+    return defaultId || `${prefix}-${id}`;
+}
+const $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId;
+function $b5e257d569688ac6$var$getSnapshot() {
+    return false;
+}
+function $b5e257d569688ac6$var$getServerSnapshot() {
+    return true;
+}
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+function $b5e257d569688ac6$var$subscribe(onStoreChange) {
+    // noop
+    return ()=>{};
+}
+function $b5e257d569688ac6$export$535bd6ca7f90a273() {
+    // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.
+    if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot);
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext);
+}
+
+
+export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId};
+//# sourceMappingURL=SSRProvider.module.js.map
diff --git a/node_modules/@react-aria/ssr/dist/SSRProvider.module.js b/node_modules/@react-aria/ssr/dist/SSRProvider.module.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d23ebaa6bbc39aae16ee10cb3bd972a04dcb53b
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/SSRProvider.module.js
@@ -0,0 +1,144 @@
+import $670gB$react, {useContext as $670gB$useContext, useState as $670gB$useState, useMemo as $670gB$useMemo, useLayoutEffect as $670gB$useLayoutEffect, useRef as $670gB$useRef} from "react";
+
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ // We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is
+// guarded by a check that it only runs on the client side.
+// eslint-disable-next-line rulesdir/useLayoutEffectRule
+
+// Default context value to use in case there is no SSRProvider. This is fine for
+// client-only apps. In order to support multiple copies of React Aria potentially
+// being on the page at once, the prefix is set to a random number. SSRProvider
+// will reset this to zero for consistency between server and client, so in the
+// SSR case multiple copies of React Aria is not supported.
+const $b5e257d569688ac6$var$defaultContext = {
+    prefix: String(Math.round(Math.random() * 10000000000)),
+    current: 0
+};
+const $b5e257d569688ac6$var$SSRContext = /*#__PURE__*/ (0, $670gB$react).createContext($b5e257d569688ac6$var$defaultContext);
+const $b5e257d569688ac6$var$IsSSRContext = /*#__PURE__*/ (0, $670gB$react).createContext(false);
+// This is only used in React < 18.
+function $b5e257d569688ac6$var$LegacySSRProvider(props) {
+    let cur = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    let counter = $b5e257d569688ac6$var$useCounter(cur === $b5e257d569688ac6$var$defaultContext);
+    let [isSSR, setIsSSR] = (0, $670gB$useState)(true);
+    let value = (0, $670gB$useMemo)(()=>({
+            // If this is the first SSRProvider, start with an empty string prefix, otherwise
+            // append and increment the counter.
+            prefix: cur === $b5e257d569688ac6$var$defaultContext ? '' : `${cur.prefix}-${counter}`,
+            current: 0
+        }), [
+        cur,
+        counter
+    ]);
+    // If on the client, and the component was initially server rendered,
+    // then schedule a layout effect to update the component after hydration.
+    if (typeof document !== 'undefined') // This if statement technically breaks the rules of hooks, but is safe
+    // because the condition never changes after mounting.
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    (0, $670gB$useLayoutEffect)(()=>{
+        setIsSSR(false);
+    }, []);
+    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$SSRContext.Provider, {
+        value: value
+    }, /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$IsSSRContext.Provider, {
+        value: isSSR
+    }, props.children));
+}
+let $b5e257d569688ac6$var$warnedAboutSSRProvider = false;
+function $b5e257d569688ac6$export$9f8ac96af4b1b2ae(props) {
+    if (typeof (0, $670gB$react)['useId'] === 'function') {
+        if (process.env.NODE_ENV !== 'test' && !$b5e257d569688ac6$var$warnedAboutSSRProvider) {
+            console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');
+            $b5e257d569688ac6$var$warnedAboutSSRProvider = true;
+        }
+        return /*#__PURE__*/ (0, $670gB$react).createElement((0, $670gB$react).Fragment, null, props.children);
+    }
+    return /*#__PURE__*/ (0, $670gB$react).createElement($b5e257d569688ac6$var$LegacySSRProvider, props);
+}
+let $b5e257d569688ac6$var$canUseDOM = Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
+let $b5e257d569688ac6$var$componentIds = new WeakMap();
+function $b5e257d569688ac6$var$useCounter(isDisabled = false) {
+    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    let ref = (0, $670gB$useRef)(null);
+    // eslint-disable-next-line rulesdir/pure-render
+    if (ref.current === null && !isDisabled) {
+        var _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner, _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
+        // In strict mode, React renders components twice, and the ref will be reset to null on the second render.
+        // This means our id counter will be incremented twice instead of once. This is a problem because on the
+        // server, components are only rendered once and so ids generated on the server won't match the client.
+        // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this
+        // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.
+        // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.
+        // To ensure that we only increment the global counter once, we store the starting id for this component in
+        // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.
+        // Since React runs the second render immediately after the first, this is safe.
+        // @ts-ignore
+        let currentOwner = (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = (0, $670gB$react).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED === void 0 ? void 0 : (_React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner = _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner) === null || _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner === void 0 ? void 0 : _React___SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED_ReactCurrentOwner.current;
+        if (currentOwner) {
+            let prevComponentValue = $b5e257d569688ac6$var$componentIds.get(currentOwner);
+            if (prevComponentValue == null) // On the first render, and first call to useId, store the id and state in our weak map.
+            $b5e257d569688ac6$var$componentIds.set(currentOwner, {
+                id: ctx.current,
+                state: currentOwner.memoizedState
+            });
+            else if (currentOwner.memoizedState !== prevComponentValue.state) {
+                // On the second render, the memoizedState gets reset by React.
+                // Reset the counter, and remove from the weak map so we don't
+                // do this for subsequent useId calls.
+                ctx.current = prevComponentValue.id;
+                $b5e257d569688ac6$var$componentIds.delete(currentOwner);
+            }
+        }
+        // eslint-disable-next-line rulesdir/pure-render
+        ref.current = ++ctx.current;
+    }
+    // eslint-disable-next-line rulesdir/pure-render
+    return ref.current;
+}
+function $b5e257d569688ac6$var$useLegacySSRSafeId(defaultId) {
+    let ctx = (0, $670gB$useContext)($b5e257d569688ac6$var$SSRContext);
+    // If we are rendering in a non-DOM environment, and there's no SSRProvider,
+    // provide a warning to hint to the developer to add one.
+    if (ctx === $b5e257d569688ac6$var$defaultContext && !$b5e257d569688ac6$var$canUseDOM) console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');
+    let counter = $b5e257d569688ac6$var$useCounter(!!defaultId);
+    let prefix = ctx === $b5e257d569688ac6$var$defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;
+    return defaultId || `${prefix}-${counter}`;
+}
+function $b5e257d569688ac6$var$useModernSSRSafeId(defaultId) {
+    // @ts-ignore
+    let id = (0, $670gB$react).useId();
+    let [didSSR] = (0, $670gB$useState)($b5e257d569688ac6$export$535bd6ca7f90a273());
+    let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${$b5e257d569688ac6$var$defaultContext.prefix}`;
+    return defaultId || `${prefix}-${id}`;
+}
+const $b5e257d569688ac6$export$619500959fc48b26 = typeof (0, $670gB$react)['useId'] === 'function' ? $b5e257d569688ac6$var$useModernSSRSafeId : $b5e257d569688ac6$var$useLegacySSRSafeId;
+function $b5e257d569688ac6$var$getSnapshot() {
+    return false;
+}
+function $b5e257d569688ac6$var$getServerSnapshot() {
+    return true;
+}
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+function $b5e257d569688ac6$var$subscribe(onStoreChange) {
+    // noop
+    return ()=>{};
+}
+function $b5e257d569688ac6$export$535bd6ca7f90a273() {
+    // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.
+    if (typeof (0, $670gB$react)['useSyncExternalStore'] === 'function') return (0, $670gB$react)['useSyncExternalStore']($b5e257d569688ac6$var$subscribe, $b5e257d569688ac6$var$getSnapshot, $b5e257d569688ac6$var$getServerSnapshot);
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    return (0, $670gB$useContext)($b5e257d569688ac6$var$IsSSRContext);
+}
+
+
+export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId};
+//# sourceMappingURL=SSRProvider.module.js.map
diff --git a/node_modules/@react-aria/ssr/dist/SSRProvider.module.js.map b/node_modules/@react-aria/ssr/dist/SSRProvider.module.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..361aff601e9c9432d1c6baab18178895a6938677
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/SSRProvider.module.js.map
@@ -0,0 +1 @@
+{"mappings":"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","sources":["packages/@react-aria/ssr/src/SSRProvider.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is\n// guarded by a check that it only runs on the client side.\n// eslint-disable-next-line rulesdir/useLayoutEffectRule\nimport React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';\n\n// To support SSR, the auto incrementing id counter is stored in a context. This allows\n// it to be reset on every request to ensure the client and server are consistent.\n// There is also a prefix string that is used to support async loading components\n// Each async boundary must be wrapped in an SSR provider, which appends to the prefix\n// and resets the current id counter. This ensures that async loaded components have\n// consistent ids regardless of the loading order.\ninterface SSRContextValue {\n  prefix: string,\n  current: number\n}\n\n// Default context value to use in case there is no SSRProvider. This is fine for\n// client-only apps. In order to support multiple copies of React Aria potentially\n// being on the page at once, the prefix is set to a random number. SSRProvider\n// will reset this to zero for consistency between server and client, so in the\n// SSR case multiple copies of React Aria is not supported.\nconst defaultContext: SSRContextValue = {\n  prefix: String(Math.round(Math.random() * 10000000000)),\n  current: 0\n};\n\nconst SSRContext = React.createContext<SSRContextValue>(defaultContext);\nconst IsSSRContext = React.createContext(false);\n\nexport interface SSRProviderProps {\n  /** Your application here. */\n  children: ReactNode\n}\n\n// This is only used in React < 18.\nfunction LegacySSRProvider(props: SSRProviderProps): JSX.Element {\n  let cur = useContext(SSRContext);\n  let counter = useCounter(cur === defaultContext);\n  let [isSSR, setIsSSR] = useState(true);\n  let value: SSRContextValue = useMemo(() => ({\n    // If this is the first SSRProvider, start with an empty string prefix, otherwise\n    // append and increment the counter.\n    prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,\n    current: 0\n  }), [cur, counter]);\n\n  // If on the client, and the component was initially server rendered,\n  // then schedule a layout effect to update the component after hydration.\n  if (typeof document !== 'undefined') {\n    // This if statement technically breaks the rules of hooks, but is safe\n    // because the condition never changes after mounting.\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useLayoutEffect(() => {\n      setIsSSR(false);\n    }, []);\n  }\n\n  return (\n    <SSRContext.Provider value={value}>\n      <IsSSRContext.Provider value={isSSR}>\n        {props.children}\n      </IsSSRContext.Provider>\n    </SSRContext.Provider>\n  );\n}\n\nlet warnedAboutSSRProvider = false;\n\n/**\n * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.\n * This ensures that auto generated ids are consistent between the client and server.\n */\nexport function SSRProvider(props: SSRProviderProps): JSX.Element {\n  if (typeof React['useId'] === 'function') {\n    if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {\n      console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');\n      warnedAboutSSRProvider = true;\n    }\n    return <>{props.children}</>;\n  }\n  return <LegacySSRProvider {...props} />;\n}\n\nlet canUseDOM = Boolean(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nlet componentIds = new WeakMap();\n\nfunction useCounter(isDisabled = false) {\n  let ctx = useContext(SSRContext);\n  let ref = useRef<number | null>(null);\n  // eslint-disable-next-line rulesdir/pure-render\n  if (ref.current === null && !isDisabled) {\n    // In strict mode, React renders components twice, and the ref will be reset to null on the second render.\n    // This means our id counter will be incremented twice instead of once. This is a problem because on the\n    // server, components are only rendered once and so ids generated on the server won't match the client.\n    // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this\n    // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.\n    // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.\n    // To ensure that we only increment the global counter once, we store the starting id for this component in\n    // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.\n    // Since React runs the second render immediately after the first, this is safe.\n    // @ts-ignore\n    let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;\n    if (currentOwner) {\n      let prevComponentValue = componentIds.get(currentOwner);\n      if (prevComponentValue == null) {\n        // On the first render, and first call to useId, store the id and state in our weak map.\n        componentIds.set(currentOwner, {\n          id: ctx.current,\n          state: currentOwner.memoizedState\n        });\n      } else if (currentOwner.memoizedState !== prevComponentValue.state) {\n        // On the second render, the memoizedState gets reset by React.\n        // Reset the counter, and remove from the weak map so we don't\n        // do this for subsequent useId calls.\n        ctx.current = prevComponentValue.id;\n        componentIds.delete(currentOwner);\n      }\n    }\n\n    // eslint-disable-next-line rulesdir/pure-render\n    ref.current = ++ctx.current;\n  }\n\n  // eslint-disable-next-line rulesdir/pure-render\n  return ref.current;\n}\n\nfunction useLegacySSRSafeId(defaultId?: string): string {\n  let ctx = useContext(SSRContext);\n\n  // If we are rendering in a non-DOM environment, and there's no SSRProvider,\n  // provide a warning to hint to the developer to add one.\n  if (ctx === defaultContext && !canUseDOM) {\n    console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');\n  }\n\n  let counter = useCounter(!!defaultId);\n  let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;\n  return defaultId || `${prefix}-${counter}`;\n}\n\nfunction useModernSSRSafeId(defaultId?: string): string {\n  // @ts-ignore\n  let id = React.useId();\n  let [didSSR] = useState(useIsSSR());\n  let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;\n  return defaultId || `${prefix}-${id}`;\n}\n\n// Use React.useId in React 18 if available, otherwise fall back to our old implementation.\n/** @private */\nexport const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;\n\nfunction getSnapshot() {\n  return false;\n}\n\nfunction getServerSnapshot() {\n  return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction subscribe(onStoreChange: () => void): () => void {\n  // noop\n  return () => {};\n}\n\n/**\n * Returns whether the component is currently being server side rendered or\n * hydrated on the client. Can be used to delay browser-specific rendering\n * until after hydration.\n */\nexport function useIsSSR(): boolean {\n  // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.\n  if (typeof React['useSyncExternalStore'] === 'function') {\n    return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);\n  }\n\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return useContext(IsSSRContext);\n}\n"],"names":[],"version":3,"file":"SSRProvider.module.js.map","sourceRoot":"../../../../"}
\ No newline at end of file
diff --git a/node_modules/@react-aria/ssr/dist/import.mjs b/node_modules/@react-aria/ssr/dist/import.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..184730db928eaa0c6c97f4ca315af0d6b6e7c6ba
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/import.mjs
@@ -0,0 +1,17 @@
+import {SSRProvider as $b5e257d569688ac6$export$9f8ac96af4b1b2ae, useIsSSR as $b5e257d569688ac6$export$535bd6ca7f90a273, useSSRSafeId as $b5e257d569688ac6$export$619500959fc48b26} from "./SSRProvider.mjs";
+
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ 
+
+
+export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR};
+//# sourceMappingURL=module.js.map
diff --git a/node_modules/@react-aria/ssr/dist/main.js b/node_modules/@react-aria/ssr/dist/main.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c8319fde2dcf6dd3e71da86a7ec4d85fe3f8836
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/main.js
@@ -0,0 +1,24 @@
+var $97d95f6660b1bb14$exports = require("./SSRProvider.main.js");
+
+
+function $parcel$export(e, n, v, s) {
+  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
+}
+
+$parcel$export(module.exports, "SSRProvider", () => $97d95f6660b1bb14$exports.SSRProvider);
+$parcel$export(module.exports, "useSSRSafeId", () => $97d95f6660b1bb14$exports.useSSRSafeId);
+$parcel$export(module.exports, "useIsSSR", () => $97d95f6660b1bb14$exports.useIsSSR);
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ 
+
+
+//# sourceMappingURL=main.js.map
diff --git a/node_modules/@react-aria/ssr/dist/main.js.map b/node_modules/@react-aria/ssr/dist/main.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..4388ffbd5b648055c84fa8172ddaaad80474eeb0
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/main.js.map
@@ -0,0 +1 @@
+{"mappings":";;;;;;;;;;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"main.js.map","sourceRoot":"../../../../"}
\ No newline at end of file
diff --git a/node_modules/@react-aria/ssr/dist/module.js b/node_modules/@react-aria/ssr/dist/module.js
new file mode 100644
index 0000000000000000000000000000000000000000..22000cedc6f9070e7f25939c00544e488f2565a7
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/module.js
@@ -0,0 +1,17 @@
+import {SSRProvider as $b5e257d569688ac6$export$9f8ac96af4b1b2ae, useIsSSR as $b5e257d569688ac6$export$535bd6ca7f90a273, useSSRSafeId as $b5e257d569688ac6$export$619500959fc48b26} from "./SSRProvider.module.js";
+
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */ 
+
+
+export {$b5e257d569688ac6$export$9f8ac96af4b1b2ae as SSRProvider, $b5e257d569688ac6$export$619500959fc48b26 as useSSRSafeId, $b5e257d569688ac6$export$535bd6ca7f90a273 as useIsSSR};
+//# sourceMappingURL=module.js.map
diff --git a/node_modules/@react-aria/ssr/dist/module.js.map b/node_modules/@react-aria/ssr/dist/module.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..e36aebaafb2796a939884cfd1f6fa8c2d1b63be1
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/module.js.map
@@ -0,0 +1 @@
+{"mappings":";;AAAA;;;;;;;;;;CAUC","sources":["packages/@react-aria/ssr/src/index.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"module.js.map","sourceRoot":"../../../../"}
\ No newline at end of file
diff --git a/node_modules/@react-aria/ssr/dist/types.d.ts b/node_modules/@react-aria/ssr/dist/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fac6f02fd6aeb516ad725b7e3fea4e11d06f741c
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/types.d.ts
@@ -0,0 +1,21 @@
+import { JSX, ReactNode } from "react";
+export interface SSRProviderProps {
+    /** Your application here. */
+    children: ReactNode;
+}
+/**
+ * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.
+ * This ensures that auto generated ids are consistent between the client and server.
+ */
+export function SSRProvider(props: SSRProviderProps): JSX.Element;
+declare function useModernSSRSafeId(defaultId?: string): string;
+/** @private */
+export const useSSRSafeId: typeof useModernSSRSafeId;
+/**
+ * Returns whether the component is currently being server side rendered or
+ * hydrated on the client. Can be used to delay browser-specific rendering
+ * until after hydration.
+ */
+export function useIsSSR(): boolean;
+
+//# sourceMappingURL=types.d.ts.map
diff --git a/node_modules/@react-aria/ssr/dist/types.d.ts.map b/node_modules/@react-aria/ssr/dist/types.d.ts.map
new file mode 100644
index 0000000000000000000000000000000000000000..376f88ef0e9806ee8508132b09df4783cb787b98
--- /dev/null
+++ b/node_modules/@react-aria/ssr/dist/types.d.ts.map
@@ -0,0 +1 @@
+{"mappings":";AAyCA;IACE,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAoCD;;;GAGG;AACH,4BAA4B,KAAK,EAAE,gBAAgB,GAAG,IAAI,OAAO,CAShE;AAiED,oCAA4B,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtD;AAGD,eAAe;AACf,OAAO,MAAM,uCAA6F,CAAC;AAgB3G;;;;GAIG;AACH,4BAA4B,OAAO,CAQlC","sources":["packages/@react-aria/ssr/src/packages/@react-aria/ssr/src/SSRProvider.tsx","packages/@react-aria/ssr/src/packages/@react-aria/ssr/src/index.ts","packages/@react-aria/ssr/src/index.ts"],"sourcesContent":[null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';\nexport type {SSRProviderProps} from './SSRProvider';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
\ No newline at end of file
diff --git a/node_modules/@react-aria/ssr/package.json b/node_modules/@react-aria/ssr/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..91e5044a9a1e8d246983be244443e3ce64450ca7
--- /dev/null
+++ b/node_modules/@react-aria/ssr/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "@react-aria/ssr@^3.5.0",
+  "_id": "@react-aria/ssr@3.9.6",
+  "_inBundle": false,
+  "_integrity": "sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==",
+  "_location": "/@react-aria/ssr",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@react-aria/ssr@^3.5.0",
+    "name": "@react-aria/ssr",
+    "escapedName": "@react-aria%2fssr",
+    "scope": "@react-aria",
+    "rawSpec": "^3.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.5.0"
+  },
+  "_requiredBy": [
+    "/@restart/ui"
+  ],
+  "_resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.6.tgz",
+  "_shasum": "a9e8b351acdc8238f2b5215b0ce904636c6ea690",
+  "_spec": "@react-aria/ssr@^3.5.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/@restart/ui",
+  "bugs": {
+    "url": "https://github.com/adobe/react-spectrum/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@swc/helpers": "^0.5.0"
+  },
+  "deprecated": false,
+  "description": "Spectrum UI components in React",
+  "engines": {
+    "node": ">= 12"
+  },
+  "exports": {
+    "types": "./dist/types.d.ts",
+    "import": "./dist/import.mjs",
+    "require": "./dist/main.js"
+  },
+  "files": [
+    "dist",
+    "src"
+  ],
+  "homepage": "https://github.com/adobe/react-spectrum#readme",
+  "license": "Apache-2.0",
+  "main": "dist/main.js",
+  "module": "dist/module.js",
+  "name": "@react-aria/ssr",
+  "peerDependencies": {
+    "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0"
+  },
+  "publishConfig": {
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/adobe/react-spectrum.git"
+  },
+  "sideEffects": false,
+  "source": "src/index.ts",
+  "targets": {
+    "main": {
+      "context": "node"
+    },
+    "module": {
+      "context": "node"
+    }
+  },
+  "types": "dist/types.d.ts",
+  "version": "3.9.6"
+}
diff --git a/node_modules/@react-aria/ssr/src/SSRProvider.tsx b/node_modules/@react-aria/ssr/src/SSRProvider.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..fa2247e9d434125c17e4b1d62f34d72aeffb3f8b
--- /dev/null
+++ b/node_modules/@react-aria/ssr/src/SSRProvider.tsx
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+
+// We must avoid a circular dependency with @react-aria/utils, and this useLayoutEffect is
+// guarded by a check that it only runs on the client side.
+// eslint-disable-next-line rulesdir/useLayoutEffectRule
+import React, {JSX, ReactNode, useContext, useLayoutEffect, useMemo, useRef, useState} from 'react';
+
+// To support SSR, the auto incrementing id counter is stored in a context. This allows
+// it to be reset on every request to ensure the client and server are consistent.
+// There is also a prefix string that is used to support async loading components
+// Each async boundary must be wrapped in an SSR provider, which appends to the prefix
+// and resets the current id counter. This ensures that async loaded components have
+// consistent ids regardless of the loading order.
+interface SSRContextValue {
+  prefix: string,
+  current: number
+}
+
+// Default context value to use in case there is no SSRProvider. This is fine for
+// client-only apps. In order to support multiple copies of React Aria potentially
+// being on the page at once, the prefix is set to a random number. SSRProvider
+// will reset this to zero for consistency between server and client, so in the
+// SSR case multiple copies of React Aria is not supported.
+const defaultContext: SSRContextValue = {
+  prefix: String(Math.round(Math.random() * 10000000000)),
+  current: 0
+};
+
+const SSRContext = React.createContext<SSRContextValue>(defaultContext);
+const IsSSRContext = React.createContext(false);
+
+export interface SSRProviderProps {
+  /** Your application here. */
+  children: ReactNode
+}
+
+// This is only used in React < 18.
+function LegacySSRProvider(props: SSRProviderProps): JSX.Element {
+  let cur = useContext(SSRContext);
+  let counter = useCounter(cur === defaultContext);
+  let [isSSR, setIsSSR] = useState(true);
+  let value: SSRContextValue = useMemo(() => ({
+    // If this is the first SSRProvider, start with an empty string prefix, otherwise
+    // append and increment the counter.
+    prefix: cur === defaultContext ? '' : `${cur.prefix}-${counter}`,
+    current: 0
+  }), [cur, counter]);
+
+  // If on the client, and the component was initially server rendered,
+  // then schedule a layout effect to update the component after hydration.
+  if (typeof document !== 'undefined') {
+    // This if statement technically breaks the rules of hooks, but is safe
+    // because the condition never changes after mounting.
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    useLayoutEffect(() => {
+      setIsSSR(false);
+    }, []);
+  }
+
+  return (
+    <SSRContext.Provider value={value}>
+      <IsSSRContext.Provider value={isSSR}>
+        {props.children}
+      </IsSSRContext.Provider>
+    </SSRContext.Provider>
+  );
+}
+
+let warnedAboutSSRProvider = false;
+
+/**
+ * When using SSR with React Aria in React 16 or 17, applications must be wrapped in an SSRProvider.
+ * This ensures that auto generated ids are consistent between the client and server.
+ */
+export function SSRProvider(props: SSRProviderProps): JSX.Element {
+  if (typeof React['useId'] === 'function') {
+    if (process.env.NODE_ENV !== 'test' && !warnedAboutSSRProvider) {
+      console.warn('In React 18, SSRProvider is not necessary and is a noop. You can remove it from your app.');
+      warnedAboutSSRProvider = true;
+    }
+    return <>{props.children}</>;
+  }
+  return <LegacySSRProvider {...props} />;
+}
+
+let canUseDOM = Boolean(
+  typeof window !== 'undefined' &&
+  window.document &&
+  window.document.createElement
+);
+
+let componentIds = new WeakMap();
+
+function useCounter(isDisabled = false) {
+  let ctx = useContext(SSRContext);
+  let ref = useRef<number | null>(null);
+  // eslint-disable-next-line rulesdir/pure-render
+  if (ref.current === null && !isDisabled) {
+    // In strict mode, React renders components twice, and the ref will be reset to null on the second render.
+    // This means our id counter will be incremented twice instead of once. This is a problem because on the
+    // server, components are only rendered once and so ids generated on the server won't match the client.
+    // In React 18, useId was introduced to solve this, but it is not available in older versions. So to solve this
+    // we need to use some React internals to access the underlying Fiber instance, which is stable between renders.
+    // This is exposed as ReactCurrentOwner in development, which is all we need since StrictMode only runs in development.
+    // To ensure that we only increment the global counter once, we store the starting id for this component in
+    // a weak map associated with the Fiber. On the second render, we reset the global counter to this value.
+    // Since React runs the second render immediately after the first, this is safe.
+    // @ts-ignore
+    let currentOwner = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentOwner?.current;
+    if (currentOwner) {
+      let prevComponentValue = componentIds.get(currentOwner);
+      if (prevComponentValue == null) {
+        // On the first render, and first call to useId, store the id and state in our weak map.
+        componentIds.set(currentOwner, {
+          id: ctx.current,
+          state: currentOwner.memoizedState
+        });
+      } else if (currentOwner.memoizedState !== prevComponentValue.state) {
+        // On the second render, the memoizedState gets reset by React.
+        // Reset the counter, and remove from the weak map so we don't
+        // do this for subsequent useId calls.
+        ctx.current = prevComponentValue.id;
+        componentIds.delete(currentOwner);
+      }
+    }
+
+    // eslint-disable-next-line rulesdir/pure-render
+    ref.current = ++ctx.current;
+  }
+
+  // eslint-disable-next-line rulesdir/pure-render
+  return ref.current;
+}
+
+function useLegacySSRSafeId(defaultId?: string): string {
+  let ctx = useContext(SSRContext);
+
+  // If we are rendering in a non-DOM environment, and there's no SSRProvider,
+  // provide a warning to hint to the developer to add one.
+  if (ctx === defaultContext && !canUseDOM) {
+    console.warn('When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.');
+  }
+
+  let counter = useCounter(!!defaultId);
+  let prefix = ctx === defaultContext && process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${ctx.prefix}`;
+  return defaultId || `${prefix}-${counter}`;
+}
+
+function useModernSSRSafeId(defaultId?: string): string {
+  // @ts-ignore
+  let id = React.useId();
+  let [didSSR] = useState(useIsSSR());
+  let prefix = didSSR || process.env.NODE_ENV === 'test' ? 'react-aria' : `react-aria${defaultContext.prefix}`;
+  return defaultId || `${prefix}-${id}`;
+}
+
+// Use React.useId in React 18 if available, otherwise fall back to our old implementation.
+/** @private */
+export const useSSRSafeId = typeof React['useId'] === 'function' ? useModernSSRSafeId : useLegacySSRSafeId;
+
+function getSnapshot() {
+  return false;
+}
+
+function getServerSnapshot() {
+  return true;
+}
+
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+function subscribe(onStoreChange: () => void): () => void {
+  // noop
+  return () => {};
+}
+
+/**
+ * Returns whether the component is currently being server side rendered or
+ * hydrated on the client. Can be used to delay browser-specific rendering
+ * until after hydration.
+ */
+export function useIsSSR(): boolean {
+  // In React 18, we can use useSyncExternalStore to detect if we're server rendering or hydrating.
+  if (typeof React['useSyncExternalStore'] === 'function') {
+    return React['useSyncExternalStore'](subscribe, getSnapshot, getServerSnapshot);
+  }
+
+  // eslint-disable-next-line react-hooks/rules-of-hooks
+  return useContext(IsSSRContext);
+}
diff --git a/node_modules/@react-aria/ssr/src/index.ts b/node_modules/@react-aria/ssr/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ee5c98be7279063a09ef8b4e27ff970faa2fb116
--- /dev/null
+++ b/node_modules/@react-aria/ssr/src/index.ts
@@ -0,0 +1,13 @@
+/*
+ * Copyright 2020 Adobe. All rights reserved.
+ * This file is licensed to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License. You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under
+ * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
+ * OF ANY KIND, either express or implied. See the License for the specific language
+ * governing permissions and limitations under the License.
+ */
+export {SSRProvider, useSSRSafeId, useIsSSR} from './SSRProvider';
+export type {SSRProviderProps} from './SSRProvider';
diff --git a/node_modules/@restart/hooks/LICENSE b/node_modules/@restart/hooks/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..c8e740d0c847800443c6eaaefd67f16f3b905335
--- /dev/null
+++ b/node_modules/@restart/hooks/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Jason Quense
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/README.md b/node_modules/@restart/hooks/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a8c75707f79e8a683294081759afe778620b7d6d
--- /dev/null
+++ b/node_modules/@restart/hooks/README.md
@@ -0,0 +1,20 @@
+# @restart/hooks [![npm][npm-badge]][npm]
+
+A set of utility and general-purpose React hooks.
+
+## Install
+
+```sh
+npm install @restart/hooks
+```
+
+## Usage
+
+```js
+import useInterval from '@restart/hooks/useInterval'
+
+useInterval(() => loop(), 300, false)
+```
+
+[npm-badge]: https://img.shields.io/npm/v/@restart/hooks.svg
+[npm]: https://www.npmjs.org/package/@restart/hooks
diff --git a/node_modules/@restart/hooks/cjs/globals.d.ts b/node_modules/@restart/hooks/cjs/globals.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9d32ba0d17430ea22d5fbc9c13ae445d99756fc4
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/globals.d.ts
@@ -0,0 +1,68 @@
+interface Window {
+  ResizeObserver: ResizeObserver
+}
+
+/**
+ * The ResizeObserver interface is used to observe changes to Element's content
+ * rect.
+ *
+ * It is modeled after MutationObserver and IntersectionObserver.
+ */
+interface ResizeObserver {
+  new (callback: ResizeObserverCallback)
+
+  /**
+   * Adds target to the list of observed elements.
+   */
+  observe: (target: Element) => void
+
+  /**
+   * Removes target from the list of observed elements.
+   */
+  unobserve: (target: Element) => void
+
+  /**
+   * Clears both the observationTargets and activeTargets lists.
+   */
+  disconnect: () => void
+}
+
+/**
+ * This callback delivers ResizeObserver's notifications. It is invoked by a
+ * broadcast active observations algorithm.
+ */
+interface ResizeObserverCallback {
+  (entries: ResizeObserverEntry[], observer: ResizeObserver): void
+}
+
+interface ResizeObserverEntry {
+  /**
+   * @param target The Element whose size has changed.
+   */
+  new (target: Element)
+
+  /**
+   * The Element whose size has changed.
+   */
+  readonly target: Element
+
+  /**
+   * Element's content rect when ResizeObserverCallback is invoked.
+   */
+  readonly contentRect: DOMRectReadOnly
+}
+
+interface DOMRectReadOnly {
+  fromRect(other: DOMRectInit | undefined): DOMRectReadOnly
+
+  readonly x: number
+  readonly y: number
+  readonly width: number
+  readonly height: number
+  readonly top: number
+  readonly right: number
+  readonly bottom: number
+  readonly left: number
+
+  toJSON: () => any
+}
diff --git a/node_modules/@restart/hooks/cjs/index.d.ts b/node_modules/@restart/hooks/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..655945902ebaa208561443f3b74bf5d626dad6ee
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/index.d.ts
@@ -0,0 +1,14 @@
+import useCallbackRef from './useCallbackRef';
+import useCommittedRef from './useCommittedRef';
+import useEventCallback from './useEventCallback';
+import useEventListener from './useEventListener';
+import useGlobalListener from './useGlobalListener';
+import useInterval from './useInterval';
+import useRafInterval from './useRafInterval';
+import useMergeState from './useMergeState';
+import useMergeStateFromProps from './useMergeStateFromProps';
+import useMounted from './useMounted';
+import usePrevious from './usePrevious';
+import useImage from './useImage';
+import useResizeObserver from './useResizeObserver';
+export { useCallbackRef, useCommittedRef, useEventCallback, useEventListener, useGlobalListener, useInterval, useRafInterval, useMergeState, useMergeStateFromProps, useMounted, usePrevious, useImage, useResizeObserver, };
diff --git a/node_modules/@restart/hooks/cjs/index.js b/node_modules/@restart/hooks/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d0bf6c22423120c57e31244c705338f335e5d41
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/index.js
@@ -0,0 +1,30 @@
+"use strict";
+
+exports.__esModule = true;
+var _useCallbackRef = _interopRequireDefault(require("./useCallbackRef"));
+exports.useCallbackRef = _useCallbackRef.default;
+var _useCommittedRef = _interopRequireDefault(require("./useCommittedRef"));
+exports.useCommittedRef = _useCommittedRef.default;
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+exports.useEventCallback = _useEventCallback.default;
+var _useEventListener = _interopRequireDefault(require("./useEventListener"));
+exports.useEventListener = _useEventListener.default;
+var _useGlobalListener = _interopRequireDefault(require("./useGlobalListener"));
+exports.useGlobalListener = _useGlobalListener.default;
+var _useInterval = _interopRequireDefault(require("./useInterval"));
+exports.useInterval = _useInterval.default;
+var _useRafInterval = _interopRequireDefault(require("./useRafInterval"));
+exports.useRafInterval = _useRafInterval.default;
+var _useMergeState = _interopRequireDefault(require("./useMergeState"));
+exports.useMergeState = _useMergeState.default;
+var _useMergeStateFromProps = _interopRequireDefault(require("./useMergeStateFromProps"));
+exports.useMergeStateFromProps = _useMergeStateFromProps.default;
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+exports.useMounted = _useMounted.default;
+var _usePrevious = _interopRequireDefault(require("./usePrevious"));
+exports.usePrevious = _usePrevious.default;
+var _useImage = _interopRequireDefault(require("./useImage"));
+exports.useImage = _useImage.default;
+var _useResizeObserver = _interopRequireDefault(require("./useResizeObserver"));
+exports.useResizeObserver = _useResizeObserver.default;
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useAnimationFrame.d.ts b/node_modules/@restart/hooks/cjs/useAnimationFrame.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b438e915cec056b45e660e1ccef2707cb1349f0e
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useAnimationFrame.d.ts
@@ -0,0 +1,39 @@
+export interface UseAnimationFrameReturn {
+    cancel(): void;
+    /**
+     * Request for the provided callback to be called on the next animation frame.
+     * Previously registered callbacks will be cancelled
+     */
+    request(callback: FrameRequestCallback): void;
+    /**
+     * Request for the provided callback to be called on the next animation frame.
+     * Previously registered callbacks can be cancelled by providing `cancelPrevious`
+     */
+    request(cancelPrevious: boolean, callback: FrameRequestCallback): void;
+}
+/**
+ * Returns a controller object for requesting and cancelling an animation freame that is properly cleaned up
+ * once the component unmounts. New requests cancel and replace existing ones.
+ *
+ * ```ts
+ * const [style, setStyle] = useState({});
+ * const animationFrame = useAnimationFrame();
+ *
+ * const handleMouseMove = (e) => {
+ *   animationFrame.request(() => {
+ *     setStyle({ top: e.clientY, left: e.clientY })
+ *   })
+ * }
+ *
+ * const handleMouseUp = () => {
+ *   animationFrame.cancel()
+ * }
+ *
+ * return (
+ *   <div onMouseUp={handleMouseUp} onMouseMove={handleMouseMove}>
+ *     <Ball style={style} />
+ *   </div>
+ * )
+ * ```
+ */
+export default function useAnimationFrame(): UseAnimationFrameReturn;
diff --git a/node_modules/@restart/hooks/cjs/useAnimationFrame.js b/node_modules/@restart/hooks/cjs/useAnimationFrame.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed8581b3ca64095cd07161442d31c11af83fb77b
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useAnimationFrame.js
@@ -0,0 +1,52 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useAnimationFrame;
+var _react = require("react");
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
+var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Returns a controller object for requesting and cancelling an animation freame that is properly cleaned up
+ * once the component unmounts. New requests cancel and replace existing ones.
+ *
+ * ```ts
+ * const [style, setStyle] = useState({});
+ * const animationFrame = useAnimationFrame();
+ *
+ * const handleMouseMove = (e) => {
+ *   animationFrame.request(() => {
+ *     setStyle({ top: e.clientY, left: e.clientY })
+ *   })
+ * }
+ *
+ * const handleMouseUp = () => {
+ *   animationFrame.cancel()
+ * }
+ *
+ * return (
+ *   <div onMouseUp={handleMouseUp} onMouseMove={handleMouseMove}>
+ *     <Ball style={style} />
+ *   </div>
+ * )
+ * ```
+ */
+function useAnimationFrame() {
+  const isMounted = (0, _useMounted.default)();
+  const handle = (0, _react.useRef)();
+  const cancel = () => {
+    if (handle.current != null) {
+      cancelAnimationFrame(handle.current);
+    }
+  };
+  (0, _useWillUnmount.default)(cancel);
+  return (0, _useStableMemo.default)(() => ({
+    request(cancelPrevious, fn) {
+      if (!isMounted()) return;
+      if (cancelPrevious) cancel();
+      handle.current = requestAnimationFrame(fn || cancelPrevious);
+    },
+    cancel
+  }), []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useBreakpoint.d.ts b/node_modules/@restart/hooks/cjs/useBreakpoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9f245ba7dd63de0c91e3691cf1471aac8f26a429
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useBreakpoint.d.ts
@@ -0,0 +1,35 @@
+export type BreakpointDirection = 'up' | 'down' | true;
+export type BreakpointMap<TKey extends string> = Partial<Record<TKey, BreakpointDirection>>;
+/**
+ * Create a responsive hook we a set of breakpoint names and widths.
+ * You can use any valid css units as well as a numbers (for pixels).
+ *
+ * **NOTE:** The object key order is important! it's assumed to be in order from smallest to largest
+ *
+ * ```ts
+ * const useBreakpoint = createBreakpointHook({
+ *  xs: 0,
+ *  sm: 576,
+ *  md: 768,
+ *  lg: 992,
+ *  xl: 1200,
+ * })
+ * ```
+ *
+ * **Watch out!** using string values will sometimes construct media queries using css `calc()` which
+ * is NOT supported in media queries by all browsers at the moment. use numbers for
+ * the widest range of browser support.
+ *
+ * @param breakpointValues A object hash of names to breakpoint dimensions
+ */
+export declare function createBreakpointHook<TKey extends string>(breakpointValues: Record<TKey, string | number>): {
+    (breakpointMap: BreakpointMap<TKey>, window?: Window): boolean;
+    (breakpoint: TKey, direction?: BreakpointDirection, window?: Window): boolean;
+};
+export type DefaultBreakpoints = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
+export type DefaultBreakpointMap = BreakpointMap<DefaultBreakpoints>;
+declare const useBreakpoint: {
+    (breakpointMap: Partial<Record<DefaultBreakpoints, BreakpointDirection>>, window?: Window): boolean;
+    (breakpoint: DefaultBreakpoints, direction?: BreakpointDirection, window?: Window): boolean;
+};
+export default useBreakpoint;
diff --git a/node_modules/@restart/hooks/cjs/useBreakpoint.js b/node_modules/@restart/hooks/cjs/useBreakpoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f6fc679520b672c18a8f6c653930dc6e510f64c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useBreakpoint.js
@@ -0,0 +1,123 @@
+"use strict";
+
+exports.__esModule = true;
+exports.createBreakpointHook = createBreakpointHook;
+exports.default = void 0;
+var _useMediaQuery = _interopRequireDefault(require("./useMediaQuery"));
+var _react = require("react");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Create a responsive hook we a set of breakpoint names and widths.
+ * You can use any valid css units as well as a numbers (for pixels).
+ *
+ * **NOTE:** The object key order is important! it's assumed to be in order from smallest to largest
+ *
+ * ```ts
+ * const useBreakpoint = createBreakpointHook({
+ *  xs: 0,
+ *  sm: 576,
+ *  md: 768,
+ *  lg: 992,
+ *  xl: 1200,
+ * })
+ * ```
+ *
+ * **Watch out!** using string values will sometimes construct media queries using css `calc()` which
+ * is NOT supported in media queries by all browsers at the moment. use numbers for
+ * the widest range of browser support.
+ *
+ * @param breakpointValues A object hash of names to breakpoint dimensions
+ */
+function createBreakpointHook(breakpointValues) {
+  const names = Object.keys(breakpointValues);
+  function and(query, next) {
+    if (query === next) {
+      return next;
+    }
+    return query ? `${query} and ${next}` : next;
+  }
+  function getNext(breakpoint) {
+    return names[Math.min(names.indexOf(breakpoint) + 1, names.length - 1)];
+  }
+  function getMaxQuery(breakpoint) {
+    const next = getNext(breakpoint);
+    let value = breakpointValues[next];
+    if (typeof value === 'number') value = `${value - 0.2}px`;else value = `calc(${value} - 0.2px)`;
+    return `(max-width: ${value})`;
+  }
+  function getMinQuery(breakpoint) {
+    let value = breakpointValues[breakpoint];
+    if (typeof value === 'number') {
+      value = `${value}px`;
+    }
+    return `(min-width: ${value})`;
+  }
+
+  /**
+   * Match a set of breakpoints
+   *
+   * ```tsx
+   * const MidSizeOnly = () => {
+   *   const isMid = useBreakpoint({ lg: 'down', sm: 'up' });
+   *
+   *   if (isMid) return <div>On a Reasonable sized Screen!</div>
+   *   return null;
+   * }
+   * ```
+   * @param breakpointMap An object map of breakpoints and directions, queries are constructed using "and" to join
+   * breakpoints together
+   * @param window Optionally specify the target window to match against (useful when rendering into iframes)
+   */
+
+  /**
+   * Match a single breakpoint exactly, up, or down.
+   *
+   * ```tsx
+   * const PhoneOnly = () => {
+   *   const isSmall = useBreakpoint('sm', 'down');
+   *
+   *   if (isSmall) return <div>On a Small Screen!</div>
+   *   return null;
+   * }
+   * ```
+   *
+   * @param breakpoint The breakpoint key
+   * @param direction A direction 'up' for a max, 'down' for min, true to match only the breakpoint
+   * @param window Optionally specify the target window to match against (useful when rendering into iframes)
+   */
+
+  function useBreakpoint(breakpointOrMap, direction, window) {
+    let breakpointMap;
+    if (typeof breakpointOrMap === 'object') {
+      breakpointMap = breakpointOrMap;
+      window = direction;
+      direction = true;
+    } else {
+      direction = direction || true;
+      breakpointMap = {
+        [breakpointOrMap]: direction
+      };
+    }
+    let query = (0, _react.useMemo)(() => Object.entries(breakpointMap).reduce((query, [key, direction]) => {
+      if (direction === 'up' || direction === true) {
+        query = and(query, getMinQuery(key));
+      }
+      if (direction === 'down' || direction === true) {
+        query = and(query, getMaxQuery(key));
+      }
+      return query;
+    }, ''), [JSON.stringify(breakpointMap)]);
+    return (0, _useMediaQuery.default)(query, window);
+  }
+  return useBreakpoint;
+}
+const useBreakpoint = createBreakpointHook({
+  xs: 0,
+  sm: 576,
+  md: 768,
+  lg: 992,
+  xl: 1200,
+  xxl: 1400
+});
+var _default = useBreakpoint;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useCallbackRef.d.ts b/node_modules/@restart/hooks/cjs/useCallbackRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9a8a73884a66cf749c2089cbb6439d6dbcb9551
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCallbackRef.d.ts
@@ -0,0 +1,28 @@
+/**
+ * A convenience hook around `useState` designed to be paired with
+ * the component [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) api.
+ * Callback refs are useful over `useRef()` when you need to respond to the ref being set
+ * instead of lazily accessing it in an effect.
+ *
+ * ```ts
+ * const [element, attachRef] = useCallbackRef<HTMLDivElement>()
+ *
+ * useEffect(() => {
+ *   if (!element) return
+ *
+ *   const calendar = new FullCalendar.Calendar(element)
+ *
+ *   return () => {
+ *     calendar.destroy()
+ *   }
+ * }, [element])
+ *
+ * return <div ref={attachRef} />
+ * ```
+ *
+ * @category refs
+ */
+export default function useCallbackRef<TValue = unknown>(): [
+    TValue | null,
+    (ref: TValue | null) => void
+];
diff --git a/node_modules/@restart/hooks/cjs/useCallbackRef.js b/node_modules/@restart/hooks/cjs/useCallbackRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..9b1a528461655852353eb59401d7633d2eb1d7b2
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCallbackRef.js
@@ -0,0 +1,32 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useCallbackRef;
+var _react = require("react");
+/**
+ * A convenience hook around `useState` designed to be paired with
+ * the component [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) api.
+ * Callback refs are useful over `useRef()` when you need to respond to the ref being set
+ * instead of lazily accessing it in an effect.
+ *
+ * ```ts
+ * const [element, attachRef] = useCallbackRef<HTMLDivElement>()
+ *
+ * useEffect(() => {
+ *   if (!element) return
+ *
+ *   const calendar = new FullCalendar.Calendar(element)
+ *
+ *   return () => {
+ *     calendar.destroy()
+ *   }
+ * }, [element])
+ *
+ * return <div ref={attachRef} />
+ * ```
+ *
+ * @category refs
+ */
+function useCallbackRef() {
+  return (0, _react.useState)(null);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useCommittedRef.d.ts b/node_modules/@restart/hooks/cjs/useCommittedRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40eab97bc04c58ce4dfe10342ac4552c4bbb375c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCommittedRef.d.ts
@@ -0,0 +1,12 @@
+/// <reference types="react" />
+/**
+ * Creates a `Ref` whose value is updated in an effect, ensuring the most recent
+ * value is the one rendered with. Generally only required for Concurrent mode usage
+ * where previous work in `render()` may be discarded before being used.
+ *
+ * This is safe to access in an event handler.
+ *
+ * @param value The `Ref` value
+ */
+declare function useCommittedRef<TValue>(value: TValue): React.MutableRefObject<TValue>;
+export default useCommittedRef;
diff --git a/node_modules/@restart/hooks/cjs/useCommittedRef.js b/node_modules/@restart/hooks/cjs/useCommittedRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..8195643d2b97e587e118bec5aafa19e0ba2b7a1c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCommittedRef.js
@@ -0,0 +1,23 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+/**
+ * Creates a `Ref` whose value is updated in an effect, ensuring the most recent
+ * value is the one rendered with. Generally only required for Concurrent mode usage
+ * where previous work in `render()` may be discarded before being used.
+ *
+ * This is safe to access in an event handler.
+ *
+ * @param value The `Ref` value
+ */
+function useCommittedRef(value) {
+  const ref = (0, _react.useRef)(value);
+  (0, _react.useEffect)(() => {
+    ref.current = value;
+  }, [value]);
+  return ref;
+}
+var _default = useCommittedRef;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useCustomEffect.d.ts b/node_modules/@restart/hooks/cjs/useCustomEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9fbe7a11a4aad9dea1e790abc3e287abe5919fa
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCustomEffect.d.ts
@@ -0,0 +1,26 @@
+import { DependencyList, EffectCallback } from 'react';
+export type EffectHook = (effect: EffectCallback, deps?: DependencyList) => void;
+export type IsEqual<TDeps extends DependencyList> = (nextDeps: TDeps, prevDeps: TDeps) => boolean;
+export type CustomEffectOptions<TDeps extends DependencyList> = {
+    isEqual: IsEqual<TDeps>;
+    effectHook?: EffectHook;
+};
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param isEqual A function comparing the next and previous dependencyLists
+ */
+declare function useCustomEffect<TDeps extends DependencyList = DependencyList>(effect: EffectCallback, dependencies: TDeps, isEqual: IsEqual<TDeps>): void;
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param options
+ * @param options.isEqual A function comparing the next and previous dependencyLists
+ * @param options.effectHook the underlying effect hook used, defaults to useEffect
+ */
+declare function useCustomEffect<TDeps extends DependencyList = DependencyList>(effect: EffectCallback, dependencies: TDeps, options: CustomEffectOptions<TDeps>): void;
+export default useCustomEffect;
diff --git a/node_modules/@restart/hooks/cjs/useCustomEffect.js b/node_modules/@restart/hooks/cjs/useCustomEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..52780cd4f40041606cd5a80cbe096fd47d0e2e33
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useCustomEffect.js
@@ -0,0 +1,56 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param isEqual A function comparing the next and previous dependencyLists
+ */
+
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param options
+ * @param options.isEqual A function comparing the next and previous dependencyLists
+ * @param options.effectHook the underlying effect hook used, defaults to useEffect
+ */
+
+function useCustomEffect(effect, dependencies, isEqualOrOptions) {
+  const isMounted = (0, _useMounted.default)();
+  const {
+    isEqual,
+    effectHook = _react.useEffect
+  } = typeof isEqualOrOptions === 'function' ? {
+    isEqual: isEqualOrOptions
+  } : isEqualOrOptions;
+  const dependenciesRef = (0, _react.useRef)();
+  dependenciesRef.current = dependencies;
+  const cleanupRef = (0, _react.useRef)(null);
+  effectHook(() => {
+    // If the ref the is `null` it's either the first effect or the last effect
+    // ran and was cleared, meaning _this_ update should run, b/c the equality
+    // check failed on in the cleanup of the last effect.
+    if (cleanupRef.current === null) {
+      const cleanup = effect();
+      cleanupRef.current = () => {
+        if (isMounted() && isEqual(dependenciesRef.current, dependencies)) {
+          return;
+        }
+        cleanupRef.current = null;
+        if (cleanup) cleanup();
+      };
+    }
+    return cleanupRef.current;
+  });
+  (0, _react.useDebugValue)(effect);
+}
+var _default = useCustomEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedCallback.d.ts b/node_modules/@restart/hooks/cjs/useDebouncedCallback.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..199c4a52b9aee02ad8b05b878fdd71365493fdcc
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedCallback.d.ts
@@ -0,0 +1,32 @@
+export interface UseDebouncedCallbackOptions {
+    wait: number;
+    leading?: boolean;
+    trailing?: boolean;
+    maxWait?: number;
+}
+export interface UseDebouncedCallbackOptionsLeading extends UseDebouncedCallbackOptions {
+    leading: true;
+}
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+declare function useDebouncedCallback<TCallback extends (...args: any[]) => any>(fn: TCallback, options: UseDebouncedCallbackOptionsLeading): (...args: Parameters<TCallback>) => ReturnType<TCallback>;
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+declare function useDebouncedCallback<TCallback extends (...args: any[]) => any>(fn: TCallback, waitOrOptions: number | UseDebouncedCallbackOptions): (...args: Parameters<TCallback>) => ReturnType<TCallback> | undefined;
+export default useDebouncedCallback;
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedCallback.js b/node_modules/@restart/hooks/cjs/useDebouncedCallback.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1a848e8d6fae2c768bc621480cc0f7a0c3f890c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedCallback.js
@@ -0,0 +1,136 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useTimeout = _interopRequireDefault(require("./useTimeout"));
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+
+function useDebouncedCallback(fn, waitOrOptions) {
+  const lastCallTimeRef = (0, _react.useRef)(null);
+  const lastInvokeTimeRef = (0, _react.useRef)(0);
+  const returnValueRef = (0, _react.useRef)();
+  const isTimerSetRef = (0, _react.useRef)(false);
+  const lastArgsRef = (0, _react.useRef)(null);
+  // Use any to bypass type issue with setTimeout.
+  const timerRef = (0, _react.useRef)(0);
+  const handleCallback = (0, _useEventCallback.default)(fn);
+  const {
+    wait,
+    maxWait,
+    leading = false,
+    trailing = true
+  } = typeof waitOrOptions === 'number' ? {
+    wait: waitOrOptions
+  } : waitOrOptions;
+  const timeout = (0, _useTimeout.default)();
+  (0, _useWillUnmount.default)(() => {
+    clearTimeout(timerRef.current);
+    isTimerSetRef.current = false;
+  });
+  return (0, _react.useMemo)(() => {
+    const hasMaxWait = !!maxWait;
+    function leadingEdge(time) {
+      // Reset any `maxWait` timer.
+      lastInvokeTimeRef.current = time;
+
+      // Start the timer for the trailing edge.
+      isTimerSetRef.current = true;
+      timeout.set(timerExpired, wait);
+      if (!leading) {
+        return returnValueRef.current;
+      }
+      return invokeFunc(time);
+    }
+    function trailingEdge(time) {
+      isTimerSetRef.current = false;
+
+      // Only invoke if we have `lastArgs` which means `func` has been
+      // debounced at least once.
+      if (trailing && lastArgsRef.current) {
+        return invokeFunc(time);
+      }
+      lastArgsRef.current = null;
+      return returnValueRef.current;
+    }
+    function timerExpired() {
+      var _lastCallTimeRef$curr;
+      var time = Date.now();
+      if (shouldInvoke(time)) {
+        return trailingEdge(time);
+      }
+      const timeSinceLastCall = time - ((_lastCallTimeRef$curr = lastCallTimeRef.current) != null ? _lastCallTimeRef$curr : 0);
+      const timeSinceLastInvoke = time - lastInvokeTimeRef.current;
+      const timeWaiting = wait - timeSinceLastCall;
+
+      // Restart the timer.
+      timeout.set(timerExpired, hasMaxWait ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting);
+    }
+    function invokeFunc(time) {
+      var _lastArgsRef$current;
+      const args = (_lastArgsRef$current = lastArgsRef.current) != null ? _lastArgsRef$current : [];
+      lastArgsRef.current = null;
+      lastInvokeTimeRef.current = time;
+      const retValue = handleCallback(...args);
+      returnValueRef.current = retValue;
+      return retValue;
+    }
+    function shouldInvoke(time) {
+      var _lastCallTimeRef$curr2;
+      const timeSinceLastCall = time - ((_lastCallTimeRef$curr2 = lastCallTimeRef.current) != null ? _lastCallTimeRef$curr2 : 0);
+      const timeSinceLastInvoke = time - lastInvokeTimeRef.current;
+
+      // Either this is the first call, activity has stopped and we're at the
+      // trailing edge, the system time has gone backwards and we're treating
+      // it as the trailing edge, or we've hit the `maxWait` limit.
+      return lastCallTimeRef.current === null || timeSinceLastCall >= wait || timeSinceLastCall < 0 || hasMaxWait && timeSinceLastInvoke >= maxWait;
+    }
+    return (...args) => {
+      const time = Date.now();
+      const isInvoking = shouldInvoke(time);
+      lastArgsRef.current = args;
+      lastCallTimeRef.current = time;
+      if (isInvoking) {
+        if (!isTimerSetRef.current) {
+          return leadingEdge(lastCallTimeRef.current);
+        }
+        if (hasMaxWait) {
+          // Handle invocations in a tight loop.
+          isTimerSetRef.current = true;
+          timerRef.current = setTimeout(timerExpired, wait);
+          return invokeFunc(lastCallTimeRef.current);
+        }
+      }
+      if (!isTimerSetRef.current) {
+        isTimerSetRef.current = true;
+        timerRef.current = setTimeout(timerExpired, wait);
+      }
+      return returnValueRef.current;
+    };
+  }, [handleCallback, wait, maxWait, leading, trailing]);
+}
+var _default = useDebouncedCallback;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedState.d.ts b/node_modules/@restart/hooks/cjs/useDebouncedState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6eed6668a86c02f245324954a2b37d908f6b79eb
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedState.d.ts
@@ -0,0 +1,18 @@
+import { Dispatch, SetStateAction } from 'react';
+import { UseDebouncedCallbackOptions } from './useDebouncedCallback';
+/**
+ * Similar to `useState`, except the setter function is debounced by
+ * the specified delay. Unlike `useState`, the returned setter is not "pure" having
+ * the side effect of scheduling an update in a timeout, which makes it unsafe to call
+ * inside of the component render phase.
+ *
+ * ```ts
+ * const [value, setValue] = useDebouncedState('test', 500)
+ *
+ * setValue('test2')
+ * ```
+ *
+ * @param initialState initial state value
+ * @param delayOrOptions The milliseconds delay before a new value is set, or options object
+ */
+export default function useDebouncedState<T>(initialState: T | (() => T), delayOrOptions: number | UseDebouncedCallbackOptions): [T, Dispatch<SetStateAction<T>>];
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedState.js b/node_modules/@restart/hooks/cjs/useDebouncedState.js
new file mode 100644
index 0000000000000000000000000000000000000000..d2534771a3218b81e3b9bec791006a16322f6753
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedState.js
@@ -0,0 +1,27 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useDebouncedState;
+var _react = require("react");
+var _useDebouncedCallback = _interopRequireDefault(require("./useDebouncedCallback"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Similar to `useState`, except the setter function is debounced by
+ * the specified delay. Unlike `useState`, the returned setter is not "pure" having
+ * the side effect of scheduling an update in a timeout, which makes it unsafe to call
+ * inside of the component render phase.
+ *
+ * ```ts
+ * const [value, setValue] = useDebouncedState('test', 500)
+ *
+ * setValue('test2')
+ * ```
+ *
+ * @param initialState initial state value
+ * @param delayOrOptions The milliseconds delay before a new value is set, or options object
+ */
+function useDebouncedState(initialState, delayOrOptions) {
+  const [state, setState] = (0, _react.useState)(initialState);
+  const debouncedSetState = (0, _useDebouncedCallback.default)(setState, delayOrOptions);
+  return [state, debouncedSetState];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedValue.d.ts b/node_modules/@restart/hooks/cjs/useDebouncedValue.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91e1c8ce0b16818d1f7ae1ebaae39d83e8a12ed7
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedValue.d.ts
@@ -0,0 +1,15 @@
+import { UseDebouncedCallbackOptions } from './useDebouncedCallback';
+export type UseDebouncedValueOptions = UseDebouncedCallbackOptions & {
+    isEqual?: (a: any, b: any) => boolean;
+};
+/**
+ * Debounce a value change by a specified number of milliseconds. Useful
+ * when you want need to trigger a change based on a value change, but want
+ * to defer changes until the changes reach some level of infrequency.
+ *
+ * @param value
+ * @param waitOrOptions
+ * @returns
+ */
+declare function useDebouncedValue<TValue>(value: TValue, waitOrOptions?: number | UseDebouncedValueOptions): TValue;
+export default useDebouncedValue;
diff --git a/node_modules/@restart/hooks/cjs/useDebouncedValue.js b/node_modules/@restart/hooks/cjs/useDebouncedValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4376c4e29663f8b73ea5d2b0d4bcffa21aef552
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useDebouncedValue.js
@@ -0,0 +1,32 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useDebouncedState = _interopRequireDefault(require("./useDebouncedState"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const defaultIsEqual = (a, b) => a === b;
+/**
+ * Debounce a value change by a specified number of milliseconds. Useful
+ * when you want need to trigger a change based on a value change, but want
+ * to defer changes until the changes reach some level of infrequency.
+ *
+ * @param value
+ * @param waitOrOptions
+ * @returns
+ */
+function useDebouncedValue(value, waitOrOptions = 500) {
+  const previousValueRef = (0, _react.useRef)(value);
+  const isEqual = typeof waitOrOptions === 'object' ? waitOrOptions.isEqual || defaultIsEqual : defaultIsEqual;
+  const [debouncedValue, setDebouncedValue] = (0, _useDebouncedState.default)(value, waitOrOptions);
+  (0, _react.useDebugValue)(debouncedValue);
+  (0, _react.useEffect)(() => {
+    if (!isEqual || !isEqual(previousValueRef.current, value)) {
+      previousValueRef.current = value;
+      setDebouncedValue(value);
+    }
+  });
+  return debouncedValue;
+}
+var _default = useDebouncedValue;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useEventCallback.d.ts b/node_modules/@restart/hooks/cjs/useEventCallback.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6ef9082d98ea05275fa5f5eed10949e9c3fc34b7
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useEventCallback.d.ts
@@ -0,0 +1 @@
+export default function useEventCallback<TCallback extends (...args: any[]) => any>(fn?: TCallback | null): TCallback;
diff --git a/node_modules/@restart/hooks/cjs/useEventCallback.js b/node_modules/@restart/hooks/cjs/useEventCallback.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ecaaa0d33d9e4a0c3a2179b465021c899c34448
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useEventCallback.js
@@ -0,0 +1,13 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useEventCallback;
+var _react = require("react");
+var _useCommittedRef = _interopRequireDefault(require("./useCommittedRef"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function useEventCallback(fn) {
+  const ref = (0, _useCommittedRef.default)(fn);
+  return (0, _react.useCallback)(function (...args) {
+    return ref.current && ref.current(...args);
+  }, [ref]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useEventListener.d.ts b/node_modules/@restart/hooks/cjs/useEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..24c6e9b305eed77841dc10ceb38b73a84958d0aa
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useEventListener.d.ts
@@ -0,0 +1,12 @@
+type EventHandler<T, K extends keyof DocumentEventMap> = (this: T, ev: DocumentEventMap[K]) => any;
+/**
+ * Attaches an event handler outside directly to specified DOM element
+ * bypassing the react synthetic event system.
+ *
+ * @param element The target to listen for events on
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useEventListener<T extends Element | Document | Window, K extends keyof DocumentEventMap>(eventTarget: T | (() => T), event: K, listener: EventHandler<T, K>, capture?: boolean | AddEventListenerOptions): void;
+export {};
diff --git a/node_modules/@restart/hooks/cjs/useEventListener.js b/node_modules/@restart/hooks/cjs/useEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c33a1dcde0e4b60e130710e45360c0a8dca3d3c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useEventListener.js
@@ -0,0 +1,24 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useEventListener;
+var _react = require("react");
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Attaches an event handler outside directly to specified DOM element
+ * bypassing the react synthetic event system.
+ *
+ * @param element The target to listen for events on
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+function useEventListener(eventTarget, event, listener, capture = false) {
+  const handler = (0, _useEventCallback.default)(listener);
+  (0, _react.useEffect)(() => {
+    const target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
+    target.addEventListener(event, handler, capture);
+    return () => target.removeEventListener(event, handler, capture);
+  }, [eventTarget]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useFocusManager.d.ts b/node_modules/@restart/hooks/cjs/useFocusManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8c9a55eee429e3139975108569905bbcaa938250
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useFocusManager.d.ts
@@ -0,0 +1,50 @@
+/// <reference types="react" />
+export interface FocusManagerOptions {
+    /**
+     * A callback fired when focus shifts. returning `false` will prevent
+     * handling the focus event
+     */
+    willHandle?(focused: boolean, event: React.FocusEvent): boolean | void;
+    /**
+     * A callback fired after focus is handled but before onChange is called
+     */
+    didHandle?(focused: boolean, event: React.FocusEvent): void;
+    /**
+     * A callback fired after focus has changed
+     */
+    onChange?(focused: boolean, event: React.FocusEvent): void;
+    /**
+     * When true, the event handlers will not report focus changes
+     */
+    isDisabled: () => boolean;
+}
+export interface FocusController {
+    onBlur: (event: any) => void;
+    onFocus: (event: any) => void;
+}
+/**
+ * useFocusManager provides a way to track and manage focus as it moves around
+ * a container element. An `onChange` is fired when focus enters or leaves the
+ * element, but not when it moves around inside the element, similar to
+ * `pointerenter` and `pointerleave` DOM events.
+ *
+ * ```tsx
+ * const [focused, setFocusState] = useState(false)
+ *
+ * const { onBlur, onFocus } = useFocusManager({
+ *   onChange: nextFocused => setFocusState(nextFocused)
+ * })
+ *
+ * return (
+ *   <div tabIndex="-1" onFocus={onFocus} onBlur={onBlur}>
+ *     {String(focused)}
+ *     <input />
+ *     <input />
+ *
+ *     <button>A button</button>
+ *   </div>
+ * ```
+ *
+ * @returns a memoized FocusController containing event handlers
+ */
+export default function useFocusManager(opts: FocusManagerOptions): FocusController;
diff --git a/node_modules/@restart/hooks/cjs/useFocusManager.js b/node_modules/@restart/hooks/cjs/useFocusManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1fafea7be12b872bb6c2d9d5bc712093f36ca19
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useFocusManager.js
@@ -0,0 +1,74 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useFocusManager;
+var _react = require("react");
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * useFocusManager provides a way to track and manage focus as it moves around
+ * a container element. An `onChange` is fired when focus enters or leaves the
+ * element, but not when it moves around inside the element, similar to
+ * `pointerenter` and `pointerleave` DOM events.
+ *
+ * ```tsx
+ * const [focused, setFocusState] = useState(false)
+ *
+ * const { onBlur, onFocus } = useFocusManager({
+ *   onChange: nextFocused => setFocusState(nextFocused)
+ * })
+ *
+ * return (
+ *   <div tabIndex="-1" onFocus={onFocus} onBlur={onBlur}>
+ *     {String(focused)}
+ *     <input />
+ *     <input />
+ *
+ *     <button>A button</button>
+ *   </div>
+ * ```
+ *
+ * @returns a memoized FocusController containing event handlers
+ */
+function useFocusManager(opts) {
+  const isMounted = (0, _useMounted.default)();
+  const lastFocused = (0, _react.useRef)();
+  const handle = (0, _react.useRef)();
+  const willHandle = (0, _useEventCallback.default)(opts.willHandle);
+  const didHandle = (0, _useEventCallback.default)(opts.didHandle);
+  const onChange = (0, _useEventCallback.default)(opts.onChange);
+  const isDisabled = (0, _useEventCallback.default)(opts.isDisabled);
+  const handleChange = (0, _react.useCallback)((focused, event) => {
+    if (focused !== lastFocused.current) {
+      didHandle == null ? void 0 : didHandle(focused, event);
+
+      // only fire a change when unmounted if its a blur
+      if (isMounted() || !focused) {
+        lastFocused.current = focused;
+        onChange == null ? void 0 : onChange(focused, event);
+      }
+    }
+  }, [isMounted, didHandle, onChange, lastFocused]);
+  const handleFocusChange = (0, _react.useCallback)((focused, event) => {
+    if (isDisabled()) return;
+    if (event && event.persist) event.persist();
+    if ((willHandle == null ? void 0 : willHandle(focused, event)) === false) {
+      return;
+    }
+    clearTimeout(handle.current);
+    if (focused) {
+      handleChange(focused, event);
+    } else {
+      handle.current = window.setTimeout(() => handleChange(focused, event));
+    }
+  }, [willHandle, handleChange]);
+  return (0, _react.useMemo)(() => ({
+    onBlur: event => {
+      handleFocusChange(false, event);
+    },
+    onFocus: event => {
+      handleFocusChange(true, event);
+    }
+  }), [handleFocusChange]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useForceUpdate.d.ts b/node_modules/@restart/hooks/cjs/useForceUpdate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e0dea058b7e665072055d6691982947d49addff3
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useForceUpdate.d.ts
@@ -0,0 +1,17 @@
+/**
+ * Returns a function that triggers a component update. the hook equivalent to
+ * `this.forceUpdate()` in a class component. In most cases using a state value directly
+ * is preferable but may be required in some advanced usages of refs for interop or
+ * when direct DOM manipulation is required.
+ *
+ * ```ts
+ * const forceUpdate = useForceUpdate();
+ *
+ * const updateOnClick = useCallback(() => {
+ *  forceUpdate()
+ * }, [forceUpdate])
+ *
+ * return <button type="button" onClick={updateOnClick}>Hi there</button>
+ * ```
+ */
+export default function useForceUpdate(): () => void;
diff --git a/node_modules/@restart/hooks/cjs/useForceUpdate.js b/node_modules/@restart/hooks/cjs/useForceUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..5782581cb0ac3e44491beca71c852f1e23fbb366
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useForceUpdate.js
@@ -0,0 +1,27 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useForceUpdate;
+var _react = require("react");
+/**
+ * Returns a function that triggers a component update. the hook equivalent to
+ * `this.forceUpdate()` in a class component. In most cases using a state value directly
+ * is preferable but may be required in some advanced usages of refs for interop or
+ * when direct DOM manipulation is required.
+ *
+ * ```ts
+ * const forceUpdate = useForceUpdate();
+ *
+ * const updateOnClick = useCallback(() => {
+ *  forceUpdate()
+ * }, [forceUpdate])
+ *
+ * return <button type="button" onClick={updateOnClick}>Hi there</button>
+ * ```
+ */
+function useForceUpdate() {
+  // The toggling state value is designed to defeat React optimizations for skipping
+  // updates when they are strictly equal to the last state value
+  const [, dispatch] = (0, _react.useReducer)(state => !state, false);
+  return dispatch;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useGlobalListener.d.ts b/node_modules/@restart/hooks/cjs/useGlobalListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..35177290f45ad816f6971e58ffa99757399c46f2
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useGlobalListener.d.ts
@@ -0,0 +1,17 @@
+type DocumentEventHandler<K extends keyof DocumentEventMap> = (this: Document, ev: DocumentEventMap[K]) => any;
+/**
+ * Attaches an event handler outside directly to the `document`,
+ * bypassing the react synthetic event system.
+ *
+ * ```ts
+ * useGlobalListener('keydown', (event) => {
+ *  console.log(event.key)
+ * })
+ * ```
+ *
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useGlobalListener<K extends keyof DocumentEventMap>(event: K, handler: DocumentEventHandler<K>, capture?: boolean | AddEventListenerOptions): void;
+export {};
diff --git a/node_modules/@restart/hooks/cjs/useGlobalListener.js b/node_modules/@restart/hooks/cjs/useGlobalListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..57c4ba9258d67111e344a5cf61ca7529ca92daca
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useGlobalListener.js
@@ -0,0 +1,25 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useGlobalListener;
+var _useEventListener = _interopRequireDefault(require("./useEventListener"));
+var _react = require("react");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Attaches an event handler outside directly to the `document`,
+ * bypassing the react synthetic event system.
+ *
+ * ```ts
+ * useGlobalListener('keydown', (event) => {
+ *  console.log(event.key)
+ * })
+ * ```
+ *
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+function useGlobalListener(event, handler, capture = false) {
+  const documentTarget = (0, _react.useCallback)(() => document, []);
+  return (0, _useEventListener.default)(documentTarget, event, handler, capture);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useImage.d.ts b/node_modules/@restart/hooks/cjs/useImage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bb76fd42a247833ccbafda73c98bef745faa2dff
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useImage.d.ts
@@ -0,0 +1,31 @@
+type State = {
+    image: HTMLImageElement | null;
+    error: unknown | null;
+};
+/**
+ * Fetch and load an image for programatic use such as in a `<canvas>` element.
+ *
+ * @param imageOrUrl The `HtmlImageElement` or image url to load
+ * @param crossOrigin The `crossorigin` attribute to set
+ *
+ * ```ts
+ * const { image, error } = useImage('/static/kittens.png')
+ * const ref = useRef<HTMLCanvasElement>()
+ *
+ * useEffect(() => {
+ *   const ctx = ref.current.getContext('2d')
+ *
+ *   if (image) {
+ *     ctx.drawImage(image, 0, 0)
+ *   }
+ * }, [ref, image])
+ *
+ * return (
+ *   <>
+ *     {error && "there was a problem loading the image"}
+ *     <canvas ref={ref} />
+ *   </>
+ * ```
+ */
+export default function useImage(imageOrUrl?: string | HTMLImageElement | null | undefined, crossOrigin?: 'anonymous' | 'use-credentials' | string): State;
+export {};
diff --git a/node_modules/@restart/hooks/cjs/useImage.js b/node_modules/@restart/hooks/cjs/useImage.js
new file mode 100644
index 0000000000000000000000000000000000000000..61e7dc19a46a986d0fadb16325e2dfbf2b7990d6
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useImage.js
@@ -0,0 +1,73 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useImage;
+var _react = require("react");
+/**
+ * Fetch and load an image for programatic use such as in a `<canvas>` element.
+ *
+ * @param imageOrUrl The `HtmlImageElement` or image url to load
+ * @param crossOrigin The `crossorigin` attribute to set
+ *
+ * ```ts
+ * const { image, error } = useImage('/static/kittens.png')
+ * const ref = useRef<HTMLCanvasElement>()
+ *
+ * useEffect(() => {
+ *   const ctx = ref.current.getContext('2d')
+ *
+ *   if (image) {
+ *     ctx.drawImage(image, 0, 0)
+ *   }
+ * }, [ref, image])
+ *
+ * return (
+ *   <>
+ *     {error && "there was a problem loading the image"}
+ *     <canvas ref={ref} />
+ *   </>
+ * ```
+ */
+function useImage(imageOrUrl, crossOrigin) {
+  const [state, setState] = (0, _react.useState)({
+    image: null,
+    error: null
+  });
+  (0, _react.useEffect)(() => {
+    if (!imageOrUrl) return undefined;
+    let image;
+    if (typeof imageOrUrl === 'string') {
+      image = new Image();
+      if (crossOrigin) image.crossOrigin = crossOrigin;
+      image.src = imageOrUrl;
+    } else {
+      image = imageOrUrl;
+      if (image.complete && image.naturalHeight > 0) {
+        setState({
+          image,
+          error: null
+        });
+        return;
+      }
+    }
+    function onLoad() {
+      setState({
+        image,
+        error: null
+      });
+    }
+    function onError(error) {
+      setState({
+        image,
+        error
+      });
+    }
+    image.addEventListener('load', onLoad);
+    image.addEventListener('error', onError);
+    return () => {
+      image.removeEventListener('load', onLoad);
+      image.removeEventListener('error', onError);
+    };
+  }, [imageOrUrl, crossOrigin]);
+  return state;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.d.ts b/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0f2e001b509a3ebf86b17b67fa025fd7a5fde825
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.d.ts
@@ -0,0 +1,2 @@
+import useUpdateImmediateEffect from './useUpdateImmediateEffect';
+export default useUpdateImmediateEffect;
diff --git a/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.js b/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..72e2002d5a31cb3279a3c13e22c47618d055c8df
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useImmediateUpdateEffect.js
@@ -0,0 +1,8 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _useUpdateImmediateEffect = _interopRequireDefault(require("./useUpdateImmediateEffect"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+var _default = _useUpdateImmediateEffect.default;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useIntersectionObserver.d.ts b/node_modules/@restart/hooks/cjs/useIntersectionObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..84daea237a135623d8d13f6e1d58725644510da7
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIntersectionObserver.d.ts
@@ -0,0 +1,28 @@
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element that returns it's entries as they arrive.
+ *
+ * @param element The DOM element to observe
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ */
+declare function useIntersectionObserver<TElement extends Element>(element: TElement | null | undefined, options?: IntersectionObserverInit): IntersectionObserverEntry[];
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element. This overload does not trigger component updates when receiving new
+ * entries. This allows for finer grained performance optimizations by the consumer.
+ *
+ * @param element The DOM element to observe
+ * @param callback A listener for intersection updates.
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ *
+ */
+declare function useIntersectionObserver<TElement extends Element>(element: TElement | null | undefined, callback: IntersectionObserverCallback, options?: IntersectionObserverInit): void;
+export default useIntersectionObserver;
diff --git a/node_modules/@restart/hooks/cjs/useIntersectionObserver.js b/node_modules/@restart/hooks/cjs/useIntersectionObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..4fcd2e8652a685467b1eb24eb83e0762f858ff97
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIntersectionObserver.js
@@ -0,0 +1,70 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
+var _useIsomorphicEffect = _interopRequireDefault(require("./useIsomorphicEffect"));
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element that returns it's entries as they arrive.
+ *
+ * @param element The DOM element to observe
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ */
+
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element. This overload does not trigger component updates when receiving new
+ * entries. This allows for finer grained performance optimizations by the consumer.
+ *
+ * @param element The DOM element to observe
+ * @param callback A listener for intersection updates.
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ *
+ */
+
+function useIntersectionObserver(element, callbackOrOptions, maybeOptions) {
+  let callback;
+  let options;
+  if (typeof callbackOrOptions === 'function') {
+    callback = callbackOrOptions;
+    options = maybeOptions || {};
+  } else {
+    options = callbackOrOptions || {};
+  }
+  const {
+    threshold,
+    root,
+    rootMargin
+  } = options;
+  const [entries, setEntry] = (0, _react.useState)(null);
+  const handler = (0, _useEventCallback.default)(callback || setEntry);
+
+  // We wait for element to exist before constructing
+  const observer = (0, _useStableMemo.default)(() => root !== null && typeof IntersectionObserver !== 'undefined' && new IntersectionObserver(handler, {
+    threshold,
+    root,
+    rootMargin
+  }), [handler, root, rootMargin, threshold && JSON.stringify(threshold)]);
+  (0, _useIsomorphicEffect.default)(() => {
+    if (!element || !observer) return;
+    observer.observe(element);
+    return () => {
+      observer.unobserve(element);
+    };
+  }, [observer, element]);
+  return callback ? undefined : entries || [];
+}
+var _default = useIntersectionObserver;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useInterval.d.ts b/node_modules/@restart/hooks/cjs/useInterval.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..08fc9fc1344212b6c5047f4fd16b80b2da5e5c0d
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useInterval.d.ts
@@ -0,0 +1,61 @@
+/**
+ * Creates a `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  function Timer() {
+ *    const [timer, setTimer] = useState(0)
+ *    useInterval(() => setTimer(i => i + 1), 1000)
+ *
+ *    return <span>{timer} seconds past</span>
+ *  }
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ */
+declare function useInterval(fn: () => void, ms: number): void;
+/**
+ * Creates a pausable `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [paused, setPaused] = useState(false)
+ *  const [timer, setTimer] = useState(0)
+ *
+ *  useInterval(() => setTimer(i => i + 1), 1000, paused)
+ *
+ *  return (
+ *    <span>
+ *      {timer} seconds past
+ *
+ *      <button onClick={() => setPaused(p => !p)}>{paused ? 'Play' : 'Pause' }</button>
+ *    </span>
+ * )
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ */
+declare function useInterval(fn: () => void, ms: number, paused: boolean): void;
+/**
+ * Creates a pausable `setInterval` that _fires_ immediately and is
+ * properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [timer, setTimer] = useState(-1)
+ *  useInterval(() => setTimer(i => i + 1), 1000, false, true)
+ *
+ *  // will update to 0 on the first effect
+ *  return <span>{timer} seconds past</span>
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ * @param runImmediately Whether to run the function immediately on mount or unpause
+ * rather than waiting for the first interval to elapse
+ *
+
+ */
+declare function useInterval(fn: () => void, ms: number, paused: boolean, runImmediately: boolean): void;
+export default useInterval;
diff --git a/node_modules/@restart/hooks/cjs/useInterval.js b/node_modules/@restart/hooks/cjs/useInterval.js
new file mode 100644
index 0000000000000000000000000000000000000000..1172b46c89effe8ab5bc98407435b070964c28dd
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useInterval.js
@@ -0,0 +1,94 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useCommittedRef = _interopRequireDefault(require("./useCommittedRef"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Creates a `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  function Timer() {
+ *    const [timer, setTimer] = useState(0)
+ *    useInterval(() => setTimer(i => i + 1), 1000)
+ *
+ *    return <span>{timer} seconds past</span>
+ *  }
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ */
+
+/**
+ * Creates a pausable `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [paused, setPaused] = useState(false)
+ *  const [timer, setTimer] = useState(0)
+ *
+ *  useInterval(() => setTimer(i => i + 1), 1000, paused)
+ *
+ *  return (
+ *    <span>
+ *      {timer} seconds past
+ *
+ *      <button onClick={() => setPaused(p => !p)}>{paused ? 'Play' : 'Pause' }</button>
+ *    </span>
+ * )
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ */
+
+/**
+ * Creates a pausable `setInterval` that _fires_ immediately and is
+ * properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [timer, setTimer] = useState(-1)
+ *  useInterval(() => setTimer(i => i + 1), 1000, false, true)
+ *
+ *  // will update to 0 on the first effect
+ *  return <span>{timer} seconds past</span>
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ * @param runImmediately Whether to run the function immediately on mount or unpause
+ * rather than waiting for the first interval to elapse
+ *
+
+ */
+
+function useInterval(fn, ms, paused = false, runImmediately = false) {
+  let handle;
+  const fnRef = (0, _useCommittedRef.default)(fn);
+  // this ref is necessary b/c useEffect will sometimes miss a paused toggle
+  // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
+  const pausedRef = (0, _useCommittedRef.default)(paused);
+  const tick = () => {
+    if (pausedRef.current) return;
+    fnRef.current();
+    schedule(); // eslint-disable-line no-use-before-define
+  };
+
+  const schedule = () => {
+    clearTimeout(handle);
+    handle = setTimeout(tick, ms);
+  };
+  (0, _react.useEffect)(() => {
+    if (runImmediately) {
+      tick();
+    } else {
+      schedule();
+    }
+    return () => clearTimeout(handle);
+  }, [paused, runImmediately]);
+}
+var _default = useInterval;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.d.ts b/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..86307f2cf374b40e5368c604cc8abac8fbe482ca
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="react" />
+/**
+ * Returns ref that is `true` on the initial render and `false` on subsequent renders. It
+ * is StrictMode safe, so will reset correctly if the component is unmounted and remounted.
+ *
+ * This hook *must* be used before any effects that read it's value to be accurate.
+ */
+export default function useIsInitialRenderRef(): import("react").MutableRefObject<boolean>;
diff --git a/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.js b/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..d446ba680cd18a844582df7bf9c139652bec1f7a
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIsInitialRenderRef.js
@@ -0,0 +1,28 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useIsInitialRenderRef;
+var _react = require("react");
+/**
+ * Returns ref that is `true` on the initial render and `false` on subsequent renders. It
+ * is StrictMode safe, so will reset correctly if the component is unmounted and remounted.
+ *
+ * This hook *must* be used before any effects that read it's value to be accurate.
+ */
+function useIsInitialRenderRef() {
+  const effectCount = (0, _react.useRef)(0);
+  const isInitialRenderRef = (0, _react.useRef)(true);
+  (0, _react.useLayoutEffect)(() => {
+    effectCount.current += 1;
+    if (effectCount.current >= 2) {
+      isInitialRenderRef.current = false;
+    }
+  });
+
+  // Strict mode handling in React 18
+  (0, _react.useEffect)(() => () => {
+    effectCount.current = 0;
+    isInitialRenderRef.current = true;
+  }, []);
+  return isInitialRenderRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useIsomorphicEffect.d.ts b/node_modules/@restart/hooks/cjs/useIsomorphicEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d7711f742e2e455caa48e8614a3db391d4e1d6db
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIsomorphicEffect.d.ts
@@ -0,0 +1,11 @@
+import { useEffect } from 'react';
+/**
+ * Is `useLayoutEffect` in a DOM or React Native environment, otherwise resolves to useEffect
+ * Only useful to avoid the console warning.
+ *
+ * PREFER `useEffect` UNLESS YOU KNOW WHAT YOU ARE DOING.
+ *
+ * @category effects
+ */
+declare const _default: typeof useEffect;
+export default _default;
diff --git a/node_modules/@restart/hooks/cjs/useIsomorphicEffect.js b/node_modules/@restart/hooks/cjs/useIsomorphicEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7033e10193d9aada3f52645f1bc1b2e31e0570e
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useIsomorphicEffect.js
@@ -0,0 +1,22 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+const isReactNative = typeof global !== 'undefined' &&
+// @ts-ignore
+global.navigator &&
+// @ts-ignore
+global.navigator.product === 'ReactNative';
+const isDOM = typeof document !== 'undefined';
+
+/**
+ * Is `useLayoutEffect` in a DOM or React Native environment, otherwise resolves to useEffect
+ * Only useful to avoid the console warning.
+ *
+ * PREFER `useEffect` UNLESS YOU KNOW WHAT YOU ARE DOING.
+ *
+ * @category effects
+ */
+var _default = isDOM || isReactNative ? _react.useLayoutEffect : _react.useEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMap.d.ts b/node_modules/@restart/hooks/cjs/useMap.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9fe53e86695b901505e01b21940db9141277c62
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMap.d.ts
@@ -0,0 +1,31 @@
+export declare class ObservableMap<K, V> extends Map<K, V> {
+    private readonly listener;
+    constructor(listener: (map: ObservableMap<K, V>) => void, init?: Iterable<Readonly<[K, V]>>);
+    set(key: K, value: V): this;
+    delete(key: K): boolean;
+    clear(): void;
+}
+/**
+ * Create and return a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) that triggers rerenders when it's updated.
+ *
+ * ```tsx
+ * const customerAges = useMap<number>([
+ *  ['john', 24],
+ *  ['betsy', 25]
+ * ]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, ([name, age]) => (
+ *      <div>
+ *        {name}: {age}. <button onClick={() => ids.delete(name)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Map entries
+ */
+declare function useMap<K, V>(init?: Iterable<Readonly<[K, V]>>): ObservableMap<K, V>;
+export default useMap;
diff --git a/node_modules/@restart/hooks/cjs/useMap.js b/node_modules/@restart/hooks/cjs/useMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..38bbb9187164943e962c05b8d3561e20447e1bbd
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMap.js
@@ -0,0 +1,59 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.ObservableMap = void 0;
+var _useForceUpdate = _interopRequireDefault(require("./useForceUpdate"));
+var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+class ObservableMap extends Map {
+  constructor(listener, init) {
+    super(init);
+    this.listener = listener;
+  }
+  set(key, value) {
+    super.set(key, value);
+    // When initializing the Map, the base Map calls this.set() before the
+    // listener is assigned so it will be undefined
+    if (this.listener) this.listener(this);
+    return this;
+  }
+  delete(key) {
+    let result = super.delete(key);
+    this.listener(this);
+    return result;
+  }
+  clear() {
+    super.clear();
+    this.listener(this);
+  }
+}
+
+/**
+ * Create and return a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) that triggers rerenders when it's updated.
+ *
+ * ```tsx
+ * const customerAges = useMap<number>([
+ *  ['john', 24],
+ *  ['betsy', 25]
+ * ]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, ([name, age]) => (
+ *      <div>
+ *        {name}: {age}. <button onClick={() => ids.delete(name)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Map entries
+ */
+exports.ObservableMap = ObservableMap;
+function useMap(init) {
+  const forceUpdate = (0, _useForceUpdate.default)();
+  return (0, _useStableMemo.default)(() => new ObservableMap(forceUpdate, init), []);
+}
+var _default = useMap;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMediaQuery.d.ts b/node_modules/@restart/hooks/cjs/useMediaQuery.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b8373a2ab52ceb5b9769b5625a5519bb6cfb22e4
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMediaQuery.d.ts
@@ -0,0 +1,20 @@
+/**
+ * Match a media query and get updates as the match changes. The media string is
+ * passed directly to `window.matchMedia` and run as a Layout Effect, so initial
+ * matches are returned before the browser has a chance to paint.
+ *
+ * ```tsx
+ * function Page() {
+ *   const isWide = useMediaQuery('min-width: 1000px')
+ *
+ *   return isWide ? "very wide" : 'not so wide'
+ * }
+ * ```
+ *
+ * Media query lists are also reused globally, hook calls for the same query
+ * will only create a matcher once under the hood.
+ *
+ * @param query A media query
+ * @param targetWindow The window to match against, uses the globally available one as a default.
+ */
+export default function useMediaQuery(query: string | null, targetWindow?: Window | undefined): boolean;
diff --git a/node_modules/@restart/hooks/cjs/useMediaQuery.js b/node_modules/@restart/hooks/cjs/useMediaQuery.js
new file mode 100644
index 0000000000000000000000000000000000000000..e7ed951737a170cb59ca86f2f72e7f1a6c39af87
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMediaQuery.js
@@ -0,0 +1,65 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useMediaQuery;
+var _useIsomorphicEffect = _interopRequireDefault(require("./useIsomorphicEffect"));
+var _react = require("react");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const matchersByWindow = new WeakMap();
+const getMatcher = (query, targetWindow) => {
+  if (!query || !targetWindow) return undefined;
+  const matchers = matchersByWindow.get(targetWindow) || new Map();
+  matchersByWindow.set(targetWindow, matchers);
+  let mql = matchers.get(query);
+  if (!mql) {
+    mql = targetWindow.matchMedia(query);
+    mql.refCount = 0;
+    matchers.set(mql.media, mql);
+  }
+  return mql;
+};
+/**
+ * Match a media query and get updates as the match changes. The media string is
+ * passed directly to `window.matchMedia` and run as a Layout Effect, so initial
+ * matches are returned before the browser has a chance to paint.
+ *
+ * ```tsx
+ * function Page() {
+ *   const isWide = useMediaQuery('min-width: 1000px')
+ *
+ *   return isWide ? "very wide" : 'not so wide'
+ * }
+ * ```
+ *
+ * Media query lists are also reused globally, hook calls for the same query
+ * will only create a matcher once under the hood.
+ *
+ * @param query A media query
+ * @param targetWindow The window to match against, uses the globally available one as a default.
+ */
+function useMediaQuery(query, targetWindow = typeof window === 'undefined' ? undefined : window) {
+  const mql = getMatcher(query, targetWindow);
+  const [matches, setMatches] = (0, _react.useState)(() => mql ? mql.matches : false);
+  (0, _useIsomorphicEffect.default)(() => {
+    let mql = getMatcher(query, targetWindow);
+    if (!mql) {
+      return setMatches(false);
+    }
+    let matchers = matchersByWindow.get(targetWindow);
+    const handleChange = () => {
+      setMatches(mql.matches);
+    };
+    mql.refCount++;
+    mql.addListener(handleChange);
+    handleChange();
+    return () => {
+      mql.removeListener(handleChange);
+      mql.refCount--;
+      if (mql.refCount <= 0) {
+        matchers == null ? void 0 : matchers.delete(mql.media);
+      }
+      mql = undefined;
+    };
+  }, [query]);
+  return matches;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMergeState.d.ts b/node_modules/@restart/hooks/cjs/useMergeState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4516b285c8d8720be431fd018f2a6f5f17d5d078
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergeState.d.ts
@@ -0,0 +1,22 @@
+type Updater<TState> = (state: TState) => Partial<TState> | null;
+/**
+ * Updates state, partial updates are merged into existing state values
+ */
+export type MergeStateSetter<TState> = (update: Updater<TState> | Partial<TState> | null) => void;
+/**
+ * Mimics a React class component's state model, of having a single unified
+ * `state` object and an updater that merges updates into the existing state, as
+ * opposed to replacing it.
+ *
+ * ```js
+ * const [state, setState] = useMergeState({ name: 'Betsy', age: 24 })
+ *
+ * setState({ name: 'Johan' }) // { name: 'Johan', age: 24 }
+ *
+ * setState(state => ({ age: state.age + 10 })) // { name: 'Johan', age: 34 }
+ * ```
+ *
+ * @param initialState The initial state object
+ */
+export default function useMergeState<TState extends {}>(initialState: TState | (() => TState)): [TState, MergeStateSetter<TState>];
+export {};
diff --git a/node_modules/@restart/hooks/cjs/useMergeState.js b/node_modules/@restart/hooks/cjs/useMergeState.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb71d9c230899015db9b9a6f6c2662fc7b80456f
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergeState.js
@@ -0,0 +1,39 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useMergeState;
+var _react = require("react");
+/**
+ * Updates state, partial updates are merged into existing state values
+ */
+
+/**
+ * Mimics a React class component's state model, of having a single unified
+ * `state` object and an updater that merges updates into the existing state, as
+ * opposed to replacing it.
+ *
+ * ```js
+ * const [state, setState] = useMergeState({ name: 'Betsy', age: 24 })
+ *
+ * setState({ name: 'Johan' }) // { name: 'Johan', age: 24 }
+ *
+ * setState(state => ({ age: state.age + 10 })) // { name: 'Johan', age: 34 }
+ * ```
+ *
+ * @param initialState The initial state object
+ */
+function useMergeState(initialState) {
+  const [state, setState] = (0, _react.useState)(initialState);
+  const updater = (0, _react.useCallback)(update => {
+    if (update === null) return;
+    if (typeof update === 'function') {
+      setState(state => {
+        const nextState = update(state);
+        return nextState == null ? state : Object.assign({}, state, nextState);
+      });
+    } else {
+      setState(state => Object.assign({}, state, update));
+    }
+  }, [setState]);
+  return [state, updater];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMergeStateFromProps.d.ts b/node_modules/@restart/hooks/cjs/useMergeStateFromProps.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..10f44adf26a306702da4321fc0c7ba73bc3e01f5
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergeStateFromProps.d.ts
@@ -0,0 +1,4 @@
+import { MergeStateSetter } from './useMergeState';
+type Mapper<TProps, TState> = (props: TProps, state: TState) => null | Partial<TState>;
+export default function useMergeStateFromProps<TProps, TState extends {}>(props: TProps, gDSFP: Mapper<TProps, TState>, initialState: TState): [TState, MergeStateSetter<TState>];
+export {};
diff --git a/node_modules/@restart/hooks/cjs/useMergeStateFromProps.js b/node_modules/@restart/hooks/cjs/useMergeStateFromProps.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b9177efefd0f8ed8e706384caaa3a659a04bfde
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergeStateFromProps.js
@@ -0,0 +1,12 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useMergeStateFromProps;
+var _useMergeState = _interopRequireDefault(require("./useMergeState"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function useMergeStateFromProps(props, gDSFP, initialState) {
+  const [state, setState] = (0, _useMergeState.default)(initialState);
+  const nextState = gDSFP(props, state);
+  if (nextState !== null) setState(nextState);
+  return [state, setState];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMergedRefs.d.ts b/node_modules/@restart/hooks/cjs/useMergedRefs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa7e62c047cef0c9a55adbfda51d0b9b2bdb8a38
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergedRefs.d.ts
@@ -0,0 +1,22 @@
+/// <reference types="react" />
+type CallbackRef<T> = (ref: T | null) => void;
+type Ref<T> = React.MutableRefObject<T> | CallbackRef<T>;
+export declare function mergeRefs<T>(refA?: Ref<T> | null, refB?: Ref<T> | null): (value: T | null) => void;
+/**
+ * Create and returns a single callback ref composed from two other Refs.
+ *
+ * ```tsx
+ * const Button = React.forwardRef((props, ref) => {
+ *   const [element, attachRef] = useCallbackRef<HTMLButtonElement>();
+ *   const mergedRef = useMergedRefs(ref, attachRef);
+ *
+ *   return <button ref={mergedRef} {...props}/>
+ * })
+ * ```
+ *
+ * @param refA A Callback or mutable Ref
+ * @param refB A Callback or mutable Ref
+ * @category refs
+ */
+declare function useMergedRefs<T>(refA?: Ref<T> | null, refB?: Ref<T> | null): (value: T | null) => void;
+export default useMergedRefs;
diff --git a/node_modules/@restart/hooks/cjs/useMergedRefs.js b/node_modules/@restart/hooks/cjs/useMergedRefs.js
new file mode 100644
index 0000000000000000000000000000000000000000..b14763f003962f9d4445f660269aed90d2a1106a
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMergedRefs.js
@@ -0,0 +1,39 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.mergeRefs = mergeRefs;
+var _react = require("react");
+const toFnRef = ref => !ref || typeof ref === 'function' ? ref : value => {
+  ref.current = value;
+};
+function mergeRefs(refA, refB) {
+  const a = toFnRef(refA);
+  const b = toFnRef(refB);
+  return value => {
+    if (a) a(value);
+    if (b) b(value);
+  };
+}
+
+/**
+ * Create and returns a single callback ref composed from two other Refs.
+ *
+ * ```tsx
+ * const Button = React.forwardRef((props, ref) => {
+ *   const [element, attachRef] = useCallbackRef<HTMLButtonElement>();
+ *   const mergedRef = useMergedRefs(ref, attachRef);
+ *
+ *   return <button ref={mergedRef} {...props}/>
+ * })
+ * ```
+ *
+ * @param refA A Callback or mutable Ref
+ * @param refB A Callback or mutable Ref
+ * @category refs
+ */
+function useMergedRefs(refA, refB) {
+  return (0, _react.useMemo)(() => mergeRefs(refA, refB), [refA, refB]);
+}
+var _default = useMergedRefs;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMountEffect.d.ts b/node_modules/@restart/hooks/cjs/useMountEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..260a531af60e0495f473fbc22b178e2618584bd8
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMountEffect.d.ts
@@ -0,0 +1,20 @@
+import { EffectCallback } from 'react';
+/**
+ * Run's an effect on mount, and is cleaned up on unmount. Generally
+ * useful for interop with non-react plugins or components
+ *
+ * ```ts
+ *  useMountEffect(() => {
+ *    const plugin = $.myPlugin(ref.current)
+ *
+ *    return () => {
+ *      plugin.destroy()
+ *    }
+ *  })
+ * ```
+ * @param effect An effect to run on mount
+ *
+ *  @category effects
+ */
+declare function useMountEffect(effect: EffectCallback): void;
+export default useMountEffect;
diff --git a/node_modules/@restart/hooks/cjs/useMountEffect.js b/node_modules/@restart/hooks/cjs/useMountEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d09b4d3fbac4372c775593669dc39b25e589b4b
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMountEffect.js
@@ -0,0 +1,27 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+/**
+ * Run's an effect on mount, and is cleaned up on unmount. Generally
+ * useful for interop with non-react plugins or components
+ *
+ * ```ts
+ *  useMountEffect(() => {
+ *    const plugin = $.myPlugin(ref.current)
+ *
+ *    return () => {
+ *      plugin.destroy()
+ *    }
+ *  })
+ * ```
+ * @param effect An effect to run on mount
+ *
+ *  @category effects
+ */
+function useMountEffect(effect) {
+  return (0, _react.useEffect)(effect, []);
+}
+var _default = useMountEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMounted.d.ts b/node_modules/@restart/hooks/cjs/useMounted.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8eb5eb6d20e74eb4126a05abc3d4b14253a3d00c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMounted.d.ts
@@ -0,0 +1,21 @@
+/**
+ * Track whether a component is current mounted. Generally less preferable than
+ * properlly canceling effects so they don't run after a component is unmounted,
+ * but helpful in cases where that isn't feasible, such as a `Promise` resolution.
+ *
+ * @returns a function that returns the current isMounted state of the component
+ *
+ * ```ts
+ * const [data, setData] = useState(null)
+ * const isMounted = useMounted()
+ *
+ * useEffect(() => {
+ *   fetchdata().then((newData) => {
+ *      if (isMounted()) {
+ *        setData(newData);
+ *      }
+ *   })
+ * })
+ * ```
+ */
+export default function useMounted(): () => boolean;
diff --git a/node_modules/@restart/hooks/cjs/useMounted.js b/node_modules/@restart/hooks/cjs/useMounted.js
new file mode 100644
index 0000000000000000000000000000000000000000..90413ec1ae941b437108770dc00e5e5e10f61265
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMounted.js
@@ -0,0 +1,36 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useMounted;
+var _react = require("react");
+/**
+ * Track whether a component is current mounted. Generally less preferable than
+ * properlly canceling effects so they don't run after a component is unmounted,
+ * but helpful in cases where that isn't feasible, such as a `Promise` resolution.
+ *
+ * @returns a function that returns the current isMounted state of the component
+ *
+ * ```ts
+ * const [data, setData] = useState(null)
+ * const isMounted = useMounted()
+ *
+ * useEffect(() => {
+ *   fetchdata().then((newData) => {
+ *      if (isMounted()) {
+ *        setData(newData);
+ *      }
+ *   })
+ * })
+ * ```
+ */
+function useMounted() {
+  const mounted = (0, _react.useRef)(true);
+  const isMounted = (0, _react.useRef)(() => mounted.current);
+  (0, _react.useEffect)(() => {
+    mounted.current = true;
+    return () => {
+      mounted.current = false;
+    };
+  }, []);
+  return isMounted.current;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useMutationObserver.d.ts b/node_modules/@restart/hooks/cjs/useMutationObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7852be6cab690eb9431c3a3069b55a323a53a400
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMutationObserver.d.ts
@@ -0,0 +1,40 @@
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * Depends on the `MutationObserver` api.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * useMutationObserver(element, { subtree: true }, (records) => {
+ *
+ * });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ * @param callback A callback fired when a mutation occurs
+ */
+declare function useMutationObserver(element: Element | null | undefined, config: MutationObserverInit, callback: MutationCallback): void;
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * use a `MutationObserver` and return records as the are received.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * const records = useMutationObserver(element, { subtree: true });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ */
+declare function useMutationObserver(element: Element | null | undefined, config: MutationObserverInit): MutationRecord[];
+export default useMutationObserver;
diff --git a/node_modules/@restart/hooks/cjs/useMutationObserver.js b/node_modules/@restart/hooks/cjs/useMutationObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd02947a2cdeec7fbef0f700ea4dccb8cc731366
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useMutationObserver.js
@@ -0,0 +1,78 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _useCustomEffect = _interopRequireDefault(require("./useCustomEffect"));
+var _dequal = require("dequal");
+var _useImmediateUpdateEffect = _interopRequireDefault(require("./useImmediateUpdateEffect"));
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+var _react = require("react");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function isDepsEqual([nextElement, nextConfig], [prevElement, prevConfig]) {
+  return nextElement === prevElement && (0, _dequal.dequal)(nextConfig, prevConfig);
+}
+
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * Depends on the `MutationObserver` api.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * useMutationObserver(element, { subtree: true }, (records) => {
+ *
+ * });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ * @param callback A callback fired when a mutation occurs
+ */
+
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * use a `MutationObserver` and return records as the are received.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * const records = useMutationObserver(element, { subtree: true });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ */
+
+function useMutationObserver(element, config, callback) {
+  const [records, setRecords] = (0, _react.useState)(null);
+  const handler = (0, _useEventCallback.default)(callback || setRecords);
+  (0, _useCustomEffect.default)(() => {
+    if (!element) return;
+
+    // The behavior around reusing mutation observers is confusing
+    // observing again _should_ disable the last listener but doesn't
+    // seem to always be the case, maybe just in JSDOM? In any case the cost
+    // to redeclaring it is gonna be fairly low anyway, so make it simple
+    const observer = new MutationObserver(handler);
+    observer.observe(element, config);
+    return () => {
+      observer.disconnect();
+    };
+  }, [element, config], {
+    isEqual: isDepsEqual,
+    // Intentionally done in render, otherwise observer will miss any
+    // changes made to the DOM during this update
+    effectHook: _useImmediateUpdateEffect.default
+  });
+  return callback ? void 0 : records || [];
+}
+var _default = useMutationObserver;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/usePrevious.d.ts b/node_modules/@restart/hooks/cjs/usePrevious.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3e8aa10508ca60362312447cf0d72a4b7e19a4f0
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/usePrevious.d.ts
@@ -0,0 +1,18 @@
+/**
+ * Store the last of some value. Tracked via a `Ref` only updating it
+ * after the component renders.
+ *
+ * Helpful if you need to compare a prop value to it's previous value during render.
+ *
+ * ```ts
+ * function Component(props) {
+ *   const lastProps = usePrevious(props)
+ *
+ *   if (lastProps.foo !== props.foo)
+ *     resetValueFromProps(props.foo)
+ * }
+ * ```
+ *
+ * @param value the value to track
+ */
+export default function usePrevious<T>(value: T): T | null;
diff --git a/node_modules/@restart/hooks/cjs/usePrevious.js b/node_modules/@restart/hooks/cjs/usePrevious.js
new file mode 100644
index 0000000000000000000000000000000000000000..3255819db297d175bf6f51bcb16b6ab4c2a0ee07
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/usePrevious.js
@@ -0,0 +1,29 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = usePrevious;
+var _react = require("react");
+/**
+ * Store the last of some value. Tracked via a `Ref` only updating it
+ * after the component renders.
+ *
+ * Helpful if you need to compare a prop value to it's previous value during render.
+ *
+ * ```ts
+ * function Component(props) {
+ *   const lastProps = usePrevious(props)
+ *
+ *   if (lastProps.foo !== props.foo)
+ *     resetValueFromProps(props.foo)
+ * }
+ * ```
+ *
+ * @param value the value to track
+ */
+function usePrevious(value) {
+  const ref = (0, _react.useRef)(null);
+  (0, _react.useEffect)(() => {
+    ref.current = value;
+  });
+  return ref.current;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useRafInterval.d.ts b/node_modules/@restart/hooks/cjs/useRafInterval.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d1725a2b2c45f4d9263ded87433101b7f010c908
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useRafInterval.d.ts
@@ -0,0 +1,2 @@
+declare function useRafInterval(fn: () => void, ms: number): void;
+export default useRafInterval;
diff --git a/node_modules/@restart/hooks/cjs/useRafInterval.js b/node_modules/@restart/hooks/cjs/useRafInterval.js
new file mode 100644
index 0000000000000000000000000000000000000000..ece650cf9149673c8d07c8f419c193b6f781a994
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useRafInterval.js
@@ -0,0 +1,32 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useCommittedRef = _interopRequireDefault(require("./useCommittedRef"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+function useRafInterval(fn, ms, paused = false) {
+  let handle;
+  let start = new Date().getTime();
+  const fnRef = (0, _useCommittedRef.default)(fn);
+  // this ref is necessary b/c useEffect will sometimes miss a paused toggle
+  // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
+  const pausedRef = (0, _useCommittedRef.default)(paused);
+  function loop() {
+    const current = new Date().getTime();
+    const delta = current - start;
+    if (pausedRef.current) return;
+    if (delta >= ms && fnRef.current) {
+      fnRef.current();
+      start = new Date().getTime();
+    }
+    cancelAnimationFrame(handle);
+    handle = requestAnimationFrame(loop);
+  }
+  (0, _react.useEffect)(() => {
+    handle = requestAnimationFrame(loop);
+    return () => cancelAnimationFrame(handle);
+  }, []);
+}
+var _default = useRafInterval;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.d.ts b/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ac2dd7491d69a610fab6420db95dcacef9d03af4
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.d.ts
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+/**
+ * Exactly the same as `useRef` except that the initial value is set via a
+ * factory function. Useful when the default is relatively costly to construct.
+ *
+ *  ```ts
+ *  const ref = useRefWithInitialValueFactory<ExpensiveValue>(() => constructExpensiveValue())
+ *
+ *  ```
+ *
+ * @param initialValueFactory A factory function returning the ref's default value
+ * @category refs
+ */
+export default function useRefWithInitialValueFactory<T>(initialValueFactory: () => T): import("react").MutableRefObject<T>;
diff --git a/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.js b/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d0b2a346be556b3438da2a982575772ba09f9c2
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useRefWithInitialValueFactory.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useRefWithInitialValueFactory;
+var _react = require("react");
+const dft = Symbol('default value sigil');
+
+/**
+ * Exactly the same as `useRef` except that the initial value is set via a
+ * factory function. Useful when the default is relatively costly to construct.
+ *
+ *  ```ts
+ *  const ref = useRefWithInitialValueFactory<ExpensiveValue>(() => constructExpensiveValue())
+ *
+ *  ```
+ *
+ * @param initialValueFactory A factory function returning the ref's default value
+ * @category refs
+ */
+function useRefWithInitialValueFactory(initialValueFactory) {
+  const ref = (0, _react.useRef)(dft);
+  if (ref.current === dft) {
+    ref.current = initialValueFactory();
+  }
+  return ref;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useResizeObserver.d.ts b/node_modules/@restart/hooks/cjs/useResizeObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f50bac1ffa7bf2e4ab66819c983b521e46915efc
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useResizeObserver.d.ts
@@ -0,0 +1,25 @@
+export interface Rect {
+    width: number;
+    height: number;
+    x?: number;
+    y?: number;
+}
+/**
+ * Efficiently observe size changes on an element. Depends on the `ResizeObserver` api,
+ * and polyfills are needed in older browsers.
+ *
+ * ```ts
+ * const [ref, attachRef] = useCallbackRef(null);
+ *
+ * const rect = useResizeObserver(ref);
+ *
+ * return (
+ *  <div ref={attachRef}>
+ *    {JSON.stringify(rect)}
+ *  </div>
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ */
+export default function useResizeObserver<TElement extends Element>(element: TElement | null | undefined): Rect | null;
diff --git a/node_modules/@restart/hooks/cjs/useResizeObserver.js b/node_modules/@restart/hooks/cjs/useResizeObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..91f4047f64a100b9aea8172abe5a3c20f6e7efa2
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useResizeObserver.js
@@ -0,0 +1,52 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useResizeObserver;
+var _react = require("react");
+var _useIsomorphicEffect = _interopRequireDefault(require("./useIsomorphicEffect"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const targetMap = new WeakMap();
+let resizeObserver;
+function getResizeObserver() {
+  // eslint-disable-next-line no-return-assign
+  return resizeObserver = resizeObserver || new window.ResizeObserver(entries => {
+    entries.forEach(entry => {
+      const handler = targetMap.get(entry.target);
+      if (handler) handler(entry.contentRect);
+    });
+  });
+}
+
+/**
+ * Efficiently observe size changes on an element. Depends on the `ResizeObserver` api,
+ * and polyfills are needed in older browsers.
+ *
+ * ```ts
+ * const [ref, attachRef] = useCallbackRef(null);
+ *
+ * const rect = useResizeObserver(ref);
+ *
+ * return (
+ *  <div ref={attachRef}>
+ *    {JSON.stringify(rect)}
+ *  </div>
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ */
+function useResizeObserver(element) {
+  const [rect, setRect] = (0, _react.useState)(null);
+  (0, _useIsomorphicEffect.default)(() => {
+    if (!element) return;
+    getResizeObserver().observe(element);
+    setRect(element.getBoundingClientRect());
+    targetMap.set(element, rect => {
+      setRect(rect);
+    });
+    return () => {
+      targetMap.delete(element);
+    };
+  }, [element]);
+  return rect;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useSafeState.d.ts b/node_modules/@restart/hooks/cjs/useSafeState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2b76c8e0c198032dd79f2ef6246c6310e46a1add
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useSafeState.d.ts
@@ -0,0 +1,17 @@
+import { Dispatch, SetStateAction } from 'react';
+import { AsyncSetState } from './useStateAsync';
+type StateSetter<TState> = Dispatch<SetStateAction<TState>>;
+/**
+ * `useSafeState` takes the return value of a `useState` hook and wraps the
+ * setter to prevent updates onces the component has unmounted. Can used
+ * with `useMergeState` and `useStateAsync` as well
+ *
+ * @param state The return value of a useStateHook
+ *
+ * ```ts
+ * const [show, setShow] = useSafeState(useState(true));
+ * ```
+ */
+declare function useSafeState<TState>(state: [TState, AsyncSetState<TState>]): [TState, (stateUpdate: React.SetStateAction<TState>) => Promise<void>];
+declare function useSafeState<TState>(state: [TState, StateSetter<TState>]): [TState, StateSetter<TState>];
+export default useSafeState;
diff --git a/node_modules/@restart/hooks/cjs/useSafeState.js b/node_modules/@restart/hooks/cjs/useSafeState.js
new file mode 100644
index 0000000000000000000000000000000000000000..23449b514d7a0357f05c92eaac5b1ced3605733e
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useSafeState.js
@@ -0,0 +1,28 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * `useSafeState` takes the return value of a `useState` hook and wraps the
+ * setter to prevent updates onces the component has unmounted. Can used
+ * with `useMergeState` and `useStateAsync` as well
+ *
+ * @param state The return value of a useStateHook
+ *
+ * ```ts
+ * const [show, setShow] = useSafeState(useState(true));
+ * ```
+ */
+
+function useSafeState(state) {
+  const isMounted = (0, _useMounted.default)();
+  return [state[0], (0, _react.useCallback)(nextState => {
+    if (!isMounted()) return;
+    return state[1](nextState);
+  }, [isMounted, state[1]])];
+}
+var _default = useSafeState;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useSet.d.ts b/node_modules/@restart/hooks/cjs/useSet.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1227a5acdb2fe8597adbfa1ff6bf60b77fe848c
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useSet.d.ts
@@ -0,0 +1,28 @@
+export declare class ObservableSet<V> extends Set<V> {
+    private readonly listener;
+    constructor(listener: (map: ObservableSet<V>) => void, init?: Iterable<V>);
+    add(value: V): this;
+    delete(value: V): boolean;
+    clear(): void;
+}
+/**
+ * Create and return a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) that triggers rerenders when it's updated.
+ *
+ * ```ts
+ * const ids = useSet<number>([1,2,3,4]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, id => (
+ *      <div>
+ *        id: {id}. <button onClick={() => ids.delete(id)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Set values
+ */
+declare function useSet<V>(init?: Iterable<V>): ObservableSet<V>;
+export default useSet;
diff --git a/node_modules/@restart/hooks/cjs/useSet.js b/node_modules/@restart/hooks/cjs/useSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..174d0e521977dd94e789348e2c2403b8910b716b
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useSet.js
@@ -0,0 +1,56 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.ObservableSet = void 0;
+var _useForceUpdate = _interopRequireDefault(require("./useForceUpdate"));
+var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+class ObservableSet extends Set {
+  constructor(listener, init) {
+    super(init);
+    this.listener = listener;
+  }
+  add(value) {
+    super.add(value);
+    // When initializing the Set, the base Set calls this.add() before the
+    // listener is assigned so it will be undefined
+    if (this.listener) this.listener(this);
+    return this;
+  }
+  delete(value) {
+    const result = super.delete(value);
+    this.listener(this);
+    return result;
+  }
+  clear() {
+    super.clear();
+    this.listener(this);
+  }
+}
+
+/**
+ * Create and return a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) that triggers rerenders when it's updated.
+ *
+ * ```ts
+ * const ids = useSet<number>([1,2,3,4]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, id => (
+ *      <div>
+ *        id: {id}. <button onClick={() => ids.delete(id)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Set values
+ */
+exports.ObservableSet = ObservableSet;
+function useSet(init) {
+  const forceUpdate = (0, _useForceUpdate.default)();
+  return (0, _useStableMemo.default)(() => new ObservableSet(forceUpdate, init), []);
+}
+var _default = useSet;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useStableMemo.d.ts b/node_modules/@restart/hooks/cjs/useStableMemo.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c52e73a336aed8bca9eb1964571e29a5ad9f6492
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useStableMemo.d.ts
@@ -0,0 +1,10 @@
+import { DependencyList } from 'react';
+/**
+ * Identical to `useMemo` _except_ that it provides a semantic guarantee that
+ * values will not be invalidated unless the dependencies change. This is unlike
+ * the built in `useMemo` which may discard memoized values for performance reasons.
+ *
+ * @param factory A function that returns a value to be memoized
+ * @param deps A dependency array
+ */
+export default function useStableMemo<T>(factory: () => T, deps?: DependencyList): T;
diff --git a/node_modules/@restart/hooks/cjs/useStableMemo.js b/node_modules/@restart/hooks/cjs/useStableMemo.js
new file mode 100644
index 0000000000000000000000000000000000000000..b2b3dd4a31e2f4c9e96136e2da3f5c92189f09c0
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useStableMemo.js
@@ -0,0 +1,43 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useStableMemo;
+var _react = require("react");
+function isEqual(a, b) {
+  if (a.length !== b.length) return false;
+  for (let i = 0; i < a.length; i++) {
+    if (a[i] !== b[i]) {
+      return false;
+    }
+  }
+  return true;
+}
+/**
+ * Identical to `useMemo` _except_ that it provides a semantic guarantee that
+ * values will not be invalidated unless the dependencies change. This is unlike
+ * the built in `useMemo` which may discard memoized values for performance reasons.
+ *
+ * @param factory A function that returns a value to be memoized
+ * @param deps A dependency array
+ */
+function useStableMemo(factory, deps) {
+  let isValid = true;
+  const valueRef = (0, _react.useRef)();
+  // initial hook call
+  if (!valueRef.current) {
+    valueRef.current = {
+      deps,
+      result: factory()
+    };
+    // subsequent calls
+  } else {
+    isValid = !!(deps && valueRef.current.deps && isEqual(deps, valueRef.current.deps));
+  }
+  const cache = isValid ? valueRef.current : {
+    deps,
+    result: factory()
+  };
+  // must update immediately so any sync renders here don't cause an infinite loop
+  valueRef.current = cache;
+  return cache.result;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useStateAsync.d.ts b/node_modules/@restart/hooks/cjs/useStateAsync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6f58179b02b33cc7253f65e229b5519deee6d57
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useStateAsync.d.ts
@@ -0,0 +1,20 @@
+import React from 'react';
+export type AsyncSetState<TState> = (stateUpdate: React.SetStateAction<TState>) => Promise<TState>;
+/**
+ * A hook that mirrors `useState` in function and API, expect that setState
+ * calls return a promise that resolves after the state has been set (in an effect).
+ *
+ * This is _similar_ to the second callback in classy setState calls, but fires later.
+ *
+ * ```ts
+ * const [counter, setState] = useStateAsync(1);
+ *
+ * const handleIncrement = async () => {
+ *   await setState(2);
+ *   doWorkRequiringCurrentState()
+ * }
+ * ```
+ *
+ * @param initialState initialize with some state value same as `useState`
+ */
+export default function useStateAsync<TState>(initialState: TState | (() => TState)): [TState, AsyncSetState<TState>];
diff --git a/node_modules/@restart/hooks/cjs/useStateAsync.js b/node_modules/@restart/hooks/cjs/useStateAsync.js
new file mode 100644
index 0000000000000000000000000000000000000000..f51d6be86c57230fe1b4d779bbdb853fdcdc2c65
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useStateAsync.js
@@ -0,0 +1,59 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useStateAsync;
+var _react = require("react");
+/**
+ * A hook that mirrors `useState` in function and API, expect that setState
+ * calls return a promise that resolves after the state has been set (in an effect).
+ *
+ * This is _similar_ to the second callback in classy setState calls, but fires later.
+ *
+ * ```ts
+ * const [counter, setState] = useStateAsync(1);
+ *
+ * const handleIncrement = async () => {
+ *   await setState(2);
+ *   doWorkRequiringCurrentState()
+ * }
+ * ```
+ *
+ * @param initialState initialize with some state value same as `useState`
+ */
+function useStateAsync(initialState) {
+  const [state, setState] = (0, _react.useState)(initialState);
+  const resolvers = (0, _react.useRef)([]);
+  (0, _react.useEffect)(() => {
+    resolvers.current.forEach(resolve => resolve(state));
+    resolvers.current.length = 0;
+  }, [state]);
+  const setStateAsync = (0, _react.useCallback)(update => {
+    return new Promise((resolve, reject) => {
+      setState(prevState => {
+        try {
+          let nextState;
+          // ugly instanceof for typescript
+          if (update instanceof Function) {
+            nextState = update(prevState);
+          } else {
+            nextState = update;
+          }
+
+          // If state does not change, we must resolve the promise because
+          // react won't re-render and effect will not resolve. If there are already
+          // resolvers queued, then it should be safe to assume an update will happen
+          if (!resolvers.current.length && Object.is(nextState, prevState)) {
+            resolve(nextState);
+          } else {
+            resolvers.current.push(resolve);
+          }
+          return nextState;
+        } catch (e) {
+          reject(e);
+          throw e;
+        }
+      });
+    });
+  }, [setState]);
+  return [state, setStateAsync];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useThrottledEventHandler.d.ts b/node_modules/@restart/hooks/cjs/useThrottledEventHandler.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..79cc7a89db9e2a43e13f3cb9055d48286b88fb9e
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useThrottledEventHandler.d.ts
@@ -0,0 +1,34 @@
+import { SyntheticEvent } from 'react';
+export type ThrottledHandler<TEvent> = ((event: TEvent) => void) & {
+    clear(): void;
+};
+/**
+ * Creates a event handler function throttled by `requestAnimationFrame` that
+ * returns the **most recent** event. Useful for noisy events that update react state.
+ *
+ * ```tsx
+ * function Component() {
+ *   const [position, setPosition] = useState();
+ *   const handleMove = useThrottledEventHandler<React.PointerEvent>(
+ *     (event) => {
+ *       setPosition({
+ *         top: event.clientX,
+ *         left: event.clientY,
+ *       })
+ *     }
+ *   )
+ *
+ *   return (
+ *     <div onPointerMove={handleMove}>
+ *        <div style={position} />
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * @param handler An event handler function
+ * @typeParam TEvent The event object passed to the handler function
+ * @returns The event handler with a `clear` method attached for clearing any in-flight handler calls
+ *
+ */
+export default function useThrottledEventHandler<TEvent extends object = SyntheticEvent>(handler: (event: TEvent) => void): ThrottledHandler<TEvent>;
diff --git a/node_modules/@restart/hooks/cjs/useThrottledEventHandler.js b/node_modules/@restart/hooks/cjs/useThrottledEventHandler.js
new file mode 100644
index 0000000000000000000000000000000000000000..e1a3d8644d34759ff4c2565a5b8f0fb59ffddd04
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useThrottledEventHandler.js
@@ -0,0 +1,79 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useThrottledEventHandler;
+var _react = require("react");
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+const isSyntheticEvent = event => typeof event.persist === 'function';
+/**
+ * Creates a event handler function throttled by `requestAnimationFrame` that
+ * returns the **most recent** event. Useful for noisy events that update react state.
+ *
+ * ```tsx
+ * function Component() {
+ *   const [position, setPosition] = useState();
+ *   const handleMove = useThrottledEventHandler<React.PointerEvent>(
+ *     (event) => {
+ *       setPosition({
+ *         top: event.clientX,
+ *         left: event.clientY,
+ *       })
+ *     }
+ *   )
+ *
+ *   return (
+ *     <div onPointerMove={handleMove}>
+ *        <div style={position} />
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * @param handler An event handler function
+ * @typeParam TEvent The event object passed to the handler function
+ * @returns The event handler with a `clear` method attached for clearing any in-flight handler calls
+ *
+ */
+function useThrottledEventHandler(handler) {
+  const isMounted = (0, _useMounted.default)();
+  const eventHandler = (0, _useEventCallback.default)(handler);
+  const nextEventInfoRef = (0, _react.useRef)({
+    event: null,
+    handle: null
+  });
+  const clear = () => {
+    cancelAnimationFrame(nextEventInfoRef.current.handle);
+    nextEventInfoRef.current.handle = null;
+  };
+  const handlePointerMoveAnimation = () => {
+    const {
+      current: next
+    } = nextEventInfoRef;
+    if (next.handle && next.event) {
+      if (isMounted()) {
+        next.handle = null;
+        eventHandler(next.event);
+      }
+    }
+    next.event = null;
+  };
+  const throttledHandler = event => {
+    if (!isMounted()) return;
+    if (isSyntheticEvent(event)) {
+      event.persist();
+    }
+    // Special handling for a React.Konva event which reuses the
+    // event object as it bubbles, setting target
+    else if ('evt' in event) {
+      event = Object.assign({}, event);
+    }
+    nextEventInfoRef.current.event = event;
+    if (!nextEventInfoRef.current.handle) {
+      nextEventInfoRef.current.handle = requestAnimationFrame(handlePointerMoveAnimation);
+    }
+  };
+  throttledHandler.clear = clear;
+  return throttledHandler;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useTimeout.d.ts b/node_modules/@restart/hooks/cjs/useTimeout.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..549987f8f04e70c493c0da1e5e6be549553c53b0
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useTimeout.d.ts
@@ -0,0 +1,24 @@
+import { MutableRefObject } from 'react';
+/**
+ * Returns a controller object for setting a timeout that is properly cleaned up
+ * once the component unmounts. New timeouts cancel and replace existing ones.
+ *
+ *
+ *
+ * ```tsx
+ * const { set, clear } = useTimeout();
+ * const [hello, showHello] = useState(false);
+ * //Display hello after 5 seconds
+ * set(() => showHello(true), 5000);
+ * return (
+ *   <div className="App">
+ *     {hello ? <h3>Hello</h3> : null}
+ *   </div>
+ * );
+ * ```
+ */
+export default function useTimeout(): {
+    set: (fn: () => void, delayMs?: number) => void;
+    clear: () => void;
+    handleRef: MutableRefObject<any>;
+};
diff --git a/node_modules/@restart/hooks/cjs/useTimeout.js b/node_modules/@restart/hooks/cjs/useTimeout.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1eaa1d900f57e841b0dd33720f1aea13ae2da91
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useTimeout.js
@@ -0,0 +1,65 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useTimeout;
+var _react = require("react");
+var _useMounted = _interopRequireDefault(require("./useMounted"));
+var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/*
+ * Browsers including Internet Explorer, Chrome, Safari, and Firefox store the
+ * delay as a 32-bit signed integer internally. This causes an integer overflow
+ * when using delays larger than 2,147,483,647 ms (about 24.8 days),
+ * resulting in the timeout being executed immediately.
+ *
+ * via: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
+ */
+const MAX_DELAY_MS = 2 ** 31 - 1;
+function setChainedTimeout(handleRef, fn, timeoutAtMs) {
+  const delayMs = timeoutAtMs - Date.now();
+  handleRef.current = delayMs <= MAX_DELAY_MS ? setTimeout(fn, delayMs) : setTimeout(() => setChainedTimeout(handleRef, fn, timeoutAtMs), MAX_DELAY_MS);
+}
+
+/**
+ * Returns a controller object for setting a timeout that is properly cleaned up
+ * once the component unmounts. New timeouts cancel and replace existing ones.
+ *
+ *
+ *
+ * ```tsx
+ * const { set, clear } = useTimeout();
+ * const [hello, showHello] = useState(false);
+ * //Display hello after 5 seconds
+ * set(() => showHello(true), 5000);
+ * return (
+ *   <div className="App">
+ *     {hello ? <h3>Hello</h3> : null}
+ *   </div>
+ * );
+ * ```
+ */
+function useTimeout() {
+  const isMounted = (0, _useMounted.default)();
+
+  // types are confused between node and web here IDK
+  const handleRef = (0, _react.useRef)();
+  (0, _useWillUnmount.default)(() => clearTimeout(handleRef.current));
+  return (0, _react.useMemo)(() => {
+    const clear = () => clearTimeout(handleRef.current);
+    function set(fn, delayMs = 0) {
+      if (!isMounted()) return;
+      clear();
+      if (delayMs <= MAX_DELAY_MS) {
+        // For simplicity, if the timeout is short, just set a normal timeout.
+        handleRef.current = setTimeout(fn, delayMs);
+      } else {
+        setChainedTimeout(handleRef, fn, Date.now() + delayMs);
+      }
+    }
+    return {
+      set,
+      clear,
+      handleRef
+    };
+  }, []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useToggleState.d.ts b/node_modules/@restart/hooks/cjs/useToggleState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..263e90b3fdb4bb2b067675c6f5f790cfd47ccfea
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useToggleState.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Create a state setter pair for a boolean value that can be "switched".
+ * Unlike `useState(false)`, `useToggleState` will automatically flip the state
+ * value when its setter is called with no argument.
+ *
+ * @param initialState The initial boolean value
+ * @returns A tuple of the current state and a setter
+ *
+ * ```jsx
+ * const [show, toggleShow] = useToggleState(false)
+ *
+ * return (
+ *   <>
+ *     <button onClick={() => toggleShow()}>
+ *       Toggle
+ *     <button>
+ *
+ *     {show && <strong>Now you can see me</strong>}
+ *   </>
+ * )
+ *
+ * ```
+ */
+export default function useToggleState(initialState?: boolean): [boolean, (value?: boolean) => void];
diff --git a/node_modules/@restart/hooks/cjs/useToggleState.js b/node_modules/@restart/hooks/cjs/useToggleState.js
new file mode 100644
index 0000000000000000000000000000000000000000..8fead29a2ef59a72cf17412a72bd287a390b1880
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useToggleState.js
@@ -0,0 +1,31 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useToggleState;
+var _react = require("react");
+/**
+ * Create a state setter pair for a boolean value that can be "switched".
+ * Unlike `useState(false)`, `useToggleState` will automatically flip the state
+ * value when its setter is called with no argument.
+ *
+ * @param initialState The initial boolean value
+ * @returns A tuple of the current state and a setter
+ *
+ * ```jsx
+ * const [show, toggleShow] = useToggleState(false)
+ *
+ * return (
+ *   <>
+ *     <button onClick={() => toggleShow()}>
+ *       Toggle
+ *     <button>
+ *
+ *     {show && <strong>Now you can see me</strong>}
+ *   </>
+ * )
+ *
+ * ```
+ */
+function useToggleState(initialState = false) {
+  return (0, _react.useReducer)((state, action) => action == null ? !state : action, initialState);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useUpdateEffect.d.ts b/node_modules/@restart/hooks/cjs/useUpdateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f46a670c0b09ff5f39961fa57f3622b9ee65f994
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateEffect.d.ts
@@ -0,0 +1,23 @@
+import { EffectCallback, DependencyList } from 'react';
+/**
+ * Runs an effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+declare function useUpdateEffect(fn: EffectCallback, deps: DependencyList): void;
+export default useUpdateEffect;
diff --git a/node_modules/@restart/hooks/cjs/useUpdateEffect.js b/node_modules/@restart/hooks/cjs/useUpdateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..decc851675161178fb9ff8aa615d43ea7bf82902
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateEffect.js
@@ -0,0 +1,37 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+/**
+ * Runs an effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+function useUpdateEffect(fn, deps) {
+  const isFirst = (0, _react.useRef)(true);
+  (0, _react.useEffect)(() => {
+    if (isFirst.current) {
+      isFirst.current = false;
+      return;
+    }
+    return fn();
+  }, deps);
+}
+var _default = useUpdateEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.d.ts b/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a19e3af55ce6a5dfa81a92170fadc4bd421e34d9
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.d.ts
@@ -0,0 +1,19 @@
+import { DependencyList, EffectCallback } from 'react';
+/**
+ * An _immediate_ effect that runs an effect callback when its dependency array
+ * changes. This is helpful for updates should must run during render, most
+ * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
+ *
+ * ```ts
+ * function Example({ value }) {
+ *   const [intermediaryValue, setValue] = useState(value);
+ *
+ *   useUpdateImmediateEffect(() => {
+ *     setValue(value)
+ *   }, [value])
+ * ```
+ *
+ * @category effects
+ */
+declare function useUpdateImmediateEffect(effect: EffectCallback, deps: DependencyList): void;
+export default useUpdateImmediateEffect;
diff --git a/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.js b/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..1cc3fe8ff323fda64277c418363202d5aa70017e
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateImmediateEffect.js
@@ -0,0 +1,41 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _useStableMemo = _interopRequireDefault(require("./useStableMemo"));
+var _useWillUnmount = _interopRequireDefault(require("./useWillUnmount"));
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * An _immediate_ effect that runs an effect callback when its dependency array
+ * changes. This is helpful for updates should must run during render, most
+ * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
+ *
+ * ```ts
+ * function Example({ value }) {
+ *   const [intermediaryValue, setValue] = useState(value);
+ *
+ *   useUpdateImmediateEffect(() => {
+ *     setValue(value)
+ *   }, [value])
+ * ```
+ *
+ * @category effects
+ */
+function useUpdateImmediateEffect(effect, deps) {
+  const firstRef = (0, _react.useRef)(true);
+  const tearDown = (0, _react.useRef)();
+  (0, _useWillUnmount.default)(() => {
+    if (tearDown.current) tearDown.current();
+  });
+  (0, _useStableMemo.default)(() => {
+    if (firstRef.current) {
+      firstRef.current = false;
+      return;
+    }
+    if (tearDown.current) tearDown.current();
+    tearDown.current = effect();
+  }, deps);
+}
+var _default = useUpdateImmediateEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.d.ts b/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a70726f9c1c441958da80052897513b1c6f04859
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.d.ts
@@ -0,0 +1,23 @@
+import { EffectCallback, DependencyList } from 'react';
+/**
+ * Runs a layout effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateLayoutEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+declare function useUpdateLayoutEffect(fn: EffectCallback, deps: DependencyList): void;
+export default useUpdateLayoutEffect;
diff --git a/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.js b/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ae29db3b7a80c0ffe1fc2a93c7285d49513485f
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdateLayoutEffect.js
@@ -0,0 +1,37 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+/**
+ * Runs a layout effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateLayoutEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+function useUpdateLayoutEffect(fn, deps) {
+  const isFirst = (0, _react.useRef)(true);
+  (0, _react.useLayoutEffect)(() => {
+    if (isFirst.current) {
+      isFirst.current = false;
+      return;
+    }
+    return fn();
+  }, deps);
+}
+var _default = useUpdateLayoutEffect;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useUpdatedRef.d.ts b/node_modules/@restart/hooks/cjs/useUpdatedRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2182fc23b4737e6fd3fc78e658083dff8e44a38a
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdatedRef.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="react" />
+/**
+ * Returns a ref that is immediately updated with the new value
+ *
+ * @param value The Ref value
+ * @category refs
+ */
+export default function useUpdatedRef<T>(value: T): import("react").MutableRefObject<T>;
diff --git a/node_modules/@restart/hooks/cjs/useUpdatedRef.js b/node_modules/@restart/hooks/cjs/useUpdatedRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..96e80a6db1d97dced9577abe3e0a3aa304fe6dd7
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useUpdatedRef.js
@@ -0,0 +1,16 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useUpdatedRef;
+var _react = require("react");
+/**
+ * Returns a ref that is immediately updated with the new value
+ *
+ * @param value The Ref value
+ * @category refs
+ */
+function useUpdatedRef(value) {
+  const valueRef = (0, _react.useRef)(value);
+  valueRef.current = value;
+  return valueRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/cjs/useWillUnmount.d.ts b/node_modules/@restart/hooks/cjs/useWillUnmount.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c82504440569b0b8943e6bf254b4011167c290d
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useWillUnmount.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Attach a callback that fires when a component unmounts
+ *
+ * @param fn Handler to run when the component unmounts
+ * @category effects
+ */
+export default function useWillUnmount(fn: () => void): void;
diff --git a/node_modules/@restart/hooks/cjs/useWillUnmount.js b/node_modules/@restart/hooks/cjs/useWillUnmount.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ccb8c23f1ecca5d6dbc8d4a1b9d7c675e296544
--- /dev/null
+++ b/node_modules/@restart/hooks/cjs/useWillUnmount.js
@@ -0,0 +1,17 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useWillUnmount;
+var _useUpdatedRef = _interopRequireDefault(require("./useUpdatedRef"));
+var _react = require("react");
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+/**
+ * Attach a callback that fires when a component unmounts
+ *
+ * @param fn Handler to run when the component unmounts
+ * @category effects
+ */
+function useWillUnmount(fn) {
+  const onUnmount = (0, _useUpdatedRef.default)(fn);
+  (0, _react.useEffect)(() => () => onUnmount.current(), []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/globals.d.ts b/node_modules/@restart/hooks/esm/globals.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9d32ba0d17430ea22d5fbc9c13ae445d99756fc4
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/globals.d.ts
@@ -0,0 +1,68 @@
+interface Window {
+  ResizeObserver: ResizeObserver
+}
+
+/**
+ * The ResizeObserver interface is used to observe changes to Element's content
+ * rect.
+ *
+ * It is modeled after MutationObserver and IntersectionObserver.
+ */
+interface ResizeObserver {
+  new (callback: ResizeObserverCallback)
+
+  /**
+   * Adds target to the list of observed elements.
+   */
+  observe: (target: Element) => void
+
+  /**
+   * Removes target from the list of observed elements.
+   */
+  unobserve: (target: Element) => void
+
+  /**
+   * Clears both the observationTargets and activeTargets lists.
+   */
+  disconnect: () => void
+}
+
+/**
+ * This callback delivers ResizeObserver's notifications. It is invoked by a
+ * broadcast active observations algorithm.
+ */
+interface ResizeObserverCallback {
+  (entries: ResizeObserverEntry[], observer: ResizeObserver): void
+}
+
+interface ResizeObserverEntry {
+  /**
+   * @param target The Element whose size has changed.
+   */
+  new (target: Element)
+
+  /**
+   * The Element whose size has changed.
+   */
+  readonly target: Element
+
+  /**
+   * Element's content rect when ResizeObserverCallback is invoked.
+   */
+  readonly contentRect: DOMRectReadOnly
+}
+
+interface DOMRectReadOnly {
+  fromRect(other: DOMRectInit | undefined): DOMRectReadOnly
+
+  readonly x: number
+  readonly y: number
+  readonly width: number
+  readonly height: number
+  readonly top: number
+  readonly right: number
+  readonly bottom: number
+  readonly left: number
+
+  toJSON: () => any
+}
diff --git a/node_modules/@restart/hooks/esm/index.d.ts b/node_modules/@restart/hooks/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..655945902ebaa208561443f3b74bf5d626dad6ee
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/index.d.ts
@@ -0,0 +1,14 @@
+import useCallbackRef from './useCallbackRef';
+import useCommittedRef from './useCommittedRef';
+import useEventCallback from './useEventCallback';
+import useEventListener from './useEventListener';
+import useGlobalListener from './useGlobalListener';
+import useInterval from './useInterval';
+import useRafInterval from './useRafInterval';
+import useMergeState from './useMergeState';
+import useMergeStateFromProps from './useMergeStateFromProps';
+import useMounted from './useMounted';
+import usePrevious from './usePrevious';
+import useImage from './useImage';
+import useResizeObserver from './useResizeObserver';
+export { useCallbackRef, useCommittedRef, useEventCallback, useEventListener, useGlobalListener, useInterval, useRafInterval, useMergeState, useMergeStateFromProps, useMounted, usePrevious, useImage, useResizeObserver, };
diff --git a/node_modules/@restart/hooks/esm/index.js b/node_modules/@restart/hooks/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a8fa3ad45d817105c49efcc299e4db629625d2e
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/index.js
@@ -0,0 +1,14 @@
+import useCallbackRef from './useCallbackRef';
+import useCommittedRef from './useCommittedRef';
+import useEventCallback from './useEventCallback';
+import useEventListener from './useEventListener';
+import useGlobalListener from './useGlobalListener';
+import useInterval from './useInterval';
+import useRafInterval from './useRafInterval';
+import useMergeState from './useMergeState';
+import useMergeStateFromProps from './useMergeStateFromProps';
+import useMounted from './useMounted';
+import usePrevious from './usePrevious';
+import useImage from './useImage';
+import useResizeObserver from './useResizeObserver';
+export { useCallbackRef, useCommittedRef, useEventCallback, useEventListener, useGlobalListener, useInterval, useRafInterval, useMergeState, useMergeStateFromProps, useMounted, usePrevious, useImage, useResizeObserver };
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useAnimationFrame.d.ts b/node_modules/@restart/hooks/esm/useAnimationFrame.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b438e915cec056b45e660e1ccef2707cb1349f0e
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useAnimationFrame.d.ts
@@ -0,0 +1,39 @@
+export interface UseAnimationFrameReturn {
+    cancel(): void;
+    /**
+     * Request for the provided callback to be called on the next animation frame.
+     * Previously registered callbacks will be cancelled
+     */
+    request(callback: FrameRequestCallback): void;
+    /**
+     * Request for the provided callback to be called on the next animation frame.
+     * Previously registered callbacks can be cancelled by providing `cancelPrevious`
+     */
+    request(cancelPrevious: boolean, callback: FrameRequestCallback): void;
+}
+/**
+ * Returns a controller object for requesting and cancelling an animation freame that is properly cleaned up
+ * once the component unmounts. New requests cancel and replace existing ones.
+ *
+ * ```ts
+ * const [style, setStyle] = useState({});
+ * const animationFrame = useAnimationFrame();
+ *
+ * const handleMouseMove = (e) => {
+ *   animationFrame.request(() => {
+ *     setStyle({ top: e.clientY, left: e.clientY })
+ *   })
+ * }
+ *
+ * const handleMouseUp = () => {
+ *   animationFrame.cancel()
+ * }
+ *
+ * return (
+ *   <div onMouseUp={handleMouseUp} onMouseMove={handleMouseMove}>
+ *     <Ball style={style} />
+ *   </div>
+ * )
+ * ```
+ */
+export default function useAnimationFrame(): UseAnimationFrameReturn;
diff --git a/node_modules/@restart/hooks/esm/useAnimationFrame.js b/node_modules/@restart/hooks/esm/useAnimationFrame.js
new file mode 100644
index 0000000000000000000000000000000000000000..48808b706958b818bb3120981ed6943bbedec97e
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useAnimationFrame.js
@@ -0,0 +1,47 @@
+import { useRef } from 'react';
+import useMounted from './useMounted';
+import useStableMemo from './useStableMemo';
+import useWillUnmount from './useWillUnmount';
+/**
+ * Returns a controller object for requesting and cancelling an animation freame that is properly cleaned up
+ * once the component unmounts. New requests cancel and replace existing ones.
+ *
+ * ```ts
+ * const [style, setStyle] = useState({});
+ * const animationFrame = useAnimationFrame();
+ *
+ * const handleMouseMove = (e) => {
+ *   animationFrame.request(() => {
+ *     setStyle({ top: e.clientY, left: e.clientY })
+ *   })
+ * }
+ *
+ * const handleMouseUp = () => {
+ *   animationFrame.cancel()
+ * }
+ *
+ * return (
+ *   <div onMouseUp={handleMouseUp} onMouseMove={handleMouseMove}>
+ *     <Ball style={style} />
+ *   </div>
+ * )
+ * ```
+ */
+export default function useAnimationFrame() {
+  const isMounted = useMounted();
+  const handle = useRef();
+  const cancel = () => {
+    if (handle.current != null) {
+      cancelAnimationFrame(handle.current);
+    }
+  };
+  useWillUnmount(cancel);
+  return useStableMemo(() => ({
+    request(cancelPrevious, fn) {
+      if (!isMounted()) return;
+      if (cancelPrevious) cancel();
+      handle.current = requestAnimationFrame(fn || cancelPrevious);
+    },
+    cancel
+  }), []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useBreakpoint.d.ts b/node_modules/@restart/hooks/esm/useBreakpoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9f245ba7dd63de0c91e3691cf1471aac8f26a429
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useBreakpoint.d.ts
@@ -0,0 +1,35 @@
+export type BreakpointDirection = 'up' | 'down' | true;
+export type BreakpointMap<TKey extends string> = Partial<Record<TKey, BreakpointDirection>>;
+/**
+ * Create a responsive hook we a set of breakpoint names and widths.
+ * You can use any valid css units as well as a numbers (for pixels).
+ *
+ * **NOTE:** The object key order is important! it's assumed to be in order from smallest to largest
+ *
+ * ```ts
+ * const useBreakpoint = createBreakpointHook({
+ *  xs: 0,
+ *  sm: 576,
+ *  md: 768,
+ *  lg: 992,
+ *  xl: 1200,
+ * })
+ * ```
+ *
+ * **Watch out!** using string values will sometimes construct media queries using css `calc()` which
+ * is NOT supported in media queries by all browsers at the moment. use numbers for
+ * the widest range of browser support.
+ *
+ * @param breakpointValues A object hash of names to breakpoint dimensions
+ */
+export declare function createBreakpointHook<TKey extends string>(breakpointValues: Record<TKey, string | number>): {
+    (breakpointMap: BreakpointMap<TKey>, window?: Window): boolean;
+    (breakpoint: TKey, direction?: BreakpointDirection, window?: Window): boolean;
+};
+export type DefaultBreakpoints = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';
+export type DefaultBreakpointMap = BreakpointMap<DefaultBreakpoints>;
+declare const useBreakpoint: {
+    (breakpointMap: Partial<Record<DefaultBreakpoints, BreakpointDirection>>, window?: Window): boolean;
+    (breakpoint: DefaultBreakpoints, direction?: BreakpointDirection, window?: Window): boolean;
+};
+export default useBreakpoint;
diff --git a/node_modules/@restart/hooks/esm/useBreakpoint.js b/node_modules/@restart/hooks/esm/useBreakpoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..91c3292f43f51f8845e66a3be222137da5bd888c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useBreakpoint.js
@@ -0,0 +1,116 @@
+import useMediaQuery from './useMediaQuery';
+import { useMemo } from 'react';
+/**
+ * Create a responsive hook we a set of breakpoint names and widths.
+ * You can use any valid css units as well as a numbers (for pixels).
+ *
+ * **NOTE:** The object key order is important! it's assumed to be in order from smallest to largest
+ *
+ * ```ts
+ * const useBreakpoint = createBreakpointHook({
+ *  xs: 0,
+ *  sm: 576,
+ *  md: 768,
+ *  lg: 992,
+ *  xl: 1200,
+ * })
+ * ```
+ *
+ * **Watch out!** using string values will sometimes construct media queries using css `calc()` which
+ * is NOT supported in media queries by all browsers at the moment. use numbers for
+ * the widest range of browser support.
+ *
+ * @param breakpointValues A object hash of names to breakpoint dimensions
+ */
+export function createBreakpointHook(breakpointValues) {
+  const names = Object.keys(breakpointValues);
+  function and(query, next) {
+    if (query === next) {
+      return next;
+    }
+    return query ? `${query} and ${next}` : next;
+  }
+  function getNext(breakpoint) {
+    return names[Math.min(names.indexOf(breakpoint) + 1, names.length - 1)];
+  }
+  function getMaxQuery(breakpoint) {
+    const next = getNext(breakpoint);
+    let value = breakpointValues[next];
+    if (typeof value === 'number') value = `${value - 0.2}px`;else value = `calc(${value} - 0.2px)`;
+    return `(max-width: ${value})`;
+  }
+  function getMinQuery(breakpoint) {
+    let value = breakpointValues[breakpoint];
+    if (typeof value === 'number') {
+      value = `${value}px`;
+    }
+    return `(min-width: ${value})`;
+  }
+
+  /**
+   * Match a set of breakpoints
+   *
+   * ```tsx
+   * const MidSizeOnly = () => {
+   *   const isMid = useBreakpoint({ lg: 'down', sm: 'up' });
+   *
+   *   if (isMid) return <div>On a Reasonable sized Screen!</div>
+   *   return null;
+   * }
+   * ```
+   * @param breakpointMap An object map of breakpoints and directions, queries are constructed using "and" to join
+   * breakpoints together
+   * @param window Optionally specify the target window to match against (useful when rendering into iframes)
+   */
+
+  /**
+   * Match a single breakpoint exactly, up, or down.
+   *
+   * ```tsx
+   * const PhoneOnly = () => {
+   *   const isSmall = useBreakpoint('sm', 'down');
+   *
+   *   if (isSmall) return <div>On a Small Screen!</div>
+   *   return null;
+   * }
+   * ```
+   *
+   * @param breakpoint The breakpoint key
+   * @param direction A direction 'up' for a max, 'down' for min, true to match only the breakpoint
+   * @param window Optionally specify the target window to match against (useful when rendering into iframes)
+   */
+
+  function useBreakpoint(breakpointOrMap, direction, window) {
+    let breakpointMap;
+    if (typeof breakpointOrMap === 'object') {
+      breakpointMap = breakpointOrMap;
+      window = direction;
+      direction = true;
+    } else {
+      direction = direction || true;
+      breakpointMap = {
+        [breakpointOrMap]: direction
+      };
+    }
+    let query = useMemo(() => Object.entries(breakpointMap).reduce((query, [key, direction]) => {
+      if (direction === 'up' || direction === true) {
+        query = and(query, getMinQuery(key));
+      }
+      if (direction === 'down' || direction === true) {
+        query = and(query, getMaxQuery(key));
+      }
+      return query;
+    }, ''), [JSON.stringify(breakpointMap)]);
+    return useMediaQuery(query, window);
+  }
+  return useBreakpoint;
+}
+const useBreakpoint = createBreakpointHook({
+  xs: 0,
+  sm: 576,
+  md: 768,
+  lg: 992,
+  xl: 1200,
+  xxl: 1400
+});
+export default useBreakpoint;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useCallbackRef.d.ts b/node_modules/@restart/hooks/esm/useCallbackRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9a8a73884a66cf749c2089cbb6439d6dbcb9551
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCallbackRef.d.ts
@@ -0,0 +1,28 @@
+/**
+ * A convenience hook around `useState` designed to be paired with
+ * the component [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) api.
+ * Callback refs are useful over `useRef()` when you need to respond to the ref being set
+ * instead of lazily accessing it in an effect.
+ *
+ * ```ts
+ * const [element, attachRef] = useCallbackRef<HTMLDivElement>()
+ *
+ * useEffect(() => {
+ *   if (!element) return
+ *
+ *   const calendar = new FullCalendar.Calendar(element)
+ *
+ *   return () => {
+ *     calendar.destroy()
+ *   }
+ * }, [element])
+ *
+ * return <div ref={attachRef} />
+ * ```
+ *
+ * @category refs
+ */
+export default function useCallbackRef<TValue = unknown>(): [
+    TValue | null,
+    (ref: TValue | null) => void
+];
diff --git a/node_modules/@restart/hooks/esm/useCallbackRef.js b/node_modules/@restart/hooks/esm/useCallbackRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..94ec286b337e9d7c2092945bd9a29fb4138a311d
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCallbackRef.js
@@ -0,0 +1,29 @@
+import { useState } from 'react';
+
+/**
+ * A convenience hook around `useState` designed to be paired with
+ * the component [callback ref](https://reactjs.org/docs/refs-and-the-dom.html#callback-refs) api.
+ * Callback refs are useful over `useRef()` when you need to respond to the ref being set
+ * instead of lazily accessing it in an effect.
+ *
+ * ```ts
+ * const [element, attachRef] = useCallbackRef<HTMLDivElement>()
+ *
+ * useEffect(() => {
+ *   if (!element) return
+ *
+ *   const calendar = new FullCalendar.Calendar(element)
+ *
+ *   return () => {
+ *     calendar.destroy()
+ *   }
+ * }, [element])
+ *
+ * return <div ref={attachRef} />
+ * ```
+ *
+ * @category refs
+ */
+export default function useCallbackRef() {
+  return useState(null);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useCommittedRef.d.ts b/node_modules/@restart/hooks/esm/useCommittedRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..40eab97bc04c58ce4dfe10342ac4552c4bbb375c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCommittedRef.d.ts
@@ -0,0 +1,12 @@
+/// <reference types="react" />
+/**
+ * Creates a `Ref` whose value is updated in an effect, ensuring the most recent
+ * value is the one rendered with. Generally only required for Concurrent mode usage
+ * where previous work in `render()` may be discarded before being used.
+ *
+ * This is safe to access in an event handler.
+ *
+ * @param value The `Ref` value
+ */
+declare function useCommittedRef<TValue>(value: TValue): React.MutableRefObject<TValue>;
+export default useCommittedRef;
diff --git a/node_modules/@restart/hooks/esm/useCommittedRef.js b/node_modules/@restart/hooks/esm/useCommittedRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..576b5c4cd6ca22c502c452774555455aa32d0874
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCommittedRef.js
@@ -0,0 +1,19 @@
+import { useEffect, useRef } from 'react';
+
+/**
+ * Creates a `Ref` whose value is updated in an effect, ensuring the most recent
+ * value is the one rendered with. Generally only required for Concurrent mode usage
+ * where previous work in `render()` may be discarded before being used.
+ *
+ * This is safe to access in an event handler.
+ *
+ * @param value The `Ref` value
+ */
+function useCommittedRef(value) {
+  const ref = useRef(value);
+  useEffect(() => {
+    ref.current = value;
+  }, [value]);
+  return ref;
+}
+export default useCommittedRef;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useCustomEffect.d.ts b/node_modules/@restart/hooks/esm/useCustomEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9fbe7a11a4aad9dea1e790abc3e287abe5919fa
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCustomEffect.d.ts
@@ -0,0 +1,26 @@
+import { DependencyList, EffectCallback } from 'react';
+export type EffectHook = (effect: EffectCallback, deps?: DependencyList) => void;
+export type IsEqual<TDeps extends DependencyList> = (nextDeps: TDeps, prevDeps: TDeps) => boolean;
+export type CustomEffectOptions<TDeps extends DependencyList> = {
+    isEqual: IsEqual<TDeps>;
+    effectHook?: EffectHook;
+};
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param isEqual A function comparing the next and previous dependencyLists
+ */
+declare function useCustomEffect<TDeps extends DependencyList = DependencyList>(effect: EffectCallback, dependencies: TDeps, isEqual: IsEqual<TDeps>): void;
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param options
+ * @param options.isEqual A function comparing the next and previous dependencyLists
+ * @param options.effectHook the underlying effect hook used, defaults to useEffect
+ */
+declare function useCustomEffect<TDeps extends DependencyList = DependencyList>(effect: EffectCallback, dependencies: TDeps, options: CustomEffectOptions<TDeps>): void;
+export default useCustomEffect;
diff --git a/node_modules/@restart/hooks/esm/useCustomEffect.js b/node_modules/@restart/hooks/esm/useCustomEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..788f9054877f358081f2aded1879cdcb164d7c9c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useCustomEffect.js
@@ -0,0 +1,51 @@
+import { useRef, useEffect, useDebugValue } from 'react';
+import useMounted from './useMounted';
+
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param isEqual A function comparing the next and previous dependencyLists
+ */
+
+/**
+ * a useEffect() hook with customized depedency comparision
+ *
+ * @param effect The effect callback
+ * @param dependencies A list of dependencies
+ * @param options
+ * @param options.isEqual A function comparing the next and previous dependencyLists
+ * @param options.effectHook the underlying effect hook used, defaults to useEffect
+ */
+
+function useCustomEffect(effect, dependencies, isEqualOrOptions) {
+  const isMounted = useMounted();
+  const {
+    isEqual,
+    effectHook = useEffect
+  } = typeof isEqualOrOptions === 'function' ? {
+    isEqual: isEqualOrOptions
+  } : isEqualOrOptions;
+  const dependenciesRef = useRef();
+  dependenciesRef.current = dependencies;
+  const cleanupRef = useRef(null);
+  effectHook(() => {
+    // If the ref the is `null` it's either the first effect or the last effect
+    // ran and was cleared, meaning _this_ update should run, b/c the equality
+    // check failed on in the cleanup of the last effect.
+    if (cleanupRef.current === null) {
+      const cleanup = effect();
+      cleanupRef.current = () => {
+        if (isMounted() && isEqual(dependenciesRef.current, dependencies)) {
+          return;
+        }
+        cleanupRef.current = null;
+        if (cleanup) cleanup();
+      };
+    }
+    return cleanupRef.current;
+  });
+  useDebugValue(effect);
+}
+export default useCustomEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useDebouncedCallback.d.ts b/node_modules/@restart/hooks/esm/useDebouncedCallback.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..199c4a52b9aee02ad8b05b878fdd71365493fdcc
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedCallback.d.ts
@@ -0,0 +1,32 @@
+export interface UseDebouncedCallbackOptions {
+    wait: number;
+    leading?: boolean;
+    trailing?: boolean;
+    maxWait?: number;
+}
+export interface UseDebouncedCallbackOptionsLeading extends UseDebouncedCallbackOptions {
+    leading: true;
+}
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+declare function useDebouncedCallback<TCallback extends (...args: any[]) => any>(fn: TCallback, options: UseDebouncedCallbackOptionsLeading): (...args: Parameters<TCallback>) => ReturnType<TCallback>;
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+declare function useDebouncedCallback<TCallback extends (...args: any[]) => any>(fn: TCallback, waitOrOptions: number | UseDebouncedCallbackOptions): (...args: Parameters<TCallback>) => ReturnType<TCallback> | undefined;
+export default useDebouncedCallback;
diff --git a/node_modules/@restart/hooks/esm/useDebouncedCallback.js b/node_modules/@restart/hooks/esm/useDebouncedCallback.js
new file mode 100644
index 0000000000000000000000000000000000000000..80e60009ad12ea86dcf5985ade554b3486296ae6
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedCallback.js
@@ -0,0 +1,131 @@
+import { useMemo, useRef } from 'react';
+import useTimeout from './useTimeout';
+import useEventCallback from './useEventCallback';
+import useWillUnmount from './useWillUnmount';
+
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+
+/**
+ * Creates a debounced function that will invoke the input function after the
+ * specified wait.
+ *
+ * > Heads up! debounced functions are not pure since they are called in a timeout
+ * > Don't call them inside render.
+ *
+ * @param fn a function that will be debounced
+ * @param waitOrOptions a wait in milliseconds or a debounce configuration
+ */
+
+function useDebouncedCallback(fn, waitOrOptions) {
+  const lastCallTimeRef = useRef(null);
+  const lastInvokeTimeRef = useRef(0);
+  const returnValueRef = useRef();
+  const isTimerSetRef = useRef(false);
+  const lastArgsRef = useRef(null);
+  // Use any to bypass type issue with setTimeout.
+  const timerRef = useRef(0);
+  const handleCallback = useEventCallback(fn);
+  const {
+    wait,
+    maxWait,
+    leading = false,
+    trailing = true
+  } = typeof waitOrOptions === 'number' ? {
+    wait: waitOrOptions
+  } : waitOrOptions;
+  const timeout = useTimeout();
+  useWillUnmount(() => {
+    clearTimeout(timerRef.current);
+    isTimerSetRef.current = false;
+  });
+  return useMemo(() => {
+    const hasMaxWait = !!maxWait;
+    function leadingEdge(time) {
+      // Reset any `maxWait` timer.
+      lastInvokeTimeRef.current = time;
+
+      // Start the timer for the trailing edge.
+      isTimerSetRef.current = true;
+      timeout.set(timerExpired, wait);
+      if (!leading) {
+        return returnValueRef.current;
+      }
+      return invokeFunc(time);
+    }
+    function trailingEdge(time) {
+      isTimerSetRef.current = false;
+
+      // Only invoke if we have `lastArgs` which means `func` has been
+      // debounced at least once.
+      if (trailing && lastArgsRef.current) {
+        return invokeFunc(time);
+      }
+      lastArgsRef.current = null;
+      return returnValueRef.current;
+    }
+    function timerExpired() {
+      var _lastCallTimeRef$curr;
+      var time = Date.now();
+      if (shouldInvoke(time)) {
+        return trailingEdge(time);
+      }
+      const timeSinceLastCall = time - ((_lastCallTimeRef$curr = lastCallTimeRef.current) != null ? _lastCallTimeRef$curr : 0);
+      const timeSinceLastInvoke = time - lastInvokeTimeRef.current;
+      const timeWaiting = wait - timeSinceLastCall;
+
+      // Restart the timer.
+      timeout.set(timerExpired, hasMaxWait ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting);
+    }
+    function invokeFunc(time) {
+      var _lastArgsRef$current;
+      const args = (_lastArgsRef$current = lastArgsRef.current) != null ? _lastArgsRef$current : [];
+      lastArgsRef.current = null;
+      lastInvokeTimeRef.current = time;
+      const retValue = handleCallback(...args);
+      returnValueRef.current = retValue;
+      return retValue;
+    }
+    function shouldInvoke(time) {
+      var _lastCallTimeRef$curr2;
+      const timeSinceLastCall = time - ((_lastCallTimeRef$curr2 = lastCallTimeRef.current) != null ? _lastCallTimeRef$curr2 : 0);
+      const timeSinceLastInvoke = time - lastInvokeTimeRef.current;
+
+      // Either this is the first call, activity has stopped and we're at the
+      // trailing edge, the system time has gone backwards and we're treating
+      // it as the trailing edge, or we've hit the `maxWait` limit.
+      return lastCallTimeRef.current === null || timeSinceLastCall >= wait || timeSinceLastCall < 0 || hasMaxWait && timeSinceLastInvoke >= maxWait;
+    }
+    return (...args) => {
+      const time = Date.now();
+      const isInvoking = shouldInvoke(time);
+      lastArgsRef.current = args;
+      lastCallTimeRef.current = time;
+      if (isInvoking) {
+        if (!isTimerSetRef.current) {
+          return leadingEdge(lastCallTimeRef.current);
+        }
+        if (hasMaxWait) {
+          // Handle invocations in a tight loop.
+          isTimerSetRef.current = true;
+          timerRef.current = setTimeout(timerExpired, wait);
+          return invokeFunc(lastCallTimeRef.current);
+        }
+      }
+      if (!isTimerSetRef.current) {
+        isTimerSetRef.current = true;
+        timerRef.current = setTimeout(timerExpired, wait);
+      }
+      return returnValueRef.current;
+    };
+  }, [handleCallback, wait, maxWait, leading, trailing]);
+}
+export default useDebouncedCallback;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useDebouncedState.d.ts b/node_modules/@restart/hooks/esm/useDebouncedState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6eed6668a86c02f245324954a2b37d908f6b79eb
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedState.d.ts
@@ -0,0 +1,18 @@
+import { Dispatch, SetStateAction } from 'react';
+import { UseDebouncedCallbackOptions } from './useDebouncedCallback';
+/**
+ * Similar to `useState`, except the setter function is debounced by
+ * the specified delay. Unlike `useState`, the returned setter is not "pure" having
+ * the side effect of scheduling an update in a timeout, which makes it unsafe to call
+ * inside of the component render phase.
+ *
+ * ```ts
+ * const [value, setValue] = useDebouncedState('test', 500)
+ *
+ * setValue('test2')
+ * ```
+ *
+ * @param initialState initial state value
+ * @param delayOrOptions The milliseconds delay before a new value is set, or options object
+ */
+export default function useDebouncedState<T>(initialState: T | (() => T), delayOrOptions: number | UseDebouncedCallbackOptions): [T, Dispatch<SetStateAction<T>>];
diff --git a/node_modules/@restart/hooks/esm/useDebouncedState.js b/node_modules/@restart/hooks/esm/useDebouncedState.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7ac32e169add6aeaa5b5f3efa057b1c35b395d0
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedState.js
@@ -0,0 +1,23 @@
+import { useState } from 'react';
+import useDebouncedCallback from './useDebouncedCallback';
+
+/**
+ * Similar to `useState`, except the setter function is debounced by
+ * the specified delay. Unlike `useState`, the returned setter is not "pure" having
+ * the side effect of scheduling an update in a timeout, which makes it unsafe to call
+ * inside of the component render phase.
+ *
+ * ```ts
+ * const [value, setValue] = useDebouncedState('test', 500)
+ *
+ * setValue('test2')
+ * ```
+ *
+ * @param initialState initial state value
+ * @param delayOrOptions The milliseconds delay before a new value is set, or options object
+ */
+export default function useDebouncedState(initialState, delayOrOptions) {
+  const [state, setState] = useState(initialState);
+  const debouncedSetState = useDebouncedCallback(setState, delayOrOptions);
+  return [state, debouncedSetState];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useDebouncedValue.d.ts b/node_modules/@restart/hooks/esm/useDebouncedValue.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..91e1c8ce0b16818d1f7ae1ebaae39d83e8a12ed7
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedValue.d.ts
@@ -0,0 +1,15 @@
+import { UseDebouncedCallbackOptions } from './useDebouncedCallback';
+export type UseDebouncedValueOptions = UseDebouncedCallbackOptions & {
+    isEqual?: (a: any, b: any) => boolean;
+};
+/**
+ * Debounce a value change by a specified number of milliseconds. Useful
+ * when you want need to trigger a change based on a value change, but want
+ * to defer changes until the changes reach some level of infrequency.
+ *
+ * @param value
+ * @param waitOrOptions
+ * @returns
+ */
+declare function useDebouncedValue<TValue>(value: TValue, waitOrOptions?: number | UseDebouncedValueOptions): TValue;
+export default useDebouncedValue;
diff --git a/node_modules/@restart/hooks/esm/useDebouncedValue.js b/node_modules/@restart/hooks/esm/useDebouncedValue.js
new file mode 100644
index 0000000000000000000000000000000000000000..b906c6c63b3c4734f9f4d4e2c090d09078046641
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useDebouncedValue.js
@@ -0,0 +1,26 @@
+import { useEffect, useDebugValue, useRef } from 'react';
+import useDebouncedState from './useDebouncedState';
+const defaultIsEqual = (a, b) => a === b;
+/**
+ * Debounce a value change by a specified number of milliseconds. Useful
+ * when you want need to trigger a change based on a value change, but want
+ * to defer changes until the changes reach some level of infrequency.
+ *
+ * @param value
+ * @param waitOrOptions
+ * @returns
+ */
+function useDebouncedValue(value, waitOrOptions = 500) {
+  const previousValueRef = useRef(value);
+  const isEqual = typeof waitOrOptions === 'object' ? waitOrOptions.isEqual || defaultIsEqual : defaultIsEqual;
+  const [debouncedValue, setDebouncedValue] = useDebouncedState(value, waitOrOptions);
+  useDebugValue(debouncedValue);
+  useEffect(() => {
+    if (!isEqual || !isEqual(previousValueRef.current, value)) {
+      previousValueRef.current = value;
+      setDebouncedValue(value);
+    }
+  });
+  return debouncedValue;
+}
+export default useDebouncedValue;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useEventCallback.d.ts b/node_modules/@restart/hooks/esm/useEventCallback.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6ef9082d98ea05275fa5f5eed10949e9c3fc34b7
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useEventCallback.d.ts
@@ -0,0 +1 @@
+export default function useEventCallback<TCallback extends (...args: any[]) => any>(fn?: TCallback | null): TCallback;
diff --git a/node_modules/@restart/hooks/esm/useEventCallback.js b/node_modules/@restart/hooks/esm/useEventCallback.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca3135a0daf3fbaf3af6d8e62f3495bb56a3eea3
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useEventCallback.js
@@ -0,0 +1,8 @@
+import { useCallback } from 'react';
+import useCommittedRef from './useCommittedRef';
+export default function useEventCallback(fn) {
+  const ref = useCommittedRef(fn);
+  return useCallback(function (...args) {
+    return ref.current && ref.current(...args);
+  }, [ref]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useEventListener.d.ts b/node_modules/@restart/hooks/esm/useEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..24c6e9b305eed77841dc10ceb38b73a84958d0aa
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useEventListener.d.ts
@@ -0,0 +1,12 @@
+type EventHandler<T, K extends keyof DocumentEventMap> = (this: T, ev: DocumentEventMap[K]) => any;
+/**
+ * Attaches an event handler outside directly to specified DOM element
+ * bypassing the react synthetic event system.
+ *
+ * @param element The target to listen for events on
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useEventListener<T extends Element | Document | Window, K extends keyof DocumentEventMap>(eventTarget: T | (() => T), event: K, listener: EventHandler<T, K>, capture?: boolean | AddEventListenerOptions): void;
+export {};
diff --git a/node_modules/@restart/hooks/esm/useEventListener.js b/node_modules/@restart/hooks/esm/useEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..4c0478f8d8b488278e474066f1ac390405eedacd
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useEventListener.js
@@ -0,0 +1,19 @@
+import { useEffect } from 'react';
+import useEventCallback from './useEventCallback';
+/**
+ * Attaches an event handler outside directly to specified DOM element
+ * bypassing the react synthetic event system.
+ *
+ * @param element The target to listen for events on
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useEventListener(eventTarget, event, listener, capture = false) {
+  const handler = useEventCallback(listener);
+  useEffect(() => {
+    const target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
+    target.addEventListener(event, handler, capture);
+    return () => target.removeEventListener(event, handler, capture);
+  }, [eventTarget]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useFocusManager.d.ts b/node_modules/@restart/hooks/esm/useFocusManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8c9a55eee429e3139975108569905bbcaa938250
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useFocusManager.d.ts
@@ -0,0 +1,50 @@
+/// <reference types="react" />
+export interface FocusManagerOptions {
+    /**
+     * A callback fired when focus shifts. returning `false` will prevent
+     * handling the focus event
+     */
+    willHandle?(focused: boolean, event: React.FocusEvent): boolean | void;
+    /**
+     * A callback fired after focus is handled but before onChange is called
+     */
+    didHandle?(focused: boolean, event: React.FocusEvent): void;
+    /**
+     * A callback fired after focus has changed
+     */
+    onChange?(focused: boolean, event: React.FocusEvent): void;
+    /**
+     * When true, the event handlers will not report focus changes
+     */
+    isDisabled: () => boolean;
+}
+export interface FocusController {
+    onBlur: (event: any) => void;
+    onFocus: (event: any) => void;
+}
+/**
+ * useFocusManager provides a way to track and manage focus as it moves around
+ * a container element. An `onChange` is fired when focus enters or leaves the
+ * element, but not when it moves around inside the element, similar to
+ * `pointerenter` and `pointerleave` DOM events.
+ *
+ * ```tsx
+ * const [focused, setFocusState] = useState(false)
+ *
+ * const { onBlur, onFocus } = useFocusManager({
+ *   onChange: nextFocused => setFocusState(nextFocused)
+ * })
+ *
+ * return (
+ *   <div tabIndex="-1" onFocus={onFocus} onBlur={onBlur}>
+ *     {String(focused)}
+ *     <input />
+ *     <input />
+ *
+ *     <button>A button</button>
+ *   </div>
+ * ```
+ *
+ * @returns a memoized FocusController containing event handlers
+ */
+export default function useFocusManager(opts: FocusManagerOptions): FocusController;
diff --git a/node_modules/@restart/hooks/esm/useFocusManager.js b/node_modules/@restart/hooks/esm/useFocusManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..a48700964ebf7a36237d44b818925a859276aefc
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useFocusManager.js
@@ -0,0 +1,69 @@
+import { useCallback, useMemo, useRef } from 'react';
+import useEventCallback from './useEventCallback';
+import useMounted from './useMounted';
+/**
+ * useFocusManager provides a way to track and manage focus as it moves around
+ * a container element. An `onChange` is fired when focus enters or leaves the
+ * element, but not when it moves around inside the element, similar to
+ * `pointerenter` and `pointerleave` DOM events.
+ *
+ * ```tsx
+ * const [focused, setFocusState] = useState(false)
+ *
+ * const { onBlur, onFocus } = useFocusManager({
+ *   onChange: nextFocused => setFocusState(nextFocused)
+ * })
+ *
+ * return (
+ *   <div tabIndex="-1" onFocus={onFocus} onBlur={onBlur}>
+ *     {String(focused)}
+ *     <input />
+ *     <input />
+ *
+ *     <button>A button</button>
+ *   </div>
+ * ```
+ *
+ * @returns a memoized FocusController containing event handlers
+ */
+export default function useFocusManager(opts) {
+  const isMounted = useMounted();
+  const lastFocused = useRef();
+  const handle = useRef();
+  const willHandle = useEventCallback(opts.willHandle);
+  const didHandle = useEventCallback(opts.didHandle);
+  const onChange = useEventCallback(opts.onChange);
+  const isDisabled = useEventCallback(opts.isDisabled);
+  const handleChange = useCallback((focused, event) => {
+    if (focused !== lastFocused.current) {
+      didHandle == null ? void 0 : didHandle(focused, event);
+
+      // only fire a change when unmounted if its a blur
+      if (isMounted() || !focused) {
+        lastFocused.current = focused;
+        onChange == null ? void 0 : onChange(focused, event);
+      }
+    }
+  }, [isMounted, didHandle, onChange, lastFocused]);
+  const handleFocusChange = useCallback((focused, event) => {
+    if (isDisabled()) return;
+    if (event && event.persist) event.persist();
+    if ((willHandle == null ? void 0 : willHandle(focused, event)) === false) {
+      return;
+    }
+    clearTimeout(handle.current);
+    if (focused) {
+      handleChange(focused, event);
+    } else {
+      handle.current = window.setTimeout(() => handleChange(focused, event));
+    }
+  }, [willHandle, handleChange]);
+  return useMemo(() => ({
+    onBlur: event => {
+      handleFocusChange(false, event);
+    },
+    onFocus: event => {
+      handleFocusChange(true, event);
+    }
+  }), [handleFocusChange]);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useForceUpdate.d.ts b/node_modules/@restart/hooks/esm/useForceUpdate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e0dea058b7e665072055d6691982947d49addff3
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useForceUpdate.d.ts
@@ -0,0 +1,17 @@
+/**
+ * Returns a function that triggers a component update. the hook equivalent to
+ * `this.forceUpdate()` in a class component. In most cases using a state value directly
+ * is preferable but may be required in some advanced usages of refs for interop or
+ * when direct DOM manipulation is required.
+ *
+ * ```ts
+ * const forceUpdate = useForceUpdate();
+ *
+ * const updateOnClick = useCallback(() => {
+ *  forceUpdate()
+ * }, [forceUpdate])
+ *
+ * return <button type="button" onClick={updateOnClick}>Hi there</button>
+ * ```
+ */
+export default function useForceUpdate(): () => void;
diff --git a/node_modules/@restart/hooks/esm/useForceUpdate.js b/node_modules/@restart/hooks/esm/useForceUpdate.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3945477b7632805f136e9945608a89b01c5d050
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useForceUpdate.js
@@ -0,0 +1,24 @@
+import { useReducer } from 'react';
+
+/**
+ * Returns a function that triggers a component update. the hook equivalent to
+ * `this.forceUpdate()` in a class component. In most cases using a state value directly
+ * is preferable but may be required in some advanced usages of refs for interop or
+ * when direct DOM manipulation is required.
+ *
+ * ```ts
+ * const forceUpdate = useForceUpdate();
+ *
+ * const updateOnClick = useCallback(() => {
+ *  forceUpdate()
+ * }, [forceUpdate])
+ *
+ * return <button type="button" onClick={updateOnClick}>Hi there</button>
+ * ```
+ */
+export default function useForceUpdate() {
+  // The toggling state value is designed to defeat React optimizations for skipping
+  // updates when they are strictly equal to the last state value
+  const [, dispatch] = useReducer(state => !state, false);
+  return dispatch;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useGlobalListener.d.ts b/node_modules/@restart/hooks/esm/useGlobalListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..35177290f45ad816f6971e58ffa99757399c46f2
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useGlobalListener.d.ts
@@ -0,0 +1,17 @@
+type DocumentEventHandler<K extends keyof DocumentEventMap> = (this: Document, ev: DocumentEventMap[K]) => any;
+/**
+ * Attaches an event handler outside directly to the `document`,
+ * bypassing the react synthetic event system.
+ *
+ * ```ts
+ * useGlobalListener('keydown', (event) => {
+ *  console.log(event.key)
+ * })
+ * ```
+ *
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useGlobalListener<K extends keyof DocumentEventMap>(event: K, handler: DocumentEventHandler<K>, capture?: boolean | AddEventListenerOptions): void;
+export {};
diff --git a/node_modules/@restart/hooks/esm/useGlobalListener.js b/node_modules/@restart/hooks/esm/useGlobalListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..49a7e491ef13229c17feaa91ef247add2db66e5b
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useGlobalListener.js
@@ -0,0 +1,20 @@
+import useEventListener from './useEventListener';
+import { useCallback } from 'react';
+/**
+ * Attaches an event handler outside directly to the `document`,
+ * bypassing the react synthetic event system.
+ *
+ * ```ts
+ * useGlobalListener('keydown', (event) => {
+ *  console.log(event.key)
+ * })
+ * ```
+ *
+ * @param event The DOM event name
+ * @param handler An event handler
+ * @param capture Whether or not to listen during the capture event phase
+ */
+export default function useGlobalListener(event, handler, capture = false) {
+  const documentTarget = useCallback(() => document, []);
+  return useEventListener(documentTarget, event, handler, capture);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useImage.d.ts b/node_modules/@restart/hooks/esm/useImage.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bb76fd42a247833ccbafda73c98bef745faa2dff
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useImage.d.ts
@@ -0,0 +1,31 @@
+type State = {
+    image: HTMLImageElement | null;
+    error: unknown | null;
+};
+/**
+ * Fetch and load an image for programatic use such as in a `<canvas>` element.
+ *
+ * @param imageOrUrl The `HtmlImageElement` or image url to load
+ * @param crossOrigin The `crossorigin` attribute to set
+ *
+ * ```ts
+ * const { image, error } = useImage('/static/kittens.png')
+ * const ref = useRef<HTMLCanvasElement>()
+ *
+ * useEffect(() => {
+ *   const ctx = ref.current.getContext('2d')
+ *
+ *   if (image) {
+ *     ctx.drawImage(image, 0, 0)
+ *   }
+ * }, [ref, image])
+ *
+ * return (
+ *   <>
+ *     {error && "there was a problem loading the image"}
+ *     <canvas ref={ref} />
+ *   </>
+ * ```
+ */
+export default function useImage(imageOrUrl?: string | HTMLImageElement | null | undefined, crossOrigin?: 'anonymous' | 'use-credentials' | string): State;
+export {};
diff --git a/node_modules/@restart/hooks/esm/useImage.js b/node_modules/@restart/hooks/esm/useImage.js
new file mode 100644
index 0000000000000000000000000000000000000000..8d4de99f2237d3edfcc08b174792df343660c940
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useImage.js
@@ -0,0 +1,69 @@
+import { useState, useEffect } from 'react';
+/**
+ * Fetch and load an image for programatic use such as in a `<canvas>` element.
+ *
+ * @param imageOrUrl The `HtmlImageElement` or image url to load
+ * @param crossOrigin The `crossorigin` attribute to set
+ *
+ * ```ts
+ * const { image, error } = useImage('/static/kittens.png')
+ * const ref = useRef<HTMLCanvasElement>()
+ *
+ * useEffect(() => {
+ *   const ctx = ref.current.getContext('2d')
+ *
+ *   if (image) {
+ *     ctx.drawImage(image, 0, 0)
+ *   }
+ * }, [ref, image])
+ *
+ * return (
+ *   <>
+ *     {error && "there was a problem loading the image"}
+ *     <canvas ref={ref} />
+ *   </>
+ * ```
+ */
+export default function useImage(imageOrUrl, crossOrigin) {
+  const [state, setState] = useState({
+    image: null,
+    error: null
+  });
+  useEffect(() => {
+    if (!imageOrUrl) return undefined;
+    let image;
+    if (typeof imageOrUrl === 'string') {
+      image = new Image();
+      if (crossOrigin) image.crossOrigin = crossOrigin;
+      image.src = imageOrUrl;
+    } else {
+      image = imageOrUrl;
+      if (image.complete && image.naturalHeight > 0) {
+        setState({
+          image,
+          error: null
+        });
+        return;
+      }
+    }
+    function onLoad() {
+      setState({
+        image,
+        error: null
+      });
+    }
+    function onError(error) {
+      setState({
+        image,
+        error
+      });
+    }
+    image.addEventListener('load', onLoad);
+    image.addEventListener('error', onError);
+    return () => {
+      image.removeEventListener('load', onLoad);
+      image.removeEventListener('error', onError);
+    };
+  }, [imageOrUrl, crossOrigin]);
+  return state;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.d.ts b/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0f2e001b509a3ebf86b17b67fa025fd7a5fde825
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.d.ts
@@ -0,0 +1,2 @@
+import useUpdateImmediateEffect from './useUpdateImmediateEffect';
+export default useUpdateImmediateEffect;
diff --git a/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.js b/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed99ee2479939cac044aae63352e8a36e8c22410
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useImmediateUpdateEffect.js
@@ -0,0 +1,2 @@
+import useUpdateImmediateEffect from './useUpdateImmediateEffect';
+export default useUpdateImmediateEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useIntersectionObserver.d.ts b/node_modules/@restart/hooks/esm/useIntersectionObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..84daea237a135623d8d13f6e1d58725644510da7
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIntersectionObserver.d.ts
@@ -0,0 +1,28 @@
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element that returns it's entries as they arrive.
+ *
+ * @param element The DOM element to observe
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ */
+declare function useIntersectionObserver<TElement extends Element>(element: TElement | null | undefined, options?: IntersectionObserverInit): IntersectionObserverEntry[];
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element. This overload does not trigger component updates when receiving new
+ * entries. This allows for finer grained performance optimizations by the consumer.
+ *
+ * @param element The DOM element to observe
+ * @param callback A listener for intersection updates.
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ *
+ */
+declare function useIntersectionObserver<TElement extends Element>(element: TElement | null | undefined, callback: IntersectionObserverCallback, options?: IntersectionObserverInit): void;
+export default useIntersectionObserver;
diff --git a/node_modules/@restart/hooks/esm/useIntersectionObserver.js b/node_modules/@restart/hooks/esm/useIntersectionObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..064cc3fc54fe3095f458847fd53e4493a7380f91
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIntersectionObserver.js
@@ -0,0 +1,65 @@
+import { useState } from 'react';
+import useStableMemo from './useStableMemo';
+import useEffect from './useIsomorphicEffect';
+import useEventCallback from './useEventCallback';
+
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element that returns it's entries as they arrive.
+ *
+ * @param element The DOM element to observe
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ */
+
+/**
+ * Setup an [`IntersectionObserver`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver) on
+ * a DOM Element. This overload does not trigger component updates when receiving new
+ * entries. This allows for finer grained performance optimizations by the consumer.
+ *
+ * @param element The DOM element to observe
+ * @param callback A listener for intersection updates.
+ * @param init IntersectionObserver options with a notable change,
+ * unlike a plain IntersectionObserver `root: null` means "not provided YET",
+ * and the hook will wait until it receives a non-null value to set up the observer.
+ * This change allows for easier syncing of element and root values in a React
+ * context.
+ *
+ */
+
+function useIntersectionObserver(element, callbackOrOptions, maybeOptions) {
+  let callback;
+  let options;
+  if (typeof callbackOrOptions === 'function') {
+    callback = callbackOrOptions;
+    options = maybeOptions || {};
+  } else {
+    options = callbackOrOptions || {};
+  }
+  const {
+    threshold,
+    root,
+    rootMargin
+  } = options;
+  const [entries, setEntry] = useState(null);
+  const handler = useEventCallback(callback || setEntry);
+
+  // We wait for element to exist before constructing
+  const observer = useStableMemo(() => root !== null && typeof IntersectionObserver !== 'undefined' && new IntersectionObserver(handler, {
+    threshold,
+    root,
+    rootMargin
+  }), [handler, root, rootMargin, threshold && JSON.stringify(threshold)]);
+  useEffect(() => {
+    if (!element || !observer) return;
+    observer.observe(element);
+    return () => {
+      observer.unobserve(element);
+    };
+  }, [observer, element]);
+  return callback ? undefined : entries || [];
+}
+export default useIntersectionObserver;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useInterval.d.ts b/node_modules/@restart/hooks/esm/useInterval.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..08fc9fc1344212b6c5047f4fd16b80b2da5e5c0d
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useInterval.d.ts
@@ -0,0 +1,61 @@
+/**
+ * Creates a `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  function Timer() {
+ *    const [timer, setTimer] = useState(0)
+ *    useInterval(() => setTimer(i => i + 1), 1000)
+ *
+ *    return <span>{timer} seconds past</span>
+ *  }
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ */
+declare function useInterval(fn: () => void, ms: number): void;
+/**
+ * Creates a pausable `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [paused, setPaused] = useState(false)
+ *  const [timer, setTimer] = useState(0)
+ *
+ *  useInterval(() => setTimer(i => i + 1), 1000, paused)
+ *
+ *  return (
+ *    <span>
+ *      {timer} seconds past
+ *
+ *      <button onClick={() => setPaused(p => !p)}>{paused ? 'Play' : 'Pause' }</button>
+ *    </span>
+ * )
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ */
+declare function useInterval(fn: () => void, ms: number, paused: boolean): void;
+/**
+ * Creates a pausable `setInterval` that _fires_ immediately and is
+ * properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [timer, setTimer] = useState(-1)
+ *  useInterval(() => setTimer(i => i + 1), 1000, false, true)
+ *
+ *  // will update to 0 on the first effect
+ *  return <span>{timer} seconds past</span>
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ * @param runImmediately Whether to run the function immediately on mount or unpause
+ * rather than waiting for the first interval to elapse
+ *
+
+ */
+declare function useInterval(fn: () => void, ms: number, paused: boolean, runImmediately: boolean): void;
+export default useInterval;
diff --git a/node_modules/@restart/hooks/esm/useInterval.js b/node_modules/@restart/hooks/esm/useInterval.js
new file mode 100644
index 0000000000000000000000000000000000000000..727aab31fab42095df86a644c717d3f974fb5167
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useInterval.js
@@ -0,0 +1,89 @@
+import { useEffect } from 'react';
+import useCommittedRef from './useCommittedRef';
+
+/**
+ * Creates a `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  function Timer() {
+ *    const [timer, setTimer] = useState(0)
+ *    useInterval(() => setTimer(i => i + 1), 1000)
+ *
+ *    return <span>{timer} seconds past</span>
+ *  }
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ */
+
+/**
+ * Creates a pausable `setInterval` that is properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [paused, setPaused] = useState(false)
+ *  const [timer, setTimer] = useState(0)
+ *
+ *  useInterval(() => setTimer(i => i + 1), 1000, paused)
+ *
+ *  return (
+ *    <span>
+ *      {timer} seconds past
+ *
+ *      <button onClick={() => setPaused(p => !p)}>{paused ? 'Play' : 'Pause' }</button>
+ *    </span>
+ * )
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ */
+
+/**
+ * Creates a pausable `setInterval` that _fires_ immediately and is
+ * properly cleaned up when a component unmounted
+ *
+ * ```tsx
+ *  const [timer, setTimer] = useState(-1)
+ *  useInterval(() => setTimer(i => i + 1), 1000, false, true)
+ *
+ *  // will update to 0 on the first effect
+ *  return <span>{timer} seconds past</span>
+ * ```
+ *
+ * @param fn an function run on each interval
+ * @param ms The milliseconds duration of the interval
+ * @param paused Whether or not the interval is currently running
+ * @param runImmediately Whether to run the function immediately on mount or unpause
+ * rather than waiting for the first interval to elapse
+ *
+
+ */
+
+function useInterval(fn, ms, paused = false, runImmediately = false) {
+  let handle;
+  const fnRef = useCommittedRef(fn);
+  // this ref is necessary b/c useEffect will sometimes miss a paused toggle
+  // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
+  const pausedRef = useCommittedRef(paused);
+  const tick = () => {
+    if (pausedRef.current) return;
+    fnRef.current();
+    schedule(); // eslint-disable-line no-use-before-define
+  };
+
+  const schedule = () => {
+    clearTimeout(handle);
+    handle = setTimeout(tick, ms);
+  };
+  useEffect(() => {
+    if (runImmediately) {
+      tick();
+    } else {
+      schedule();
+    }
+    return () => clearTimeout(handle);
+  }, [paused, runImmediately]);
+}
+export default useInterval;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useIsInitialRenderRef.d.ts b/node_modules/@restart/hooks/esm/useIsInitialRenderRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..86307f2cf374b40e5368c604cc8abac8fbe482ca
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIsInitialRenderRef.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="react" />
+/**
+ * Returns ref that is `true` on the initial render and `false` on subsequent renders. It
+ * is StrictMode safe, so will reset correctly if the component is unmounted and remounted.
+ *
+ * This hook *must* be used before any effects that read it's value to be accurate.
+ */
+export default function useIsInitialRenderRef(): import("react").MutableRefObject<boolean>;
diff --git a/node_modules/@restart/hooks/esm/useIsInitialRenderRef.js b/node_modules/@restart/hooks/esm/useIsInitialRenderRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..ca8d5df05cbbc3cc160bb366e1dbb7c26a09883c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIsInitialRenderRef.js
@@ -0,0 +1,25 @@
+import { useEffect, useLayoutEffect, useRef } from 'react';
+
+/**
+ * Returns ref that is `true` on the initial render and `false` on subsequent renders. It
+ * is StrictMode safe, so will reset correctly if the component is unmounted and remounted.
+ *
+ * This hook *must* be used before any effects that read it's value to be accurate.
+ */
+export default function useIsInitialRenderRef() {
+  const effectCount = useRef(0);
+  const isInitialRenderRef = useRef(true);
+  useLayoutEffect(() => {
+    effectCount.current += 1;
+    if (effectCount.current >= 2) {
+      isInitialRenderRef.current = false;
+    }
+  });
+
+  // Strict mode handling in React 18
+  useEffect(() => () => {
+    effectCount.current = 0;
+    isInitialRenderRef.current = true;
+  }, []);
+  return isInitialRenderRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useIsomorphicEffect.d.ts b/node_modules/@restart/hooks/esm/useIsomorphicEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d7711f742e2e455caa48e8614a3db391d4e1d6db
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIsomorphicEffect.d.ts
@@ -0,0 +1,11 @@
+import { useEffect } from 'react';
+/**
+ * Is `useLayoutEffect` in a DOM or React Native environment, otherwise resolves to useEffect
+ * Only useful to avoid the console warning.
+ *
+ * PREFER `useEffect` UNLESS YOU KNOW WHAT YOU ARE DOING.
+ *
+ * @category effects
+ */
+declare const _default: typeof useEffect;
+export default _default;
diff --git a/node_modules/@restart/hooks/esm/useIsomorphicEffect.js b/node_modules/@restart/hooks/esm/useIsomorphicEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe3196df4fc2afa4c7e7bc5caaa26a41b34b1593
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useIsomorphicEffect.js
@@ -0,0 +1,17 @@
+import { useEffect, useLayoutEffect } from 'react';
+const isReactNative = typeof global !== 'undefined' &&
+// @ts-ignore
+global.navigator &&
+// @ts-ignore
+global.navigator.product === 'ReactNative';
+const isDOM = typeof document !== 'undefined';
+
+/**
+ * Is `useLayoutEffect` in a DOM or React Native environment, otherwise resolves to useEffect
+ * Only useful to avoid the console warning.
+ *
+ * PREFER `useEffect` UNLESS YOU KNOW WHAT YOU ARE DOING.
+ *
+ * @category effects
+ */
+export default isDOM || isReactNative ? useLayoutEffect : useEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMap.d.ts b/node_modules/@restart/hooks/esm/useMap.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9fe53e86695b901505e01b21940db9141277c62
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMap.d.ts
@@ -0,0 +1,31 @@
+export declare class ObservableMap<K, V> extends Map<K, V> {
+    private readonly listener;
+    constructor(listener: (map: ObservableMap<K, V>) => void, init?: Iterable<Readonly<[K, V]>>);
+    set(key: K, value: V): this;
+    delete(key: K): boolean;
+    clear(): void;
+}
+/**
+ * Create and return a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) that triggers rerenders when it's updated.
+ *
+ * ```tsx
+ * const customerAges = useMap<number>([
+ *  ['john', 24],
+ *  ['betsy', 25]
+ * ]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, ([name, age]) => (
+ *      <div>
+ *        {name}: {age}. <button onClick={() => ids.delete(name)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Map entries
+ */
+declare function useMap<K, V>(init?: Iterable<Readonly<[K, V]>>): ObservableMap<K, V>;
+export default useMap;
diff --git a/node_modules/@restart/hooks/esm/useMap.js b/node_modules/@restart/hooks/esm/useMap.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2c2a01b2904990eb7c3167c68bd4985268dfc5f
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMap.js
@@ -0,0 +1,52 @@
+import useForceUpdate from './useForceUpdate';
+import useStableMemo from './useStableMemo';
+export class ObservableMap extends Map {
+  constructor(listener, init) {
+    super(init);
+    this.listener = listener;
+  }
+  set(key, value) {
+    super.set(key, value);
+    // When initializing the Map, the base Map calls this.set() before the
+    // listener is assigned so it will be undefined
+    if (this.listener) this.listener(this);
+    return this;
+  }
+  delete(key) {
+    let result = super.delete(key);
+    this.listener(this);
+    return result;
+  }
+  clear() {
+    super.clear();
+    this.listener(this);
+  }
+}
+
+/**
+ * Create and return a [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) that triggers rerenders when it's updated.
+ *
+ * ```tsx
+ * const customerAges = useMap<number>([
+ *  ['john', 24],
+ *  ['betsy', 25]
+ * ]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, ([name, age]) => (
+ *      <div>
+ *        {name}: {age}. <button onClick={() => ids.delete(name)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Map entries
+ */
+function useMap(init) {
+  const forceUpdate = useForceUpdate();
+  return useStableMemo(() => new ObservableMap(forceUpdate, init), []);
+}
+export default useMap;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMediaQuery.d.ts b/node_modules/@restart/hooks/esm/useMediaQuery.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b8373a2ab52ceb5b9769b5625a5519bb6cfb22e4
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMediaQuery.d.ts
@@ -0,0 +1,20 @@
+/**
+ * Match a media query and get updates as the match changes. The media string is
+ * passed directly to `window.matchMedia` and run as a Layout Effect, so initial
+ * matches are returned before the browser has a chance to paint.
+ *
+ * ```tsx
+ * function Page() {
+ *   const isWide = useMediaQuery('min-width: 1000px')
+ *
+ *   return isWide ? "very wide" : 'not so wide'
+ * }
+ * ```
+ *
+ * Media query lists are also reused globally, hook calls for the same query
+ * will only create a matcher once under the hood.
+ *
+ * @param query A media query
+ * @param targetWindow The window to match against, uses the globally available one as a default.
+ */
+export default function useMediaQuery(query: string | null, targetWindow?: Window | undefined): boolean;
diff --git a/node_modules/@restart/hooks/esm/useMediaQuery.js b/node_modules/@restart/hooks/esm/useMediaQuery.js
new file mode 100644
index 0000000000000000000000000000000000000000..b09ac3a378f1be075ac364a27f50cd9d54e44540
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMediaQuery.js
@@ -0,0 +1,60 @@
+import useEffect from './useIsomorphicEffect';
+import { useState } from 'react';
+const matchersByWindow = new WeakMap();
+const getMatcher = (query, targetWindow) => {
+  if (!query || !targetWindow) return undefined;
+  const matchers = matchersByWindow.get(targetWindow) || new Map();
+  matchersByWindow.set(targetWindow, matchers);
+  let mql = matchers.get(query);
+  if (!mql) {
+    mql = targetWindow.matchMedia(query);
+    mql.refCount = 0;
+    matchers.set(mql.media, mql);
+  }
+  return mql;
+};
+/**
+ * Match a media query and get updates as the match changes. The media string is
+ * passed directly to `window.matchMedia` and run as a Layout Effect, so initial
+ * matches are returned before the browser has a chance to paint.
+ *
+ * ```tsx
+ * function Page() {
+ *   const isWide = useMediaQuery('min-width: 1000px')
+ *
+ *   return isWide ? "very wide" : 'not so wide'
+ * }
+ * ```
+ *
+ * Media query lists are also reused globally, hook calls for the same query
+ * will only create a matcher once under the hood.
+ *
+ * @param query A media query
+ * @param targetWindow The window to match against, uses the globally available one as a default.
+ */
+export default function useMediaQuery(query, targetWindow = typeof window === 'undefined' ? undefined : window) {
+  const mql = getMatcher(query, targetWindow);
+  const [matches, setMatches] = useState(() => mql ? mql.matches : false);
+  useEffect(() => {
+    let mql = getMatcher(query, targetWindow);
+    if (!mql) {
+      return setMatches(false);
+    }
+    let matchers = matchersByWindow.get(targetWindow);
+    const handleChange = () => {
+      setMatches(mql.matches);
+    };
+    mql.refCount++;
+    mql.addListener(handleChange);
+    handleChange();
+    return () => {
+      mql.removeListener(handleChange);
+      mql.refCount--;
+      if (mql.refCount <= 0) {
+        matchers == null ? void 0 : matchers.delete(mql.media);
+      }
+      mql = undefined;
+    };
+  }, [query]);
+  return matches;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMergeState.d.ts b/node_modules/@restart/hooks/esm/useMergeState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4516b285c8d8720be431fd018f2a6f5f17d5d078
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergeState.d.ts
@@ -0,0 +1,22 @@
+type Updater<TState> = (state: TState) => Partial<TState> | null;
+/**
+ * Updates state, partial updates are merged into existing state values
+ */
+export type MergeStateSetter<TState> = (update: Updater<TState> | Partial<TState> | null) => void;
+/**
+ * Mimics a React class component's state model, of having a single unified
+ * `state` object and an updater that merges updates into the existing state, as
+ * opposed to replacing it.
+ *
+ * ```js
+ * const [state, setState] = useMergeState({ name: 'Betsy', age: 24 })
+ *
+ * setState({ name: 'Johan' }) // { name: 'Johan', age: 24 }
+ *
+ * setState(state => ({ age: state.age + 10 })) // { name: 'Johan', age: 34 }
+ * ```
+ *
+ * @param initialState The initial state object
+ */
+export default function useMergeState<TState extends {}>(initialState: TState | (() => TState)): [TState, MergeStateSetter<TState>];
+export {};
diff --git a/node_modules/@restart/hooks/esm/useMergeState.js b/node_modules/@restart/hooks/esm/useMergeState.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce7ed160288afef43b052fcdfb706f1132b4505d
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergeState.js
@@ -0,0 +1,36 @@
+import { useCallback, useState } from 'react';
+
+/**
+ * Updates state, partial updates are merged into existing state values
+ */
+
+/**
+ * Mimics a React class component's state model, of having a single unified
+ * `state` object and an updater that merges updates into the existing state, as
+ * opposed to replacing it.
+ *
+ * ```js
+ * const [state, setState] = useMergeState({ name: 'Betsy', age: 24 })
+ *
+ * setState({ name: 'Johan' }) // { name: 'Johan', age: 24 }
+ *
+ * setState(state => ({ age: state.age + 10 })) // { name: 'Johan', age: 34 }
+ * ```
+ *
+ * @param initialState The initial state object
+ */
+export default function useMergeState(initialState) {
+  const [state, setState] = useState(initialState);
+  const updater = useCallback(update => {
+    if (update === null) return;
+    if (typeof update === 'function') {
+      setState(state => {
+        const nextState = update(state);
+        return nextState == null ? state : Object.assign({}, state, nextState);
+      });
+    } else {
+      setState(state => Object.assign({}, state, update));
+    }
+  }, [setState]);
+  return [state, updater];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMergeStateFromProps.d.ts b/node_modules/@restart/hooks/esm/useMergeStateFromProps.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..10f44adf26a306702da4321fc0c7ba73bc3e01f5
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergeStateFromProps.d.ts
@@ -0,0 +1,4 @@
+import { MergeStateSetter } from './useMergeState';
+type Mapper<TProps, TState> = (props: TProps, state: TState) => null | Partial<TState>;
+export default function useMergeStateFromProps<TProps, TState extends {}>(props: TProps, gDSFP: Mapper<TProps, TState>, initialState: TState): [TState, MergeStateSetter<TState>];
+export {};
diff --git a/node_modules/@restart/hooks/esm/useMergeStateFromProps.js b/node_modules/@restart/hooks/esm/useMergeStateFromProps.js
new file mode 100644
index 0000000000000000000000000000000000000000..9eee7bbe38f54eea8df81b6733c61c9193404623
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergeStateFromProps.js
@@ -0,0 +1,7 @@
+import useMergeState from './useMergeState';
+export default function useMergeStateFromProps(props, gDSFP, initialState) {
+  const [state, setState] = useMergeState(initialState);
+  const nextState = gDSFP(props, state);
+  if (nextState !== null) setState(nextState);
+  return [state, setState];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMergedRefs.d.ts b/node_modules/@restart/hooks/esm/useMergedRefs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fa7e62c047cef0c9a55adbfda51d0b9b2bdb8a38
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergedRefs.d.ts
@@ -0,0 +1,22 @@
+/// <reference types="react" />
+type CallbackRef<T> = (ref: T | null) => void;
+type Ref<T> = React.MutableRefObject<T> | CallbackRef<T>;
+export declare function mergeRefs<T>(refA?: Ref<T> | null, refB?: Ref<T> | null): (value: T | null) => void;
+/**
+ * Create and returns a single callback ref composed from two other Refs.
+ *
+ * ```tsx
+ * const Button = React.forwardRef((props, ref) => {
+ *   const [element, attachRef] = useCallbackRef<HTMLButtonElement>();
+ *   const mergedRef = useMergedRefs(ref, attachRef);
+ *
+ *   return <button ref={mergedRef} {...props}/>
+ * })
+ * ```
+ *
+ * @param refA A Callback or mutable Ref
+ * @param refB A Callback or mutable Ref
+ * @category refs
+ */
+declare function useMergedRefs<T>(refA?: Ref<T> | null, refB?: Ref<T> | null): (value: T | null) => void;
+export default useMergedRefs;
diff --git a/node_modules/@restart/hooks/esm/useMergedRefs.js b/node_modules/@restart/hooks/esm/useMergedRefs.js
new file mode 100644
index 0000000000000000000000000000000000000000..b60de1aadde3d01e5f4ef247a7257c62ad33b888
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMergedRefs.js
@@ -0,0 +1,33 @@
+import { useMemo } from 'react';
+const toFnRef = ref => !ref || typeof ref === 'function' ? ref : value => {
+  ref.current = value;
+};
+export function mergeRefs(refA, refB) {
+  const a = toFnRef(refA);
+  const b = toFnRef(refB);
+  return value => {
+    if (a) a(value);
+    if (b) b(value);
+  };
+}
+
+/**
+ * Create and returns a single callback ref composed from two other Refs.
+ *
+ * ```tsx
+ * const Button = React.forwardRef((props, ref) => {
+ *   const [element, attachRef] = useCallbackRef<HTMLButtonElement>();
+ *   const mergedRef = useMergedRefs(ref, attachRef);
+ *
+ *   return <button ref={mergedRef} {...props}/>
+ * })
+ * ```
+ *
+ * @param refA A Callback or mutable Ref
+ * @param refB A Callback or mutable Ref
+ * @category refs
+ */
+function useMergedRefs(refA, refB) {
+  return useMemo(() => mergeRefs(refA, refB), [refA, refB]);
+}
+export default useMergedRefs;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMountEffect.d.ts b/node_modules/@restart/hooks/esm/useMountEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..260a531af60e0495f473fbc22b178e2618584bd8
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMountEffect.d.ts
@@ -0,0 +1,20 @@
+import { EffectCallback } from 'react';
+/**
+ * Run's an effect on mount, and is cleaned up on unmount. Generally
+ * useful for interop with non-react plugins or components
+ *
+ * ```ts
+ *  useMountEffect(() => {
+ *    const plugin = $.myPlugin(ref.current)
+ *
+ *    return () => {
+ *      plugin.destroy()
+ *    }
+ *  })
+ * ```
+ * @param effect An effect to run on mount
+ *
+ *  @category effects
+ */
+declare function useMountEffect(effect: EffectCallback): void;
+export default useMountEffect;
diff --git a/node_modules/@restart/hooks/esm/useMountEffect.js b/node_modules/@restart/hooks/esm/useMountEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..9dbcb08a126f6ff8973145555ad2c70bd0a7eb05
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMountEffect.js
@@ -0,0 +1,23 @@
+import { useEffect } from 'react';
+
+/**
+ * Run's an effect on mount, and is cleaned up on unmount. Generally
+ * useful for interop with non-react plugins or components
+ *
+ * ```ts
+ *  useMountEffect(() => {
+ *    const plugin = $.myPlugin(ref.current)
+ *
+ *    return () => {
+ *      plugin.destroy()
+ *    }
+ *  })
+ * ```
+ * @param effect An effect to run on mount
+ *
+ *  @category effects
+ */
+function useMountEffect(effect) {
+  return useEffect(effect, []);
+}
+export default useMountEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMounted.d.ts b/node_modules/@restart/hooks/esm/useMounted.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8eb5eb6d20e74eb4126a05abc3d4b14253a3d00c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMounted.d.ts
@@ -0,0 +1,21 @@
+/**
+ * Track whether a component is current mounted. Generally less preferable than
+ * properlly canceling effects so they don't run after a component is unmounted,
+ * but helpful in cases where that isn't feasible, such as a `Promise` resolution.
+ *
+ * @returns a function that returns the current isMounted state of the component
+ *
+ * ```ts
+ * const [data, setData] = useState(null)
+ * const isMounted = useMounted()
+ *
+ * useEffect(() => {
+ *   fetchdata().then((newData) => {
+ *      if (isMounted()) {
+ *        setData(newData);
+ *      }
+ *   })
+ * })
+ * ```
+ */
+export default function useMounted(): () => boolean;
diff --git a/node_modules/@restart/hooks/esm/useMounted.js b/node_modules/@restart/hooks/esm/useMounted.js
new file mode 100644
index 0000000000000000000000000000000000000000..433816435d4785f9ae174716db6919b7471eb973
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMounted.js
@@ -0,0 +1,33 @@
+import { useRef, useEffect } from 'react';
+
+/**
+ * Track whether a component is current mounted. Generally less preferable than
+ * properlly canceling effects so they don't run after a component is unmounted,
+ * but helpful in cases where that isn't feasible, such as a `Promise` resolution.
+ *
+ * @returns a function that returns the current isMounted state of the component
+ *
+ * ```ts
+ * const [data, setData] = useState(null)
+ * const isMounted = useMounted()
+ *
+ * useEffect(() => {
+ *   fetchdata().then((newData) => {
+ *      if (isMounted()) {
+ *        setData(newData);
+ *      }
+ *   })
+ * })
+ * ```
+ */
+export default function useMounted() {
+  const mounted = useRef(true);
+  const isMounted = useRef(() => mounted.current);
+  useEffect(() => {
+    mounted.current = true;
+    return () => {
+      mounted.current = false;
+    };
+  }, []);
+  return isMounted.current;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useMutationObserver.d.ts b/node_modules/@restart/hooks/esm/useMutationObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7852be6cab690eb9431c3a3069b55a323a53a400
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMutationObserver.d.ts
@@ -0,0 +1,40 @@
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * Depends on the `MutationObserver` api.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * useMutationObserver(element, { subtree: true }, (records) => {
+ *
+ * });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ * @param callback A callback fired when a mutation occurs
+ */
+declare function useMutationObserver(element: Element | null | undefined, config: MutationObserverInit, callback: MutationCallback): void;
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * use a `MutationObserver` and return records as the are received.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * const records = useMutationObserver(element, { subtree: true });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ */
+declare function useMutationObserver(element: Element | null | undefined, config: MutationObserverInit): MutationRecord[];
+export default useMutationObserver;
diff --git a/node_modules/@restart/hooks/esm/useMutationObserver.js b/node_modules/@restart/hooks/esm/useMutationObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f28e380ee277ab9105c19b5ea2b9d53e0cf3d92
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useMutationObserver.js
@@ -0,0 +1,72 @@
+import useCustomEffect from './useCustomEffect';
+import { dequal } from 'dequal';
+import useImmediateUpdateEffect from './useImmediateUpdateEffect';
+import useEventCallback from './useEventCallback';
+import { useState } from 'react';
+function isDepsEqual([nextElement, nextConfig], [prevElement, prevConfig]) {
+  return nextElement === prevElement && dequal(nextConfig, prevConfig);
+}
+
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * Depends on the `MutationObserver` api.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * useMutationObserver(element, { subtree: true }, (records) => {
+ *
+ * });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ * @param callback A callback fired when a mutation occurs
+ */
+
+/**
+ * Observe mutations on a DOM node or tree of DOM nodes.
+ * use a `MutationObserver` and return records as the are received.
+ *
+ * ```tsx
+ * const [element, attachRef] = useCallbackRef(null);
+ *
+ * const records = useMutationObserver(element, { subtree: true });
+ *
+ * return (
+ *   <div ref={attachRef} />
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ * @param config The observer configuration
+ */
+
+function useMutationObserver(element, config, callback) {
+  const [records, setRecords] = useState(null);
+  const handler = useEventCallback(callback || setRecords);
+  useCustomEffect(() => {
+    if (!element) return;
+
+    // The behavior around reusing mutation observers is confusing
+    // observing again _should_ disable the last listener but doesn't
+    // seem to always be the case, maybe just in JSDOM? In any case the cost
+    // to redeclaring it is gonna be fairly low anyway, so make it simple
+    const observer = new MutationObserver(handler);
+    observer.observe(element, config);
+    return () => {
+      observer.disconnect();
+    };
+  }, [element, config], {
+    isEqual: isDepsEqual,
+    // Intentionally done in render, otherwise observer will miss any
+    // changes made to the DOM during this update
+    effectHook: useImmediateUpdateEffect
+  });
+  return callback ? void 0 : records || [];
+}
+export default useMutationObserver;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/usePrevious.d.ts b/node_modules/@restart/hooks/esm/usePrevious.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3e8aa10508ca60362312447cf0d72a4b7e19a4f0
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/usePrevious.d.ts
@@ -0,0 +1,18 @@
+/**
+ * Store the last of some value. Tracked via a `Ref` only updating it
+ * after the component renders.
+ *
+ * Helpful if you need to compare a prop value to it's previous value during render.
+ *
+ * ```ts
+ * function Component(props) {
+ *   const lastProps = usePrevious(props)
+ *
+ *   if (lastProps.foo !== props.foo)
+ *     resetValueFromProps(props.foo)
+ * }
+ * ```
+ *
+ * @param value the value to track
+ */
+export default function usePrevious<T>(value: T): T | null;
diff --git a/node_modules/@restart/hooks/esm/usePrevious.js b/node_modules/@restart/hooks/esm/usePrevious.js
new file mode 100644
index 0000000000000000000000000000000000000000..c787d524f405b883e47b785be7016b6f9fd94ee5
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/usePrevious.js
@@ -0,0 +1,26 @@
+import { useEffect, useRef } from 'react';
+
+/**
+ * Store the last of some value. Tracked via a `Ref` only updating it
+ * after the component renders.
+ *
+ * Helpful if you need to compare a prop value to it's previous value during render.
+ *
+ * ```ts
+ * function Component(props) {
+ *   const lastProps = usePrevious(props)
+ *
+ *   if (lastProps.foo !== props.foo)
+ *     resetValueFromProps(props.foo)
+ * }
+ * ```
+ *
+ * @param value the value to track
+ */
+export default function usePrevious(value) {
+  const ref = useRef(null);
+  useEffect(() => {
+    ref.current = value;
+  });
+  return ref.current;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useRafInterval.d.ts b/node_modules/@restart/hooks/esm/useRafInterval.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d1725a2b2c45f4d9263ded87433101b7f010c908
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useRafInterval.d.ts
@@ -0,0 +1,2 @@
+declare function useRafInterval(fn: () => void, ms: number): void;
+export default useRafInterval;
diff --git a/node_modules/@restart/hooks/esm/useRafInterval.js b/node_modules/@restart/hooks/esm/useRafInterval.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a07bf60af80f689c9462f962580f6a144f84c6e
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useRafInterval.js
@@ -0,0 +1,26 @@
+import { useEffect } from 'react';
+import useCommittedRef from './useCommittedRef';
+function useRafInterval(fn, ms, paused = false) {
+  let handle;
+  let start = new Date().getTime();
+  const fnRef = useCommittedRef(fn);
+  // this ref is necessary b/c useEffect will sometimes miss a paused toggle
+  // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
+  const pausedRef = useCommittedRef(paused);
+  function loop() {
+    const current = new Date().getTime();
+    const delta = current - start;
+    if (pausedRef.current) return;
+    if (delta >= ms && fnRef.current) {
+      fnRef.current();
+      start = new Date().getTime();
+    }
+    cancelAnimationFrame(handle);
+    handle = requestAnimationFrame(loop);
+  }
+  useEffect(() => {
+    handle = requestAnimationFrame(loop);
+    return () => cancelAnimationFrame(handle);
+  }, []);
+}
+export default useRafInterval;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.d.ts b/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ac2dd7491d69a610fab6420db95dcacef9d03af4
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.d.ts
@@ -0,0 +1,14 @@
+/// <reference types="react" />
+/**
+ * Exactly the same as `useRef` except that the initial value is set via a
+ * factory function. Useful when the default is relatively costly to construct.
+ *
+ *  ```ts
+ *  const ref = useRefWithInitialValueFactory<ExpensiveValue>(() => constructExpensiveValue())
+ *
+ *  ```
+ *
+ * @param initialValueFactory A factory function returning the ref's default value
+ * @category refs
+ */
+export default function useRefWithInitialValueFactory<T>(initialValueFactory: () => T): import("react").MutableRefObject<T>;
diff --git a/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.js b/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.js
new file mode 100644
index 0000000000000000000000000000000000000000..73807db8b471e3e5e8b1d930b57183f30c622604
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useRefWithInitialValueFactory.js
@@ -0,0 +1,22 @@
+import { useRef } from 'react';
+const dft = Symbol('default value sigil');
+
+/**
+ * Exactly the same as `useRef` except that the initial value is set via a
+ * factory function. Useful when the default is relatively costly to construct.
+ *
+ *  ```ts
+ *  const ref = useRefWithInitialValueFactory<ExpensiveValue>(() => constructExpensiveValue())
+ *
+ *  ```
+ *
+ * @param initialValueFactory A factory function returning the ref's default value
+ * @category refs
+ */
+export default function useRefWithInitialValueFactory(initialValueFactory) {
+  const ref = useRef(dft);
+  if (ref.current === dft) {
+    ref.current = initialValueFactory();
+  }
+  return ref;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useResizeObserver.d.ts b/node_modules/@restart/hooks/esm/useResizeObserver.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f50bac1ffa7bf2e4ab66819c983b521e46915efc
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useResizeObserver.d.ts
@@ -0,0 +1,25 @@
+export interface Rect {
+    width: number;
+    height: number;
+    x?: number;
+    y?: number;
+}
+/**
+ * Efficiently observe size changes on an element. Depends on the `ResizeObserver` api,
+ * and polyfills are needed in older browsers.
+ *
+ * ```ts
+ * const [ref, attachRef] = useCallbackRef(null);
+ *
+ * const rect = useResizeObserver(ref);
+ *
+ * return (
+ *  <div ref={attachRef}>
+ *    {JSON.stringify(rect)}
+ *  </div>
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ */
+export default function useResizeObserver<TElement extends Element>(element: TElement | null | undefined): Rect | null;
diff --git a/node_modules/@restart/hooks/esm/useResizeObserver.js b/node_modules/@restart/hooks/esm/useResizeObserver.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff6d0b88b2ec11e74f648279e304a7106a90bac5
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useResizeObserver.js
@@ -0,0 +1,47 @@
+import { useState } from 'react';
+import useEffect from './useIsomorphicEffect';
+const targetMap = new WeakMap();
+let resizeObserver;
+function getResizeObserver() {
+  // eslint-disable-next-line no-return-assign
+  return resizeObserver = resizeObserver || new window.ResizeObserver(entries => {
+    entries.forEach(entry => {
+      const handler = targetMap.get(entry.target);
+      if (handler) handler(entry.contentRect);
+    });
+  });
+}
+
+/**
+ * Efficiently observe size changes on an element. Depends on the `ResizeObserver` api,
+ * and polyfills are needed in older browsers.
+ *
+ * ```ts
+ * const [ref, attachRef] = useCallbackRef(null);
+ *
+ * const rect = useResizeObserver(ref);
+ *
+ * return (
+ *  <div ref={attachRef}>
+ *    {JSON.stringify(rect)}
+ *  </div>
+ * )
+ * ```
+ *
+ * @param element The DOM element to observe
+ */
+export default function useResizeObserver(element) {
+  const [rect, setRect] = useState(null);
+  useEffect(() => {
+    if (!element) return;
+    getResizeObserver().observe(element);
+    setRect(element.getBoundingClientRect());
+    targetMap.set(element, rect => {
+      setRect(rect);
+    });
+    return () => {
+      targetMap.delete(element);
+    };
+  }, [element]);
+  return rect;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useSafeState.d.ts b/node_modules/@restart/hooks/esm/useSafeState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2b76c8e0c198032dd79f2ef6246c6310e46a1add
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useSafeState.d.ts
@@ -0,0 +1,17 @@
+import { Dispatch, SetStateAction } from 'react';
+import { AsyncSetState } from './useStateAsync';
+type StateSetter<TState> = Dispatch<SetStateAction<TState>>;
+/**
+ * `useSafeState` takes the return value of a `useState` hook and wraps the
+ * setter to prevent updates onces the component has unmounted. Can used
+ * with `useMergeState` and `useStateAsync` as well
+ *
+ * @param state The return value of a useStateHook
+ *
+ * ```ts
+ * const [show, setShow] = useSafeState(useState(true));
+ * ```
+ */
+declare function useSafeState<TState>(state: [TState, AsyncSetState<TState>]): [TState, (stateUpdate: React.SetStateAction<TState>) => Promise<void>];
+declare function useSafeState<TState>(state: [TState, StateSetter<TState>]): [TState, StateSetter<TState>];
+export default useSafeState;
diff --git a/node_modules/@restart/hooks/esm/useSafeState.js b/node_modules/@restart/hooks/esm/useSafeState.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab46b24d6c6b534111f0141aef6c5e7880c3b1f8
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useSafeState.js
@@ -0,0 +1,23 @@
+import { useCallback } from 'react';
+import useMounted from './useMounted';
+
+/**
+ * `useSafeState` takes the return value of a `useState` hook and wraps the
+ * setter to prevent updates onces the component has unmounted. Can used
+ * with `useMergeState` and `useStateAsync` as well
+ *
+ * @param state The return value of a useStateHook
+ *
+ * ```ts
+ * const [show, setShow] = useSafeState(useState(true));
+ * ```
+ */
+
+function useSafeState(state) {
+  const isMounted = useMounted();
+  return [state[0], useCallback(nextState => {
+    if (!isMounted()) return;
+    return state[1](nextState);
+  }, [isMounted, state[1]])];
+}
+export default useSafeState;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useSet.d.ts b/node_modules/@restart/hooks/esm/useSet.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c1227a5acdb2fe8597adbfa1ff6bf60b77fe848c
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useSet.d.ts
@@ -0,0 +1,28 @@
+export declare class ObservableSet<V> extends Set<V> {
+    private readonly listener;
+    constructor(listener: (map: ObservableSet<V>) => void, init?: Iterable<V>);
+    add(value: V): this;
+    delete(value: V): boolean;
+    clear(): void;
+}
+/**
+ * Create and return a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) that triggers rerenders when it's updated.
+ *
+ * ```ts
+ * const ids = useSet<number>([1,2,3,4]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, id => (
+ *      <div>
+ *        id: {id}. <button onClick={() => ids.delete(id)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Set values
+ */
+declare function useSet<V>(init?: Iterable<V>): ObservableSet<V>;
+export default useSet;
diff --git a/node_modules/@restart/hooks/esm/useSet.js b/node_modules/@restart/hooks/esm/useSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..68cb7a6dbd5284c1a6ba22f33911d50792a2482f
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useSet.js
@@ -0,0 +1,49 @@
+import useForceUpdate from './useForceUpdate';
+import useStableMemo from './useStableMemo';
+export class ObservableSet extends Set {
+  constructor(listener, init) {
+    super(init);
+    this.listener = listener;
+  }
+  add(value) {
+    super.add(value);
+    // When initializing the Set, the base Set calls this.add() before the
+    // listener is assigned so it will be undefined
+    if (this.listener) this.listener(this);
+    return this;
+  }
+  delete(value) {
+    const result = super.delete(value);
+    this.listener(this);
+    return result;
+  }
+  clear() {
+    super.clear();
+    this.listener(this);
+  }
+}
+
+/**
+ * Create and return a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) that triggers rerenders when it's updated.
+ *
+ * ```ts
+ * const ids = useSet<number>([1,2,3,4]);
+ *
+ * return (
+ *  <>
+ *    {Array.from(ids, id => (
+ *      <div>
+ *        id: {id}. <button onClick={() => ids.delete(id)}>X</button>
+ *      </div>
+ *    )}
+ *  </>
+ * )
+ * ```
+ *
+ * @param init initial Set values
+ */
+function useSet(init) {
+  const forceUpdate = useForceUpdate();
+  return useStableMemo(() => new ObservableSet(forceUpdate, init), []);
+}
+export default useSet;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useStableMemo.d.ts b/node_modules/@restart/hooks/esm/useStableMemo.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c52e73a336aed8bca9eb1964571e29a5ad9f6492
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useStableMemo.d.ts
@@ -0,0 +1,10 @@
+import { DependencyList } from 'react';
+/**
+ * Identical to `useMemo` _except_ that it provides a semantic guarantee that
+ * values will not be invalidated unless the dependencies change. This is unlike
+ * the built in `useMemo` which may discard memoized values for performance reasons.
+ *
+ * @param factory A function that returns a value to be memoized
+ * @param deps A dependency array
+ */
+export default function useStableMemo<T>(factory: () => T, deps?: DependencyList): T;
diff --git a/node_modules/@restart/hooks/esm/useStableMemo.js b/node_modules/@restart/hooks/esm/useStableMemo.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a5d00eb61eeafe835858fe003b383693d7d1ad1
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useStableMemo.js
@@ -0,0 +1,39 @@
+import { useRef } from 'react';
+function isEqual(a, b) {
+  if (a.length !== b.length) return false;
+  for (let i = 0; i < a.length; i++) {
+    if (a[i] !== b[i]) {
+      return false;
+    }
+  }
+  return true;
+}
+/**
+ * Identical to `useMemo` _except_ that it provides a semantic guarantee that
+ * values will not be invalidated unless the dependencies change. This is unlike
+ * the built in `useMemo` which may discard memoized values for performance reasons.
+ *
+ * @param factory A function that returns a value to be memoized
+ * @param deps A dependency array
+ */
+export default function useStableMemo(factory, deps) {
+  let isValid = true;
+  const valueRef = useRef();
+  // initial hook call
+  if (!valueRef.current) {
+    valueRef.current = {
+      deps,
+      result: factory()
+    };
+    // subsequent calls
+  } else {
+    isValid = !!(deps && valueRef.current.deps && isEqual(deps, valueRef.current.deps));
+  }
+  const cache = isValid ? valueRef.current : {
+    deps,
+    result: factory()
+  };
+  // must update immediately so any sync renders here don't cause an infinite loop
+  valueRef.current = cache;
+  return cache.result;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useStateAsync.d.ts b/node_modules/@restart/hooks/esm/useStateAsync.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6f58179b02b33cc7253f65e229b5519deee6d57
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useStateAsync.d.ts
@@ -0,0 +1,20 @@
+import React from 'react';
+export type AsyncSetState<TState> = (stateUpdate: React.SetStateAction<TState>) => Promise<TState>;
+/**
+ * A hook that mirrors `useState` in function and API, expect that setState
+ * calls return a promise that resolves after the state has been set (in an effect).
+ *
+ * This is _similar_ to the second callback in classy setState calls, but fires later.
+ *
+ * ```ts
+ * const [counter, setState] = useStateAsync(1);
+ *
+ * const handleIncrement = async () => {
+ *   await setState(2);
+ *   doWorkRequiringCurrentState()
+ * }
+ * ```
+ *
+ * @param initialState initialize with some state value same as `useState`
+ */
+export default function useStateAsync<TState>(initialState: TState | (() => TState)): [TState, AsyncSetState<TState>];
diff --git a/node_modules/@restart/hooks/esm/useStateAsync.js b/node_modules/@restart/hooks/esm/useStateAsync.js
new file mode 100644
index 0000000000000000000000000000000000000000..5976e6657c544bd19399836134e995dbfb5a92e5
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useStateAsync.js
@@ -0,0 +1,55 @@
+import { useCallback, useEffect, useRef, useState } from 'react';
+/**
+ * A hook that mirrors `useState` in function and API, expect that setState
+ * calls return a promise that resolves after the state has been set (in an effect).
+ *
+ * This is _similar_ to the second callback in classy setState calls, but fires later.
+ *
+ * ```ts
+ * const [counter, setState] = useStateAsync(1);
+ *
+ * const handleIncrement = async () => {
+ *   await setState(2);
+ *   doWorkRequiringCurrentState()
+ * }
+ * ```
+ *
+ * @param initialState initialize with some state value same as `useState`
+ */
+export default function useStateAsync(initialState) {
+  const [state, setState] = useState(initialState);
+  const resolvers = useRef([]);
+  useEffect(() => {
+    resolvers.current.forEach(resolve => resolve(state));
+    resolvers.current.length = 0;
+  }, [state]);
+  const setStateAsync = useCallback(update => {
+    return new Promise((resolve, reject) => {
+      setState(prevState => {
+        try {
+          let nextState;
+          // ugly instanceof for typescript
+          if (update instanceof Function) {
+            nextState = update(prevState);
+          } else {
+            nextState = update;
+          }
+
+          // If state does not change, we must resolve the promise because
+          // react won't re-render and effect will not resolve. If there are already
+          // resolvers queued, then it should be safe to assume an update will happen
+          if (!resolvers.current.length && Object.is(nextState, prevState)) {
+            resolve(nextState);
+          } else {
+            resolvers.current.push(resolve);
+          }
+          return nextState;
+        } catch (e) {
+          reject(e);
+          throw e;
+        }
+      });
+    });
+  }, [setState]);
+  return [state, setStateAsync];
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useThrottledEventHandler.d.ts b/node_modules/@restart/hooks/esm/useThrottledEventHandler.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..79cc7a89db9e2a43e13f3cb9055d48286b88fb9e
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useThrottledEventHandler.d.ts
@@ -0,0 +1,34 @@
+import { SyntheticEvent } from 'react';
+export type ThrottledHandler<TEvent> = ((event: TEvent) => void) & {
+    clear(): void;
+};
+/**
+ * Creates a event handler function throttled by `requestAnimationFrame` that
+ * returns the **most recent** event. Useful for noisy events that update react state.
+ *
+ * ```tsx
+ * function Component() {
+ *   const [position, setPosition] = useState();
+ *   const handleMove = useThrottledEventHandler<React.PointerEvent>(
+ *     (event) => {
+ *       setPosition({
+ *         top: event.clientX,
+ *         left: event.clientY,
+ *       })
+ *     }
+ *   )
+ *
+ *   return (
+ *     <div onPointerMove={handleMove}>
+ *        <div style={position} />
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * @param handler An event handler function
+ * @typeParam TEvent The event object passed to the handler function
+ * @returns The event handler with a `clear` method attached for clearing any in-flight handler calls
+ *
+ */
+export default function useThrottledEventHandler<TEvent extends object = SyntheticEvent>(handler: (event: TEvent) => void): ThrottledHandler<TEvent>;
diff --git a/node_modules/@restart/hooks/esm/useThrottledEventHandler.js b/node_modules/@restart/hooks/esm/useThrottledEventHandler.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f2533abfc98c6630d3ac414c30f6792d0680561
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useThrottledEventHandler.js
@@ -0,0 +1,74 @@
+import { useRef } from 'react';
+import useMounted from './useMounted';
+import useEventCallback from './useEventCallback';
+const isSyntheticEvent = event => typeof event.persist === 'function';
+/**
+ * Creates a event handler function throttled by `requestAnimationFrame` that
+ * returns the **most recent** event. Useful for noisy events that update react state.
+ *
+ * ```tsx
+ * function Component() {
+ *   const [position, setPosition] = useState();
+ *   const handleMove = useThrottledEventHandler<React.PointerEvent>(
+ *     (event) => {
+ *       setPosition({
+ *         top: event.clientX,
+ *         left: event.clientY,
+ *       })
+ *     }
+ *   )
+ *
+ *   return (
+ *     <div onPointerMove={handleMove}>
+ *        <div style={position} />
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * @param handler An event handler function
+ * @typeParam TEvent The event object passed to the handler function
+ * @returns The event handler with a `clear` method attached for clearing any in-flight handler calls
+ *
+ */
+export default function useThrottledEventHandler(handler) {
+  const isMounted = useMounted();
+  const eventHandler = useEventCallback(handler);
+  const nextEventInfoRef = useRef({
+    event: null,
+    handle: null
+  });
+  const clear = () => {
+    cancelAnimationFrame(nextEventInfoRef.current.handle);
+    nextEventInfoRef.current.handle = null;
+  };
+  const handlePointerMoveAnimation = () => {
+    const {
+      current: next
+    } = nextEventInfoRef;
+    if (next.handle && next.event) {
+      if (isMounted()) {
+        next.handle = null;
+        eventHandler(next.event);
+      }
+    }
+    next.event = null;
+  };
+  const throttledHandler = event => {
+    if (!isMounted()) return;
+    if (isSyntheticEvent(event)) {
+      event.persist();
+    }
+    // Special handling for a React.Konva event which reuses the
+    // event object as it bubbles, setting target
+    else if ('evt' in event) {
+      event = Object.assign({}, event);
+    }
+    nextEventInfoRef.current.event = event;
+    if (!nextEventInfoRef.current.handle) {
+      nextEventInfoRef.current.handle = requestAnimationFrame(handlePointerMoveAnimation);
+    }
+  };
+  throttledHandler.clear = clear;
+  return throttledHandler;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useTimeout.d.ts b/node_modules/@restart/hooks/esm/useTimeout.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..549987f8f04e70c493c0da1e5e6be549553c53b0
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useTimeout.d.ts
@@ -0,0 +1,24 @@
+import { MutableRefObject } from 'react';
+/**
+ * Returns a controller object for setting a timeout that is properly cleaned up
+ * once the component unmounts. New timeouts cancel and replace existing ones.
+ *
+ *
+ *
+ * ```tsx
+ * const { set, clear } = useTimeout();
+ * const [hello, showHello] = useState(false);
+ * //Display hello after 5 seconds
+ * set(() => showHello(true), 5000);
+ * return (
+ *   <div className="App">
+ *     {hello ? <h3>Hello</h3> : null}
+ *   </div>
+ * );
+ * ```
+ */
+export default function useTimeout(): {
+    set: (fn: () => void, delayMs?: number) => void;
+    clear: () => void;
+    handleRef: MutableRefObject<any>;
+};
diff --git a/node_modules/@restart/hooks/esm/useTimeout.js b/node_modules/@restart/hooks/esm/useTimeout.js
new file mode 100644
index 0000000000000000000000000000000000000000..83b13060dbbc3c81fcd0a11c041cb2bb194ec3fe
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useTimeout.js
@@ -0,0 +1,61 @@
+import { useMemo, useRef } from 'react';
+import useMounted from './useMounted';
+import useWillUnmount from './useWillUnmount';
+
+/*
+ * Browsers including Internet Explorer, Chrome, Safari, and Firefox store the
+ * delay as a 32-bit signed integer internally. This causes an integer overflow
+ * when using delays larger than 2,147,483,647 ms (about 24.8 days),
+ * resulting in the timeout being executed immediately.
+ *
+ * via: https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout
+ */
+const MAX_DELAY_MS = 2 ** 31 - 1;
+function setChainedTimeout(handleRef, fn, timeoutAtMs) {
+  const delayMs = timeoutAtMs - Date.now();
+  handleRef.current = delayMs <= MAX_DELAY_MS ? setTimeout(fn, delayMs) : setTimeout(() => setChainedTimeout(handleRef, fn, timeoutAtMs), MAX_DELAY_MS);
+}
+
+/**
+ * Returns a controller object for setting a timeout that is properly cleaned up
+ * once the component unmounts. New timeouts cancel and replace existing ones.
+ *
+ *
+ *
+ * ```tsx
+ * const { set, clear } = useTimeout();
+ * const [hello, showHello] = useState(false);
+ * //Display hello after 5 seconds
+ * set(() => showHello(true), 5000);
+ * return (
+ *   <div className="App">
+ *     {hello ? <h3>Hello</h3> : null}
+ *   </div>
+ * );
+ * ```
+ */
+export default function useTimeout() {
+  const isMounted = useMounted();
+
+  // types are confused between node and web here IDK
+  const handleRef = useRef();
+  useWillUnmount(() => clearTimeout(handleRef.current));
+  return useMemo(() => {
+    const clear = () => clearTimeout(handleRef.current);
+    function set(fn, delayMs = 0) {
+      if (!isMounted()) return;
+      clear();
+      if (delayMs <= MAX_DELAY_MS) {
+        // For simplicity, if the timeout is short, just set a normal timeout.
+        handleRef.current = setTimeout(fn, delayMs);
+      } else {
+        setChainedTimeout(handleRef, fn, Date.now() + delayMs);
+      }
+    }
+    return {
+      set,
+      clear,
+      handleRef
+    };
+  }, []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useToggleState.d.ts b/node_modules/@restart/hooks/esm/useToggleState.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..263e90b3fdb4bb2b067675c6f5f790cfd47ccfea
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useToggleState.d.ts
@@ -0,0 +1,24 @@
+/**
+ * Create a state setter pair for a boolean value that can be "switched".
+ * Unlike `useState(false)`, `useToggleState` will automatically flip the state
+ * value when its setter is called with no argument.
+ *
+ * @param initialState The initial boolean value
+ * @returns A tuple of the current state and a setter
+ *
+ * ```jsx
+ * const [show, toggleShow] = useToggleState(false)
+ *
+ * return (
+ *   <>
+ *     <button onClick={() => toggleShow()}>
+ *       Toggle
+ *     <button>
+ *
+ *     {show && <strong>Now you can see me</strong>}
+ *   </>
+ * )
+ *
+ * ```
+ */
+export default function useToggleState(initialState?: boolean): [boolean, (value?: boolean) => void];
diff --git a/node_modules/@restart/hooks/esm/useToggleState.js b/node_modules/@restart/hooks/esm/useToggleState.js
new file mode 100644
index 0000000000000000000000000000000000000000..97533b71830707a64df6434ff70ae79655b885b5
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useToggleState.js
@@ -0,0 +1,28 @@
+import { useReducer } from 'react';
+
+/**
+ * Create a state setter pair for a boolean value that can be "switched".
+ * Unlike `useState(false)`, `useToggleState` will automatically flip the state
+ * value when its setter is called with no argument.
+ *
+ * @param initialState The initial boolean value
+ * @returns A tuple of the current state and a setter
+ *
+ * ```jsx
+ * const [show, toggleShow] = useToggleState(false)
+ *
+ * return (
+ *   <>
+ *     <button onClick={() => toggleShow()}>
+ *       Toggle
+ *     <button>
+ *
+ *     {show && <strong>Now you can see me</strong>}
+ *   </>
+ * )
+ *
+ * ```
+ */
+export default function useToggleState(initialState = false) {
+  return useReducer((state, action) => action == null ? !state : action, initialState);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useUpdateEffect.d.ts b/node_modules/@restart/hooks/esm/useUpdateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f46a670c0b09ff5f39961fa57f3622b9ee65f994
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateEffect.d.ts
@@ -0,0 +1,23 @@
+import { EffectCallback, DependencyList } from 'react';
+/**
+ * Runs an effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+declare function useUpdateEffect(fn: EffectCallback, deps: DependencyList): void;
+export default useUpdateEffect;
diff --git a/node_modules/@restart/hooks/esm/useUpdateEffect.js b/node_modules/@restart/hooks/esm/useUpdateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..66c9185d3256cba3ae7004cd3fd9c3789adeade0
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateEffect.js
@@ -0,0 +1,33 @@
+import { useEffect, useRef } from 'react';
+
+/**
+ * Runs an effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+function useUpdateEffect(fn, deps) {
+  const isFirst = useRef(true);
+  useEffect(() => {
+    if (isFirst.current) {
+      isFirst.current = false;
+      return;
+    }
+    return fn();
+  }, deps);
+}
+export default useUpdateEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.d.ts b/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a19e3af55ce6a5dfa81a92170fadc4bd421e34d9
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.d.ts
@@ -0,0 +1,19 @@
+import { DependencyList, EffectCallback } from 'react';
+/**
+ * An _immediate_ effect that runs an effect callback when its dependency array
+ * changes. This is helpful for updates should must run during render, most
+ * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
+ *
+ * ```ts
+ * function Example({ value }) {
+ *   const [intermediaryValue, setValue] = useState(value);
+ *
+ *   useUpdateImmediateEffect(() => {
+ *     setValue(value)
+ *   }, [value])
+ * ```
+ *
+ * @category effects
+ */
+declare function useUpdateImmediateEffect(effect: EffectCallback, deps: DependencyList): void;
+export default useUpdateImmediateEffect;
diff --git a/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.js b/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..96b16f8e55986a015fbc78b00b16ffba014e23a9
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateImmediateEffect.js
@@ -0,0 +1,36 @@
+import { useRef } from 'react';
+import useStableMemo from './useStableMemo';
+import useWillUnmount from './useWillUnmount';
+
+/**
+ * An _immediate_ effect that runs an effect callback when its dependency array
+ * changes. This is helpful for updates should must run during render, most
+ * commonly state derived from props; a more ergonomic version of https://reactjs.org/docs/hooks-faq.html#how-do-i-implement-getderivedstatefromprops
+ *
+ * ```ts
+ * function Example({ value }) {
+ *   const [intermediaryValue, setValue] = useState(value);
+ *
+ *   useUpdateImmediateEffect(() => {
+ *     setValue(value)
+ *   }, [value])
+ * ```
+ *
+ * @category effects
+ */
+function useUpdateImmediateEffect(effect, deps) {
+  const firstRef = useRef(true);
+  const tearDown = useRef();
+  useWillUnmount(() => {
+    if (tearDown.current) tearDown.current();
+  });
+  useStableMemo(() => {
+    if (firstRef.current) {
+      firstRef.current = false;
+      return;
+    }
+    if (tearDown.current) tearDown.current();
+    tearDown.current = effect();
+  }, deps);
+}
+export default useUpdateImmediateEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.d.ts b/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a70726f9c1c441958da80052897513b1c6f04859
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.d.ts
@@ -0,0 +1,23 @@
+import { EffectCallback, DependencyList } from 'react';
+/**
+ * Runs a layout effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateLayoutEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+declare function useUpdateLayoutEffect(fn: EffectCallback, deps: DependencyList): void;
+export default useUpdateLayoutEffect;
diff --git a/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.js b/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1a0732a016380b3581091a00b199d168f96a0aa
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdateLayoutEffect.js
@@ -0,0 +1,33 @@
+import { useLayoutEffect, useRef } from 'react';
+
+/**
+ * Runs a layout effect only when the dependencies have changed, skipping the
+ * initial "on mount" run. Caution, if the dependency list never changes,
+ * the effect is **never run**
+ *
+ * ```ts
+ *  const ref = useRef<HTMLInput>(null);
+ *
+ *  // focuses an element only if the focus changes, and not on mount
+ *  useUpdateLayoutEffect(() => {
+ *    const element = ref.current?.children[focusedIdx] as HTMLElement
+ *
+ *    element?.focus()
+ *
+ *  }, [focusedIndex])
+ * ```
+ * @param effect An effect to run on mount
+ *
+ * @category effects
+ */
+function useUpdateLayoutEffect(fn, deps) {
+  const isFirst = useRef(true);
+  useLayoutEffect(() => {
+    if (isFirst.current) {
+      isFirst.current = false;
+      return;
+    }
+    return fn();
+  }, deps);
+}
+export default useUpdateLayoutEffect;
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useUpdatedRef.d.ts b/node_modules/@restart/hooks/esm/useUpdatedRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2182fc23b4737e6fd3fc78e658083dff8e44a38a
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdatedRef.d.ts
@@ -0,0 +1,8 @@
+/// <reference types="react" />
+/**
+ * Returns a ref that is immediately updated with the new value
+ *
+ * @param value The Ref value
+ * @category refs
+ */
+export default function useUpdatedRef<T>(value: T): import("react").MutableRefObject<T>;
diff --git a/node_modules/@restart/hooks/esm/useUpdatedRef.js b/node_modules/@restart/hooks/esm/useUpdatedRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..25786f1f4f05ccdc771a10c94c0aa77ce425faa7
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useUpdatedRef.js
@@ -0,0 +1,13 @@
+import { useRef } from 'react';
+
+/**
+ * Returns a ref that is immediately updated with the new value
+ *
+ * @param value The Ref value
+ * @category refs
+ */
+export default function useUpdatedRef(value) {
+  const valueRef = useRef(value);
+  valueRef.current = value;
+  return valueRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/esm/useWillUnmount.d.ts b/node_modules/@restart/hooks/esm/useWillUnmount.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2c82504440569b0b8943e6bf254b4011167c290d
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useWillUnmount.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Attach a callback that fires when a component unmounts
+ *
+ * @param fn Handler to run when the component unmounts
+ * @category effects
+ */
+export default function useWillUnmount(fn: () => void): void;
diff --git a/node_modules/@restart/hooks/esm/useWillUnmount.js b/node_modules/@restart/hooks/esm/useWillUnmount.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ed3273e6ae0ec193a283c425aac60a472c0a2a9
--- /dev/null
+++ b/node_modules/@restart/hooks/esm/useWillUnmount.js
@@ -0,0 +1,13 @@
+import useUpdatedRef from './useUpdatedRef';
+import { useEffect } from 'react';
+
+/**
+ * Attach a callback that fires when a component unmounts
+ *
+ * @param fn Handler to run when the component unmounts
+ * @category effects
+ */
+export default function useWillUnmount(fn) {
+  const onUnmount = useUpdatedRef(fn);
+  useEffect(() => () => onUnmount.current(), []);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/hooks/package.json b/node_modules/@restart/hooks/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bd1018d0dc18043450dea77e2e145d6b477b7ab9
--- /dev/null
+++ b/node_modules/@restart/hooks/package.json
@@ -0,0 +1,85 @@
+{
+  "_from": "@restart/hooks@^0.4.9",
+  "_id": "@restart/hooks@0.4.16",
+  "_inBundle": false,
+  "_integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==",
+  "_location": "/@restart/hooks",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@restart/hooks@^0.4.9",
+    "name": "@restart/hooks",
+    "escapedName": "@restart%2fhooks",
+    "scope": "@restart",
+    "rawSpec": "^0.4.9",
+    "saveSpec": null,
+    "fetchSpec": "^0.4.9"
+  },
+  "_requiredBy": [
+    "/@restart/ui",
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz",
+  "_shasum": "95ae8ac1cc7e2bd4fed5e39800ff85604c6d59fb",
+  "_spec": "@restart/hooks@^0.4.9",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/react-restart/hooks/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "dequal": "^2.0.3"
+  },
+  "deprecated": false,
+  "description": "A set of utility and general-purpose React hooks.",
+  "exports": {
+    ".": {
+      "types": "./esm/index.d.ts",
+      "import": "./esm/index.js",
+      "require": "./cjs/index.js"
+    },
+    "./*": {
+      "types": "./esm/*.d.ts",
+      "import": "./esm/*.js",
+      "require": "./cjs/*.js"
+    }
+  },
+  "homepage": "https://github.com/react-restart/hooks#readme",
+  "jest": {
+    "preset": "@4c",
+    "testEnvironment": "jsdom",
+    "setupFilesAfterEnv": [
+      "./test/setup.js"
+    ]
+  },
+  "license": "MIT",
+  "main": "cjs/index.js",
+  "module": "esm/index.js",
+  "name": "@restart/hooks",
+  "peerDependencies": {
+    "react": ">=16.8.0"
+  },
+  "prettier": {
+    "singleQuote": true,
+    "semi": false,
+    "trailingComma": "all"
+  },
+  "publishConfig": {
+    "access": "public",
+    "directory": "lib"
+  },
+  "release": {
+    "conventionalCommits": true
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jquense/react-common-hooks.git"
+  },
+  "types": "cjs/index.d.ts",
+  "version": "0.4.16"
+}
diff --git a/node_modules/@restart/hooks/useAnimationFrame/package.json b/node_modules/@restart/hooks/useAnimationFrame/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fb5100a7273c418fe316f27aec3f0a0d126de50
--- /dev/null
+++ b/node_modules/@restart/hooks/useAnimationFrame/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useAnimationFrame",
+  "private": true,
+  "main": "../cjs/useAnimationFrame.js",
+  "module": "../esm/useAnimationFrame.js",
+  "types": "../esm/useAnimationFrame.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useBreakpoint/package.json b/node_modules/@restart/hooks/useBreakpoint/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..da91288f70225c2d87f3751b83b5c255ca3688a0
--- /dev/null
+++ b/node_modules/@restart/hooks/useBreakpoint/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useBreakpoint",
+  "private": true,
+  "main": "../cjs/useBreakpoint.js",
+  "module": "../esm/useBreakpoint.js",
+  "types": "../esm/useBreakpoint.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useCallbackRef/package.json b/node_modules/@restart/hooks/useCallbackRef/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ea2db1ead397236003140b4def94871751df6d78
--- /dev/null
+++ b/node_modules/@restart/hooks/useCallbackRef/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useCallbackRef",
+  "private": true,
+  "main": "../cjs/useCallbackRef.js",
+  "module": "../esm/useCallbackRef.js",
+  "types": "../esm/useCallbackRef.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useCommittedRef/package.json b/node_modules/@restart/hooks/useCommittedRef/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..af80cf475aa04828ac9bc029d034436670797e9c
--- /dev/null
+++ b/node_modules/@restart/hooks/useCommittedRef/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useCommittedRef",
+  "private": true,
+  "main": "../cjs/useCommittedRef.js",
+  "module": "../esm/useCommittedRef.js",
+  "types": "../esm/useCommittedRef.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useCustomEffect/package.json b/node_modules/@restart/hooks/useCustomEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e73a3466ae8ffcb0fe4098e4623739d5a65f358d
--- /dev/null
+++ b/node_modules/@restart/hooks/useCustomEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useCustomEffect",
+  "private": true,
+  "main": "../cjs/useCustomEffect.js",
+  "module": "../esm/useCustomEffect.js",
+  "types": "../esm/useCustomEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useDebouncedCallback/package.json b/node_modules/@restart/hooks/useDebouncedCallback/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..17686b5fa347a0e74cd9400567214bb057aa2923
--- /dev/null
+++ b/node_modules/@restart/hooks/useDebouncedCallback/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useDebouncedCallback",
+  "private": true,
+  "main": "../cjs/useDebouncedCallback.js",
+  "module": "../esm/useDebouncedCallback.js",
+  "types": "../esm/useDebouncedCallback.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useDebouncedState/package.json b/node_modules/@restart/hooks/useDebouncedState/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..40b1dfdbeac980deee5a7aa694518e243c0368d2
--- /dev/null
+++ b/node_modules/@restart/hooks/useDebouncedState/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useDebouncedState",
+  "private": true,
+  "main": "../cjs/useDebouncedState.js",
+  "module": "../esm/useDebouncedState.js",
+  "types": "../esm/useDebouncedState.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useDebouncedValue/package.json b/node_modules/@restart/hooks/useDebouncedValue/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..75194c7e8fd7e3f666493cda1e213f8eaa932929
--- /dev/null
+++ b/node_modules/@restart/hooks/useDebouncedValue/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useDebouncedValue",
+  "private": true,
+  "main": "../cjs/useDebouncedValue.js",
+  "module": "../esm/useDebouncedValue.js",
+  "types": "../esm/useDebouncedValue.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useEventCallback/package.json b/node_modules/@restart/hooks/useEventCallback/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aada7e76d8e25b69567fa1948ad66eb947f1f734
--- /dev/null
+++ b/node_modules/@restart/hooks/useEventCallback/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useEventCallback",
+  "private": true,
+  "main": "../cjs/useEventCallback.js",
+  "module": "../esm/useEventCallback.js",
+  "types": "../esm/useEventCallback.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useEventListener/package.json b/node_modules/@restart/hooks/useEventListener/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..18eb592821a8dc2901ce54bcf023a950da91c5a0
--- /dev/null
+++ b/node_modules/@restart/hooks/useEventListener/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useEventListener",
+  "private": true,
+  "main": "../cjs/useEventListener.js",
+  "module": "../esm/useEventListener.js",
+  "types": "../esm/useEventListener.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useFocusManager/package.json b/node_modules/@restart/hooks/useFocusManager/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f83bb4e544d39694e2bc59eee09bf5950e5a8436
--- /dev/null
+++ b/node_modules/@restart/hooks/useFocusManager/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useFocusManager",
+  "private": true,
+  "main": "../cjs/useFocusManager.js",
+  "module": "../esm/useFocusManager.js",
+  "types": "../esm/useFocusManager.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useForceUpdate/package.json b/node_modules/@restart/hooks/useForceUpdate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6738777d4d00a508801adf55646499d76598d97a
--- /dev/null
+++ b/node_modules/@restart/hooks/useForceUpdate/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useForceUpdate",
+  "private": true,
+  "main": "../cjs/useForceUpdate.js",
+  "module": "../esm/useForceUpdate.js",
+  "types": "../esm/useForceUpdate.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useGlobalListener/package.json b/node_modules/@restart/hooks/useGlobalListener/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b7ddea56a81287b5ab361b5528d2b5676d8f3dc6
--- /dev/null
+++ b/node_modules/@restart/hooks/useGlobalListener/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useGlobalListener",
+  "private": true,
+  "main": "../cjs/useGlobalListener.js",
+  "module": "../esm/useGlobalListener.js",
+  "types": "../esm/useGlobalListener.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useImage/package.json b/node_modules/@restart/hooks/useImage/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..54d1ecac324e6c8dee9d214ac20bfd50d5874624
--- /dev/null
+++ b/node_modules/@restart/hooks/useImage/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useImage",
+  "private": true,
+  "main": "../cjs/useImage.js",
+  "module": "../esm/useImage.js",
+  "types": "../esm/useImage.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useImmediateUpdateEffect/package.json b/node_modules/@restart/hooks/useImmediateUpdateEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8d6da0901957cd3ee147ca350f5a584a07a6644f
--- /dev/null
+++ b/node_modules/@restart/hooks/useImmediateUpdateEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useImmediateUpdateEffect",
+  "private": true,
+  "main": "../cjs/useImmediateUpdateEffect.js",
+  "module": "../esm/useImmediateUpdateEffect.js",
+  "types": "../esm/useImmediateUpdateEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useIntersectionObserver/package.json b/node_modules/@restart/hooks/useIntersectionObserver/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..019b1cb38ed4e9e44549f323ebcd3c24b2778655
--- /dev/null
+++ b/node_modules/@restart/hooks/useIntersectionObserver/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useIntersectionObserver",
+  "private": true,
+  "main": "../cjs/useIntersectionObserver.js",
+  "module": "../esm/useIntersectionObserver.js",
+  "types": "../esm/useIntersectionObserver.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useInterval/package.json b/node_modules/@restart/hooks/useInterval/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b4aa444e86ad41d06002cde929f80bc7ffcd3c92
--- /dev/null
+++ b/node_modules/@restart/hooks/useInterval/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useInterval",
+  "private": true,
+  "main": "../cjs/useInterval.js",
+  "module": "../esm/useInterval.js",
+  "types": "../esm/useInterval.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useIsInitialRenderRef/package.json b/node_modules/@restart/hooks/useIsInitialRenderRef/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e7762128e19583c15fcd82d6a0777ee6dcb61979
--- /dev/null
+++ b/node_modules/@restart/hooks/useIsInitialRenderRef/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useIsInitialRenderRef",
+  "private": true,
+  "main": "../cjs/useIsInitialRenderRef.js",
+  "module": "../esm/useIsInitialRenderRef.js",
+  "types": "../esm/useIsInitialRenderRef.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useIsomorphicEffect/package.json b/node_modules/@restart/hooks/useIsomorphicEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ed1e886ed10c5867b4c6917b17ce1f4de0158ed
--- /dev/null
+++ b/node_modules/@restart/hooks/useIsomorphicEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useIsomorphicEffect",
+  "private": true,
+  "main": "../cjs/useIsomorphicEffect.js",
+  "module": "../esm/useIsomorphicEffect.js",
+  "types": "../esm/useIsomorphicEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMap/package.json b/node_modules/@restart/hooks/useMap/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6e6346de783432fcf9eb1188950bf2c878b0b621
--- /dev/null
+++ b/node_modules/@restart/hooks/useMap/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMap",
+  "private": true,
+  "main": "../cjs/useMap.js",
+  "module": "../esm/useMap.js",
+  "types": "../esm/useMap.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMediaQuery/package.json b/node_modules/@restart/hooks/useMediaQuery/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a2cf7a2f7307d08c85a5a755750aa6ff8eb1646b
--- /dev/null
+++ b/node_modules/@restart/hooks/useMediaQuery/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMediaQuery",
+  "private": true,
+  "main": "../cjs/useMediaQuery.js",
+  "module": "../esm/useMediaQuery.js",
+  "types": "../esm/useMediaQuery.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMergeState/package.json b/node_modules/@restart/hooks/useMergeState/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..277bf910ae1856c245cb5b95b7aca9d9e6a62b6b
--- /dev/null
+++ b/node_modules/@restart/hooks/useMergeState/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMergeState",
+  "private": true,
+  "main": "../cjs/useMergeState.js",
+  "module": "../esm/useMergeState.js",
+  "types": "../esm/useMergeState.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMergeStateFromProps/package.json b/node_modules/@restart/hooks/useMergeStateFromProps/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2cbb954ec9165d2b8e555b67daa75863eb9c078b
--- /dev/null
+++ b/node_modules/@restart/hooks/useMergeStateFromProps/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMergeStateFromProps",
+  "private": true,
+  "main": "../cjs/useMergeStateFromProps.js",
+  "module": "../esm/useMergeStateFromProps.js",
+  "types": "../esm/useMergeStateFromProps.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMergedRefs/package.json b/node_modules/@restart/hooks/useMergedRefs/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c9684bc42f4a99c01922d0755423f120797743f7
--- /dev/null
+++ b/node_modules/@restart/hooks/useMergedRefs/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMergedRefs",
+  "private": true,
+  "main": "../cjs/useMergedRefs.js",
+  "module": "../esm/useMergedRefs.js",
+  "types": "../esm/useMergedRefs.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMountEffect/package.json b/node_modules/@restart/hooks/useMountEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c2d9c7451791c177312dff19789a6c868fa72e93
--- /dev/null
+++ b/node_modules/@restart/hooks/useMountEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMountEffect",
+  "private": true,
+  "main": "../cjs/useMountEffect.js",
+  "module": "../esm/useMountEffect.js",
+  "types": "../esm/useMountEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMounted/package.json b/node_modules/@restart/hooks/useMounted/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..27f681d5fa2e69e2a691dd244aacd932a037394f
--- /dev/null
+++ b/node_modules/@restart/hooks/useMounted/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMounted",
+  "private": true,
+  "main": "../cjs/useMounted.js",
+  "module": "../esm/useMounted.js",
+  "types": "../esm/useMounted.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useMutationObserver/package.json b/node_modules/@restart/hooks/useMutationObserver/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..90013535b25c2a58326b81f8c51e526581b7ad83
--- /dev/null
+++ b/node_modules/@restart/hooks/useMutationObserver/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useMutationObserver",
+  "private": true,
+  "main": "../cjs/useMutationObserver.js",
+  "module": "../esm/useMutationObserver.js",
+  "types": "../esm/useMutationObserver.d.ts"
+}
diff --git a/node_modules/@restart/hooks/usePrevious/package.json b/node_modules/@restart/hooks/usePrevious/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9432900e071847a68980dcc0408210975b795d8c
--- /dev/null
+++ b/node_modules/@restart/hooks/usePrevious/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/usePrevious",
+  "private": true,
+  "main": "../cjs/usePrevious.js",
+  "module": "../esm/usePrevious.js",
+  "types": "../esm/usePrevious.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useRafInterval/package.json b/node_modules/@restart/hooks/useRafInterval/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0463f23729135a5d8680670b3a766823f66c2339
--- /dev/null
+++ b/node_modules/@restart/hooks/useRafInterval/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useRafInterval",
+  "private": true,
+  "main": "../cjs/useRafInterval.js",
+  "module": "../esm/useRafInterval.js",
+  "types": "../esm/useRafInterval.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useRefWithInitialValueFactory/package.json b/node_modules/@restart/hooks/useRefWithInitialValueFactory/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b4f307870994e15cbfdac3cc0c9f77c8bcd16772
--- /dev/null
+++ b/node_modules/@restart/hooks/useRefWithInitialValueFactory/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useRefWithInitialValueFactory",
+  "private": true,
+  "main": "../cjs/useRefWithInitialValueFactory.js",
+  "module": "../esm/useRefWithInitialValueFactory.js",
+  "types": "../esm/useRefWithInitialValueFactory.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useResizeObserver/package.json b/node_modules/@restart/hooks/useResizeObserver/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ab105428f60e446b6c1a4bbe30ab280b032badbc
--- /dev/null
+++ b/node_modules/@restart/hooks/useResizeObserver/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useResizeObserver",
+  "private": true,
+  "main": "../cjs/useResizeObserver.js",
+  "module": "../esm/useResizeObserver.js",
+  "types": "../esm/useResizeObserver.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useSafeState/package.json b/node_modules/@restart/hooks/useSafeState/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f1ce3a0f70723651672868bbc1352c72458dfc90
--- /dev/null
+++ b/node_modules/@restart/hooks/useSafeState/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useSafeState",
+  "private": true,
+  "main": "../cjs/useSafeState.js",
+  "module": "../esm/useSafeState.js",
+  "types": "../esm/useSafeState.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useSet/package.json b/node_modules/@restart/hooks/useSet/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b58af7cb1f6409f22aa4679474b6d7e338672c01
--- /dev/null
+++ b/node_modules/@restart/hooks/useSet/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useSet",
+  "private": true,
+  "main": "../cjs/useSet.js",
+  "module": "../esm/useSet.js",
+  "types": "../esm/useSet.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useStableMemo/package.json b/node_modules/@restart/hooks/useStableMemo/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d8e6f247df6bd68c067f361a5b7dfb2407bc1e62
--- /dev/null
+++ b/node_modules/@restart/hooks/useStableMemo/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useStableMemo",
+  "private": true,
+  "main": "../cjs/useStableMemo.js",
+  "module": "../esm/useStableMemo.js",
+  "types": "../esm/useStableMemo.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useStateAsync/package.json b/node_modules/@restart/hooks/useStateAsync/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2e5f88f3a12aa5a46717b6ab7d359c46866e1313
--- /dev/null
+++ b/node_modules/@restart/hooks/useStateAsync/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useStateAsync",
+  "private": true,
+  "main": "../cjs/useStateAsync.js",
+  "module": "../esm/useStateAsync.js",
+  "types": "../esm/useStateAsync.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useThrottledEventHandler/package.json b/node_modules/@restart/hooks/useThrottledEventHandler/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2fd53338d9c0988d70cd9058932d45488237cb79
--- /dev/null
+++ b/node_modules/@restart/hooks/useThrottledEventHandler/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useThrottledEventHandler",
+  "private": true,
+  "main": "../cjs/useThrottledEventHandler.js",
+  "module": "../esm/useThrottledEventHandler.js",
+  "types": "../esm/useThrottledEventHandler.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useTimeout/package.json b/node_modules/@restart/hooks/useTimeout/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f8e547854963ed1efba1e393191054b8544e5df7
--- /dev/null
+++ b/node_modules/@restart/hooks/useTimeout/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useTimeout",
+  "private": true,
+  "main": "../cjs/useTimeout.js",
+  "module": "../esm/useTimeout.js",
+  "types": "../esm/useTimeout.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useToggleState/package.json b/node_modules/@restart/hooks/useToggleState/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9c9b31e8c01a438b184cc26afbcc1c49417877b6
--- /dev/null
+++ b/node_modules/@restart/hooks/useToggleState/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useToggleState",
+  "private": true,
+  "main": "../cjs/useToggleState.js",
+  "module": "../esm/useToggleState.js",
+  "types": "../esm/useToggleState.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useUpdateEffect/package.json b/node_modules/@restart/hooks/useUpdateEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c4f7eca1b03983b8d9596be40847172f661b774e
--- /dev/null
+++ b/node_modules/@restart/hooks/useUpdateEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useUpdateEffect",
+  "private": true,
+  "main": "../cjs/useUpdateEffect.js",
+  "module": "../esm/useUpdateEffect.js",
+  "types": "../esm/useUpdateEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useUpdateImmediateEffect/package.json b/node_modules/@restart/hooks/useUpdateImmediateEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b11742ca7b14a012d07ae7eacad5bcd1411896f9
--- /dev/null
+++ b/node_modules/@restart/hooks/useUpdateImmediateEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useUpdateImmediateEffect",
+  "private": true,
+  "main": "../cjs/useUpdateImmediateEffect.js",
+  "module": "../esm/useUpdateImmediateEffect.js",
+  "types": "../esm/useUpdateImmediateEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useUpdateLayoutEffect/package.json b/node_modules/@restart/hooks/useUpdateLayoutEffect/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..190197e981c9c103f56402454bdd8916115c4892
--- /dev/null
+++ b/node_modules/@restart/hooks/useUpdateLayoutEffect/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useUpdateLayoutEffect",
+  "private": true,
+  "main": "../cjs/useUpdateLayoutEffect.js",
+  "module": "../esm/useUpdateLayoutEffect.js",
+  "types": "../esm/useUpdateLayoutEffect.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useUpdatedRef/package.json b/node_modules/@restart/hooks/useUpdatedRef/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..349d068947a22b8d8a81659cb7e852c9816f87fa
--- /dev/null
+++ b/node_modules/@restart/hooks/useUpdatedRef/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useUpdatedRef",
+  "private": true,
+  "main": "../cjs/useUpdatedRef.js",
+  "module": "../esm/useUpdatedRef.js",
+  "types": "../esm/useUpdatedRef.d.ts"
+}
diff --git a/node_modules/@restart/hooks/useWillUnmount/package.json b/node_modules/@restart/hooks/useWillUnmount/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3f3c17312498d84edbce468a716f92f0cf0f1e15
--- /dev/null
+++ b/node_modules/@restart/hooks/useWillUnmount/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/hooks/useWillUnmount",
+  "private": true,
+  "main": "../cjs/useWillUnmount.js",
+  "module": "../esm/useWillUnmount.js",
+  "types": "../esm/useWillUnmount.d.ts"
+}
diff --git a/node_modules/@restart/ui/Anchor/package.json b/node_modules/@restart/ui/Anchor/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bffb7802811ad690409d2f334c4f7d9a7f1b789a
--- /dev/null
+++ b/node_modules/@restart/ui/Anchor/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Anchor",
+  "private": true,
+  "main": "../cjs/Anchor.js",
+  "module": "../esm/Anchor.js",
+  "types": "../esm/Anchor.d.ts"
+}
diff --git a/node_modules/@restart/ui/Button/package.json b/node_modules/@restart/ui/Button/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..94f40e59ed5cb4d759182f188731d395c74dd8af
--- /dev/null
+++ b/node_modules/@restart/ui/Button/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Button",
+  "private": true,
+  "main": "../cjs/Button.js",
+  "module": "../esm/Button.js",
+  "types": "../esm/Button.d.ts"
+}
diff --git a/node_modules/@restart/ui/DataKey/package.json b/node_modules/@restart/ui/DataKey/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a9fdb474f2c69f6d1d9fdf90d97b4a647e056f41
--- /dev/null
+++ b/node_modules/@restart/ui/DataKey/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/DataKey",
+  "private": true,
+  "main": "../cjs/DataKey.js",
+  "module": "../esm/DataKey.js",
+  "types": "../esm/DataKey.d.ts"
+}
diff --git a/node_modules/@restart/ui/Dropdown/package.json b/node_modules/@restart/ui/Dropdown/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a3df5dc3306f20a1e0a32118190a29f09fed794a
--- /dev/null
+++ b/node_modules/@restart/ui/Dropdown/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Dropdown",
+  "private": true,
+  "main": "../cjs/Dropdown.js",
+  "module": "../esm/Dropdown.js",
+  "types": "../esm/Dropdown.d.ts"
+}
diff --git a/node_modules/@restart/ui/DropdownContext/package.json b/node_modules/@restart/ui/DropdownContext/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8fdcfb90a996d125cbe47eb9067778a77c5c97c8
--- /dev/null
+++ b/node_modules/@restart/ui/DropdownContext/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/DropdownContext",
+  "private": true,
+  "main": "../cjs/DropdownContext.js",
+  "module": "../esm/DropdownContext.js",
+  "types": "../esm/DropdownContext.d.ts"
+}
diff --git a/node_modules/@restart/ui/DropdownItem/package.json b/node_modules/@restart/ui/DropdownItem/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..43c93e8a45dd8612dc8d341142b49ac9483fdd2c
--- /dev/null
+++ b/node_modules/@restart/ui/DropdownItem/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/DropdownItem",
+  "private": true,
+  "main": "../cjs/DropdownItem.js",
+  "module": "../esm/DropdownItem.js",
+  "types": "../esm/DropdownItem.d.ts"
+}
diff --git a/node_modules/@restart/ui/DropdownMenu/package.json b/node_modules/@restart/ui/DropdownMenu/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0fbee5083d0b9de9fe0738bb6d83483141703ba9
--- /dev/null
+++ b/node_modules/@restart/ui/DropdownMenu/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/DropdownMenu",
+  "private": true,
+  "main": "../cjs/DropdownMenu.js",
+  "module": "../esm/DropdownMenu.js",
+  "types": "../esm/DropdownMenu.d.ts"
+}
diff --git a/node_modules/@restart/ui/DropdownToggle/package.json b/node_modules/@restart/ui/DropdownToggle/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..53b7061d60fd47cb887c73b7f5cf3d325173b5cb
--- /dev/null
+++ b/node_modules/@restart/ui/DropdownToggle/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/DropdownToggle",
+  "private": true,
+  "main": "../cjs/DropdownToggle.js",
+  "module": "../esm/DropdownToggle.js",
+  "types": "../esm/DropdownToggle.d.ts"
+}
diff --git a/node_modules/@restart/ui/ImperativeTransition/package.json b/node_modules/@restart/ui/ImperativeTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ecebaa952342909f9af3d2434ebf4e40862c3732
--- /dev/null
+++ b/node_modules/@restart/ui/ImperativeTransition/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/ImperativeTransition",
+  "private": true,
+  "main": "../cjs/ImperativeTransition.js",
+  "module": "../esm/ImperativeTransition.js",
+  "types": "../esm/ImperativeTransition.d.ts"
+}
diff --git a/node_modules/@restart/ui/LICENSE b/node_modules/@restart/ui/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..b195fc1f6d7af6820725dea90ccceab6b6c4a8e0
--- /dev/null
+++ b/node_modules/@restart/ui/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 react-bootstrap
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/@restart/ui/Modal/package.json b/node_modules/@restart/ui/Modal/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1a2dd4fd6b00711ad0f0a4673e2ce5c5ba235aca
--- /dev/null
+++ b/node_modules/@restart/ui/Modal/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Modal",
+  "private": true,
+  "main": "../cjs/Modal.js",
+  "module": "../esm/Modal.js",
+  "types": "../esm/Modal.d.ts"
+}
diff --git a/node_modules/@restart/ui/ModalManager/package.json b/node_modules/@restart/ui/ModalManager/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ff45a3b82fe62ed351f3bb10541fc7b4ddb197e1
--- /dev/null
+++ b/node_modules/@restart/ui/ModalManager/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/ModalManager",
+  "private": true,
+  "main": "../cjs/ModalManager.js",
+  "module": "../esm/ModalManager.js",
+  "types": "../esm/ModalManager.d.ts"
+}
diff --git a/node_modules/@restart/ui/Nav/package.json b/node_modules/@restart/ui/Nav/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ac8c114e58b0f2722f198f60d25276d40d4b3ffe
--- /dev/null
+++ b/node_modules/@restart/ui/Nav/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Nav",
+  "private": true,
+  "main": "../cjs/Nav.js",
+  "module": "../esm/Nav.js",
+  "types": "../esm/Nav.d.ts"
+}
diff --git a/node_modules/@restart/ui/NavContext/package.json b/node_modules/@restart/ui/NavContext/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..673d108f8e7d49c32e2ae2ad2634f2e89c6c4d3d
--- /dev/null
+++ b/node_modules/@restart/ui/NavContext/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/NavContext",
+  "private": true,
+  "main": "../cjs/NavContext.js",
+  "module": "../esm/NavContext.js",
+  "types": "../esm/NavContext.d.ts"
+}
diff --git a/node_modules/@restart/ui/NavItem/package.json b/node_modules/@restart/ui/NavItem/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..78fc87d1e8a1f90a210f7c9bb2eeb57ddaa905a4
--- /dev/null
+++ b/node_modules/@restart/ui/NavItem/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/NavItem",
+  "private": true,
+  "main": "../cjs/NavItem.js",
+  "module": "../esm/NavItem.js",
+  "types": "../esm/NavItem.d.ts"
+}
diff --git a/node_modules/@restart/ui/NoopTransition/package.json b/node_modules/@restart/ui/NoopTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b6d84da2b845c7ecaa185aa151c1e2fca5f3f8e1
--- /dev/null
+++ b/node_modules/@restart/ui/NoopTransition/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/NoopTransition",
+  "private": true,
+  "main": "../cjs/NoopTransition.js",
+  "module": "../esm/NoopTransition.js",
+  "types": "../esm/NoopTransition.d.ts"
+}
diff --git a/node_modules/@restart/ui/Overlay/package.json b/node_modules/@restart/ui/Overlay/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0bf8a28e2ce177f5daf16751df5f7ac672e5342c
--- /dev/null
+++ b/node_modules/@restart/ui/Overlay/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Overlay",
+  "private": true,
+  "main": "../cjs/Overlay.js",
+  "module": "../esm/Overlay.js",
+  "types": "../esm/Overlay.d.ts"
+}
diff --git a/node_modules/@restart/ui/Portal/package.json b/node_modules/@restart/ui/Portal/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..41fc7ecf4859db2e617c424c9274e7effe253b13
--- /dev/null
+++ b/node_modules/@restart/ui/Portal/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Portal",
+  "private": true,
+  "main": "../cjs/Portal.js",
+  "module": "../esm/Portal.js",
+  "types": "../esm/Portal.d.ts"
+}
diff --git a/node_modules/@restart/ui/README.md b/node_modules/@restart/ui/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9e6e265116ec967eebc4a8288629943eeb88d79d
--- /dev/null
+++ b/node_modules/@restart/ui/README.md
@@ -0,0 +1,19 @@
+<div align="center">
+   <img  src="https://raw.githubusercontent.com/react-restart/ui/main/www/static/refresh-dot.svg" style="width: 75px;height: 75;display: inline-block;" valign="middle"/>
+</div>
+
+<h1 align="center">Restart UI</h1>    
+                                                                                                                               
+A set of full featured, extensible, and accessible UI components, designed to integrate into any styling
+framework or system. Restart components, are "headless", meaning they don't provide any styles. Components encapsulate
+the complicated logic and and state without being prescriptive about their look and feel.
+
+## Documentation
+
+https://react-restart.github.io/ui/
+
+## Installation
+
+```sh
+npm install --save @restart/ui
+```
diff --git a/node_modules/@restart/ui/RTGTransition/package.json b/node_modules/@restart/ui/RTGTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dfd27233c44335d34744ac53bb32fd8ac176810d
--- /dev/null
+++ b/node_modules/@restart/ui/RTGTransition/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/RTGTransition",
+  "private": true,
+  "main": "../cjs/RTGTransition.js",
+  "module": "../esm/RTGTransition.js",
+  "types": "../esm/RTGTransition.d.ts"
+}
diff --git a/node_modules/@restart/ui/SelectableContext/package.json b/node_modules/@restart/ui/SelectableContext/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..baccd241c725f257d09a1ff9c9205c20808892d6
--- /dev/null
+++ b/node_modules/@restart/ui/SelectableContext/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/SelectableContext",
+  "private": true,
+  "main": "../cjs/SelectableContext.js",
+  "module": "../esm/SelectableContext.js",
+  "types": "../esm/SelectableContext.d.ts"
+}
diff --git a/node_modules/@restart/ui/TabContext/package.json b/node_modules/@restart/ui/TabContext/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bf9211699236d050a7f13b051538da5f17b96c69
--- /dev/null
+++ b/node_modules/@restart/ui/TabContext/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/TabContext",
+  "private": true,
+  "main": "../cjs/TabContext.js",
+  "module": "../esm/TabContext.js",
+  "types": "../esm/TabContext.d.ts"
+}
diff --git a/node_modules/@restart/ui/TabPanel/package.json b/node_modules/@restart/ui/TabPanel/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6c144bd3f2a2c7e2e792d96257398f89fb8d44bb
--- /dev/null
+++ b/node_modules/@restart/ui/TabPanel/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/TabPanel",
+  "private": true,
+  "main": "../cjs/TabPanel.js",
+  "module": "../esm/TabPanel.js",
+  "types": "../esm/TabPanel.d.ts"
+}
diff --git a/node_modules/@restart/ui/Tabs/package.json b/node_modules/@restart/ui/Tabs/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..76a4db430e6b8e1635e4316068ca339a5f01eca5
--- /dev/null
+++ b/node_modules/@restart/ui/Tabs/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Tabs",
+  "private": true,
+  "main": "../cjs/Tabs.js",
+  "module": "../esm/Tabs.js",
+  "types": "../esm/Tabs.d.ts"
+}
diff --git a/node_modules/@restart/ui/Waypoint/package.json b/node_modules/@restart/ui/Waypoint/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8254063e17bdd5b4b55872d9245c05840f659b88
--- /dev/null
+++ b/node_modules/@restart/ui/Waypoint/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/Waypoint",
+  "private": true,
+  "main": "../cjs/Waypoint.js",
+  "module": "../esm/Waypoint.js",
+  "types": "../esm/Waypoint.d.ts"
+}
diff --git a/node_modules/@restart/ui/cjs/Anchor.d.ts b/node_modules/@restart/ui/cjs/Anchor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5b1c41f771851351517f33a439a68ad558df73e8
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Anchor.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+export declare function isTrivialHref(href?: string): boolean;
+export interface AnchorProps extends React.HTMLAttributes<HTMLElement> {
+    href?: string;
+    disabled?: boolean;
+    role?: string;
+    tabIndex?: number;
+}
+/**
+ * An generic `<a>` component that covers a few A11y cases, ensuring that
+ * cases where the `href` is missing or trivial like "#" are treated like buttons.
+ */
+declare const Anchor: React.ForwardRefExoticComponent<AnchorProps & React.RefAttributes<HTMLAnchorElement>>;
+export default Anchor;
diff --git a/node_modules/@restart/ui/cjs/Anchor.js b/node_modules/@restart/ui/cjs/Anchor.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ae92386a54ea5f94a70be8b8b14402b65f45bb4
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Anchor.js
@@ -0,0 +1,49 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.isTrivialHref = isTrivialHref;
+var React = _interopRequireWildcard(require("react"));
+var _hooks = require("@restart/hooks");
+var _Button = require("./Button");
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["onKeyDown"];
+/* eslint-disable jsx-a11y/no-static-element-interactions */
+/* eslint-disable jsx-a11y/anchor-has-content */
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+function isTrivialHref(href) {
+  return !href || href.trim() === '#';
+}
+/**
+ * An generic `<a>` component that covers a few A11y cases, ensuring that
+ * cases where the `href` is missing or trivial like "#" are treated like buttons.
+ */
+const Anchor = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      onKeyDown
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [buttonProps] = (0, _Button.useButtonProps)(Object.assign({
+    tagName: 'a'
+  }, props));
+  const handleKeyDown = (0, _hooks.useEventCallback)(e => {
+    buttonProps.onKeyDown(e);
+    onKeyDown == null ? void 0 : onKeyDown(e);
+  });
+  if (isTrivialHref(props.href) || props.role === 'button') {
+    return /*#__PURE__*/(0, _jsxRuntime.jsx)("a", Object.assign({
+      ref: ref
+    }, props, buttonProps, {
+      onKeyDown: handleKeyDown
+    }));
+  }
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)("a", Object.assign({
+    ref: ref
+  }, props, {
+    onKeyDown: onKeyDown
+  }));
+});
+Anchor.displayName = 'Anchor';
+var _default = exports.default = Anchor;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Button.d.ts b/node_modules/@restart/ui/cjs/Button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..85be3cc9908f3a0191ce81bbfc941aa8caedcd3b
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Button.d.ts
@@ -0,0 +1,50 @@
+import * as React from 'react';
+export type ButtonType = 'button' | 'reset' | 'submit';
+export interface AnchorOptions {
+    href?: string;
+    rel?: string;
+    target?: string;
+}
+export interface UseButtonPropsOptions extends AnchorOptions {
+    type?: ButtonType;
+    disabled?: boolean;
+    onClick?: React.EventHandler<React.MouseEvent | React.KeyboardEvent>;
+    tabIndex?: number;
+    tagName?: keyof JSX.IntrinsicElements;
+    role?: React.AriaRole | undefined;
+}
+export declare function isTrivialHref(href?: string): boolean;
+export interface AriaButtonProps {
+    type?: ButtonType | undefined;
+    disabled: boolean | undefined;
+    role?: React.AriaRole;
+    tabIndex?: number | undefined;
+    href?: string | undefined;
+    target?: string | undefined;
+    rel?: string | undefined;
+    'aria-disabled'?: true | undefined;
+    onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
+    onKeyDown?: (event: React.KeyboardEvent) => void;
+}
+export interface UseButtonPropsMetadata {
+    tagName: React.ElementType;
+}
+export declare function useButtonProps({ tagName, disabled, href, target, rel, role, onClick, tabIndex, type, }: UseButtonPropsOptions): [AriaButtonProps, UseButtonPropsMetadata];
+export interface BaseButtonProps {
+    /**
+     * Control the underlying rendered element directly by passing in a valid
+     * component type
+     */
+    as?: keyof JSX.IntrinsicElements | undefined;
+    /** The disabled state of the button */
+    disabled?: boolean | undefined;
+    /** Optionally specify an href to render a `<a>` tag styled as a button */
+    href?: string | undefined;
+    /** Anchor target, when rendering an anchor as a button */
+    target?: string | undefined;
+    rel?: string | undefined;
+}
+export interface ButtonProps extends BaseButtonProps, React.ComponentPropsWithoutRef<'button'> {
+}
+declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLElement>>;
+export default Button;
diff --git a/node_modules/@restart/ui/cjs/Button.js b/node_modules/@restart/ui/cjs/Button.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a52c155e1b419df30a4b76786bc99d887c3bc2a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Button.js
@@ -0,0 +1,97 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.isTrivialHref = isTrivialHref;
+exports.useButtonProps = useButtonProps;
+var React = _interopRequireWildcard(require("react"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["as", "disabled"];
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+function isTrivialHref(href) {
+  return !href || href.trim() === '#';
+}
+function useButtonProps({
+  tagName,
+  disabled,
+  href,
+  target,
+  rel,
+  role,
+  onClick,
+  tabIndex = 0,
+  type
+}) {
+  if (!tagName) {
+    if (href != null || target != null || rel != null) {
+      tagName = 'a';
+    } else {
+      tagName = 'button';
+    }
+  }
+  const meta = {
+    tagName
+  };
+  if (tagName === 'button') {
+    return [{
+      type: type || 'button',
+      disabled
+    }, meta];
+  }
+  const handleClick = event => {
+    if (disabled || tagName === 'a' && isTrivialHref(href)) {
+      event.preventDefault();
+    }
+    if (disabled) {
+      event.stopPropagation();
+      return;
+    }
+    onClick == null ? void 0 : onClick(event);
+  };
+  const handleKeyDown = event => {
+    if (event.key === ' ') {
+      event.preventDefault();
+      handleClick(event);
+    }
+  };
+  if (tagName === 'a') {
+    // Ensure there's a href so Enter can trigger anchor button.
+    href || (href = '#');
+    if (disabled) {
+      href = undefined;
+    }
+  }
+  return [{
+    role: role != null ? role : 'button',
+    // explicitly undefined so that it overrides the props disabled in a spread
+    // e.g. <Tag {...props} {...hookProps} />
+    disabled: undefined,
+    tabIndex: disabled ? undefined : tabIndex,
+    href,
+    target: tagName === 'a' ? target : undefined,
+    'aria-disabled': !disabled ? undefined : disabled,
+    rel: tagName === 'a' ? rel : undefined,
+    onClick: handleClick,
+    onKeyDown: handleKeyDown
+  }, meta];
+}
+const Button = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      as: asProp,
+      disabled
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [buttonProps, {
+    tagName: Component
+  }] = useButtonProps(Object.assign({
+    tagName: asProp,
+    disabled
+  }, props));
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({}, props, buttonProps, {
+    ref: ref
+  }));
+});
+Button.displayName = 'Button';
+var _default = exports.default = Button;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/DataKey.d.ts b/node_modules/@restart/ui/cjs/DataKey.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6048d86ff6d9b3d42873141b8e13e195566ef866
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DataKey.d.ts
@@ -0,0 +1,4 @@
+export declare const ATTRIBUTE_PREFIX: "data-rr-ui-";
+export declare const PROPERTY_PREFIX: "rrUi";
+export declare function dataAttr<T extends string>(property: T): `data-rr-ui-${T}`;
+export declare function dataProp<T extends string>(property: T): `rrUi${T}`;
diff --git a/node_modules/@restart/ui/cjs/DataKey.js b/node_modules/@restart/ui/cjs/DataKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a921c9bcfc47e752a58d017fd7b07f023034da4
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DataKey.js
@@ -0,0 +1,14 @@
+"use strict";
+
+exports.__esModule = true;
+exports.PROPERTY_PREFIX = exports.ATTRIBUTE_PREFIX = void 0;
+exports.dataAttr = dataAttr;
+exports.dataProp = dataProp;
+const ATTRIBUTE_PREFIX = exports.ATTRIBUTE_PREFIX = `data-rr-ui-`;
+const PROPERTY_PREFIX = exports.PROPERTY_PREFIX = `rrUi`;
+function dataAttr(property) {
+  return `${ATTRIBUTE_PREFIX}${property}`;
+}
+function dataProp(property) {
+  return `${PROPERTY_PREFIX}${property}`;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Dropdown.d.ts b/node_modules/@restart/ui/cjs/Dropdown.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e2e6810a8ded55b145f45f9c6a8a68364c7d1ac5
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Dropdown.d.ts
@@ -0,0 +1,93 @@
+import * as React from 'react';
+import DropdownMenu, { DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions } from './DropdownMenu';
+import DropdownToggle, { DropdownToggleProps, UseDropdownToggleMetadata } from './DropdownToggle';
+import { DropdownItemProps } from './DropdownItem';
+import { SelectCallback } from './types';
+import { Placement } from './usePopper';
+export type { DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions, DropdownToggleProps, UseDropdownToggleMetadata, DropdownItemProps, };
+export interface DropdownInjectedProps {
+    onKeyDown: React.KeyboardEventHandler;
+}
+export type ToggleEvent = React.SyntheticEvent | KeyboardEvent | MouseEvent;
+export interface ToggleMetadata {
+    source: string | undefined;
+    originalEvent: ToggleEvent | undefined;
+}
+export interface DropdownProps {
+    /**
+     * The PopperJS placement for positioning the Dropdown menu in relation to
+     * its Toggle.
+     *
+     * @default 'bottom-start'
+     */
+    placement?: Placement;
+    /**
+     * Sets the initial visibility of the Dropdown.
+     */
+    defaultShow?: boolean;
+    /**
+     * Whether or not the Dropdown is visible.
+     *
+     * @controllable onToggle
+     */
+    show?: boolean;
+    /**
+     * A callback fired when a DropdownItem has been selected.
+     */
+    onSelect?: SelectCallback;
+    /**
+     * A callback fired when the Dropdown wishes to change visibility. Called with
+     * the requested `show` value, the DOM event, and the source that fired it:
+     * `'click'`,`'keydown'`,`'rootClose'`, or `'select'`.
+     *
+     * ```ts static
+     * function(
+     *   nextShow: boolean,
+     *   meta: ToggleMetadata,
+     * ): void
+     * ```
+     *
+     * @controllable show
+     */
+    onToggle?: (nextShow: boolean, meta: ToggleMetadata) => void;
+    /**
+     * A css selector string that will return __focusable__ menu items.
+     * Selectors should be relative to the menu component:
+     * e.g. ` > li:not('.disabled')`
+     */
+    itemSelector?: string;
+    /**
+     * Controls the focus behavior for when the Dropdown is opened. Set to
+     * `true` to always focus the first menu item, `keyboard` to focus only when
+     * navigating via the keyboard, or `false` to disable completely
+     *
+     * The Default behavior is `false` **unless** the Menu has a `role="menu"`
+     * where it will default to `keyboard` to match the recommended [ARIA Authoring
+     * practices](https://www.w3.org/TR/wai-aria-practices-1.1/#menubutton).
+     */
+    focusFirstItemOnShow?: boolean | 'keyboard';
+    /**
+     * A render prop that returns the root dropdown element. The `props`
+     * argument should spread through to an element containing _both_ the
+     * menu and toggle in order to handle keyboard events for focus management.
+     *
+     * @type {Function ({
+     *   props: {
+     *     onKeyDown: (SyntheticEvent) => void,
+     *   },
+     * }) => React.Element}
+     */
+    children: React.ReactNode;
+}
+/**
+ * @displayName Dropdown
+ * @public
+ */
+declare function Dropdown({ defaultShow, show: rawShow, onSelect, onToggle: rawOnToggle, itemSelector, focusFirstItemOnShow, placement, children, }: DropdownProps): React.JSX.Element;
+declare namespace Dropdown {
+    var displayName: string;
+    var Menu: typeof DropdownMenu;
+    var Toggle: typeof DropdownToggle;
+    var Item: import("./types").DynamicRefForwardingComponent<React.ForwardRefExoticComponent<import("./Button").ButtonProps & React.RefAttributes<HTMLElement>>, DropdownItemProps>;
+}
+export default Dropdown;
diff --git a/node_modules/@restart/ui/cjs/Dropdown.js b/node_modules/@restart/ui/cjs/Dropdown.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a9cb39216e0023e2c5ef58f6da05805c1d39c8d
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Dropdown.js
@@ -0,0 +1,202 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _querySelectorAll = _interopRequireDefault(require("dom-helpers/querySelectorAll"));
+var _addEventListener = _interopRequireDefault(require("dom-helpers/addEventListener"));
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _uncontrollable = require("uncontrollable");
+var _usePrevious = _interopRequireDefault(require("@restart/hooks/usePrevious"));
+var _useForceUpdate = _interopRequireDefault(require("@restart/hooks/useForceUpdate"));
+var _useEventListener = _interopRequireDefault(require("@restart/hooks/useEventListener"));
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
+var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
+var _DropdownToggle = _interopRequireWildcard(require("./DropdownToggle"));
+var _DropdownItem = _interopRequireDefault(require("./DropdownItem"));
+var _SelectableContext = _interopRequireDefault(require("./SelectableContext"));
+var _DataKey = require("./DataKey");
+var _useWindow = _interopRequireDefault(require("./useWindow"));
+var _jsxRuntime = require("react/jsx-runtime");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function useRefWithUpdate() {
+  const forceUpdate = (0, _useForceUpdate.default)();
+  const ref = (0, _react.useRef)(null);
+  const attachRef = (0, _react.useCallback)(element => {
+    ref.current = element;
+    // ensure that a menu set triggers an update for consumers
+    forceUpdate();
+  }, [forceUpdate]);
+  return [ref, attachRef];
+}
+
+/**
+ * @displayName Dropdown
+ * @public
+ */
+function Dropdown({
+  defaultShow,
+  show: rawShow,
+  onSelect,
+  onToggle: rawOnToggle,
+  itemSelector = `* [${(0, _DataKey.dataAttr)('dropdown-item')}]`,
+  focusFirstItemOnShow,
+  placement = 'bottom-start',
+  children
+}) {
+  const window = (0, _useWindow.default)();
+  const [show, onToggle] = (0, _uncontrollable.useUncontrolledProp)(rawShow, defaultShow, rawOnToggle);
+
+  // We use normal refs instead of useCallbackRef in order to populate the
+  // the value as quickly as possible, otherwise the effect to focus the element
+  // may run before the state value is set
+  const [menuRef, setMenu] = useRefWithUpdate();
+  const menuElement = menuRef.current;
+  const [toggleRef, setToggle] = useRefWithUpdate();
+  const toggleElement = toggleRef.current;
+  const lastShow = (0, _usePrevious.default)(show);
+  const lastSourceEvent = (0, _react.useRef)(null);
+  const focusInDropdown = (0, _react.useRef)(false);
+  const onSelectCtx = (0, _react.useContext)(_SelectableContext.default);
+  const toggle = (0, _react.useCallback)((nextShow, event, source = event == null ? void 0 : event.type) => {
+    onToggle(nextShow, {
+      originalEvent: event,
+      source
+    });
+  }, [onToggle]);
+  const handleSelect = (0, _useEventCallback.default)((key, event) => {
+    onSelect == null ? void 0 : onSelect(key, event);
+    toggle(false, event, 'select');
+    if (!event.isPropagationStopped()) {
+      onSelectCtx == null ? void 0 : onSelectCtx(key, event);
+    }
+  });
+  const context = (0, _react.useMemo)(() => ({
+    toggle,
+    placement,
+    show,
+    menuElement,
+    toggleElement,
+    setMenu,
+    setToggle
+  }), [toggle, placement, show, menuElement, toggleElement, setMenu, setToggle]);
+  if (menuElement && lastShow && !show) {
+    focusInDropdown.current = menuElement.contains(menuElement.ownerDocument.activeElement);
+  }
+  const focusToggle = (0, _useEventCallback.default)(() => {
+    if (toggleElement && toggleElement.focus) {
+      toggleElement.focus();
+    }
+  });
+  const maybeFocusFirst = (0, _useEventCallback.default)(() => {
+    const type = lastSourceEvent.current;
+    let focusType = focusFirstItemOnShow;
+    if (focusType == null) {
+      focusType = menuRef.current && (0, _DropdownToggle.isRoleMenu)(menuRef.current) ? 'keyboard' : false;
+    }
+    if (focusType === false || focusType === 'keyboard' && !/^key.+$/.test(type)) {
+      return;
+    }
+    const first = (0, _querySelectorAll.default)(menuRef.current, itemSelector)[0];
+    if (first && first.focus) first.focus();
+  });
+  (0, _react.useEffect)(() => {
+    if (show) maybeFocusFirst();else if (focusInDropdown.current) {
+      focusInDropdown.current = false;
+      focusToggle();
+    }
+    // only `show` should be changing
+  }, [show, focusInDropdown, focusToggle, maybeFocusFirst]);
+  (0, _react.useEffect)(() => {
+    lastSourceEvent.current = null;
+  });
+  const getNextFocusedChild = (current, offset) => {
+    if (!menuRef.current) return null;
+    const items = (0, _querySelectorAll.default)(menuRef.current, itemSelector);
+    let index = items.indexOf(current) + offset;
+    index = Math.max(0, Math.min(index, items.length));
+    return items[index];
+  };
+  (0, _useEventListener.default)((0, _react.useCallback)(() => window.document, [window]), 'keydown', event => {
+    var _menuRef$current, _toggleRef$current;
+    const {
+      key
+    } = event;
+    const target = event.target;
+    const fromMenu = (_menuRef$current = menuRef.current) == null ? void 0 : _menuRef$current.contains(target);
+    const fromToggle = (_toggleRef$current = toggleRef.current) == null ? void 0 : _toggleRef$current.contains(target);
+
+    // Second only to https://github.com/twbs/bootstrap/blob/8cfbf6933b8a0146ac3fbc369f19e520bd1ebdac/js/src/dropdown.js#L400
+    // in inscrutability
+    const isInput = /input|textarea/i.test(target.tagName);
+    if (isInput && (key === ' ' || key !== 'Escape' && fromMenu || key === 'Escape' && target.type === 'search')) {
+      return;
+    }
+    if (!fromMenu && !fromToggle) {
+      return;
+    }
+    if (key === 'Tab' && (!menuRef.current || !show)) {
+      return;
+    }
+    lastSourceEvent.current = event.type;
+    const meta = {
+      originalEvent: event,
+      source: event.type
+    };
+    switch (key) {
+      case 'ArrowUp':
+        {
+          const next = getNextFocusedChild(target, -1);
+          if (next && next.focus) next.focus();
+          event.preventDefault();
+          return;
+        }
+      case 'ArrowDown':
+        event.preventDefault();
+        if (!show) {
+          onToggle(true, meta);
+        } else {
+          const next = getNextFocusedChild(target, 1);
+          if (next && next.focus) next.focus();
+        }
+        return;
+      case 'Tab':
+        // on keydown the target is the element being tabbed FROM, we need that
+        // to know if this event is relevant to this dropdown (e.g. in this menu).
+        // On `keyup` the target is the element being tagged TO which we use to check
+        // if focus has left the menu
+        (0, _addEventListener.default)(target.ownerDocument, 'keyup', e => {
+          var _menuRef$current2;
+          if (e.key === 'Tab' && !e.target || !((_menuRef$current2 = menuRef.current) != null && _menuRef$current2.contains(e.target))) {
+            onToggle(false, meta);
+          }
+        }, {
+          once: true
+        });
+        break;
+      case 'Escape':
+        if (key === 'Escape') {
+          event.preventDefault();
+          event.stopPropagation();
+        }
+        onToggle(false, meta);
+        break;
+      default:
+    }
+  });
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectableContext.default.Provider, {
+    value: handleSelect,
+    children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DropdownContext.default.Provider, {
+      value: context,
+      children: children
+    })
+  });
+}
+Dropdown.displayName = 'Dropdown';
+Dropdown.Menu = _DropdownMenu.default;
+Dropdown.Toggle = _DropdownToggle.default;
+Dropdown.Item = _DropdownItem.default;
+var _default = exports.default = Dropdown;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/DropdownContext.d.ts b/node_modules/@restart/ui/cjs/DropdownContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..127e54933f15e5b7376ca3f648850bfd04cf1add
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownContext.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import type { Placement } from './usePopper';
+export type DropdownContextValue = {
+    toggle: (nextShow: boolean, event?: React.SyntheticEvent | Event) => void;
+    menuElement: HTMLElement | null;
+    toggleElement: HTMLElement | null;
+    setMenu: (ref: HTMLElement | null) => void;
+    setToggle: (ref: HTMLElement | null) => void;
+    show: boolean;
+    placement?: Placement;
+};
+declare const DropdownContext: React.Context<DropdownContextValue | null>;
+export default DropdownContext;
diff --git a/node_modules/@restart/ui/cjs/DropdownContext.js b/node_modules/@restart/ui/cjs/DropdownContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..a27e3a1cdfa6e000492af649ba68f97b386f0837
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownContext.js
@@ -0,0 +1,9 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const DropdownContext = /*#__PURE__*/React.createContext(null);
+var _default = exports.default = DropdownContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/DropdownItem.d.ts b/node_modules/@restart/ui/cjs/DropdownItem.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e79126351371dc8a3de4f2011ae93b3096372491
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownItem.d.ts
@@ -0,0 +1,46 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent } from './types';
+import Button from './Button';
+export interface DropdownItemProps extends React.HTMLAttributes<HTMLElement> {
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * Highlight the menu item as active.
+     */
+    active?: boolean;
+    /**
+     * Disable the menu item, making it unselectable.
+     */
+    disabled?: boolean;
+    /**
+     * Value passed to the `onSelect` handler, useful for identifying the selected menu item.
+     */
+    eventKey?: EventKey;
+    /**
+     * HTML `href` attribute corresponding to `a.href`.
+     */
+    href?: string;
+}
+interface UseDropdownItemOptions {
+    key?: EventKey | null;
+    href?: string;
+    active?: boolean;
+    disabled?: boolean;
+    onClick?: React.MouseEventHandler;
+}
+/**
+ * Create a dropdown item. Returns a set of props for the dropdown item component
+ * including an `onClick` handler that prevents selection when the item is disabled
+ */
+export declare function useDropdownItem({ key, href, active, disabled, onClick, }: UseDropdownItemOptions): readonly [{
+    readonly onClick: (event: any) => void;
+    readonly 'aria-disabled': true | undefined;
+    readonly 'aria-selected': boolean | undefined;
+    readonly "data-rr-ui-dropdown-item": "";
+}, {
+    readonly isActive: boolean | undefined;
+}];
+declare const DropdownItem: DynamicRefForwardingComponent<typeof Button, DropdownItemProps>;
+export default DropdownItem;
diff --git a/node_modules/@restart/ui/cjs/DropdownItem.js b/node_modules/@restart/ui/cjs/DropdownItem.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0ce5ec7bd67300c5008f69b13bf23714b263ff1
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownItem.js
@@ -0,0 +1,74 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.useDropdownItem = useDropdownItem;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _SelectableContext = _interopRequireWildcard(require("./SelectableContext"));
+var _NavContext = _interopRequireDefault(require("./NavContext"));
+var _Button = _interopRequireDefault(require("./Button"));
+var _DataKey = require("./DataKey");
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["eventKey", "disabled", "onClick", "active", "as"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+/**
+ * Create a dropdown item. Returns a set of props for the dropdown item component
+ * including an `onClick` handler that prevents selection when the item is disabled
+ */
+function useDropdownItem({
+  key,
+  href,
+  active,
+  disabled,
+  onClick
+}) {
+  const onSelectCtx = (0, _react.useContext)(_SelectableContext.default);
+  const navContext = (0, _react.useContext)(_NavContext.default);
+  const {
+    activeKey
+  } = navContext || {};
+  const eventKey = (0, _SelectableContext.makeEventKey)(key, href);
+  const isActive = active == null && key != null ? (0, _SelectableContext.makeEventKey)(activeKey) === eventKey : active;
+  const handleClick = (0, _useEventCallback.default)(event => {
+    if (disabled) return;
+    onClick == null ? void 0 : onClick(event);
+    if (onSelectCtx && !event.isPropagationStopped()) {
+      onSelectCtx(eventKey, event);
+    }
+  });
+  return [{
+    onClick: handleClick,
+    'aria-disabled': disabled || undefined,
+    'aria-selected': isActive,
+    [(0, _DataKey.dataAttr)('dropdown-item')]: ''
+  }, {
+    isActive
+  }];
+}
+const DropdownItem = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      eventKey,
+      disabled,
+      onClick,
+      active,
+      as: Component = _Button.default
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [dropdownItemProps] = useDropdownItem({
+    key: eventKey,
+    href: props.href,
+    disabled,
+    onClick,
+    active
+  });
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({}, props, {
+    ref: ref
+  }, dropdownItemProps));
+});
+DropdownItem.displayName = 'DropdownItem';
+var _default = exports.default = DropdownItem;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/DropdownMenu.d.ts b/node_modules/@restart/ui/cjs/DropdownMenu.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0aa08d04b42c1d2fc9a2d1f523cc1db814c3c489
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownMenu.d.ts
@@ -0,0 +1,117 @@
+import * as React from 'react';
+import { DropdownContextValue } from './DropdownContext';
+import { UsePopperOptions, Placement, Offset, UsePopperState } from './usePopper';
+import { ClickOutsideOptions } from './useClickOutside';
+export interface UseDropdownMenuOptions {
+    /**
+     * Enables the Popper.js `flip` modifier, allowing the Dropdown to
+     * automatically adjust it's placement in case of overlap with the viewport or
+     * toggle. See the [flip docs](https://popper.js.org/docs/v2/modifiers/flip/)
+     * for more info.
+     */
+    flip?: boolean;
+    /**
+     * Controls the visible state of the menu, generally this is provided by the
+     * parent `Dropdown` component, but may also be specified as a prop directly.
+     */
+    show?: boolean;
+    /**
+     * Use the `fixed` positioning strategy in Popper. This is used if the
+     * dropdown toggle is in a fixed container.
+     */
+    fixed?: boolean;
+    /**
+     * The PopperJS placement for positioning the Dropdown menu in relation to it's Toggle.
+     * Generally this is provided by the parent `Dropdown` component,
+     * but may also be specified as a prop directly.
+     */
+    placement?: Placement;
+    /**
+     * Whether or not to use Popper for positioning the menu.
+     */
+    usePopper?: boolean;
+    /**
+     * Whether or not to add scroll and resize listeners to update menu position.
+     *
+     * See the [event listeners docs](https://popper.js.org/docs/v2/modifiers/event-listeners/)
+     * for more info.
+     */
+    enableEventListeners?: boolean;
+    /**
+     * Offset of the dropdown menu from the dropdown toggle. See the
+     * [offset docs](https://popper.js.org/docs/v2/modifiers/offset/) for more info.
+     */
+    offset?: Offset;
+    /**
+     * Override the default event used by RootCloseWrapper.
+     */
+    rootCloseEvent?: ClickOutsideOptions['clickTrigger'];
+    /**
+     * A set of popper options and props passed directly to react-popper's Popper component.
+     */
+    popperConfig?: Omit<UsePopperOptions, 'enabled' | 'placement'>;
+}
+export type UserDropdownMenuProps = Record<string, any> & {
+    ref: React.RefCallback<HTMLElement>;
+    style?: React.CSSProperties;
+    'aria-labelledby'?: string;
+};
+export type UserDropdownMenuArrowProps = Record<string, any> & {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+};
+export interface UseDropdownMenuMetadata {
+    show: boolean;
+    placement?: Placement;
+    hasShown: boolean;
+    toggle?: DropdownContextValue['toggle'];
+    popper: UsePopperState | null;
+    arrowProps: Partial<UserDropdownMenuArrowProps>;
+}
+/**
+ * @memberOf Dropdown
+ * @param {object}  options
+ * @param {boolean} options.flip Automatically adjust the menu `drop` position based on viewport edge detection
+ * @param {[number, number]} options.offset Define an offset distance between the Menu and the Toggle
+ * @param {boolean} options.show Display the menu manually, ignored in the context of a `Dropdown`
+ * @param {boolean} options.usePopper opt in/out of using PopperJS to position menus. When disabled you must position it yourself.
+ * @param {string}  options.rootCloseEvent The pointer event to listen for when determining "clicks outside" the menu for triggering a close.
+ * @param {object}  options.popperConfig Options passed to the [`usePopper`](/api/usePopper) hook.
+ */
+export declare function useDropdownMenu(options?: UseDropdownMenuOptions): readonly [UserDropdownMenuProps, UseDropdownMenuMetadata];
+export interface DropdownMenuProps extends UseDropdownMenuOptions {
+    /**
+     * A render prop that returns a Menu element. The `props`
+     * argument should be spread through to **a component that can accept a ref**.
+     *
+     * @type {Function ({
+     *   show: boolean,
+     *   close: (?SyntheticEvent) => void,
+     *   placement: Placement,
+     *   update: () => void,
+     *   forceUpdate: () => void,
+     *   props: {
+     *     ref: (?HTMLElement) => void,
+     *     style: { [string]: string | number },
+     *     aria-labelledby: ?string
+     *   },
+     *   arrowProps: {
+     *     ref: (?HTMLElement) => void,
+     *     style: { [string]: string | number },
+     *   },
+     * }) => React.Element}
+     */
+    children: (props: UserDropdownMenuProps, meta: UseDropdownMenuMetadata) => React.ReactNode;
+}
+/**
+ * Also exported as `<Dropdown.Menu>` from `Dropdown`.
+ *
+ * @displayName DropdownMenu
+ * @memberOf Dropdown
+ */
+declare function DropdownMenu({ children, usePopper: usePopperProp, ...options }: DropdownMenuProps): React.JSX.Element;
+declare namespace DropdownMenu {
+    var displayName: string;
+}
+/** @component */
+export default DropdownMenu;
diff --git a/node_modules/@restart/ui/cjs/DropdownMenu.js b/node_modules/@restart/ui/cjs/DropdownMenu.js
new file mode 100644
index 0000000000000000000000000000000000000000..acc32e97171a67255fb36c9e00cf174229b53325
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownMenu.js
@@ -0,0 +1,114 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.useDropdownMenu = useDropdownMenu;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _useCallbackRef = _interopRequireDefault(require("@restart/hooks/useCallbackRef"));
+var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
+var _usePopper = _interopRequireDefault(require("./usePopper"));
+var _useClickOutside = _interopRequireDefault(require("./useClickOutside"));
+var _mergeOptionsWithPopperConfig = _interopRequireDefault(require("./mergeOptionsWithPopperConfig"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["children", "usePopper"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+const noop = () => {};
+
+/**
+ * @memberOf Dropdown
+ * @param {object}  options
+ * @param {boolean} options.flip Automatically adjust the menu `drop` position based on viewport edge detection
+ * @param {[number, number]} options.offset Define an offset distance between the Menu and the Toggle
+ * @param {boolean} options.show Display the menu manually, ignored in the context of a `Dropdown`
+ * @param {boolean} options.usePopper opt in/out of using PopperJS to position menus. When disabled you must position it yourself.
+ * @param {string}  options.rootCloseEvent The pointer event to listen for when determining "clicks outside" the menu for triggering a close.
+ * @param {object}  options.popperConfig Options passed to the [`usePopper`](/api/usePopper) hook.
+ */
+function useDropdownMenu(options = {}) {
+  const context = (0, _react.useContext)(_DropdownContext.default);
+  const [arrowElement, attachArrowRef] = (0, _useCallbackRef.default)();
+  const hasShownRef = (0, _react.useRef)(false);
+  const {
+    flip,
+    offset,
+    rootCloseEvent,
+    fixed = false,
+    placement: placementOverride,
+    popperConfig = {},
+    enableEventListeners = true,
+    usePopper: shouldUsePopper = !!context
+  } = options;
+  const show = (context == null ? void 0 : context.show) == null ? !!options.show : context.show;
+  if (show && !hasShownRef.current) {
+    hasShownRef.current = true;
+  }
+  const handleClose = e => {
+    context == null ? void 0 : context.toggle(false, e);
+  };
+  const {
+    placement,
+    setMenu,
+    menuElement,
+    toggleElement
+  } = context || {};
+  const popper = (0, _usePopper.default)(toggleElement, menuElement, (0, _mergeOptionsWithPopperConfig.default)({
+    placement: placementOverride || placement || 'bottom-start',
+    enabled: shouldUsePopper,
+    enableEvents: enableEventListeners == null ? show : enableEventListeners,
+    offset,
+    flip,
+    fixed,
+    arrowElement,
+    popperConfig
+  }));
+  const menuProps = Object.assign({
+    ref: setMenu || noop,
+    'aria-labelledby': toggleElement == null ? void 0 : toggleElement.id
+  }, popper.attributes.popper, {
+    style: popper.styles.popper
+  });
+  const metadata = {
+    show,
+    placement,
+    hasShown: hasShownRef.current,
+    toggle: context == null ? void 0 : context.toggle,
+    popper: shouldUsePopper ? popper : null,
+    arrowProps: shouldUsePopper ? Object.assign({
+      ref: attachArrowRef
+    }, popper.attributes.arrow, {
+      style: popper.styles.arrow
+    }) : {}
+  };
+  (0, _useClickOutside.default)(menuElement, handleClose, {
+    clickTrigger: rootCloseEvent,
+    disabled: !show
+  });
+  return [menuProps, metadata];
+}
+/**
+ * Also exported as `<Dropdown.Menu>` from `Dropdown`.
+ *
+ * @displayName DropdownMenu
+ * @memberOf Dropdown
+ */
+function DropdownMenu(_ref) {
+  let {
+      children,
+      usePopper: usePopperProp = true
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [props, meta] = useDropdownMenu(Object.assign({}, options, {
+    usePopper: usePopperProp
+  }));
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
+    children: children(props, meta)
+  });
+}
+DropdownMenu.displayName = 'DropdownMenu';
+
+/** @component */
+var _default = exports.default = DropdownMenu;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/DropdownToggle.d.ts b/node_modules/@restart/ui/cjs/DropdownToggle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..42c38986b2b92e685a2dbb2ca369f3be4de8fdb7
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownToggle.d.ts
@@ -0,0 +1,56 @@
+import * as React from 'react';
+import { DropdownContextValue } from './DropdownContext';
+export declare const isRoleMenu: (el: HTMLElement) => boolean;
+export interface UseDropdownToggleProps {
+    id: string;
+    ref: DropdownContextValue['setToggle'];
+    onClick: React.MouseEventHandler;
+    'aria-expanded': boolean;
+    'aria-haspopup'?: true;
+}
+export interface UseDropdownToggleMetadata {
+    show: DropdownContextValue['show'];
+    toggle: DropdownContextValue['toggle'];
+}
+/**
+ * Wires up Dropdown toggle functionality, returning a set a props to attach
+ * to the element that functions as the dropdown toggle (generally a button).
+ *
+ * @memberOf Dropdown
+ */
+export declare function useDropdownToggle(): [
+    UseDropdownToggleProps,
+    UseDropdownToggleMetadata
+];
+export interface DropdownToggleProps {
+    /**
+     * A render prop that returns a Toggle element. The `props`
+     * argument should spread through to **a component that can accept a ref**. Use
+     * the `onToggle` argument to toggle the menu open or closed
+     *
+     * @type {Function ({
+     *   props: {
+     *     ref: (?HTMLElement) => void,
+     *     aria-haspopup: true
+     *     aria-expanded: boolean
+     *   },
+     *   meta: {
+     *     show: boolean,
+     *     toggle: (show: boolean) => void,
+     *   }
+     * }) => React.Element}
+     */
+    children: (props: UseDropdownToggleProps, meta: UseDropdownToggleMetadata) => React.ReactNode;
+}
+/**
+ * Also exported as `<Dropdown.Toggle>` from `Dropdown`.
+ *
+ * @displayName DropdownToggle
+ * @memberOf Dropdown
+ */
+declare function DropdownToggle({ children }: DropdownToggleProps): React.JSX.Element;
+declare namespace DropdownToggle {
+    var displayName: string;
+}
+/** @component */
+export default DropdownToggle;
diff --git a/node_modules/@restart/ui/cjs/DropdownToggle.js b/node_modules/@restart/ui/cjs/DropdownToggle.js
new file mode 100644
index 0000000000000000000000000000000000000000..c64c5b368d0d18f425d9fbca2709b7803e564bab
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/DropdownToggle.js
@@ -0,0 +1,73 @@
+"use strict";
+
+exports.__esModule = true;
+exports.isRoleMenu = exports.default = void 0;
+exports.useDropdownToggle = useDropdownToggle;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _ssr = require("./ssr");
+var _DropdownContext = _interopRequireDefault(require("./DropdownContext"));
+var _jsxRuntime = require("react/jsx-runtime");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const isRoleMenu = el => {
+  var _el$getAttribute;
+  return ((_el$getAttribute = el.getAttribute('role')) == null ? void 0 : _el$getAttribute.toLowerCase()) === 'menu';
+};
+exports.isRoleMenu = isRoleMenu;
+const noop = () => {};
+
+/**
+ * Wires up Dropdown toggle functionality, returning a set a props to attach
+ * to the element that functions as the dropdown toggle (generally a button).
+ *
+ * @memberOf Dropdown
+ */
+function useDropdownToggle() {
+  const id = (0, _ssr.useSSRSafeId)();
+  const {
+    show = false,
+    toggle = noop,
+    setToggle,
+    menuElement
+  } = (0, _react.useContext)(_DropdownContext.default) || {};
+  const handleClick = (0, _react.useCallback)(e => {
+    toggle(!show, e);
+  }, [show, toggle]);
+  const props = {
+    id,
+    ref: setToggle || noop,
+    onClick: handleClick,
+    'aria-expanded': !!show
+  };
+
+  // This is maybe better down in an effect, but
+  // the component is going to update anyway when the menu element
+  // is set so might return new props.
+  if (menuElement && isRoleMenu(menuElement)) {
+    props['aria-haspopup'] = true;
+  }
+  return [props, {
+    show,
+    toggle
+  }];
+}
+/**
+ * Also exported as `<Dropdown.Toggle>` from `Dropdown`.
+ *
+ * @displayName DropdownToggle
+ * @memberOf Dropdown
+ */
+function DropdownToggle({
+  children
+}) {
+  const [props, meta] = useDropdownToggle();
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
+    children: children(props, meta)
+  });
+}
+DropdownToggle.displayName = 'DropdownToggle';
+
+/** @component */
+var _default = exports.default = DropdownToggle;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/ImperativeTransition.d.ts b/node_modules/@restart/ui/cjs/ImperativeTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b6a9f9b544ac051890ab79c5331dc223162e9123
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ImperativeTransition.d.ts
@@ -0,0 +1,29 @@
+import React from 'react';
+import { TransitionComponent, TransitionProps } from './types';
+export interface TransitionFunctionOptions {
+    in: boolean;
+    element: HTMLElement;
+    initial: boolean;
+    isStale: () => boolean;
+}
+export type TransitionHandler = (options: TransitionFunctionOptions) => void | Promise<void>;
+export interface UseTransitionOptions {
+    in: boolean;
+    onTransition: TransitionHandler;
+    initial?: boolean;
+}
+export declare function useTransition({ in: inProp, onTransition, }: UseTransitionOptions): React.RefObject<HTMLElement>;
+export interface ImperativeTransitionProps extends TransitionProps {
+    transition: TransitionHandler;
+    appear: true;
+    mountOnEnter: true;
+    unmountOnExit: true;
+}
+/**
+ * Adapts an imperative transition function to a subset of the RTG `<Transition>` component API.
+ *
+ * ImperativeTransition does not support mounting options or `appear` at the moment, meaning
+ * that it always acts like: `mountOnEnter={true} unmountOnExit={true} appear={true}`
+ */
+export default function ImperativeTransition({ children, in: inProp, onExited, onEntered, transition, }: ImperativeTransitionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
+export declare function renderTransition(component: TransitionComponent | undefined, runTransition: TransitionHandler | undefined, props: TransitionProps & Omit<ImperativeTransitionProps, 'transition'>): React.JSX.Element;
diff --git a/node_modules/@restart/ui/cjs/ImperativeTransition.js b/node_modules/@restart/ui/cjs/ImperativeTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac41880e232f00145f0833097d4a0f9142d2543a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ImperativeTransition.js
@@ -0,0 +1,102 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = ImperativeTransition;
+exports.renderTransition = renderTransition;
+exports.useTransition = useTransition;
+var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _useIsomorphicEffect = _interopRequireDefault(require("@restart/hooks/useIsomorphicEffect"));
+var _react = _interopRequireWildcard(require("react"));
+var _NoopTransition = _interopRequireDefault(require("./NoopTransition"));
+var _RTGTransition = _interopRequireDefault(require("./RTGTransition"));
+var _jsxRuntime = require("react/jsx-runtime");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function useTransition({
+  in: inProp,
+  onTransition
+}) {
+  const ref = (0, _react.useRef)(null);
+  const isInitialRef = (0, _react.useRef)(true);
+  const handleTransition = (0, _useEventCallback.default)(onTransition);
+  (0, _useIsomorphicEffect.default)(() => {
+    if (!ref.current) {
+      return undefined;
+    }
+    let stale = false;
+    handleTransition({
+      in: inProp,
+      element: ref.current,
+      initial: isInitialRef.current,
+      isStale: () => stale
+    });
+    return () => {
+      stale = true;
+    };
+  }, [inProp, handleTransition]);
+  (0, _useIsomorphicEffect.default)(() => {
+    isInitialRef.current = false;
+    // this is for strict mode
+    return () => {
+      isInitialRef.current = true;
+    };
+  }, []);
+  return ref;
+}
+/**
+ * Adapts an imperative transition function to a subset of the RTG `<Transition>` component API.
+ *
+ * ImperativeTransition does not support mounting options or `appear` at the moment, meaning
+ * that it always acts like: `mountOnEnter={true} unmountOnExit={true} appear={true}`
+ */
+function ImperativeTransition({
+  children,
+  in: inProp,
+  onExited,
+  onEntered,
+  transition
+}) {
+  const [exited, setExited] = (0, _react.useState)(!inProp);
+
+  // TODO: I think this needs to be in an effect
+  if (inProp && exited) {
+    setExited(false);
+  }
+  const ref = useTransition({
+    in: !!inProp,
+    onTransition: options => {
+      const onFinish = () => {
+        if (options.isStale()) return;
+        if (options.in) {
+          onEntered == null ? void 0 : onEntered(options.element, options.initial);
+        } else {
+          setExited(true);
+          onExited == null ? void 0 : onExited(options.element);
+        }
+      };
+      Promise.resolve(transition(options)).then(onFinish, error => {
+        if (!options.in) setExited(true);
+        throw error;
+      });
+    }
+  });
+  const combinedRef = (0, _useMergedRefs.default)(ref, children.ref);
+  return exited && !inProp ? null : /*#__PURE__*/(0, _react.cloneElement)(children, {
+    ref: combinedRef
+  });
+}
+function renderTransition(component, runTransition, props) {
+  if (component) {
+    return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RTGTransition.default, Object.assign({}, props, {
+      component: component
+    }));
+  }
+  if (runTransition) {
+    return /*#__PURE__*/(0, _jsxRuntime.jsx)(ImperativeTransition, Object.assign({}, props, {
+      transition: runTransition
+    }));
+  }
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_NoopTransition.default, Object.assign({}, props));
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Modal.d.ts b/node_modules/@restart/ui/cjs/Modal.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4a06a5b4f7399b27bdb8f9a554dcda37e61478be
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Modal.d.ts
@@ -0,0 +1,153 @@
+import * as React from 'react';
+import ModalManager from './ModalManager';
+import { DOMContainer } from './useWaitForDOMRef';
+import { TransitionCallbacks } from './types';
+import { TransitionHandler } from './ImperativeTransition';
+export interface ModalTransitionProps extends TransitionCallbacks {
+    in: boolean;
+    appear?: boolean;
+    unmountOnExit?: boolean;
+    children: React.ReactElement;
+}
+export type ModalTransitionComponent = React.ComponentType<ModalTransitionProps>;
+export interface RenderModalDialogProps {
+    style: React.CSSProperties | undefined;
+    className: string | undefined;
+    tabIndex: number;
+    role: string;
+    ref: React.RefCallback<Element>;
+    'aria-modal': boolean | undefined;
+}
+export interface RenderModalBackdropProps {
+    ref: React.RefCallback<Element>;
+    onClick: (event: React.SyntheticEvent) => void;
+}
+export interface BaseModalProps extends TransitionCallbacks {
+    children?: React.ReactElement;
+    role?: string;
+    style?: React.CSSProperties;
+    className?: string;
+    /**
+     * Set the visibility of the Modal
+     */
+    show?: boolean;
+    /**
+     * A DOM element, a `ref` to an element, or function that returns either. The Modal is appended to it's `container` element.
+     *
+     */
+    container?: DOMContainer;
+    /**
+     * A callback fired when the Modal is opening.
+     */
+    onShow?: () => void;
+    /**
+     * A callback fired when either the backdrop is clicked, or the escape key is pressed.
+     *
+     * The `onHide` callback only signals intent from the Modal,
+     * you must actually set the `show` prop to `false` for the Modal to close.
+     */
+    onHide?: () => void;
+    /**
+     * A ModalManager instance used to track and manage the state of open
+     * Modals. Useful when customizing how modals interact within a container
+     */
+    manager?: ModalManager;
+    /**
+     * Include a backdrop component. A `static`backdrop
+     * will not trigger a Modal onHide when clicked.
+     */
+    backdrop?: true | false | 'static';
+    /**
+     * A function that returns the dialog component. Useful for custom
+     * rendering. **Note:** the component should make sure to apply the provided ref.
+     *
+     * ```js static
+     * renderDialog={props => <MyDialog {...props} />}
+     * ```
+     */
+    renderDialog?: (props: RenderModalDialogProps) => React.ReactNode;
+    /**
+     * A function that returns a backdrop component. Useful for custom
+     * backdrop rendering.
+     *
+     * ```js
+     *  renderBackdrop={props => <MyBackdrop {...props} />}
+     * ```
+     */
+    renderBackdrop?: (props: RenderModalBackdropProps) => React.ReactNode;
+    /**
+     * A callback fired when the escape key, if specified in `keyboard`, is pressed.
+     *
+     * If preventDefault() is called on the keyboard event, closing the modal will be cancelled.
+     */
+    onEscapeKeyDown?: (e: KeyboardEvent) => void;
+    /**
+     * A callback fired when the backdrop, if specified, is clicked.
+     */
+    onBackdropClick?: (e: React.SyntheticEvent) => void;
+    /**
+     * Close the modal when escape key is pressed
+     */
+    keyboard?: boolean;
+    /**
+     * A `react-transition-group` `<Transition/>` component used
+     * to control animations for the dialog component.
+     */
+    transition?: ModalTransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and dialog element.
+     * Should return a promise when the transition is complete
+     */
+    runTransition?: TransitionHandler;
+    /**
+     * A `react-transition-group` `<Transition/>` component used
+     * to control animations for the backdrop components.
+     */
+    backdropTransition?: ModalTransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and backdrop element.
+     * Should return a promise when the transition is complete
+     */
+    runBackdropTransition?: TransitionHandler;
+    /**
+     * When `true` The modal will automatically shift focus to itself when it opens, and
+     * replace it to the last focused element when it closes. This also
+     * works correctly with any Modal children that have the `autoFocus` prop.
+     *
+     * Generally this should never be set to `false` as it makes the Modal less
+     * accessible to assistive technologies, like screen readers.
+     */
+    autoFocus?: boolean;
+    /**
+     * When `true` The modal will prevent focus from leaving the Modal while open.
+     *
+     * Generally this should never be set to `false` as it makes the Modal less
+     * accessible to assistive technologies, like screen readers.
+     */
+    enforceFocus?: boolean;
+    /**
+     * When `true` The modal will restore focus to previously focused element once
+     * modal is hidden
+     */
+    restoreFocus?: boolean;
+    /**
+     * Options passed to focus function when `restoreFocus` is set to `true`
+     *
+     * @link  https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Parameters
+     */
+    restoreFocusOptions?: {
+        preventScroll: boolean;
+    };
+}
+export interface ModalProps extends BaseModalProps {
+    [other: string]: any;
+}
+export interface ModalHandle {
+    dialog: HTMLElement | null;
+    backdrop: HTMLElement | null;
+    isTopModal: () => boolean;
+}
+declare const _default: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<ModalHandle>> & {
+    Manager: typeof ModalManager;
+};
+export default _default;
diff --git a/node_modules/@restart/ui/cjs/Modal.js b/node_modules/@restart/ui/cjs/Modal.js
new file mode 100644
index 0000000000000000000000000000000000000000..77b1db685bc7ebbceaa77c69ff7cccbc77083746
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Modal.js
@@ -0,0 +1,251 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _activeElement = _interopRequireDefault(require("dom-helpers/activeElement"));
+var _contains = _interopRequireDefault(require("dom-helpers/contains"));
+var _canUseDOM = _interopRequireDefault(require("dom-helpers/canUseDOM"));
+var _listen = _interopRequireDefault(require("dom-helpers/listen"));
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _reactDom = _interopRequireDefault(require("react-dom"));
+var _useMounted = _interopRequireDefault(require("@restart/hooks/useMounted"));
+var _useWillUnmount = _interopRequireDefault(require("@restart/hooks/useWillUnmount"));
+var _usePrevious = _interopRequireDefault(require("@restart/hooks/usePrevious"));
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _ModalManager = _interopRequireDefault(require("./ModalManager"));
+var _useWaitForDOMRef = _interopRequireDefault(require("./useWaitForDOMRef"));
+var _useWindow = _interopRequireDefault(require("./useWindow"));
+var _ImperativeTransition = require("./ImperativeTransition");
+var _utils = require("./utils");
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["show", "role", "className", "style", "children", "backdrop", "keyboard", "onBackdropClick", "onEscapeKeyDown", "transition", "runTransition", "backdropTransition", "runBackdropTransition", "autoFocus", "enforceFocus", "restoreFocus", "restoreFocusOptions", "renderDialog", "renderBackdrop", "manager", "container", "onShow", "onHide", "onExit", "onExited", "onExiting", "onEnter", "onEntering", "onEntered"];
+/* eslint-disable @typescript-eslint/no-use-before-define, react/prop-types */
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+let manager;
+
+/*
+  Modal props are split into a version with and without index signature so that you can fully use them in another projects
+  This is due to Typescript not playing well with index signatures e.g. when using Omit
+*/
+
+function getManager(window) {
+  if (!manager) manager = new _ModalManager.default({
+    ownerDocument: window == null ? void 0 : window.document
+  });
+  return manager;
+}
+function useModalManager(provided) {
+  const window = (0, _useWindow.default)();
+  const modalManager = provided || getManager(window);
+  const modal = (0, _react.useRef)({
+    dialog: null,
+    backdrop: null
+  });
+  return Object.assign(modal.current, {
+    add: () => modalManager.add(modal.current),
+    remove: () => modalManager.remove(modal.current),
+    isTopModal: () => modalManager.isTopModal(modal.current),
+    setDialogRef: (0, _react.useCallback)(ref => {
+      modal.current.dialog = ref;
+    }, []),
+    setBackdropRef: (0, _react.useCallback)(ref => {
+      modal.current.backdrop = ref;
+    }, [])
+  });
+}
+const Modal = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
+  let {
+      show = false,
+      role = 'dialog',
+      className,
+      style,
+      children,
+      backdrop = true,
+      keyboard = true,
+      onBackdropClick,
+      onEscapeKeyDown,
+      transition,
+      runTransition,
+      backdropTransition,
+      runBackdropTransition,
+      autoFocus = true,
+      enforceFocus = true,
+      restoreFocus = true,
+      restoreFocusOptions,
+      renderDialog,
+      renderBackdrop = props => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", Object.assign({}, props)),
+      manager: providedManager,
+      container: containerRef,
+      onShow,
+      onHide = () => {},
+      onExit,
+      onExited,
+      onExiting,
+      onEnter,
+      onEntering,
+      onEntered
+    } = _ref,
+    rest = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const ownerWindow = (0, _useWindow.default)();
+  const container = (0, _useWaitForDOMRef.default)(containerRef);
+  const modal = useModalManager(providedManager);
+  const isMounted = (0, _useMounted.default)();
+  const prevShow = (0, _usePrevious.default)(show);
+  const [exited, setExited] = (0, _react.useState)(!show);
+  const lastFocusRef = (0, _react.useRef)(null);
+  (0, _react.useImperativeHandle)(ref, () => modal, [modal]);
+  if (_canUseDOM.default && !prevShow && show) {
+    lastFocusRef.current = (0, _activeElement.default)(ownerWindow == null ? void 0 : ownerWindow.document);
+  }
+
+  // TODO: I think this needs to be in an effect
+  if (show && exited) {
+    setExited(false);
+  }
+  const handleShow = (0, _useEventCallback.default)(() => {
+    modal.add();
+    removeKeydownListenerRef.current = (0, _listen.default)(document, 'keydown', handleDocumentKeyDown);
+    removeFocusListenerRef.current = (0, _listen.default)(document, 'focus',
+    // the timeout is necessary b/c this will run before the new modal is mounted
+    // and so steals focus from it
+    () => setTimeout(handleEnforceFocus), true);
+    if (onShow) {
+      onShow();
+    }
+
+    // autofocus after onShow to not trigger a focus event for previous
+    // modals before this one is shown.
+    if (autoFocus) {
+      var _modal$dialog$ownerDo, _modal$dialog;
+      const currentActiveElement = (0, _activeElement.default)((_modal$dialog$ownerDo = (_modal$dialog = modal.dialog) == null ? void 0 : _modal$dialog.ownerDocument) != null ? _modal$dialog$ownerDo : ownerWindow == null ? void 0 : ownerWindow.document);
+      if (modal.dialog && currentActiveElement && !(0, _contains.default)(modal.dialog, currentActiveElement)) {
+        lastFocusRef.current = currentActiveElement;
+        modal.dialog.focus();
+      }
+    }
+  });
+  const handleHide = (0, _useEventCallback.default)(() => {
+    modal.remove();
+    removeKeydownListenerRef.current == null ? void 0 : removeKeydownListenerRef.current();
+    removeFocusListenerRef.current == null ? void 0 : removeFocusListenerRef.current();
+    if (restoreFocus) {
+      var _lastFocusRef$current;
+      // Support: <=IE11 doesn't support `focus()` on svg elements (RB: #917)
+      (_lastFocusRef$current = lastFocusRef.current) == null ? void 0 : _lastFocusRef$current.focus == null ? void 0 : _lastFocusRef$current.focus(restoreFocusOptions);
+      lastFocusRef.current = null;
+    }
+  });
+
+  // TODO: try and combine these effects: https://github.com/react-bootstrap/react-overlays/pull/794#discussion_r409954120
+
+  // Show logic when:
+  //  - show is `true` _and_ `container` has resolved
+  (0, _react.useEffect)(() => {
+    if (!show || !container) return;
+    handleShow();
+  }, [show, container, /* should never change: */handleShow]);
+
+  // Hide cleanup logic when:
+  //  - `exited` switches to true
+  //  - component unmounts;
+  (0, _react.useEffect)(() => {
+    if (!exited) return;
+    handleHide();
+  }, [exited, handleHide]);
+  (0, _useWillUnmount.default)(() => {
+    handleHide();
+  });
+
+  // --------------------------------
+
+  const handleEnforceFocus = (0, _useEventCallback.default)(() => {
+    if (!enforceFocus || !isMounted() || !modal.isTopModal()) {
+      return;
+    }
+    const currentActiveElement = (0, _activeElement.default)(ownerWindow == null ? void 0 : ownerWindow.document);
+    if (modal.dialog && currentActiveElement && !(0, _contains.default)(modal.dialog, currentActiveElement)) {
+      modal.dialog.focus();
+    }
+  });
+  const handleBackdropClick = (0, _useEventCallback.default)(e => {
+    if (e.target !== e.currentTarget) {
+      return;
+    }
+    onBackdropClick == null ? void 0 : onBackdropClick(e);
+    if (backdrop === true) {
+      onHide();
+    }
+  });
+  const handleDocumentKeyDown = (0, _useEventCallback.default)(e => {
+    if (keyboard && (0, _utils.isEscKey)(e) && modal.isTopModal()) {
+      onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(e);
+      if (!e.defaultPrevented) {
+        onHide();
+      }
+    }
+  });
+  const removeFocusListenerRef = (0, _react.useRef)();
+  const removeKeydownListenerRef = (0, _react.useRef)();
+  const handleHidden = (...args) => {
+    setExited(true);
+    onExited == null ? void 0 : onExited(...args);
+  };
+  if (!container) {
+    return null;
+  }
+  const dialogProps = Object.assign({
+    role,
+    ref: modal.setDialogRef,
+    // apparently only works on the dialog role element
+    'aria-modal': role === 'dialog' ? true : undefined
+  }, rest, {
+    style,
+    className,
+    tabIndex: -1
+  });
+  let dialog = renderDialog ? renderDialog(dialogProps) : /*#__PURE__*/(0, _jsxRuntime.jsx)("div", Object.assign({}, dialogProps, {
+    children: /*#__PURE__*/React.cloneElement(children, {
+      role: 'document'
+    })
+  }));
+  dialog = (0, _ImperativeTransition.renderTransition)(transition, runTransition, {
+    unmountOnExit: true,
+    mountOnEnter: true,
+    appear: true,
+    in: !!show,
+    onExit,
+    onExiting,
+    onExited: handleHidden,
+    onEnter,
+    onEntering,
+    onEntered,
+    children: dialog
+  });
+  let backdropElement = null;
+  if (backdrop) {
+    backdropElement = renderBackdrop({
+      ref: modal.setBackdropRef,
+      onClick: handleBackdropClick
+    });
+    backdropElement = (0, _ImperativeTransition.renderTransition)(backdropTransition, runBackdropTransition, {
+      in: !!show,
+      appear: true,
+      mountOnEnter: true,
+      unmountOnExit: true,
+      children: backdropElement
+    });
+  }
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
+    children: /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
+      children: [backdropElement, dialog]
+    }), container)
+  });
+});
+Modal.displayName = 'Modal';
+var _default = exports.default = Object.assign(Modal, {
+  Manager: _ModalManager.default
+});
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/ModalManager.d.ts b/node_modules/@restart/ui/cjs/ModalManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..571f569fc04a5283e59b170a5311aed841bf9413
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ModalManager.d.ts
@@ -0,0 +1,38 @@
+export interface ModalInstance {
+    dialog: Element;
+    backdrop: Element;
+}
+export interface ModalManagerOptions {
+    ownerDocument?: Document;
+    handleContainerOverflow?: boolean;
+    isRTL?: boolean;
+}
+export type ContainerState = {
+    scrollBarWidth: number;
+    style: Record<string, any>;
+    [key: string]: any;
+};
+export declare const OPEN_DATA_ATTRIBUTE: "data-rr-ui-modal-open";
+/**
+ * Manages a stack of Modals as well as ensuring
+ * body scrolling is is disabled and padding accounted for
+ */
+declare class ModalManager {
+    readonly handleContainerOverflow: boolean;
+    readonly isRTL: boolean;
+    readonly modals: ModalInstance[];
+    protected state: ContainerState;
+    protected ownerDocument: Document | undefined;
+    constructor({ ownerDocument, handleContainerOverflow, isRTL, }?: ModalManagerOptions);
+    getScrollbarWidth(): number;
+    getElement(): HTMLElement;
+    setModalAttributes(_modal: ModalInstance): void;
+    removeModalAttributes(_modal: ModalInstance): void;
+    setContainerStyle(containerState: ContainerState): void;
+    reset(): void;
+    removeContainerStyle(containerState: ContainerState): void;
+    add(modal: ModalInstance): number;
+    remove(modal: ModalInstance): void;
+    isTopModal(modal: ModalInstance): boolean;
+}
+export default ModalManager;
diff --git a/node_modules/@restart/ui/cjs/ModalManager.js b/node_modules/@restart/ui/cjs/ModalManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..838e200a1f281451d1b32b8b7539c2b3c0415898
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ModalManager.js
@@ -0,0 +1,105 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.OPEN_DATA_ATTRIBUTE = void 0;
+var _css = _interopRequireDefault(require("dom-helpers/css"));
+var _DataKey = require("./DataKey");
+var _getScrollbarWidth = _interopRequireDefault(require("./getScrollbarWidth"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+const OPEN_DATA_ATTRIBUTE = exports.OPEN_DATA_ATTRIBUTE = (0, _DataKey.dataAttr)('modal-open');
+
+/**
+ * Manages a stack of Modals as well as ensuring
+ * body scrolling is is disabled and padding accounted for
+ */
+class ModalManager {
+  constructor({
+    ownerDocument,
+    handleContainerOverflow = true,
+    isRTL = false
+  } = {}) {
+    this.handleContainerOverflow = handleContainerOverflow;
+    this.isRTL = isRTL;
+    this.modals = [];
+    this.ownerDocument = ownerDocument;
+  }
+  getScrollbarWidth() {
+    return (0, _getScrollbarWidth.default)(this.ownerDocument);
+  }
+  getElement() {
+    return (this.ownerDocument || document).body;
+  }
+  setModalAttributes(_modal) {
+    // For overriding
+  }
+  removeModalAttributes(_modal) {
+    // For overriding
+  }
+  setContainerStyle(containerState) {
+    const style = {
+      overflow: 'hidden'
+    };
+
+    // we are only interested in the actual `style` here
+    // because we will override it
+    const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';
+    const container = this.getElement();
+    containerState.style = {
+      overflow: container.style.overflow,
+      [paddingProp]: container.style[paddingProp]
+    };
+    if (containerState.scrollBarWidth) {
+      // use computed style, here to get the real padding
+      // to add our scrollbar width
+      style[paddingProp] = `${parseInt((0, _css.default)(container, paddingProp) || '0', 10) + containerState.scrollBarWidth}px`;
+    }
+    container.setAttribute(OPEN_DATA_ATTRIBUTE, '');
+    (0, _css.default)(container, style);
+  }
+  reset() {
+    [...this.modals].forEach(m => this.remove(m));
+  }
+  removeContainerStyle(containerState) {
+    const container = this.getElement();
+    container.removeAttribute(OPEN_DATA_ATTRIBUTE);
+    Object.assign(container.style, containerState.style);
+  }
+  add(modal) {
+    let modalIdx = this.modals.indexOf(modal);
+    if (modalIdx !== -1) {
+      return modalIdx;
+    }
+    modalIdx = this.modals.length;
+    this.modals.push(modal);
+    this.setModalAttributes(modal);
+    if (modalIdx !== 0) {
+      return modalIdx;
+    }
+    this.state = {
+      scrollBarWidth: this.getScrollbarWidth(),
+      style: {}
+    };
+    if (this.handleContainerOverflow) {
+      this.setContainerStyle(this.state);
+    }
+    return modalIdx;
+  }
+  remove(modal) {
+    const modalIdx = this.modals.indexOf(modal);
+    if (modalIdx === -1) {
+      return;
+    }
+    this.modals.splice(modalIdx, 1);
+
+    // if that was the last modal in a container,
+    // clean up the container
+    if (!this.modals.length && this.handleContainerOverflow) {
+      this.removeContainerStyle(this.state);
+    }
+    this.removeModalAttributes(modal);
+  }
+  isTopModal(modal) {
+    return !!this.modals.length && this.modals[this.modals.length - 1] === modal;
+  }
+}
+var _default = exports.default = ModalManager;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Nav.d.ts b/node_modules/@restart/ui/cjs/Nav.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ac77d4b3bbba3568190f40d6d5249ae95c1dc7e6
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Nav.d.ts
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent, SelectCallback } from './types';
+import { UseNavItemOptions, NavItemProps } from './NavItem';
+export type { UseNavItemOptions, NavItemProps };
+export interface NavProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
+    /**
+     * Key for the currently active NavItem.
+     */
+    activeKey?: EventKey;
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * A callback fired when a NavItem has been selected.
+     */
+    onSelect?: SelectCallback;
+}
+declare const _default: DynamicRefForwardingComponent<"div", NavProps> & {
+    Item: DynamicRefForwardingComponent<React.ForwardRefExoticComponent<import("./Button").ButtonProps & React.RefAttributes<HTMLElement>>, NavItemProps>;
+};
+export default _default;
diff --git a/node_modules/@restart/ui/cjs/Nav.js b/node_modules/@restart/ui/cjs/Nav.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c3825527a2aa2e8711d59828ff6713faa673ac6
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Nav.js
@@ -0,0 +1,120 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _querySelectorAll = _interopRequireDefault(require("dom-helpers/querySelectorAll"));
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _useForceUpdate = _interopRequireDefault(require("@restart/hooks/useForceUpdate"));
+var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
+var _NavContext = _interopRequireDefault(require("./NavContext"));
+var _SelectableContext = _interopRequireWildcard(require("./SelectableContext"));
+var _TabContext = _interopRequireDefault(require("./TabContext"));
+var _DataKey = require("./DataKey");
+var _NavItem = _interopRequireDefault(require("./NavItem"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["as", "onSelect", "activeKey", "role", "onKeyDown"];
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+// eslint-disable-next-line @typescript-eslint/no-empty-function
+const noop = () => {};
+const EVENT_KEY_ATTR = (0, _DataKey.dataAttr)('event-key');
+const Nav = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
+      as: Component = 'div',
+      onSelect,
+      activeKey,
+      role,
+      onKeyDown
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  // A ref and forceUpdate for refocus, b/c we only want to trigger when needed
+  // and don't want to reset the set in the effect
+  const forceUpdate = (0, _useForceUpdate.default)();
+  const needsRefocusRef = (0, _react.useRef)(false);
+  const parentOnSelect = (0, _react.useContext)(_SelectableContext.default);
+  const tabContext = (0, _react.useContext)(_TabContext.default);
+  let getControlledId, getControllerId;
+  if (tabContext) {
+    role = role || 'tablist';
+    activeKey = tabContext.activeKey;
+    // TODO: do we need to duplicate these?
+    getControlledId = tabContext.getControlledId;
+    getControllerId = tabContext.getControllerId;
+  }
+  const listNode = (0, _react.useRef)(null);
+  const getNextActiveTab = offset => {
+    const currentListNode = listNode.current;
+    if (!currentListNode) return null;
+    const items = (0, _querySelectorAll.default)(currentListNode, `[${EVENT_KEY_ATTR}]:not([aria-disabled=true])`);
+    const activeChild = currentListNode.querySelector('[aria-selected=true]');
+    if (!activeChild || activeChild !== document.activeElement) return null;
+    const index = items.indexOf(activeChild);
+    if (index === -1) return null;
+    let nextIndex = index + offset;
+    if (nextIndex >= items.length) nextIndex = 0;
+    if (nextIndex < 0) nextIndex = items.length - 1;
+    return items[nextIndex];
+  };
+  const handleSelect = (key, event) => {
+    if (key == null) return;
+    onSelect == null ? void 0 : onSelect(key, event);
+    parentOnSelect == null ? void 0 : parentOnSelect(key, event);
+  };
+  const handleKeyDown = event => {
+    onKeyDown == null ? void 0 : onKeyDown(event);
+    if (!tabContext) {
+      return;
+    }
+    let nextActiveChild;
+    switch (event.key) {
+      case 'ArrowLeft':
+      case 'ArrowUp':
+        nextActiveChild = getNextActiveTab(-1);
+        break;
+      case 'ArrowRight':
+      case 'ArrowDown':
+        nextActiveChild = getNextActiveTab(1);
+        break;
+      default:
+        return;
+    }
+    if (!nextActiveChild) return;
+    event.preventDefault();
+    handleSelect(nextActiveChild.dataset[(0, _DataKey.dataProp)('EventKey')] || null, event);
+    needsRefocusRef.current = true;
+    forceUpdate();
+  };
+  (0, _react.useEffect)(() => {
+    if (listNode.current && needsRefocusRef.current) {
+      const activeChild = listNode.current.querySelector(`[${EVENT_KEY_ATTR}][aria-selected=true]`);
+      activeChild == null ? void 0 : activeChild.focus();
+    }
+    needsRefocusRef.current = false;
+  });
+  const mergedRef = (0, _useMergedRefs.default)(ref, listNode);
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectableContext.default.Provider, {
+    value: handleSelect,
+    children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_NavContext.default.Provider, {
+      value: {
+        role,
+        // used by NavLink to determine it's role
+        activeKey: (0, _SelectableContext.makeEventKey)(activeKey),
+        getControlledId: getControlledId || noop,
+        getControllerId: getControllerId || noop
+      },
+      children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({}, props, {
+        onKeyDown: handleKeyDown,
+        ref: mergedRef,
+        role: role
+      }))
+    })
+  });
+});
+Nav.displayName = 'Nav';
+var _default = exports.default = Object.assign(Nav, {
+  Item: _NavItem.default
+});
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/NavContext.d.ts b/node_modules/@restart/ui/cjs/NavContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9de823c02b4e3bd2472f1f7e25e4d33677e0e5d
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NavContext.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import { EventKey } from './types';
+interface NavContextType {
+    role?: string;
+    activeKey: EventKey | null;
+    getControlledId: (key: EventKey | null) => string;
+    getControllerId: (key: EventKey | null) => string;
+}
+declare const NavContext: React.Context<NavContextType | null>;
+export default NavContext;
diff --git a/node_modules/@restart/ui/cjs/NavContext.js b/node_modules/@restart/ui/cjs/NavContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..20b435b2bb796ad922098fcb23af63336ed01055
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NavContext.js
@@ -0,0 +1,10 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const NavContext = /*#__PURE__*/React.createContext(null);
+NavContext.displayName = 'NavContext';
+var _default = exports.default = NavContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/NavItem.d.ts b/node_modules/@restart/ui/cjs/NavItem.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a68348cf6e0a4b354c50b07f13e9854fbecacc35
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NavItem.d.ts
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent } from './types';
+import Button from './Button';
+export interface NavItemProps extends React.HTMLAttributes<HTMLElement> {
+    /**
+     * Highlight the NavItem as active.
+     */
+    active?: boolean;
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * Disable the NavItem, making it unselectable.
+     */
+    disabled?: boolean;
+    /**
+     * Value passed to the `onSelect` handler, useful for identifying the selected NavItem.
+     */
+    eventKey?: EventKey;
+    /**
+     * HTML `href` attribute corresponding to `a.href`.
+     */
+    href?: string;
+}
+export interface UseNavItemOptions {
+    key?: string | null;
+    onClick?: React.MouseEventHandler;
+    active?: boolean;
+    disabled?: boolean;
+    id?: string;
+    role?: string;
+}
+export declare function useNavItem({ key, onClick, active, id, role, disabled, }: UseNavItemOptions): readonly [any, {
+    readonly isActive: boolean | undefined;
+}];
+declare const NavItem: DynamicRefForwardingComponent<typeof Button, NavItemProps>;
+export default NavItem;
diff --git a/node_modules/@restart/ui/cjs/NavItem.js b/node_modules/@restart/ui/cjs/NavItem.js
new file mode 100644
index 0000000000000000000000000000000000000000..efe27cb21a4f98121354aaeb099f0b5e370116a1
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NavItem.js
@@ -0,0 +1,99 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.useNavItem = useNavItem;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _NavContext = _interopRequireDefault(require("./NavContext"));
+var _SelectableContext = _interopRequireWildcard(require("./SelectableContext"));
+var _Button = _interopRequireDefault(require("./Button"));
+var _DataKey = require("./DataKey");
+var _TabContext = _interopRequireDefault(require("./TabContext"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["as", "active", "eventKey"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+function useNavItem({
+  key,
+  onClick,
+  active,
+  id,
+  role,
+  disabled
+}) {
+  const parentOnSelect = (0, _react.useContext)(_SelectableContext.default);
+  const navContext = (0, _react.useContext)(_NavContext.default);
+  const tabContext = (0, _react.useContext)(_TabContext.default);
+  let isActive = active;
+  const props = {
+    role
+  };
+  if (navContext) {
+    if (!role && navContext.role === 'tablist') props.role = 'tab';
+    const contextControllerId = navContext.getControllerId(key != null ? key : null);
+    const contextControlledId = navContext.getControlledId(key != null ? key : null);
+
+    // @ts-ignore
+    props[(0, _DataKey.dataAttr)('event-key')] = key;
+    props.id = contextControllerId || id;
+    isActive = active == null && key != null ? navContext.activeKey === key : active;
+
+    /**
+     * Simplified scenario for `mountOnEnter`.
+     *
+     * While it would make sense to keep 'aria-controls' for tabs that have been mounted at least
+     * once, it would also complicate the code quite a bit, for very little gain.
+     * The following implementation is probably good enough.
+     *
+     * @see https://github.com/react-restart/ui/pull/40#issuecomment-1009971561
+     */
+    if (isActive || !(tabContext != null && tabContext.unmountOnExit) && !(tabContext != null && tabContext.mountOnEnter)) props['aria-controls'] = contextControlledId;
+  }
+  if (props.role === 'tab') {
+    props['aria-selected'] = isActive;
+    if (!isActive) {
+      props.tabIndex = -1;
+    }
+    if (disabled) {
+      props.tabIndex = -1;
+      props['aria-disabled'] = true;
+    }
+  }
+  props.onClick = (0, _useEventCallback.default)(e => {
+    if (disabled) return;
+    onClick == null ? void 0 : onClick(e);
+    if (key == null) {
+      return;
+    }
+    if (parentOnSelect && !e.isPropagationStopped()) {
+      parentOnSelect(key, e);
+    }
+  });
+  return [props, {
+    isActive
+  }];
+}
+const NavItem = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      as: Component = _Button.default,
+      active,
+      eventKey
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [props, meta] = useNavItem(Object.assign({
+    key: (0, _SelectableContext.makeEventKey)(eventKey, options.href),
+    active
+  }, options));
+
+  // @ts-ignore
+  props[(0, _DataKey.dataAttr)('active')] = meta.isActive;
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({}, options, props, {
+    ref: ref
+  }));
+});
+NavItem.displayName = 'NavItem';
+var _default = exports.default = NavItem;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/NoopTransition.d.ts b/node_modules/@restart/ui/cjs/NoopTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11414672704e02ea0fe5b3aefdd597c302a3fa80
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NoopTransition.d.ts
@@ -0,0 +1,4 @@
+/// <reference types="react" />
+import { TransitionProps } from './types';
+declare function NoopTransition({ children, in: inProp, onExited, mountOnEnter, unmountOnExit, }: TransitionProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
+export default NoopTransition;
diff --git a/node_modules/@restart/ui/cjs/NoopTransition.js b/node_modules/@restart/ui/cjs/NoopTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a056cb2cee5136b0abd6004b3aa500bf0bbea75
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/NoopTransition.js
@@ -0,0 +1,37 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
+var _react = require("react");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function NoopTransition({
+  children,
+  in: inProp,
+  onExited,
+  mountOnEnter,
+  unmountOnExit
+}) {
+  const ref = (0, _react.useRef)(null);
+  const hasEnteredRef = (0, _react.useRef)(inProp);
+  const handleExited = (0, _useEventCallback.default)(onExited);
+  (0, _react.useEffect)(() => {
+    if (inProp) hasEnteredRef.current = true;else {
+      handleExited(ref.current);
+    }
+  }, [inProp, handleExited]);
+  const combinedRef = (0, _useMergedRefs.default)(ref, children.ref);
+  const child = /*#__PURE__*/(0, _react.cloneElement)(children, {
+    ref: combinedRef
+  });
+  if (inProp) return child;
+  if (unmountOnExit) {
+    return null;
+  }
+  if (!hasEnteredRef.current && mountOnEnter) {
+    return null;
+  }
+  return child;
+}
+var _default = exports.default = NoopTransition;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Overlay.d.ts b/node_modules/@restart/ui/cjs/Overlay.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..efea2e62f04f15881b25d5da9eb225f681ce514e
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Overlay.d.ts
@@ -0,0 +1,99 @@
+import * as React from 'react';
+import { Offset, Placement, UsePopperOptions, UsePopperState, VirtualElement } from './usePopper';
+import { RootCloseOptions } from './useRootClose';
+import { DOMContainer } from './useWaitForDOMRef';
+import { TransitionCallbacks, TransitionComponent } from './types';
+import { TransitionHandler } from './ImperativeTransition';
+export interface OverlayArrowProps extends Record<string, any> {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+}
+export interface OverlayMetadata {
+    show: boolean;
+    placement: Placement | undefined;
+    popper: UsePopperState | null;
+    arrowProps: Partial<OverlayArrowProps>;
+}
+export interface OverlayInjectedProps extends Record<string, any> {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+    'aria-labelledby'?: string;
+}
+export interface OverlayProps extends TransitionCallbacks {
+    /**
+     * Enables the Popper.js `flip` modifier, allowing the Overlay to
+     * automatically adjust it's placement in case of overlap with the viewport or toggle.
+     * Refer to the [flip docs](https://popper.js.org/popper-documentation.html#modifiers..flip.enabled) for more info
+     */
+    flip?: boolean;
+    /** Specify where the overlay element is positioned in relation to the target element */
+    placement?: Placement;
+    /**
+     * Control offset of the overlay to the reference element.
+     * A convenience shortcut to setting `popperConfig.modfiers.offset`
+     */
+    offset?: Offset;
+    /**
+     * Control how much space there is between the edge of the boundary element and overlay.
+     * A convenience shortcut to setting `popperConfig.modfiers.preventOverflow.padding`
+     */
+    containerPadding?: number;
+    /**
+     * A set of popper options and props passed directly to react-popper's Popper component.
+     */
+    popperConfig?: Omit<UsePopperOptions, 'placement'>;
+    /**
+     * A DOM Element, [Virtual Element](https://popper.js.org/docs/v2/virtual-elements/), Ref to an element, or
+     * function that returns either. The `target` element is where the overlay is positioned relative to.
+     */
+    container?: DOMContainer;
+    /**
+     * A DOM Element, Ref to an element, or function that returns either. The `target` element is where
+     * the overlay is positioned relative to.
+     */
+    target: DOMContainer<HTMLElement | VirtualElement>;
+    /**
+     * Set the visibility of the Overlay
+     */
+    show?: boolean;
+    /**
+     * A `react-transition-group` `<Transition/>` component
+     * used to animate the overlay as it changes visibility.
+     */
+    transition?: TransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and overlay element.
+     * Should return a promise when the transition is complete
+     */
+    runTransition?: TransitionHandler;
+    /**
+     * A Callback fired by the Overlay when it wishes to be hidden.
+     *
+     * __required__ when `rootClose` is `true`.
+     *
+     * @type func
+     */
+    onHide?: (e: Event) => void;
+    /**
+     * Specify whether the overlay should trigger `onHide` when the user clicks outside the overlay
+     */
+    rootClose?: boolean;
+    /**
+     * Specify disabled for disable RootCloseWrapper
+     */
+    rootCloseDisabled?: boolean;
+    /**
+     * Specify event for toggling overlay
+     */
+    rootCloseEvent?: RootCloseOptions['clickTrigger'];
+    /**
+     * A render prop that returns an overlay element.
+     */
+    children: (props: OverlayInjectedProps, meta: OverlayMetadata) => React.ReactNode;
+}
+/**
+ * Built on top of `Popper.js`, the overlay component is
+ * great for custom tooltip overlays.
+ */
+declare const Overlay: React.ForwardRefExoticComponent<OverlayProps & React.RefAttributes<HTMLElement>>;
+export default Overlay;
diff --git a/node_modules/@restart/ui/cjs/Overlay.js b/node_modules/@restart/ui/cjs/Overlay.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6337ba053e7a5f9506c99c79d866b8991956f81
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Overlay.js
@@ -0,0 +1,104 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _reactDom = _interopRequireDefault(require("react-dom"));
+var _useCallbackRef = _interopRequireDefault(require("@restart/hooks/useCallbackRef"));
+var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
+var _usePopper = _interopRequireDefault(require("./usePopper"));
+var _useRootClose = _interopRequireDefault(require("./useRootClose"));
+var _useWaitForDOMRef = _interopRequireDefault(require("./useWaitForDOMRef"));
+var _mergeOptionsWithPopperConfig = _interopRequireDefault(require("./mergeOptionsWithPopperConfig"));
+var _ImperativeTransition = require("./ImperativeTransition");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+/**
+ * Built on top of `Popper.js`, the overlay component is
+ * great for custom tooltip overlays.
+ */
+const Overlay = /*#__PURE__*/React.forwardRef((props, outerRef) => {
+  const {
+    flip,
+    offset,
+    placement,
+    containerPadding,
+    popperConfig = {},
+    transition: Transition,
+    runTransition
+  } = props;
+  const [rootElement, attachRef] = (0, _useCallbackRef.default)();
+  const [arrowElement, attachArrowRef] = (0, _useCallbackRef.default)();
+  const mergedRef = (0, _useMergedRefs.default)(attachRef, outerRef);
+  const container = (0, _useWaitForDOMRef.default)(props.container);
+  const target = (0, _useWaitForDOMRef.default)(props.target);
+  const [exited, setExited] = (0, _react.useState)(!props.show);
+  const popper = (0, _usePopper.default)(target, rootElement, (0, _mergeOptionsWithPopperConfig.default)({
+    placement,
+    enableEvents: !!props.show,
+    containerPadding: containerPadding || 5,
+    flip,
+    offset,
+    arrowElement,
+    popperConfig
+  }));
+
+  // TODO: I think this needs to be in an effect
+  if (props.show && exited) {
+    setExited(false);
+  }
+  const handleHidden = (...args) => {
+    setExited(true);
+    if (props.onExited) {
+      props.onExited(...args);
+    }
+  };
+
+  // Don't un-render the overlay while it's transitioning out.
+  const mountOverlay = props.show || !exited;
+  (0, _useRootClose.default)(rootElement, props.onHide, {
+    disabled: !props.rootClose || props.rootCloseDisabled,
+    clickTrigger: props.rootCloseEvent
+  });
+  if (!mountOverlay) {
+    // Don't bother showing anything if we don't have to.
+    return null;
+  }
+  const {
+    onExit,
+    onExiting,
+    onEnter,
+    onEntering,
+    onEntered
+  } = props;
+  let child = props.children(Object.assign({}, popper.attributes.popper, {
+    style: popper.styles.popper,
+    ref: mergedRef
+  }), {
+    popper,
+    placement,
+    show: !!props.show,
+    arrowProps: Object.assign({}, popper.attributes.arrow, {
+      style: popper.styles.arrow,
+      ref: attachArrowRef
+    })
+  });
+  child = (0, _ImperativeTransition.renderTransition)(Transition, runTransition, {
+    in: !!props.show,
+    appear: true,
+    mountOnEnter: true,
+    unmountOnExit: true,
+    children: child,
+    onExit,
+    onExiting,
+    onExited: handleHidden,
+    onEnter,
+    onEntering,
+    onEntered
+  });
+  return container ? /*#__PURE__*/_reactDom.default.createPortal(child, container) : null;
+});
+Overlay.displayName = 'Overlay';
+var _default = exports.default = Overlay;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Portal.d.ts b/node_modules/@restart/ui/cjs/Portal.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6af166a3dc7c78d8f1a562fe32215ede949a221d
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Portal.d.ts
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { DOMContainer } from './useWaitForDOMRef';
+export interface PortalProps {
+    children: React.ReactElement;
+    /**
+     * A DOM element, Ref to an element, or function that returns either. The `container` will have the Portal children
+     * appended to it.
+     */
+    container: DOMContainer;
+    /**
+     * Callback that is triggered when the portal content is rendered.
+     */
+    onRendered?: (element: any) => void;
+}
+/**
+ * @public
+ */
+declare const Portal: {
+    ({ container, children, onRendered }: PortalProps): React.JSX.Element | null;
+    displayName: string;
+};
+export default Portal;
diff --git a/node_modules/@restart/ui/cjs/Portal.js b/node_modules/@restart/ui/cjs/Portal.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f5e9dcf7c04e506ec34c5ba7285b7e29e7468b5
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Portal.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _reactDom = _interopRequireDefault(require("react-dom"));
+var React = _interopRequireWildcard(require("react"));
+var _useWaitForDOMRef = _interopRequireDefault(require("./useWaitForDOMRef"));
+var _jsxRuntime = require("react/jsx-runtime");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/**
+ * @public
+ */
+const Portal = ({
+  container,
+  children,
+  onRendered
+}) => {
+  const resolvedContainer = (0, _useWaitForDOMRef.default)(container, onRendered);
+  return resolvedContainer ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
+    children: /*#__PURE__*/_reactDom.default.createPortal(children, resolvedContainer)
+  }) : null;
+};
+Portal.displayName = 'Portal';
+var _default = exports.default = Portal;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/RTGTransition.d.ts b/node_modules/@restart/ui/cjs/RTGTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d25e35394b39ed3d1c5cc4e6201c0b1985258b7f
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/RTGTransition.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { TransitionProps } from './useRTGTransitionProps';
+export type RTGTransitionProps = TransitionProps & {
+    component: React.ElementType;
+};
+declare const RTGTransition: React.ForwardRefExoticComponent<(Omit<import("react-transition-group/Transition").TimeoutProps<undefined> & {
+    children: React.ReactElement<any, string | React.JSXElementConstructor<any>> | ((status: import("react-transition-group").TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+} & {
+    component: React.ElementType;
+}, "ref"> | Omit<import("react-transition-group/Transition").EndListenerProps<undefined> & {
+    children: React.ReactElement<any, string | React.JSXElementConstructor<any>> | ((status: import("react-transition-group").TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+} & {
+    component: React.ElementType;
+}, "ref">) & React.RefAttributes<any>>;
+export default RTGTransition;
diff --git a/node_modules/@restart/ui/cjs/RTGTransition.js b/node_modules/@restart/ui/cjs/RTGTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..80924b8591aa79791401d257f7f0af0cfb2f22ae
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/RTGTransition.js
@@ -0,0 +1,24 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var React = _interopRequireWildcard(require("react"));
+var _useRTGTransitionProps = _interopRequireDefault(require("./useRTGTransitionProps"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["component"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+// Normalizes Transition callbacks when nodeRef is used.
+const RTGTransition = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      component: Component
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const transitionProps = (0, _useRTGTransitionProps.default)(props);
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({
+    ref: ref
+  }, transitionProps));
+});
+var _default = exports.default = RTGTransition;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/SelectableContext.d.ts b/node_modules/@restart/ui/cjs/SelectableContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9f1c6d19e7a1019b66818e07ecea122ed4379824
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/SelectableContext.d.ts
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import { EventKey, SelectCallback } from './types';
+declare const SelectableContext: React.Context<SelectCallback | null>;
+export declare const makeEventKey: (eventKey?: EventKey | null, href?: string | null) => string | null;
+export default SelectableContext;
diff --git a/node_modules/@restart/ui/cjs/SelectableContext.js b/node_modules/@restart/ui/cjs/SelectableContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..f20353a77ad373c8a7f4e3eb6925e9e579c1d9fe
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/SelectableContext.js
@@ -0,0 +1,14 @@
+"use strict";
+
+exports.__esModule = true;
+exports.makeEventKey = exports.default = void 0;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const SelectableContext = /*#__PURE__*/React.createContext(null);
+const makeEventKey = (eventKey, href = null) => {
+  if (eventKey != null) return String(eventKey);
+  return href || null;
+};
+exports.makeEventKey = makeEventKey;
+var _default = exports.default = SelectableContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/TabContext.d.ts b/node_modules/@restart/ui/cjs/TabContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..359b91b739d2ad5f1844f8b19e5dcb30625c7361
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/TabContext.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { EventKey, SelectCallback, TransitionComponent } from './types';
+export interface TabContextType {
+    onSelect: SelectCallback;
+    activeKey?: EventKey;
+    transition?: TransitionComponent;
+    mountOnEnter: boolean;
+    unmountOnExit: boolean;
+    getControlledId: (key: EventKey) => any;
+    getControllerId: (key: EventKey) => any;
+}
+declare const TabContext: React.Context<TabContextType | null>;
+export default TabContext;
diff --git a/node_modules/@restart/ui/cjs/TabContext.js b/node_modules/@restart/ui/cjs/TabContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd4fd32af8114ea65f1a96375b568b20a073aa21
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/TabContext.js
@@ -0,0 +1,9 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const TabContext = /*#__PURE__*/React.createContext(null);
+var _default = exports.default = TabContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/TabPanel.d.ts b/node_modules/@restart/ui/cjs/TabPanel.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..401fbbc84329b77c992568084f545fccb6bd448a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/TabPanel.d.ts
@@ -0,0 +1,39 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent, TransitionCallbacks, TransitionComponent } from './types';
+export interface TabPanelProps extends TransitionCallbacks, React.HTMLAttributes<HTMLElement> {
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * A key that associates the `TabPanel` with it's controlling `NavLink`.
+     */
+    eventKey?: EventKey;
+    /**
+     * Toggles the active state of the TabPanel, this is generally controlled by `Tabs`.
+     */
+    active?: boolean;
+    /**
+     * Use animation when showing or hiding `<TabPanel>`s. Use a react-transition-group
+     * `<Transition/>` component.
+     */
+    transition?: TransitionComponent;
+    /**
+     * Wait until the first "enter" transition to mount the tab (add it to the DOM)
+     */
+    mountOnEnter?: boolean;
+    /**
+     * Unmount the tab (remove it from the DOM) when it is no longer visible
+     */
+    unmountOnExit?: boolean;
+}
+export interface TabPanelMetadata extends TransitionCallbacks {
+    eventKey?: EventKey;
+    isActive?: boolean;
+    transition?: TransitionComponent;
+    mountOnEnter?: boolean;
+    unmountOnExit?: boolean;
+}
+export declare function useTabPanel({ active, eventKey, mountOnEnter, transition, unmountOnExit, role, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...props }: TabPanelProps): [any, TabPanelMetadata];
+declare const TabPanel: DynamicRefForwardingComponent<'div', TabPanelProps>;
+export default TabPanel;
diff --git a/node_modules/@restart/ui/cjs/TabPanel.js b/node_modules/@restart/ui/cjs/TabPanel.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7e0af3f1f22cf900d37676c3f302ecd11a987db
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/TabPanel.js
@@ -0,0 +1,121 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+exports.useTabPanel = useTabPanel;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _TabContext = _interopRequireDefault(require("./TabContext"));
+var _SelectableContext = _interopRequireWildcard(require("./SelectableContext"));
+var _NoopTransition = _interopRequireDefault(require("./NoopTransition"));
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["active", "eventKey", "mountOnEnter", "transition", "unmountOnExit", "role", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited"],
+  _excluded2 = ["activeKey", "getControlledId", "getControllerId"],
+  _excluded3 = ["as"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+function useTabPanel(_ref) {
+  let {
+      active,
+      eventKey,
+      mountOnEnter,
+      transition,
+      unmountOnExit,
+      role = 'tabpanel',
+      onEnter,
+      onEntering,
+      onEntered,
+      onExit,
+      onExiting,
+      onExited
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const context = (0, _react.useContext)(_TabContext.default);
+  if (!context) return [Object.assign({}, props, {
+    role
+  }), {
+    eventKey,
+    isActive: active,
+    mountOnEnter,
+    transition,
+    unmountOnExit,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited
+  }];
+  const {
+      activeKey,
+      getControlledId,
+      getControllerId
+    } = context,
+    rest = _objectWithoutPropertiesLoose(context, _excluded2);
+  const key = (0, _SelectableContext.makeEventKey)(eventKey);
+  return [Object.assign({}, props, {
+    role,
+    id: getControlledId(eventKey),
+    'aria-labelledby': getControllerId(eventKey)
+  }), {
+    eventKey,
+    isActive: active == null && key != null ? (0, _SelectableContext.makeEventKey)(activeKey) === key : active,
+    transition: transition || rest.transition,
+    mountOnEnter: mountOnEnter != null ? mountOnEnter : rest.mountOnEnter,
+    unmountOnExit: unmountOnExit != null ? unmountOnExit : rest.unmountOnExit,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited
+  }];
+}
+const TabPanel = /*#__PURE__*/React.forwardRef(
+// Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
+(_ref2, ref) => {
+  let {
+      as: Component = 'div'
+    } = _ref2,
+    props = _objectWithoutPropertiesLoose(_ref2, _excluded3);
+  const [tabPanelProps, {
+    isActive,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited,
+    mountOnEnter,
+    unmountOnExit,
+    transition: Transition = _NoopTransition.default
+  }] = useTabPanel(props);
+  // We provide an empty the TabContext so `<Nav>`s in `<TabPanel>`s don't
+  // conflict with the top level one.
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TabContext.default.Provider, {
+    value: null,
+    children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectableContext.default.Provider, {
+      value: null,
+      children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Transition, {
+        in: isActive,
+        onEnter: onEnter,
+        onEntering: onEntering,
+        onEntered: onEntered,
+        onExit: onExit,
+        onExiting: onExiting,
+        onExited: onExited,
+        mountOnEnter: mountOnEnter,
+        unmountOnExit: unmountOnExit,
+        children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, Object.assign({}, tabPanelProps, {
+          ref: ref,
+          hidden: !isActive,
+          "aria-hidden": !isActive
+        }))
+      })
+    })
+  });
+});
+TabPanel.displayName = 'TabPanel';
+var _default = exports.default = TabPanel;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Tabs.d.ts b/node_modules/@restart/ui/cjs/Tabs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..763ccbc4ebe6f604ca305a52bc043e8c3369f75c
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Tabs.d.ts
@@ -0,0 +1,53 @@
+import * as React from 'react';
+import { EventKey, SelectCallback, TransitionComponent } from './types';
+import { TabPanelProps } from './TabPanel';
+export type { TabPanelProps };
+export interface TabsProps extends React.PropsWithChildren<unknown> {
+    id?: string;
+    /**
+     * Sets a default animation strategy for all children `<TabPanel>`s.
+     * Use a react-transition-group `<Transition/>` component.
+     */
+    transition?: TransitionComponent;
+    /**
+     * Wait until the first "enter" transition to mount tabs (add them to the DOM)
+     */
+    mountOnEnter?: boolean;
+    /**
+     * Unmount tabs (remove it from the DOM) when they are no longer visible
+     */
+    unmountOnExit?: boolean;
+    /**
+     * A function that takes an `eventKey` and `type` and returns a unique id for
+     * child tab `<NavItem>`s and `<TabPane>`s. The function _must_ be a pure
+     * function, meaning it should always return the _same_ id for the same set
+     * of inputs. The default value requires that an `id` to be set for the
+     * `<TabContainer>`.
+     *
+     * The `type` argument will either be `"tab"` or `"pane"`.
+     *
+     * @defaultValue (eventKey, type) => `${props.id}-${type}-${eventKey}`
+     */
+    generateChildId?: (eventKey: EventKey, type: 'tab' | 'pane') => string;
+    /**
+     * A callback fired when a tab is selected.
+     *
+     * @controllable activeKey
+     */
+    onSelect?: SelectCallback;
+    /**
+     * The `eventKey` of the currently active tab.
+     *
+     * @controllable onSelect
+     */
+    activeKey?: EventKey;
+    /**
+     * Default value for `eventKey`.
+     */
+    defaultActiveKey?: EventKey;
+}
+declare const Tabs: {
+    (props: TabsProps): React.JSX.Element;
+    Panel: import("./types").DynamicRefForwardingComponent<"div", TabPanelProps>;
+};
+export default Tabs;
diff --git a/node_modules/@restart/ui/cjs/Tabs.js b/node_modules/@restart/ui/cjs/Tabs.js
new file mode 100644
index 0000000000000000000000000000000000000000..e4baf90235739fbcfeb08f7dd82bda7d19d080f9
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Tabs.js
@@ -0,0 +1,49 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = _interopRequireWildcard(require("react"));
+var React = _react;
+var _uncontrollable = require("uncontrollable");
+var _ssr = require("./ssr");
+var _TabContext = _interopRequireDefault(require("./TabContext"));
+var _SelectableContext = _interopRequireDefault(require("./SelectableContext"));
+var _TabPanel = _interopRequireDefault(require("./TabPanel"));
+var _jsxRuntime = require("react/jsx-runtime");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const Tabs = props => {
+  const {
+    id: userId,
+    generateChildId: generateCustomChildId,
+    onSelect: propsOnSelect,
+    activeKey: propsActiveKey,
+    defaultActiveKey,
+    transition,
+    mountOnEnter,
+    unmountOnExit,
+    children
+  } = props;
+  const [activeKey, onSelect] = (0, _uncontrollable.useUncontrolledProp)(propsActiveKey, defaultActiveKey, propsOnSelect);
+  const id = (0, _ssr.useSSRSafeId)(userId);
+  const generateChildId = (0, _react.useMemo)(() => generateCustomChildId || ((key, type) => id ? `${id}-${type}-${key}` : null), [id, generateCustomChildId]);
+  const tabContext = (0, _react.useMemo)(() => ({
+    onSelect,
+    activeKey,
+    transition,
+    mountOnEnter: mountOnEnter || false,
+    unmountOnExit: unmountOnExit || false,
+    getControlledId: key => generateChildId(key, 'tabpane'),
+    getControllerId: key => generateChildId(key, 'tab')
+  }), [onSelect, activeKey, transition, mountOnEnter, unmountOnExit, generateChildId]);
+  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_TabContext.default.Provider, {
+    value: tabContext,
+    children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SelectableContext.default.Provider, {
+      value: onSelect || null,
+      children: children
+    })
+  });
+};
+Tabs.Panel = _TabPanel.default;
+var _default = exports.default = Tabs;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/Waypoint.d.ts b/node_modules/@restart/ui/cjs/Waypoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5b71dec2315d487075da9640f540532b8f0bab10
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Waypoint.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { WaypointOptions, WaypointEvent, Position } from './useWaypoint';
+export { Position };
+export type { WaypointEvent };
+export interface WaypointProps extends WaypointOptions {
+    renderComponent?: (ref: React.RefCallback<any>) => React.ReactElement;
+    /**
+     * The callback fired when a waypoint's position is updated. This generally
+     * fires as a waypoint enters or exits the viewport but will also be called
+     * on mount.
+     */
+    onPositionChange: (details: WaypointEvent, entry: IntersectionObserverEntry) => void;
+}
+/**
+ * A component that tracks when it enters or leaves the viewport. Implemented
+ * using IntersectionObserver, polyfill may be required for older browsers.
+ */
+declare function Waypoint({ renderComponent, onPositionChange, ...options }: WaypointProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
+export default Waypoint;
diff --git a/node_modules/@restart/ui/cjs/Waypoint.js b/node_modules/@restart/ui/cjs/Waypoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..055474c578df47f0b4e7068a3a342f577a447ada
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/Waypoint.js
@@ -0,0 +1,35 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _useCallbackRef = _interopRequireDefault(require("@restart/hooks/useCallbackRef"));
+var React = _interopRequireWildcard(require("react"));
+var _useWaypoint = _interopRequireWildcard(require("./useWaypoint"));
+exports.Position = _useWaypoint.Position;
+var _jsxRuntime = require("react/jsx-runtime");
+const _excluded = ["renderComponent", "onPositionChange"];
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+const defaultRenderComponent = ref => /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
+  ref: ref,
+  style: {
+    fontSize: 0
+  }
+});
+/**
+ * A component that tracks when it enters or leaves the viewport. Implemented
+ * using IntersectionObserver, polyfill may be required for older browsers.
+ */
+function Waypoint(_ref) {
+  let {
+      renderComponent = defaultRenderComponent,
+      onPositionChange
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [element, setElement] = (0, _useCallbackRef.default)();
+  (0, _useWaypoint.default)(element, onPositionChange, options);
+  return renderComponent(setElement);
+}
+var _default = exports.default = Waypoint;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/getScrollbarWidth.d.ts b/node_modules/@restart/ui/cjs/getScrollbarWidth.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b4fb98e4b2d9560f40be30b8995fd6d9667ef39
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/getScrollbarWidth.d.ts
@@ -0,0 +1,4 @@
+/**
+ * Get the width of the vertical window scrollbar if it's visible
+ */
+export default function getBodyScrollbarWidth(ownerDocument?: Document): number;
diff --git a/node_modules/@restart/ui/cjs/getScrollbarWidth.js b/node_modules/@restart/ui/cjs/getScrollbarWidth.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0e445a019333e5ca6a69a409913fd5040037557
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/getScrollbarWidth.js
@@ -0,0 +1,11 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = getBodyScrollbarWidth;
+/**
+ * Get the width of the vertical window scrollbar if it's visible
+ */
+function getBodyScrollbarWidth(ownerDocument = document) {
+  const window = ownerDocument.defaultView;
+  return Math.abs(window.innerWidth - ownerDocument.documentElement.clientWidth);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/index.d.ts b/node_modules/@restart/ui/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbc2ca1a36a7c6129017a059fbe6c0eb28a81c0c
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/index.d.ts
@@ -0,0 +1,21 @@
+import Dropdown from './Dropdown';
+import { useDropdownMenu } from './DropdownMenu';
+import { useDropdownToggle } from './DropdownToggle';
+import { useDropdownItem } from './DropdownItem';
+import Modal from './Modal';
+import Overlay from './Overlay';
+import Portal from './Portal';
+import useRootClose from './useRootClose';
+import Nav from './Nav';
+import NavItem, { useNavItem } from './NavItem';
+import Button from './Button';
+import Tabs from './Tabs';
+import TabPanel from './TabPanel';
+export { Button, Dropdown, useDropdownMenu, useDropdownToggle, useDropdownItem, Nav, NavItem, useNavItem, Modal, Overlay, Portal, useRootClose, Tabs, TabPanel, };
+export type { ButtonProps } from './Button';
+export type { DropdownProps, DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions, DropdownToggleProps, UseDropdownToggleMetadata, DropdownItemProps, } from './Dropdown';
+export type { NavItemProps, UseNavItemOptions, NavProps } from './Nav';
+export type { ModalProps } from './Modal';
+export type { OverlayProps } from './Overlay';
+export type { PortalProps } from './Portal';
+export type { TabsProps, TabPanelProps } from './Tabs';
diff --git a/node_modules/@restart/ui/cjs/index.js b/node_modules/@restart/ui/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..87de0b60805c65ad3571e3c268eee801b1cc8e3f
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/index.js
@@ -0,0 +1,33 @@
+"use strict";
+
+exports.__esModule = true;
+var _Dropdown = _interopRequireDefault(require("./Dropdown"));
+exports.Dropdown = _Dropdown.default;
+var _DropdownMenu = require("./DropdownMenu");
+exports.useDropdownMenu = _DropdownMenu.useDropdownMenu;
+var _DropdownToggle = require("./DropdownToggle");
+exports.useDropdownToggle = _DropdownToggle.useDropdownToggle;
+var _DropdownItem = require("./DropdownItem");
+exports.useDropdownItem = _DropdownItem.useDropdownItem;
+var _Modal = _interopRequireDefault(require("./Modal"));
+exports.Modal = _Modal.default;
+var _Overlay = _interopRequireDefault(require("./Overlay"));
+exports.Overlay = _Overlay.default;
+var _Portal = _interopRequireDefault(require("./Portal"));
+exports.Portal = _Portal.default;
+var _useRootClose = _interopRequireDefault(require("./useRootClose"));
+exports.useRootClose = _useRootClose.default;
+var _Nav = _interopRequireDefault(require("./Nav"));
+exports.Nav = _Nav.default;
+var _NavItem = _interopRequireWildcard(require("./NavItem"));
+exports.NavItem = _NavItem.default;
+exports.useNavItem = _NavItem.useNavItem;
+var _Button = _interopRequireDefault(require("./Button"));
+exports.Button = _Button.default;
+var _Tabs = _interopRequireDefault(require("./Tabs"));
+exports.Tabs = _Tabs.default;
+var _TabPanel = _interopRequireDefault(require("./TabPanel"));
+exports.TabPanel = _TabPanel.default;
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.d.ts b/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4fe342f08a825db2d31c21535bdb4698d39b83e4
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.d.ts
@@ -0,0 +1,16 @@
+import { UsePopperOptions, Offset, Placement, Modifiers } from './usePopper';
+export type Config = {
+    flip?: boolean;
+    fixed?: boolean;
+    alignEnd?: boolean;
+    enabled?: boolean;
+    containerPadding?: number;
+    arrowElement?: Element | null;
+    enableEvents?: boolean;
+    offset?: Offset;
+    placement?: Placement;
+    popperConfig?: UsePopperOptions;
+};
+export declare function toModifierMap(modifiers: Modifiers | undefined): Record<string, Partial<import("./usePopper").Modifier<any, any>>>;
+export declare function toModifierArray(map?: Modifiers | undefined): Partial<import("@popperjs/core").Modifier<any, any>>[];
+export default function mergeOptionsWithPopperConfig({ enabled, enableEvents, placement, flip, offset, fixed, containerPadding, arrowElement, popperConfig, }: Config): UsePopperOptions;
diff --git a/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.js b/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.js
new file mode 100644
index 0000000000000000000000000000000000000000..70b333607c6755dfb059981cd8cad64986168226
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/mergeOptionsWithPopperConfig.js
@@ -0,0 +1,69 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = mergeOptionsWithPopperConfig;
+exports.toModifierArray = toModifierArray;
+exports.toModifierMap = toModifierMap;
+function toModifierMap(modifiers) {
+  const result = {};
+  if (!Array.isArray(modifiers)) {
+    return modifiers || result;
+  }
+
+  // eslint-disable-next-line no-unused-expressions
+  modifiers == null ? void 0 : modifiers.forEach(m => {
+    result[m.name] = m;
+  });
+  return result;
+}
+function toModifierArray(map = {}) {
+  if (Array.isArray(map)) return map;
+  return Object.keys(map).map(k => {
+    map[k].name = k;
+    return map[k];
+  });
+}
+function mergeOptionsWithPopperConfig({
+  enabled,
+  enableEvents,
+  placement,
+  flip,
+  offset,
+  fixed,
+  containerPadding,
+  arrowElement,
+  popperConfig = {}
+}) {
+  var _modifiers$eventListe, _modifiers$preventOve, _modifiers$preventOve2, _modifiers$offset, _modifiers$arrow;
+  const modifiers = toModifierMap(popperConfig.modifiers);
+  return Object.assign({}, popperConfig, {
+    placement,
+    enabled,
+    strategy: fixed ? 'fixed' : popperConfig.strategy,
+    modifiers: toModifierArray(Object.assign({}, modifiers, {
+      eventListeners: {
+        enabled: enableEvents,
+        options: (_modifiers$eventListe = modifiers.eventListeners) == null ? void 0 : _modifiers$eventListe.options
+      },
+      preventOverflow: Object.assign({}, modifiers.preventOverflow, {
+        options: containerPadding ? Object.assign({
+          padding: containerPadding
+        }, (_modifiers$preventOve = modifiers.preventOverflow) == null ? void 0 : _modifiers$preventOve.options) : (_modifiers$preventOve2 = modifiers.preventOverflow) == null ? void 0 : _modifiers$preventOve2.options
+      }),
+      offset: {
+        options: Object.assign({
+          offset
+        }, (_modifiers$offset = modifiers.offset) == null ? void 0 : _modifiers$offset.options)
+      },
+      arrow: Object.assign({}, modifiers.arrow, {
+        enabled: !!arrowElement,
+        options: Object.assign({}, (_modifiers$arrow = modifiers.arrow) == null ? void 0 : _modifiers$arrow.options, {
+          element: arrowElement
+        })
+      }),
+      flip: Object.assign({
+        enabled: !!flip
+      }, modifiers.flip)
+    }))
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/popper.d.ts b/node_modules/@restart/ui/cjs/popper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a22df797e5a6e80f17002596c23acb73ce4f1ac5
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/popper.d.ts
@@ -0,0 +1,3 @@
+import { placements } from '@popperjs/core/lib/enums';
+export declare const createPopper: <TModifier extends Partial<import("@popperjs/core/lib/types").Modifier<any, any>>>(reference: Element | import("@popperjs/core/lib/types").VirtualElement, popper: HTMLElement, options?: Partial<import("@popperjs/core/lib/types").OptionsGeneric<TModifier>> | undefined) => import("@popperjs/core/lib/types").Instance;
+export { placements };
diff --git a/node_modules/@restart/ui/cjs/popper.js b/node_modules/@restart/ui/cjs/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..25d9d31df26885fb9b96b80cf4daee3be8efef8c
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/popper.js
@@ -0,0 +1,1905 @@
+'use strict';
+
+var top = 'top';
+var bottom = 'bottom';
+var right = 'right';
+var left = 'left';
+var auto = 'auto';
+var basePlacements = [top, bottom, right, left];
+var start = 'start';
+var end = 'end';
+var clippingParents = 'clippingParents';
+var viewport = 'viewport';
+var popper = 'popper';
+var reference = 'reference';
+var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {
+  return acc.concat([placement + "-" + start, placement + "-" + end]);
+}, []);
+var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {
+  return acc.concat([placement, placement + "-" + start, placement + "-" + end]);
+}, []); // modifiers that need to read the DOM
+
+var beforeRead = 'beforeRead';
+var read = 'read';
+var afterRead = 'afterRead'; // pure-logic modifiers
+
+var beforeMain = 'beforeMain';
+var main = 'main';
+var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)
+
+var beforeWrite = 'beforeWrite';
+var write = 'write';
+var afterWrite = 'afterWrite';
+var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
+
+function getBasePlacement(placement) {
+  return placement.split('-')[0];
+}
+
+function getWindow(node) {
+  if (node == null) {
+    return window;
+  }
+
+  if (node.toString() !== '[object Window]') {
+    var ownerDocument = node.ownerDocument;
+    return ownerDocument ? ownerDocument.defaultView || window : window;
+  }
+
+  return node;
+}
+
+function isElement(node) {
+  var OwnElement = getWindow(node).Element;
+  return node instanceof OwnElement || node instanceof Element;
+}
+
+function isHTMLElement(node) {
+  var OwnElement = getWindow(node).HTMLElement;
+  return node instanceof OwnElement || node instanceof HTMLElement;
+}
+
+function isShadowRoot(node) {
+  // IE 11 has no ShadowRoot
+  if (typeof ShadowRoot === 'undefined') {
+    return false;
+  }
+
+  var OwnElement = getWindow(node).ShadowRoot;
+  return node instanceof OwnElement || node instanceof ShadowRoot;
+}
+
+var max = Math.max;
+var min = Math.min;
+var round = Math.round;
+
+function getUAString() {
+  var uaData = navigator.userAgentData;
+
+  if (uaData != null && uaData.brands) {
+    return uaData.brands.map(function (item) {
+      return item.brand + "/" + item.version;
+    }).join(' ');
+  }
+
+  return navigator.userAgent;
+}
+
+function isLayoutViewport() {
+  return !/^((?!chrome|android).)*safari/i.test(getUAString());
+}
+
+function getBoundingClientRect(element, includeScale, isFixedStrategy) {
+  if (includeScale === void 0) {
+    includeScale = false;
+  }
+
+  if (isFixedStrategy === void 0) {
+    isFixedStrategy = false;
+  }
+
+  var clientRect = element.getBoundingClientRect();
+  var scaleX = 1;
+  var scaleY = 1;
+
+  if (includeScale && isHTMLElement(element)) {
+    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
+    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
+  }
+
+  var _ref = isElement(element) ? getWindow(element) : window,
+      visualViewport = _ref.visualViewport;
+
+  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
+  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
+  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
+  var width = clientRect.width / scaleX;
+  var height = clientRect.height / scaleY;
+  return {
+    width: width,
+    height: height,
+    top: y,
+    right: x + width,
+    bottom: y + height,
+    left: x,
+    x: x,
+    y: y
+  };
+}
+
+// means it doesn't take into account transforms.
+
+function getLayoutRect(element) {
+  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.
+  // Fixes https://github.com/popperjs/popper-core/issues/1223
+
+  var width = element.offsetWidth;
+  var height = element.offsetHeight;
+
+  if (Math.abs(clientRect.width - width) <= 1) {
+    width = clientRect.width;
+  }
+
+  if (Math.abs(clientRect.height - height) <= 1) {
+    height = clientRect.height;
+  }
+
+  return {
+    x: element.offsetLeft,
+    y: element.offsetTop,
+    width: width,
+    height: height
+  };
+}
+
+function contains(parent, child) {
+  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method
+
+  if (parent.contains(child)) {
+    return true;
+  } // then fallback to custom implementation with Shadow DOM support
+  else if (rootNode && isShadowRoot(rootNode)) {
+      var next = child;
+
+      do {
+        if (next && parent.isSameNode(next)) {
+          return true;
+        } // $FlowFixMe[prop-missing]: need a better way to handle this...
+
+
+        next = next.parentNode || next.host;
+      } while (next);
+    } // Give up, the result is false
+
+
+  return false;
+}
+
+function getNodeName(element) {
+  return element ? (element.nodeName || '').toLowerCase() : null;
+}
+
+function getComputedStyle(element) {
+  return getWindow(element).getComputedStyle(element);
+}
+
+function isTableElement(element) {
+  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;
+}
+
+function getDocumentElement(element) {
+  // $FlowFixMe[incompatible-return]: assume body is always available
+  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]
+  element.document) || window.document).documentElement;
+}
+
+function getParentNode(element) {
+  if (getNodeName(element) === 'html') {
+    return element;
+  }
+
+  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle
+    // $FlowFixMe[incompatible-return]
+    // $FlowFixMe[prop-missing]
+    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node
+    element.parentNode || ( // DOM Element detected
+    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected
+    // $FlowFixMe[incompatible-call]: HTMLElement is a Node
+    getDocumentElement(element) // fallback
+
+  );
+}
+
+function getTrueOffsetParent(element) {
+  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837
+  getComputedStyle(element).position === 'fixed') {
+    return null;
+  }
+
+  return element.offsetParent;
+} // `.offsetParent` reports `null` for fixed elements, while absolute elements
+// return the containing block
+
+
+function getContainingBlock(element) {
+  var isFirefox = /firefox/i.test(getUAString());
+  var isIE = /Trident/i.test(getUAString());
+
+  if (isIE && isHTMLElement(element)) {
+    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport
+    var elementCss = getComputedStyle(element);
+
+    if (elementCss.position === 'fixed') {
+      return null;
+    }
+  }
+
+  var currentNode = getParentNode(element);
+
+  if (isShadowRoot(currentNode)) {
+    currentNode = currentNode.host;
+  }
+
+  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {
+    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that
+    // create a containing block.
+    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
+
+    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {
+      return currentNode;
+    } else {
+      currentNode = currentNode.parentNode;
+    }
+  }
+
+  return null;
+} // Gets the closest ancestor positioned element. Handles some edge cases,
+// such as table ancestors and cross browser bugs.
+
+
+function getOffsetParent(element) {
+  var window = getWindow(element);
+  var offsetParent = getTrueOffsetParent(element);
+
+  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {
+    offsetParent = getTrueOffsetParent(offsetParent);
+  }
+
+  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {
+    return window;
+  }
+
+  return offsetParent || getContainingBlock(element) || window;
+}
+
+function getMainAxisFromPlacement(placement) {
+  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';
+}
+
+function within(min$1, value, max$1) {
+  return max(min$1, min(value, max$1));
+}
+function withinMaxClamp(min, value, max) {
+  var v = within(min, value, max);
+  return v > max ? max : v;
+}
+
+function getFreshSideObject() {
+  return {
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0
+  };
+}
+
+function mergePaddingObject(paddingObject) {
+  return Object.assign({}, getFreshSideObject(), paddingObject);
+}
+
+function expandToHashMap(value, keys) {
+  return keys.reduce(function (hashMap, key) {
+    hashMap[key] = value;
+    return hashMap;
+  }, {});
+}
+
+var toPaddingObject = function toPaddingObject(padding, state) {
+  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : padding;
+  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+};
+
+function arrow(_ref) {
+  var _state$modifiersData$;
+
+  var state = _ref.state,
+      name = _ref.name,
+      options = _ref.options;
+  var arrowElement = state.elements.arrow;
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var basePlacement = getBasePlacement(state.placement);
+  var axis = getMainAxisFromPlacement(basePlacement);
+  var isVertical = [left, right].indexOf(basePlacement) >= 0;
+  var len = isVertical ? 'height' : 'width';
+
+  if (!arrowElement || !popperOffsets) {
+    return;
+  }
+
+  var paddingObject = toPaddingObject(options.padding, state);
+  var arrowRect = getLayoutRect(arrowElement);
+  var minProp = axis === 'y' ? top : left;
+  var maxProp = axis === 'y' ? bottom : right;
+  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];
+  var startDiff = popperOffsets[axis] - state.rects.reference[axis];
+  var arrowOffsetParent = getOffsetParent(arrowElement);
+  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
+  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is
+  // outside of the popper bounds
+
+  var min = paddingObject[minProp];
+  var max = clientSize - arrowRect[len] - paddingObject[maxProp];
+  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
+  var offset = within(min, center, max); // Prevents breaking syntax highlighting...
+
+  var axisProp = axis;
+  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);
+}
+
+function effect$1(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options;
+  var _options$element = options.element,
+      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;
+
+  if (arrowElement == null) {
+    return;
+  } // CSS selector
+
+
+  if (typeof arrowElement === 'string') {
+    arrowElement = state.elements.popper.querySelector(arrowElement);
+
+    if (!arrowElement) {
+      return;
+    }
+  }
+
+  if (process.env.NODE_ENV !== "production") {
+    if (!isHTMLElement(arrowElement)) {
+      console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));
+    }
+  }
+
+  if (!contains(state.elements.popper, arrowElement)) {
+    if (process.env.NODE_ENV !== "production") {
+      console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' '));
+    }
+
+    return;
+  }
+
+  state.elements.arrow = arrowElement;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var arrow$1 = {
+  name: 'arrow',
+  enabled: true,
+  phase: 'main',
+  fn: arrow,
+  effect: effect$1,
+  requires: ['popperOffsets'],
+  requiresIfExists: ['preventOverflow']
+};
+
+function getVariation(placement) {
+  return placement.split('-')[1];
+}
+
+var unsetSides = {
+  top: 'auto',
+  right: 'auto',
+  bottom: 'auto',
+  left: 'auto'
+}; // Round the offsets to the nearest suitable subpixel based on the DPR.
+// Zooming can change the DPR, but it seems to report a value that will
+// cleanly divide the values into the appropriate subpixels.
+
+function roundOffsetsByDPR(_ref) {
+  var x = _ref.x,
+      y = _ref.y;
+  var win = window;
+  var dpr = win.devicePixelRatio || 1;
+  return {
+    x: round(x * dpr) / dpr || 0,
+    y: round(y * dpr) / dpr || 0
+  };
+}
+
+function mapToStyles(_ref2) {
+  var _Object$assign2;
+
+  var popper = _ref2.popper,
+      popperRect = _ref2.popperRect,
+      placement = _ref2.placement,
+      variation = _ref2.variation,
+      offsets = _ref2.offsets,
+      position = _ref2.position,
+      gpuAcceleration = _ref2.gpuAcceleration,
+      adaptive = _ref2.adaptive,
+      roundOffsets = _ref2.roundOffsets,
+      isFixed = _ref2.isFixed;
+  var _offsets$x = offsets.x,
+      x = _offsets$x === void 0 ? 0 : _offsets$x,
+      _offsets$y = offsets.y,
+      y = _offsets$y === void 0 ? 0 : _offsets$y;
+
+  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref3.x;
+  y = _ref3.y;
+  var hasX = offsets.hasOwnProperty('x');
+  var hasY = offsets.hasOwnProperty('y');
+  var sideX = left;
+  var sideY = top;
+  var win = window;
+
+  if (adaptive) {
+    var offsetParent = getOffsetParent(popper);
+    var heightProp = 'clientHeight';
+    var widthProp = 'clientWidth';
+
+    if (offsetParent === getWindow(popper)) {
+      offsetParent = getDocumentElement(popper);
+
+      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {
+        heightProp = 'scrollHeight';
+        widthProp = 'scrollWidth';
+      }
+    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it
+
+
+    offsetParent = offsetParent;
+
+    if (placement === top || (placement === left || placement === right) && variation === end) {
+      sideY = bottom;
+      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]
+      offsetParent[heightProp];
+      y -= offsetY - popperRect.height;
+      y *= gpuAcceleration ? 1 : -1;
+    }
+
+    if (placement === left || (placement === top || placement === bottom) && variation === end) {
+      sideX = right;
+      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]
+      offsetParent[widthProp];
+      x -= offsetX - popperRect.width;
+      x *= gpuAcceleration ? 1 : -1;
+    }
+  }
+
+  var commonStyles = Object.assign({
+    position: position
+  }, adaptive && unsetSides);
+
+  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
+    x: x,
+    y: y
+  }) : {
+    x: x,
+    y: y
+  };
+
+  x = _ref4.x;
+  y = _ref4.y;
+
+  if (gpuAcceleration) {
+    var _Object$assign;
+
+    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign));
+  }
+
+  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2));
+}
+
+function computeStyles(_ref5) {
+  var state = _ref5.state,
+      options = _ref5.options;
+  var _options$gpuAccelerat = options.gpuAcceleration,
+      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,
+      _options$adaptive = options.adaptive,
+      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,
+      _options$roundOffsets = options.roundOffsets,
+      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
+
+  if (process.env.NODE_ENV !== "production") {
+    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';
+
+    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {
+      return transitionProperty.indexOf(property) >= 0;
+    })) {
+      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));
+    }
+  }
+
+  var commonStyles = {
+    placement: getBasePlacement(state.placement),
+    variation: getVariation(state.placement),
+    popper: state.elements.popper,
+    popperRect: state.rects.popper,
+    gpuAcceleration: gpuAcceleration,
+    isFixed: state.options.strategy === 'fixed'
+  };
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.popperOffsets,
+      position: state.options.strategy,
+      adaptive: adaptive,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  if (state.modifiersData.arrow != null) {
+    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
+      offsets: state.modifiersData.arrow,
+      position: 'absolute',
+      adaptive: false,
+      roundOffsets: roundOffsets
+    })));
+  }
+
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-placement': state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var computeStyles$1 = {
+  name: 'computeStyles',
+  enabled: true,
+  phase: 'beforeWrite',
+  fn: computeStyles,
+  data: {}
+};
+
+var passive = {
+  passive: true
+};
+
+function effect(_ref) {
+  var state = _ref.state,
+      instance = _ref.instance,
+      options = _ref.options;
+  var _options$scroll = options.scroll,
+      scroll = _options$scroll === void 0 ? true : _options$scroll,
+      _options$resize = options.resize,
+      resize = _options$resize === void 0 ? true : _options$resize;
+  var window = getWindow(state.elements.popper);
+  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
+
+  if (scroll) {
+    scrollParents.forEach(function (scrollParent) {
+      scrollParent.addEventListener('scroll', instance.update, passive);
+    });
+  }
+
+  if (resize) {
+    window.addEventListener('resize', instance.update, passive);
+  }
+
+  return function () {
+    if (scroll) {
+      scrollParents.forEach(function (scrollParent) {
+        scrollParent.removeEventListener('scroll', instance.update, passive);
+      });
+    }
+
+    if (resize) {
+      window.removeEventListener('resize', instance.update, passive);
+    }
+  };
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var eventListeners = {
+  name: 'eventListeners',
+  enabled: true,
+  phase: 'write',
+  fn: function fn() {},
+  effect: effect,
+  data: {}
+};
+
+var hash$1 = {
+  left: 'right',
+  right: 'left',
+  bottom: 'top',
+  top: 'bottom'
+};
+function getOppositePlacement(placement) {
+  return placement.replace(/left|right|bottom|top/g, function (matched) {
+    return hash$1[matched];
+  });
+}
+
+var hash = {
+  start: 'end',
+  end: 'start'
+};
+function getOppositeVariationPlacement(placement) {
+  return placement.replace(/start|end/g, function (matched) {
+    return hash[matched];
+  });
+}
+
+function getWindowScroll(node) {
+  var win = getWindow(node);
+  var scrollLeft = win.pageXOffset;
+  var scrollTop = win.pageYOffset;
+  return {
+    scrollLeft: scrollLeft,
+    scrollTop: scrollTop
+  };
+}
+
+function getWindowScrollBarX(element) {
+  // If <html> has a CSS width greater than the viewport, then this will be
+  // incorrect for RTL.
+  // Popper 1 is broken in this case and never had a bug report so let's assume
+  // it's not an issue. I don't think anyone ever specifies width on <html>
+  // anyway.
+  // Browsers where the left scrollbar doesn't cause an issue report `0` for
+  // this (e.g. Edge 2019, IE11, Safari)
+  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
+}
+
+function getViewportRect(element, strategy) {
+  var win = getWindow(element);
+  var html = getDocumentElement(element);
+  var visualViewport = win.visualViewport;
+  var width = html.clientWidth;
+  var height = html.clientHeight;
+  var x = 0;
+  var y = 0;
+
+  if (visualViewport) {
+    width = visualViewport.width;
+    height = visualViewport.height;
+    var layoutViewport = isLayoutViewport();
+
+    if (layoutViewport || !layoutViewport && strategy === 'fixed') {
+      x = visualViewport.offsetLeft;
+      y = visualViewport.offsetTop;
+    }
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x + getWindowScrollBarX(element),
+    y: y
+  };
+}
+
+// of the `<html>` and `<body>` rect bounds if horizontally scrollable
+
+function getDocumentRect(element) {
+  var _element$ownerDocumen;
+
+  var html = getDocumentElement(element);
+  var winScroll = getWindowScroll(element);
+  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
+  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
+  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
+  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);
+  var y = -winScroll.scrollTop;
+
+  if (getComputedStyle(body || html).direction === 'rtl') {
+    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;
+  }
+
+  return {
+    width: width,
+    height: height,
+    x: x,
+    y: y
+  };
+}
+
+function isScrollParent(element) {
+  // Firefox wants us to check `-x` and `-y` variations as well
+  var _getComputedStyle = getComputedStyle(element),
+      overflow = _getComputedStyle.overflow,
+      overflowX = _getComputedStyle.overflowX,
+      overflowY = _getComputedStyle.overflowY;
+
+  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
+}
+
+function getScrollParent(node) {
+  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {
+    // $FlowFixMe[incompatible-return]: assume body is always available
+    return node.ownerDocument.body;
+  }
+
+  if (isHTMLElement(node) && isScrollParent(node)) {
+    return node;
+  }
+
+  return getScrollParent(getParentNode(node));
+}
+
+/*
+given a DOM element, return the list of all scroll parents, up the list of ancesors
+until we get to the top window object. This list is what we attach scroll listeners
+to, because if any of these parent elements scroll, we'll need to re-calculate the
+reference element's position.
+*/
+
+function listScrollParents(element, list) {
+  var _element$ownerDocumen;
+
+  if (list === void 0) {
+    list = [];
+  }
+
+  var scrollParent = getScrollParent(element);
+  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
+  var win = getWindow(scrollParent);
+  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
+  var updatedList = list.concat(target);
+  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here
+  updatedList.concat(listScrollParents(getParentNode(target)));
+}
+
+function rectToClientRect(rect) {
+  return Object.assign({}, rect, {
+    left: rect.x,
+    top: rect.y,
+    right: rect.x + rect.width,
+    bottom: rect.y + rect.height
+  });
+}
+
+function getInnerBoundingClientRect(element, strategy) {
+  var rect = getBoundingClientRect(element, false, strategy === 'fixed');
+  rect.top = rect.top + element.clientTop;
+  rect.left = rect.left + element.clientLeft;
+  rect.bottom = rect.top + element.clientHeight;
+  rect.right = rect.left + element.clientWidth;
+  rect.width = element.clientWidth;
+  rect.height = element.clientHeight;
+  rect.x = rect.left;
+  rect.y = rect.top;
+  return rect;
+}
+
+function getClientRectFromMixedType(element, clippingParent, strategy) {
+  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
+} // A "clipping parent" is an overflowable container with the characteristic of
+// clipping (or hiding) overflowing elements with a position different from
+// `initial`
+
+
+function getClippingParents(element) {
+  var clippingParents = listScrollParents(getParentNode(element));
+  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;
+  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
+
+  if (!isElement(clipperElement)) {
+    return [];
+  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414
+
+
+  return clippingParents.filter(function (clippingParent) {
+    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';
+  });
+} // Gets the maximum area that the element is visible in due to any number of
+// clipping parents
+
+
+function getClippingRect(element, boundary, rootBoundary, strategy) {
+  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);
+  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);
+  var firstClippingParent = clippingParents[0];
+  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {
+    var rect = getClientRectFromMixedType(element, clippingParent, strategy);
+    accRect.top = max(rect.top, accRect.top);
+    accRect.right = min(rect.right, accRect.right);
+    accRect.bottom = min(rect.bottom, accRect.bottom);
+    accRect.left = max(rect.left, accRect.left);
+    return accRect;
+  }, getClientRectFromMixedType(element, firstClippingParent, strategy));
+  clippingRect.width = clippingRect.right - clippingRect.left;
+  clippingRect.height = clippingRect.bottom - clippingRect.top;
+  clippingRect.x = clippingRect.left;
+  clippingRect.y = clippingRect.top;
+  return clippingRect;
+}
+
+function computeOffsets(_ref) {
+  var reference = _ref.reference,
+      element = _ref.element,
+      placement = _ref.placement;
+  var basePlacement = placement ? getBasePlacement(placement) : null;
+  var variation = placement ? getVariation(placement) : null;
+  var commonX = reference.x + reference.width / 2 - element.width / 2;
+  var commonY = reference.y + reference.height / 2 - element.height / 2;
+  var offsets;
+
+  switch (basePlacement) {
+    case top:
+      offsets = {
+        x: commonX,
+        y: reference.y - element.height
+      };
+      break;
+
+    case bottom:
+      offsets = {
+        x: commonX,
+        y: reference.y + reference.height
+      };
+      break;
+
+    case right:
+      offsets = {
+        x: reference.x + reference.width,
+        y: commonY
+      };
+      break;
+
+    case left:
+      offsets = {
+        x: reference.x - element.width,
+        y: commonY
+      };
+      break;
+
+    default:
+      offsets = {
+        x: reference.x,
+        y: reference.y
+      };
+  }
+
+  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
+
+  if (mainAxis != null) {
+    var len = mainAxis === 'y' ? 'height' : 'width';
+
+    switch (variation) {
+      case start:
+        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);
+        break;
+
+      case end:
+        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);
+        break;
+    }
+  }
+
+  return offsets;
+}
+
+function detectOverflow(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      _options$placement = _options.placement,
+      placement = _options$placement === void 0 ? state.placement : _options$placement,
+      _options$strategy = _options.strategy,
+      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,
+      _options$boundary = _options.boundary,
+      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,
+      _options$rootBoundary = _options.rootBoundary,
+      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,
+      _options$elementConte = _options.elementContext,
+      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,
+      _options$altBoundary = _options.altBoundary,
+      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,
+      _options$padding = _options.padding,
+      padding = _options$padding === void 0 ? 0 : _options$padding;
+  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));
+  var altContext = elementContext === popper ? reference : popper;
+  var popperRect = state.rects.popper;
+  var element = state.elements[altBoundary ? altContext : elementContext];
+  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
+  var referenceClientRect = getBoundingClientRect(state.elements.reference);
+  var popperOffsets = computeOffsets({
+    reference: referenceClientRect,
+    element: popperRect,
+    strategy: 'absolute',
+    placement: placement
+  });
+  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));
+  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect
+  // 0 or negative = within the clipping rect
+
+  var overflowOffsets = {
+    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
+    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
+    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
+    right: elementClientRect.right - clippingClientRect.right + paddingObject.right
+  };
+  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element
+
+  if (elementContext === popper && offsetData) {
+    var offset = offsetData[placement];
+    Object.keys(overflowOffsets).forEach(function (key) {
+      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
+      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';
+      overflowOffsets[key] += offset[axis] * multiply;
+    });
+  }
+
+  return overflowOffsets;
+}
+
+function computeAutoPlacement(state, options) {
+  if (options === void 0) {
+    options = {};
+  }
+
+  var _options = options,
+      placement = _options.placement,
+      boundary = _options.boundary,
+      rootBoundary = _options.rootBoundary,
+      padding = _options.padding,
+      flipVariations = _options.flipVariations,
+      _options$allowedAutoP = _options.allowedAutoPlacements,
+      allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
+  var variation = getVariation(placement);
+  var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {
+    return getVariation(placement) === variation;
+  }) : basePlacements;
+  var allowedPlacements = placements$1.filter(function (placement) {
+    return allowedAutoPlacements.indexOf(placement) >= 0;
+  });
+
+  if (allowedPlacements.length === 0) {
+    allowedPlacements = placements$1;
+
+    if (process.env.NODE_ENV !== "production") {
+      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' '));
+    }
+  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...
+
+
+  var overflows = allowedPlacements.reduce(function (acc, placement) {
+    acc[placement] = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding
+    })[getBasePlacement(placement)];
+    return acc;
+  }, {});
+  return Object.keys(overflows).sort(function (a, b) {
+    return overflows[a] - overflows[b];
+  });
+}
+
+function getExpandedFallbackPlacements(placement) {
+  if (getBasePlacement(placement) === auto) {
+    return [];
+  }
+
+  var oppositePlacement = getOppositePlacement(placement);
+  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
+}
+
+function flip(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+
+  if (state.modifiersData[name]._skip) {
+    return;
+  }
+
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,
+      specifiedFallbackPlacements = options.fallbackPlacements,
+      padding = options.padding,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      _options$flipVariatio = options.flipVariations,
+      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,
+      allowedAutoPlacements = options.allowedAutoPlacements;
+  var preferredPlacement = state.options.placement;
+  var basePlacement = getBasePlacement(preferredPlacement);
+  var isBasePlacement = basePlacement === preferredPlacement;
+  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
+  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {
+    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      padding: padding,
+      flipVariations: flipVariations,
+      allowedAutoPlacements: allowedAutoPlacements
+    }) : placement);
+  }, []);
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var checksMap = new Map();
+  var makeFallbackChecks = true;
+  var firstFittingPlacement = placements[0];
+
+  for (var i = 0; i < placements.length; i++) {
+    var placement = placements[i];
+
+    var _basePlacement = getBasePlacement(placement);
+
+    var isStartVariation = getVariation(placement) === start;
+    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
+    var len = isVertical ? 'width' : 'height';
+    var overflow = detectOverflow(state, {
+      placement: placement,
+      boundary: boundary,
+      rootBoundary: rootBoundary,
+      altBoundary: altBoundary,
+      padding: padding
+    });
+    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
+
+    if (referenceRect[len] > popperRect[len]) {
+      mainVariationSide = getOppositePlacement(mainVariationSide);
+    }
+
+    var altVariationSide = getOppositePlacement(mainVariationSide);
+    var checks = [];
+
+    if (checkMainAxis) {
+      checks.push(overflow[_basePlacement] <= 0);
+    }
+
+    if (checkAltAxis) {
+      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
+    }
+
+    if (checks.every(function (check) {
+      return check;
+    })) {
+      firstFittingPlacement = placement;
+      makeFallbackChecks = false;
+      break;
+    }
+
+    checksMap.set(placement, checks);
+  }
+
+  if (makeFallbackChecks) {
+    // `2` may be desired in some cases – research later
+    var numberOfChecks = flipVariations ? 3 : 1;
+
+    var _loop = function _loop(_i) {
+      var fittingPlacement = placements.find(function (placement) {
+        var checks = checksMap.get(placement);
+
+        if (checks) {
+          return checks.slice(0, _i).every(function (check) {
+            return check;
+          });
+        }
+      });
+
+      if (fittingPlacement) {
+        firstFittingPlacement = fittingPlacement;
+        return "break";
+      }
+    };
+
+    for (var _i = numberOfChecks; _i > 0; _i--) {
+      var _ret = _loop(_i);
+
+      if (_ret === "break") break;
+    }
+  }
+
+  if (state.placement !== firstFittingPlacement) {
+    state.modifiersData[name]._skip = true;
+    state.placement = firstFittingPlacement;
+    state.reset = true;
+  }
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var flip$1 = {
+  name: 'flip',
+  enabled: true,
+  phase: 'main',
+  fn: flip,
+  requiresIfExists: ['offset'],
+  data: {
+    _skip: false
+  }
+};
+
+function getSideOffsets(overflow, rect, preventedOffsets) {
+  if (preventedOffsets === void 0) {
+    preventedOffsets = {
+      x: 0,
+      y: 0
+    };
+  }
+
+  return {
+    top: overflow.top - rect.height - preventedOffsets.y,
+    right: overflow.right - rect.width + preventedOffsets.x,
+    bottom: overflow.bottom - rect.height + preventedOffsets.y,
+    left: overflow.left - rect.width - preventedOffsets.x
+  };
+}
+
+function isAnySideFullyClipped(overflow) {
+  return [top, right, bottom, left].some(function (side) {
+    return overflow[side] >= 0;
+  });
+}
+
+function hide(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var preventedOffsets = state.modifiersData.preventOverflow;
+  var referenceOverflow = detectOverflow(state, {
+    elementContext: 'reference'
+  });
+  var popperAltOverflow = detectOverflow(state, {
+    altBoundary: true
+  });
+  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
+  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
+  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
+  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
+  state.modifiersData[name] = {
+    referenceClippingOffsets: referenceClippingOffsets,
+    popperEscapeOffsets: popperEscapeOffsets,
+    isReferenceHidden: isReferenceHidden,
+    hasPopperEscaped: hasPopperEscaped
+  };
+  state.attributes.popper = Object.assign({}, state.attributes.popper, {
+    'data-popper-reference-hidden': isReferenceHidden,
+    'data-popper-escaped': hasPopperEscaped
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var hide$1 = {
+  name: 'hide',
+  enabled: true,
+  phase: 'main',
+  requiresIfExists: ['preventOverflow'],
+  fn: hide
+};
+
+function distanceAndSkiddingToXY(placement, rects, offset) {
+  var basePlacement = getBasePlacement(placement);
+  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
+
+  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {
+    placement: placement
+  })) : offset,
+      skidding = _ref[0],
+      distance = _ref[1];
+
+  skidding = skidding || 0;
+  distance = (distance || 0) * invertDistance;
+  return [left, right].indexOf(basePlacement) >= 0 ? {
+    x: distance,
+    y: skidding
+  } : {
+    x: skidding,
+    y: distance
+  };
+}
+
+function offset(_ref2) {
+  var state = _ref2.state,
+      options = _ref2.options,
+      name = _ref2.name;
+  var _options$offset = options.offset,
+      offset = _options$offset === void 0 ? [0, 0] : _options$offset;
+  var data = placements.reduce(function (acc, placement) {
+    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);
+    return acc;
+  }, {});
+  var _data$state$placement = data[state.placement],
+      x = _data$state$placement.x,
+      y = _data$state$placement.y;
+
+  if (state.modifiersData.popperOffsets != null) {
+    state.modifiersData.popperOffsets.x += x;
+    state.modifiersData.popperOffsets.y += y;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var offset$1 = {
+  name: 'offset',
+  enabled: true,
+  phase: 'main',
+  requires: ['popperOffsets'],
+  fn: offset
+};
+
+function popperOffsets(_ref) {
+  var state = _ref.state,
+      name = _ref.name;
+  // Offsets are the actual position the popper needs to have to be
+  // properly positioned near its reference element
+  // This is the most basic placement, and will be adjusted by
+  // the modifiers in the next step
+  state.modifiersData[name] = computeOffsets({
+    reference: state.rects.reference,
+    element: state.rects.popper,
+    strategy: 'absolute',
+    placement: state.placement
+  });
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var popperOffsets$1 = {
+  name: 'popperOffsets',
+  enabled: true,
+  phase: 'read',
+  fn: popperOffsets,
+  data: {}
+};
+
+function getAltAxis(axis) {
+  return axis === 'x' ? 'y' : 'x';
+}
+
+function preventOverflow(_ref) {
+  var state = _ref.state,
+      options = _ref.options,
+      name = _ref.name;
+  var _options$mainAxis = options.mainAxis,
+      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,
+      _options$altAxis = options.altAxis,
+      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,
+      boundary = options.boundary,
+      rootBoundary = options.rootBoundary,
+      altBoundary = options.altBoundary,
+      padding = options.padding,
+      _options$tether = options.tether,
+      tether = _options$tether === void 0 ? true : _options$tether,
+      _options$tetherOffset = options.tetherOffset,
+      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
+  var overflow = detectOverflow(state, {
+    boundary: boundary,
+    rootBoundary: rootBoundary,
+    padding: padding,
+    altBoundary: altBoundary
+  });
+  var basePlacement = getBasePlacement(state.placement);
+  var variation = getVariation(state.placement);
+  var isBasePlacement = !variation;
+  var mainAxis = getMainAxisFromPlacement(basePlacement);
+  var altAxis = getAltAxis(mainAxis);
+  var popperOffsets = state.modifiersData.popperOffsets;
+  var referenceRect = state.rects.reference;
+  var popperRect = state.rects.popper;
+  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {
+    placement: state.placement
+  })) : tetherOffset;
+  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {
+    mainAxis: tetherOffsetValue,
+    altAxis: tetherOffsetValue
+  } : Object.assign({
+    mainAxis: 0,
+    altAxis: 0
+  }, tetherOffsetValue);
+  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
+  var data = {
+    x: 0,
+    y: 0
+  };
+
+  if (!popperOffsets) {
+    return;
+  }
+
+  if (checkMainAxis) {
+    var _offsetModifierState$;
+
+    var mainSide = mainAxis === 'y' ? top : left;
+    var altSide = mainAxis === 'y' ? bottom : right;
+    var len = mainAxis === 'y' ? 'height' : 'width';
+    var offset = popperOffsets[mainAxis];
+    var min$1 = offset + overflow[mainSide];
+    var max$1 = offset - overflow[altSide];
+    var additive = tether ? -popperRect[len] / 2 : 0;
+    var minLen = variation === start ? referenceRect[len] : popperRect[len];
+    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go
+    // outside the reference bounds
+
+    var arrowElement = state.elements.arrow;
+    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
+      width: 0,
+      height: 0
+    };
+    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();
+    var arrowPaddingMin = arrowPaddingObject[mainSide];
+    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want
+    // to include its full size in the calculation. If the reference is small
+    // and near the edge of a boundary, the popper can overflow even if the
+    // reference is not overflowing as well (e.g. virtual elements with no
+    // width or height)
+
+    var arrowLen = within(0, referenceRect[len], arrowRect[len]);
+    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
+    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
+    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
+    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
+    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
+    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;
+    var tetherMax = offset + maxOffset - offsetModifierValue;
+    var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1);
+    popperOffsets[mainAxis] = preventedOffset;
+    data[mainAxis] = preventedOffset - offset;
+  }
+
+  if (checkAltAxis) {
+    var _offsetModifierState$2;
+
+    var _mainSide = mainAxis === 'x' ? top : left;
+
+    var _altSide = mainAxis === 'x' ? bottom : right;
+
+    var _offset = popperOffsets[altAxis];
+
+    var _len = altAxis === 'y' ? 'height' : 'width';
+
+    var _min = _offset + overflow[_mainSide];
+
+    var _max = _offset - overflow[_altSide];
+
+    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
+
+    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
+
+    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
+
+    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
+
+    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
+
+    popperOffsets[altAxis] = _preventedOffset;
+    data[altAxis] = _preventedOffset - _offset;
+  }
+
+  state.modifiersData[name] = data;
+} // eslint-disable-next-line import/no-unused-modules
+
+
+var preventOverflow$1 = {
+  name: 'preventOverflow',
+  enabled: true,
+  phase: 'main',
+  fn: preventOverflow,
+  requiresIfExists: ['offset']
+};
+
+function getHTMLElementScroll(element) {
+  return {
+    scrollLeft: element.scrollLeft,
+    scrollTop: element.scrollTop
+  };
+}
+
+function getNodeScroll(node) {
+  if (node === getWindow(node) || !isHTMLElement(node)) {
+    return getWindowScroll(node);
+  } else {
+    return getHTMLElementScroll(node);
+  }
+}
+
+function isElementScaled(element) {
+  var rect = element.getBoundingClientRect();
+  var scaleX = round(rect.width) / element.offsetWidth || 1;
+  var scaleY = round(rect.height) / element.offsetHeight || 1;
+  return scaleX !== 1 || scaleY !== 1;
+} // Returns the composite rect of an element relative to its offsetParent.
+// Composite means it takes into account transforms as well as layout.
+
+
+function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
+  if (isFixed === void 0) {
+    isFixed = false;
+  }
+
+  var isOffsetParentAnElement = isHTMLElement(offsetParent);
+  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
+  var documentElement = getDocumentElement(offsetParent);
+  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
+  var scroll = {
+    scrollLeft: 0,
+    scrollTop: 0
+  };
+  var offsets = {
+    x: 0,
+    y: 0
+  };
+
+  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
+    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078
+    isScrollParent(documentElement)) {
+      scroll = getNodeScroll(offsetParent);
+    }
+
+    if (isHTMLElement(offsetParent)) {
+      offsets = getBoundingClientRect(offsetParent, true);
+      offsets.x += offsetParent.clientLeft;
+      offsets.y += offsetParent.clientTop;
+    } else if (documentElement) {
+      offsets.x = getWindowScrollBarX(documentElement);
+    }
+  }
+
+  return {
+    x: rect.left + scroll.scrollLeft - offsets.x,
+    y: rect.top + scroll.scrollTop - offsets.y,
+    width: rect.width,
+    height: rect.height
+  };
+}
+
+function order(modifiers) {
+  var map = new Map();
+  var visited = new Set();
+  var result = [];
+  modifiers.forEach(function (modifier) {
+    map.set(modifier.name, modifier);
+  }); // On visiting object, check for its dependencies and visit them recursively
+
+  function sort(modifier) {
+    visited.add(modifier.name);
+    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
+    requires.forEach(function (dep) {
+      if (!visited.has(dep)) {
+        var depModifier = map.get(dep);
+
+        if (depModifier) {
+          sort(depModifier);
+        }
+      }
+    });
+    result.push(modifier);
+  }
+
+  modifiers.forEach(function (modifier) {
+    if (!visited.has(modifier.name)) {
+      // check for visited object
+      sort(modifier);
+    }
+  });
+  return result;
+}
+
+function orderModifiers(modifiers) {
+  // order based on dependencies
+  var orderedModifiers = order(modifiers); // order based on phase
+
+  return modifierPhases.reduce(function (acc, phase) {
+    return acc.concat(orderedModifiers.filter(function (modifier) {
+      return modifier.phase === phase;
+    }));
+  }, []);
+}
+
+function debounce(fn) {
+  var pending;
+  return function () {
+    if (!pending) {
+      pending = new Promise(function (resolve) {
+        Promise.resolve().then(function () {
+          pending = undefined;
+          resolve(fn());
+        });
+      });
+    }
+
+    return pending;
+  };
+}
+
+function format(str) {
+  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+    args[_key - 1] = arguments[_key];
+  }
+
+  return [].concat(args).reduce(function (p, c) {
+    return p.replace(/%s/, c);
+  }, str);
+}
+
+var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
+var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
+var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];
+function validateModifiers(modifiers) {
+  modifiers.forEach(function (modifier) {
+    [].concat(Object.keys(modifier), VALID_PROPERTIES) // IE11-compatible replacement for `new Set(iterable)`
+    .filter(function (value, index, self) {
+      return self.indexOf(value) === index;
+    }).forEach(function (key) {
+      switch (key) {
+        case 'name':
+          if (typeof modifier.name !== 'string') {
+            console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\""));
+          }
+
+          break;
+
+        case 'enabled':
+          if (typeof modifier.enabled !== 'boolean') {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\""));
+          }
+
+          break;
+
+        case 'phase':
+          if (modifierPhases.indexOf(modifier.phase) < 0) {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\""));
+          }
+
+          break;
+
+        case 'fn':
+          if (typeof modifier.fn !== 'function') {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\""));
+          }
+
+          break;
+
+        case 'effect':
+          if (modifier.effect != null && typeof modifier.effect !== 'function') {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\""));
+          }
+
+          break;
+
+        case 'requires':
+          if (modifier.requires != null && !Array.isArray(modifier.requires)) {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\""));
+          }
+
+          break;
+
+        case 'requiresIfExists':
+          if (!Array.isArray(modifier.requiresIfExists)) {
+            console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\""));
+          }
+
+          break;
+
+        case 'options':
+        case 'data':
+          break;
+
+        default:
+          console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) {
+            return "\"" + s + "\"";
+          }).join(', ') + "; but \"" + key + "\" was provided.");
+      }
+
+      modifier.requires && modifier.requires.forEach(function (requirement) {
+        if (modifiers.find(function (mod) {
+          return mod.name === requirement;
+        }) == null) {
+          console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
+        }
+      });
+    });
+  });
+}
+
+function uniqueBy(arr, fn) {
+  var identifiers = new Set();
+  return arr.filter(function (item) {
+    var identifier = fn(item);
+
+    if (!identifiers.has(identifier)) {
+      identifiers.add(identifier);
+      return true;
+    }
+  });
+}
+
+function mergeByName(modifiers) {
+  var merged = modifiers.reduce(function (merged, current) {
+    var existing = merged[current.name];
+    merged[current.name] = existing ? Object.assign({}, existing, current, {
+      options: Object.assign({}, existing.options, current.options),
+      data: Object.assign({}, existing.data, current.data)
+    }) : current;
+    return merged;
+  }, {}); // IE11 does not support Object.values
+
+  return Object.keys(merged).map(function (key) {
+    return merged[key];
+  });
+}
+
+var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';
+var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';
+var DEFAULT_OPTIONS = {
+  placement: 'bottom',
+  modifiers: [],
+  strategy: 'absolute'
+};
+
+function areValidElements() {
+  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+    args[_key] = arguments[_key];
+  }
+
+  return !args.some(function (element) {
+    return !(element && typeof element.getBoundingClientRect === 'function');
+  });
+}
+
+function popperGenerator(generatorOptions) {
+  if (generatorOptions === void 0) {
+    generatorOptions = {};
+  }
+
+  var _generatorOptions = generatorOptions,
+      _generatorOptions$def = _generatorOptions.defaultModifiers,
+      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,
+      _generatorOptions$def2 = _generatorOptions.defaultOptions,
+      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+  return function createPopper(reference, popper, options) {
+    if (options === void 0) {
+      options = defaultOptions;
+    }
+
+    var state = {
+      placement: 'bottom',
+      orderedModifiers: [],
+      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
+      modifiersData: {},
+      elements: {
+        reference: reference,
+        popper: popper
+      },
+      attributes: {},
+      styles: {}
+    };
+    var effectCleanupFns = [];
+    var isDestroyed = false;
+    var instance = {
+      state: state,
+      setOptions: function setOptions(setOptionsAction) {
+        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;
+        cleanupModifierEffects();
+        state.options = Object.assign({}, defaultOptions, state.options, options);
+        state.scrollParents = {
+          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],
+          popper: listScrollParents(popper)
+        }; // Orders the modifiers based on their dependencies and `phase`
+        // properties
+
+        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers
+
+        state.orderedModifiers = orderedModifiers.filter(function (m) {
+          return m.enabled;
+        }); // Validate the provided modifiers so that the consumer will get warned
+        // if one of the modifiers is invalid for any reason
+
+        if (process.env.NODE_ENV !== "production") {
+          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {
+            var name = _ref.name;
+            return name;
+          });
+          validateModifiers(modifiers);
+
+          if (getBasePlacement(state.options.placement) === auto) {
+            var flipModifier = state.orderedModifiers.find(function (_ref2) {
+              var name = _ref2.name;
+              return name === 'flip';
+            });
+
+            if (!flipModifier) {
+              console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' '));
+            }
+          }
+
+          var _getComputedStyle = getComputedStyle(popper),
+              marginTop = _getComputedStyle.marginTop,
+              marginRight = _getComputedStyle.marginRight,
+              marginBottom = _getComputedStyle.marginBottom,
+              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can
+          // cause bugs with positioning, so we'll warn the consumer
+
+
+          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {
+            return parseFloat(margin);
+          })) {
+            console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));
+          }
+        }
+
+        runModifierEffects();
+        return instance.update();
+      },
+      // Sync update – it will always be executed, even if not necessary. This
+      // is useful for low frequency updates where sync behavior simplifies the
+      // logic.
+      // For high frequency updates (e.g. `resize` and `scroll` events), always
+      // prefer the async Popper#update method
+      forceUpdate: function forceUpdate() {
+        if (isDestroyed) {
+          return;
+        }
+
+        var _state$elements = state.elements,
+            reference = _state$elements.reference,
+            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements
+        // anymore
+
+        if (!areValidElements(reference, popper)) {
+          if (process.env.NODE_ENV !== "production") {
+            console.error(INVALID_ELEMENT_ERROR);
+          }
+
+          return;
+        } // Store the reference and popper rects to be read by modifiers
+
+
+        state.rects = {
+          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),
+          popper: getLayoutRect(popper)
+        }; // Modifiers have the ability to reset the current update cycle. The
+        // most common use case for this is the `flip` modifier changing the
+        // placement, which then needs to re-run all the modifiers, because the
+        // logic was previously ran for the previous placement and is therefore
+        // stale/incorrect
+
+        state.reset = false;
+        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier
+        // is filled with the initial data specified by the modifier. This means
+        // it doesn't persist and is fresh on each update.
+        // To ensure persistent data, use `${name}#persistent`
+
+        state.orderedModifiers.forEach(function (modifier) {
+          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
+        });
+        var __debug_loops__ = 0;
+
+        for (var index = 0; index < state.orderedModifiers.length; index++) {
+          if (process.env.NODE_ENV !== "production") {
+            __debug_loops__ += 1;
+
+            if (__debug_loops__ > 100) {
+              console.error(INFINITE_LOOP_ERROR);
+              break;
+            }
+          }
+
+          if (state.reset === true) {
+            state.reset = false;
+            index = -1;
+            continue;
+          }
+
+          var _state$orderedModifie = state.orderedModifiers[index],
+              fn = _state$orderedModifie.fn,
+              _state$orderedModifie2 = _state$orderedModifie.options,
+              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,
+              name = _state$orderedModifie.name;
+
+          if (typeof fn === 'function') {
+            state = fn({
+              state: state,
+              options: _options,
+              name: name,
+              instance: instance
+            }) || state;
+          }
+        }
+      },
+      // Async and optimistically optimized update – it will not be executed if
+      // not necessary (debounced to run at most once-per-tick)
+      update: debounce(function () {
+        return new Promise(function (resolve) {
+          instance.forceUpdate();
+          resolve(state);
+        });
+      }),
+      destroy: function destroy() {
+        cleanupModifierEffects();
+        isDestroyed = true;
+      }
+    };
+
+    if (!areValidElements(reference, popper)) {
+      if (process.env.NODE_ENV !== "production") {
+        console.error(INVALID_ELEMENT_ERROR);
+      }
+
+      return instance;
+    }
+
+    instance.setOptions(options).then(function (state) {
+      if (!isDestroyed && options.onFirstUpdate) {
+        options.onFirstUpdate(state);
+      }
+    }); // Modifiers have the ability to execute arbitrary code before the first
+    // update cycle runs. They will be executed in the same order as the update
+    // cycle. This is useful when a modifier adds some persistent data that
+    // other modifiers need to use, but the modifier is run after the dependent
+    // one.
+
+    function runModifierEffects() {
+      state.orderedModifiers.forEach(function (_ref3) {
+        var name = _ref3.name,
+            _ref3$options = _ref3.options,
+            options = _ref3$options === void 0 ? {} : _ref3$options,
+            effect = _ref3.effect;
+
+        if (typeof effect === 'function') {
+          var cleanupFn = effect({
+            state: state,
+            name: name,
+            instance: instance,
+            options: options
+          });
+
+          var noopFn = function noopFn() {};
+
+          effectCleanupFns.push(cleanupFn || noopFn);
+        }
+      });
+    }
+
+    function cleanupModifierEffects() {
+      effectCleanupFns.forEach(function (fn) {
+        return fn();
+      });
+      effectCleanupFns = [];
+    }
+
+    return instance;
+  };
+}
+
+// For the common JS build we will turn this file into a bundle with no imports.
+// This is b/c the Popper lib is all esm files, and would break in a common js only environment
+const createPopper = popperGenerator({
+  defaultModifiers: [
+    hide$1,
+    popperOffsets$1,
+    computeStyles$1,
+    eventListeners,
+    offset$1,
+    flip$1,
+    preventOverflow$1,
+    arrow$1,
+  ],
+});
+
+exports.createPopper = createPopper;
+exports.placements = placements;
diff --git a/node_modules/@restart/ui/cjs/ssr.d.ts b/node_modules/@restart/ui/cjs/ssr.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf20cc2ced82ca37dfd55d41d7393ffbc7ba56ba
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ssr.d.ts
@@ -0,0 +1,3 @@
+import { useSSRSafeId, useIsSSR, SSRProvider, SSRProviderProps } from '@react-aria/ssr';
+export type { SSRProviderProps };
+export { useSSRSafeId, useIsSSR, SSRProvider };
diff --git a/node_modules/@restart/ui/cjs/ssr.js b/node_modules/@restart/ui/cjs/ssr.js
new file mode 100644
index 0000000000000000000000000000000000000000..faf2aa83a8b62479cc7caf371c9131599da7e6e5
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/ssr.js
@@ -0,0 +1,7 @@
+"use strict";
+
+exports.__esModule = true;
+var _ssr = require("@react-aria/ssr");
+exports.useSSRSafeId = _ssr.useSSRSafeId;
+exports.useIsSSR = _ssr.useIsSSR;
+exports.SSRProvider = _ssr.SSRProvider;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/types.d.ts b/node_modules/@restart/ui/cjs/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e5f7758c6892e9664c85d5e3ea03f04fa32f67a4
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/types.d.ts
@@ -0,0 +1,70 @@
+import * as React from 'react';
+export type EventKey = string | number;
+export type IntrinsicElementTypes = keyof JSX.IntrinsicElements;
+export type AssignPropsWithRef<Inner extends string | React.ComponentType<any>, P> = Omit<React.ComponentPropsWithRef<Inner extends React.ElementType ? Inner : never>, keyof P> & P;
+export type { AssignPropsWithRef as AssignProps };
+export type AssignPropsWithoutRef<Inner extends string | React.ComponentType<any>, P> = Omit<React.ComponentPropsWithoutRef<Inner extends React.ElementType ? Inner : never>, keyof P> & P;
+export interface DynamicRefForwardingComponent<TInitial extends string | React.ComponentType<any>, P = {
+    children?: React.ReactNode;
+}> {
+    <As extends string | React.ComponentType<any> = TInitial>(props: AssignPropsWithRef<As, {
+        as?: As;
+    } & P>, context?: any): React.ReactElement | null;
+    propTypes?: any;
+    contextTypes?: any;
+    defaultProps?: Partial<P>;
+    displayName?: string;
+}
+export interface DynamicFunctionComponent<TInitial extends string | React.ComponentType<any>, P = {
+    children?: React.ReactNode;
+}> {
+    <As extends string | React.ComponentType<any> = TInitial>(props: AssignPropsWithoutRef<As, {
+        as?: As;
+    } & P>, context?: any): React.ReactElement | null;
+    propTypes?: any;
+    contextTypes?: any;
+    defaultProps?: Partial<P>;
+    displayName?: string;
+}
+export declare class DynamicComponent<As extends string | React.ComponentType<any>, P = unknown> extends React.Component<AssignPropsWithRef<As, {
+    as?: As;
+} & P>> {
+}
+export type DynamicComponentClass<As extends string | React.ComponentType<any>, P = unknown> = React.ComponentClass<AssignPropsWithRef<As, {
+    as?: As;
+} & P>>;
+export type SelectCallback = (eventKey: string | null, e: React.SyntheticEvent<unknown>) => void;
+export interface TransitionCallbacks {
+    /**
+     * Callback fired before the component transitions in
+     */
+    onEnter?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired as the component begins to transition in
+     */
+    onEntering?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired after the component finishes transitioning in
+     */
+    onEntered?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired right before the component transitions out
+     */
+    onExit?(node: HTMLElement): any;
+    /**
+     * Callback fired as the component begins to transition out
+     */
+    onExiting?(node: HTMLElement): any;
+    /**
+     * Callback fired after the component finishes transitioning out
+     */
+    onExited?(node: HTMLElement): any;
+}
+export interface TransitionProps extends TransitionCallbacks {
+    in?: boolean;
+    appear?: boolean;
+    children: React.ReactElement;
+    mountOnEnter?: boolean;
+    unmountOnExit?: boolean;
+}
+export type TransitionComponent = React.ComponentType<TransitionProps>;
diff --git a/node_modules/@restart/ui/cjs/types.js b/node_modules/@restart/ui/cjs/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..e560939fa1688dd82249a0eee4c8ffa92c0fdfb6
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/types.js
@@ -0,0 +1,11 @@
+"use strict";
+
+exports.__esModule = true;
+exports.DynamicComponent = void 0;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+class DynamicComponent extends React.Component {}
+
+// Need to use this instead of typeof Component to get proper type checking.
+exports.DynamicComponent = DynamicComponent;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useClickOutside.d.ts b/node_modules/@restart/ui/cjs/useClickOutside.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..03a7a91c3d87ceea99a5bfadc39c671dca8a285c
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useClickOutside.d.ts
@@ -0,0 +1,21 @@
+/// <reference types="react" />
+export type MouseEvents = {
+    [K in keyof GlobalEventHandlersEventMap]: GlobalEventHandlersEventMap[K] extends MouseEvent ? K : never;
+}[keyof GlobalEventHandlersEventMap];
+export declare const getRefTarget: (ref: React.RefObject<Element> | Element | null | undefined) => Element | null | undefined;
+export interface ClickOutsideOptions {
+    disabled?: boolean;
+    clickTrigger?: MouseEvents;
+}
+/**
+ * The `useClickOutside` hook registers your callback on the document that fires
+ * when a pointer event is registered outside of the provided ref or element.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onClickOutside
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+declare function useClickOutside(ref: React.RefObject<Element> | Element | null | undefined, onClickOutside?: (e: Event) => void, { disabled, clickTrigger }?: ClickOutsideOptions): void;
+export default useClickOutside;
diff --git a/node_modules/@restart/ui/cjs/useClickOutside.js b/node_modules/@restart/ui/cjs/useClickOutside.js
new file mode 100644
index 0000000000000000000000000000000000000000..44affa64ad17a1ad7aa51c61548ac04b044672a9
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useClickOutside.js
@@ -0,0 +1,100 @@
+"use strict";
+
+exports.__esModule = true;
+exports.getRefTarget = exports.default = void 0;
+var _contains = _interopRequireDefault(require("dom-helpers/contains"));
+var _listen = _interopRequireDefault(require("dom-helpers/listen"));
+var _ownerDocument = _interopRequireDefault(require("dom-helpers/ownerDocument"));
+var _react = require("react");
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _warning = _interopRequireDefault(require("warning"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+const noop = () => {};
+function isLeftClickEvent(event) {
+  return event.button === 0;
+}
+function isModifiedEvent(event) {
+  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
+}
+const getRefTarget = ref => ref && ('current' in ref ? ref.current : ref);
+exports.getRefTarget = getRefTarget;
+const InitialTriggerEvents = {
+  click: 'mousedown',
+  mouseup: 'mousedown',
+  pointerup: 'pointerdown'
+};
+
+/**
+ * The `useClickOutside` hook registers your callback on the document that fires
+ * when a pointer event is registered outside of the provided ref or element.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onClickOutside
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+function useClickOutside(ref, onClickOutside = noop, {
+  disabled,
+  clickTrigger = 'click'
+} = {}) {
+  const preventMouseClickOutsideRef = (0, _react.useRef)(false);
+  const waitingForTrigger = (0, _react.useRef)(false);
+  const handleMouseCapture = (0, _react.useCallback)(e => {
+    const currentTarget = getRefTarget(ref);
+    (0, _warning.default)(!!currentTarget, 'ClickOutside captured a close event but does not have a ref to compare it to. ' + 'useClickOutside(), should be passed a ref that resolves to a DOM node');
+    preventMouseClickOutsideRef.current = !currentTarget || isModifiedEvent(e) || !isLeftClickEvent(e) || !!(0, _contains.default)(currentTarget, e.target) || waitingForTrigger.current;
+    waitingForTrigger.current = false;
+  }, [ref]);
+  const handleInitialMouse = (0, _useEventCallback.default)(e => {
+    const currentTarget = getRefTarget(ref);
+    if (currentTarget && (0, _contains.default)(currentTarget, e.target)) {
+      waitingForTrigger.current = true;
+    }
+  });
+  const handleMouse = (0, _useEventCallback.default)(e => {
+    if (!preventMouseClickOutsideRef.current) {
+      onClickOutside(e);
+    }
+  });
+  (0, _react.useEffect)(() => {
+    var _ownerWindow$event, _ownerWindow$parent;
+    if (disabled || ref == null) return undefined;
+    const doc = (0, _ownerDocument.default)(getRefTarget(ref));
+    const ownerWindow = doc.defaultView || window;
+
+    // Store the current event to avoid triggering handlers immediately
+    // For things rendered in an iframe, the event might originate on the parent window
+    // so we should fall back to that global event if the local one doesn't exist
+    // https://github.com/facebook/react/issues/20074
+    let currentEvent = (_ownerWindow$event = ownerWindow.event) != null ? _ownerWindow$event : (_ownerWindow$parent = ownerWindow.parent) == null ? void 0 : _ownerWindow$parent.event;
+    let removeInitialTriggerListener = null;
+    if (InitialTriggerEvents[clickTrigger]) {
+      removeInitialTriggerListener = (0, _listen.default)(doc, InitialTriggerEvents[clickTrigger], handleInitialMouse, true);
+    }
+
+    // Use capture for this listener so it fires before React's listener, to
+    // avoid false positives in the contains() check below if the target DOM
+    // element is removed in the React mouse callback.
+    const removeMouseCaptureListener = (0, _listen.default)(doc, clickTrigger, handleMouseCapture, true);
+    const removeMouseListener = (0, _listen.default)(doc, clickTrigger, e => {
+      // skip if this event is the same as the one running when we added the handlers
+      if (e === currentEvent) {
+        currentEvent = undefined;
+        return;
+      }
+      handleMouse(e);
+    });
+    let mobileSafariHackListeners = [];
+    if ('ontouchstart' in doc.documentElement) {
+      mobileSafariHackListeners = [].slice.call(doc.body.children).map(el => (0, _listen.default)(el, 'mousemove', noop));
+    }
+    return () => {
+      removeInitialTriggerListener == null ? void 0 : removeInitialTriggerListener();
+      removeMouseCaptureListener();
+      removeMouseListener();
+      mobileSafariHackListeners.forEach(remove => remove());
+    };
+  }, [ref, disabled, clickTrigger, handleMouseCapture, handleInitialMouse, handleMouse]);
+}
+var _default = exports.default = useClickOutside;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/usePopper.d.ts b/node_modules/@restart/ui/cjs/usePopper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e51e12585a99ba08f46eea973556647279c5a62e
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/usePopper.d.ts
@@ -0,0 +1,50 @@
+import * as Popper from '@popperjs/core';
+export type Modifier<Name, Options extends Popper.Obj> = Popper.Modifier<Name, Options>;
+export type Options = Popper.Options;
+export type Instance = Popper.Instance;
+export type Placement = Popper.Placement;
+export type VirtualElement = Popper.VirtualElement;
+export type State = Popper.State;
+export type OffsetValue = [
+    number | null | undefined,
+    number | null | undefined
+];
+export type OffsetFunction = (details: {
+    popper: Popper.Rect;
+    reference: Popper.Rect;
+    placement: Placement;
+}) => OffsetValue;
+export type Offset = OffsetFunction | OffsetValue;
+export type ModifierMap = Record<string, Partial<Modifier<any, any>>>;
+export type Modifiers = Popper.Options['modifiers'] | Record<string, Partial<Modifier<any, any>>>;
+export type UsePopperOptions = Omit<Options, 'modifiers' | 'placement' | 'strategy'> & {
+    enabled?: boolean;
+    placement?: Options['placement'];
+    strategy?: Options['strategy'];
+    modifiers?: Options['modifiers'];
+};
+export interface UsePopperState {
+    placement: Placement;
+    update: () => void;
+    forceUpdate: () => void;
+    attributes: Record<string, Record<string, any>>;
+    styles: Record<string, Partial<CSSStyleDeclaration>>;
+    state?: State;
+}
+/**
+ * Position an element relative some reference element using Popper.js
+ *
+ * @param referenceElement
+ * @param popperElement
+ * @param {object}      options
+ * @param {object=}     options.modifiers Popper.js modifiers
+ * @param {boolean=}    options.enabled toggle the popper functionality on/off
+ * @param {string=}     options.placement The popper element placement relative to the reference element
+ * @param {string=}     options.strategy the positioning strategy
+ * @param {function=}   options.onCreate called when the popper is created
+ * @param {function=}   options.onUpdate called when the popper is updated
+ *
+ * @returns {UsePopperState} The popper state
+ */
+declare function usePopper(referenceElement: VirtualElement | null | undefined, popperElement: HTMLElement | null | undefined, { enabled, placement, strategy, modifiers, ...config }?: UsePopperOptions): UsePopperState;
+export default usePopper;
diff --git a/node_modules/@restart/ui/cjs/usePopper.js b/node_modules/@restart/ui/cjs/usePopper.js
new file mode 100644
index 0000000000000000000000000000000000000000..29dee6f80b0a05d6ecf3ae81053800f6fa78fab6
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/usePopper.js
@@ -0,0 +1,163 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _react = require("react");
+var _dequal = require("dequal");
+var _useSafeState = _interopRequireDefault(require("@restart/hooks/useSafeState"));
+var _popper = require("./popper");
+const _excluded = ["enabled", "placement", "strategy", "modifiers"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+const disabledApplyStylesModifier = {
+  name: 'applyStyles',
+  enabled: false,
+  phase: 'afterWrite',
+  fn: () => undefined
+};
+
+// until docjs supports type exports...
+
+const ariaDescribedByModifier = {
+  name: 'ariaDescribedBy',
+  enabled: true,
+  phase: 'afterWrite',
+  effect: ({
+    state
+  }) => () => {
+    const {
+      reference,
+      popper
+    } = state.elements;
+    if ('removeAttribute' in reference) {
+      const ids = (reference.getAttribute('aria-describedby') || '').split(',').filter(id => id.trim() !== popper.id);
+      if (!ids.length) reference.removeAttribute('aria-describedby');else reference.setAttribute('aria-describedby', ids.join(','));
+    }
+  },
+  fn: ({
+    state
+  }) => {
+    var _popper$getAttribute;
+    const {
+      popper,
+      reference
+    } = state.elements;
+    const role = (_popper$getAttribute = popper.getAttribute('role')) == null ? void 0 : _popper$getAttribute.toLowerCase();
+    if (popper.id && role === 'tooltip' && 'setAttribute' in reference) {
+      const ids = reference.getAttribute('aria-describedby');
+      if (ids && ids.split(',').indexOf(popper.id) !== -1) {
+        return;
+      }
+      reference.setAttribute('aria-describedby', ids ? `${ids},${popper.id}` : popper.id);
+    }
+  }
+};
+const EMPTY_MODIFIERS = [];
+/**
+ * Position an element relative some reference element using Popper.js
+ *
+ * @param referenceElement
+ * @param popperElement
+ * @param {object}      options
+ * @param {object=}     options.modifiers Popper.js modifiers
+ * @param {boolean=}    options.enabled toggle the popper functionality on/off
+ * @param {string=}     options.placement The popper element placement relative to the reference element
+ * @param {string=}     options.strategy the positioning strategy
+ * @param {function=}   options.onCreate called when the popper is created
+ * @param {function=}   options.onUpdate called when the popper is updated
+ *
+ * @returns {UsePopperState} The popper state
+ */
+function usePopper(referenceElement, popperElement, _ref = {}) {
+  let {
+      enabled = true,
+      placement = 'bottom',
+      strategy = 'absolute',
+      modifiers = EMPTY_MODIFIERS
+    } = _ref,
+    config = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const prevModifiers = (0, _react.useRef)(modifiers);
+  const popperInstanceRef = (0, _react.useRef)();
+  const update = (0, _react.useCallback)(() => {
+    var _popperInstanceRef$cu;
+    (_popperInstanceRef$cu = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu.update();
+  }, []);
+  const forceUpdate = (0, _react.useCallback)(() => {
+    var _popperInstanceRef$cu2;
+    (_popperInstanceRef$cu2 = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu2.forceUpdate();
+  }, []);
+  const [popperState, setState] = (0, _useSafeState.default)((0, _react.useState)({
+    placement,
+    update,
+    forceUpdate,
+    attributes: {},
+    styles: {
+      popper: {},
+      arrow: {}
+    }
+  }));
+  const updateModifier = (0, _react.useMemo)(() => ({
+    name: 'updateStateModifier',
+    enabled: true,
+    phase: 'write',
+    requires: ['computeStyles'],
+    fn: ({
+      state
+    }) => {
+      const styles = {};
+      const attributes = {};
+      Object.keys(state.elements).forEach(element => {
+        styles[element] = state.styles[element];
+        attributes[element] = state.attributes[element];
+      });
+      setState({
+        state,
+        styles,
+        attributes,
+        update,
+        forceUpdate,
+        placement: state.placement
+      });
+    }
+  }), [update, forceUpdate, setState]);
+  const nextModifiers = (0, _react.useMemo)(() => {
+    if (!(0, _dequal.dequal)(prevModifiers.current, modifiers)) {
+      prevModifiers.current = modifiers;
+    }
+    return prevModifiers.current;
+  }, [modifiers]);
+  (0, _react.useEffect)(() => {
+    if (!popperInstanceRef.current || !enabled) return;
+    popperInstanceRef.current.setOptions({
+      placement,
+      strategy,
+      modifiers: [...nextModifiers, updateModifier, disabledApplyStylesModifier]
+    });
+  }, [strategy, placement, updateModifier, enabled, nextModifiers]);
+  (0, _react.useEffect)(() => {
+    if (!enabled || referenceElement == null || popperElement == null) {
+      return undefined;
+    }
+    popperInstanceRef.current = (0, _popper.createPopper)(referenceElement, popperElement, Object.assign({}, config, {
+      placement,
+      strategy,
+      modifiers: [...nextModifiers, ariaDescribedByModifier, updateModifier]
+    }));
+    return () => {
+      if (popperInstanceRef.current != null) {
+        popperInstanceRef.current.destroy();
+        popperInstanceRef.current = undefined;
+        setState(s => Object.assign({}, s, {
+          attributes: {},
+          styles: {
+            popper: {}
+          }
+        }));
+      }
+    };
+    // This is only run once to _create_ the popper
+    // eslint-disable-next-line react-hooks/exhaustive-deps
+  }, [enabled, referenceElement, popperElement]);
+  return popperState;
+}
+var _default = exports.default = usePopper;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useRTGTransitionProps.d.ts b/node_modules/@restart/ui/cjs/useRTGTransitionProps.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8621caad03b6ff81c34858e1e00c8edb30d69dc7
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useRTGTransitionProps.d.ts
@@ -0,0 +1,49 @@
+/// <reference types="react" />
+import { TransitionProps as RTGTransitionProps, TransitionStatus } from 'react-transition-group/Transition';
+export type TransitionProps = RTGTransitionProps & {
+    children: React.ReactElement | ((status: TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+};
+/**
+ * Normalizes RTG transition callbacks with nodeRef to better support
+ * strict mode.
+ *
+ * @param props Transition props.
+ * @returns Normalized transition props.
+ */
+export default function useRTGTransitionProps({ onEnter, onEntering, onEntered, onExit, onExiting, onExited, addEndListener, children, ...props }: TransitionProps): {
+    children: any;
+    addEndListener?: ((param: any) => void) | undefined;
+    onExited?: ((param: any) => void) | undefined;
+    onExiting?: ((param: any) => void) | undefined;
+    onExit?: ((param: any) => void) | undefined;
+    onEntered?: ((param: any) => void) | undefined;
+    onEntering?: ((param: any) => void) | undefined;
+    onEnter?: ((param: any) => void) | undefined;
+    nodeRef: import("react").RefObject<HTMLElement>;
+    timeout: number | {
+        appear?: number | undefined;
+        enter?: number | undefined;
+        exit?: number | undefined;
+    };
+    in?: boolean | undefined;
+    mountOnEnter?: boolean | undefined;
+    unmountOnExit?: boolean | undefined;
+} | {
+    children: any;
+    addEndListener?: ((param: any) => void) | undefined;
+    onExited?: ((param: any) => void) | undefined;
+    onExiting?: ((param: any) => void) | undefined;
+    onExit?: ((param: any) => void) | undefined;
+    onEntered?: ((param: any) => void) | undefined;
+    onEntering?: ((param: any) => void) | undefined;
+    onEnter?: ((param: any) => void) | undefined;
+    nodeRef: import("react").RefObject<HTMLElement>;
+    timeout?: number | {
+        appear?: number | undefined;
+        enter?: number | undefined;
+        exit?: number | undefined;
+    } | undefined;
+    in?: boolean | undefined;
+    mountOnEnter?: boolean | undefined;
+    unmountOnExit?: boolean | undefined;
+};
diff --git a/node_modules/@restart/ui/cjs/useRTGTransitionProps.js b/node_modules/@restart/ui/cjs/useRTGTransitionProps.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9960d20ffb192f4a0446b38a781e62c62b98e63
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useRTGTransitionProps.js
@@ -0,0 +1,77 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useRTGTransitionProps;
+var _react = require("react");
+var _useMergedRefs = _interopRequireDefault(require("@restart/hooks/useMergedRefs"));
+var _utils = require("./utils");
+const _excluded = ["onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "addEndListener", "children"];
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+/**
+ * Normalizes RTG transition callbacks with nodeRef to better support
+ * strict mode.
+ *
+ * @param props Transition props.
+ * @returns Normalized transition props.
+ */
+function useRTGTransitionProps(_ref) {
+  let {
+      onEnter,
+      onEntering,
+      onEntered,
+      onExit,
+      onExiting,
+      onExited,
+      addEndListener,
+      children
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const {
+    major
+  } = (0, _utils.getReactVersion)();
+  const childRef = major >= 19 ? children.props.ref : children.ref;
+  const nodeRef = (0, _react.useRef)(null);
+  const mergedRef = (0, _useMergedRefs.default)(nodeRef, typeof children === 'function' ? null : childRef);
+  const normalize = callback => param => {
+    if (callback && nodeRef.current) {
+      callback(nodeRef.current, param);
+    }
+  };
+
+  /* eslint-disable react-hooks/exhaustive-deps */
+  const handleEnter = (0, _react.useCallback)(normalize(onEnter), [onEnter]);
+  const handleEntering = (0, _react.useCallback)(normalize(onEntering), [onEntering]);
+  const handleEntered = (0, _react.useCallback)(normalize(onEntered), [onEntered]);
+  const handleExit = (0, _react.useCallback)(normalize(onExit), [onExit]);
+  const handleExiting = (0, _react.useCallback)(normalize(onExiting), [onExiting]);
+  const handleExited = (0, _react.useCallback)(normalize(onExited), [onExited]);
+  const handleAddEndListener = (0, _react.useCallback)(normalize(addEndListener), [addEndListener]);
+  /* eslint-enable react-hooks/exhaustive-deps */
+
+  return Object.assign({}, props, {
+    nodeRef
+  }, onEnter && {
+    onEnter: handleEnter
+  }, onEntering && {
+    onEntering: handleEntering
+  }, onEntered && {
+    onEntered: handleEntered
+  }, onExit && {
+    onExit: handleExit
+  }, onExiting && {
+    onExiting: handleExiting
+  }, onExited && {
+    onExited: handleExited
+  }, addEndListener && {
+    addEndListener: handleAddEndListener
+  }, {
+    children: typeof children === 'function' ? (status, innerProps) =>
+    // TODO: Types for RTG missing innerProps, so need to cast.
+    children(status, Object.assign({}, innerProps, {
+      ref: mergedRef
+    })) : /*#__PURE__*/(0, _react.cloneElement)(children, {
+      ref: mergedRef
+    })
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useRootClose.d.ts b/node_modules/@restart/ui/cjs/useRootClose.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9864ad5997ef83b89a827a77c27c9f9b51cfe65a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useRootClose.d.ts
@@ -0,0 +1,19 @@
+/// <reference types="react" />
+import { ClickOutsideOptions } from './useClickOutside';
+export interface RootCloseOptions extends ClickOutsideOptions {
+    disabled?: boolean;
+}
+/**
+ * The `useRootClose` hook registers your callback on the document
+ * when rendered. Powers the `<Overlay/>` component. This is used achieve modal
+ * style behavior where your callback is triggered when the user tries to
+ * interact with the rest of the document or hits the `esc` key.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onRootClose
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+declare function useRootClose(ref: React.RefObject<Element> | Element | null | undefined, onRootClose: (e: Event) => void, { disabled, clickTrigger }?: RootCloseOptions): void;
+export default useRootClose;
diff --git a/node_modules/@restart/ui/cjs/useRootClose.js b/node_modules/@restart/ui/cjs/useRootClose.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a1f6ffedecbd58b158367a8361955765fc761ea
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useRootClose.js
@@ -0,0 +1,61 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _listen = _interopRequireDefault(require("dom-helpers/listen"));
+var _ownerDocument = _interopRequireDefault(require("dom-helpers/ownerDocument"));
+var _react = require("react");
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _useClickOutside = _interopRequireWildcard(require("./useClickOutside"));
+var _utils = require("./utils");
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+const noop = () => {};
+/**
+ * The `useRootClose` hook registers your callback on the document
+ * when rendered. Powers the `<Overlay/>` component. This is used achieve modal
+ * style behavior where your callback is triggered when the user tries to
+ * interact with the rest of the document or hits the `esc` key.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onRootClose
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+function useRootClose(ref, onRootClose, {
+  disabled,
+  clickTrigger
+} = {}) {
+  const onClose = onRootClose || noop;
+  (0, _useClickOutside.default)(ref, onClose, {
+    disabled,
+    clickTrigger
+  });
+  const handleKeyUp = (0, _useEventCallback.default)(e => {
+    if ((0, _utils.isEscKey)(e)) {
+      onClose(e);
+    }
+  });
+  (0, _react.useEffect)(() => {
+    if (disabled || ref == null) return undefined;
+    const doc = (0, _ownerDocument.default)((0, _useClickOutside.getRefTarget)(ref));
+
+    // Store the current event to avoid triggering handlers immediately
+    // https://github.com/facebook/react/issues/20074
+    let currentEvent = (doc.defaultView || window).event;
+    const removeKeyupListener = (0, _listen.default)(doc, 'keyup', e => {
+      // skip if this event is the same as the one running when we added the handlers
+      if (e === currentEvent) {
+        currentEvent = undefined;
+        return;
+      }
+      handleKeyUp(e);
+    });
+    return () => {
+      removeKeyupListener();
+    };
+  }, [ref, disabled, handleKeyUp]);
+}
+var _default = exports.default = useRootClose;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useScrollParent.d.ts b/node_modules/@restart/ui/cjs/useScrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..51b7bcf35e9924028b2ce5ca120cc6147e6e3b7a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useScrollParent.d.ts
@@ -0,0 +1 @@
+export default function useScrollParent(element: null | Element): Element | Document | null | undefined;
diff --git a/node_modules/@restart/ui/cjs/useScrollParent.js b/node_modules/@restart/ui/cjs/useScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfd458334c0837938acc23326e438622776f5f4d
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useScrollParent.js
@@ -0,0 +1,17 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useScrollParent;
+var _useIsomorphicEffect = _interopRequireDefault(require("@restart/hooks/useIsomorphicEffect"));
+var _scrollParent = _interopRequireDefault(require("dom-helpers/scrollParent"));
+var _react = require("react");
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+function useScrollParent(element) {
+  const [parent, setParent] = (0, _react.useState)(null);
+  (0, _useIsomorphicEffect.default)(() => {
+    if (element) {
+      setParent((0, _scrollParent.default)(element, true));
+    }
+  }, [element]);
+  return parent;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useWaitForDOMRef.d.ts b/node_modules/@restart/ui/cjs/useWaitForDOMRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..12b3b1150d611a9921659214ab56cfdae8cb6fee
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWaitForDOMRef.d.ts
@@ -0,0 +1,5 @@
+/// <reference types="react" />
+import { VirtualElement } from './usePopper';
+export type DOMContainer<T extends HTMLElement | VirtualElement = HTMLElement> = T | React.RefObject<T> | null | (() => T | React.RefObject<T> | null);
+export declare const resolveContainerRef: <T extends HTMLElement | import("@popperjs/core").VirtualElement>(ref: DOMContainer<T> | undefined, document?: Document) => HTMLBodyElement | T | null;
+export default function useWaitForDOMRef<T extends HTMLElement | VirtualElement = HTMLElement>(ref: DOMContainer<T> | undefined, onResolved?: (element: T | HTMLBodyElement) => void): HTMLBodyElement | T | null;
diff --git a/node_modules/@restart/ui/cjs/useWaitForDOMRef.js b/node_modules/@restart/ui/cjs/useWaitForDOMRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b2cca787422ee579b101d44b9083009f794c8c1
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWaitForDOMRef.js
@@ -0,0 +1,39 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = useWaitForDOMRef;
+exports.resolveContainerRef = void 0;
+var _ownerDocument = _interopRequireDefault(require("dom-helpers/ownerDocument"));
+var _canUseDOM = _interopRequireDefault(require("dom-helpers/canUseDOM"));
+var _react = require("react");
+var _useWindow = _interopRequireDefault(require("./useWindow"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+const resolveContainerRef = (ref, document) => {
+  if (!_canUseDOM.default) return null;
+  if (ref == null) return (document || (0, _ownerDocument.default)()).body;
+  if (typeof ref === 'function') ref = ref();
+  if (ref && 'current' in ref) ref = ref.current;
+  if (ref && ('nodeType' in ref || ref.getBoundingClientRect)) return ref;
+  return null;
+};
+exports.resolveContainerRef = resolveContainerRef;
+function useWaitForDOMRef(ref, onResolved) {
+  const window = (0, _useWindow.default)();
+  const [resolvedRef, setRef] = (0, _react.useState)(() => resolveContainerRef(ref, window == null ? void 0 : window.document));
+  if (!resolvedRef) {
+    const earlyRef = resolveContainerRef(ref);
+    if (earlyRef) setRef(earlyRef);
+  }
+  (0, _react.useEffect)(() => {
+    if (onResolved && resolvedRef) {
+      onResolved(resolvedRef);
+    }
+  }, [onResolved, resolvedRef]);
+  (0, _react.useEffect)(() => {
+    const nextRef = resolveContainerRef(ref);
+    if (nextRef !== resolvedRef) {
+      setRef(nextRef);
+    }
+  }, [ref, resolvedRef]);
+  return resolvedRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useWaypoint.d.ts b/node_modules/@restart/ui/cjs/useWaypoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..73080b64ca4173add93ff3da51720452df39deff
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWaypoint.d.ts
@@ -0,0 +1,41 @@
+export interface WaypointEvent {
+    position: Position;
+    previousPosition: Position | null;
+}
+export interface Rect {
+    top?: number;
+    bottom?: number;
+    left?: number;
+    right?: number;
+}
+export type WaypointCallback = (details: WaypointEvent, entry: IntersectionObserverEntry, observer: IntersectionObserver) => void;
+export type RootElement = Element | Document | null | undefined;
+/** Accepts all options an IntersectionObserver accepts */
+export interface WaypointOptions extends Omit<IntersectionObserverInit, 'rootMargin' | 'root'> {
+    /**
+     * The "root" element to observe. This should be the scrollable view your waypoint
+     * is rendered into. Accepts a DOM element, a function that returns a DOM element, `null`
+     * indicating that the root is not ready yet, or the string "scrollParent" to
+     * have the waypoint calculate the scroll parent itself.
+     */
+    root?: RootElement | 'scrollParent' | ((element: Element) => RootElement);
+    /**
+     * A valid CSS `margin` property or object containing the specific "top", "left", etc properties.
+     * The root margin functionally adjusts the "size" of the viewport when considering the waypoint's
+     * position. A positive margin will cause the waypoint to "enter" the waypoint early while a
+     * negative margin will have the opposite effect.
+     */
+    rootMargin?: string | Rect;
+    /**
+     * Set the direction of the scroll to consider when tracking the waypoint's position
+     */
+    scrollDirection?: 'vertical' | 'horizontal';
+}
+export declare enum Position {
+    UNKNOWN = 0,
+    BEFORE = 1,
+    INSIDE = 2,
+    AFTER = 3
+}
+declare function useWaypoint(element: Element | null, callback: WaypointCallback, options?: WaypointOptions): void;
+export default useWaypoint;
diff --git a/node_modules/@restart/ui/cjs/useWaypoint.js b/node_modules/@restart/ui/cjs/useWaypoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1eb3c0c43709625f9107ce180e9d3683166fb0d
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWaypoint.js
@@ -0,0 +1,92 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.Position = void 0;
+var _useEventCallback = _interopRequireDefault(require("@restart/hooks/useEventCallback"));
+var _useIntersectionObserver = _interopRequireDefault(require("@restart/hooks/useIntersectionObserver"));
+var _react = require("react");
+var _scrollParent = _interopRequireDefault(require("dom-helpers/scrollParent"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+/** Accepts all options an IntersectionObserver accepts */
+let Position = exports.Position = void 0;
+(function (Position) {
+  Position[Position["UNKNOWN"] = 0] = "UNKNOWN";
+  Position[Position["BEFORE"] = 1] = "BEFORE";
+  Position[Position["INSIDE"] = 2] = "INSIDE";
+  Position[Position["AFTER"] = 3] = "AFTER";
+})(Position || (exports.Position = Position = {}));
+function toCss(margin) {
+  if (!margin || typeof margin === 'string') return margin;
+  const {
+    top = 0,
+    right = 0,
+    bottom = 0,
+    left = 0
+  } = margin;
+  return `${top}px ${right}px ${bottom}px ${left}px`;
+}
+const findRoot = el => (0, _scrollParent.default)(el, true);
+function useWaypoint(element, callback, options = {}) {
+  const {
+    rootMargin,
+    threshold,
+    scrollDirection = 'vertical'
+  } = options;
+  let {
+    root
+  } = options;
+  const handler = (0, _useEventCallback.default)(callback);
+  const prevPositionRef = (0, _react.useRef)(null);
+  if (root === 'scrollParent') {
+    root = findRoot;
+  }
+  const scrollParent = (0, _react.useMemo)(() => element && typeof root === 'function' ? root(element) : null, [element, root]);
+  let realRoot = typeof root === 'function' ? scrollParent : root;
+  if (realRoot && realRoot.nodeType === document.DOCUMENT_NODE) {
+    // explicit undefined means "use the viewport", instead of `null`
+    // which means "no root yet". This works around a bug in safari
+    // where document is not accepted in older versions,
+    // or is accepted but doesn't work (as of v14)
+    realRoot = undefined;
+  }
+  (0, _useIntersectionObserver.default)(
+  // We change the meaning of explicit null to "not provided yet"
+  // this is to allow easier synchronizing between element and roots derived
+  // from it. Otherwise if the root updates later an observer will be created
+  // for the document and then for the root
+  element, ([entry], observer) => {
+    var _entry$rootBounds, _entry$rootBounds2;
+    if (!entry) return;
+    const [start, end, point] = scrollDirection === 'vertical' ? ['top', 'bottom', 'y'] : ['left', 'right', 'x'];
+    const {
+      [point]: coord
+    } = entry.boundingClientRect;
+    const rootStart = ((_entry$rootBounds = entry.rootBounds) == null ? void 0 : _entry$rootBounds[start]) || 0;
+    const rootEnd = ((_entry$rootBounds2 = entry.rootBounds) == null ? void 0 : _entry$rootBounds2[end]) || 0;
+
+    // The position may remain UNKNOWN if the root
+    // is 0 width/height or everything is hidden.
+    let position = Position.UNKNOWN;
+    if (entry.isIntersecting) {
+      position = Position.INSIDE;
+    } else if (coord > rootEnd) {
+      position = Position.AFTER;
+    } else if (coord < rootStart) {
+      position = Position.BEFORE;
+    }
+    const previousPosition = prevPositionRef.current;
+    if (previousPosition === position) {
+      return;
+    }
+    handler({
+      position,
+      previousPosition
+    }, entry, observer);
+    prevPositionRef.current = position;
+  }, {
+    threshold,
+    root: realRoot,
+    rootMargin: toCss(rootMargin)
+  });
+}
+var _default = exports.default = useWaypoint;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/useWindow.d.ts b/node_modules/@restart/ui/cjs/useWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cddc532b088db27720ba94ded1905ab7a866c05a
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWindow.d.ts
@@ -0,0 +1,9 @@
+/// <reference types="react" />
+export declare const WindowProvider: import("react").Provider<(Window & typeof globalThis) | undefined>;
+/**
+ * The document "window" placed in React context. Helpful for determining
+ * SSR context, or when rendering into an iframe.
+ *
+ * @returns the current window
+ */
+export default function useWindow(): (Window & typeof globalThis) | undefined;
diff --git a/node_modules/@restart/ui/cjs/useWindow.js b/node_modules/@restart/ui/cjs/useWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..62ffccfdd81e82493ab39d6e8bfb6be57b9dbe70
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/useWindow.js
@@ -0,0 +1,20 @@
+"use strict";
+
+exports.__esModule = true;
+exports.WindowProvider = void 0;
+exports.default = useWindow;
+var _react = require("react");
+var _canUseDOM = _interopRequireDefault(require("dom-helpers/canUseDOM"));
+function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
+const Context = /*#__PURE__*/(0, _react.createContext)(_canUseDOM.default ? window : undefined);
+const WindowProvider = exports.WindowProvider = Context.Provider;
+
+/**
+ * The document "window" placed in React context. Helpful for determining
+ * SSR context, or when rendering into an iframe.
+ *
+ * @returns the current window
+ */
+function useWindow() {
+  return (0, _react.useContext)(Context);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/cjs/utils.d.ts b/node_modules/@restart/ui/cjs/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b0bc7af9ed358dc91a2560181aa62fe8057fa09
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/utils.d.ts
@@ -0,0 +1,6 @@
+export declare function isEscKey(e: KeyboardEvent): boolean;
+export declare function getReactVersion(): {
+    major: number;
+    minor: number;
+    patch: number;
+};
diff --git a/node_modules/@restart/ui/cjs/utils.js b/node_modules/@restart/ui/cjs/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..71f9762460ae7041ed422e32f3d63b93c85ad0bd
--- /dev/null
+++ b/node_modules/@restart/ui/cjs/utils.js
@@ -0,0 +1,19 @@
+"use strict";
+
+exports.__esModule = true;
+exports.getReactVersion = getReactVersion;
+exports.isEscKey = isEscKey;
+var React = _interopRequireWildcard(require("react"));
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+function isEscKey(e) {
+  return e.code === 'Escape' || e.keyCode === 27;
+}
+function getReactVersion() {
+  const parts = React.version.split('.');
+  return {
+    major: +parts[0],
+    minor: +parts[1],
+    patch: +parts[2]
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Anchor.d.ts b/node_modules/@restart/ui/esm/Anchor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5b1c41f771851351517f33a439a68ad558df73e8
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Anchor.d.ts
@@ -0,0 +1,14 @@
+import * as React from 'react';
+export declare function isTrivialHref(href?: string): boolean;
+export interface AnchorProps extends React.HTMLAttributes<HTMLElement> {
+    href?: string;
+    disabled?: boolean;
+    role?: string;
+    tabIndex?: number;
+}
+/**
+ * An generic `<a>` component that covers a few A11y cases, ensuring that
+ * cases where the `href` is missing or trivial like "#" are treated like buttons.
+ */
+declare const Anchor: React.ForwardRefExoticComponent<AnchorProps & React.RefAttributes<HTMLAnchorElement>>;
+export default Anchor;
diff --git a/node_modules/@restart/ui/esm/Anchor.js b/node_modules/@restart/ui/esm/Anchor.js
new file mode 100644
index 0000000000000000000000000000000000000000..993d6488d1ee6709f7e8771b95fdeb02aa2db4d1
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Anchor.js
@@ -0,0 +1,43 @@
+const _excluded = ["onKeyDown"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+/* eslint-disable jsx-a11y/no-static-element-interactions */
+/* eslint-disable jsx-a11y/anchor-has-content */
+
+import * as React from 'react';
+import { useEventCallback } from '@restart/hooks';
+import { useButtonProps } from './Button';
+import { jsx as _jsx } from "react/jsx-runtime";
+export function isTrivialHref(href) {
+  return !href || href.trim() === '#';
+}
+/**
+ * An generic `<a>` component that covers a few A11y cases, ensuring that
+ * cases where the `href` is missing or trivial like "#" are treated like buttons.
+ */
+const Anchor = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      onKeyDown
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [buttonProps] = useButtonProps(Object.assign({
+    tagName: 'a'
+  }, props));
+  const handleKeyDown = useEventCallback(e => {
+    buttonProps.onKeyDown(e);
+    onKeyDown == null ? void 0 : onKeyDown(e);
+  });
+  if (isTrivialHref(props.href) || props.role === 'button') {
+    return /*#__PURE__*/_jsx("a", Object.assign({
+      ref: ref
+    }, props, buttonProps, {
+      onKeyDown: handleKeyDown
+    }));
+  }
+  return /*#__PURE__*/_jsx("a", Object.assign({
+    ref: ref
+  }, props, {
+    onKeyDown: onKeyDown
+  }));
+});
+Anchor.displayName = 'Anchor';
+export default Anchor;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Button.d.ts b/node_modules/@restart/ui/esm/Button.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..85be3cc9908f3a0191ce81bbfc941aa8caedcd3b
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Button.d.ts
@@ -0,0 +1,50 @@
+import * as React from 'react';
+export type ButtonType = 'button' | 'reset' | 'submit';
+export interface AnchorOptions {
+    href?: string;
+    rel?: string;
+    target?: string;
+}
+export interface UseButtonPropsOptions extends AnchorOptions {
+    type?: ButtonType;
+    disabled?: boolean;
+    onClick?: React.EventHandler<React.MouseEvent | React.KeyboardEvent>;
+    tabIndex?: number;
+    tagName?: keyof JSX.IntrinsicElements;
+    role?: React.AriaRole | undefined;
+}
+export declare function isTrivialHref(href?: string): boolean;
+export interface AriaButtonProps {
+    type?: ButtonType | undefined;
+    disabled: boolean | undefined;
+    role?: React.AriaRole;
+    tabIndex?: number | undefined;
+    href?: string | undefined;
+    target?: string | undefined;
+    rel?: string | undefined;
+    'aria-disabled'?: true | undefined;
+    onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void;
+    onKeyDown?: (event: React.KeyboardEvent) => void;
+}
+export interface UseButtonPropsMetadata {
+    tagName: React.ElementType;
+}
+export declare function useButtonProps({ tagName, disabled, href, target, rel, role, onClick, tabIndex, type, }: UseButtonPropsOptions): [AriaButtonProps, UseButtonPropsMetadata];
+export interface BaseButtonProps {
+    /**
+     * Control the underlying rendered element directly by passing in a valid
+     * component type
+     */
+    as?: keyof JSX.IntrinsicElements | undefined;
+    /** The disabled state of the button */
+    disabled?: boolean | undefined;
+    /** Optionally specify an href to render a `<a>` tag styled as a button */
+    href?: string | undefined;
+    /** Anchor target, when rendering an anchor as a button */
+    target?: string | undefined;
+    rel?: string | undefined;
+}
+export interface ButtonProps extends BaseButtonProps, React.ComponentPropsWithoutRef<'button'> {
+}
+declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLElement>>;
+export default Button;
diff --git a/node_modules/@restart/ui/esm/Button.js b/node_modules/@restart/ui/esm/Button.js
new file mode 100644
index 0000000000000000000000000000000000000000..25a601e66a0d4277dacb4faf301bf4bb518fed6d
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Button.js
@@ -0,0 +1,89 @@
+const _excluded = ["as", "disabled"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { jsx as _jsx } from "react/jsx-runtime";
+export function isTrivialHref(href) {
+  return !href || href.trim() === '#';
+}
+export function useButtonProps({
+  tagName,
+  disabled,
+  href,
+  target,
+  rel,
+  role,
+  onClick,
+  tabIndex = 0,
+  type
+}) {
+  if (!tagName) {
+    if (href != null || target != null || rel != null) {
+      tagName = 'a';
+    } else {
+      tagName = 'button';
+    }
+  }
+  const meta = {
+    tagName
+  };
+  if (tagName === 'button') {
+    return [{
+      type: type || 'button',
+      disabled
+    }, meta];
+  }
+  const handleClick = event => {
+    if (disabled || tagName === 'a' && isTrivialHref(href)) {
+      event.preventDefault();
+    }
+    if (disabled) {
+      event.stopPropagation();
+      return;
+    }
+    onClick == null ? void 0 : onClick(event);
+  };
+  const handleKeyDown = event => {
+    if (event.key === ' ') {
+      event.preventDefault();
+      handleClick(event);
+    }
+  };
+  if (tagName === 'a') {
+    // Ensure there's a href so Enter can trigger anchor button.
+    href || (href = '#');
+    if (disabled) {
+      href = undefined;
+    }
+  }
+  return [{
+    role: role != null ? role : 'button',
+    // explicitly undefined so that it overrides the props disabled in a spread
+    // e.g. <Tag {...props} {...hookProps} />
+    disabled: undefined,
+    tabIndex: disabled ? undefined : tabIndex,
+    href,
+    target: tagName === 'a' ? target : undefined,
+    'aria-disabled': !disabled ? undefined : disabled,
+    rel: tagName === 'a' ? rel : undefined,
+    onClick: handleClick,
+    onKeyDown: handleKeyDown
+  }, meta];
+}
+const Button = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      as: asProp,
+      disabled
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [buttonProps, {
+    tagName: Component
+  }] = useButtonProps(Object.assign({
+    tagName: asProp,
+    disabled
+  }, props));
+  return /*#__PURE__*/_jsx(Component, Object.assign({}, props, buttonProps, {
+    ref: ref
+  }));
+});
+Button.displayName = 'Button';
+export default Button;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/DataKey.d.ts b/node_modules/@restart/ui/esm/DataKey.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6048d86ff6d9b3d42873141b8e13e195566ef866
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DataKey.d.ts
@@ -0,0 +1,4 @@
+export declare const ATTRIBUTE_PREFIX: "data-rr-ui-";
+export declare const PROPERTY_PREFIX: "rrUi";
+export declare function dataAttr<T extends string>(property: T): `data-rr-ui-${T}`;
+export declare function dataProp<T extends string>(property: T): `rrUi${T}`;
diff --git a/node_modules/@restart/ui/esm/DataKey.js b/node_modules/@restart/ui/esm/DataKey.js
new file mode 100644
index 0000000000000000000000000000000000000000..efe65e6954fd1c333634ad9ddfb39fc41d107adf
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DataKey.js
@@ -0,0 +1,8 @@
+export const ATTRIBUTE_PREFIX = `data-rr-ui-`;
+export const PROPERTY_PREFIX = `rrUi`;
+export function dataAttr(property) {
+  return `${ATTRIBUTE_PREFIX}${property}`;
+}
+export function dataProp(property) {
+  return `${PROPERTY_PREFIX}${property}`;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Dropdown.d.ts b/node_modules/@restart/ui/esm/Dropdown.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e2e6810a8ded55b145f45f9c6a8a68364c7d1ac5
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Dropdown.d.ts
@@ -0,0 +1,93 @@
+import * as React from 'react';
+import DropdownMenu, { DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions } from './DropdownMenu';
+import DropdownToggle, { DropdownToggleProps, UseDropdownToggleMetadata } from './DropdownToggle';
+import { DropdownItemProps } from './DropdownItem';
+import { SelectCallback } from './types';
+import { Placement } from './usePopper';
+export type { DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions, DropdownToggleProps, UseDropdownToggleMetadata, DropdownItemProps, };
+export interface DropdownInjectedProps {
+    onKeyDown: React.KeyboardEventHandler;
+}
+export type ToggleEvent = React.SyntheticEvent | KeyboardEvent | MouseEvent;
+export interface ToggleMetadata {
+    source: string | undefined;
+    originalEvent: ToggleEvent | undefined;
+}
+export interface DropdownProps {
+    /**
+     * The PopperJS placement for positioning the Dropdown menu in relation to
+     * its Toggle.
+     *
+     * @default 'bottom-start'
+     */
+    placement?: Placement;
+    /**
+     * Sets the initial visibility of the Dropdown.
+     */
+    defaultShow?: boolean;
+    /**
+     * Whether or not the Dropdown is visible.
+     *
+     * @controllable onToggle
+     */
+    show?: boolean;
+    /**
+     * A callback fired when a DropdownItem has been selected.
+     */
+    onSelect?: SelectCallback;
+    /**
+     * A callback fired when the Dropdown wishes to change visibility. Called with
+     * the requested `show` value, the DOM event, and the source that fired it:
+     * `'click'`,`'keydown'`,`'rootClose'`, or `'select'`.
+     *
+     * ```ts static
+     * function(
+     *   nextShow: boolean,
+     *   meta: ToggleMetadata,
+     * ): void
+     * ```
+     *
+     * @controllable show
+     */
+    onToggle?: (nextShow: boolean, meta: ToggleMetadata) => void;
+    /**
+     * A css selector string that will return __focusable__ menu items.
+     * Selectors should be relative to the menu component:
+     * e.g. ` > li:not('.disabled')`
+     */
+    itemSelector?: string;
+    /**
+     * Controls the focus behavior for when the Dropdown is opened. Set to
+     * `true` to always focus the first menu item, `keyboard` to focus only when
+     * navigating via the keyboard, or `false` to disable completely
+     *
+     * The Default behavior is `false` **unless** the Menu has a `role="menu"`
+     * where it will default to `keyboard` to match the recommended [ARIA Authoring
+     * practices](https://www.w3.org/TR/wai-aria-practices-1.1/#menubutton).
+     */
+    focusFirstItemOnShow?: boolean | 'keyboard';
+    /**
+     * A render prop that returns the root dropdown element. The `props`
+     * argument should spread through to an element containing _both_ the
+     * menu and toggle in order to handle keyboard events for focus management.
+     *
+     * @type {Function ({
+     *   props: {
+     *     onKeyDown: (SyntheticEvent) => void,
+     *   },
+     * }) => React.Element}
+     */
+    children: React.ReactNode;
+}
+/**
+ * @displayName Dropdown
+ * @public
+ */
+declare function Dropdown({ defaultShow, show: rawShow, onSelect, onToggle: rawOnToggle, itemSelector, focusFirstItemOnShow, placement, children, }: DropdownProps): React.JSX.Element;
+declare namespace Dropdown {
+    var displayName: string;
+    var Menu: typeof DropdownMenu;
+    var Toggle: typeof DropdownToggle;
+    var Item: import("./types").DynamicRefForwardingComponent<React.ForwardRefExoticComponent<import("./Button").ButtonProps & React.RefAttributes<HTMLElement>>, DropdownItemProps>;
+}
+export default Dropdown;
diff --git a/node_modules/@restart/ui/esm/Dropdown.js b/node_modules/@restart/ui/esm/Dropdown.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ec2ba45f1fcc093ce2339d1946bcde9c9bd4bc3
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Dropdown.js
@@ -0,0 +1,195 @@
+import qsa from 'dom-helpers/querySelectorAll';
+import addEventListener from 'dom-helpers/addEventListener';
+import { useCallback, useRef, useEffect, useMemo, useContext } from 'react';
+import * as React from 'react';
+import { useUncontrolledProp } from 'uncontrollable';
+import usePrevious from '@restart/hooks/usePrevious';
+import useForceUpdate from '@restart/hooks/useForceUpdate';
+import useEventListener from '@restart/hooks/useEventListener';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import DropdownContext from './DropdownContext';
+import DropdownMenu from './DropdownMenu';
+import DropdownToggle, { isRoleMenu } from './DropdownToggle';
+import DropdownItem from './DropdownItem';
+import SelectableContext from './SelectableContext';
+import { dataAttr } from './DataKey';
+import useWindow from './useWindow';
+import { jsx as _jsx } from "react/jsx-runtime";
+function useRefWithUpdate() {
+  const forceUpdate = useForceUpdate();
+  const ref = useRef(null);
+  const attachRef = useCallback(element => {
+    ref.current = element;
+    // ensure that a menu set triggers an update for consumers
+    forceUpdate();
+  }, [forceUpdate]);
+  return [ref, attachRef];
+}
+
+/**
+ * @displayName Dropdown
+ * @public
+ */
+function Dropdown({
+  defaultShow,
+  show: rawShow,
+  onSelect,
+  onToggle: rawOnToggle,
+  itemSelector = `* [${dataAttr('dropdown-item')}]`,
+  focusFirstItemOnShow,
+  placement = 'bottom-start',
+  children
+}) {
+  const window = useWindow();
+  const [show, onToggle] = useUncontrolledProp(rawShow, defaultShow, rawOnToggle);
+
+  // We use normal refs instead of useCallbackRef in order to populate the
+  // the value as quickly as possible, otherwise the effect to focus the element
+  // may run before the state value is set
+  const [menuRef, setMenu] = useRefWithUpdate();
+  const menuElement = menuRef.current;
+  const [toggleRef, setToggle] = useRefWithUpdate();
+  const toggleElement = toggleRef.current;
+  const lastShow = usePrevious(show);
+  const lastSourceEvent = useRef(null);
+  const focusInDropdown = useRef(false);
+  const onSelectCtx = useContext(SelectableContext);
+  const toggle = useCallback((nextShow, event, source = event == null ? void 0 : event.type) => {
+    onToggle(nextShow, {
+      originalEvent: event,
+      source
+    });
+  }, [onToggle]);
+  const handleSelect = useEventCallback((key, event) => {
+    onSelect == null ? void 0 : onSelect(key, event);
+    toggle(false, event, 'select');
+    if (!event.isPropagationStopped()) {
+      onSelectCtx == null ? void 0 : onSelectCtx(key, event);
+    }
+  });
+  const context = useMemo(() => ({
+    toggle,
+    placement,
+    show,
+    menuElement,
+    toggleElement,
+    setMenu,
+    setToggle
+  }), [toggle, placement, show, menuElement, toggleElement, setMenu, setToggle]);
+  if (menuElement && lastShow && !show) {
+    focusInDropdown.current = menuElement.contains(menuElement.ownerDocument.activeElement);
+  }
+  const focusToggle = useEventCallback(() => {
+    if (toggleElement && toggleElement.focus) {
+      toggleElement.focus();
+    }
+  });
+  const maybeFocusFirst = useEventCallback(() => {
+    const type = lastSourceEvent.current;
+    let focusType = focusFirstItemOnShow;
+    if (focusType == null) {
+      focusType = menuRef.current && isRoleMenu(menuRef.current) ? 'keyboard' : false;
+    }
+    if (focusType === false || focusType === 'keyboard' && !/^key.+$/.test(type)) {
+      return;
+    }
+    const first = qsa(menuRef.current, itemSelector)[0];
+    if (first && first.focus) first.focus();
+  });
+  useEffect(() => {
+    if (show) maybeFocusFirst();else if (focusInDropdown.current) {
+      focusInDropdown.current = false;
+      focusToggle();
+    }
+    // only `show` should be changing
+  }, [show, focusInDropdown, focusToggle, maybeFocusFirst]);
+  useEffect(() => {
+    lastSourceEvent.current = null;
+  });
+  const getNextFocusedChild = (current, offset) => {
+    if (!menuRef.current) return null;
+    const items = qsa(menuRef.current, itemSelector);
+    let index = items.indexOf(current) + offset;
+    index = Math.max(0, Math.min(index, items.length));
+    return items[index];
+  };
+  useEventListener(useCallback(() => window.document, [window]), 'keydown', event => {
+    var _menuRef$current, _toggleRef$current;
+    const {
+      key
+    } = event;
+    const target = event.target;
+    const fromMenu = (_menuRef$current = menuRef.current) == null ? void 0 : _menuRef$current.contains(target);
+    const fromToggle = (_toggleRef$current = toggleRef.current) == null ? void 0 : _toggleRef$current.contains(target);
+
+    // Second only to https://github.com/twbs/bootstrap/blob/8cfbf6933b8a0146ac3fbc369f19e520bd1ebdac/js/src/dropdown.js#L400
+    // in inscrutability
+    const isInput = /input|textarea/i.test(target.tagName);
+    if (isInput && (key === ' ' || key !== 'Escape' && fromMenu || key === 'Escape' && target.type === 'search')) {
+      return;
+    }
+    if (!fromMenu && !fromToggle) {
+      return;
+    }
+    if (key === 'Tab' && (!menuRef.current || !show)) {
+      return;
+    }
+    lastSourceEvent.current = event.type;
+    const meta = {
+      originalEvent: event,
+      source: event.type
+    };
+    switch (key) {
+      case 'ArrowUp':
+        {
+          const next = getNextFocusedChild(target, -1);
+          if (next && next.focus) next.focus();
+          event.preventDefault();
+          return;
+        }
+      case 'ArrowDown':
+        event.preventDefault();
+        if (!show) {
+          onToggle(true, meta);
+        } else {
+          const next = getNextFocusedChild(target, 1);
+          if (next && next.focus) next.focus();
+        }
+        return;
+      case 'Tab':
+        // on keydown the target is the element being tabbed FROM, we need that
+        // to know if this event is relevant to this dropdown (e.g. in this menu).
+        // On `keyup` the target is the element being tagged TO which we use to check
+        // if focus has left the menu
+        addEventListener(target.ownerDocument, 'keyup', e => {
+          var _menuRef$current2;
+          if (e.key === 'Tab' && !e.target || !((_menuRef$current2 = menuRef.current) != null && _menuRef$current2.contains(e.target))) {
+            onToggle(false, meta);
+          }
+        }, {
+          once: true
+        });
+        break;
+      case 'Escape':
+        if (key === 'Escape') {
+          event.preventDefault();
+          event.stopPropagation();
+        }
+        onToggle(false, meta);
+        break;
+      default:
+    }
+  });
+  return /*#__PURE__*/_jsx(SelectableContext.Provider, {
+    value: handleSelect,
+    children: /*#__PURE__*/_jsx(DropdownContext.Provider, {
+      value: context,
+      children: children
+    })
+  });
+}
+Dropdown.displayName = 'Dropdown';
+Dropdown.Menu = DropdownMenu;
+Dropdown.Toggle = DropdownToggle;
+Dropdown.Item = DropdownItem;
+export default Dropdown;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/DropdownContext.d.ts b/node_modules/@restart/ui/esm/DropdownContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..127e54933f15e5b7376ca3f648850bfd04cf1add
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownContext.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import type { Placement } from './usePopper';
+export type DropdownContextValue = {
+    toggle: (nextShow: boolean, event?: React.SyntheticEvent | Event) => void;
+    menuElement: HTMLElement | null;
+    toggleElement: HTMLElement | null;
+    setMenu: (ref: HTMLElement | null) => void;
+    setToggle: (ref: HTMLElement | null) => void;
+    show: boolean;
+    placement?: Placement;
+};
+declare const DropdownContext: React.Context<DropdownContextValue | null>;
+export default DropdownContext;
diff --git a/node_modules/@restart/ui/esm/DropdownContext.js b/node_modules/@restart/ui/esm/DropdownContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..e98d2e9d2a23d9b7eb63ab2505f575cc6d84c680
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownContext.js
@@ -0,0 +1,3 @@
+import * as React from 'react';
+const DropdownContext = /*#__PURE__*/React.createContext(null);
+export default DropdownContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/DropdownItem.d.ts b/node_modules/@restart/ui/esm/DropdownItem.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e79126351371dc8a3de4f2011ae93b3096372491
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownItem.d.ts
@@ -0,0 +1,46 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent } from './types';
+import Button from './Button';
+export interface DropdownItemProps extends React.HTMLAttributes<HTMLElement> {
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * Highlight the menu item as active.
+     */
+    active?: boolean;
+    /**
+     * Disable the menu item, making it unselectable.
+     */
+    disabled?: boolean;
+    /**
+     * Value passed to the `onSelect` handler, useful for identifying the selected menu item.
+     */
+    eventKey?: EventKey;
+    /**
+     * HTML `href` attribute corresponding to `a.href`.
+     */
+    href?: string;
+}
+interface UseDropdownItemOptions {
+    key?: EventKey | null;
+    href?: string;
+    active?: boolean;
+    disabled?: boolean;
+    onClick?: React.MouseEventHandler;
+}
+/**
+ * Create a dropdown item. Returns a set of props for the dropdown item component
+ * including an `onClick` handler that prevents selection when the item is disabled
+ */
+export declare function useDropdownItem({ key, href, active, disabled, onClick, }: UseDropdownItemOptions): readonly [{
+    readonly onClick: (event: any) => void;
+    readonly 'aria-disabled': true | undefined;
+    readonly 'aria-selected': boolean | undefined;
+    readonly "data-rr-ui-dropdown-item": "";
+}, {
+    readonly isActive: boolean | undefined;
+}];
+declare const DropdownItem: DynamicRefForwardingComponent<typeof Button, DropdownItemProps>;
+export default DropdownItem;
diff --git a/node_modules/@restart/ui/esm/DropdownItem.js b/node_modules/@restart/ui/esm/DropdownItem.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fac09465c2dca0ebdd2dc6bd71e26afb4aa44d0
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownItem.js
@@ -0,0 +1,66 @@
+const _excluded = ["eventKey", "disabled", "onClick", "active", "as"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useContext } from 'react';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import SelectableContext, { makeEventKey } from './SelectableContext';
+import NavContext from './NavContext';
+import Button from './Button';
+import { dataAttr } from './DataKey';
+import { jsx as _jsx } from "react/jsx-runtime";
+/**
+ * Create a dropdown item. Returns a set of props for the dropdown item component
+ * including an `onClick` handler that prevents selection when the item is disabled
+ */
+export function useDropdownItem({
+  key,
+  href,
+  active,
+  disabled,
+  onClick
+}) {
+  const onSelectCtx = useContext(SelectableContext);
+  const navContext = useContext(NavContext);
+  const {
+    activeKey
+  } = navContext || {};
+  const eventKey = makeEventKey(key, href);
+  const isActive = active == null && key != null ? makeEventKey(activeKey) === eventKey : active;
+  const handleClick = useEventCallback(event => {
+    if (disabled) return;
+    onClick == null ? void 0 : onClick(event);
+    if (onSelectCtx && !event.isPropagationStopped()) {
+      onSelectCtx(eventKey, event);
+    }
+  });
+  return [{
+    onClick: handleClick,
+    'aria-disabled': disabled || undefined,
+    'aria-selected': isActive,
+    [dataAttr('dropdown-item')]: ''
+  }, {
+    isActive
+  }];
+}
+const DropdownItem = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      eventKey,
+      disabled,
+      onClick,
+      active,
+      as: Component = Button
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [dropdownItemProps] = useDropdownItem({
+    key: eventKey,
+    href: props.href,
+    disabled,
+    onClick,
+    active
+  });
+  return /*#__PURE__*/_jsx(Component, Object.assign({}, props, {
+    ref: ref
+  }, dropdownItemProps));
+});
+DropdownItem.displayName = 'DropdownItem';
+export default DropdownItem;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/DropdownMenu.d.ts b/node_modules/@restart/ui/esm/DropdownMenu.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0aa08d04b42c1d2fc9a2d1f523cc1db814c3c489
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownMenu.d.ts
@@ -0,0 +1,117 @@
+import * as React from 'react';
+import { DropdownContextValue } from './DropdownContext';
+import { UsePopperOptions, Placement, Offset, UsePopperState } from './usePopper';
+import { ClickOutsideOptions } from './useClickOutside';
+export interface UseDropdownMenuOptions {
+    /**
+     * Enables the Popper.js `flip` modifier, allowing the Dropdown to
+     * automatically adjust it's placement in case of overlap with the viewport or
+     * toggle. See the [flip docs](https://popper.js.org/docs/v2/modifiers/flip/)
+     * for more info.
+     */
+    flip?: boolean;
+    /**
+     * Controls the visible state of the menu, generally this is provided by the
+     * parent `Dropdown` component, but may also be specified as a prop directly.
+     */
+    show?: boolean;
+    /**
+     * Use the `fixed` positioning strategy in Popper. This is used if the
+     * dropdown toggle is in a fixed container.
+     */
+    fixed?: boolean;
+    /**
+     * The PopperJS placement for positioning the Dropdown menu in relation to it's Toggle.
+     * Generally this is provided by the parent `Dropdown` component,
+     * but may also be specified as a prop directly.
+     */
+    placement?: Placement;
+    /**
+     * Whether or not to use Popper for positioning the menu.
+     */
+    usePopper?: boolean;
+    /**
+     * Whether or not to add scroll and resize listeners to update menu position.
+     *
+     * See the [event listeners docs](https://popper.js.org/docs/v2/modifiers/event-listeners/)
+     * for more info.
+     */
+    enableEventListeners?: boolean;
+    /**
+     * Offset of the dropdown menu from the dropdown toggle. See the
+     * [offset docs](https://popper.js.org/docs/v2/modifiers/offset/) for more info.
+     */
+    offset?: Offset;
+    /**
+     * Override the default event used by RootCloseWrapper.
+     */
+    rootCloseEvent?: ClickOutsideOptions['clickTrigger'];
+    /**
+     * A set of popper options and props passed directly to react-popper's Popper component.
+     */
+    popperConfig?: Omit<UsePopperOptions, 'enabled' | 'placement'>;
+}
+export type UserDropdownMenuProps = Record<string, any> & {
+    ref: React.RefCallback<HTMLElement>;
+    style?: React.CSSProperties;
+    'aria-labelledby'?: string;
+};
+export type UserDropdownMenuArrowProps = Record<string, any> & {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+};
+export interface UseDropdownMenuMetadata {
+    show: boolean;
+    placement?: Placement;
+    hasShown: boolean;
+    toggle?: DropdownContextValue['toggle'];
+    popper: UsePopperState | null;
+    arrowProps: Partial<UserDropdownMenuArrowProps>;
+}
+/**
+ * @memberOf Dropdown
+ * @param {object}  options
+ * @param {boolean} options.flip Automatically adjust the menu `drop` position based on viewport edge detection
+ * @param {[number, number]} options.offset Define an offset distance between the Menu and the Toggle
+ * @param {boolean} options.show Display the menu manually, ignored in the context of a `Dropdown`
+ * @param {boolean} options.usePopper opt in/out of using PopperJS to position menus. When disabled you must position it yourself.
+ * @param {string}  options.rootCloseEvent The pointer event to listen for when determining "clicks outside" the menu for triggering a close.
+ * @param {object}  options.popperConfig Options passed to the [`usePopper`](/api/usePopper) hook.
+ */
+export declare function useDropdownMenu(options?: UseDropdownMenuOptions): readonly [UserDropdownMenuProps, UseDropdownMenuMetadata];
+export interface DropdownMenuProps extends UseDropdownMenuOptions {
+    /**
+     * A render prop that returns a Menu element. The `props`
+     * argument should be spread through to **a component that can accept a ref**.
+     *
+     * @type {Function ({
+     *   show: boolean,
+     *   close: (?SyntheticEvent) => void,
+     *   placement: Placement,
+     *   update: () => void,
+     *   forceUpdate: () => void,
+     *   props: {
+     *     ref: (?HTMLElement) => void,
+     *     style: { [string]: string | number },
+     *     aria-labelledby: ?string
+     *   },
+     *   arrowProps: {
+     *     ref: (?HTMLElement) => void,
+     *     style: { [string]: string | number },
+     *   },
+     * }) => React.Element}
+     */
+    children: (props: UserDropdownMenuProps, meta: UseDropdownMenuMetadata) => React.ReactNode;
+}
+/**
+ * Also exported as `<Dropdown.Menu>` from `Dropdown`.
+ *
+ * @displayName DropdownMenu
+ * @memberOf Dropdown
+ */
+declare function DropdownMenu({ children, usePopper: usePopperProp, ...options }: DropdownMenuProps): React.JSX.Element;
+declare namespace DropdownMenu {
+    var displayName: string;
+}
+/** @component */
+export default DropdownMenu;
diff --git a/node_modules/@restart/ui/esm/DropdownMenu.js b/node_modules/@restart/ui/esm/DropdownMenu.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe545d2d5adb8556900b658a32babc36082497cb
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownMenu.js
@@ -0,0 +1,106 @@
+const _excluded = ["children", "usePopper"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import { useContext, useRef } from 'react';
+import * as React from 'react';
+import useCallbackRef from '@restart/hooks/useCallbackRef';
+import DropdownContext from './DropdownContext';
+import usePopper from './usePopper';
+import useClickOutside from './useClickOutside';
+import mergeOptionsWithPopperConfig from './mergeOptionsWithPopperConfig';
+import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
+const noop = () => {};
+
+/**
+ * @memberOf Dropdown
+ * @param {object}  options
+ * @param {boolean} options.flip Automatically adjust the menu `drop` position based on viewport edge detection
+ * @param {[number, number]} options.offset Define an offset distance between the Menu and the Toggle
+ * @param {boolean} options.show Display the menu manually, ignored in the context of a `Dropdown`
+ * @param {boolean} options.usePopper opt in/out of using PopperJS to position menus. When disabled you must position it yourself.
+ * @param {string}  options.rootCloseEvent The pointer event to listen for when determining "clicks outside" the menu for triggering a close.
+ * @param {object}  options.popperConfig Options passed to the [`usePopper`](/api/usePopper) hook.
+ */
+export function useDropdownMenu(options = {}) {
+  const context = useContext(DropdownContext);
+  const [arrowElement, attachArrowRef] = useCallbackRef();
+  const hasShownRef = useRef(false);
+  const {
+    flip,
+    offset,
+    rootCloseEvent,
+    fixed = false,
+    placement: placementOverride,
+    popperConfig = {},
+    enableEventListeners = true,
+    usePopper: shouldUsePopper = !!context
+  } = options;
+  const show = (context == null ? void 0 : context.show) == null ? !!options.show : context.show;
+  if (show && !hasShownRef.current) {
+    hasShownRef.current = true;
+  }
+  const handleClose = e => {
+    context == null ? void 0 : context.toggle(false, e);
+  };
+  const {
+    placement,
+    setMenu,
+    menuElement,
+    toggleElement
+  } = context || {};
+  const popper = usePopper(toggleElement, menuElement, mergeOptionsWithPopperConfig({
+    placement: placementOverride || placement || 'bottom-start',
+    enabled: shouldUsePopper,
+    enableEvents: enableEventListeners == null ? show : enableEventListeners,
+    offset,
+    flip,
+    fixed,
+    arrowElement,
+    popperConfig
+  }));
+  const menuProps = Object.assign({
+    ref: setMenu || noop,
+    'aria-labelledby': toggleElement == null ? void 0 : toggleElement.id
+  }, popper.attributes.popper, {
+    style: popper.styles.popper
+  });
+  const metadata = {
+    show,
+    placement,
+    hasShown: hasShownRef.current,
+    toggle: context == null ? void 0 : context.toggle,
+    popper: shouldUsePopper ? popper : null,
+    arrowProps: shouldUsePopper ? Object.assign({
+      ref: attachArrowRef
+    }, popper.attributes.arrow, {
+      style: popper.styles.arrow
+    }) : {}
+  };
+  useClickOutside(menuElement, handleClose, {
+    clickTrigger: rootCloseEvent,
+    disabled: !show
+  });
+  return [menuProps, metadata];
+}
+/**
+ * Also exported as `<Dropdown.Menu>` from `Dropdown`.
+ *
+ * @displayName DropdownMenu
+ * @memberOf Dropdown
+ */
+function DropdownMenu(_ref) {
+  let {
+      children,
+      usePopper: usePopperProp = true
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [props, meta] = useDropdownMenu(Object.assign({}, options, {
+    usePopper: usePopperProp
+  }));
+  return /*#__PURE__*/_jsx(_Fragment, {
+    children: children(props, meta)
+  });
+}
+DropdownMenu.displayName = 'DropdownMenu';
+
+/** @component */
+export default DropdownMenu;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/DropdownToggle.d.ts b/node_modules/@restart/ui/esm/DropdownToggle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..42c38986b2b92e685a2dbb2ca369f3be4de8fdb7
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownToggle.d.ts
@@ -0,0 +1,56 @@
+import * as React from 'react';
+import { DropdownContextValue } from './DropdownContext';
+export declare const isRoleMenu: (el: HTMLElement) => boolean;
+export interface UseDropdownToggleProps {
+    id: string;
+    ref: DropdownContextValue['setToggle'];
+    onClick: React.MouseEventHandler;
+    'aria-expanded': boolean;
+    'aria-haspopup'?: true;
+}
+export interface UseDropdownToggleMetadata {
+    show: DropdownContextValue['show'];
+    toggle: DropdownContextValue['toggle'];
+}
+/**
+ * Wires up Dropdown toggle functionality, returning a set a props to attach
+ * to the element that functions as the dropdown toggle (generally a button).
+ *
+ * @memberOf Dropdown
+ */
+export declare function useDropdownToggle(): [
+    UseDropdownToggleProps,
+    UseDropdownToggleMetadata
+];
+export interface DropdownToggleProps {
+    /**
+     * A render prop that returns a Toggle element. The `props`
+     * argument should spread through to **a component that can accept a ref**. Use
+     * the `onToggle` argument to toggle the menu open or closed
+     *
+     * @type {Function ({
+     *   props: {
+     *     ref: (?HTMLElement) => void,
+     *     aria-haspopup: true
+     *     aria-expanded: boolean
+     *   },
+     *   meta: {
+     *     show: boolean,
+     *     toggle: (show: boolean) => void,
+     *   }
+     * }) => React.Element}
+     */
+    children: (props: UseDropdownToggleProps, meta: UseDropdownToggleMetadata) => React.ReactNode;
+}
+/**
+ * Also exported as `<Dropdown.Toggle>` from `Dropdown`.
+ *
+ * @displayName DropdownToggle
+ * @memberOf Dropdown
+ */
+declare function DropdownToggle({ children }: DropdownToggleProps): React.JSX.Element;
+declare namespace DropdownToggle {
+    var displayName: string;
+}
+/** @component */
+export default DropdownToggle;
diff --git a/node_modules/@restart/ui/esm/DropdownToggle.js b/node_modules/@restart/ui/esm/DropdownToggle.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6723e3076a8d80307716ecbeb7b2ba5da248e23
--- /dev/null
+++ b/node_modules/@restart/ui/esm/DropdownToggle.js
@@ -0,0 +1,64 @@
+import { useContext, useCallback } from 'react';
+import * as React from 'react';
+import { useSSRSafeId } from './ssr';
+import DropdownContext from './DropdownContext';
+import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
+export const isRoleMenu = el => {
+  var _el$getAttribute;
+  return ((_el$getAttribute = el.getAttribute('role')) == null ? void 0 : _el$getAttribute.toLowerCase()) === 'menu';
+};
+const noop = () => {};
+
+/**
+ * Wires up Dropdown toggle functionality, returning a set a props to attach
+ * to the element that functions as the dropdown toggle (generally a button).
+ *
+ * @memberOf Dropdown
+ */
+export function useDropdownToggle() {
+  const id = useSSRSafeId();
+  const {
+    show = false,
+    toggle = noop,
+    setToggle,
+    menuElement
+  } = useContext(DropdownContext) || {};
+  const handleClick = useCallback(e => {
+    toggle(!show, e);
+  }, [show, toggle]);
+  const props = {
+    id,
+    ref: setToggle || noop,
+    onClick: handleClick,
+    'aria-expanded': !!show
+  };
+
+  // This is maybe better down in an effect, but
+  // the component is going to update anyway when the menu element
+  // is set so might return new props.
+  if (menuElement && isRoleMenu(menuElement)) {
+    props['aria-haspopup'] = true;
+  }
+  return [props, {
+    show,
+    toggle
+  }];
+}
+/**
+ * Also exported as `<Dropdown.Toggle>` from `Dropdown`.
+ *
+ * @displayName DropdownToggle
+ * @memberOf Dropdown
+ */
+function DropdownToggle({
+  children
+}) {
+  const [props, meta] = useDropdownToggle();
+  return /*#__PURE__*/_jsx(_Fragment, {
+    children: children(props, meta)
+  });
+}
+DropdownToggle.displayName = 'DropdownToggle';
+
+/** @component */
+export default DropdownToggle;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/ImperativeTransition.d.ts b/node_modules/@restart/ui/esm/ImperativeTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b6a9f9b544ac051890ab79c5331dc223162e9123
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ImperativeTransition.d.ts
@@ -0,0 +1,29 @@
+import React from 'react';
+import { TransitionComponent, TransitionProps } from './types';
+export interface TransitionFunctionOptions {
+    in: boolean;
+    element: HTMLElement;
+    initial: boolean;
+    isStale: () => boolean;
+}
+export type TransitionHandler = (options: TransitionFunctionOptions) => void | Promise<void>;
+export interface UseTransitionOptions {
+    in: boolean;
+    onTransition: TransitionHandler;
+    initial?: boolean;
+}
+export declare function useTransition({ in: inProp, onTransition, }: UseTransitionOptions): React.RefObject<HTMLElement>;
+export interface ImperativeTransitionProps extends TransitionProps {
+    transition: TransitionHandler;
+    appear: true;
+    mountOnEnter: true;
+    unmountOnExit: true;
+}
+/**
+ * Adapts an imperative transition function to a subset of the RTG `<Transition>` component API.
+ *
+ * ImperativeTransition does not support mounting options or `appear` at the moment, meaning
+ * that it always acts like: `mountOnEnter={true} unmountOnExit={true} appear={true}`
+ */
+export default function ImperativeTransition({ children, in: inProp, onExited, onEntered, transition, }: ImperativeTransitionProps): React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
+export declare function renderTransition(component: TransitionComponent | undefined, runTransition: TransitionHandler | undefined, props: TransitionProps & Omit<ImperativeTransitionProps, 'transition'>): React.JSX.Element;
diff --git a/node_modules/@restart/ui/esm/ImperativeTransition.js b/node_modules/@restart/ui/esm/ImperativeTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..674fe497ea2d177f91f95233cc10c187c2ed1126
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ImperativeTransition.js
@@ -0,0 +1,93 @@
+import useMergedRefs from '@restart/hooks/useMergedRefs';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import useIsomorphicEffect from '@restart/hooks/useIsomorphicEffect';
+import React, { useRef, cloneElement, useState } from 'react';
+import NoopTransition from './NoopTransition';
+import RTGTransition from './RTGTransition';
+import { jsx as _jsx } from "react/jsx-runtime";
+export function useTransition({
+  in: inProp,
+  onTransition
+}) {
+  const ref = useRef(null);
+  const isInitialRef = useRef(true);
+  const handleTransition = useEventCallback(onTransition);
+  useIsomorphicEffect(() => {
+    if (!ref.current) {
+      return undefined;
+    }
+    let stale = false;
+    handleTransition({
+      in: inProp,
+      element: ref.current,
+      initial: isInitialRef.current,
+      isStale: () => stale
+    });
+    return () => {
+      stale = true;
+    };
+  }, [inProp, handleTransition]);
+  useIsomorphicEffect(() => {
+    isInitialRef.current = false;
+    // this is for strict mode
+    return () => {
+      isInitialRef.current = true;
+    };
+  }, []);
+  return ref;
+}
+/**
+ * Adapts an imperative transition function to a subset of the RTG `<Transition>` component API.
+ *
+ * ImperativeTransition does not support mounting options or `appear` at the moment, meaning
+ * that it always acts like: `mountOnEnter={true} unmountOnExit={true} appear={true}`
+ */
+export default function ImperativeTransition({
+  children,
+  in: inProp,
+  onExited,
+  onEntered,
+  transition
+}) {
+  const [exited, setExited] = useState(!inProp);
+
+  // TODO: I think this needs to be in an effect
+  if (inProp && exited) {
+    setExited(false);
+  }
+  const ref = useTransition({
+    in: !!inProp,
+    onTransition: options => {
+      const onFinish = () => {
+        if (options.isStale()) return;
+        if (options.in) {
+          onEntered == null ? void 0 : onEntered(options.element, options.initial);
+        } else {
+          setExited(true);
+          onExited == null ? void 0 : onExited(options.element);
+        }
+      };
+      Promise.resolve(transition(options)).then(onFinish, error => {
+        if (!options.in) setExited(true);
+        throw error;
+      });
+    }
+  });
+  const combinedRef = useMergedRefs(ref, children.ref);
+  return exited && !inProp ? null : /*#__PURE__*/cloneElement(children, {
+    ref: combinedRef
+  });
+}
+export function renderTransition(component, runTransition, props) {
+  if (component) {
+    return /*#__PURE__*/_jsx(RTGTransition, Object.assign({}, props, {
+      component: component
+    }));
+  }
+  if (runTransition) {
+    return /*#__PURE__*/_jsx(ImperativeTransition, Object.assign({}, props, {
+      transition: runTransition
+    }));
+  }
+  return /*#__PURE__*/_jsx(NoopTransition, Object.assign({}, props));
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Modal.d.ts b/node_modules/@restart/ui/esm/Modal.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4a06a5b4f7399b27bdb8f9a554dcda37e61478be
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Modal.d.ts
@@ -0,0 +1,153 @@
+import * as React from 'react';
+import ModalManager from './ModalManager';
+import { DOMContainer } from './useWaitForDOMRef';
+import { TransitionCallbacks } from './types';
+import { TransitionHandler } from './ImperativeTransition';
+export interface ModalTransitionProps extends TransitionCallbacks {
+    in: boolean;
+    appear?: boolean;
+    unmountOnExit?: boolean;
+    children: React.ReactElement;
+}
+export type ModalTransitionComponent = React.ComponentType<ModalTransitionProps>;
+export interface RenderModalDialogProps {
+    style: React.CSSProperties | undefined;
+    className: string | undefined;
+    tabIndex: number;
+    role: string;
+    ref: React.RefCallback<Element>;
+    'aria-modal': boolean | undefined;
+}
+export interface RenderModalBackdropProps {
+    ref: React.RefCallback<Element>;
+    onClick: (event: React.SyntheticEvent) => void;
+}
+export interface BaseModalProps extends TransitionCallbacks {
+    children?: React.ReactElement;
+    role?: string;
+    style?: React.CSSProperties;
+    className?: string;
+    /**
+     * Set the visibility of the Modal
+     */
+    show?: boolean;
+    /**
+     * A DOM element, a `ref` to an element, or function that returns either. The Modal is appended to it's `container` element.
+     *
+     */
+    container?: DOMContainer;
+    /**
+     * A callback fired when the Modal is opening.
+     */
+    onShow?: () => void;
+    /**
+     * A callback fired when either the backdrop is clicked, or the escape key is pressed.
+     *
+     * The `onHide` callback only signals intent from the Modal,
+     * you must actually set the `show` prop to `false` for the Modal to close.
+     */
+    onHide?: () => void;
+    /**
+     * A ModalManager instance used to track and manage the state of open
+     * Modals. Useful when customizing how modals interact within a container
+     */
+    manager?: ModalManager;
+    /**
+     * Include a backdrop component. A `static`backdrop
+     * will not trigger a Modal onHide when clicked.
+     */
+    backdrop?: true | false | 'static';
+    /**
+     * A function that returns the dialog component. Useful for custom
+     * rendering. **Note:** the component should make sure to apply the provided ref.
+     *
+     * ```js static
+     * renderDialog={props => <MyDialog {...props} />}
+     * ```
+     */
+    renderDialog?: (props: RenderModalDialogProps) => React.ReactNode;
+    /**
+     * A function that returns a backdrop component. Useful for custom
+     * backdrop rendering.
+     *
+     * ```js
+     *  renderBackdrop={props => <MyBackdrop {...props} />}
+     * ```
+     */
+    renderBackdrop?: (props: RenderModalBackdropProps) => React.ReactNode;
+    /**
+     * A callback fired when the escape key, if specified in `keyboard`, is pressed.
+     *
+     * If preventDefault() is called on the keyboard event, closing the modal will be cancelled.
+     */
+    onEscapeKeyDown?: (e: KeyboardEvent) => void;
+    /**
+     * A callback fired when the backdrop, if specified, is clicked.
+     */
+    onBackdropClick?: (e: React.SyntheticEvent) => void;
+    /**
+     * Close the modal when escape key is pressed
+     */
+    keyboard?: boolean;
+    /**
+     * A `react-transition-group` `<Transition/>` component used
+     * to control animations for the dialog component.
+     */
+    transition?: ModalTransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and dialog element.
+     * Should return a promise when the transition is complete
+     */
+    runTransition?: TransitionHandler;
+    /**
+     * A `react-transition-group` `<Transition/>` component used
+     * to control animations for the backdrop components.
+     */
+    backdropTransition?: ModalTransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and backdrop element.
+     * Should return a promise when the transition is complete
+     */
+    runBackdropTransition?: TransitionHandler;
+    /**
+     * When `true` The modal will automatically shift focus to itself when it opens, and
+     * replace it to the last focused element when it closes. This also
+     * works correctly with any Modal children that have the `autoFocus` prop.
+     *
+     * Generally this should never be set to `false` as it makes the Modal less
+     * accessible to assistive technologies, like screen readers.
+     */
+    autoFocus?: boolean;
+    /**
+     * When `true` The modal will prevent focus from leaving the Modal while open.
+     *
+     * Generally this should never be set to `false` as it makes the Modal less
+     * accessible to assistive technologies, like screen readers.
+     */
+    enforceFocus?: boolean;
+    /**
+     * When `true` The modal will restore focus to previously focused element once
+     * modal is hidden
+     */
+    restoreFocus?: boolean;
+    /**
+     * Options passed to focus function when `restoreFocus` is set to `true`
+     *
+     * @link  https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Parameters
+     */
+    restoreFocusOptions?: {
+        preventScroll: boolean;
+    };
+}
+export interface ModalProps extends BaseModalProps {
+    [other: string]: any;
+}
+export interface ModalHandle {
+    dialog: HTMLElement | null;
+    backdrop: HTMLElement | null;
+    isTopModal: () => boolean;
+}
+declare const _default: React.ForwardRefExoticComponent<ModalProps & React.RefAttributes<ModalHandle>> & {
+    Manager: typeof ModalManager;
+};
+export default _default;
diff --git a/node_modules/@restart/ui/esm/Modal.js b/node_modules/@restart/ui/esm/Modal.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb72f44b7871e4b43db2c4baca21987c2dee3c31
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Modal.js
@@ -0,0 +1,245 @@
+const _excluded = ["show", "role", "className", "style", "children", "backdrop", "keyboard", "onBackdropClick", "onEscapeKeyDown", "transition", "runTransition", "backdropTransition", "runBackdropTransition", "autoFocus", "enforceFocus", "restoreFocus", "restoreFocusOptions", "renderDialog", "renderBackdrop", "manager", "container", "onShow", "onHide", "onExit", "onExited", "onExiting", "onEnter", "onEntering", "onEntered"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+/* eslint-disable @typescript-eslint/no-use-before-define, react/prop-types */
+
+import activeElement from 'dom-helpers/activeElement';
+import contains from 'dom-helpers/contains';
+import canUseDOM from 'dom-helpers/canUseDOM';
+import listen from 'dom-helpers/listen';
+import { useState, useRef, useCallback, useImperativeHandle, forwardRef, useEffect } from 'react';
+import * as React from 'react';
+import ReactDOM from 'react-dom';
+import useMounted from '@restart/hooks/useMounted';
+import useWillUnmount from '@restart/hooks/useWillUnmount';
+import usePrevious from '@restart/hooks/usePrevious';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import ModalManager from './ModalManager';
+import useWaitForDOMRef from './useWaitForDOMRef';
+import useWindow from './useWindow';
+import { renderTransition } from './ImperativeTransition';
+import { isEscKey } from './utils';
+import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
+let manager;
+
+/*
+  Modal props are split into a version with and without index signature so that you can fully use them in another projects
+  This is due to Typescript not playing well with index signatures e.g. when using Omit
+*/
+
+function getManager(window) {
+  if (!manager) manager = new ModalManager({
+    ownerDocument: window == null ? void 0 : window.document
+  });
+  return manager;
+}
+function useModalManager(provided) {
+  const window = useWindow();
+  const modalManager = provided || getManager(window);
+  const modal = useRef({
+    dialog: null,
+    backdrop: null
+  });
+  return Object.assign(modal.current, {
+    add: () => modalManager.add(modal.current),
+    remove: () => modalManager.remove(modal.current),
+    isTopModal: () => modalManager.isTopModal(modal.current),
+    setDialogRef: useCallback(ref => {
+      modal.current.dialog = ref;
+    }, []),
+    setBackdropRef: useCallback(ref => {
+      modal.current.backdrop = ref;
+    }, [])
+  });
+}
+const Modal = /*#__PURE__*/forwardRef((_ref, ref) => {
+  let {
+      show = false,
+      role = 'dialog',
+      className,
+      style,
+      children,
+      backdrop = true,
+      keyboard = true,
+      onBackdropClick,
+      onEscapeKeyDown,
+      transition,
+      runTransition,
+      backdropTransition,
+      runBackdropTransition,
+      autoFocus = true,
+      enforceFocus = true,
+      restoreFocus = true,
+      restoreFocusOptions,
+      renderDialog,
+      renderBackdrop = props => /*#__PURE__*/_jsx("div", Object.assign({}, props)),
+      manager: providedManager,
+      container: containerRef,
+      onShow,
+      onHide = () => {},
+      onExit,
+      onExited,
+      onExiting,
+      onEnter,
+      onEntering,
+      onEntered
+    } = _ref,
+    rest = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const ownerWindow = useWindow();
+  const container = useWaitForDOMRef(containerRef);
+  const modal = useModalManager(providedManager);
+  const isMounted = useMounted();
+  const prevShow = usePrevious(show);
+  const [exited, setExited] = useState(!show);
+  const lastFocusRef = useRef(null);
+  useImperativeHandle(ref, () => modal, [modal]);
+  if (canUseDOM && !prevShow && show) {
+    lastFocusRef.current = activeElement(ownerWindow == null ? void 0 : ownerWindow.document);
+  }
+
+  // TODO: I think this needs to be in an effect
+  if (show && exited) {
+    setExited(false);
+  }
+  const handleShow = useEventCallback(() => {
+    modal.add();
+    removeKeydownListenerRef.current = listen(document, 'keydown', handleDocumentKeyDown);
+    removeFocusListenerRef.current = listen(document, 'focus',
+    // the timeout is necessary b/c this will run before the new modal is mounted
+    // and so steals focus from it
+    () => setTimeout(handleEnforceFocus), true);
+    if (onShow) {
+      onShow();
+    }
+
+    // autofocus after onShow to not trigger a focus event for previous
+    // modals before this one is shown.
+    if (autoFocus) {
+      var _modal$dialog$ownerDo, _modal$dialog;
+      const currentActiveElement = activeElement((_modal$dialog$ownerDo = (_modal$dialog = modal.dialog) == null ? void 0 : _modal$dialog.ownerDocument) != null ? _modal$dialog$ownerDo : ownerWindow == null ? void 0 : ownerWindow.document);
+      if (modal.dialog && currentActiveElement && !contains(modal.dialog, currentActiveElement)) {
+        lastFocusRef.current = currentActiveElement;
+        modal.dialog.focus();
+      }
+    }
+  });
+  const handleHide = useEventCallback(() => {
+    modal.remove();
+    removeKeydownListenerRef.current == null ? void 0 : removeKeydownListenerRef.current();
+    removeFocusListenerRef.current == null ? void 0 : removeFocusListenerRef.current();
+    if (restoreFocus) {
+      var _lastFocusRef$current;
+      // Support: <=IE11 doesn't support `focus()` on svg elements (RB: #917)
+      (_lastFocusRef$current = lastFocusRef.current) == null ? void 0 : _lastFocusRef$current.focus == null ? void 0 : _lastFocusRef$current.focus(restoreFocusOptions);
+      lastFocusRef.current = null;
+    }
+  });
+
+  // TODO: try and combine these effects: https://github.com/react-bootstrap/react-overlays/pull/794#discussion_r409954120
+
+  // Show logic when:
+  //  - show is `true` _and_ `container` has resolved
+  useEffect(() => {
+    if (!show || !container) return;
+    handleShow();
+  }, [show, container, /* should never change: */handleShow]);
+
+  // Hide cleanup logic when:
+  //  - `exited` switches to true
+  //  - component unmounts;
+  useEffect(() => {
+    if (!exited) return;
+    handleHide();
+  }, [exited, handleHide]);
+  useWillUnmount(() => {
+    handleHide();
+  });
+
+  // --------------------------------
+
+  const handleEnforceFocus = useEventCallback(() => {
+    if (!enforceFocus || !isMounted() || !modal.isTopModal()) {
+      return;
+    }
+    const currentActiveElement = activeElement(ownerWindow == null ? void 0 : ownerWindow.document);
+    if (modal.dialog && currentActiveElement && !contains(modal.dialog, currentActiveElement)) {
+      modal.dialog.focus();
+    }
+  });
+  const handleBackdropClick = useEventCallback(e => {
+    if (e.target !== e.currentTarget) {
+      return;
+    }
+    onBackdropClick == null ? void 0 : onBackdropClick(e);
+    if (backdrop === true) {
+      onHide();
+    }
+  });
+  const handleDocumentKeyDown = useEventCallback(e => {
+    if (keyboard && isEscKey(e) && modal.isTopModal()) {
+      onEscapeKeyDown == null ? void 0 : onEscapeKeyDown(e);
+      if (!e.defaultPrevented) {
+        onHide();
+      }
+    }
+  });
+  const removeFocusListenerRef = useRef();
+  const removeKeydownListenerRef = useRef();
+  const handleHidden = (...args) => {
+    setExited(true);
+    onExited == null ? void 0 : onExited(...args);
+  };
+  if (!container) {
+    return null;
+  }
+  const dialogProps = Object.assign({
+    role,
+    ref: modal.setDialogRef,
+    // apparently only works on the dialog role element
+    'aria-modal': role === 'dialog' ? true : undefined
+  }, rest, {
+    style,
+    className,
+    tabIndex: -1
+  });
+  let dialog = renderDialog ? renderDialog(dialogProps) : /*#__PURE__*/_jsx("div", Object.assign({}, dialogProps, {
+    children: /*#__PURE__*/React.cloneElement(children, {
+      role: 'document'
+    })
+  }));
+  dialog = renderTransition(transition, runTransition, {
+    unmountOnExit: true,
+    mountOnEnter: true,
+    appear: true,
+    in: !!show,
+    onExit,
+    onExiting,
+    onExited: handleHidden,
+    onEnter,
+    onEntering,
+    onEntered,
+    children: dialog
+  });
+  let backdropElement = null;
+  if (backdrop) {
+    backdropElement = renderBackdrop({
+      ref: modal.setBackdropRef,
+      onClick: handleBackdropClick
+    });
+    backdropElement = renderTransition(backdropTransition, runBackdropTransition, {
+      in: !!show,
+      appear: true,
+      mountOnEnter: true,
+      unmountOnExit: true,
+      children: backdropElement
+    });
+  }
+  return /*#__PURE__*/_jsx(_Fragment, {
+    children: /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/_jsxs(_Fragment, {
+      children: [backdropElement, dialog]
+    }), container)
+  });
+});
+Modal.displayName = 'Modal';
+export default Object.assign(Modal, {
+  Manager: ModalManager
+});
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/ModalManager.d.ts b/node_modules/@restart/ui/esm/ModalManager.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..571f569fc04a5283e59b170a5311aed841bf9413
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ModalManager.d.ts
@@ -0,0 +1,38 @@
+export interface ModalInstance {
+    dialog: Element;
+    backdrop: Element;
+}
+export interface ModalManagerOptions {
+    ownerDocument?: Document;
+    handleContainerOverflow?: boolean;
+    isRTL?: boolean;
+}
+export type ContainerState = {
+    scrollBarWidth: number;
+    style: Record<string, any>;
+    [key: string]: any;
+};
+export declare const OPEN_DATA_ATTRIBUTE: "data-rr-ui-modal-open";
+/**
+ * Manages a stack of Modals as well as ensuring
+ * body scrolling is is disabled and padding accounted for
+ */
+declare class ModalManager {
+    readonly handleContainerOverflow: boolean;
+    readonly isRTL: boolean;
+    readonly modals: ModalInstance[];
+    protected state: ContainerState;
+    protected ownerDocument: Document | undefined;
+    constructor({ ownerDocument, handleContainerOverflow, isRTL, }?: ModalManagerOptions);
+    getScrollbarWidth(): number;
+    getElement(): HTMLElement;
+    setModalAttributes(_modal: ModalInstance): void;
+    removeModalAttributes(_modal: ModalInstance): void;
+    setContainerStyle(containerState: ContainerState): void;
+    reset(): void;
+    removeContainerStyle(containerState: ContainerState): void;
+    add(modal: ModalInstance): number;
+    remove(modal: ModalInstance): void;
+    isTopModal(modal: ModalInstance): boolean;
+}
+export default ModalManager;
diff --git a/node_modules/@restart/ui/esm/ModalManager.js b/node_modules/@restart/ui/esm/ModalManager.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0a3e03c7fb31f7a67cd76bb493abd5a93175193
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ModalManager.js
@@ -0,0 +1,100 @@
+import css from 'dom-helpers/css';
+import { dataAttr } from './DataKey';
+import getBodyScrollbarWidth from './getScrollbarWidth';
+export const OPEN_DATA_ATTRIBUTE = dataAttr('modal-open');
+
+/**
+ * Manages a stack of Modals as well as ensuring
+ * body scrolling is is disabled and padding accounted for
+ */
+class ModalManager {
+  constructor({
+    ownerDocument,
+    handleContainerOverflow = true,
+    isRTL = false
+  } = {}) {
+    this.handleContainerOverflow = handleContainerOverflow;
+    this.isRTL = isRTL;
+    this.modals = [];
+    this.ownerDocument = ownerDocument;
+  }
+  getScrollbarWidth() {
+    return getBodyScrollbarWidth(this.ownerDocument);
+  }
+  getElement() {
+    return (this.ownerDocument || document).body;
+  }
+  setModalAttributes(_modal) {
+    // For overriding
+  }
+  removeModalAttributes(_modal) {
+    // For overriding
+  }
+  setContainerStyle(containerState) {
+    const style = {
+      overflow: 'hidden'
+    };
+
+    // we are only interested in the actual `style` here
+    // because we will override it
+    const paddingProp = this.isRTL ? 'paddingLeft' : 'paddingRight';
+    const container = this.getElement();
+    containerState.style = {
+      overflow: container.style.overflow,
+      [paddingProp]: container.style[paddingProp]
+    };
+    if (containerState.scrollBarWidth) {
+      // use computed style, here to get the real padding
+      // to add our scrollbar width
+      style[paddingProp] = `${parseInt(css(container, paddingProp) || '0', 10) + containerState.scrollBarWidth}px`;
+    }
+    container.setAttribute(OPEN_DATA_ATTRIBUTE, '');
+    css(container, style);
+  }
+  reset() {
+    [...this.modals].forEach(m => this.remove(m));
+  }
+  removeContainerStyle(containerState) {
+    const container = this.getElement();
+    container.removeAttribute(OPEN_DATA_ATTRIBUTE);
+    Object.assign(container.style, containerState.style);
+  }
+  add(modal) {
+    let modalIdx = this.modals.indexOf(modal);
+    if (modalIdx !== -1) {
+      return modalIdx;
+    }
+    modalIdx = this.modals.length;
+    this.modals.push(modal);
+    this.setModalAttributes(modal);
+    if (modalIdx !== 0) {
+      return modalIdx;
+    }
+    this.state = {
+      scrollBarWidth: this.getScrollbarWidth(),
+      style: {}
+    };
+    if (this.handleContainerOverflow) {
+      this.setContainerStyle(this.state);
+    }
+    return modalIdx;
+  }
+  remove(modal) {
+    const modalIdx = this.modals.indexOf(modal);
+    if (modalIdx === -1) {
+      return;
+    }
+    this.modals.splice(modalIdx, 1);
+
+    // if that was the last modal in a container,
+    // clean up the container
+    if (!this.modals.length && this.handleContainerOverflow) {
+      this.removeContainerStyle(this.state);
+    }
+    this.removeModalAttributes(modal);
+  }
+  isTopModal(modal) {
+    return !!this.modals.length && this.modals[this.modals.length - 1] === modal;
+  }
+}
+export default ModalManager;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Nav.d.ts b/node_modules/@restart/ui/esm/Nav.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ac77d4b3bbba3568190f40d6d5249ae95c1dc7e6
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Nav.d.ts
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent, SelectCallback } from './types';
+import { UseNavItemOptions, NavItemProps } from './NavItem';
+export type { UseNavItemOptions, NavItemProps };
+export interface NavProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onSelect'> {
+    /**
+     * Key for the currently active NavItem.
+     */
+    activeKey?: EventKey;
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * A callback fired when a NavItem has been selected.
+     */
+    onSelect?: SelectCallback;
+}
+declare const _default: DynamicRefForwardingComponent<"div", NavProps> & {
+    Item: DynamicRefForwardingComponent<React.ForwardRefExoticComponent<import("./Button").ButtonProps & React.RefAttributes<HTMLElement>>, NavItemProps>;
+};
+export default _default;
diff --git a/node_modules/@restart/ui/esm/Nav.js b/node_modules/@restart/ui/esm/Nav.js
new file mode 100644
index 0000000000000000000000000000000000000000..14162c68507abf41c2888824841f5250c213944c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Nav.js
@@ -0,0 +1,113 @@
+const _excluded = ["as", "onSelect", "activeKey", "role", "onKeyDown"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import qsa from 'dom-helpers/querySelectorAll';
+import * as React from 'react';
+import { useContext, useEffect, useRef } from 'react';
+import useForceUpdate from '@restart/hooks/useForceUpdate';
+import useMergedRefs from '@restart/hooks/useMergedRefs';
+import NavContext from './NavContext';
+import SelectableContext, { makeEventKey } from './SelectableContext';
+import TabContext from './TabContext';
+import { dataAttr, dataProp } from './DataKey';
+import NavItem from './NavItem';
+import { jsx as _jsx } from "react/jsx-runtime";
+// eslint-disable-next-line @typescript-eslint/no-empty-function
+const noop = () => {};
+const EVENT_KEY_ATTR = dataAttr('event-key');
+const Nav = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      // Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
+      as: Component = 'div',
+      onSelect,
+      activeKey,
+      role,
+      onKeyDown
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  // A ref and forceUpdate for refocus, b/c we only want to trigger when needed
+  // and don't want to reset the set in the effect
+  const forceUpdate = useForceUpdate();
+  const needsRefocusRef = useRef(false);
+  const parentOnSelect = useContext(SelectableContext);
+  const tabContext = useContext(TabContext);
+  let getControlledId, getControllerId;
+  if (tabContext) {
+    role = role || 'tablist';
+    activeKey = tabContext.activeKey;
+    // TODO: do we need to duplicate these?
+    getControlledId = tabContext.getControlledId;
+    getControllerId = tabContext.getControllerId;
+  }
+  const listNode = useRef(null);
+  const getNextActiveTab = offset => {
+    const currentListNode = listNode.current;
+    if (!currentListNode) return null;
+    const items = qsa(currentListNode, `[${EVENT_KEY_ATTR}]:not([aria-disabled=true])`);
+    const activeChild = currentListNode.querySelector('[aria-selected=true]');
+    if (!activeChild || activeChild !== document.activeElement) return null;
+    const index = items.indexOf(activeChild);
+    if (index === -1) return null;
+    let nextIndex = index + offset;
+    if (nextIndex >= items.length) nextIndex = 0;
+    if (nextIndex < 0) nextIndex = items.length - 1;
+    return items[nextIndex];
+  };
+  const handleSelect = (key, event) => {
+    if (key == null) return;
+    onSelect == null ? void 0 : onSelect(key, event);
+    parentOnSelect == null ? void 0 : parentOnSelect(key, event);
+  };
+  const handleKeyDown = event => {
+    onKeyDown == null ? void 0 : onKeyDown(event);
+    if (!tabContext) {
+      return;
+    }
+    let nextActiveChild;
+    switch (event.key) {
+      case 'ArrowLeft':
+      case 'ArrowUp':
+        nextActiveChild = getNextActiveTab(-1);
+        break;
+      case 'ArrowRight':
+      case 'ArrowDown':
+        nextActiveChild = getNextActiveTab(1);
+        break;
+      default:
+        return;
+    }
+    if (!nextActiveChild) return;
+    event.preventDefault();
+    handleSelect(nextActiveChild.dataset[dataProp('EventKey')] || null, event);
+    needsRefocusRef.current = true;
+    forceUpdate();
+  };
+  useEffect(() => {
+    if (listNode.current && needsRefocusRef.current) {
+      const activeChild = listNode.current.querySelector(`[${EVENT_KEY_ATTR}][aria-selected=true]`);
+      activeChild == null ? void 0 : activeChild.focus();
+    }
+    needsRefocusRef.current = false;
+  });
+  const mergedRef = useMergedRefs(ref, listNode);
+  return /*#__PURE__*/_jsx(SelectableContext.Provider, {
+    value: handleSelect,
+    children: /*#__PURE__*/_jsx(NavContext.Provider, {
+      value: {
+        role,
+        // used by NavLink to determine it's role
+        activeKey: makeEventKey(activeKey),
+        getControlledId: getControlledId || noop,
+        getControllerId: getControllerId || noop
+      },
+      children: /*#__PURE__*/_jsx(Component, Object.assign({}, props, {
+        onKeyDown: handleKeyDown,
+        ref: mergedRef,
+        role: role
+      }))
+    })
+  });
+});
+Nav.displayName = 'Nav';
+export default Object.assign(Nav, {
+  Item: NavItem
+});
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/NavContext.d.ts b/node_modules/@restart/ui/esm/NavContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d9de823c02b4e3bd2472f1f7e25e4d33677e0e5d
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NavContext.d.ts
@@ -0,0 +1,10 @@
+import * as React from 'react';
+import { EventKey } from './types';
+interface NavContextType {
+    role?: string;
+    activeKey: EventKey | null;
+    getControlledId: (key: EventKey | null) => string;
+    getControllerId: (key: EventKey | null) => string;
+}
+declare const NavContext: React.Context<NavContextType | null>;
+export default NavContext;
diff --git a/node_modules/@restart/ui/esm/NavContext.js b/node_modules/@restart/ui/esm/NavContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..4703702fa2f219e5ccb6a583f241b78c968ef516
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NavContext.js
@@ -0,0 +1,4 @@
+import * as React from 'react';
+const NavContext = /*#__PURE__*/React.createContext(null);
+NavContext.displayName = 'NavContext';
+export default NavContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/NavItem.d.ts b/node_modules/@restart/ui/esm/NavItem.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a68348cf6e0a4b354c50b07f13e9854fbecacc35
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NavItem.d.ts
@@ -0,0 +1,38 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent } from './types';
+import Button from './Button';
+export interface NavItemProps extends React.HTMLAttributes<HTMLElement> {
+    /**
+     * Highlight the NavItem as active.
+     */
+    active?: boolean;
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * Disable the NavItem, making it unselectable.
+     */
+    disabled?: boolean;
+    /**
+     * Value passed to the `onSelect` handler, useful for identifying the selected NavItem.
+     */
+    eventKey?: EventKey;
+    /**
+     * HTML `href` attribute corresponding to `a.href`.
+     */
+    href?: string;
+}
+export interface UseNavItemOptions {
+    key?: string | null;
+    onClick?: React.MouseEventHandler;
+    active?: boolean;
+    disabled?: boolean;
+    id?: string;
+    role?: string;
+}
+export declare function useNavItem({ key, onClick, active, id, role, disabled, }: UseNavItemOptions): readonly [any, {
+    readonly isActive: boolean | undefined;
+}];
+declare const NavItem: DynamicRefForwardingComponent<typeof Button, NavItemProps>;
+export default NavItem;
diff --git a/node_modules/@restart/ui/esm/NavItem.js b/node_modules/@restart/ui/esm/NavItem.js
new file mode 100644
index 0000000000000000000000000000000000000000..2496e98ddbad961705cf1fa032070428f0ce868b
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NavItem.js
@@ -0,0 +1,91 @@
+const _excluded = ["as", "active", "eventKey"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useContext } from 'react';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import NavContext from './NavContext';
+import SelectableContext, { makeEventKey } from './SelectableContext';
+import Button from './Button';
+import { dataAttr } from './DataKey';
+import TabContext from './TabContext';
+import { jsx as _jsx } from "react/jsx-runtime";
+export function useNavItem({
+  key,
+  onClick,
+  active,
+  id,
+  role,
+  disabled
+}) {
+  const parentOnSelect = useContext(SelectableContext);
+  const navContext = useContext(NavContext);
+  const tabContext = useContext(TabContext);
+  let isActive = active;
+  const props = {
+    role
+  };
+  if (navContext) {
+    if (!role && navContext.role === 'tablist') props.role = 'tab';
+    const contextControllerId = navContext.getControllerId(key != null ? key : null);
+    const contextControlledId = navContext.getControlledId(key != null ? key : null);
+
+    // @ts-ignore
+    props[dataAttr('event-key')] = key;
+    props.id = contextControllerId || id;
+    isActive = active == null && key != null ? navContext.activeKey === key : active;
+
+    /**
+     * Simplified scenario for `mountOnEnter`.
+     *
+     * While it would make sense to keep 'aria-controls' for tabs that have been mounted at least
+     * once, it would also complicate the code quite a bit, for very little gain.
+     * The following implementation is probably good enough.
+     *
+     * @see https://github.com/react-restart/ui/pull/40#issuecomment-1009971561
+     */
+    if (isActive || !(tabContext != null && tabContext.unmountOnExit) && !(tabContext != null && tabContext.mountOnEnter)) props['aria-controls'] = contextControlledId;
+  }
+  if (props.role === 'tab') {
+    props['aria-selected'] = isActive;
+    if (!isActive) {
+      props.tabIndex = -1;
+    }
+    if (disabled) {
+      props.tabIndex = -1;
+      props['aria-disabled'] = true;
+    }
+  }
+  props.onClick = useEventCallback(e => {
+    if (disabled) return;
+    onClick == null ? void 0 : onClick(e);
+    if (key == null) {
+      return;
+    }
+    if (parentOnSelect && !e.isPropagationStopped()) {
+      parentOnSelect(key, e);
+    }
+  });
+  return [props, {
+    isActive
+  }];
+}
+const NavItem = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      as: Component = Button,
+      active,
+      eventKey
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [props, meta] = useNavItem(Object.assign({
+    key: makeEventKey(eventKey, options.href),
+    active
+  }, options));
+
+  // @ts-ignore
+  props[dataAttr('active')] = meta.isActive;
+  return /*#__PURE__*/_jsx(Component, Object.assign({}, options, props, {
+    ref: ref
+  }));
+});
+NavItem.displayName = 'NavItem';
+export default NavItem;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/NoopTransition.d.ts b/node_modules/@restart/ui/esm/NoopTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11414672704e02ea0fe5b3aefdd597c302a3fa80
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NoopTransition.d.ts
@@ -0,0 +1,4 @@
+/// <reference types="react" />
+import { TransitionProps } from './types';
+declare function NoopTransition({ children, in: inProp, onExited, mountOnEnter, unmountOnExit, }: TransitionProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
+export default NoopTransition;
diff --git a/node_modules/@restart/ui/esm/NoopTransition.js b/node_modules/@restart/ui/esm/NoopTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..2f509a1b511542e322e6cb6935067b1ff08adf2e
--- /dev/null
+++ b/node_modules/@restart/ui/esm/NoopTransition.js
@@ -0,0 +1,32 @@
+import useEventCallback from '@restart/hooks/useEventCallback';
+import useMergedRefs from '@restart/hooks/useMergedRefs';
+import { cloneElement, useEffect, useRef } from 'react';
+function NoopTransition({
+  children,
+  in: inProp,
+  onExited,
+  mountOnEnter,
+  unmountOnExit
+}) {
+  const ref = useRef(null);
+  const hasEnteredRef = useRef(inProp);
+  const handleExited = useEventCallback(onExited);
+  useEffect(() => {
+    if (inProp) hasEnteredRef.current = true;else {
+      handleExited(ref.current);
+    }
+  }, [inProp, handleExited]);
+  const combinedRef = useMergedRefs(ref, children.ref);
+  const child = /*#__PURE__*/cloneElement(children, {
+    ref: combinedRef
+  });
+  if (inProp) return child;
+  if (unmountOnExit) {
+    return null;
+  }
+  if (!hasEnteredRef.current && mountOnEnter) {
+    return null;
+  }
+  return child;
+}
+export default NoopTransition;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Overlay.d.ts b/node_modules/@restart/ui/esm/Overlay.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..efea2e62f04f15881b25d5da9eb225f681ce514e
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Overlay.d.ts
@@ -0,0 +1,99 @@
+import * as React from 'react';
+import { Offset, Placement, UsePopperOptions, UsePopperState, VirtualElement } from './usePopper';
+import { RootCloseOptions } from './useRootClose';
+import { DOMContainer } from './useWaitForDOMRef';
+import { TransitionCallbacks, TransitionComponent } from './types';
+import { TransitionHandler } from './ImperativeTransition';
+export interface OverlayArrowProps extends Record<string, any> {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+}
+export interface OverlayMetadata {
+    show: boolean;
+    placement: Placement | undefined;
+    popper: UsePopperState | null;
+    arrowProps: Partial<OverlayArrowProps>;
+}
+export interface OverlayInjectedProps extends Record<string, any> {
+    ref: React.RefCallback<HTMLElement>;
+    style: React.CSSProperties;
+    'aria-labelledby'?: string;
+}
+export interface OverlayProps extends TransitionCallbacks {
+    /**
+     * Enables the Popper.js `flip` modifier, allowing the Overlay to
+     * automatically adjust it's placement in case of overlap with the viewport or toggle.
+     * Refer to the [flip docs](https://popper.js.org/popper-documentation.html#modifiers..flip.enabled) for more info
+     */
+    flip?: boolean;
+    /** Specify where the overlay element is positioned in relation to the target element */
+    placement?: Placement;
+    /**
+     * Control offset of the overlay to the reference element.
+     * A convenience shortcut to setting `popperConfig.modfiers.offset`
+     */
+    offset?: Offset;
+    /**
+     * Control how much space there is between the edge of the boundary element and overlay.
+     * A convenience shortcut to setting `popperConfig.modfiers.preventOverflow.padding`
+     */
+    containerPadding?: number;
+    /**
+     * A set of popper options and props passed directly to react-popper's Popper component.
+     */
+    popperConfig?: Omit<UsePopperOptions, 'placement'>;
+    /**
+     * A DOM Element, [Virtual Element](https://popper.js.org/docs/v2/virtual-elements/), Ref to an element, or
+     * function that returns either. The `target` element is where the overlay is positioned relative to.
+     */
+    container?: DOMContainer;
+    /**
+     * A DOM Element, Ref to an element, or function that returns either. The `target` element is where
+     * the overlay is positioned relative to.
+     */
+    target: DOMContainer<HTMLElement | VirtualElement>;
+    /**
+     * Set the visibility of the Overlay
+     */
+    show?: boolean;
+    /**
+     * A `react-transition-group` `<Transition/>` component
+     * used to animate the overlay as it changes visibility.
+     */
+    transition?: TransitionComponent;
+    /**
+     * A transition handler, called with the `show` state and overlay element.
+     * Should return a promise when the transition is complete
+     */
+    runTransition?: TransitionHandler;
+    /**
+     * A Callback fired by the Overlay when it wishes to be hidden.
+     *
+     * __required__ when `rootClose` is `true`.
+     *
+     * @type func
+     */
+    onHide?: (e: Event) => void;
+    /**
+     * Specify whether the overlay should trigger `onHide` when the user clicks outside the overlay
+     */
+    rootClose?: boolean;
+    /**
+     * Specify disabled for disable RootCloseWrapper
+     */
+    rootCloseDisabled?: boolean;
+    /**
+     * Specify event for toggling overlay
+     */
+    rootCloseEvent?: RootCloseOptions['clickTrigger'];
+    /**
+     * A render prop that returns an overlay element.
+     */
+    children: (props: OverlayInjectedProps, meta: OverlayMetadata) => React.ReactNode;
+}
+/**
+ * Built on top of `Popper.js`, the overlay component is
+ * great for custom tooltip overlays.
+ */
+declare const Overlay: React.ForwardRefExoticComponent<OverlayProps & React.RefAttributes<HTMLElement>>;
+export default Overlay;
diff --git a/node_modules/@restart/ui/esm/Overlay.js b/node_modules/@restart/ui/esm/Overlay.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec0fdcbf4ba2512632d780ae9de1848817774f7f
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Overlay.js
@@ -0,0 +1,97 @@
+import * as React from 'react';
+import ReactDOM from 'react-dom';
+import useCallbackRef from '@restart/hooks/useCallbackRef';
+import useMergedRefs from '@restart/hooks/useMergedRefs';
+import { useState } from 'react';
+import usePopper from './usePopper';
+import useRootClose from './useRootClose';
+import useWaitForDOMRef from './useWaitForDOMRef';
+import mergeOptionsWithPopperConfig from './mergeOptionsWithPopperConfig';
+import { renderTransition } from './ImperativeTransition';
+/**
+ * Built on top of `Popper.js`, the overlay component is
+ * great for custom tooltip overlays.
+ */
+const Overlay = /*#__PURE__*/React.forwardRef((props, outerRef) => {
+  const {
+    flip,
+    offset,
+    placement,
+    containerPadding,
+    popperConfig = {},
+    transition: Transition,
+    runTransition
+  } = props;
+  const [rootElement, attachRef] = useCallbackRef();
+  const [arrowElement, attachArrowRef] = useCallbackRef();
+  const mergedRef = useMergedRefs(attachRef, outerRef);
+  const container = useWaitForDOMRef(props.container);
+  const target = useWaitForDOMRef(props.target);
+  const [exited, setExited] = useState(!props.show);
+  const popper = usePopper(target, rootElement, mergeOptionsWithPopperConfig({
+    placement,
+    enableEvents: !!props.show,
+    containerPadding: containerPadding || 5,
+    flip,
+    offset,
+    arrowElement,
+    popperConfig
+  }));
+
+  // TODO: I think this needs to be in an effect
+  if (props.show && exited) {
+    setExited(false);
+  }
+  const handleHidden = (...args) => {
+    setExited(true);
+    if (props.onExited) {
+      props.onExited(...args);
+    }
+  };
+
+  // Don't un-render the overlay while it's transitioning out.
+  const mountOverlay = props.show || !exited;
+  useRootClose(rootElement, props.onHide, {
+    disabled: !props.rootClose || props.rootCloseDisabled,
+    clickTrigger: props.rootCloseEvent
+  });
+  if (!mountOverlay) {
+    // Don't bother showing anything if we don't have to.
+    return null;
+  }
+  const {
+    onExit,
+    onExiting,
+    onEnter,
+    onEntering,
+    onEntered
+  } = props;
+  let child = props.children(Object.assign({}, popper.attributes.popper, {
+    style: popper.styles.popper,
+    ref: mergedRef
+  }), {
+    popper,
+    placement,
+    show: !!props.show,
+    arrowProps: Object.assign({}, popper.attributes.arrow, {
+      style: popper.styles.arrow,
+      ref: attachArrowRef
+    })
+  });
+  child = renderTransition(Transition, runTransition, {
+    in: !!props.show,
+    appear: true,
+    mountOnEnter: true,
+    unmountOnExit: true,
+    children: child,
+    onExit,
+    onExiting,
+    onExited: handleHidden,
+    onEnter,
+    onEntering,
+    onEntered
+  });
+  return container ? /*#__PURE__*/ReactDOM.createPortal(child, container) : null;
+});
+Overlay.displayName = 'Overlay';
+export default Overlay;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Portal.d.ts b/node_modules/@restart/ui/esm/Portal.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6af166a3dc7c78d8f1a562fe32215ede949a221d
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Portal.d.ts
@@ -0,0 +1,22 @@
+import * as React from 'react';
+import { DOMContainer } from './useWaitForDOMRef';
+export interface PortalProps {
+    children: React.ReactElement;
+    /**
+     * A DOM element, Ref to an element, or function that returns either. The `container` will have the Portal children
+     * appended to it.
+     */
+    container: DOMContainer;
+    /**
+     * Callback that is triggered when the portal content is rendered.
+     */
+    onRendered?: (element: any) => void;
+}
+/**
+ * @public
+ */
+declare const Portal: {
+    ({ container, children, onRendered }: PortalProps): React.JSX.Element | null;
+    displayName: string;
+};
+export default Portal;
diff --git a/node_modules/@restart/ui/esm/Portal.js b/node_modules/@restart/ui/esm/Portal.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d76fbf1b8319a577d8a8b5b8beb71bab0fad1ef
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Portal.js
@@ -0,0 +1,19 @@
+import ReactDOM from 'react-dom';
+import * as React from 'react';
+import useWaitForDOMRef from './useWaitForDOMRef';
+import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
+/**
+ * @public
+ */
+const Portal = ({
+  container,
+  children,
+  onRendered
+}) => {
+  const resolvedContainer = useWaitForDOMRef(container, onRendered);
+  return resolvedContainer ? /*#__PURE__*/_jsx(_Fragment, {
+    children: /*#__PURE__*/ReactDOM.createPortal(children, resolvedContainer)
+  }) : null;
+};
+Portal.displayName = 'Portal';
+export default Portal;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/RTGTransition.d.ts b/node_modules/@restart/ui/esm/RTGTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d25e35394b39ed3d1c5cc4e6201c0b1985258b7f
--- /dev/null
+++ b/node_modules/@restart/ui/esm/RTGTransition.d.ts
@@ -0,0 +1,15 @@
+import * as React from 'react';
+import { TransitionProps } from './useRTGTransitionProps';
+export type RTGTransitionProps = TransitionProps & {
+    component: React.ElementType;
+};
+declare const RTGTransition: React.ForwardRefExoticComponent<(Omit<import("react-transition-group/Transition").TimeoutProps<undefined> & {
+    children: React.ReactElement<any, string | React.JSXElementConstructor<any>> | ((status: import("react-transition-group").TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+} & {
+    component: React.ElementType;
+}, "ref"> | Omit<import("react-transition-group/Transition").EndListenerProps<undefined> & {
+    children: React.ReactElement<any, string | React.JSXElementConstructor<any>> | ((status: import("react-transition-group").TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+} & {
+    component: React.ElementType;
+}, "ref">) & React.RefAttributes<any>>;
+export default RTGTransition;
diff --git a/node_modules/@restart/ui/esm/RTGTransition.js b/node_modules/@restart/ui/esm/RTGTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d8eafb1d2c2e6ab794289dbab4b084d0c18ab4c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/RTGTransition.js
@@ -0,0 +1,17 @@
+const _excluded = ["component"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import useRTGTransitionProps from './useRTGTransitionProps';
+import { jsx as _jsx } from "react/jsx-runtime";
+// Normalizes Transition callbacks when nodeRef is used.
+const RTGTransition = /*#__PURE__*/React.forwardRef((_ref, ref) => {
+  let {
+      component: Component
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const transitionProps = useRTGTransitionProps(props);
+  return /*#__PURE__*/_jsx(Component, Object.assign({
+    ref: ref
+  }, transitionProps));
+});
+export default RTGTransition;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/SelectableContext.d.ts b/node_modules/@restart/ui/esm/SelectableContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9f1c6d19e7a1019b66818e07ecea122ed4379824
--- /dev/null
+++ b/node_modules/@restart/ui/esm/SelectableContext.d.ts
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import { EventKey, SelectCallback } from './types';
+declare const SelectableContext: React.Context<SelectCallback | null>;
+export declare const makeEventKey: (eventKey?: EventKey | null, href?: string | null) => string | null;
+export default SelectableContext;
diff --git a/node_modules/@restart/ui/esm/SelectableContext.js b/node_modules/@restart/ui/esm/SelectableContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..00ec6a9e61beff52a6bde1b138125859fd859f18
--- /dev/null
+++ b/node_modules/@restart/ui/esm/SelectableContext.js
@@ -0,0 +1,7 @@
+import * as React from 'react';
+const SelectableContext = /*#__PURE__*/React.createContext(null);
+export const makeEventKey = (eventKey, href = null) => {
+  if (eventKey != null) return String(eventKey);
+  return href || null;
+};
+export default SelectableContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/TabContext.d.ts b/node_modules/@restart/ui/esm/TabContext.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..359b91b739d2ad5f1844f8b19e5dcb30625c7361
--- /dev/null
+++ b/node_modules/@restart/ui/esm/TabContext.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+import { EventKey, SelectCallback, TransitionComponent } from './types';
+export interface TabContextType {
+    onSelect: SelectCallback;
+    activeKey?: EventKey;
+    transition?: TransitionComponent;
+    mountOnEnter: boolean;
+    unmountOnExit: boolean;
+    getControlledId: (key: EventKey) => any;
+    getControllerId: (key: EventKey) => any;
+}
+declare const TabContext: React.Context<TabContextType | null>;
+export default TabContext;
diff --git a/node_modules/@restart/ui/esm/TabContext.js b/node_modules/@restart/ui/esm/TabContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f1d220c30310945c2660b73f723b126a020dfc1
--- /dev/null
+++ b/node_modules/@restart/ui/esm/TabContext.js
@@ -0,0 +1,3 @@
+import * as React from 'react';
+const TabContext = /*#__PURE__*/React.createContext(null);
+export default TabContext;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/TabPanel.d.ts b/node_modules/@restart/ui/esm/TabPanel.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..401fbbc84329b77c992568084f545fccb6bd448a
--- /dev/null
+++ b/node_modules/@restart/ui/esm/TabPanel.d.ts
@@ -0,0 +1,39 @@
+import * as React from 'react';
+import { EventKey, DynamicRefForwardingComponent, TransitionCallbacks, TransitionComponent } from './types';
+export interface TabPanelProps extends TransitionCallbacks, React.HTMLAttributes<HTMLElement> {
+    /**
+     * Element used to render the component.
+     */
+    as?: React.ElementType;
+    /**
+     * A key that associates the `TabPanel` with it's controlling `NavLink`.
+     */
+    eventKey?: EventKey;
+    /**
+     * Toggles the active state of the TabPanel, this is generally controlled by `Tabs`.
+     */
+    active?: boolean;
+    /**
+     * Use animation when showing or hiding `<TabPanel>`s. Use a react-transition-group
+     * `<Transition/>` component.
+     */
+    transition?: TransitionComponent;
+    /**
+     * Wait until the first "enter" transition to mount the tab (add it to the DOM)
+     */
+    mountOnEnter?: boolean;
+    /**
+     * Unmount the tab (remove it from the DOM) when it is no longer visible
+     */
+    unmountOnExit?: boolean;
+}
+export interface TabPanelMetadata extends TransitionCallbacks {
+    eventKey?: EventKey;
+    isActive?: boolean;
+    transition?: TransitionComponent;
+    mountOnEnter?: boolean;
+    unmountOnExit?: boolean;
+}
+export declare function useTabPanel({ active, eventKey, mountOnEnter, transition, unmountOnExit, role, onEnter, onEntering, onEntered, onExit, onExiting, onExited, ...props }: TabPanelProps): [any, TabPanelMetadata];
+declare const TabPanel: DynamicRefForwardingComponent<'div', TabPanelProps>;
+export default TabPanel;
diff --git a/node_modules/@restart/ui/esm/TabPanel.js b/node_modules/@restart/ui/esm/TabPanel.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d061dd9df8f25bad67bd176a8f1d66eaa25e616
--- /dev/null
+++ b/node_modules/@restart/ui/esm/TabPanel.js
@@ -0,0 +1,113 @@
+const _excluded = ["active", "eventKey", "mountOnEnter", "transition", "unmountOnExit", "role", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited"],
+  _excluded2 = ["activeKey", "getControlledId", "getControllerId"],
+  _excluded3 = ["as"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import * as React from 'react';
+import { useContext } from 'react';
+import TabContext from './TabContext';
+import SelectableContext, { makeEventKey } from './SelectableContext';
+import NoopTransition from './NoopTransition';
+import { jsx as _jsx } from "react/jsx-runtime";
+export function useTabPanel(_ref) {
+  let {
+      active,
+      eventKey,
+      mountOnEnter,
+      transition,
+      unmountOnExit,
+      role = 'tabpanel',
+      onEnter,
+      onEntering,
+      onEntered,
+      onExit,
+      onExiting,
+      onExited
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const context = useContext(TabContext);
+  if (!context) return [Object.assign({}, props, {
+    role
+  }), {
+    eventKey,
+    isActive: active,
+    mountOnEnter,
+    transition,
+    unmountOnExit,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited
+  }];
+  const {
+      activeKey,
+      getControlledId,
+      getControllerId
+    } = context,
+    rest = _objectWithoutPropertiesLoose(context, _excluded2);
+  const key = makeEventKey(eventKey);
+  return [Object.assign({}, props, {
+    role,
+    id: getControlledId(eventKey),
+    'aria-labelledby': getControllerId(eventKey)
+  }), {
+    eventKey,
+    isActive: active == null && key != null ? makeEventKey(activeKey) === key : active,
+    transition: transition || rest.transition,
+    mountOnEnter: mountOnEnter != null ? mountOnEnter : rest.mountOnEnter,
+    unmountOnExit: unmountOnExit != null ? unmountOnExit : rest.unmountOnExit,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited
+  }];
+}
+const TabPanel = /*#__PURE__*/React.forwardRef(
+// Need to define the default "as" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595
+(_ref2, ref) => {
+  let {
+      as: Component = 'div'
+    } = _ref2,
+    props = _objectWithoutPropertiesLoose(_ref2, _excluded3);
+  const [tabPanelProps, {
+    isActive,
+    onEnter,
+    onEntering,
+    onEntered,
+    onExit,
+    onExiting,
+    onExited,
+    mountOnEnter,
+    unmountOnExit,
+    transition: Transition = NoopTransition
+  }] = useTabPanel(props);
+  // We provide an empty the TabContext so `<Nav>`s in `<TabPanel>`s don't
+  // conflict with the top level one.
+  return /*#__PURE__*/_jsx(TabContext.Provider, {
+    value: null,
+    children: /*#__PURE__*/_jsx(SelectableContext.Provider, {
+      value: null,
+      children: /*#__PURE__*/_jsx(Transition, {
+        in: isActive,
+        onEnter: onEnter,
+        onEntering: onEntering,
+        onEntered: onEntered,
+        onExit: onExit,
+        onExiting: onExiting,
+        onExited: onExited,
+        mountOnEnter: mountOnEnter,
+        unmountOnExit: unmountOnExit,
+        children: /*#__PURE__*/_jsx(Component, Object.assign({}, tabPanelProps, {
+          ref: ref,
+          hidden: !isActive,
+          "aria-hidden": !isActive
+        }))
+      })
+    })
+  });
+});
+TabPanel.displayName = 'TabPanel';
+export default TabPanel;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Tabs.d.ts b/node_modules/@restart/ui/esm/Tabs.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..763ccbc4ebe6f604ca305a52bc043e8c3369f75c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Tabs.d.ts
@@ -0,0 +1,53 @@
+import * as React from 'react';
+import { EventKey, SelectCallback, TransitionComponent } from './types';
+import { TabPanelProps } from './TabPanel';
+export type { TabPanelProps };
+export interface TabsProps extends React.PropsWithChildren<unknown> {
+    id?: string;
+    /**
+     * Sets a default animation strategy for all children `<TabPanel>`s.
+     * Use a react-transition-group `<Transition/>` component.
+     */
+    transition?: TransitionComponent;
+    /**
+     * Wait until the first "enter" transition to mount tabs (add them to the DOM)
+     */
+    mountOnEnter?: boolean;
+    /**
+     * Unmount tabs (remove it from the DOM) when they are no longer visible
+     */
+    unmountOnExit?: boolean;
+    /**
+     * A function that takes an `eventKey` and `type` and returns a unique id for
+     * child tab `<NavItem>`s and `<TabPane>`s. The function _must_ be a pure
+     * function, meaning it should always return the _same_ id for the same set
+     * of inputs. The default value requires that an `id` to be set for the
+     * `<TabContainer>`.
+     *
+     * The `type` argument will either be `"tab"` or `"pane"`.
+     *
+     * @defaultValue (eventKey, type) => `${props.id}-${type}-${eventKey}`
+     */
+    generateChildId?: (eventKey: EventKey, type: 'tab' | 'pane') => string;
+    /**
+     * A callback fired when a tab is selected.
+     *
+     * @controllable activeKey
+     */
+    onSelect?: SelectCallback;
+    /**
+     * The `eventKey` of the currently active tab.
+     *
+     * @controllable onSelect
+     */
+    activeKey?: EventKey;
+    /**
+     * Default value for `eventKey`.
+     */
+    defaultActiveKey?: EventKey;
+}
+declare const Tabs: {
+    (props: TabsProps): React.JSX.Element;
+    Panel: import("./types").DynamicRefForwardingComponent<"div", TabPanelProps>;
+};
+export default Tabs;
diff --git a/node_modules/@restart/ui/esm/Tabs.js b/node_modules/@restart/ui/esm/Tabs.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0a1a922e75ce5d41c601a45c61dcc08db15c8ec
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Tabs.js
@@ -0,0 +1,42 @@
+import * as React from 'react';
+import { useMemo } from 'react';
+import { useUncontrolledProp } from 'uncontrollable';
+import { useSSRSafeId } from './ssr';
+import TabContext from './TabContext';
+import SelectableContext from './SelectableContext';
+import TabPanel from './TabPanel';
+import { jsx as _jsx } from "react/jsx-runtime";
+const Tabs = props => {
+  const {
+    id: userId,
+    generateChildId: generateCustomChildId,
+    onSelect: propsOnSelect,
+    activeKey: propsActiveKey,
+    defaultActiveKey,
+    transition,
+    mountOnEnter,
+    unmountOnExit,
+    children
+  } = props;
+  const [activeKey, onSelect] = useUncontrolledProp(propsActiveKey, defaultActiveKey, propsOnSelect);
+  const id = useSSRSafeId(userId);
+  const generateChildId = useMemo(() => generateCustomChildId || ((key, type) => id ? `${id}-${type}-${key}` : null), [id, generateCustomChildId]);
+  const tabContext = useMemo(() => ({
+    onSelect,
+    activeKey,
+    transition,
+    mountOnEnter: mountOnEnter || false,
+    unmountOnExit: unmountOnExit || false,
+    getControlledId: key => generateChildId(key, 'tabpane'),
+    getControllerId: key => generateChildId(key, 'tab')
+  }), [onSelect, activeKey, transition, mountOnEnter, unmountOnExit, generateChildId]);
+  return /*#__PURE__*/_jsx(TabContext.Provider, {
+    value: tabContext,
+    children: /*#__PURE__*/_jsx(SelectableContext.Provider, {
+      value: onSelect || null,
+      children: children
+    })
+  });
+};
+Tabs.Panel = TabPanel;
+export default Tabs;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/Waypoint.d.ts b/node_modules/@restart/ui/esm/Waypoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5b71dec2315d487075da9640f540532b8f0bab10
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Waypoint.d.ts
@@ -0,0 +1,19 @@
+import * as React from 'react';
+import { WaypointOptions, WaypointEvent, Position } from './useWaypoint';
+export { Position };
+export type { WaypointEvent };
+export interface WaypointProps extends WaypointOptions {
+    renderComponent?: (ref: React.RefCallback<any>) => React.ReactElement;
+    /**
+     * The callback fired when a waypoint's position is updated. This generally
+     * fires as a waypoint enters or exits the viewport but will also be called
+     * on mount.
+     */
+    onPositionChange: (details: WaypointEvent, entry: IntersectionObserverEntry) => void;
+}
+/**
+ * A component that tracks when it enters or leaves the viewport. Implemented
+ * using IntersectionObserver, polyfill may be required for older browsers.
+ */
+declare function Waypoint({ renderComponent, onPositionChange, ...options }: WaypointProps): React.ReactElement<any, string | React.JSXElementConstructor<any>>;
+export default Waypoint;
diff --git a/node_modules/@restart/ui/esm/Waypoint.js b/node_modules/@restart/ui/esm/Waypoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdac03e54036ee15b45e5e8a56d8527bf7b39091
--- /dev/null
+++ b/node_modules/@restart/ui/esm/Waypoint.js
@@ -0,0 +1,28 @@
+const _excluded = ["renderComponent", "onPositionChange"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import useCallbackRef from '@restart/hooks/useCallbackRef';
+import * as React from 'react';
+import useWaypoint, { Position } from './useWaypoint';
+import { jsx as _jsx } from "react/jsx-runtime";
+export { Position };
+const defaultRenderComponent = ref => /*#__PURE__*/_jsx("span", {
+  ref: ref,
+  style: {
+    fontSize: 0
+  }
+});
+/**
+ * A component that tracks when it enters or leaves the viewport. Implemented
+ * using IntersectionObserver, polyfill may be required for older browsers.
+ */
+function Waypoint(_ref) {
+  let {
+      renderComponent = defaultRenderComponent,
+      onPositionChange
+    } = _ref,
+    options = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const [element, setElement] = useCallbackRef();
+  useWaypoint(element, onPositionChange, options);
+  return renderComponent(setElement);
+}
+export default Waypoint;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/getScrollbarWidth.d.ts b/node_modules/@restart/ui/esm/getScrollbarWidth.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b4fb98e4b2d9560f40be30b8995fd6d9667ef39
--- /dev/null
+++ b/node_modules/@restart/ui/esm/getScrollbarWidth.d.ts
@@ -0,0 +1,4 @@
+/**
+ * Get the width of the vertical window scrollbar if it's visible
+ */
+export default function getBodyScrollbarWidth(ownerDocument?: Document): number;
diff --git a/node_modules/@restart/ui/esm/getScrollbarWidth.js b/node_modules/@restart/ui/esm/getScrollbarWidth.js
new file mode 100644
index 0000000000000000000000000000000000000000..6384a4593f507203707fa1b773555ff8adfef055
--- /dev/null
+++ b/node_modules/@restart/ui/esm/getScrollbarWidth.js
@@ -0,0 +1,7 @@
+/**
+ * Get the width of the vertical window scrollbar if it's visible
+ */
+export default function getBodyScrollbarWidth(ownerDocument = document) {
+  const window = ownerDocument.defaultView;
+  return Math.abs(window.innerWidth - ownerDocument.documentElement.clientWidth);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/index.d.ts b/node_modules/@restart/ui/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbc2ca1a36a7c6129017a059fbe6c0eb28a81c0c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/index.d.ts
@@ -0,0 +1,21 @@
+import Dropdown from './Dropdown';
+import { useDropdownMenu } from './DropdownMenu';
+import { useDropdownToggle } from './DropdownToggle';
+import { useDropdownItem } from './DropdownItem';
+import Modal from './Modal';
+import Overlay from './Overlay';
+import Portal from './Portal';
+import useRootClose from './useRootClose';
+import Nav from './Nav';
+import NavItem, { useNavItem } from './NavItem';
+import Button from './Button';
+import Tabs from './Tabs';
+import TabPanel from './TabPanel';
+export { Button, Dropdown, useDropdownMenu, useDropdownToggle, useDropdownItem, Nav, NavItem, useNavItem, Modal, Overlay, Portal, useRootClose, Tabs, TabPanel, };
+export type { ButtonProps } from './Button';
+export type { DropdownProps, DropdownMenuProps, UseDropdownMenuMetadata, UseDropdownMenuOptions, DropdownToggleProps, UseDropdownToggleMetadata, DropdownItemProps, } from './Dropdown';
+export type { NavItemProps, UseNavItemOptions, NavProps } from './Nav';
+export type { ModalProps } from './Modal';
+export type { OverlayProps } from './Overlay';
+export type { PortalProps } from './Portal';
+export type { TabsProps, TabPanelProps } from './Tabs';
diff --git a/node_modules/@restart/ui/esm/index.js b/node_modules/@restart/ui/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..ecbf4f715546b154d712d7063c8098eed4028a52
--- /dev/null
+++ b/node_modules/@restart/ui/esm/index.js
@@ -0,0 +1,14 @@
+import Dropdown from './Dropdown';
+import { useDropdownMenu } from './DropdownMenu';
+import { useDropdownToggle } from './DropdownToggle';
+import { useDropdownItem } from './DropdownItem';
+import Modal from './Modal';
+import Overlay from './Overlay';
+import Portal from './Portal';
+import useRootClose from './useRootClose';
+import Nav from './Nav';
+import NavItem, { useNavItem } from './NavItem';
+import Button from './Button';
+import Tabs from './Tabs';
+import TabPanel from './TabPanel';
+export { Button, Dropdown, useDropdownMenu, useDropdownToggle, useDropdownItem, Nav, NavItem, useNavItem, Modal, Overlay, Portal, useRootClose, Tabs, TabPanel };
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.d.ts b/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4fe342f08a825db2d31c21535bdb4698d39b83e4
--- /dev/null
+++ b/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.d.ts
@@ -0,0 +1,16 @@
+import { UsePopperOptions, Offset, Placement, Modifiers } from './usePopper';
+export type Config = {
+    flip?: boolean;
+    fixed?: boolean;
+    alignEnd?: boolean;
+    enabled?: boolean;
+    containerPadding?: number;
+    arrowElement?: Element | null;
+    enableEvents?: boolean;
+    offset?: Offset;
+    placement?: Placement;
+    popperConfig?: UsePopperOptions;
+};
+export declare function toModifierMap(modifiers: Modifiers | undefined): Record<string, Partial<import("./usePopper").Modifier<any, any>>>;
+export declare function toModifierArray(map?: Modifiers | undefined): Partial<import("@popperjs/core").Modifier<any, any>>[];
+export default function mergeOptionsWithPopperConfig({ enabled, enableEvents, placement, flip, offset, fixed, containerPadding, arrowElement, popperConfig, }: Config): UsePopperOptions;
diff --git a/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.js b/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe3f67fffb12fcf0cde6a2fb1bf9719f3f825cc7
--- /dev/null
+++ b/node_modules/@restart/ui/esm/mergeOptionsWithPopperConfig.js
@@ -0,0 +1,63 @@
+export function toModifierMap(modifiers) {
+  const result = {};
+  if (!Array.isArray(modifiers)) {
+    return modifiers || result;
+  }
+
+  // eslint-disable-next-line no-unused-expressions
+  modifiers == null ? void 0 : modifiers.forEach(m => {
+    result[m.name] = m;
+  });
+  return result;
+}
+export function toModifierArray(map = {}) {
+  if (Array.isArray(map)) return map;
+  return Object.keys(map).map(k => {
+    map[k].name = k;
+    return map[k];
+  });
+}
+export default function mergeOptionsWithPopperConfig({
+  enabled,
+  enableEvents,
+  placement,
+  flip,
+  offset,
+  fixed,
+  containerPadding,
+  arrowElement,
+  popperConfig = {}
+}) {
+  var _modifiers$eventListe, _modifiers$preventOve, _modifiers$preventOve2, _modifiers$offset, _modifiers$arrow;
+  const modifiers = toModifierMap(popperConfig.modifiers);
+  return Object.assign({}, popperConfig, {
+    placement,
+    enabled,
+    strategy: fixed ? 'fixed' : popperConfig.strategy,
+    modifiers: toModifierArray(Object.assign({}, modifiers, {
+      eventListeners: {
+        enabled: enableEvents,
+        options: (_modifiers$eventListe = modifiers.eventListeners) == null ? void 0 : _modifiers$eventListe.options
+      },
+      preventOverflow: Object.assign({}, modifiers.preventOverflow, {
+        options: containerPadding ? Object.assign({
+          padding: containerPadding
+        }, (_modifiers$preventOve = modifiers.preventOverflow) == null ? void 0 : _modifiers$preventOve.options) : (_modifiers$preventOve2 = modifiers.preventOverflow) == null ? void 0 : _modifiers$preventOve2.options
+      }),
+      offset: {
+        options: Object.assign({
+          offset
+        }, (_modifiers$offset = modifiers.offset) == null ? void 0 : _modifiers$offset.options)
+      },
+      arrow: Object.assign({}, modifiers.arrow, {
+        enabled: !!arrowElement,
+        options: Object.assign({}, (_modifiers$arrow = modifiers.arrow) == null ? void 0 : _modifiers$arrow.options, {
+          element: arrowElement
+        })
+      }),
+      flip: Object.assign({
+        enabled: !!flip
+      }, modifiers.flip)
+    }))
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/popper.d.ts b/node_modules/@restart/ui/esm/popper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a22df797e5a6e80f17002596c23acb73ce4f1ac5
--- /dev/null
+++ b/node_modules/@restart/ui/esm/popper.d.ts
@@ -0,0 +1,3 @@
+import { placements } from '@popperjs/core/lib/enums';
+export declare const createPopper: <TModifier extends Partial<import("@popperjs/core/lib/types").Modifier<any, any>>>(reference: Element | import("@popperjs/core/lib/types").VirtualElement, popper: HTMLElement, options?: Partial<import("@popperjs/core/lib/types").OptionsGeneric<TModifier>> | undefined) => import("@popperjs/core/lib/types").Instance;
+export { placements };
diff --git a/node_modules/@restart/ui/esm/popper.js b/node_modules/@restart/ui/esm/popper.js
new file mode 100644
index 0000000000000000000000000000000000000000..f57b5dcf5233abd8e5dd78ebc685de2ecfe5777e
--- /dev/null
+++ b/node_modules/@restart/ui/esm/popper.js
@@ -0,0 +1,17 @@
+import arrow from '@popperjs/core/lib/modifiers/arrow';
+import computeStyles from '@popperjs/core/lib/modifiers/computeStyles';
+import eventListeners from '@popperjs/core/lib/modifiers/eventListeners';
+import flip from '@popperjs/core/lib/modifiers/flip';
+import hide from '@popperjs/core/lib/modifiers/hide';
+import offset from '@popperjs/core/lib/modifiers/offset';
+import popperOffsets from '@popperjs/core/lib/modifiers/popperOffsets';
+import preventOverflow from '@popperjs/core/lib/modifiers/preventOverflow';
+import { placements } from '@popperjs/core/lib/enums';
+import { popperGenerator } from '@popperjs/core/lib/popper-base';
+
+// For the common JS build we will turn this file into a bundle with no imports.
+// This is b/c the Popper lib is all esm files, and would break in a common js only environment
+export const createPopper = popperGenerator({
+  defaultModifiers: [hide, popperOffsets, computeStyles, eventListeners, offset, flip, preventOverflow, arrow]
+});
+export { placements };
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/ssr.d.ts b/node_modules/@restart/ui/esm/ssr.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cf20cc2ced82ca37dfd55d41d7393ffbc7ba56ba
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ssr.d.ts
@@ -0,0 +1,3 @@
+import { useSSRSafeId, useIsSSR, SSRProvider, SSRProviderProps } from '@react-aria/ssr';
+export type { SSRProviderProps };
+export { useSSRSafeId, useIsSSR, SSRProvider };
diff --git a/node_modules/@restart/ui/esm/ssr.js b/node_modules/@restart/ui/esm/ssr.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c4d6738265c6b72d8a373be485bdfbf59fd0ca8
--- /dev/null
+++ b/node_modules/@restart/ui/esm/ssr.js
@@ -0,0 +1,2 @@
+import { useSSRSafeId, useIsSSR, SSRProvider } from '@react-aria/ssr';
+export { useSSRSafeId, useIsSSR, SSRProvider };
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/types.d.ts b/node_modules/@restart/ui/esm/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e5f7758c6892e9664c85d5e3ea03f04fa32f67a4
--- /dev/null
+++ b/node_modules/@restart/ui/esm/types.d.ts
@@ -0,0 +1,70 @@
+import * as React from 'react';
+export type EventKey = string | number;
+export type IntrinsicElementTypes = keyof JSX.IntrinsicElements;
+export type AssignPropsWithRef<Inner extends string | React.ComponentType<any>, P> = Omit<React.ComponentPropsWithRef<Inner extends React.ElementType ? Inner : never>, keyof P> & P;
+export type { AssignPropsWithRef as AssignProps };
+export type AssignPropsWithoutRef<Inner extends string | React.ComponentType<any>, P> = Omit<React.ComponentPropsWithoutRef<Inner extends React.ElementType ? Inner : never>, keyof P> & P;
+export interface DynamicRefForwardingComponent<TInitial extends string | React.ComponentType<any>, P = {
+    children?: React.ReactNode;
+}> {
+    <As extends string | React.ComponentType<any> = TInitial>(props: AssignPropsWithRef<As, {
+        as?: As;
+    } & P>, context?: any): React.ReactElement | null;
+    propTypes?: any;
+    contextTypes?: any;
+    defaultProps?: Partial<P>;
+    displayName?: string;
+}
+export interface DynamicFunctionComponent<TInitial extends string | React.ComponentType<any>, P = {
+    children?: React.ReactNode;
+}> {
+    <As extends string | React.ComponentType<any> = TInitial>(props: AssignPropsWithoutRef<As, {
+        as?: As;
+    } & P>, context?: any): React.ReactElement | null;
+    propTypes?: any;
+    contextTypes?: any;
+    defaultProps?: Partial<P>;
+    displayName?: string;
+}
+export declare class DynamicComponent<As extends string | React.ComponentType<any>, P = unknown> extends React.Component<AssignPropsWithRef<As, {
+    as?: As;
+} & P>> {
+}
+export type DynamicComponentClass<As extends string | React.ComponentType<any>, P = unknown> = React.ComponentClass<AssignPropsWithRef<As, {
+    as?: As;
+} & P>>;
+export type SelectCallback = (eventKey: string | null, e: React.SyntheticEvent<unknown>) => void;
+export interface TransitionCallbacks {
+    /**
+     * Callback fired before the component transitions in
+     */
+    onEnter?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired as the component begins to transition in
+     */
+    onEntering?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired after the component finishes transitioning in
+     */
+    onEntered?(node: HTMLElement, isAppearing: boolean): any;
+    /**
+     * Callback fired right before the component transitions out
+     */
+    onExit?(node: HTMLElement): any;
+    /**
+     * Callback fired as the component begins to transition out
+     */
+    onExiting?(node: HTMLElement): any;
+    /**
+     * Callback fired after the component finishes transitioning out
+     */
+    onExited?(node: HTMLElement): any;
+}
+export interface TransitionProps extends TransitionCallbacks {
+    in?: boolean;
+    appear?: boolean;
+    children: React.ReactElement;
+    mountOnEnter?: boolean;
+    unmountOnExit?: boolean;
+}
+export type TransitionComponent = React.ComponentType<TransitionProps>;
diff --git a/node_modules/@restart/ui/esm/types.js b/node_modules/@restart/ui/esm/types.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ac7adb84c6ea4161a754b07b03b62fedcfd7458
--- /dev/null
+++ b/node_modules/@restart/ui/esm/types.js
@@ -0,0 +1,4 @@
+import * as React from 'react';
+export class DynamicComponent extends React.Component {}
+
+// Need to use this instead of typeof Component to get proper type checking.
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useClickOutside.d.ts b/node_modules/@restart/ui/esm/useClickOutside.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..03a7a91c3d87ceea99a5bfadc39c671dca8a285c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useClickOutside.d.ts
@@ -0,0 +1,21 @@
+/// <reference types="react" />
+export type MouseEvents = {
+    [K in keyof GlobalEventHandlersEventMap]: GlobalEventHandlersEventMap[K] extends MouseEvent ? K : never;
+}[keyof GlobalEventHandlersEventMap];
+export declare const getRefTarget: (ref: React.RefObject<Element> | Element | null | undefined) => Element | null | undefined;
+export interface ClickOutsideOptions {
+    disabled?: boolean;
+    clickTrigger?: MouseEvents;
+}
+/**
+ * The `useClickOutside` hook registers your callback on the document that fires
+ * when a pointer event is registered outside of the provided ref or element.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onClickOutside
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+declare function useClickOutside(ref: React.RefObject<Element> | Element | null | undefined, onClickOutside?: (e: Event) => void, { disabled, clickTrigger }?: ClickOutsideOptions): void;
+export default useClickOutside;
diff --git a/node_modules/@restart/ui/esm/useClickOutside.js b/node_modules/@restart/ui/esm/useClickOutside.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a26d92e7ec8c2f846482db61d571923001f417c
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useClickOutside.js
@@ -0,0 +1,94 @@
+import contains from 'dom-helpers/contains';
+import listen from 'dom-helpers/listen';
+import ownerDocument from 'dom-helpers/ownerDocument';
+import { useCallback, useEffect, useRef } from 'react';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import warning from 'warning';
+const noop = () => {};
+function isLeftClickEvent(event) {
+  return event.button === 0;
+}
+function isModifiedEvent(event) {
+  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);
+}
+export const getRefTarget = ref => ref && ('current' in ref ? ref.current : ref);
+const InitialTriggerEvents = {
+  click: 'mousedown',
+  mouseup: 'mousedown',
+  pointerup: 'pointerdown'
+};
+
+/**
+ * The `useClickOutside` hook registers your callback on the document that fires
+ * when a pointer event is registered outside of the provided ref or element.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onClickOutside
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+function useClickOutside(ref, onClickOutside = noop, {
+  disabled,
+  clickTrigger = 'click'
+} = {}) {
+  const preventMouseClickOutsideRef = useRef(false);
+  const waitingForTrigger = useRef(false);
+  const handleMouseCapture = useCallback(e => {
+    const currentTarget = getRefTarget(ref);
+    warning(!!currentTarget, 'ClickOutside captured a close event but does not have a ref to compare it to. ' + 'useClickOutside(), should be passed a ref that resolves to a DOM node');
+    preventMouseClickOutsideRef.current = !currentTarget || isModifiedEvent(e) || !isLeftClickEvent(e) || !!contains(currentTarget, e.target) || waitingForTrigger.current;
+    waitingForTrigger.current = false;
+  }, [ref]);
+  const handleInitialMouse = useEventCallback(e => {
+    const currentTarget = getRefTarget(ref);
+    if (currentTarget && contains(currentTarget, e.target)) {
+      waitingForTrigger.current = true;
+    }
+  });
+  const handleMouse = useEventCallback(e => {
+    if (!preventMouseClickOutsideRef.current) {
+      onClickOutside(e);
+    }
+  });
+  useEffect(() => {
+    var _ownerWindow$event, _ownerWindow$parent;
+    if (disabled || ref == null) return undefined;
+    const doc = ownerDocument(getRefTarget(ref));
+    const ownerWindow = doc.defaultView || window;
+
+    // Store the current event to avoid triggering handlers immediately
+    // For things rendered in an iframe, the event might originate on the parent window
+    // so we should fall back to that global event if the local one doesn't exist
+    // https://github.com/facebook/react/issues/20074
+    let currentEvent = (_ownerWindow$event = ownerWindow.event) != null ? _ownerWindow$event : (_ownerWindow$parent = ownerWindow.parent) == null ? void 0 : _ownerWindow$parent.event;
+    let removeInitialTriggerListener = null;
+    if (InitialTriggerEvents[clickTrigger]) {
+      removeInitialTriggerListener = listen(doc, InitialTriggerEvents[clickTrigger], handleInitialMouse, true);
+    }
+
+    // Use capture for this listener so it fires before React's listener, to
+    // avoid false positives in the contains() check below if the target DOM
+    // element is removed in the React mouse callback.
+    const removeMouseCaptureListener = listen(doc, clickTrigger, handleMouseCapture, true);
+    const removeMouseListener = listen(doc, clickTrigger, e => {
+      // skip if this event is the same as the one running when we added the handlers
+      if (e === currentEvent) {
+        currentEvent = undefined;
+        return;
+      }
+      handleMouse(e);
+    });
+    let mobileSafariHackListeners = [];
+    if ('ontouchstart' in doc.documentElement) {
+      mobileSafariHackListeners = [].slice.call(doc.body.children).map(el => listen(el, 'mousemove', noop));
+    }
+    return () => {
+      removeInitialTriggerListener == null ? void 0 : removeInitialTriggerListener();
+      removeMouseCaptureListener();
+      removeMouseListener();
+      mobileSafariHackListeners.forEach(remove => remove());
+    };
+  }, [ref, disabled, clickTrigger, handleMouseCapture, handleInitialMouse, handleMouse]);
+}
+export default useClickOutside;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/usePopper.d.ts b/node_modules/@restart/ui/esm/usePopper.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e51e12585a99ba08f46eea973556647279c5a62e
--- /dev/null
+++ b/node_modules/@restart/ui/esm/usePopper.d.ts
@@ -0,0 +1,50 @@
+import * as Popper from '@popperjs/core';
+export type Modifier<Name, Options extends Popper.Obj> = Popper.Modifier<Name, Options>;
+export type Options = Popper.Options;
+export type Instance = Popper.Instance;
+export type Placement = Popper.Placement;
+export type VirtualElement = Popper.VirtualElement;
+export type State = Popper.State;
+export type OffsetValue = [
+    number | null | undefined,
+    number | null | undefined
+];
+export type OffsetFunction = (details: {
+    popper: Popper.Rect;
+    reference: Popper.Rect;
+    placement: Placement;
+}) => OffsetValue;
+export type Offset = OffsetFunction | OffsetValue;
+export type ModifierMap = Record<string, Partial<Modifier<any, any>>>;
+export type Modifiers = Popper.Options['modifiers'] | Record<string, Partial<Modifier<any, any>>>;
+export type UsePopperOptions = Omit<Options, 'modifiers' | 'placement' | 'strategy'> & {
+    enabled?: boolean;
+    placement?: Options['placement'];
+    strategy?: Options['strategy'];
+    modifiers?: Options['modifiers'];
+};
+export interface UsePopperState {
+    placement: Placement;
+    update: () => void;
+    forceUpdate: () => void;
+    attributes: Record<string, Record<string, any>>;
+    styles: Record<string, Partial<CSSStyleDeclaration>>;
+    state?: State;
+}
+/**
+ * Position an element relative some reference element using Popper.js
+ *
+ * @param referenceElement
+ * @param popperElement
+ * @param {object}      options
+ * @param {object=}     options.modifiers Popper.js modifiers
+ * @param {boolean=}    options.enabled toggle the popper functionality on/off
+ * @param {string=}     options.placement The popper element placement relative to the reference element
+ * @param {string=}     options.strategy the positioning strategy
+ * @param {function=}   options.onCreate called when the popper is created
+ * @param {function=}   options.onUpdate called when the popper is updated
+ *
+ * @returns {UsePopperState} The popper state
+ */
+declare function usePopper(referenceElement: VirtualElement | null | undefined, popperElement: HTMLElement | null | undefined, { enabled, placement, strategy, modifiers, ...config }?: UsePopperOptions): UsePopperState;
+export default usePopper;
diff --git a/node_modules/@restart/ui/esm/usePopper.js b/node_modules/@restart/ui/esm/usePopper.js
new file mode 100644
index 0000000000000000000000000000000000000000..96bf30208063d52f1ce15456015afbb868bd4364
--- /dev/null
+++ b/node_modules/@restart/ui/esm/usePopper.js
@@ -0,0 +1,158 @@
+const _excluded = ["enabled", "placement", "strategy", "modifiers"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import { dequal } from 'dequal';
+import useSafeState from '@restart/hooks/useSafeState';
+import { createPopper } from './popper';
+const disabledApplyStylesModifier = {
+  name: 'applyStyles',
+  enabled: false,
+  phase: 'afterWrite',
+  fn: () => undefined
+};
+
+// until docjs supports type exports...
+
+const ariaDescribedByModifier = {
+  name: 'ariaDescribedBy',
+  enabled: true,
+  phase: 'afterWrite',
+  effect: ({
+    state
+  }) => () => {
+    const {
+      reference,
+      popper
+    } = state.elements;
+    if ('removeAttribute' in reference) {
+      const ids = (reference.getAttribute('aria-describedby') || '').split(',').filter(id => id.trim() !== popper.id);
+      if (!ids.length) reference.removeAttribute('aria-describedby');else reference.setAttribute('aria-describedby', ids.join(','));
+    }
+  },
+  fn: ({
+    state
+  }) => {
+    var _popper$getAttribute;
+    const {
+      popper,
+      reference
+    } = state.elements;
+    const role = (_popper$getAttribute = popper.getAttribute('role')) == null ? void 0 : _popper$getAttribute.toLowerCase();
+    if (popper.id && role === 'tooltip' && 'setAttribute' in reference) {
+      const ids = reference.getAttribute('aria-describedby');
+      if (ids && ids.split(',').indexOf(popper.id) !== -1) {
+        return;
+      }
+      reference.setAttribute('aria-describedby', ids ? `${ids},${popper.id}` : popper.id);
+    }
+  }
+};
+const EMPTY_MODIFIERS = [];
+/**
+ * Position an element relative some reference element using Popper.js
+ *
+ * @param referenceElement
+ * @param popperElement
+ * @param {object}      options
+ * @param {object=}     options.modifiers Popper.js modifiers
+ * @param {boolean=}    options.enabled toggle the popper functionality on/off
+ * @param {string=}     options.placement The popper element placement relative to the reference element
+ * @param {string=}     options.strategy the positioning strategy
+ * @param {function=}   options.onCreate called when the popper is created
+ * @param {function=}   options.onUpdate called when the popper is updated
+ *
+ * @returns {UsePopperState} The popper state
+ */
+function usePopper(referenceElement, popperElement, _ref = {}) {
+  let {
+      enabled = true,
+      placement = 'bottom',
+      strategy = 'absolute',
+      modifiers = EMPTY_MODIFIERS
+    } = _ref,
+    config = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const prevModifiers = useRef(modifiers);
+  const popperInstanceRef = useRef();
+  const update = useCallback(() => {
+    var _popperInstanceRef$cu;
+    (_popperInstanceRef$cu = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu.update();
+  }, []);
+  const forceUpdate = useCallback(() => {
+    var _popperInstanceRef$cu2;
+    (_popperInstanceRef$cu2 = popperInstanceRef.current) == null ? void 0 : _popperInstanceRef$cu2.forceUpdate();
+  }, []);
+  const [popperState, setState] = useSafeState(useState({
+    placement,
+    update,
+    forceUpdate,
+    attributes: {},
+    styles: {
+      popper: {},
+      arrow: {}
+    }
+  }));
+  const updateModifier = useMemo(() => ({
+    name: 'updateStateModifier',
+    enabled: true,
+    phase: 'write',
+    requires: ['computeStyles'],
+    fn: ({
+      state
+    }) => {
+      const styles = {};
+      const attributes = {};
+      Object.keys(state.elements).forEach(element => {
+        styles[element] = state.styles[element];
+        attributes[element] = state.attributes[element];
+      });
+      setState({
+        state,
+        styles,
+        attributes,
+        update,
+        forceUpdate,
+        placement: state.placement
+      });
+    }
+  }), [update, forceUpdate, setState]);
+  const nextModifiers = useMemo(() => {
+    if (!dequal(prevModifiers.current, modifiers)) {
+      prevModifiers.current = modifiers;
+    }
+    return prevModifiers.current;
+  }, [modifiers]);
+  useEffect(() => {
+    if (!popperInstanceRef.current || !enabled) return;
+    popperInstanceRef.current.setOptions({
+      placement,
+      strategy,
+      modifiers: [...nextModifiers, updateModifier, disabledApplyStylesModifier]
+    });
+  }, [strategy, placement, updateModifier, enabled, nextModifiers]);
+  useEffect(() => {
+    if (!enabled || referenceElement == null || popperElement == null) {
+      return undefined;
+    }
+    popperInstanceRef.current = createPopper(referenceElement, popperElement, Object.assign({}, config, {
+      placement,
+      strategy,
+      modifiers: [...nextModifiers, ariaDescribedByModifier, updateModifier]
+    }));
+    return () => {
+      if (popperInstanceRef.current != null) {
+        popperInstanceRef.current.destroy();
+        popperInstanceRef.current = undefined;
+        setState(s => Object.assign({}, s, {
+          attributes: {},
+          styles: {
+            popper: {}
+          }
+        }));
+      }
+    };
+    // This is only run once to _create_ the popper
+    // eslint-disable-next-line react-hooks/exhaustive-deps
+  }, [enabled, referenceElement, popperElement]);
+  return popperState;
+}
+export default usePopper;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useRTGTransitionProps.d.ts b/node_modules/@restart/ui/esm/useRTGTransitionProps.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8621caad03b6ff81c34858e1e00c8edb30d69dc7
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useRTGTransitionProps.d.ts
@@ -0,0 +1,49 @@
+/// <reference types="react" />
+import { TransitionProps as RTGTransitionProps, TransitionStatus } from 'react-transition-group/Transition';
+export type TransitionProps = RTGTransitionProps & {
+    children: React.ReactElement | ((status: TransitionStatus, props: Record<string, unknown>) => React.ReactNode);
+};
+/**
+ * Normalizes RTG transition callbacks with nodeRef to better support
+ * strict mode.
+ *
+ * @param props Transition props.
+ * @returns Normalized transition props.
+ */
+export default function useRTGTransitionProps({ onEnter, onEntering, onEntered, onExit, onExiting, onExited, addEndListener, children, ...props }: TransitionProps): {
+    children: any;
+    addEndListener?: ((param: any) => void) | undefined;
+    onExited?: ((param: any) => void) | undefined;
+    onExiting?: ((param: any) => void) | undefined;
+    onExit?: ((param: any) => void) | undefined;
+    onEntered?: ((param: any) => void) | undefined;
+    onEntering?: ((param: any) => void) | undefined;
+    onEnter?: ((param: any) => void) | undefined;
+    nodeRef: import("react").RefObject<HTMLElement>;
+    timeout: number | {
+        appear?: number | undefined;
+        enter?: number | undefined;
+        exit?: number | undefined;
+    };
+    in?: boolean | undefined;
+    mountOnEnter?: boolean | undefined;
+    unmountOnExit?: boolean | undefined;
+} | {
+    children: any;
+    addEndListener?: ((param: any) => void) | undefined;
+    onExited?: ((param: any) => void) | undefined;
+    onExiting?: ((param: any) => void) | undefined;
+    onExit?: ((param: any) => void) | undefined;
+    onEntered?: ((param: any) => void) | undefined;
+    onEntering?: ((param: any) => void) | undefined;
+    onEnter?: ((param: any) => void) | undefined;
+    nodeRef: import("react").RefObject<HTMLElement>;
+    timeout?: number | {
+        appear?: number | undefined;
+        enter?: number | undefined;
+        exit?: number | undefined;
+    } | undefined;
+    in?: boolean | undefined;
+    mountOnEnter?: boolean | undefined;
+    unmountOnExit?: boolean | undefined;
+};
diff --git a/node_modules/@restart/ui/esm/useRTGTransitionProps.js b/node_modules/@restart/ui/esm/useRTGTransitionProps.js
new file mode 100644
index 0000000000000000000000000000000000000000..13815db7db63870a9cb366446b06f549b2965ac6
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useRTGTransitionProps.js
@@ -0,0 +1,72 @@
+const _excluded = ["onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "addEndListener", "children"];
+function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
+import { cloneElement, useCallback, useRef } from 'react';
+import useMergedRefs from '@restart/hooks/useMergedRefs';
+import { getReactVersion } from './utils';
+/**
+ * Normalizes RTG transition callbacks with nodeRef to better support
+ * strict mode.
+ *
+ * @param props Transition props.
+ * @returns Normalized transition props.
+ */
+export default function useRTGTransitionProps(_ref) {
+  let {
+      onEnter,
+      onEntering,
+      onEntered,
+      onExit,
+      onExiting,
+      onExited,
+      addEndListener,
+      children
+    } = _ref,
+    props = _objectWithoutPropertiesLoose(_ref, _excluded);
+  const {
+    major
+  } = getReactVersion();
+  const childRef = major >= 19 ? children.props.ref : children.ref;
+  const nodeRef = useRef(null);
+  const mergedRef = useMergedRefs(nodeRef, typeof children === 'function' ? null : childRef);
+  const normalize = callback => param => {
+    if (callback && nodeRef.current) {
+      callback(nodeRef.current, param);
+    }
+  };
+
+  /* eslint-disable react-hooks/exhaustive-deps */
+  const handleEnter = useCallback(normalize(onEnter), [onEnter]);
+  const handleEntering = useCallback(normalize(onEntering), [onEntering]);
+  const handleEntered = useCallback(normalize(onEntered), [onEntered]);
+  const handleExit = useCallback(normalize(onExit), [onExit]);
+  const handleExiting = useCallback(normalize(onExiting), [onExiting]);
+  const handleExited = useCallback(normalize(onExited), [onExited]);
+  const handleAddEndListener = useCallback(normalize(addEndListener), [addEndListener]);
+  /* eslint-enable react-hooks/exhaustive-deps */
+
+  return Object.assign({}, props, {
+    nodeRef
+  }, onEnter && {
+    onEnter: handleEnter
+  }, onEntering && {
+    onEntering: handleEntering
+  }, onEntered && {
+    onEntered: handleEntered
+  }, onExit && {
+    onExit: handleExit
+  }, onExiting && {
+    onExiting: handleExiting
+  }, onExited && {
+    onExited: handleExited
+  }, addEndListener && {
+    addEndListener: handleAddEndListener
+  }, {
+    children: typeof children === 'function' ? (status, innerProps) =>
+    // TODO: Types for RTG missing innerProps, so need to cast.
+    children(status, Object.assign({}, innerProps, {
+      ref: mergedRef
+    })) : /*#__PURE__*/cloneElement(children, {
+      ref: mergedRef
+    })
+  });
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useRootClose.d.ts b/node_modules/@restart/ui/esm/useRootClose.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9864ad5997ef83b89a827a77c27c9f9b51cfe65a
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useRootClose.d.ts
@@ -0,0 +1,19 @@
+/// <reference types="react" />
+import { ClickOutsideOptions } from './useClickOutside';
+export interface RootCloseOptions extends ClickOutsideOptions {
+    disabled?: boolean;
+}
+/**
+ * The `useRootClose` hook registers your callback on the document
+ * when rendered. Powers the `<Overlay/>` component. This is used achieve modal
+ * style behavior where your callback is triggered when the user tries to
+ * interact with the rest of the document or hits the `esc` key.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onRootClose
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+declare function useRootClose(ref: React.RefObject<Element> | Element | null | undefined, onRootClose: (e: Event) => void, { disabled, clickTrigger }?: RootCloseOptions): void;
+export default useRootClose;
diff --git a/node_modules/@restart/ui/esm/useRootClose.js b/node_modules/@restart/ui/esm/useRootClose.js
new file mode 100644
index 0000000000000000000000000000000000000000..b9e3cfabe1947262004ddf2a210f824458792f03
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useRootClose.js
@@ -0,0 +1,54 @@
+import listen from 'dom-helpers/listen';
+import ownerDocument from 'dom-helpers/ownerDocument';
+import { useEffect } from 'react';
+import useEventCallback from '@restart/hooks/useEventCallback';
+import useClickOutside, { getRefTarget } from './useClickOutside';
+import { isEscKey } from './utils';
+const noop = () => {};
+/**
+ * The `useRootClose` hook registers your callback on the document
+ * when rendered. Powers the `<Overlay/>` component. This is used achieve modal
+ * style behavior where your callback is triggered when the user tries to
+ * interact with the rest of the document or hits the `esc` key.
+ *
+ * @param {Ref<HTMLElement>| HTMLElement} ref  The element boundary
+ * @param {function} onRootClose
+ * @param {object=}  options
+ * @param {boolean=} options.disabled
+ * @param {string=}  options.clickTrigger The DOM event name (click, mousedown, etc) to attach listeners on
+ */
+function useRootClose(ref, onRootClose, {
+  disabled,
+  clickTrigger
+} = {}) {
+  const onClose = onRootClose || noop;
+  useClickOutside(ref, onClose, {
+    disabled,
+    clickTrigger
+  });
+  const handleKeyUp = useEventCallback(e => {
+    if (isEscKey(e)) {
+      onClose(e);
+    }
+  });
+  useEffect(() => {
+    if (disabled || ref == null) return undefined;
+    const doc = ownerDocument(getRefTarget(ref));
+
+    // Store the current event to avoid triggering handlers immediately
+    // https://github.com/facebook/react/issues/20074
+    let currentEvent = (doc.defaultView || window).event;
+    const removeKeyupListener = listen(doc, 'keyup', e => {
+      // skip if this event is the same as the one running when we added the handlers
+      if (e === currentEvent) {
+        currentEvent = undefined;
+        return;
+      }
+      handleKeyUp(e);
+    });
+    return () => {
+      removeKeyupListener();
+    };
+  }, [ref, disabled, handleKeyUp]);
+}
+export default useRootClose;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useScrollParent.d.ts b/node_modules/@restart/ui/esm/useScrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..51b7bcf35e9924028b2ce5ca120cc6147e6e3b7a
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useScrollParent.d.ts
@@ -0,0 +1 @@
+export default function useScrollParent(element: null | Element): Element | Document | null | undefined;
diff --git a/node_modules/@restart/ui/esm/useScrollParent.js b/node_modules/@restart/ui/esm/useScrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8d78b118b217d33521d6f46cd374dd0a5962398
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useScrollParent.js
@@ -0,0 +1,12 @@
+import useIsomorphicEffect from '@restart/hooks/useIsomorphicEffect';
+import getScrollParent from 'dom-helpers/scrollParent';
+import { useState } from 'react';
+export default function useScrollParent(element) {
+  const [parent, setParent] = useState(null);
+  useIsomorphicEffect(() => {
+    if (element) {
+      setParent(getScrollParent(element, true));
+    }
+  }, [element]);
+  return parent;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useWaitForDOMRef.d.ts b/node_modules/@restart/ui/esm/useWaitForDOMRef.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..12b3b1150d611a9921659214ab56cfdae8cb6fee
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWaitForDOMRef.d.ts
@@ -0,0 +1,5 @@
+/// <reference types="react" />
+import { VirtualElement } from './usePopper';
+export type DOMContainer<T extends HTMLElement | VirtualElement = HTMLElement> = T | React.RefObject<T> | null | (() => T | React.RefObject<T> | null);
+export declare const resolveContainerRef: <T extends HTMLElement | import("@popperjs/core").VirtualElement>(ref: DOMContainer<T> | undefined, document?: Document) => HTMLBodyElement | T | null;
+export default function useWaitForDOMRef<T extends HTMLElement | VirtualElement = HTMLElement>(ref: DOMContainer<T> | undefined, onResolved?: (element: T | HTMLBodyElement) => void): HTMLBodyElement | T | null;
diff --git a/node_modules/@restart/ui/esm/useWaitForDOMRef.js b/node_modules/@restart/ui/esm/useWaitForDOMRef.js
new file mode 100644
index 0000000000000000000000000000000000000000..73c05796f44afd5459ed4d1d663ae95e27de338e
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWaitForDOMRef.js
@@ -0,0 +1,32 @@
+import ownerDocument from 'dom-helpers/ownerDocument';
+import canUseDOM from 'dom-helpers/canUseDOM';
+import { useState, useEffect } from 'react';
+import useWindow from './useWindow';
+export const resolveContainerRef = (ref, document) => {
+  if (!canUseDOM) return null;
+  if (ref == null) return (document || ownerDocument()).body;
+  if (typeof ref === 'function') ref = ref();
+  if (ref && 'current' in ref) ref = ref.current;
+  if (ref && ('nodeType' in ref || ref.getBoundingClientRect)) return ref;
+  return null;
+};
+export default function useWaitForDOMRef(ref, onResolved) {
+  const window = useWindow();
+  const [resolvedRef, setRef] = useState(() => resolveContainerRef(ref, window == null ? void 0 : window.document));
+  if (!resolvedRef) {
+    const earlyRef = resolveContainerRef(ref);
+    if (earlyRef) setRef(earlyRef);
+  }
+  useEffect(() => {
+    if (onResolved && resolvedRef) {
+      onResolved(resolvedRef);
+    }
+  }, [onResolved, resolvedRef]);
+  useEffect(() => {
+    const nextRef = resolveContainerRef(ref);
+    if (nextRef !== resolvedRef) {
+      setRef(nextRef);
+    }
+  }, [ref, resolvedRef]);
+  return resolvedRef;
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useWaypoint.d.ts b/node_modules/@restart/ui/esm/useWaypoint.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..73080b64ca4173add93ff3da51720452df39deff
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWaypoint.d.ts
@@ -0,0 +1,41 @@
+export interface WaypointEvent {
+    position: Position;
+    previousPosition: Position | null;
+}
+export interface Rect {
+    top?: number;
+    bottom?: number;
+    left?: number;
+    right?: number;
+}
+export type WaypointCallback = (details: WaypointEvent, entry: IntersectionObserverEntry, observer: IntersectionObserver) => void;
+export type RootElement = Element | Document | null | undefined;
+/** Accepts all options an IntersectionObserver accepts */
+export interface WaypointOptions extends Omit<IntersectionObserverInit, 'rootMargin' | 'root'> {
+    /**
+     * The "root" element to observe. This should be the scrollable view your waypoint
+     * is rendered into. Accepts a DOM element, a function that returns a DOM element, `null`
+     * indicating that the root is not ready yet, or the string "scrollParent" to
+     * have the waypoint calculate the scroll parent itself.
+     */
+    root?: RootElement | 'scrollParent' | ((element: Element) => RootElement);
+    /**
+     * A valid CSS `margin` property or object containing the specific "top", "left", etc properties.
+     * The root margin functionally adjusts the "size" of the viewport when considering the waypoint's
+     * position. A positive margin will cause the waypoint to "enter" the waypoint early while a
+     * negative margin will have the opposite effect.
+     */
+    rootMargin?: string | Rect;
+    /**
+     * Set the direction of the scroll to consider when tracking the waypoint's position
+     */
+    scrollDirection?: 'vertical' | 'horizontal';
+}
+export declare enum Position {
+    UNKNOWN = 0,
+    BEFORE = 1,
+    INSIDE = 2,
+    AFTER = 3
+}
+declare function useWaypoint(element: Element | null, callback: WaypointCallback, options?: WaypointOptions): void;
+export default useWaypoint;
diff --git a/node_modules/@restart/ui/esm/useWaypoint.js b/node_modules/@restart/ui/esm/useWaypoint.js
new file mode 100644
index 0000000000000000000000000000000000000000..8751d23932d8f1e0883422fe9566e28e1ca88298
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWaypoint.js
@@ -0,0 +1,89 @@
+import useEventCallback from '@restart/hooks/useEventCallback';
+import useIntersectionObserver from '@restart/hooks/useIntersectionObserver';
+import { useMemo, useRef } from 'react';
+import getScrollParent from 'dom-helpers/scrollParent';
+
+/** Accepts all options an IntersectionObserver accepts */
+
+export let Position;
+(function (Position) {
+  Position[Position["UNKNOWN"] = 0] = "UNKNOWN";
+  Position[Position["BEFORE"] = 1] = "BEFORE";
+  Position[Position["INSIDE"] = 2] = "INSIDE";
+  Position[Position["AFTER"] = 3] = "AFTER";
+})(Position || (Position = {}));
+function toCss(margin) {
+  if (!margin || typeof margin === 'string') return margin;
+  const {
+    top = 0,
+    right = 0,
+    bottom = 0,
+    left = 0
+  } = margin;
+  return `${top}px ${right}px ${bottom}px ${left}px`;
+}
+const findRoot = el => getScrollParent(el, true);
+function useWaypoint(element, callback, options = {}) {
+  const {
+    rootMargin,
+    threshold,
+    scrollDirection = 'vertical'
+  } = options;
+  let {
+    root
+  } = options;
+  const handler = useEventCallback(callback);
+  const prevPositionRef = useRef(null);
+  if (root === 'scrollParent') {
+    root = findRoot;
+  }
+  const scrollParent = useMemo(() => element && typeof root === 'function' ? root(element) : null, [element, root]);
+  let realRoot = typeof root === 'function' ? scrollParent : root;
+  if (realRoot && realRoot.nodeType === document.DOCUMENT_NODE) {
+    // explicit undefined means "use the viewport", instead of `null`
+    // which means "no root yet". This works around a bug in safari
+    // where document is not accepted in older versions,
+    // or is accepted but doesn't work (as of v14)
+    realRoot = undefined;
+  }
+  useIntersectionObserver(
+  // We change the meaning of explicit null to "not provided yet"
+  // this is to allow easier synchronizing between element and roots derived
+  // from it. Otherwise if the root updates later an observer will be created
+  // for the document and then for the root
+  element, ([entry], observer) => {
+    var _entry$rootBounds, _entry$rootBounds2;
+    if (!entry) return;
+    const [start, end, point] = scrollDirection === 'vertical' ? ['top', 'bottom', 'y'] : ['left', 'right', 'x'];
+    const {
+      [point]: coord
+    } = entry.boundingClientRect;
+    const rootStart = ((_entry$rootBounds = entry.rootBounds) == null ? void 0 : _entry$rootBounds[start]) || 0;
+    const rootEnd = ((_entry$rootBounds2 = entry.rootBounds) == null ? void 0 : _entry$rootBounds2[end]) || 0;
+
+    // The position may remain UNKNOWN if the root
+    // is 0 width/height or everything is hidden.
+    let position = Position.UNKNOWN;
+    if (entry.isIntersecting) {
+      position = Position.INSIDE;
+    } else if (coord > rootEnd) {
+      position = Position.AFTER;
+    } else if (coord < rootStart) {
+      position = Position.BEFORE;
+    }
+    const previousPosition = prevPositionRef.current;
+    if (previousPosition === position) {
+      return;
+    }
+    handler({
+      position,
+      previousPosition
+    }, entry, observer);
+    prevPositionRef.current = position;
+  }, {
+    threshold,
+    root: realRoot,
+    rootMargin: toCss(rootMargin)
+  });
+}
+export default useWaypoint;
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/useWindow.d.ts b/node_modules/@restart/ui/esm/useWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cddc532b088db27720ba94ded1905ab7a866c05a
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWindow.d.ts
@@ -0,0 +1,9 @@
+/// <reference types="react" />
+export declare const WindowProvider: import("react").Provider<(Window & typeof globalThis) | undefined>;
+/**
+ * The document "window" placed in React context. Helpful for determining
+ * SSR context, or when rendering into an iframe.
+ *
+ * @returns the current window
+ */
+export default function useWindow(): (Window & typeof globalThis) | undefined;
diff --git a/node_modules/@restart/ui/esm/useWindow.js b/node_modules/@restart/ui/esm/useWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..0daa22c616080c46a3e60518f8131363daff6e0a
--- /dev/null
+++ b/node_modules/@restart/ui/esm/useWindow.js
@@ -0,0 +1,14 @@
+import { createContext, useContext } from 'react';
+import canUseDOM from 'dom-helpers/canUseDOM';
+const Context = /*#__PURE__*/createContext(canUseDOM ? window : undefined);
+export const WindowProvider = Context.Provider;
+
+/**
+ * The document "window" placed in React context. Helpful for determining
+ * SSR context, or when rendering into an iframe.
+ *
+ * @returns the current window
+ */
+export default function useWindow() {
+  return useContext(Context);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/esm/utils.d.ts b/node_modules/@restart/ui/esm/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1b0bc7af9ed358dc91a2560181aa62fe8057fa09
--- /dev/null
+++ b/node_modules/@restart/ui/esm/utils.d.ts
@@ -0,0 +1,6 @@
+export declare function isEscKey(e: KeyboardEvent): boolean;
+export declare function getReactVersion(): {
+    major: number;
+    minor: number;
+    patch: number;
+};
diff --git a/node_modules/@restart/ui/esm/utils.js b/node_modules/@restart/ui/esm/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..60135a63bb43bcf810f56fad51b400c7746494a4
--- /dev/null
+++ b/node_modules/@restart/ui/esm/utils.js
@@ -0,0 +1,12 @@
+import * as React from 'react';
+export function isEscKey(e) {
+  return e.code === 'Escape' || e.keyCode === 27;
+}
+export function getReactVersion() {
+  const parts = React.version.split('.');
+  return {
+    major: +parts[0],
+    minor: +parts[1],
+    patch: +parts[2]
+  };
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/getScrollbarWidth/package.json b/node_modules/@restart/ui/getScrollbarWidth/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c914ea82bea3cf7b71a8f2f2cb8b29c2530829e7
--- /dev/null
+++ b/node_modules/@restart/ui/getScrollbarWidth/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/getScrollbarWidth",
+  "private": true,
+  "main": "../cjs/getScrollbarWidth.js",
+  "module": "../esm/getScrollbarWidth.js",
+  "types": "../esm/getScrollbarWidth.d.ts"
+}
diff --git a/node_modules/@restart/ui/mergeOptionsWithPopperConfig/package.json b/node_modules/@restart/ui/mergeOptionsWithPopperConfig/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9f5d460015743dd093afe3c70ca961808391457f
--- /dev/null
+++ b/node_modules/@restart/ui/mergeOptionsWithPopperConfig/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/mergeOptionsWithPopperConfig",
+  "private": true,
+  "main": "../cjs/mergeOptionsWithPopperConfig.js",
+  "module": "../esm/mergeOptionsWithPopperConfig.js",
+  "types": "../esm/mergeOptionsWithPopperConfig.d.ts"
+}
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/.babelrc b/node_modules/@restart/ui/node_modules/uncontrollable/.babelrc
new file mode 100644
index 0000000000000000000000000000000000000000..6bfe94c8cba3b078be78a2f87120d66d6d5aa2a8
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/.babelrc
@@ -0,0 +1,19 @@
+{
+  "presets": [
+    "babel-preset-env-modules",
+    "@babel/preset-react",
+    "@babel/preset-typescript"
+  ],
+  "env": {
+    "esm": {
+      "presets": [
+        [
+          "babel-preset-env-modules",
+          {
+            "modules": false
+          }
+        ]
+      ]
+    }
+  }
+}
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/CHANGELOG.md b/node_modules/@restart/ui/node_modules/uncontrollable/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..b13524721ab1dec65075d206a670bfc17731611d
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/CHANGELOG.md
@@ -0,0 +1,143 @@
+## [8.0.4](https://github.com/jquense/uncontrollable/compare/v8.0.3...v8.0.4) (2023-07-28)
+
+
+### Bug Fixes
+
+* types too strict ([2c135fb](https://github.com/jquense/uncontrollable/commit/2c135fbce2dc05f11bbb736a88400aed90d6bbac))
+
+
+
+
+
+## [8.0.3](https://github.com/jquense/uncontrollable/compare/v8.0.2...v8.0.3) (2023-07-28)
+
+
+### Bug Fixes
+
+* pass throguh return value if present ([38c308a](https://github.com/jquense/uncontrollable/commit/38c308a7e5bd56460aafb2a20b38bdf633ec9350))
+
+
+
+
+
+## [8.0.2](https://github.com/jquense/uncontrollable/compare/v8.0.1...v8.0.2) (2023-05-22)
+
+
+### Bug Fixes
+
+* move types out of deps ([400b834](https://github.com/jquense/uncontrollable/commit/400b834c5cafbc44706170a1ac137dbddf21c27e))
+
+
+
+
+
+# [8.0.0](https://github.com/jquense/uncontrollable/compare/v7.2.0...v8.0.0) (2023-03-08)
+
+### chore
+
+- bump deps and remove HOC ([8924a68](https://github.com/jquense/uncontrollable/commit/8924a68880487e08cf3073d883cca6032be2e778))
+
+### BREAKING CHANGES
+
+- higher order component removed for just hooks, browser support bumped up to esm compatible
+- dropped support for React 15
+
+# [7.2.0](https://github.com/jquense/uncontrollable/compare/v7.1.1...v7.2.0) (2021-01-25)
+
+### Features
+
+- Allow React 17 types ([#50](https://github.com/jquense/uncontrollable/issues/50)) ([d1f5274](https://github.com/jquense/uncontrollable/commit/d1f527437b93af5baf4c1c038ee1d0afd4ce0d73))
+
+## [7.1.1](https://github.com/jquense/uncontrollable/compare/v7.1.0...v7.1.1) (2019-10-31)
+
+### Bug Fixes
+
+- bump fstream from 1.0.11 to 1.0.12 ([#45](https://github.com/jquense/uncontrollable/issues/45)) ([97b1287](https://github.com/jquense/uncontrollable/commit/97b1287))
+- bump sshpk from 1.11.0 to 1.16.1 ([#46](https://github.com/jquense/uncontrollable/issues/46)) ([80e19d5](https://github.com/jquense/uncontrollable/commit/80e19d5))
+- clean up types ([bd29932](https://github.com/jquense/uncontrollable/commit/bd29932))
+
+# [7.1.0](https://github.com/jquense/uncontrollable/compare/v7.0.2...v7.1.0) (2019-10-30)
+
+### Features
+
+- add useUncontrolledProp and types ([6e0837d](https://github.com/jquense/uncontrollable/commit/6e0837d))
+
+## [7.0.2](https://github.com/jquense/uncontrollable/compare/v7.0.1...v7.0.2) (2019-10-03)
+
+### Bug Fixes
+
+- migrate unsafe lifecycle ([#40](https://github.com/jquense/uncontrollable/issues/40)) ([1607fff](https://github.com/jquense/uncontrollable/commit/1607fff))
+
+## [7.0.1](https://github.com/jquense/uncontrollable/compare/v7.0.0...v7.0.1) (2019-09-06)
+
+### Bug Fixes
+
+- rename License.txt to LICENSE ([#39](https://github.com/jquense/uncontrollable/issues/39)) ([171e821](https://github.com/jquense/uncontrollable/commit/171e821))
+
+# [7.0.0](https://github.com/jquense/uncontrollable/compare/v6.2.3...v7.0.0) (2019-06-18)
+
+### Features
+
+- consistent exports ([#37](https://github.com/jquense/uncontrollable/issues/37)) ([6b51ec6](https://github.com/jquense/uncontrollable/commit/6b51ec6))
+
+### BREAKING CHANGES
+
+- no more default export
+
+* removed default export
+* name files properly
+
+- Use default exports
+
+## [6.2.3](https://github.com/jquense/uncontrollable/compare/v6.2.2...v6.2.3) (2019-06-17)
+
+### Bug Fixes
+
+- republish again to fix build lol ([38f3bf8](https://github.com/jquense/uncontrollable/commit/38f3bf8))
+
+## [6.2.2](https://github.com/jquense/uncontrollable/compare/v6.2.1...v6.2.2) (2019-06-17)
+
+### Bug Fixes
+
+- make default import ([e7ff375](https://github.com/jquense/uncontrollable/commit/e7ff375))
+
+## [6.2.1](https://github.com/jquense/uncontrollable/compare/v6.2.0...v6.2.1) (2019-06-17)
+
+### Bug Fixes
+
+- bad publish ([82ef3fc](https://github.com/jquense/uncontrollable/commit/82ef3fc))
+
+# [6.2.0](https://github.com/jquense/uncontrollable/compare/v6.1.0...v6.2.0) (2019-06-17)
+
+### Features
+
+- add esm support ([2457bf3](https://github.com/jquense/uncontrollable/commit/2457bf3))
+
+# [6.1.0](https://github.com/jquense/uncontrollable/compare/v6.0.0...v6.1.0) (2019-02-12)
+
+### Features
+
+- add hook ([35c194d](https://github.com/jquense/uncontrollable/commit/35c194d))
+
+<a name="6.0.0"></a>
+
+# [6.0.0](https://github.com/jquense/uncontrollable/compare/v5.1.0...v6.0.0) (2018-05-02)
+
+### Features
+
+- Support forwardRef() ([a558754](https://github.com/jquense/uncontrollable/commit/a558754))
+
+### BREAKING CHANGES
+
+- attached refs are now the original components, and not
+  the uncontrolled component instance
+- removed getControlledInstance so there are no special
+  methods on the uncontrolled component
+
+<a name="5.1.0"></a>
+
+# [5.1.0](https://github.com/jquense/uncontrollable/compare/v5.0.0...v5.1.0) (2018-03-31)
+
+### Features
+
+- better release tooling ([41bfc32](https://github.com/jquense/uncontrollable/commit/41bfc32))
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/LICENSE b/node_modules/@restart/ui/node_modules/uncontrollable/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7805399acb78383e982b19164b4a95a1ff6b15ac
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jason Quense
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/README.md b/node_modules/@restart/ui/node_modules/uncontrollable/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..f79c2e02965db701be45bd501b77cf4e712bf30c
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/README.md
@@ -0,0 +1,137 @@
+# uncontrollable
+
+Wrap a controlled react component, to allow specific prop/handler pairs to be omitted by Component consumers. Uncontrollable allows you to write React components, with minimal state, and then wrap them in a component that will manage state for prop/handlers if they are excluded.
+
+## Install
+
+```sh
+npm i -S uncontrollable
+```
+
+### Usage
+
+If you are a bit unsure on the _why_ of this module read the next section first. If you just want to see some real-world examples, check out [React Widgets](https://github.com/jquense/react-widgets) which makes [heavy use of this strategy](https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521).
+
+```js
+import { uncontrollable } from 'uncontrollable';
+```
+
+### API
+
+#### `useUncontrolledProp(value, defaultValue, onChange) => [value, onChange]`
+
+A React hook that can be used in place of the above Higher order Component. It
+returns a complete set of `props` which are safe to spread through to a child element.
+
+```js
+import { useUncontrolledProp } from 'uncontrollable';
+
+const UncontrolledCombobox = ({ value, defaultValue, onChange }) => {
+  // filters out defaultValue, defaultOpen and returns controlled
+  // versions of onChange, and onToggle.
+  const [controlledValue, onControlledChange] = useUncontrolledProp(
+    value,
+    defaultValue,
+    onChange
+  );
+
+  return <Checkbox {...controlledProps} />;
+};
+```
+
+#### `useUncontrolled(props, propsHandlerHash) => controlledProps`
+
+A React hook that can be used in place of the above Higher order Component. It
+returns a complete set of `props` which are safe to spread through to a child element.
+
+```js
+import { useUncontrolled } from 'uncontrollable';
+
+const UncontrolledCombobox = (props) => {
+  // filters out defaultValue, defaultOpen and returns controlled
+  // versions of onChange, and onToggle.
+  const controlledProps = useUncontrolled(props, {
+    value: 'onChange',
+    open: 'onToggle',
+  });
+
+  return <Checkbox {...controlledProps} />;
+};
+```
+
+### Use Case
+
+One of the strengths of React is its extensibility model, enabled by a common practice of pushing component state as high up the tree as possible. While great for enabling extremely flexible and easy to reason about components, this can produce a lot of boilerplate to wire components up with every use. For simple components (like an input) this is usually a matter of tying the input `value` prop to a parent state property via its `onChange` handler. Here is an extremely common pattern:
+
+```jsx
+  render() {
+    return (
+      <input type='text'
+        value={this.state.value}
+        onChange={ e => this.setState({ value: e.target.value })}
+      />
+    )
+  }
+```
+
+This pattern moves the responsibility of managing the `value` from the input to its parent and mimics "two-way" databinding. Sometimes, however, there is no need for the parent to manage the input's state directly. In that case, all we want to do is set the initial `value` of the input and let the input manage it from then on. React deals with this through "uncontrolled" inputs, where if you don't indicate that you want to control the state of the input externally via a `value` prop it will just do the book-keeping for you.
+
+This is a great pattern which we can make use of in our own Components. It is often best to build each component to be as stateless as possible, assuming that the parent will want to control everything that makes sense. Take a simple Dropdown component as an example
+
+```js
+class SimpleDropdown extends React.Component {
+  static propTypes = {
+    value: React.PropTypes.string,
+    onChange: React.PropTypes.func,
+    open: React.PropTypes.bool,
+    onToggle: React.PropTypes.func,
+  };
+
+  render() {
+    return (
+      <div>
+        <input
+          value={this.props.value}
+          onChange={(e) => this.props.onChange(e.target.value)}
+        />
+        <button onClick={(e) => this.props.onToggle(!this.props.open)}>
+          open
+        </button>
+        {this.props.open && (
+          <ul className="open">
+            <li>option 1</li>
+            <li>option 2</li>
+          </ul>
+        )}
+      </div>
+    );
+  }
+}
+```
+
+Notice how we don't track any state in our simple dropdown? This is great because a consumer of our module will have the all the flexibility to decide what the behavior of the dropdown should be. Also notice our public API (propTypes), it consists of common pattern: a property we want set (`value`, `open`), and a set of handlers that indicate _when_ we want them set (`onChange`, `onToggle`). It is up to the parent component to change the `value` and `open` props in response to the handlers.
+
+While this pattern offers an excellent amount of flexibility to consumers, it also requires them to write a bunch of boilerplate code that probably won't change much from use to use. In all likelihood they will always want to set `open` in response to `onToggle`, and only in rare cases will want to override that behavior. This is where the controlled/uncontrolled pattern comes in.
+
+We want to just handle the open/onToggle case ourselves if the consumer doesn't provide a `open` prop (indicating that they want to control it). Rather than complicating our dropdown component with all that logic, obscuring the business logic of our dropdown, we can add it later, by taking our dropdown and wrapping it inside another component that handles that for us.
+
+`uncontrollable` allows you separate out the logic necessary to create controlled/uncontrolled inputs letting you focus on creating a completely controlled input and wrapping it later. This tends to be a lot simpler to reason about as well.
+
+```js
+  import { uncontrollable } from 'uncontrollable';
+
+  const UncontrollableDropdown = uncontrollable(SimpleDropdown, {
+    value: 'onChange',
+    open: 'onToggle'
+  })
+
+  <UncontrollableDropdown
+    value={this.state.val} // we can still control these props if we want
+    onChange={val => this.setState({ val })}
+    defaultOpen={true} /> // or just let the UncontrollableDropdown handle it
+                          // and we just set an initial value (or leave it out completely)!
+```
+
+Now we don't need to worry about the open onToggle! The returned component will track `open` for us by assuming that it should just set `open` to whatever `onToggle` returns. If we _do_ want to worry about it we can just provide `open` and `onToggle` props and the uncontrolled input will just pass them through.
+
+The above is a contrived example but it allows you to wrap even more complex Components, giving you a lot of flexibility in the API you can offer a consumer of your Component. For every pair of prop/handlers you also get a defaultProp of the form "default[PropName]" so `value` -> `defaultValue`, and `open` -> `defaultOpen`, etc. [React Widgets](https://github.com/jquense/react-widgets) makes heavy use of this strategy, you can see it in action here: https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.d.ts b/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..233a3cfc5e7193b1d127b61469ac7d39afa810d0
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.d.ts
@@ -0,0 +1,16 @@
+export type Handler = (value: any, ...args: any[]) => any;
+export declare function defaultKey(key: string): string;
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [
+    TProp | undefined,
+    (...args: Parameters<THandler>) => ReturnType<THandler> | void
+];
+export { useUncontrolledProp };
+type FilterFlags<Base, Condition> = {
+    [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
+};
+type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
+type ConfigMap<TProps extends object> = {
+    [p in keyof TProps]?: AllowedNames<TProps, Function>;
+};
+export declare function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.js b/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5ca25ceb41a253d23eae1163ac79f76216a0063
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/lib/cjs/index.js
@@ -0,0 +1,51 @@
+"use strict";
+
+exports.__esModule = true;
+exports.defaultKey = defaultKey;
+exports.useUncontrolled = useUncontrolled;
+exports.useUncontrolledProp = useUncontrolledProp;
+var _react = require("react");
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+function defaultKey(key) {
+  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+}
+function useUncontrolledProp(propValue, defaultValue, handler) {
+  const wasPropRef = (0, _react.useRef)(propValue !== undefined);
+  const [stateValue, setState] = (0, _react.useState)(defaultValue);
+  const isProp = propValue !== undefined;
+  const wasProp = wasPropRef.current;
+  wasPropRef.current = isProp;
+
+  /**
+   * If a prop switches from controlled to Uncontrolled
+   * reset its value to the defaultValue
+   */
+  if (!isProp && wasProp && stateValue !== defaultValue) {
+    setState(defaultValue);
+  }
+  return [isProp ? propValue : stateValue, (0, _react.useCallback)((...args) => {
+    const [value, ...rest] = args;
+    let returnValue = handler == null ? void 0 : handler(value, ...rest);
+    setState(value);
+    return returnValue;
+  }, [handler])];
+}
+function useUncontrolled(props, config) {
+  return Object.keys(config).reduce((result, fieldName) => {
+    const _ref = result,
+      _defaultKey = defaultKey(fieldName),
+      {
+        [_defaultKey]: defaultValue,
+        [fieldName]: propsValue
+      } = _ref,
+      rest = _objectWithoutPropertiesLoose(_ref, [_defaultKey, fieldName].map(_toPropertyKey));
+    const handlerName = config[fieldName];
+    const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);
+    return Object.assign({}, rest, {
+      [fieldName]: value,
+      [handlerName]: handler
+    });
+  }, props);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.d.ts b/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..233a3cfc5e7193b1d127b61469ac7d39afa810d0
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.d.ts
@@ -0,0 +1,16 @@
+export type Handler = (value: any, ...args: any[]) => any;
+export declare function defaultKey(key: string): string;
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [
+    TProp | undefined,
+    (...args: Parameters<THandler>) => ReturnType<THandler> | void
+];
+export { useUncontrolledProp };
+type FilterFlags<Base, Condition> = {
+    [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
+};
+type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
+type ConfigMap<TProps extends object> = {
+    [p in keyof TProps]?: AllowedNames<TProps, Function>;
+};
+export declare function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.js b/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c51399f361e30b2a58a32b1f17a387555abb8f69
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/lib/esm/index.js
@@ -0,0 +1,46 @@
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+import { useCallback, useRef, useState } from 'react';
+export function defaultKey(key) {
+  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+}
+function useUncontrolledProp(propValue, defaultValue, handler) {
+  const wasPropRef = useRef(propValue !== undefined);
+  const [stateValue, setState] = useState(defaultValue);
+  const isProp = propValue !== undefined;
+  const wasProp = wasPropRef.current;
+  wasPropRef.current = isProp;
+
+  /**
+   * If a prop switches from controlled to Uncontrolled
+   * reset its value to the defaultValue
+   */
+  if (!isProp && wasProp && stateValue !== defaultValue) {
+    setState(defaultValue);
+  }
+  return [isProp ? propValue : stateValue, useCallback((...args) => {
+    const [value, ...rest] = args;
+    let returnValue = handler == null ? void 0 : handler(value, ...rest);
+    setState(value);
+    return returnValue;
+  }, [handler])];
+}
+export { useUncontrolledProp };
+export function useUncontrolled(props, config) {
+  return Object.keys(config).reduce((result, fieldName) => {
+    const _ref = result,
+      _defaultKey = defaultKey(fieldName),
+      {
+        [_defaultKey]: defaultValue,
+        [fieldName]: propsValue
+      } = _ref,
+      rest = _objectWithoutPropertiesLoose(_ref, [_defaultKey, fieldName].map(_toPropertyKey));
+    const handlerName = config[fieldName];
+    const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);
+    return Object.assign({}, rest, {
+      [fieldName]: value,
+      [handlerName]: handler
+    });
+  }, props);
+}
\ No newline at end of file
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/package.json b/node_modules/@restart/ui/node_modules/uncontrollable/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2864e54e2dcd03986804b28ca4947c2ca3a8047a
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/package.json
@@ -0,0 +1,87 @@
+{
+  "_from": "uncontrollable@^8.0.1",
+  "_id": "uncontrollable@8.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==",
+  "_location": "/@restart/ui/uncontrollable",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "uncontrollable@^8.0.1",
+    "name": "uncontrollable",
+    "escapedName": "uncontrollable",
+    "rawSpec": "^8.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^8.0.1"
+  },
+  "_requiredBy": [
+    "/@restart/ui"
+  ],
+  "_resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz",
+  "_shasum": "a0a8307f638795162fafd0550f4a1efa0f8c5eb6",
+  "_spec": "uncontrollable@^8.0.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/@restart/ui",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jquense/uncontrollable/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Wrap a controlled react component, to allow specific prop/handler pairs to be uncontrolled",
+  "devDependencies": {
+    "@4c/build": "^4.0.0",
+    "@4c/rollout": "^4.0.2",
+    "@4c/tsconfig": "^0.4.1",
+    "@babel/cli": "^7.21.0",
+    "@babel/core": "^7.21.0",
+    "@babel/preset-react": "^7.18.6",
+    "@babel/preset-typescript": "^7.21.0",
+    "@testing-library/react": "^14.0.0",
+    "@types/react": ">=18.0.28",
+    "babel-jest": "^29.5.0",
+    "babel-preset-env-modules": "^1.0.1",
+    "jest": "^29.5.0",
+    "jest-environment-jsdom": "^29.5.0",
+    "react": "^18.2.0",
+    "react-dom": "^18.2.0",
+    "typescript": "^4.9.5"
+  },
+  "homepage": "https://github.com/jquense/uncontrollable#readme",
+  "jest": {
+    "testEnvironment": "jsdom"
+  },
+  "keywords": [
+    "uncontrolled-component",
+    "react-component",
+    "input",
+    "controlled",
+    "uncontrolled",
+    "form"
+  ],
+  "license": "MIT",
+  "main": "lib/cjs/index.js",
+  "module": "lib/esm/index.js",
+  "name": "uncontrollable",
+  "peerDependencies": {
+    "react": ">=16.14.0"
+  },
+  "prettier": {
+    "singleQuote": true
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jquense/uncontrollable.git"
+  },
+  "scripts": {
+    "build": "build src",
+    "prepublishOnly": "npm run build",
+    "release": "rollout --conventionalCommits",
+    "tdd": "jest --watch",
+    "test": "jest"
+  },
+  "version": "8.0.4"
+}
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/test/test.js b/node_modules/@restart/ui/node_modules/uncontrollable/test/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..cdfbdeab0949a74b03455fa74e72a099b3076511
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/test/test.js
@@ -0,0 +1,102 @@
+import { render, fireEvent } from '@testing-library/react';
+import React from 'react';
+import { useUncontrolled } from '../src';
+
+describe('uncontrollable', () => {
+  it('should track internally if not specified', () => {
+    let ref = {};
+    let Control = (props) => {
+      props = useUncontrolled(props, { value: 'onChange' });
+      ref.current = props;
+
+      return (
+        <input
+          {...props}
+          data-testid="input"
+          value={props.value == null ? '' : props.value}
+          onChange={(e) => props.onChange(+e.target.value)}
+        />
+      );
+    };
+
+    let inst = render(<Control />);
+
+    fireEvent.change(inst.getByTestId('input'), { target: { value: 42 } });
+
+    expect(ref.current.value).toEqual(42);
+  });
+
+  it('should allow for defaultProp', () => {
+    let ref = {};
+    let Control = (props) => {
+      props = useUncontrolled(props, {
+        value: 'onChange',
+        open: 'onToggle',
+      });
+
+      ref.current = props;
+
+      return (
+        <input
+          {...props}
+          className={props.open ? 'open' : ''}
+          data-testid="input"
+          value={props.value == null ? '' : props.value}
+          onChange={(e) => props.onChange(+e.target.value)}
+        />
+      );
+    };
+    let inst = render(<Control defaultValue={10} defaultOpen />);
+
+    expect(inst.container.querySelectorAll('.open')).toHaveLength(1);
+
+    expect(ref.current.defaultValue).not.toBeDefined();
+    expect(ref.current.defaultOpen).not.toBeDefined();
+
+    let input = inst.container.querySelector('input');
+
+    expect(input.value).toEqual('10');
+
+    fireEvent.change(inst.getByTestId('input'), { target: { value: 42 } });
+    expect(ref.current.value).toEqual(42);
+  });
+
+  it('should revert to defaultProp when switched to uncontrolled', () => {
+    let ref = {};
+    let Control = (props) => {
+      props = useUncontrolled(props, { value: 'onChange' });
+      ref.current = props;
+
+      return (
+        <input
+          {...props}
+          data-testid="input"
+          value={props.value == null ? '' : props.value}
+          onChange={(e) => props.onChange(e.value)}
+        />
+      );
+    };
+
+    let inst = render(
+      <Control defaultValue="foo" value="bar" onChange={() => {}} />
+    );
+
+    expect(ref.current.value).toEqual('bar');
+
+    inst.rerender(<Control defaultValue="foo" onChange={() => {}} />);
+
+    expect(ref.current.value).toEqual('foo');
+
+    inst.rerender(
+      <Control defaultValue="foo" value="bar" onChange={() => {}} />
+    );
+
+    expect(ref.current.value).toEqual('bar');
+
+    inst.rerender(
+      <Control defaultValue="baz" value={undefined} onChange={() => {}} />
+    );
+
+    expect(ref.current.value).toEqual('baz');
+  });
+});
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/test/types-test.tsx b/node_modules/@restart/ui/node_modules/uncontrollable/test/types-test.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..a613d69597f8e68b8d1bddcbb7a809405d94782f
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/test/types-test.tsx
@@ -0,0 +1,43 @@
+import { useUncontrolled, useUncontrolledProp } from '../src';
+
+interface Props {
+  value?: string;
+  defaultValue: string | undefined;
+  onChange?(value: string, meta: {}): void;
+}
+
+function Foo(props: Props) {
+  // $ExpectType [string, (value: string, meta: {}) => void]
+  const [value, onChange] = useUncontrolledProp(
+    props.value,
+    props.defaultValue,
+    props.onChange
+  );
+}
+
+interface Props2 {
+  value?: string;
+  defaultValue: string | undefined;
+  onChange?(value: string, meta: {}): Promise<void>;
+}
+
+function Foo2(props: Props2) {
+  // $ExpectType [string, (value: string, meta: {}) => void | Promise<void>]
+  const [value, onChange] = useUncontrolledProp(
+    props.value,
+    props.defaultValue,
+    props.onChange
+  );
+}
+
+function FooA(props: Props) {
+  // $ExpectType { value: string, onChange:  (value: string, meta: {}) => void }
+  const a = useUncontrolled<Props, 'defaultValue'>(props, {
+    value: 'onChange',
+  });
+
+  // $ExpectType Props
+  const b = useUncontrolled(props, {
+    value: 'onChange',
+  });
+}
diff --git a/node_modules/@restart/ui/node_modules/uncontrollable/tsconfig.json b/node_modules/@restart/ui/node_modules/uncontrollable/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..554faef77c138bcc62711cc4c3345539329250f0
--- /dev/null
+++ b/node_modules/@restart/ui/node_modules/uncontrollable/tsconfig.json
@@ -0,0 +1,9 @@
+{
+  "extends": "@4c/tsconfig/web.json",
+  "compilerOptions": {
+    "noImplicitAny": false,
+    "rootDir": "src",
+    "declaration": true
+  },
+  "include": ["src"]
+}
diff --git a/node_modules/@restart/ui/package.json b/node_modules/@restart/ui/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c846b35f770cf452663c4c14e4459f4443c24119
--- /dev/null
+++ b/node_modules/@restart/ui/package.json
@@ -0,0 +1,105 @@
+{
+  "_from": "@restart/ui@^1.6.9",
+  "_id": "@restart/ui@1.8.0",
+  "_inBundle": false,
+  "_integrity": "sha512-xJEOXUOTmT4FngTmhdjKFRrVVF0hwCLNPdatLCHkyS4dkiSK12cEu1Y0fjxktjJrdst9jJIc5J6ihMJCoWEN/g==",
+  "_location": "/@restart/ui",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@restart/ui@^1.6.9",
+    "name": "@restart/ui",
+    "escapedName": "@restart%2fui",
+    "scope": "@restart",
+    "rawSpec": "^1.6.9",
+    "saveSpec": null,
+    "fetchSpec": "^1.6.9"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.8.0.tgz",
+  "_shasum": "3e8d80822b5fbef0576f94acda51d7da9e79e005",
+  "_spec": "@restart/ui@^1.6.9",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/react-restart/ui/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@babel/runtime": "^7.21.0",
+    "@popperjs/core": "^2.11.6",
+    "@react-aria/ssr": "^3.5.0",
+    "@restart/hooks": "^0.4.9",
+    "@types/warning": "^3.0.0",
+    "dequal": "^2.0.3",
+    "dom-helpers": "^5.2.0",
+    "uncontrollable": "^8.0.1",
+    "warning": "^4.0.3"
+  },
+  "deprecated": false,
+  "description": "Utilities for creating robust overlay components",
+  "exports": {
+    ".": {
+      "types": "./esm/index.d.ts",
+      "node": "./cjs/index.js",
+      "import": "./esm/index.js",
+      "require": "./cjs/index.js"
+    },
+    "./*": {
+      "types": "./esm/*.d.ts",
+      "node": "./cjs/*.js",
+      "import": "./esm/*.js",
+      "require": "./cjs/*.js"
+    }
+  },
+  "gitHooks": {
+    "pre-commit": "lint-staged"
+  },
+  "homepage": "https://github.com/react-restart/ui#readme",
+  "keywords": [
+    "react-overlays",
+    "react-component",
+    "react",
+    "overlay",
+    "react-component",
+    "tooltip",
+    "bootstrap",
+    "popover",
+    "modal"
+  ],
+  "license": "MIT",
+  "lint-staged": {
+    "*.js,*.tsx": "eslint --fix --ext .js,.ts,.tsx"
+  },
+  "main": "cjs/index.js",
+  "module": "esm/index.js",
+  "name": "@restart/ui",
+  "peerDependencies": {
+    "react": ">=16.14.0",
+    "react-dom": ">=16.14.0"
+  },
+  "prettier": {
+    "singleQuote": true,
+    "trailingComma": "all"
+  },
+  "publishConfig": {
+    "access": "public",
+    "directory": "lib"
+  },
+  "release": {
+    "conventionalCommits": true
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/react-restart/ui.git"
+  },
+  "sideEffects": false,
+  "types": "esm/index.d.ts",
+  "version": "1.8.0"
+}
diff --git a/node_modules/@restart/ui/popper/package.json b/node_modules/@restart/ui/popper/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c80819d7e1976732b12c55fffd9dd275cd3606ea
--- /dev/null
+++ b/node_modules/@restart/ui/popper/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/popper",
+  "private": true,
+  "main": "../cjs/popper.js",
+  "module": "../esm/popper.js",
+  "types": "../esm/popper.d.ts"
+}
diff --git a/node_modules/@restart/ui/ssr/package.json b/node_modules/@restart/ui/ssr/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2a8dde2acc96176bc3bbcfa751d1204a55c7f9a5
--- /dev/null
+++ b/node_modules/@restart/ui/ssr/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/ssr",
+  "private": true,
+  "main": "../cjs/ssr.js",
+  "module": "../esm/ssr.js",
+  "types": "../esm/ssr.d.ts"
+}
diff --git a/node_modules/@restart/ui/types/package.json b/node_modules/@restart/ui/types/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9ff03909c174047b0c47e95fbcae3777016f6535
--- /dev/null
+++ b/node_modules/@restart/ui/types/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/types",
+  "private": true,
+  "main": "../cjs/types.js",
+  "module": "../esm/types.js",
+  "types": "../esm/types.d.ts"
+}
diff --git a/node_modules/@restart/ui/useClickOutside/package.json b/node_modules/@restart/ui/useClickOutside/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ed17aedbb8bd5c2ff6d81e0fd9254d8140c160c0
--- /dev/null
+++ b/node_modules/@restart/ui/useClickOutside/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useClickOutside",
+  "private": true,
+  "main": "../cjs/useClickOutside.js",
+  "module": "../esm/useClickOutside.js",
+  "types": "../esm/useClickOutside.d.ts"
+}
diff --git a/node_modules/@restart/ui/usePopper/package.json b/node_modules/@restart/ui/usePopper/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e7c33afb9fb8b36f039f9d5a0b9cf2becac2556e
--- /dev/null
+++ b/node_modules/@restart/ui/usePopper/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/usePopper",
+  "private": true,
+  "main": "../cjs/usePopper.js",
+  "module": "../esm/usePopper.js",
+  "types": "../esm/usePopper.d.ts"
+}
diff --git a/node_modules/@restart/ui/useRTGTransitionProps/package.json b/node_modules/@restart/ui/useRTGTransitionProps/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..29b7dd653c87b59e76619cdccf75f9679e804116
--- /dev/null
+++ b/node_modules/@restart/ui/useRTGTransitionProps/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useRTGTransitionProps",
+  "private": true,
+  "main": "../cjs/useRTGTransitionProps.js",
+  "module": "../esm/useRTGTransitionProps.js",
+  "types": "../esm/useRTGTransitionProps.d.ts"
+}
diff --git a/node_modules/@restart/ui/useRootClose/package.json b/node_modules/@restart/ui/useRootClose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e4e1d1fc894c6d2457ab87b0726f4d8d37a62504
--- /dev/null
+++ b/node_modules/@restart/ui/useRootClose/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useRootClose",
+  "private": true,
+  "main": "../cjs/useRootClose.js",
+  "module": "../esm/useRootClose.js",
+  "types": "../esm/useRootClose.d.ts"
+}
diff --git a/node_modules/@restart/ui/useScrollParent/package.json b/node_modules/@restart/ui/useScrollParent/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc4a233081f2312f35ab61137c7cc905b002191c
--- /dev/null
+++ b/node_modules/@restart/ui/useScrollParent/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useScrollParent",
+  "private": true,
+  "main": "../cjs/useScrollParent.js",
+  "module": "../esm/useScrollParent.js",
+  "types": "../esm/useScrollParent.d.ts"
+}
diff --git a/node_modules/@restart/ui/useWaitForDOMRef/package.json b/node_modules/@restart/ui/useWaitForDOMRef/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3def474b40ccefc6c436d59af62a761e5c3b7f4d
--- /dev/null
+++ b/node_modules/@restart/ui/useWaitForDOMRef/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useWaitForDOMRef",
+  "private": true,
+  "main": "../cjs/useWaitForDOMRef.js",
+  "module": "../esm/useWaitForDOMRef.js",
+  "types": "../esm/useWaitForDOMRef.d.ts"
+}
diff --git a/node_modules/@restart/ui/useWaypoint/package.json b/node_modules/@restart/ui/useWaypoint/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc6cdbf3894f632904a76971ade61769faccfc24
--- /dev/null
+++ b/node_modules/@restart/ui/useWaypoint/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useWaypoint",
+  "private": true,
+  "main": "../cjs/useWaypoint.js",
+  "module": "../esm/useWaypoint.js",
+  "types": "../esm/useWaypoint.d.ts"
+}
diff --git a/node_modules/@restart/ui/useWindow/package.json b/node_modules/@restart/ui/useWindow/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa9f6d1f59cff71268321c5425e37c878b3b823b
--- /dev/null
+++ b/node_modules/@restart/ui/useWindow/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/useWindow",
+  "private": true,
+  "main": "../cjs/useWindow.js",
+  "module": "../esm/useWindow.js",
+  "types": "../esm/useWindow.d.ts"
+}
diff --git a/node_modules/@restart/ui/utils/package.json b/node_modules/@restart/ui/utils/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a3b809104de7b15e6fd3e208e89fde97b2eabd59
--- /dev/null
+++ b/node_modules/@restart/ui/utils/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "@restart/ui/utils",
+  "private": true,
+  "main": "../cjs/utils.js",
+  "module": "../esm/utils.js",
+  "types": "../esm/utils.d.ts"
+}
diff --git a/node_modules/@swc/helpers/LICENSE b/node_modules/@swc/helpers/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..6a08504909fe063aedf79b9113c240dec13858d5
--- /dev/null
+++ b/node_modules/@swc/helpers/LICENSE
@@ -0,0 +1,201 @@
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright 2024 SWC contributors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+	http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json b/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7d6b95480d48bdd780e19d3f377bbcfa4031cd1d
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_apply_decorated_descriptor/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_apply_decorated_descriptor.cjs",
+    "module": "../../esm/_apply_decorated_descriptor.js"
+}
diff --git a/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json b/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..80f208cbd79badcc60af095b86a4c49214a2ccd8
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_apply_decs_2203_r/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_apply_decs_2203_r.cjs",
+    "module": "../../esm/_apply_decs_2203_r.js"
+}
diff --git a/node_modules/@swc/helpers/_/_array_like_to_array/package.json b/node_modules/@swc/helpers/_/_array_like_to_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..37bd07fb46740870a00a7f278e9c246f056281b4
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_array_like_to_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_array_like_to_array.cjs",
+    "module": "../../esm/_array_like_to_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_array_with_holes/package.json b/node_modules/@swc/helpers/_/_array_with_holes/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7f602bcb0c17f09b21edab35c80e46c39b15d334
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_array_with_holes/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_array_with_holes.cjs",
+    "module": "../../esm/_array_with_holes.js"
+}
diff --git a/node_modules/@swc/helpers/_/_array_without_holes/package.json b/node_modules/@swc/helpers/_/_array_without_holes/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aeefbfce82e47a368e0f54b3d6213a8209bdfe29
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_array_without_holes/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_array_without_holes.cjs",
+    "module": "../../esm/_array_without_holes.js"
+}
diff --git a/node_modules/@swc/helpers/_/_assert_this_initialized/package.json b/node_modules/@swc/helpers/_/_assert_this_initialized/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..fab7d972f50cc6a823435803b3cc77d2848fe30a
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_assert_this_initialized/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_assert_this_initialized.cjs",
+    "module": "../../esm/_assert_this_initialized.js"
+}
diff --git a/node_modules/@swc/helpers/_/_async_generator/package.json b/node_modules/@swc/helpers/_/_async_generator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6c3674070396578142f4b7397f7b71a757dfc6b1
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_async_generator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_async_generator.cjs",
+    "module": "../../esm/_async_generator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_async_generator_delegate/package.json b/node_modules/@swc/helpers/_/_async_generator_delegate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aa2450536dd1f6cf136d186828957e08c86b3bcf
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_async_generator_delegate/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_async_generator_delegate.cjs",
+    "module": "../../esm/_async_generator_delegate.js"
+}
diff --git a/node_modules/@swc/helpers/_/_async_iterator/package.json b/node_modules/@swc/helpers/_/_async_iterator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b87fa5cea85a0bad18548047c60bca7fb52791be
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_async_iterator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_async_iterator.cjs",
+    "module": "../../esm/_async_iterator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_async_to_generator/package.json b/node_modules/@swc/helpers/_/_async_to_generator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1bfa4159ce29259ae055a4d9fbf1065e9acb3b36
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_async_to_generator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_async_to_generator.cjs",
+    "module": "../../esm/_async_to_generator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_await_async_generator/package.json b/node_modules/@swc/helpers/_/_await_async_generator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..62d48a7fd18164fc91334a86b32ce66bda0d61be
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_await_async_generator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_await_async_generator.cjs",
+    "module": "../../esm/_await_async_generator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_await_value/package.json b/node_modules/@swc/helpers/_/_await_value/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a0fe68d9381920eb2235da172ca16d317a32cc97
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_await_value/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_await_value.cjs",
+    "module": "../../esm/_await_value.js"
+}
diff --git a/node_modules/@swc/helpers/_/_call_super/package.json b/node_modules/@swc/helpers/_/_call_super/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..46cf64de5f5ab994f0ae6a16ada323e9dc6a5fc0
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_call_super/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_call_super.cjs",
+    "module": "../../esm/_call_super.js"
+}
diff --git a/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json b/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d8c7cf45dbf780756057068b5eadc31590c83a1
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_check_private_redeclaration/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_check_private_redeclaration.cjs",
+    "module": "../../esm/_check_private_redeclaration.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json b/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8322bad688e7a3c2c5681d3165dc7b096c7c5365
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_apply_descriptor_destructure/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_apply_descriptor_destructure.cjs",
+    "module": "../../esm/_class_apply_descriptor_destructure.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json b/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..eb0c92d235822f6a53240485690351c4b0d509bd
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_apply_descriptor_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_apply_descriptor_get.cjs",
+    "module": "../../esm/_class_apply_descriptor_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json b/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..68de7559a8bd5f40ffcc820f2d7941c134f476af
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_apply_descriptor_set/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_apply_descriptor_set.cjs",
+    "module": "../../esm/_class_apply_descriptor_set.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json b/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8b8a5c950cac00cfe702190360c46897291cead2
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_apply_descriptor_update/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_apply_descriptor_update.cjs",
+    "module": "../../esm/_class_apply_descriptor_update.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_call_check/package.json b/node_modules/@swc/helpers/_/_class_call_check/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..69345d45a3d2109ec7a7287800ad851acfdf4d2f
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_call_check/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_call_check.cjs",
+    "module": "../../esm/_class_call_check.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json b/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d69f9f582b7eb41f9e9ce1a91f3863b5193dc389
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_check_private_static_access/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_check_private_static_access.cjs",
+    "module": "../../esm/_class_check_private_static_access.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json b/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8dd77c2ea094620cec8651217c8184b0a94d6e4f
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_check_private_static_field_descriptor/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_check_private_static_field_descriptor.cjs",
+    "module": "../../esm/_class_check_private_static_field_descriptor.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json b/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7c3965f11827fa127ea85468b708ac2d49a60228
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_extract_field_descriptor/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_extract_field_descriptor.cjs",
+    "module": "../../esm/_class_extract_field_descriptor.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json b/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ac4b5173776216baa114fc2d3b214ebb64cc3ef
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_name_tdz_error/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_name_tdz_error.cjs",
+    "module": "../../esm/_class_name_tdz_error.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json b/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..044346e6db5af31a7a282dc476fdfef28a267e62
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_destructure/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_destructure.cjs",
+    "module": "../../esm/_class_private_field_destructure.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_get/package.json b/node_modules/@swc/helpers/_/_class_private_field_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4650d80f4e00d0559159eb749a05927b9df0cf5e
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_get.cjs",
+    "module": "../../esm/_class_private_field_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_init/package.json b/node_modules/@swc/helpers/_/_class_private_field_init/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8c57a74665c3a5c11a302d687e6e43b183651489
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_init/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_init.cjs",
+    "module": "../../esm/_class_private_field_init.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json b/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..07df6d88ffdfb11ea91d9d4cb6af2c81e993624e
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_loose_base/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_loose_base.cjs",
+    "module": "../../esm/_class_private_field_loose_base.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json b/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..abd74810347533b23fc10976d00e879fd2c6cabf
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_loose_key/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_loose_key.cjs",
+    "module": "../../esm/_class_private_field_loose_key.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_set/package.json b/node_modules/@swc/helpers/_/_class_private_field_set/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..477326e3d165050182b6586c7261c7019570a2a8
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_set/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_set.cjs",
+    "module": "../../esm/_class_private_field_set.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_field_update/package.json b/node_modules/@swc/helpers/_/_class_private_field_update/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ecb502fa6871a144922c6efa7354fc819863e2bd
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_field_update/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_field_update.cjs",
+    "module": "../../esm/_class_private_field_update.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_method_get/package.json b/node_modules/@swc/helpers/_/_class_private_method_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d01b2ec39a30f4e4e04a841b449c95426982e01
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_method_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_method_get.cjs",
+    "module": "../../esm/_class_private_method_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_method_init/package.json b/node_modules/@swc/helpers/_/_class_private_method_init/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7c9e406c91e841ef20b8a4a9c48d139f292c23b0
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_method_init/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_method_init.cjs",
+    "module": "../../esm/_class_private_method_init.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_private_method_set/package.json b/node_modules/@swc/helpers/_/_class_private_method_set/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bc842290ae57d66087862b1e37db6237776c1d63
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_private_method_set/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_private_method_set.cjs",
+    "module": "../../esm/_class_private_method_set.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json b/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7cc7dc622c2bc306bdfd7edd8645f7482450a26d
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_static_private_field_destructure/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_static_private_field_destructure.cjs",
+    "module": "../../esm/_class_static_private_field_destructure.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json b/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d626f6f2398950e44ada82e47fdf0ea70656f54d
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_static_private_field_spec_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_static_private_field_spec_get.cjs",
+    "module": "../../esm/_class_static_private_field_spec_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json b/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7a4d0891d687276b051e0a0d60e18435a63fca8b
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_static_private_field_spec_set/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_static_private_field_spec_set.cjs",
+    "module": "../../esm/_class_static_private_field_spec_set.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json b/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c10abd016298d8175735169752012628469f7919
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_static_private_field_update/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_static_private_field_update.cjs",
+    "module": "../../esm/_class_static_private_field_update.js"
+}
diff --git a/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json b/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1f4f139fa6f7480b1895bd83523d54c42e7fa6de
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_class_static_private_method_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_class_static_private_method_get.cjs",
+    "module": "../../esm/_class_static_private_method_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_construct/package.json b/node_modules/@swc/helpers/_/_construct/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0eea254969d2076128ab827d889bbd37b7ad3df5
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_construct/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_construct.cjs",
+    "module": "../../esm/_construct.js"
+}
diff --git a/node_modules/@swc/helpers/_/_create_class/package.json b/node_modules/@swc/helpers/_/_create_class/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..191f7edbb0fd5185586e08ecfa578a6a48a371dd
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_create_class/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_create_class.cjs",
+    "module": "../../esm/_create_class.js"
+}
diff --git a/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json b/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..68257867b6713208682dc7aac55b31e2c86f77a4
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_create_for_of_iterator_helper_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_create_for_of_iterator_helper_loose.cjs",
+    "module": "../../esm/_create_for_of_iterator_helper_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_create_super/package.json b/node_modules/@swc/helpers/_/_create_super/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3442b58a31d8074a7a915080cff438c8f164752f
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_create_super/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_create_super.cjs",
+    "module": "../../esm/_create_super.js"
+}
diff --git a/node_modules/@swc/helpers/_/_decorate/package.json b/node_modules/@swc/helpers/_/_decorate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d33cc5b3e89fe958a6207172d94cc41b1c0cea03
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_decorate/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_decorate.cjs",
+    "module": "../../esm/_decorate.js"
+}
diff --git a/node_modules/@swc/helpers/_/_defaults/package.json b/node_modules/@swc/helpers/_/_defaults/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e44774f07af4c64ae52092a470f92c7df07628fc
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_defaults/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_defaults.cjs",
+    "module": "../../esm/_defaults.js"
+}
diff --git a/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json b/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..63c488e00a2e7ffc1d8cfd4590786359013ce515
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_define_enumerable_properties/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_define_enumerable_properties.cjs",
+    "module": "../../esm/_define_enumerable_properties.js"
+}
diff --git a/node_modules/@swc/helpers/_/_define_property/package.json b/node_modules/@swc/helpers/_/_define_property/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ac05789cdbdc964c625c19c5b554ba29e009f09a
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_define_property/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_define_property.cjs",
+    "module": "../../esm/_define_property.js"
+}
diff --git a/node_modules/@swc/helpers/_/_dispose/package.json b/node_modules/@swc/helpers/_/_dispose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a6e5f50538de7fd220e60580ace127cdd2763018
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_dispose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_dispose.cjs",
+    "module": "../../esm/_dispose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_export_star/package.json b/node_modules/@swc/helpers/_/_export_star/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c47d22b81afbf460ef43841aff7e24849a6b4cab
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_export_star/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_export_star.cjs",
+    "module": "../../esm/_export_star.js"
+}
diff --git a/node_modules/@swc/helpers/_/_extends/package.json b/node_modules/@swc/helpers/_/_extends/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..40fc9ac4e5caa0c73540e398e6ec87cc440e7678
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_extends/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_extends.cjs",
+    "module": "../../esm/_extends.js"
+}
diff --git a/node_modules/@swc/helpers/_/_get/package.json b/node_modules/@swc/helpers/_/_get/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f6cb810894cec7598d39718899d0ba793c24438a
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_get/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_get.cjs",
+    "module": "../../esm/_get.js"
+}
diff --git a/node_modules/@swc/helpers/_/_get_prototype_of/package.json b/node_modules/@swc/helpers/_/_get_prototype_of/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7c4ca8e69da6359d7e5c787cb6b3f8adac55241b
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_get_prototype_of/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_get_prototype_of.cjs",
+    "module": "../../esm/_get_prototype_of.js"
+}
diff --git a/node_modules/@swc/helpers/_/_identity/package.json b/node_modules/@swc/helpers/_/_identity/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3b45f4c7f54ab66e426e642c664e262d70c533b8
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_identity/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_identity.cjs",
+    "module": "../../esm/_identity.js"
+}
diff --git a/node_modules/@swc/helpers/_/_inherits/package.json b/node_modules/@swc/helpers/_/_inherits/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..425da862f869c47eac122c0d87aca4ed2ae9b297
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_inherits/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_inherits.cjs",
+    "module": "../../esm/_inherits.js"
+}
diff --git a/node_modules/@swc/helpers/_/_inherits_loose/package.json b/node_modules/@swc/helpers/_/_inherits_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ffa67dc2eebc27997342e076f32cf704272c00f0
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_inherits_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_inherits_loose.cjs",
+    "module": "../../esm/_inherits_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_initializer_define_property/package.json b/node_modules/@swc/helpers/_/_initializer_define_property/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b65ad3b0bb1a6e5fcb00eee7027e87a382d03944
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_initializer_define_property/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_initializer_define_property.cjs",
+    "module": "../../esm/_initializer_define_property.js"
+}
diff --git a/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json b/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..94653a8fa4a1e9adba9fad4639971b49fbf1f99c
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_initializer_warning_helper/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_initializer_warning_helper.cjs",
+    "module": "../../esm/_initializer_warning_helper.js"
+}
diff --git a/node_modules/@swc/helpers/_/_instanceof/package.json b/node_modules/@swc/helpers/_/_instanceof/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..523c344756f57dc31267b281db90585812fb67d6
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_instanceof/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_instanceof.cjs",
+    "module": "../../esm/_instanceof.js"
+}
diff --git a/node_modules/@swc/helpers/_/_interop_require_default/package.json b/node_modules/@swc/helpers/_/_interop_require_default/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..70d438fc049238da365664c7b46b571a185f5de3
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_interop_require_default/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_interop_require_default.cjs",
+    "module": "../../esm/_interop_require_default.js"
+}
diff --git a/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json b/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3469a5d300c311a1860a9af55d7c4876b9777a8
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_interop_require_wildcard.cjs",
+    "module": "../../esm/_interop_require_wildcard.js"
+}
diff --git a/node_modules/@swc/helpers/_/_is_native_function/package.json b/node_modules/@swc/helpers/_/_is_native_function/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6380c813473098afa122f877d4560f29d177c873
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_is_native_function/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_is_native_function.cjs",
+    "module": "../../esm/_is_native_function.js"
+}
diff --git a/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json b/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9aa84b0f88f89d9ddbb87238f65ec4fb06656984
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_is_native_reflect_construct/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_is_native_reflect_construct.cjs",
+    "module": "../../esm/_is_native_reflect_construct.js"
+}
diff --git a/node_modules/@swc/helpers/_/_iterable_to_array/package.json b/node_modules/@swc/helpers/_/_iterable_to_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7754bd48be4cd5a813d3a46e48c744196114d40d
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_iterable_to_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_iterable_to_array.cjs",
+    "module": "../../esm/_iterable_to_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json b/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a69c45e990e6ec16582aee609b83cf5c2335d21a
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_iterable_to_array_limit/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_iterable_to_array_limit.cjs",
+    "module": "../../esm/_iterable_to_array_limit.js"
+}
diff --git a/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json b/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4a392ebec00a3444c5a09dec1d0517c45d30a5c
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_iterable_to_array_limit_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_iterable_to_array_limit_loose.cjs",
+    "module": "../../esm/_iterable_to_array_limit_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_jsx/package.json b/node_modules/@swc/helpers/_/_jsx/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..be886148e532e1341df4490f88267f251c139440
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_jsx/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_jsx.cjs",
+    "module": "../../esm/_jsx.js"
+}
diff --git a/node_modules/@swc/helpers/_/_new_arrow_check/package.json b/node_modules/@swc/helpers/_/_new_arrow_check/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..df1d9eb740a87fc0e91045baed3e1c99125b9cfa
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_new_arrow_check/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_new_arrow_check.cjs",
+    "module": "../../esm/_new_arrow_check.js"
+}
diff --git a/node_modules/@swc/helpers/_/_non_iterable_rest/package.json b/node_modules/@swc/helpers/_/_non_iterable_rest/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..43d3d3a23af6893c61a014c5c8bb2e3dc1db73b8
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_non_iterable_rest/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_non_iterable_rest.cjs",
+    "module": "../../esm/_non_iterable_rest.js"
+}
diff --git a/node_modules/@swc/helpers/_/_non_iterable_spread/package.json b/node_modules/@swc/helpers/_/_non_iterable_spread/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0df885d88ba1dfb13af3a5ed749a4c52b5d87465
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_non_iterable_spread/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_non_iterable_spread.cjs",
+    "module": "../../esm/_non_iterable_spread.js"
+}
diff --git a/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json b/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b9e7f60c27ce1ddfad3d75fe10f2a542cff62312
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_object_destructuring_empty/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_object_destructuring_empty.cjs",
+    "module": "../../esm/_object_destructuring_empty.js"
+}
diff --git a/node_modules/@swc/helpers/_/_object_spread/package.json b/node_modules/@swc/helpers/_/_object_spread/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..79c030a7ede053d2e836ac8efafb581dce4a7e41
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_object_spread/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_object_spread.cjs",
+    "module": "../../esm/_object_spread.js"
+}
diff --git a/node_modules/@swc/helpers/_/_object_spread_props/package.json b/node_modules/@swc/helpers/_/_object_spread_props/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1fa988bcaab428a717fbbd205f383471c8ecdc5b
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_object_spread_props/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_object_spread_props.cjs",
+    "module": "../../esm/_object_spread_props.js"
+}
diff --git a/node_modules/@swc/helpers/_/_object_without_properties/package.json b/node_modules/@swc/helpers/_/_object_without_properties/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5553145d1b3f3ed61a131cc7ae25f0fa720acf23
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_object_without_properties/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_object_without_properties.cjs",
+    "module": "../../esm/_object_without_properties.js"
+}
diff --git a/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json b/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8f08da9cd7e856f216a216a8515c3d1b5b2f2efd
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_object_without_properties_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_object_without_properties_loose.cjs",
+    "module": "../../esm/_object_without_properties_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_possible_constructor_return/package.json b/node_modules/@swc/helpers/_/_possible_constructor_return/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..06256ff1c88216da98b08d4a20c38e636bf4f070
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_possible_constructor_return/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_possible_constructor_return.cjs",
+    "module": "../../esm/_possible_constructor_return.js"
+}
diff --git a/node_modules/@swc/helpers/_/_read_only_error/package.json b/node_modules/@swc/helpers/_/_read_only_error/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c724d5e1f0147400204ce65c6a8c3360d65c8f7f
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_read_only_error/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_read_only_error.cjs",
+    "module": "../../esm/_read_only_error.js"
+}
diff --git a/node_modules/@swc/helpers/_/_set/package.json b/node_modules/@swc/helpers/_/_set/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c90145be2754569f9563bb96c0a229298c3dd2ef
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_set/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_set.cjs",
+    "module": "../../esm/_set.js"
+}
diff --git a/node_modules/@swc/helpers/_/_set_prototype_of/package.json b/node_modules/@swc/helpers/_/_set_prototype_of/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d08cf843325826108afea40d9d05d9e3277ed3b6
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_set_prototype_of/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_set_prototype_of.cjs",
+    "module": "../../esm/_set_prototype_of.js"
+}
diff --git a/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json b/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc34934ef02f8fa90a1bc8b027088792c970417a
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_skip_first_generator_next/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_skip_first_generator_next.cjs",
+    "module": "../../esm/_skip_first_generator_next.js"
+}
diff --git a/node_modules/@swc/helpers/_/_sliced_to_array/package.json b/node_modules/@swc/helpers/_/_sliced_to_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..52b4fbba82b4b1f43998cdab6975eca92edd476b
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_sliced_to_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_sliced_to_array.cjs",
+    "module": "../../esm/_sliced_to_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json b/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ca2c35bce6b0363fff9f05b6fddb747d06b58d8b
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_sliced_to_array_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_sliced_to_array_loose.cjs",
+    "module": "../../esm/_sliced_to_array_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_super_prop_base/package.json b/node_modules/@swc/helpers/_/_super_prop_base/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f6557ef5194f71683fd66017c15076ad0ed7b639
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_super_prop_base/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_super_prop_base.cjs",
+    "module": "../../esm/_super_prop_base.js"
+}
diff --git a/node_modules/@swc/helpers/_/_tagged_template_literal/package.json b/node_modules/@swc/helpers/_/_tagged_template_literal/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..63d2a40a505c657ac3da58056c336d28117603db
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_tagged_template_literal/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_tagged_template_literal.cjs",
+    "module": "../../esm/_tagged_template_literal.js"
+}
diff --git a/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json b/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6a45bd377b28b60f691edf10387fc5f5b8a7dc79
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_tagged_template_literal_loose.cjs",
+    "module": "../../esm/_tagged_template_literal_loose.js"
+}
diff --git a/node_modules/@swc/helpers/_/_throw/package.json b/node_modules/@swc/helpers/_/_throw/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1418ff4bac1a77ed10750c2852d68ed62922ad08
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_throw/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_throw.cjs",
+    "module": "../../esm/_throw.js"
+}
diff --git a/node_modules/@swc/helpers/_/_to_array/package.json b/node_modules/@swc/helpers/_/_to_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2c5ce50b4f27dd6ba8bbf0b87f8ad75f83de35ae
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_to_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_to_array.cjs",
+    "module": "../../esm/_to_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_to_consumable_array/package.json b/node_modules/@swc/helpers/_/_to_consumable_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6424d11c3d1d5213af7e04aed1b51090d69518c2
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_to_consumable_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_to_consumable_array.cjs",
+    "module": "../../esm/_to_consumable_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_to_primitive/package.json b/node_modules/@swc/helpers/_/_to_primitive/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1ee625af22c6b2a8aa99bd3f333fa2ff2a023a18
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_to_primitive/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_to_primitive.cjs",
+    "module": "../../esm/_to_primitive.js"
+}
diff --git a/node_modules/@swc/helpers/_/_to_property_key/package.json b/node_modules/@swc/helpers/_/_to_property_key/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..6f2e9a2d0ca11e91e5ce6bb6dd0f006772a6e050
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_to_property_key/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_to_property_key.cjs",
+    "module": "../../esm/_to_property_key.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json b/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8b20dac050ac6d9c9d3cb70889b89c192c297ab1
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_add_disposable_resource/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_add_disposable_resource.cjs",
+    "module": "../../esm/_ts_add_disposable_resource.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_decorate/package.json b/node_modules/@swc/helpers/_/_ts_decorate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..02279e9f058c7d01898c9d1d6336085c615be48e
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_decorate/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_decorate.cjs",
+    "module": "../../esm/_ts_decorate.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json b/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..47841c0cb606186b1a012788a9614874d504b5ca
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_dispose_resources/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_dispose_resources.cjs",
+    "module": "../../esm/_ts_dispose_resources.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_generator/package.json b/node_modules/@swc/helpers/_/_ts_generator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0dc9588c6636a46bcd3cfd9cc8d58ae6095224b2
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_generator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_generator.cjs",
+    "module": "../../esm/_ts_generator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_metadata/package.json b/node_modules/@swc/helpers/_/_ts_metadata/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d7c1f1c41d073768e5caaa7cacc9da0a7fbe1359
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_metadata/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_metadata.cjs",
+    "module": "../../esm/_ts_metadata.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_param/package.json b/node_modules/@swc/helpers/_/_ts_param/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..18af8228115eb4e9344db9b503e60aa16a3ab62f
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_param/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_param.cjs",
+    "module": "../../esm/_ts_param.js"
+}
diff --git a/node_modules/@swc/helpers/_/_ts_values/package.json b/node_modules/@swc/helpers/_/_ts_values/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5fe6a464518d62b52966e986e075cb506f5f53dd
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_ts_values/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_ts_values.cjs",
+    "module": "../../esm/_ts_values.js"
+}
diff --git a/node_modules/@swc/helpers/_/_type_of/package.json b/node_modules/@swc/helpers/_/_type_of/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..620eed9e1156c47b21bece91f6020de2232397ab
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_type_of/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_type_of.cjs",
+    "module": "../../esm/_type_of.js"
+}
diff --git a/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json b/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..54549be92f74eea76c232ce60e3f7f9665b2c00d
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_unsupported_iterable_to_array/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_unsupported_iterable_to_array.cjs",
+    "module": "../../esm/_unsupported_iterable_to_array.js"
+}
diff --git a/node_modules/@swc/helpers/_/_update/package.json b/node_modules/@swc/helpers/_/_update/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..f166b0cb93e26ce308745280adaf75eddf8814d9
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_update/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_update.cjs",
+    "module": "../../esm/_update.js"
+}
diff --git a/node_modules/@swc/helpers/_/_using/package.json b/node_modules/@swc/helpers/_/_using/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..444f980f0182633fda9bed8c4889bdcc920fc3e0
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_using/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_using.cjs",
+    "module": "../../esm/_using.js"
+}
diff --git a/node_modules/@swc/helpers/_/_using_ctx/package.json b/node_modules/@swc/helpers/_/_using_ctx/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b1aaebc9738c3cfa1b5884441229ac718fe10a7e
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_using_ctx/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_using_ctx.cjs",
+    "module": "../../esm/_using_ctx.js"
+}
diff --git a/node_modules/@swc/helpers/_/_wrap_async_generator/package.json b/node_modules/@swc/helpers/_/_wrap_async_generator/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..774dcc1d16287c07ef298343559b6c42b0d6a499
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_wrap_async_generator/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_wrap_async_generator.cjs",
+    "module": "../../esm/_wrap_async_generator.js"
+}
diff --git a/node_modules/@swc/helpers/_/_wrap_native_super/package.json b/node_modules/@swc/helpers/_/_wrap_native_super/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ce559339de81537cbd22e3bb8670e8c25140dc30
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_wrap_native_super/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_wrap_native_super.cjs",
+    "module": "../../esm/_wrap_native_super.js"
+}
diff --git a/node_modules/@swc/helpers/_/_write_only_error/package.json b/node_modules/@swc/helpers/_/_write_only_error/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1767535ae97f9d474d084b3fd7733666cea68686
--- /dev/null
+++ b/node_modules/@swc/helpers/_/_write_only_error/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/_write_only_error.cjs",
+    "module": "../../esm/_write_only_error.js"
+}
diff --git a/node_modules/@swc/helpers/_/index/package.json b/node_modules/@swc/helpers/_/index/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b855fe7780481dde84a45ff2087a2abfaf36c2f3
--- /dev/null
+++ b/node_modules/@swc/helpers/_/index/package.json
@@ -0,0 +1,4 @@
+{
+    "main": "../../cjs/index.cjs",
+    "module": "../../esm/index.js"
+}
diff --git a/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs b/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..edd11861c695dc99e4b2a2edc47a90674c1985cd
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_apply_decorated_descriptor.cjs
@@ -0,0 +1,35 @@
+"use strict";
+
+function _apply_decorated_descriptor(target, property, decorators, descriptor, context) {
+    var desc = {};
+
+    Object["ke" + "ys"](descriptor).forEach(function(key) {
+        desc[key] = descriptor[key];
+    });
+    desc.enumerable = !!desc.enumerable;
+    desc.configurable = !!desc.configurable;
+
+    if ("value" in desc || desc.initializer) desc.writable = true;
+    desc = decorators.slice().reverse().reduce(function(desc, decorator) {
+        return decorator ? decorator(target, property, desc) || desc : desc;
+    }, desc);
+
+    var hasAccessor = Object.prototype.hasOwnProperty.call(desc, "get") || Object.prototype.hasOwnProperty.call(desc, "set");
+
+    if (context && desc.initializer !== void 0 && !hasAccessor) {
+        desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
+        desc.initializer = undefined;
+    }
+    if (hasAccessor) {
+        delete desc.writable;
+        delete desc.initializer;
+        delete desc.value;
+    }
+    if (desc.initializer === void 0) {
+        Object["define" + "Property"](target, property, desc);
+        desc = null;
+    }
+
+    return desc;
+}
+exports._ = _apply_decorated_descriptor;
diff --git a/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs b/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c55c7867e4ef3f581ce608c6323eba9000a5a648
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_apply_decs_2203_r.cjs
@@ -0,0 +1,550 @@
+"use strict";
+
+/* @minVersion 7.20.0 */
+
+/**
+  Enums are used in this file, but not assigned to vars to avoid non-hoistable values
+
+  CONSTRUCTOR = 0;
+  PUBLIC = 1;
+  PRIVATE = 2;
+
+  FIELD = 0;
+  ACCESSOR = 1;
+  METHOD = 2;
+  GETTER = 3;
+  SETTER = 4;
+
+  STATIC = 5;
+
+  CLASS = 10; // only used in assertValidReturnValue
+*/
+
+function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
+    function createAddInitializerMethod(initializers, decoratorFinishedRef) {
+        return function addInitializer(initializer) {
+            assertNotFinished(decoratorFinishedRef, "addInitializer");
+            assertCallable(initializer, "An initializer");
+            initializers.push(initializer);
+        };
+    }
+
+    function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
+        var kindStr;
+
+        switch (kind) {
+            case 1 /* ACCESSOR */:
+                kindStr = "accessor";
+                break;
+            case 2 /* METHOD */:
+                kindStr = "method";
+                break;
+            case 3 /* GETTER */:
+                kindStr = "getter";
+                break;
+            case 4 /* SETTER */:
+                kindStr = "setter";
+                break;
+            default:
+                kindStr = "field";
+        }
+
+        var ctx = { kind: kindStr, name: isPrivate ? "#" + name : name, static: isStatic, private: isPrivate, metadata: metadata };
+
+        var decoratorFinishedRef = { v: false };
+
+        ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
+
+        var get, set;
+        if (kind === 0 /* FIELD */) {
+            if (isPrivate) {
+                get = desc.get;
+                set = desc.set;
+            } else {
+                get = function() {
+                    return this[name];
+                };
+                set = function(v) {
+                    this[name] = v;
+                };
+            }
+        } else if (kind === 2 /* METHOD */) {
+            get = function() {
+                return desc.value;
+            };
+        } else {
+            // replace with values that will go through the final getter and setter
+            if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {
+                get = function() {
+                    return desc.get.call(this);
+                };
+            }
+
+            if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {
+                set = function(v) {
+                    desc.set.call(this, v);
+                };
+            }
+        }
+        ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set };
+
+        try {
+            return dec(value, ctx);
+        } finally {
+            decoratorFinishedRef.v = true;
+        }
+    }
+
+    function assertNotFinished(decoratorFinishedRef, fnName) {
+        if (decoratorFinishedRef.v) {
+            throw new Error("attempted to call " + fnName + " after decoration was finished");
+        }
+    }
+
+    function assertCallable(fn, hint) {
+        if (typeof fn !== "function") {
+            throw new TypeError(hint + " must be a function");
+        }
+    }
+
+    function assertValidReturnValue(kind, value) {
+        var type = typeof value;
+
+        if (kind === 1 /* ACCESSOR */) {
+            if (type !== "object" || value === null) {
+                throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+            }
+            if (value.get !== undefined) {
+                assertCallable(value.get, "accessor.get");
+            }
+            if (value.set !== undefined) {
+                assertCallable(value.set, "accessor.set");
+            }
+            if (value.init !== undefined) {
+                assertCallable(value.init, "accessor.init");
+            }
+        } else if (type !== "function") {
+            var hint;
+            if (kind === 0 /* FIELD */) {
+                hint = "field";
+            } else if (kind === 10 /* CLASS */) {
+                hint = "class";
+            } else {
+                hint = "method";
+            }
+            throw new TypeError(hint + " decorators must return a function or void 0");
+        }
+    }
+
+    function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
+        var decs = decInfo[0];
+
+        var desc, init, value;
+
+        if (isPrivate) {
+            if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+                desc = { get: decInfo[3], set: decInfo[4] };
+            } else if (kind === 3 /* GETTER */) {
+                desc = { get: decInfo[3] };
+            } else if (kind === 4 /* SETTER */) {
+                desc = { set: decInfo[3] };
+            } else {
+                desc = { value: decInfo[3] };
+            }
+        } else if (kind !== 0 /* FIELD */) {
+            desc = Object.getOwnPropertyDescriptor(base, name);
+        }
+
+        if (kind === 1 /* ACCESSOR */) {
+            value = { get: desc.get, set: desc.set };
+        } else if (kind === 2 /* METHOD */) {
+            value = desc.value;
+        } else if (kind === 3 /* GETTER */) {
+            value = desc.get;
+        } else if (kind === 4 /* SETTER */) {
+            value = desc.set;
+        }
+
+        var newValue, get, set;
+
+        if (typeof decs === "function") {
+            newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
+
+            if (newValue !== void 0) {
+                assertValidReturnValue(kind, newValue);
+
+                if (kind === 0 /* FIELD */) {
+                    init = newValue;
+                } else if (kind === 1 /* ACCESSOR */) {
+                    init = newValue.init;
+                    get = newValue.get || value.get;
+                    set = newValue.set || value.set;
+
+                    value = { get: get, set: set };
+                } else {
+                    value = newValue;
+                }
+            }
+        } else {
+            for (var i = decs.length - 1; i >= 0; i--) {
+                var dec = decs[i];
+
+                newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
+
+                if (newValue !== void 0) {
+                    assertValidReturnValue(kind, newValue);
+                    var newInit;
+
+                    if (kind === 0 /* FIELD */) {
+                        newInit = newValue;
+                    } else if (kind === 1 /* ACCESSOR */) {
+                        newInit = newValue.init;
+                        get = newValue.get || value.get;
+                        set = newValue.set || value.set;
+
+                        value = { get: get, set: set };
+                    } else {
+                        value = newValue;
+                    }
+
+                    if (newInit !== void 0) {
+                        if (init === void 0) {
+                            init = newInit;
+                        } else if (typeof init === "function") {
+                            init = [init, newInit];
+                        } else {
+                            init.push(newInit);
+                        }
+                    }
+                }
+            }
+        }
+
+        if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+            if (init === void 0) {
+                // If the initializer was void 0, sub in a dummy initializer
+                init = function(instance, init) {
+                    return init;
+                };
+            } else if (typeof init !== "function") {
+                var ownInitializers = init;
+
+                init = function(instance, init) {
+                    var value = init;
+
+                    for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value);
+
+                    return value;
+                };
+            } else {
+                var originalInitializer = init;
+
+                init = function(instance, init) {
+                    return originalInitializer.call(instance, init);
+                };
+            }
+
+            ret.push(init);
+        }
+
+        if (kind !== 0 /* FIELD */) {
+            if (kind === 1 /* ACCESSOR */) {
+                desc.get = value.get;
+                desc.set = value.set;
+            } else if (kind === 2 /* METHOD */) {
+                desc.value = value;
+            } else if (kind === 3 /* GETTER */) {
+                desc.get = value;
+            } else if (kind === 4 /* SETTER */) {
+                desc.set = value;
+            }
+
+            if (isPrivate) {
+                if (kind === 1 /* ACCESSOR */) {
+                    ret.push(function(instance, args) {
+                        return value.get.call(instance, args);
+                    });
+                    ret.push(function(instance, args) {
+                        return value.set.call(instance, args);
+                    });
+                } else if (kind === 2 /* METHOD */) {
+                    ret.push(value);
+                } else {
+                    ret.push(function(instance, args) {
+                        return value.call(instance, args);
+                    });
+                }
+            } else {
+                Object.defineProperty(base, name, desc);
+            }
+        }
+    }
+
+    function applyMemberDecs(Class, decInfos, metadata) {
+        var ret = [];
+        var protoInitializers;
+        var staticInitializers;
+
+        var existingProtoNonFields = new Map();
+        var existingStaticNonFields = new Map();
+
+        for (var i = 0; i < decInfos.length; i++) {
+            var decInfo = decInfos[i];
+
+            // skip computed property names
+            if (!Array.isArray(decInfo)) continue;
+
+            var kind = decInfo[1];
+            var name = decInfo[2];
+            var isPrivate = decInfo.length > 3;
+
+            var isStatic = kind >= 5; /* STATIC */
+            var base;
+            var initializers;
+
+            if (isStatic) {
+                base = Class;
+                kind = kind - 5 /* STATIC */;
+                // initialize staticInitializers when we see a non-field static member
+                staticInitializers = staticInitializers || [];
+                initializers = staticInitializers;
+            } else {
+                base = Class.prototype;
+                // initialize protoInitializers when we see a non-field member
+                protoInitializers = protoInitializers || [];
+                initializers = protoInitializers;
+            }
+
+            if (kind !== 0 /* FIELD */ && !isPrivate) {
+                var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
+
+                var existingKind = existingNonFields.get(name) || 0;
+
+                if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) {
+                    throw new Error(
+                        "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "
+                            + name
+                    );
+                } else if (!existingKind && kind > 2 /* METHOD */) {
+                    existingNonFields.set(name, kind);
+                } else {
+                    existingNonFields.set(name, true);
+                }
+            }
+
+            applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
+        }
+
+        pushInitializers(ret, protoInitializers);
+        pushInitializers(ret, staticInitializers);
+        return ret;
+    }
+
+    function pushInitializers(ret, initializers) {
+        if (initializers) {
+            ret.push(function(instance) {
+                for (var i = 0; i < initializers.length; i++) initializers[i].call(instance);
+                return instance;
+            });
+        }
+    }
+
+    function applyClassDecs(targetClass, classDecs, metadata) {
+        if (classDecs.length > 0) {
+            var initializers = [];
+            var newClass = targetClass;
+            var name = targetClass.name;
+
+            for (var i = classDecs.length - 1; i >= 0; i--) {
+                var decoratorFinishedRef = { v: false };
+
+                try {
+                    var nextNewClass = classDecs[i](newClass, { kind: "class", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata });
+                } finally {
+                    decoratorFinishedRef.v = true;
+                }
+
+                if (nextNewClass !== undefined) {
+                    assertValidReturnValue(10, /* CLASS */ nextNewClass);
+                    newClass = nextNewClass;
+                }
+            }
+
+            return [defineMetadata(newClass, metadata), function() {
+                for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass);
+            }];
+        }
+        // The transformer will not emit assignment when there are no class decorators,
+        // so we don't have to return an empty array here.
+    }
+
+    function defineMetadata(Class, metadata) {
+        return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: true, enumerable: true, value: metadata });
+    }
+
+    /**
+    Basic usage:
+
+    applyDecs(
+      Class,
+      [
+        // member decorators
+        [
+          dec,                // dec or array of decs
+          0,                  // kind of value being decorated
+          'prop',             // name of public prop on class containing the value being decorated,
+          '#p',               // the name of the private property (if is private, void 0 otherwise),
+        ]
+      ],
+      [
+        // class decorators
+        dec1, dec2
+      ]
+    )
+    ```
+
+    Fully transpiled example:
+
+    ```js
+    @dec
+    class Class {
+      @dec
+      a = 123;
+
+      @dec
+      #a = 123;
+
+      @dec
+      @dec2
+      accessor b = 123;
+
+      @dec
+      accessor #b = 123;
+
+      @dec
+      c() { console.log('c'); }
+
+      @dec
+      #c() { console.log('privC'); }
+
+      @dec
+      get d() { console.log('d'); }
+
+      @dec
+      get #d() { console.log('privD'); }
+
+      @dec
+      set e(v) { console.log('e'); }
+
+      @dec
+      set #e(v) { console.log('privE'); }
+    }
+
+
+    // becomes
+    let initializeInstance;
+    let initializeClass;
+
+    let initA;
+    let initPrivA;
+
+    let initB;
+    let initPrivB, getPrivB, setPrivB;
+
+    let privC;
+    let privD;
+    let privE;
+
+    let Class;
+    class _Class {
+      static {
+        let ret = applyDecs(
+          this,
+          [
+            [dec, 0, 'a'],
+            [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v],
+            [[dec, dec2], 1, 'b'],
+            [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v],
+            [dec, 2, 'c'],
+            [dec, 2, 'c', () => console.log('privC')],
+            [dec, 3, 'd'],
+            [dec, 3, 'd', () => console.log('privD')],
+            [dec, 4, 'e'],
+            [dec, 4, 'e', () => console.log('privE')],
+          ],
+          [
+            dec
+          ]
+        )
+
+        initA = ret[0];
+
+        initPrivA = ret[1];
+
+        initB = ret[2];
+
+        initPrivB = ret[3];
+        getPrivB = ret[4];
+        setPrivB = ret[5];
+
+        privC = ret[6];
+
+        privD = ret[7];
+
+        privE = ret[8];
+
+        initializeInstance = ret[9];
+
+        Class = ret[10]
+
+        initializeClass = ret[11];
+      }
+
+      a = (initializeInstance(this), initA(this, 123));
+
+      #a = initPrivA(this, 123);
+
+      #bData = initB(this, 123);
+      get b() { return this.#bData }
+      set b(v) { this.#bData = v }
+
+      #privBData = initPrivB(this, 123);
+      get #b() { return getPrivB(this); }
+      set #b(v) { setPrivB(this, v); }
+
+      c() { console.log('c'); }
+
+      #c(...args) { return privC(this, ...args) }
+
+      get d() { console.log('d'); }
+
+      get #d() { return privD(this); }
+
+      set e(v) { console.log('e'); }
+
+      set #e(v) { privE(this, v); }
+    }
+
+    initializeClass(Class);
+   */
+
+    exports._ = _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) {
+        if (parentClass !== void 0) {
+            var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
+        }
+        var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
+        var e = applyMemberDecs(targetClass, memberDecs, metadata);
+        if (!classDecs.length) defineMetadata(targetClass, metadata);
+        return {
+            e: e,
+            // Lazily apply class decorations so that member init locals can be properly bound.
+            get c() {
+                return applyClassDecs(targetClass, classDecs, metadata);
+            }
+        };
+    };
+
+    return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass);
+}
+
+exports._ = _apply_decs_2203_r;
diff --git a/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs b/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0f7d69d9e76e7ca53d41f29f4a3d864e1e335249
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_array_like_to_array.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+function _array_like_to_array(arr, len) {
+    if (len == null || len > arr.length) len = arr.length;
+
+    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+    return arr2;
+}
+exports._ = _array_like_to_array;
diff --git a/node_modules/@swc/helpers/cjs/_array_with_holes.cjs b/node_modules/@swc/helpers/cjs/_array_with_holes.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..42f4e1b26973086051c1467889140adc791025b0
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_array_with_holes.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _array_with_holes(arr) {
+    if (Array.isArray(arr)) return arr;
+}
+exports._ = _array_with_holes;
diff --git a/node_modules/@swc/helpers/cjs/_array_without_holes.cjs b/node_modules/@swc/helpers/cjs/_array_without_holes.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..7b3f62339149e229e028447506364d661ce60851
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_array_without_holes.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+var _array_like_to_array = require("./_array_like_to_array.cjs");
+
+function _array_without_holes(arr) {
+    if (Array.isArray(arr)) return _array_like_to_array._(arr);
+}
+exports._ = _array_without_holes;
diff --git a/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs b/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e7e220c7cbb9fc0338030bb6aeb46611bf888bde
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_assert_this_initialized.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _assert_this_initialized(self) {
+    if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+    return self;
+}
+exports._ = _assert_this_initialized;
diff --git a/node_modules/@swc/helpers/cjs/_async_generator.cjs b/node_modules/@swc/helpers/cjs/_async_generator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..d806ca21dee8ffa5cb2321cfdae598405f1c2b07
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_async_generator.cjs
@@ -0,0 +1,78 @@
+"use strict";
+
+var _await_value = require("./_await_value.cjs");
+
+function _async_generator(gen) {
+    var front, back;
+
+    function send(key, arg) {
+        return new Promise(function(resolve, reject) {
+            var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null };
+            if (back) back = back.next = request;
+            else {
+                front = back = request;
+                resume(key, arg);
+            }
+        });
+    }
+
+    function resume(key, arg) {
+        try {
+            var result = gen[key](arg);
+            var value = result.value;
+            var wrappedAwait = value instanceof _await_value._;
+            Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) {
+                if (wrappedAwait) {
+                    resume("next", arg);
+
+                    return;
+                }
+                settle(result.done ? "return" : "normal", arg);
+            }, function(err) {
+                resume("throw", err);
+            });
+        } catch (err) {
+            settle("throw", err);
+        }
+    }
+
+    function settle(type, value) {
+        switch (type) {
+            case "return":
+                front.resolve({ value: value, done: true });
+                break;
+            case "throw":
+                front.reject(value);
+                break;
+            default:
+                front.resolve({ value: value, done: false });
+                break;
+        }
+        front = front.next;
+        if (front) resume(front.key, front.arg);
+        else back = null;
+    }
+
+    this._invoke = send;
+
+    if (typeof gen.return !== "function") this.return = undefined;
+}
+
+if (typeof Symbol === "function" && Symbol.asyncIterator) {
+    _async_generator.prototype[Symbol.asyncIterator] = function() {
+        return this;
+    };
+}
+
+_async_generator.prototype.next = function(arg) {
+    return this._invoke("next", arg);
+};
+
+_async_generator.prototype.throw = function(arg) {
+    return this._invoke("throw", arg);
+};
+
+_async_generator.prototype.return = function(arg) {
+    return this._invoke("return", arg);
+};
+exports._ = _async_generator;
diff --git a/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs b/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..f14d2deb06fd5bc511087ea3228eddcd4506e2a4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_async_generator_delegate.cjs
@@ -0,0 +1,49 @@
+"use strict";
+
+function _async_generator_delegate(inner, awaitWrap) {
+    var iter = {}, waiting = false;
+
+    function pump(key, value) {
+        waiting = true;
+        value = new Promise(function(resolve) {
+            resolve(inner[key](value));
+        });
+
+        return { done: false, value: awaitWrap(value) };
+    }
+
+    if (typeof Symbol === "function" && Symbol.iterator) {
+        iter[Symbol.iterator] = function() {
+            return this;
+        };
+    }
+
+    iter.next = function(value) {
+        if (waiting) {
+            waiting = false;
+
+            return value;
+        }
+
+        return pump("next", value);
+    };
+
+    if (typeof inner.throw === "function") {
+        iter.throw = function(value) {
+            if (waiting) {
+                waiting = false;
+                throw value;
+            }
+
+            return pump("throw", value);
+        };
+    }
+    if (typeof inner.return === "function") {
+        iter.return = function(value) {
+            return pump("return", value);
+        };
+    }
+
+    return iter;
+}
+exports._ = _async_generator_delegate;
diff --git a/node_modules/@swc/helpers/cjs/_async_iterator.cjs b/node_modules/@swc/helpers/cjs/_async_iterator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..aef72537fc79b10c0abfd1f157479bb5b9a60b79
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_async_iterator.cjs
@@ -0,0 +1,46 @@
+"use strict";
+
+function _async_iterator(iterable) {
+    var method, async, sync, retry = 2;
+    for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) {
+        if (async && null != (method = iterable[async])) return method.call(iterable);
+        if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
+        async = "@@asyncIterator", sync = "@@iterator";
+    }
+    throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(s) {
+    function AsyncFromSyncIteratorContinuation(r) {
+        if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+
+        var done = r.done;
+
+        return Promise.resolve(r.value).then(function(value) {
+            return { value: value, done: done };
+        });
+    }
+
+    return AsyncFromSyncIterator = function(s) {
+        this.s = s, this.n = s.next;
+    },
+        AsyncFromSyncIterator.prototype = {
+            s: null,
+            n: null,
+
+            next: function() {
+                return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+            },
+            return: function(value) {
+                var ret = this.s.return;
+
+                return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
+            },
+            throw: function(value) {
+                var thr = this.s.return;
+
+                return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
+            }
+        },
+        new AsyncFromSyncIterator(s);
+}
+exports._ = _async_iterator;
diff --git a/node_modules/@swc/helpers/cjs/_async_to_generator.cjs b/node_modules/@swc/helpers/cjs/_async_to_generator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..b838d476ab9a4bdbc251dfe0cc507436f894e025
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_async_to_generator.cjs
@@ -0,0 +1,33 @@
+"use strict";
+
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
+    try {
+        var info = gen[key](arg);
+        var value = info.value;
+    } catch (error) {
+        reject(error);
+        return;
+    }
+    if (info.done) resolve(value);
+    else Promise.resolve(value).then(_next, _throw);
+}
+function _async_to_generator(fn) {
+    return function() {
+        var self = this, args = arguments;
+
+        return new Promise(function(resolve, reject) {
+            var gen = fn.apply(self, args);
+
+            function _next(value) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
+            }
+
+            function _throw(err) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
+            }
+
+            _next(undefined);
+        });
+    };
+}
+exports._ = _async_to_generator;
diff --git a/node_modules/@swc/helpers/cjs/_await_async_generator.cjs b/node_modules/@swc/helpers/cjs/_await_async_generator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c7ee729def6d09b2d8e0eb5c59c9eb9b8a4dee2d
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_await_async_generator.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+var _await_value = require("./_await_value.cjs");
+
+function _await_async_generator(value) {
+    return new _await_value._(value);
+}
+exports._ = _await_async_generator;
diff --git a/node_modules/@swc/helpers/cjs/_await_value.cjs b/node_modules/@swc/helpers/cjs/_await_value.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..f82ebcdeff69825b5194160feba0ead28d51a370
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_await_value.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _await_value(value) {
+    this.wrapped = value;
+}
+exports._ = _await_value;
diff --git a/node_modules/@swc/helpers/cjs/_call_super.cjs b/node_modules/@swc/helpers/cjs/_call_super.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c4e773346f8921501978757c3be07ab1dabbee85
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_call_super.cjs
@@ -0,0 +1,19 @@
+"use strict";
+
+var _get_prototype_of = require("./_get_prototype_of.cjs");
+var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs");
+var _possible_constructor_return = require("./_possible_constructor_return.cjs");
+
+function _call_super(_this, derived, args) {
+    // Super
+    derived = _get_prototype_of._(derived);
+    return _possible_constructor_return._(
+        _this,
+        _is_native_reflect_construct._()
+            // NOTE: This doesn't work if this.__proto__.constructor has been modified.
+            ? Reflect.construct(derived, args || [], _get_prototype_of._(_this).constructor)
+            : derived.apply(_this, args)
+    );
+}
+
+exports._ = _call_super;
diff --git a/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs b/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..40390b827ea1a1424be0563a7d2458ec3882f8f5
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_check_private_redeclaration.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _check_private_redeclaration(obj, privateCollection) {
+    if (privateCollection.has(obj)) {
+        throw new TypeError("Cannot initialize the same private elements twice on an object");
+    }
+}
+exports._ = _check_private_redeclaration;
diff --git a/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..874289ff45ebebe15edcd6a3d3e8b0d1cf8041bf
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_destructure.cjs
@@ -0,0 +1,25 @@
+"use strict";
+
+function _class_apply_descriptor_destructure(receiver, descriptor) {
+    if (descriptor.set) {
+        if (!("__destrObj" in descriptor)) {
+            descriptor.__destrObj = {
+                set value(v) {
+                    descriptor.set.call(receiver, v);
+                }
+            };
+        }
+
+        return descriptor.__destrObj;
+    } else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+
+        return descriptor;
+    }
+}
+exports._ = _class_apply_descriptor_destructure;
diff --git a/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..b9a3f78edbc750ca32f238512ee5ab52effa5c86
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_get.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _class_apply_descriptor_get(receiver, descriptor) {
+    if (descriptor.get) return descriptor.get.call(receiver);
+
+    return descriptor.value;
+}
+exports._ = _class_apply_descriptor_get;
diff --git a/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..bcd2c75d877154d17a1261a5e6c8e70d68a85196
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_set.cjs
@@ -0,0 +1,15 @@
+"use strict";
+
+function _class_apply_descriptor_set(receiver, descriptor, value) {
+    if (descriptor.set) descriptor.set.call(receiver, value);
+    else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+        descriptor.value = value;
+    }
+}
+exports._ = _class_apply_descriptor_set;
diff --git a/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2c3e40fb9e8eb04c7f8b86f59ed83aad19ab4e48
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_apply_descriptor_update.cjs
@@ -0,0 +1,30 @@
+"use strict";
+
+function _class_apply_descriptor_update(receiver, descriptor) {
+    if (descriptor.set) {
+        if (!descriptor.get) throw new TypeError("attempted to read set only private field");
+
+        if (!("__destrWrapper" in descriptor)) {
+            descriptor.__destrWrapper = {
+                set value(v) {
+                    descriptor.set.call(receiver, v);
+                },
+                get value() {
+                    return descriptor.get.call(receiver);
+                }
+            };
+        }
+
+        return descriptor.__destrWrapper;
+    } else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+
+        return descriptor;
+    }
+}
+exports._ = _class_apply_descriptor_update;
diff --git a/node_modules/@swc/helpers/cjs/_class_call_check.cjs b/node_modules/@swc/helpers/cjs/_class_call_check.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..7d41f0d71fc3c9d2c481c0d9a2e7fff8009c03ae
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_call_check.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _class_call_check(instance, Constructor) {
+    if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
+}
+exports._ = _class_call_check;
diff --git a/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs b/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..9adf4d4ba443f6bbe6b1279caade992b4050a669
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_check_private_static_access.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _class_check_private_static_access(receiver, classConstructor) {
+    if (receiver !== classConstructor) throw new TypeError("Private static access of wrong provenance");
+}
+exports._ = _class_check_private_static_access;
diff --git a/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs b/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e73dce11590c9d2af02b2ec5fd9018c28250131e
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_check_private_static_field_descriptor.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _class_check_private_static_field_descriptor(descriptor, action) {
+    if (descriptor === undefined) {
+        throw new TypeError("attempted to " + action + " private static field before its declaration");
+    }
+}
+exports._ = _class_check_private_static_field_descriptor;
diff --git a/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs b/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..16e5106b7f97cce089a840880c6e4b8c5562f3a3
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_extract_field_descriptor.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _class_extract_field_descriptor(receiver, privateMap, action) {
+    if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
+
+    return privateMap.get(receiver);
+}
+exports._ = _class_extract_field_descriptor;
diff --git a/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs b/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..dfcebae75901e4bf3d518fbb8ce259dcbbc528cf
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_name_tdz_error.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _class_name_tdz_error(name) {
+    throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
+}
+exports._ = _class_name_tdz_error;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..21a35f73f4f994af6777b399fb512feb6308fd05
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_destructure.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+var _class_apply_descriptor_destructure = require("./_class_apply_descriptor_destructure.cjs");
+var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs");
+
+function _class_private_field_destructure(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "set");
+    return _class_apply_descriptor_destructure._(receiver, descriptor);
+}
+exports._ = _class_private_field_destructure;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..8a23b3461c983de7cb4ffa683c230672fd038aa4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_get.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+var _class_apply_descriptor_get = require("./_class_apply_descriptor_get.cjs");
+var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs");
+
+function _class_private_field_get(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "get");
+    return _class_apply_descriptor_get._(receiver, descriptor);
+}
+exports._ = _class_private_field_get;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0b208a0054987a298be54889920743ec370eb364
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_init.cjs
@@ -0,0 +1,9 @@
+"use strict";
+
+var _check_private_redeclaration = require("./_check_private_redeclaration.cjs");
+
+function _class_private_field_init(obj, privateMap, value) {
+    _check_private_redeclaration._(obj, privateMap);
+    privateMap.set(obj, value);
+}
+exports._ = _class_private_field_init;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..cb0ba0623c29dd134b8a7379c098b1aa6d647086
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_loose_base.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+function _class_private_field_loose_base(receiver, privateKey) {
+    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
+        throw new TypeError("attempted to use private field on non-instance");
+    }
+
+    return receiver;
+}
+exports._ = _class_private_field_loose_base;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..8301830c0ac352909c9dd07c1b335ccec009eb2d
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_loose_key.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+var id = 0;
+
+function _class_private_field_loose_key(name) {
+    return "__private_" + id++ + "_" + name;
+}
+exports._ = _class_private_field_loose_key;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..317e878b64c0b63ee1e132a6b11a08cf5da34f04
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_set.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _class_apply_descriptor_set = require("./_class_apply_descriptor_set.cjs");
+var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs");
+
+function _class_private_field_set(receiver, privateMap, value) {
+    var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "set");
+    _class_apply_descriptor_set._(receiver, descriptor, value);
+    return value;
+}
+exports._ = _class_private_field_set;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs b/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2e713fa4f457d1c7756ad8ef9f46b82d04dbd7be
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_field_update.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+var _class_apply_descriptor_update = require("./_class_apply_descriptor_update.cjs");
+var _class_extract_field_descriptor = require("./_class_extract_field_descriptor.cjs");
+
+function _class_private_field_update(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor._(receiver, privateMap, "update");
+    return _class_apply_descriptor_update._(receiver, descriptor);
+}
+exports._ = _class_private_field_update;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs b/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..b5ee8b4f4d4c030819c37ae1613eefb79b32bf61
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_method_get.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _class_private_method_get(receiver, privateSet, fn) {
+    if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
+
+    return fn;
+}
+exports._ = _class_private_method_get;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs b/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..1d84b51fce13c9c0b330df607c65e0f3565c384d
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_method_init.cjs
@@ -0,0 +1,9 @@
+"use strict";
+
+var _check_private_redeclaration = require("./_check_private_redeclaration.cjs");
+
+function _class_private_method_init(obj, privateSet) {
+    _check_private_redeclaration._(obj, privateSet);
+    privateSet.add(obj);
+}
+exports._ = _class_private_method_init;
diff --git a/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs b/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..db06178e306efe294c7cb0a759f2827e46222ca4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_private_method_set.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _class_private_method_set() {
+    throw new TypeError("attempted to reassign private method");
+}
+exports._ = _class_private_method_set;
diff --git a/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs b/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..512a2e38962e6702a2dcf27496e1e7c2610eff1b
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_static_private_field_destructure.cjs
@@ -0,0 +1,13 @@
+"use strict";
+
+var _class_apply_descriptor_destructure = require("./_class_apply_descriptor_destructure.cjs");
+var _class_check_private_static_access = require("./_class_check_private_static_access.cjs");
+var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs");
+
+function _class_static_private_field_destructure(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access._(receiver, classConstructor);
+    _class_check_private_static_field_descriptor._(descriptor, "set");
+
+    return _class_apply_descriptor_destructure._(receiver, descriptor);
+}
+exports._ = _class_static_private_field_destructure;
diff --git a/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs b/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..43a1f0d00b5c67f2f56097090c53193708e54d51
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_get.cjs
@@ -0,0 +1,13 @@
+"use strict";
+
+var _class_apply_descriptor_get = require("./_class_apply_descriptor_get.cjs");
+var _class_check_private_static_access = require("./_class_check_private_static_access.cjs");
+var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs");
+
+function _class_static_private_field_spec_get(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access._(receiver, classConstructor);
+    _class_check_private_static_field_descriptor._(descriptor, "get");
+
+    return _class_apply_descriptor_get._(receiver, descriptor);
+}
+exports._ = _class_static_private_field_spec_get;
diff --git a/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs b/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..93a69822241d8dfbaab83be35950410a57abc9de
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_static_private_field_spec_set.cjs
@@ -0,0 +1,14 @@
+"use strict";
+
+var _class_apply_descriptor_set = require("./_class_apply_descriptor_set.cjs");
+var _class_check_private_static_access = require("./_class_check_private_static_access.cjs");
+var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs");
+
+function _class_static_private_field_spec_set(receiver, classConstructor, descriptor, value) {
+    _class_check_private_static_access._(receiver, classConstructor);
+    _class_check_private_static_field_descriptor._(descriptor, "set");
+    _class_apply_descriptor_set._(receiver, descriptor, value);
+
+    return value;
+}
+exports._ = _class_static_private_field_spec_set;
diff --git a/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs b/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c8ae667865aaeae12336e3e448cecd32aa4ea577
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_static_private_field_update.cjs
@@ -0,0 +1,13 @@
+"use strict";
+
+var _class_apply_descriptor_update = require("./_class_apply_descriptor_update.cjs");
+var _class_check_private_static_access = require("./_class_check_private_static_access.cjs");
+var _class_check_private_static_field_descriptor = require("./_class_check_private_static_field_descriptor.cjs");
+
+function _class_static_private_field_update(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access._(receiver, classConstructor);
+    _class_check_private_static_field_descriptor._(descriptor, "update");
+
+    return _class_apply_descriptor_update._(receiver, descriptor);
+}
+exports._ = _class_static_private_field_update;
diff --git a/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs b/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..3c1506faf5566397df5adcd2b288d9637987ab0f
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_class_static_private_method_get.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+var _class_check_private_static_access = require("./_class_check_private_static_access.cjs");
+
+function _class_static_private_method_get(receiver, classConstructor, method) {
+    _class_check_private_static_access._(receiver, classConstructor);
+
+    return method;
+}
+exports._ = _class_static_private_method_get;
diff --git a/node_modules/@swc/helpers/cjs/_construct.cjs b/node_modules/@swc/helpers/cjs/_construct.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..cfd7277d374b269699f54237b495d07bdd1002be
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_construct.cjs
@@ -0,0 +1,22 @@
+"use strict";
+
+var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs");
+var _set_prototype_of = require("./_set_prototype_of.cjs");
+function _construct(Parent, args, Class) {
+    if (_is_native_reflect_construct._()) exports._ = _construct = Reflect.construct;
+    else {
+        exports._ = _construct = function construct(Parent, args, Class) {
+            var a = [null];
+            a.push.apply(a, args);
+            var Constructor = Function.bind.apply(Parent, a);
+            var instance = new Constructor();
+
+            if (Class) _set_prototype_of._(instance, Class.prototype);
+
+            return instance;
+        };
+    }
+
+    return _construct.apply(null, arguments);
+}
+exports._ = _construct;
diff --git a/node_modules/@swc/helpers/cjs/_create_class.cjs b/node_modules/@swc/helpers/cjs/_create_class.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..1c3fe74a53de887653482cc9801317f3b455fe75
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_create_class.cjs
@@ -0,0 +1,20 @@
+"use strict";
+
+function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+
+        if ("value" in descriptor) descriptor.writable = true;
+
+        Object.defineProperty(target, descriptor.key, descriptor);
+    }
+}
+function _create_class(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+
+    return Constructor;
+}
+exports._ = _create_class;
diff --git a/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs b/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..9a5042d3419ab752053858715c3b07dfda0d5225
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_create_for_of_iterator_helper_loose.cjs
@@ -0,0 +1,24 @@
+"use strict";
+
+var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs");
+
+function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
+    var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+
+    if (it) return (it = it.call(o)).next.bind(it);
+    // Fallback for engines without symbol support
+    if (Array.isArray(o) || (it = _unsupported_iterable_to_array._(o)) || allowArrayLike && o && typeof o.length === "number") {
+        if (it) o = it;
+
+        var i = 0;
+
+        return function() {
+            if (i >= o.length) return { done: true };
+
+            return { done: false, value: o[i++] };
+        };
+    }
+
+    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+exports._ = _create_for_of_iterator_helper_loose;
diff --git a/node_modules/@swc/helpers/cjs/_create_super.cjs b/node_modules/@swc/helpers/cjs/_create_super.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..dc7f3cbd6ed02332a120373ffb8acfbb677fdbef
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_create_super.cjs
@@ -0,0 +1,23 @@
+"use strict";
+
+var _get_prototype_of = require("./_get_prototype_of.cjs");
+var _is_native_reflect_construct = require("./_is_native_reflect_construct.cjs");
+var _possible_constructor_return = require("./_possible_constructor_return.cjs");
+
+function _create_super(Derived) {
+    var hasNativeReflectConstruct = _is_native_reflect_construct._();
+
+    return function _createSuperInternal() {
+        var Super = _get_prototype_of._(Derived), result;
+
+        if (hasNativeReflectConstruct) {
+            var NewTarget = _get_prototype_of._(this).constructor;
+            result = Reflect.construct(Super, arguments, NewTarget);
+        } else {
+            result = Super.apply(this, arguments);
+        }
+
+        return _possible_constructor_return._(this, result);
+    };
+}
+exports._ = _create_super;
diff --git a/node_modules/@swc/helpers/cjs/_decorate.cjs b/node_modules/@swc/helpers/cjs/_decorate.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..13b171dacd19eb2db3e8c394510c3358c8a041f5
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_decorate.cjs
@@ -0,0 +1,270 @@
+"use strict";
+
+var _to_array = require("./_to_array.cjs");
+var _to_property_key = require("./_to_property_key.cjs");
+var _type_of = require("./_type_of.cjs");
+
+function _decorate(decorators, factory, superClass) {
+    var r = factory(function initialize(O) {
+        _initializeInstanceElements(O, decorated.elements);
+    }, superClass);
+    var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
+    _initializeClassElements(r.F, decorated.elements);
+
+    return _runClassFinishers(r.F, decorated.finishers);
+}
+
+function _createElementDescriptor(def) {
+    var key = _to_property_key._(def.key);
+    var descriptor;
+
+    if (def.kind === "method") {
+        descriptor = { value: def.value, writable: true, configurable: true, enumerable: false };
+        Object.defineProperty(def.value, "name", { value: _type_of._(key) === "symbol" ? "" : key, configurable: true });
+    } else if (def.kind === "get") descriptor = { get: def.value, configurable: true, enumerable: false };
+    else if (def.kind === "set") descriptor = { set: def.value, configurable: true, enumerable: false };
+    else if (def.kind === "field") descriptor = { configurable: true, writable: true, enumerable: true };
+
+    var element = { kind: def.kind === "field" ? "field" : "method", key: key, placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype", descriptor: descriptor };
+
+    if (def.decorators) element.decorators = def.decorators;
+
+    if (def.kind === "field") element.initializer = def.value;
+
+    return element;
+}
+function _coalesceGetterSetter(element, other) {
+    if (element.descriptor.get !== undefined) other.descriptor.get = element.descriptor.get;
+    else other.descriptor.set = element.descriptor.set;
+}
+function _coalesceClassElements(elements) {
+    var newElements = [];
+    var isSameElement = function isSameElement(other) {
+        return other.kind === "method" && other.key === element.key && other.placement === element.placement;
+    };
+
+    for (var i = 0; i < elements.length; i++) {
+        var element = elements[i];
+        var other;
+
+        if (element.kind === "method" && (other = newElements.find(isSameElement))) {
+            if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
+                if (_hasDecorators(element) || _hasDecorators(other)) {
+                    throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
+                }
+                other.descriptor = element.descriptor;
+            } else {
+                if (_hasDecorators(element)) {
+                    if (_hasDecorators(other)) {
+                        throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
+                    }
+                    other.decorators = element.decorators;
+                }
+                _coalesceGetterSetter(element, other);
+            }
+        } else {
+            newElements.push(element);
+        }
+    }
+
+    return newElements;
+}
+function _hasDecorators(element) {
+    return element.decorators && element.decorators.length;
+}
+function _isDataDescriptor(desc) {
+    return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
+}
+function _initializeClassElements(F, elements) {
+    var proto = F.prototype;
+    ["method", "field"].forEach(function(kind) {
+        elements.forEach(function(element) {
+            var placement = element.placement;
+            if (element.kind === kind && (placement === "static" || placement === "prototype")) {
+                var receiver = placement === "static" ? F : proto;
+                _defineClassElement(receiver, element);
+            }
+        });
+    });
+}
+function _initializeInstanceElements(O, elements) {
+    ["method", "field"].forEach(function(kind) {
+        elements.forEach(function(element) {
+            if (element.kind === kind && element.placement === "own") _defineClassElement(O, element);
+        });
+    });
+}
+function _defineClassElement(receiver, element) {
+    var descriptor = element.descriptor;
+    if (element.kind === "field") {
+        var initializer = element.initializer;
+        descriptor = { enumerable: descriptor.enumerable, writable: descriptor.writable, configurable: descriptor.configurable, value: initializer === void 0 ? void 0 : initializer.call(receiver) };
+    }
+    Object.defineProperty(receiver, element.key, descriptor);
+}
+function _decorateClass(elements, decorators) {
+    var newElements = [];
+    var finishers = [];
+    var placements = { static: [], prototype: [], own: [] };
+    elements.forEach(function(element) {
+        _addElementPlacement(element, placements);
+    });
+    elements.forEach(function(element) {
+        if (!_hasDecorators(element)) return newElements.push(element);
+        var elementFinishersExtras = _decorateElement(element, placements);
+        newElements.push(elementFinishersExtras.element);
+        newElements.push.apply(newElements, elementFinishersExtras.extras);
+        finishers.push.apply(finishers, elementFinishersExtras.finishers);
+    });
+    if (!decorators) return { elements: newElements, finishers: finishers };
+    var result = _decorateConstructor(newElements, decorators);
+    finishers.push.apply(finishers, result.finishers);
+    result.finishers = finishers;
+
+    return result;
+}
+function _addElementPlacement(element, placements, silent) {
+    var keys = placements[element.placement];
+    if (!silent && keys.indexOf(element.key) !== -1) throw new TypeError("Duplicated element (" + element.key + ")");
+    keys.push(element.key);
+}
+function _decorateElement(element, placements) {
+    var extras = [];
+    var finishers = [];
+    for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
+        var keys = placements[element.placement];
+        keys.splice(keys.indexOf(element.key), 1);
+        var elementObject = _fromElementDescriptor(element);
+        var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
+        element = elementFinisherExtras.element;
+        _addElementPlacement(element, placements);
+        if (elementFinisherExtras.finisher) finishers.push(elementFinisherExtras.finisher);
+        var newExtras = elementFinisherExtras.extras;
+        if (newExtras) {
+            for (var j = 0; j < newExtras.length; j++) _addElementPlacement(newExtras[j], placements);
+            extras.push.apply(extras, newExtras);
+        }
+    }
+
+    return { element: element, finishers: finishers, extras: extras };
+}
+function _decorateConstructor(elements, decorators) {
+    var finishers = [];
+    for (var i = decorators.length - 1; i >= 0; i--) {
+        var obj = _fromClassDescriptor(elements);
+        var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj);
+        if (elementsAndFinisher.finisher !== undefined) finishers.push(elementsAndFinisher.finisher);
+        if (elementsAndFinisher.elements !== undefined) {
+            elements = elementsAndFinisher.elements;
+            for (var j = 0; j < elements.length - 1; j++) {
+                for (var k = j + 1; k < elements.length; k++) {
+                    if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
+                        throw new TypeError("Duplicated element (" + elements[j].key + ")");
+                    }
+                }
+            }
+        }
+    }
+
+    return { elements: elements, finishers: finishers };
+}
+function _fromElementDescriptor(element) {
+    var obj = { kind: element.kind, key: element.key, placement: element.placement, descriptor: element.descriptor };
+    var desc = { value: "Descriptor", configurable: true };
+    Object.defineProperty(obj, Symbol.toStringTag, desc);
+    if (element.kind === "field") obj.initializer = element.initializer;
+
+    return obj;
+}
+function _toElementDescriptors(elementObjects) {
+    if (elementObjects === undefined) return;
+
+    return _to_array._(elementObjects).map(function(elementObject) {
+        var element = _toElementDescriptor(elementObject);
+        _disallowProperty(elementObject, "finisher", "An element descriptor");
+        _disallowProperty(elementObject, "extras", "An element descriptor");
+
+        return element;
+    });
+}
+function _toElementDescriptor(elementObject) {
+    var kind = String(elementObject.kind);
+    if (kind !== "method" && kind !== "field") {
+        throw new TypeError("An element descriptor's .kind property must be either \"method\" or" + " \"field\", but a decorator created an element descriptor with" + " .kind \"" + kind + "\"");
+    }
+    var key = _to_property_key._(elementObject.key);
+    var placement = String(elementObject.placement);
+    if (placement !== "static" && placement !== "prototype" && placement !== "own") {
+        throw new TypeError(
+            "An element descriptor's .placement property must be one of \"static\","
+                + " \"prototype\" or \"own\", but a decorator created an element descriptor"
+                + " with .placement \""
+                + placement
+                + "\""
+        );
+    }
+    var descriptor = elementObject.descriptor;
+    _disallowProperty(elementObject, "elements", "An element descriptor");
+    var element = { kind: kind, key: key, placement: placement, descriptor: Object.assign({}, descriptor) };
+    if (kind !== "field") _disallowProperty(elementObject, "initializer", "A method descriptor");
+    else {
+        _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
+        _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
+        _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
+        element.initializer = elementObject.initializer;
+    }
+
+    return element;
+}
+function _toElementFinisherExtras(elementObject) {
+    var element = _toElementDescriptor(elementObject);
+    var finisher = _optionalCallableProperty(elementObject, "finisher");
+    var extras = _toElementDescriptors(elementObject.extras);
+
+    return { element: element, finisher: finisher, extras: extras };
+}
+function _fromClassDescriptor(elements) {
+    var obj = { kind: "class", elements: elements.map(_fromElementDescriptor) };
+    var desc = { value: "Descriptor", configurable: true };
+    Object.defineProperty(obj, Symbol.toStringTag, desc);
+
+    return obj;
+}
+function _toClassDescriptor(obj) {
+    var kind = String(obj.kind);
+    if (kind !== "class") {
+        throw new TypeError("A class descriptor's .kind property must be \"class\", but a decorator" + " created a class descriptor with .kind \"" + kind + "\"");
+    }
+    _disallowProperty(obj, "key", "A class descriptor");
+    _disallowProperty(obj, "placement", "A class descriptor");
+    _disallowProperty(obj, "descriptor", "A class descriptor");
+    _disallowProperty(obj, "initializer", "A class descriptor");
+    _disallowProperty(obj, "extras", "A class descriptor");
+    var finisher = _optionalCallableProperty(obj, "finisher");
+    var elements = _toElementDescriptors(obj.elements);
+
+    return { elements: elements, finisher: finisher };
+}
+function _disallowProperty(obj, name, objectType) {
+    if (obj[name] !== undefined) throw new TypeError(objectType + " can't have a ." + name + " property.");
+}
+function _optionalCallableProperty(obj, name) {
+    var value = obj[name];
+    if (value !== undefined && typeof value !== "function") {
+        throw new TypeError("Expected '" + name + "' to be a function");
+    }
+
+    return value;
+}
+function _runClassFinishers(constructor, finishers) {
+    for (var i = 0; i < finishers.length; i++) {
+        var newConstructor = (0, finishers[i])(constructor);
+        if (newConstructor !== undefined) {
+            if (typeof newConstructor !== "function") throw new TypeError("Finishers must return a constructor.");
+            constructor = newConstructor;
+        }
+    }
+
+    return constructor;
+}
+exports._ = _decorate;
diff --git a/node_modules/@swc/helpers/cjs/_defaults.cjs b/node_modules/@swc/helpers/cjs/_defaults.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..eb832e9b24b118062ef36ab70a9011529bde1254
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_defaults.cjs
@@ -0,0 +1,15 @@
+"use strict";
+
+function _defaults(obj, defaults) {
+    var keys = Object.getOwnPropertyNames(defaults);
+
+    for (var i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        var value = Object.getOwnPropertyDescriptor(defaults, key);
+
+        if (value && value.configurable && obj[key] === undefined) Object.defineProperty(obj, key, value);
+    }
+
+    return obj;
+}
+exports._ = _defaults;
diff --git a/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs b/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6c4c3343bde30f02f7703a8b4b42835bef67416e
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_define_enumerable_properties.cjs
@@ -0,0 +1,26 @@
+"use strict";
+
+function _define_enumerable_properties(obj, descs) {
+    for (var key in descs) {
+        var desc = descs[key];
+        desc.configurable = desc.enumerable = true;
+
+        if ("value" in desc) desc.writable = true;
+
+        Object.defineProperty(obj, key, desc);
+    }
+
+    if (Object.getOwnPropertySymbols) {
+        var objectSymbols = Object.getOwnPropertySymbols(descs);
+        for (var i = 0; i < objectSymbols.length; i++) {
+            var sym = objectSymbols[i];
+            var desc = descs[sym];
+            desc.configurable = desc.enumerable = true;
+            if ("value" in desc) desc.writable = true;
+            Object.defineProperty(obj, sym, desc);
+        }
+    }
+
+    return obj;
+}
+exports._ = _define_enumerable_properties;
diff --git a/node_modules/@swc/helpers/cjs/_define_property.cjs b/node_modules/@swc/helpers/cjs/_define_property.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..9063d6e99599c50b49fc5826b0777ba93c896598
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_define_property.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+function _define_property(obj, key, value) {
+    if (key in obj) {
+        Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });
+    } else obj[key] = value;
+
+    return obj;
+}
+exports._ = _define_property;
diff --git a/node_modules/@swc/helpers/cjs/_dispose.cjs b/node_modules/@swc/helpers/cjs/_dispose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..5fc3481cb24da1eaf55c08dde6492147fc089752
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_dispose.cjs
@@ -0,0 +1,43 @@
+"use strict";
+
+/* @minVersion 7.22.0 */
+function dispose_SuppressedError(suppressed, error) {
+    if (typeof SuppressedError !== "undefined") {
+        // eslint-disable-next-line no-undef
+        dispose_SuppressedError = SuppressedError;
+    } else {
+        dispose_SuppressedError = function SuppressedError(suppressed, error) {
+            this.suppressed = suppressed;
+            this.error = error;
+            this.stack = new Error().stack;
+        };
+        dispose_SuppressedError.prototype = Object.create(Error.prototype, { constructor: { value: dispose_SuppressedError, writable: true, configurable: true } });
+    }
+    return new dispose_SuppressedError(suppressed, error);
+}
+
+function _dispose(stack, error, hasError) {
+    function next() {
+        while (stack.length > 0) {
+            try {
+                var r = stack.pop();
+                var p = r.d.call(r.v);
+                if (r.a) return Promise.resolve(p).then(next, err);
+            } catch (e) {
+                return err(e);
+            }
+        }
+        if (hasError) throw error;
+    }
+
+    function err(e) {
+        error = hasError ? new dispose_SuppressedError(e, error) : e;
+        hasError = true;
+
+        return next();
+    }
+
+    return next();
+}
+
+exports._ = _dispose;
diff --git a/node_modules/@swc/helpers/cjs/_export_star.cjs b/node_modules/@swc/helpers/cjs/_export_star.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..51af20b9e994163af66aaf53cf58dfa7663e72f8
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_export_star.cjs
@@ -0,0 +1,17 @@
+"use strict";
+
+function _export_star(from, to) {
+    Object.keys(from).forEach(function(k) {
+        if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
+            Object.defineProperty(to, k, {
+                enumerable: true,
+                get: function() {
+                    return from[k];
+                }
+            });
+        }
+    });
+
+    return from;
+}
+exports._ = _export_star;
diff --git a/node_modules/@swc/helpers/cjs/_extends.cjs b/node_modules/@swc/helpers/cjs/_extends.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2bb159299b872f6e1a6dafa3e7ca18000a90c186
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_extends.cjs
@@ -0,0 +1,15 @@
+"use strict";
+
+function _extends() {
+    exports._ = _extends = Object.assign || function assign(target) {
+        for (var i = 1; i < arguments.length; i++) {
+            var source = arguments[i];
+            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
+        }
+
+        return target;
+    };
+
+    return _extends.apply(this, arguments);
+}
+exports._ = _extends;
diff --git a/node_modules/@swc/helpers/cjs/_get.cjs b/node_modules/@swc/helpers/cjs/_get.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..1c5bfcd0044b2c43c1ef7d45b7a292471453cc1f
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_get.cjs
@@ -0,0 +1,23 @@
+"use strict";
+
+var _super_prop_base = require("./_super_prop_base.cjs");
+
+function _get(target, property, receiver) {
+    if (typeof Reflect !== "undefined" && Reflect.get) exports._ = _get = Reflect.get;
+    else {
+        exports._ = _get = function get(target, property, receiver) {
+            var base = _super_prop_base._(target, property);
+
+            if (!base) return;
+
+            var desc = Object.getOwnPropertyDescriptor(base, property);
+
+            if (desc.get) return desc.get.call(receiver || target);
+
+            return desc.value;
+        };
+    }
+
+    return _get(target, property, receiver || target);
+}
+exports._ = _get;
diff --git a/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs b/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6ef956a17db6a42b9af3afd266d8691a010ea7b0
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_get_prototype_of.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+function _get_prototype_of(o) {
+    exports._ = _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
+        return o.__proto__ || Object.getPrototypeOf(o);
+    };
+
+    return _get_prototype_of(o);
+}
+exports._ = _get_prototype_of;
diff --git a/node_modules/@swc/helpers/cjs/_identity.cjs b/node_modules/@swc/helpers/cjs/_identity.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..aab1b0da75eb0d834eb113a4c90d43932140d5c4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_identity.cjs
@@ -0,0 +1,7 @@
+"use strict";
+
+function _identity(x) {
+    return x;
+}
+
+exports._ = _identity;
diff --git a/node_modules/@swc/helpers/cjs/_inherits.cjs b/node_modules/@swc/helpers/cjs/_inherits.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c803df5ff37af9225c61961cedaa1ef4dae77d22
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_inherits.cjs
@@ -0,0 +1,14 @@
+"use strict";
+
+var _set_prototype_of = require("./_set_prototype_of.cjs");
+
+function _inherits(subClass, superClass) {
+    if (typeof superClass !== "function" && superClass !== null) {
+        throw new TypeError("Super expression must either be null or a function");
+    }
+
+    subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
+
+    if (superClass) _set_prototype_of._(subClass, superClass);
+}
+exports._ = _inherits;
diff --git a/node_modules/@swc/helpers/cjs/_inherits_loose.cjs b/node_modules/@swc/helpers/cjs/_inherits_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..30f35415852b0c2caf116ea045b2d882e4b0dda4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_inherits_loose.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _inherits_loose(subClass, superClass) {
+    subClass.prototype = Object.create(superClass.prototype);
+    subClass.prototype.constructor = subClass;
+    subClass.__proto__ = superClass;
+}
+exports._ = _inherits_loose;
diff --git a/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs b/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..ac28e5d83ae73e680072ebbca9c061beb1975ab1
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_initializer_define_property.cjs
@@ -0,0 +1,13 @@
+"use strict";
+
+function _initializer_define_property(target, property, descriptor, context) {
+    if (!descriptor) return;
+
+    Object.defineProperty(target, property, {
+        enumerable: descriptor.enumerable,
+        configurable: descriptor.configurable,
+        writable: descriptor.writable,
+        value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
+    });
+}
+exports._ = _initializer_define_property;
diff --git a/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs b/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2c333dbb3f7ec41ffb18ec14efc62452ddbabc2a
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_initializer_warning_helper.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+function _initializer_warning_helper(descriptor, context) {
+    throw new Error(
+        "Decorating class property failed. Please ensure that "
+            + "proposal-class-properties is enabled and set to use loose mode. "
+            + "To use proposal-class-properties in spec mode with decorators, wait for "
+            + "the next major version of decorators in stage 2."
+    );
+}
+exports._ = _initializer_warning_helper;
diff --git a/node_modules/@swc/helpers/cjs/_instanceof.cjs b/node_modules/@swc/helpers/cjs/_instanceof.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..8234b95aae51a0ebf11dbc95d03d3a877a3424dc
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_instanceof.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _instanceof(left, right) {
+    if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
+        return !!right[Symbol.hasInstance](left);
+    } else return left instanceof right;
+}
+exports._ = _instanceof;
diff --git a/node_modules/@swc/helpers/cjs/_interop_require_default.cjs b/node_modules/@swc/helpers/cjs/_interop_require_default.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c9e5240c07c154593baef4918909858ab4bf3cb7
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_interop_require_default.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _interop_require_default(obj) {
+    return obj && obj.__esModule ? obj : { default: obj };
+}
+exports._ = _interop_require_default;
diff --git a/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs b/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..9c2abcded61a6653b41a2cfece1c1397fc336619
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs
@@ -0,0 +1,38 @@
+"use strict";
+
+function _getRequireWildcardCache(nodeInterop) {
+    if (typeof WeakMap !== "function") return null;
+
+    var cacheBabelInterop = new WeakMap();
+    var cacheNodeInterop = new WeakMap();
+
+    return (_getRequireWildcardCache = function(nodeInterop) {
+        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+    })(nodeInterop);
+}
+function _interop_require_wildcard(obj, nodeInterop) {
+    if (!nodeInterop && obj && obj.__esModule) return obj;
+    if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj };
+
+    var cache = _getRequireWildcardCache(nodeInterop);
+
+    if (cache && cache.has(obj)) return cache.get(obj);
+
+    var newObj = { __proto__: null };
+    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+    for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+            if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
+            else newObj[key] = obj[key];
+        }
+    }
+
+    newObj.default = obj;
+
+    if (cache) cache.set(obj, newObj);
+
+    return newObj;
+}
+exports._ = _interop_require_wildcard;
diff --git a/node_modules/@swc/helpers/cjs/_is_native_function.cjs b/node_modules/@swc/helpers/cjs/_is_native_function.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..920371163fef3dfac24eb5071a000fa851267055
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_is_native_function.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _is_native_function(fn) {
+    return Function.toString.call(fn).indexOf("[native code]") !== -1;
+}
+exports._ = _is_native_function;
diff --git a/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs b/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..42ea82f5a5b4f26255d6fdea9981943b2ae2e67b
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_is_native_reflect_construct.cjs
@@ -0,0 +1,18 @@
+"use strict";
+
+function _is_native_reflect_construct() {
+    // Since Reflect.construct can't be properly polyfilled, some
+    // implementations (e.g. core-js@2) don't set the correct internal slots.
+    // Those polyfills don't allow us to subclass built-ins, so we need to
+    // use our fallback implementation.
+    try {
+        // If the internal slots aren't set, this throws an error similar to
+        //   TypeError: this is not a Boolean object.
+        var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
+    } catch (_) {}
+    return (exports._ = _is_native_reflect_construct = function() {
+        return !!result;
+    })();
+}
+
+exports._ = _is_native_reflect_construct;
diff --git a/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs b/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..cc73cf5f044421344ca37d30819a69236e8b35a6
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_iterable_to_array.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _iterable_to_array(iter) {
+    if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
+        return Array.from(iter);
+    }
+}
+exports._ = _iterable_to_array;
diff --git a/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs b/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..634876bc7ab1d292ef58f75fd308f1cfc6d2d787
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_iterable_to_array_limit.cjs
@@ -0,0 +1,31 @@
+"use strict";
+
+function _iterable_to_array_limit(arr, i) {
+    var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
+
+    if (_i == null) return;
+
+    var _arr = [];
+    var _n = true;
+    var _d = false;
+    var _s, _e;
+
+    try {
+        for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
+            _arr.push(_s.value);
+            if (i && _arr.length === i) break;
+        }
+    } catch (err) {
+        _d = true;
+        _e = err;
+    } finally {
+        try {
+            if (!_n && _i["return"] != null) _i["return"]();
+        } finally {
+            if (_d) throw _e;
+        }
+    }
+
+    return _arr;
+}
+exports._ = _iterable_to_array_limit;
diff --git a/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs b/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..78ddf90baf79d65ddef6d78a39082ad9606b9e0a
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_iterable_to_array_limit_loose.cjs
@@ -0,0 +1,17 @@
+"use strict";
+
+function _iterable_to_array_limit_loose(arr, i) {
+    var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);
+
+    if (_i == null) return;
+
+    var _arr = [];
+
+    for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) {
+        _arr.push(_step.value);
+        if (i && _arr.length === i) break;
+    }
+
+    return _arr;
+}
+exports._ = _iterable_to_array_limit_loose;
diff --git a/node_modules/@swc/helpers/cjs/_jsx.cjs b/node_modules/@swc/helpers/cjs/_jsx.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..bf1a20b0a75541350287eaca450da98bd317c6d1
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_jsx.cjs
@@ -0,0 +1,28 @@
+"use strict";
+
+var REACT_ELEMENT_TYPE;
+function _jsx(type, props, key, children) {
+    if (!REACT_ELEMENT_TYPE) {
+        REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
+    }
+
+    var defaultProps = type && type.defaultProps;
+    var childrenLength = arguments.length - 3;
+
+    if (!props && childrenLength !== 0) props = { children: void 0 };
+    if (props && defaultProps) {
+        for (var propName in defaultProps) {
+            if (props[propName] === void 0) props[propName] = defaultProps[propName];
+            else if (!props) props = defaultProps || {};
+        }
+    }
+    if (childrenLength === 1) props.children = children;
+    else if (childrenLength > 1) {
+        var childArray = new Array(childrenLength);
+        for (var i = 0; i < childrenLength; i++) childArray[i] = arguments[i + 3];
+        props.children = childArray;
+    }
+
+    return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : "" + key, ref: null, props: props, _owner: null };
+}
+exports._ = _jsx;
diff --git a/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs b/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2df59f9cfb0c08c8d75f3dc0e5eeab6218747c51
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_new_arrow_check.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _new_arrow_check(innerThis, boundThis) {
+    if (innerThis !== boundThis) throw new TypeError("Cannot instantiate an arrow function");
+}
+exports._ = _new_arrow_check;
diff --git a/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs b/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..3baab4b6c8ccb85a52e1c619f14d549dbd75c0ea
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_non_iterable_rest.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _non_iterable_rest() {
+    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+exports._ = _non_iterable_rest;
diff --git a/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs b/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c213de5586d0c8cf40f8f73edb7681c2f000ac2c
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_non_iterable_spread.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _non_iterable_spread() {
+    throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+exports._ = _non_iterable_spread;
diff --git a/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs b/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..c84fb6686f9dcdfde4af9c5a8837396badb00a9c
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_object_destructuring_empty.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _object_destructuring_empty(o) {
+    if (o === null || o === void 0) throw new TypeError("Cannot destructure " + o);
+
+    return o;
+}
+exports._ = _object_destructuring_empty;
diff --git a/node_modules/@swc/helpers/cjs/_object_spread.cjs b/node_modules/@swc/helpers/cjs/_object_spread.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..45cec7105d36b48d0a9c80a6a9b27282496393fd
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_object_spread.cjs
@@ -0,0 +1,25 @@
+"use strict";
+
+var _define_property = require("./_define_property.cjs");
+
+function _object_spread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+        var source = arguments[i] != null ? arguments[i] : {};
+        var ownKeys = Object.keys(source);
+
+        if (typeof Object.getOwnPropertySymbols === "function") {
+            ownKeys = ownKeys.concat(
+                Object.getOwnPropertySymbols(source).filter(function(sym) {
+                    return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+                })
+            );
+        }
+
+        ownKeys.forEach(function(key) {
+            _define_property._(target, key, source[key]);
+        });
+    }
+
+    return target;
+}
+exports._ = _object_spread;
diff --git a/node_modules/@swc/helpers/cjs/_object_spread_props.cjs b/node_modules/@swc/helpers/cjs/_object_spread_props.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..1c27f1c3a95d32f6ad730dc9889c63629a0b7377
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_object_spread_props.cjs
@@ -0,0 +1,30 @@
+"use strict";
+
+function ownKeys(object, enumerableOnly) {
+    var keys = Object.keys(object);
+
+    if (Object.getOwnPropertySymbols) {
+        var symbols = Object.getOwnPropertySymbols(object);
+        if (enumerableOnly) {
+            symbols = symbols.filter(function(sym) {
+                return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+            });
+        }
+        keys.push.apply(keys, symbols);
+    }
+
+    return keys;
+}
+function _object_spread_props(target, source) {
+    source = source != null ? source : {};
+
+    if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+    else {
+        ownKeys(Object(source)).forEach(function(key) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+        });
+    }
+
+    return target;
+}
+exports._ = _object_spread_props;
diff --git a/node_modules/@swc/helpers/cjs/_object_without_properties.cjs b/node_modules/@swc/helpers/cjs/_object_without_properties.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2cd10858fc8a04350c2d851bed3824ce1e3f0493
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_object_without_properties.cjs
@@ -0,0 +1,23 @@
+"use strict";
+
+var _object_without_properties_loose = require("./_object_without_properties_loose.cjs");
+
+function _object_without_properties(source, excluded) {
+    if (source == null) return {};
+
+    var target = _object_without_properties_loose._(source, excluded);
+    var key, i;
+
+    if (Object.getOwnPropertySymbols) {
+        var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+        for (i = 0; i < sourceSymbolKeys.length; i++) {
+            key = sourceSymbolKeys[i];
+            if (excluded.indexOf(key) >= 0) continue;
+            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
+            target[key] = source[key];
+        }
+    }
+
+    return target;
+}
+exports._ = _object_without_properties;
diff --git a/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs b/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..dc90d6236fa4aa29a288342796d4316e5949dbdb
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_object_without_properties_loose.cjs
@@ -0,0 +1,18 @@
+"use strict";
+
+function _object_without_properties_loose(source, excluded) {
+    if (source == null) return {};
+
+    var target = {};
+    var sourceKeys = Object.keys(source);
+    var key, i;
+
+    for (i = 0; i < sourceKeys.length; i++) {
+        key = sourceKeys[i];
+        if (excluded.indexOf(key) >= 0) continue;
+        target[key] = source[key];
+    }
+
+    return target;
+}
+exports._ = _object_without_properties_loose;
diff --git a/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs b/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..fa040185b3d5e4f00202c9f64c3817d18814fa8c
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_possible_constructor_return.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _assert_this_initialized = require("./_assert_this_initialized.cjs");
+var _type_of = require("./_type_of.cjs");
+
+function _possible_constructor_return(self, call) {
+    if (call && (_type_of._(call) === "object" || typeof call === "function")) return call;
+
+    return _assert_this_initialized._(self);
+}
+exports._ = _possible_constructor_return;
diff --git a/node_modules/@swc/helpers/cjs/_read_only_error.cjs b/node_modules/@swc/helpers/cjs/_read_only_error.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..302cf5c70e53bd2a1fa71398c4e617afe8e9f5be
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_read_only_error.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _read_only_error(name) {
+    throw new TypeError("\"" + name + "\" is read-only");
+}
+exports._ = _read_only_error;
diff --git a/node_modules/@swc/helpers/cjs/_set.cjs b/node_modules/@swc/helpers/cjs/_set.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..adbf48487a1b1056c1927fb84d8ed741192ebdc8
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_set.cjs
@@ -0,0 +1,44 @@
+"use strict";
+
+var _define_property = require("./_define_property.cjs");
+var _super_prop_base = require("./_super_prop_base.cjs");
+
+function set(target, property, value, receiver) {
+    if (typeof Reflect !== "undefined" && Reflect.set) set = Reflect.set;
+    else {
+        set = function set(target, property, value, receiver) {
+            var base = _super_prop_base._(target, property);
+            var desc;
+            if (base) {
+                desc = Object.getOwnPropertyDescriptor(base, property);
+                if (desc.set) {
+                    desc.set.call(receiver, value);
+
+                    return true;
+                } else if (!desc.writable) {
+                    return false;
+                }
+            }
+            desc = Object.getOwnPropertyDescriptor(receiver, property);
+            if (desc) {
+                if (!desc.writable) return false;
+                desc.value = value;
+                Object.defineProperty(receiver, property, desc);
+            } else {
+                _define_property._(receiver, property, value);
+            }
+
+            return true;
+        };
+    }
+
+    return set(target, property, value, receiver);
+}
+
+function _set(target, property, value, receiver, isStrict) {
+    var s = set(target, property, value, receiver || target);
+    if (!s && isStrict) throw new Error("failed to set property");
+
+    return value;
+}
+exports._ = _set;
diff --git a/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs b/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..acf501dbf761c21cee66cc5d60634d5b34264def
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_set_prototype_of.cjs
@@ -0,0 +1,12 @@
+"use strict";
+
+function _set_prototype_of(o, p) {
+    exports._ = _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
+        o.__proto__ = p;
+
+        return o;
+    };
+
+    return _set_prototype_of(o, p);
+}
+exports._ = _set_prototype_of;
diff --git a/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs b/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e4c42543aa287d14de80e24252a09280a0049273
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_skip_first_generator_next.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+function _skip_first_generator_next(fn) {
+    return function() {
+        var it = fn.apply(this, arguments);
+        it.next();
+
+        return it;
+    };
+}
+exports._ = _skip_first_generator_next;
diff --git a/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs b/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..e9fe47e83cbee35010173c2569bb1585d11fdbe6
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_sliced_to_array.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _array_with_holes = require("./_array_with_holes.cjs");
+var _iterable_to_array_limit = require("./_iterable_to_array_limit.cjs");
+var _non_iterable_rest = require("./_non_iterable_rest.cjs");
+var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs");
+
+function _sliced_to_array(arr, i) {
+    return _array_with_holes._(arr) || _iterable_to_array_limit._(arr, i) || _unsupported_iterable_to_array._(arr, i) || _non_iterable_rest._();
+}
+exports._ = _sliced_to_array;
diff --git a/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs b/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..562dcaf9d4453037ada352f07a94e0e997034988
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_sliced_to_array_loose.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _array_with_holes = require("./_array_with_holes.cjs");
+var _iterable_to_array_limit_loose = require("./_iterable_to_array_limit_loose.cjs");
+var _non_iterable_rest = require("./_non_iterable_rest.cjs");
+var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs");
+
+function _sliced_to_array_loose(arr, i) {
+    return _array_with_holes._(arr) || _iterable_to_array_limit_loose._(arr, i) || _unsupported_iterable_to_array._(arr, i) || _non_iterable_rest._();
+}
+exports._ = _sliced_to_array_loose;
diff --git a/node_modules/@swc/helpers/cjs/_super_prop_base.cjs b/node_modules/@swc/helpers/cjs/_super_prop_base.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..eaf3199a890b9c58b19beba04a337f8cb4b1e926
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_super_prop_base.cjs
@@ -0,0 +1,13 @@
+"use strict";
+
+var _get_prototype_of = require("./_get_prototype_of.cjs");
+
+function _super_prop_base(object, property) {
+    while (!Object.prototype.hasOwnProperty.call(object, property)) {
+        object = _get_prototype_of._(object);
+        if (object === null) break;
+    }
+
+    return object;
+}
+exports._ = _super_prop_base;
diff --git a/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs b/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..89a579de132c358b3f2fd58a71a2b9ff5f3063b2
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_tagged_template_literal.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _tagged_template_literal(strings, raw) {
+    if (!raw) raw = strings.slice(0);
+
+    return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } }));
+}
+exports._ = _tagged_template_literal;
diff --git a/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs b/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..48db14d47462231e12f26d9254d52cd192415f95
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+function _tagged_template_literal_loose(strings, raw) {
+    if (!raw) raw = strings.slice(0);
+
+    strings.raw = raw;
+
+    return strings;
+}
+exports._ = _tagged_template_literal_loose;
diff --git a/node_modules/@swc/helpers/cjs/_throw.cjs b/node_modules/@swc/helpers/cjs/_throw.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..26f2e2ba018d0cf0f2cdb52c0b251bda9fcd3dbd
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_throw.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _throw(e) {
+    throw e;
+}
+exports._ = _throw;
diff --git a/node_modules/@swc/helpers/cjs/_to_array.cjs b/node_modules/@swc/helpers/cjs/_to_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0887dd4060760cab0714488c9b987da826b0b2bd
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_to_array.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _array_with_holes = require("./_array_with_holes.cjs");
+var _iterable_to_array = require("./_iterable_to_array.cjs");
+var _non_iterable_rest = require("./_non_iterable_rest.cjs");
+var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs");
+
+function _to_array(arr) {
+    return _array_with_holes._(arr) || _iterable_to_array._(arr) || _unsupported_iterable_to_array._(arr) || _non_iterable_rest._();
+}
+exports._ = _to_array;
diff --git a/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs b/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..85d19126b38d4ff60683b506f49575ccd8bbf113
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_to_consumable_array.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _array_without_holes = require("./_array_without_holes.cjs");
+var _iterable_to_array = require("./_iterable_to_array.cjs");
+var _non_iterable_spread = require("./_non_iterable_spread.cjs");
+var _unsupported_iterable_to_array = require("./_unsupported_iterable_to_array.cjs");
+
+function _to_consumable_array(arr) {
+    return _array_without_holes._(arr) || _iterable_to_array._(arr) || _unsupported_iterable_to_array._(arr) || _non_iterable_spread._();
+}
+exports._ = _to_consumable_array;
diff --git a/node_modules/@swc/helpers/cjs/_to_primitive.cjs b/node_modules/@swc/helpers/cjs/_to_primitive.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..da357948eb267720dd80b6bc6fc421bcfe83efe3
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_to_primitive.cjs
@@ -0,0 +1,18 @@
+"use strict";
+
+var _type_of = require("./_type_of.cjs");
+
+function _to_primitive(input, hint) {
+    if (_type_of._(input) !== "object" || input === null) return input;
+
+    var prim = input[Symbol.toPrimitive];
+
+    if (prim !== undefined) {
+        var res = prim.call(input, hint || "default");
+        if (_type_of._(res) !== "object") return res;
+        throw new TypeError("@@toPrimitive must return a primitive value.");
+    }
+
+    return (hint === "string" ? String : Number)(input);
+}
+exports._ = _to_primitive;
diff --git a/node_modules/@swc/helpers/cjs/_to_property_key.cjs b/node_modules/@swc/helpers/cjs/_to_property_key.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..86075ac1fe36b44caa437f7d25b2db9abad1b88c
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_to_property_key.cjs
@@ -0,0 +1,11 @@
+"use strict";
+
+var _to_primitive = require("./_to_primitive.cjs");
+var _type_of = require("./_type_of.cjs");
+
+function _to_property_key(arg) {
+    var key = _to_primitive._(arg, "string");
+
+    return _type_of._(key) === "symbol" ? key : String(key);
+}
+exports._ = _to_property_key;
diff --git a/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs b/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..24848ca7cfea22633ec3539b67fb3d20390b7580
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_add_disposable_resource.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__addDisposableResource;
diff --git a/node_modules/@swc/helpers/cjs/_ts_decorate.cjs b/node_modules/@swc/helpers/cjs/_ts_decorate.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..9abfbda567683316b489f3bee0e549f0d36ba0e1
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_decorate.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__decorate;
diff --git a/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs b/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..4ad32f10d3b66719e8f0045b5d71ce7cacb07ee9
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_dispose_resources.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__disposeResources;
diff --git a/node_modules/@swc/helpers/cjs/_ts_generator.cjs b/node_modules/@swc/helpers/cjs/_ts_generator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6ea3e34db8902e5de5a270f59e7e0b0bbe09fa02
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_generator.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__generator;
diff --git a/node_modules/@swc/helpers/cjs/_ts_metadata.cjs b/node_modules/@swc/helpers/cjs/_ts_metadata.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..d39e6e4142f75e71b49cac326ed3b56d042f8653
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_metadata.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__metadata;
diff --git a/node_modules/@swc/helpers/cjs/_ts_param.cjs b/node_modules/@swc/helpers/cjs/_ts_param.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6e2dca6eb22386c3885055d133d141275b0290d4
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_param.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__param;
diff --git a/node_modules/@swc/helpers/cjs/_ts_values.cjs b/node_modules/@swc/helpers/cjs/_ts_values.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..0696a1f4c19ccc0e955f2ff1f7e935e0f7abc3ff
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_ts_values.cjs
@@ -0,0 +1,3 @@
+"use strict";
+
+exports._ = require("tslib").__values;
diff --git a/node_modules/@swc/helpers/cjs/_type_of.cjs b/node_modules/@swc/helpers/cjs/_type_of.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..2749e8e747ac65d61b3c3f6c74a0f39eadf61d29
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_type_of.cjs
@@ -0,0 +1,8 @@
+"use strict";
+
+function _type_of(obj) {
+    "@swc/helpers - typeof";
+
+    return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
+}
+exports._ = _type_of;
diff --git a/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs b/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..a1765e15272ba0e4ce695a8ed1c11bff0d69882c
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_unsupported_iterable_to_array.cjs
@@ -0,0 +1,15 @@
+"use strict";
+
+var _array_like_to_array = require("./_array_like_to_array.cjs");
+
+function _unsupported_iterable_to_array(o, minLen) {
+    if (!o) return;
+    if (typeof o === "string") return _array_like_to_array._(o, minLen);
+
+    var n = Object.prototype.toString.call(o).slice(8, -1);
+
+    if (n === "Object" && o.constructor) n = o.constructor.name;
+    if (n === "Map" || n === "Set") return Array.from(n);
+    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array._(o, minLen);
+}
+exports._ = _unsupported_iterable_to_array;
diff --git a/node_modules/@swc/helpers/cjs/_update.cjs b/node_modules/@swc/helpers/cjs/_update.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..abb90f34e9ac6c366fba56351914941cec7ab440
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_update.cjs
@@ -0,0 +1,16 @@
+"use strict";
+
+var _get = require("./_get.cjs");
+var _set = require("./_set.cjs");
+
+function _update(target, property, receiver, isStrict) {
+    return {
+        get _() {
+            return _get._(target, property, receiver);
+        },
+        set _(value) {
+            _set._(target, property, value, receiver, isStrict);
+        }
+    };
+}
+exports._ = _update;
diff --git a/node_modules/@swc/helpers/cjs/_using.cjs b/node_modules/@swc/helpers/cjs/_using.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..903837e715d5e030bf36184d64da7db430667c1d
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_using.cjs
@@ -0,0 +1,24 @@
+"use strict";
+
+/* @minVersion 7.22.0 */
+
+function _using(stack, value, isAwait) {
+    if (value === null || value === void 0) return value;
+    if (Object(value) !== value) {
+        throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+    }
+    // core-js-pure uses Symbol.for for polyfilling well-known symbols
+    if (isAwait) {
+        var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")];
+    }
+    if (dispose === null || dispose === void 0) {
+        dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")];
+    }
+    if (typeof dispose !== "function") {
+        throw new TypeError(`Property [Symbol.dispose] is not a function.`);
+    }
+    stack.push({ v: value, d: dispose, a: isAwait });
+    return value;
+}
+
+exports._ = _using;
diff --git a/node_modules/@swc/helpers/cjs/_using_ctx.cjs b/node_modules/@swc/helpers/cjs/_using_ctx.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..921b6efccd618ba68572ba86306a177434e8c4b7
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_using_ctx.cjs
@@ -0,0 +1,75 @@
+"use strict";
+
+function _using_ctx() {
+    var _disposeSuppressedError = typeof SuppressedError === "function"
+            // eslint-disable-next-line no-undef
+            ? SuppressedError
+            : (function(error, suppressed) {
+                var err = new Error();
+                err.name = "SuppressedError";
+                err.suppressed = suppressed;
+                err.error = error;
+                return err;
+            }),
+        empty = {},
+        stack = [];
+    function using(isAwait, value) {
+        if (value != null) {
+            if (Object(value) !== value) {
+                throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+            }
+            // core-js-pure uses Symbol.for for polyfilling well-known symbols
+            if (isAwait) {
+                var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")];
+            }
+            if (dispose == null) {
+                dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")];
+            }
+            if (typeof dispose !== "function") {
+                throw new TypeError(`Property [Symbol.dispose] is not a function.`);
+            }
+            stack.push({ v: value, d: dispose, a: isAwait });
+        } else if (isAwait) {
+            // provide the nullish `value` as `d` for minification gain
+            stack.push({ d: value, a: isAwait });
+        }
+        return value;
+    }
+    return {
+        // error
+        e: empty,
+        // using
+        u: using.bind(null, false),
+        // await using
+        a: using.bind(null, true),
+        // dispose
+        d: function() {
+            var error = this.e;
+
+            function next() {
+                // eslint-disable-next-line @typescript-eslint/no-use-before-define
+                while ((resource = stack.pop())) {
+                    try {
+                        var resource, disposalResult = resource.d && resource.d.call(resource.v);
+                        if (resource.a) {
+                            return Promise.resolve(disposalResult).then(next, err);
+                        }
+                    } catch (e) {
+                        return err(e);
+                    }
+                }
+                if (error !== empty) throw error;
+            }
+
+            function err(e) {
+                error = error !== empty ? new _disposeSuppressedError(error, e) : e;
+
+                return next();
+            }
+
+            return next();
+        }
+    };
+}
+
+exports._ = _using_ctx;
diff --git a/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs b/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..09adf255bb16cc5b98ded429e7bf649df8a45213
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_wrap_async_generator.cjs
@@ -0,0 +1,10 @@
+"use strict";
+
+var _async_generator = require("./_async_generator.cjs");
+
+function _wrap_async_generator(fn) {
+    return function() {
+        return new _async_generator._(fn.apply(this, arguments));
+    };
+}
+exports._ = _wrap_async_generator;
diff --git a/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs b/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6babaefdc47044ba97be92e16ac1b5b7828cc855
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_wrap_native_super.cjs
@@ -0,0 +1,28 @@
+"use strict";
+
+var _construct = require("./_construct.cjs");
+var _get_prototype_of = require("./_get_prototype_of.cjs");
+var _is_native_function = require("./_is_native_function.cjs");
+var _set_prototype_of = require("./_set_prototype_of.cjs");
+
+function _wrap_native_super(Class) {
+    var _cache = typeof Map === "function" ? new Map() : undefined;
+    exports._ = _wrap_native_super = function(Class) {
+        if (Class === null || !_is_native_function._(Class)) return Class;
+        if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function");
+        if (typeof _cache !== "undefined") {
+            if (_cache.has(Class)) return _cache.get(Class);
+            _cache.set(Class, Wrapper);
+        }
+
+        function Wrapper() {
+            return _construct._(Class, arguments, _get_prototype_of._(this).constructor);
+        }
+        Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });
+
+        return _set_prototype_of._(Wrapper, Class);
+    };
+
+    return _wrap_native_super(Class);
+}
+exports._ = _wrap_native_super;
diff --git a/node_modules/@swc/helpers/cjs/_write_only_error.cjs b/node_modules/@swc/helpers/cjs/_write_only_error.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..799fc3a5851d975a4b5c42d8d61145597f63d476
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/_write_only_error.cjs
@@ -0,0 +1,6 @@
+"use strict";
+
+function _write_only_error(name) {
+    throw new TypeError("\"" + name + "\" is write-only");
+}
+exports._ = _write_only_error;
diff --git a/node_modules/@swc/helpers/cjs/index.cjs b/node_modules/@swc/helpers/cjs/index.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..a0b5f66292fe567d8fa6e98e9d01e1f65e201deb
--- /dev/null
+++ b/node_modules/@swc/helpers/cjs/index.cjs
@@ -0,0 +1,423 @@
+"use strict";
+
+/* This file is automatically generated and should not be manually edited. */
+/* To modify this file, please run the `npm run build` command instead. */
+
+0 && (module.exports = {
+    /* @Annotate_start: the CommonJS named exports for ESM import in node */
+    _apply_decorated_descriptor: null,
+    _apply_decs_2203_r: null,
+    _array_like_to_array: null,
+    _array_with_holes: null,
+    _array_without_holes: null,
+    _assert_this_initialized: null,
+    _async_generator: null,
+    _async_generator_delegate: null,
+    _async_iterator: null,
+    _async_to_generator: null,
+    _await_async_generator: null,
+    _await_value: null,
+    _call_super: null,
+    _check_private_redeclaration: null,
+    _class_apply_descriptor_destructure: null,
+    _class_apply_descriptor_get: null,
+    _class_apply_descriptor_set: null,
+    _class_apply_descriptor_update: null,
+    _class_call_check: null,
+    _class_check_private_static_access: null,
+    _class_check_private_static_field_descriptor: null,
+    _class_extract_field_descriptor: null,
+    _class_name_tdz_error: null,
+    _class_private_field_destructure: null,
+    _class_private_field_get: null,
+    _class_private_field_init: null,
+    _class_private_field_loose_base: null,
+    _class_private_field_loose_key: null,
+    _class_private_field_set: null,
+    _class_private_field_update: null,
+    _class_private_method_get: null,
+    _class_private_method_init: null,
+    _class_private_method_set: null,
+    _class_static_private_field_destructure: null,
+    _class_static_private_field_spec_get: null,
+    _class_static_private_field_spec_set: null,
+    _class_static_private_field_update: null,
+    _class_static_private_method_get: null,
+    _construct: null,
+    _create_class: null,
+    _create_for_of_iterator_helper_loose: null,
+    _create_super: null,
+    _decorate: null,
+    _defaults: null,
+    _define_enumerable_properties: null,
+    _define_property: null,
+    _dispose: null,
+    _export_star: null,
+    _extends: null,
+    _get: null,
+    _get_prototype_of: null,
+    _identity: null,
+    _inherits: null,
+    _inherits_loose: null,
+    _initializer_define_property: null,
+    _initializer_warning_helper: null,
+    _instanceof: null,
+    _interop_require_default: null,
+    _interop_require_wildcard: null,
+    _is_native_function: null,
+    _is_native_reflect_construct: null,
+    _iterable_to_array: null,
+    _iterable_to_array_limit: null,
+    _iterable_to_array_limit_loose: null,
+    _jsx: null,
+    _new_arrow_check: null,
+    _non_iterable_rest: null,
+    _non_iterable_spread: null,
+    _object_destructuring_empty: null,
+    _object_spread: null,
+    _object_spread_props: null,
+    _object_without_properties: null,
+    _object_without_properties_loose: null,
+    _possible_constructor_return: null,
+    _read_only_error: null,
+    _set: null,
+    _set_prototype_of: null,
+    _skip_first_generator_next: null,
+    _sliced_to_array: null,
+    _sliced_to_array_loose: null,
+    _super_prop_base: null,
+    _tagged_template_literal: null,
+    _tagged_template_literal_loose: null,
+    _throw: null,
+    _to_array: null,
+    _to_consumable_array: null,
+    _to_primitive: null,
+    _to_property_key: null,
+    _ts_add_disposable_resource: null,
+    _ts_decorate: null,
+    _ts_dispose_resources: null,
+    _ts_generator: null,
+    _ts_metadata: null,
+    _ts_param: null,
+    _ts_values: null,
+    _type_of: null,
+    _unsupported_iterable_to_array: null,
+    _update: null,
+    _using: null,
+    _using_ctx: null,
+    _wrap_async_generator: null,
+    _wrap_native_super: null,
+    _write_only_error: null
+    /* @Annotate_end */
+});
+module.exports = {
+    get _apply_decorated_descriptor() {
+        return require("./_apply_decorated_descriptor.cjs")._;
+    },
+    get _apply_decs_2203_r() {
+        return require("./_apply_decs_2203_r.cjs")._;
+    },
+    get _array_like_to_array() {
+        return require("./_array_like_to_array.cjs")._;
+    },
+    get _array_with_holes() {
+        return require("./_array_with_holes.cjs")._;
+    },
+    get _array_without_holes() {
+        return require("./_array_without_holes.cjs")._;
+    },
+    get _assert_this_initialized() {
+        return require("./_assert_this_initialized.cjs")._;
+    },
+    get _async_generator() {
+        return require("./_async_generator.cjs")._;
+    },
+    get _async_generator_delegate() {
+        return require("./_async_generator_delegate.cjs")._;
+    },
+    get _async_iterator() {
+        return require("./_async_iterator.cjs")._;
+    },
+    get _async_to_generator() {
+        return require("./_async_to_generator.cjs")._;
+    },
+    get _await_async_generator() {
+        return require("./_await_async_generator.cjs")._;
+    },
+    get _await_value() {
+        return require("./_await_value.cjs")._;
+    },
+    get _call_super() {
+        return require("./_call_super.cjs")._;
+    },
+    get _check_private_redeclaration() {
+        return require("./_check_private_redeclaration.cjs")._;
+    },
+    get _class_apply_descriptor_destructure() {
+        return require("./_class_apply_descriptor_destructure.cjs")._;
+    },
+    get _class_apply_descriptor_get() {
+        return require("./_class_apply_descriptor_get.cjs")._;
+    },
+    get _class_apply_descriptor_set() {
+        return require("./_class_apply_descriptor_set.cjs")._;
+    },
+    get _class_apply_descriptor_update() {
+        return require("./_class_apply_descriptor_update.cjs")._;
+    },
+    get _class_call_check() {
+        return require("./_class_call_check.cjs")._;
+    },
+    get _class_check_private_static_access() {
+        return require("./_class_check_private_static_access.cjs")._;
+    },
+    get _class_check_private_static_field_descriptor() {
+        return require("./_class_check_private_static_field_descriptor.cjs")._;
+    },
+    get _class_extract_field_descriptor() {
+        return require("./_class_extract_field_descriptor.cjs")._;
+    },
+    get _class_name_tdz_error() {
+        return require("./_class_name_tdz_error.cjs")._;
+    },
+    get _class_private_field_destructure() {
+        return require("./_class_private_field_destructure.cjs")._;
+    },
+    get _class_private_field_get() {
+        return require("./_class_private_field_get.cjs")._;
+    },
+    get _class_private_field_init() {
+        return require("./_class_private_field_init.cjs")._;
+    },
+    get _class_private_field_loose_base() {
+        return require("./_class_private_field_loose_base.cjs")._;
+    },
+    get _class_private_field_loose_key() {
+        return require("./_class_private_field_loose_key.cjs")._;
+    },
+    get _class_private_field_set() {
+        return require("./_class_private_field_set.cjs")._;
+    },
+    get _class_private_field_update() {
+        return require("./_class_private_field_update.cjs")._;
+    },
+    get _class_private_method_get() {
+        return require("./_class_private_method_get.cjs")._;
+    },
+    get _class_private_method_init() {
+        return require("./_class_private_method_init.cjs")._;
+    },
+    get _class_private_method_set() {
+        return require("./_class_private_method_set.cjs")._;
+    },
+    get _class_static_private_field_destructure() {
+        return require("./_class_static_private_field_destructure.cjs")._;
+    },
+    get _class_static_private_field_spec_get() {
+        return require("./_class_static_private_field_spec_get.cjs")._;
+    },
+    get _class_static_private_field_spec_set() {
+        return require("./_class_static_private_field_spec_set.cjs")._;
+    },
+    get _class_static_private_field_update() {
+        return require("./_class_static_private_field_update.cjs")._;
+    },
+    get _class_static_private_method_get() {
+        return require("./_class_static_private_method_get.cjs")._;
+    },
+    get _construct() {
+        return require("./_construct.cjs")._;
+    },
+    get _create_class() {
+        return require("./_create_class.cjs")._;
+    },
+    get _create_for_of_iterator_helper_loose() {
+        return require("./_create_for_of_iterator_helper_loose.cjs")._;
+    },
+    get _create_super() {
+        return require("./_create_super.cjs")._;
+    },
+    get _decorate() {
+        return require("./_decorate.cjs")._;
+    },
+    get _defaults() {
+        return require("./_defaults.cjs")._;
+    },
+    get _define_enumerable_properties() {
+        return require("./_define_enumerable_properties.cjs")._;
+    },
+    get _define_property() {
+        return require("./_define_property.cjs")._;
+    },
+    get _dispose() {
+        return require("./_dispose.cjs")._;
+    },
+    get _export_star() {
+        return require("./_export_star.cjs")._;
+    },
+    get _extends() {
+        return require("./_extends.cjs")._;
+    },
+    get _get() {
+        return require("./_get.cjs")._;
+    },
+    get _get_prototype_of() {
+        return require("./_get_prototype_of.cjs")._;
+    },
+    get _identity() {
+        return require("./_identity.cjs")._;
+    },
+    get _inherits() {
+        return require("./_inherits.cjs")._;
+    },
+    get _inherits_loose() {
+        return require("./_inherits_loose.cjs")._;
+    },
+    get _initializer_define_property() {
+        return require("./_initializer_define_property.cjs")._;
+    },
+    get _initializer_warning_helper() {
+        return require("./_initializer_warning_helper.cjs")._;
+    },
+    get _instanceof() {
+        return require("./_instanceof.cjs")._;
+    },
+    get _interop_require_default() {
+        return require("./_interop_require_default.cjs")._;
+    },
+    get _interop_require_wildcard() {
+        return require("./_interop_require_wildcard.cjs")._;
+    },
+    get _is_native_function() {
+        return require("./_is_native_function.cjs")._;
+    },
+    get _is_native_reflect_construct() {
+        return require("./_is_native_reflect_construct.cjs")._;
+    },
+    get _iterable_to_array() {
+        return require("./_iterable_to_array.cjs")._;
+    },
+    get _iterable_to_array_limit() {
+        return require("./_iterable_to_array_limit.cjs")._;
+    },
+    get _iterable_to_array_limit_loose() {
+        return require("./_iterable_to_array_limit_loose.cjs")._;
+    },
+    get _jsx() {
+        return require("./_jsx.cjs")._;
+    },
+    get _new_arrow_check() {
+        return require("./_new_arrow_check.cjs")._;
+    },
+    get _non_iterable_rest() {
+        return require("./_non_iterable_rest.cjs")._;
+    },
+    get _non_iterable_spread() {
+        return require("./_non_iterable_spread.cjs")._;
+    },
+    get _object_destructuring_empty() {
+        return require("./_object_destructuring_empty.cjs")._;
+    },
+    get _object_spread() {
+        return require("./_object_spread.cjs")._;
+    },
+    get _object_spread_props() {
+        return require("./_object_spread_props.cjs")._;
+    },
+    get _object_without_properties() {
+        return require("./_object_without_properties.cjs")._;
+    },
+    get _object_without_properties_loose() {
+        return require("./_object_without_properties_loose.cjs")._;
+    },
+    get _possible_constructor_return() {
+        return require("./_possible_constructor_return.cjs")._;
+    },
+    get _read_only_error() {
+        return require("./_read_only_error.cjs")._;
+    },
+    get _set() {
+        return require("./_set.cjs")._;
+    },
+    get _set_prototype_of() {
+        return require("./_set_prototype_of.cjs")._;
+    },
+    get _skip_first_generator_next() {
+        return require("./_skip_first_generator_next.cjs")._;
+    },
+    get _sliced_to_array() {
+        return require("./_sliced_to_array.cjs")._;
+    },
+    get _sliced_to_array_loose() {
+        return require("./_sliced_to_array_loose.cjs")._;
+    },
+    get _super_prop_base() {
+        return require("./_super_prop_base.cjs")._;
+    },
+    get _tagged_template_literal() {
+        return require("./_tagged_template_literal.cjs")._;
+    },
+    get _tagged_template_literal_loose() {
+        return require("./_tagged_template_literal_loose.cjs")._;
+    },
+    get _throw() {
+        return require("./_throw.cjs")._;
+    },
+    get _to_array() {
+        return require("./_to_array.cjs")._;
+    },
+    get _to_consumable_array() {
+        return require("./_to_consumable_array.cjs")._;
+    },
+    get _to_primitive() {
+        return require("./_to_primitive.cjs")._;
+    },
+    get _to_property_key() {
+        return require("./_to_property_key.cjs")._;
+    },
+    get _ts_add_disposable_resource() {
+        return require("./_ts_add_disposable_resource.cjs")._;
+    },
+    get _ts_decorate() {
+        return require("./_ts_decorate.cjs")._;
+    },
+    get _ts_dispose_resources() {
+        return require("./_ts_dispose_resources.cjs")._;
+    },
+    get _ts_generator() {
+        return require("./_ts_generator.cjs")._;
+    },
+    get _ts_metadata() {
+        return require("./_ts_metadata.cjs")._;
+    },
+    get _ts_param() {
+        return require("./_ts_param.cjs")._;
+    },
+    get _ts_values() {
+        return require("./_ts_values.cjs")._;
+    },
+    get _type_of() {
+        return require("./_type_of.cjs")._;
+    },
+    get _unsupported_iterable_to_array() {
+        return require("./_unsupported_iterable_to_array.cjs")._;
+    },
+    get _update() {
+        return require("./_update.cjs")._;
+    },
+    get _using() {
+        return require("./_using.cjs")._;
+    },
+    get _using_ctx() {
+        return require("./_using_ctx.cjs")._;
+    },
+    get _wrap_async_generator() {
+        return require("./_wrap_async_generator.cjs")._;
+    },
+    get _wrap_native_super() {
+        return require("./_wrap_native_super.cjs")._;
+    },
+    get _write_only_error() {
+        return require("./_write_only_error.cjs")._;
+    }
+};
diff --git a/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js b/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..671db1fb9df3808f32f44503c358c08a304eecfc
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_apply_decorated_descriptor.js
@@ -0,0 +1,33 @@
+function _apply_decorated_descriptor(target, property, decorators, descriptor, context) {
+    var desc = {};
+
+    Object["ke" + "ys"](descriptor).forEach(function(key) {
+        desc[key] = descriptor[key];
+    });
+    desc.enumerable = !!desc.enumerable;
+    desc.configurable = !!desc.configurable;
+
+    if ("value" in desc || desc.initializer) desc.writable = true;
+    desc = decorators.slice().reverse().reduce(function(desc, decorator) {
+        return decorator ? decorator(target, property, desc) || desc : desc;
+    }, desc);
+
+    var hasAccessor = Object.prototype.hasOwnProperty.call(desc, "get") || Object.prototype.hasOwnProperty.call(desc, "set");
+
+    if (context && desc.initializer !== void 0 && !hasAccessor) {
+        desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
+        desc.initializer = undefined;
+    }
+    if (hasAccessor) {
+        delete desc.writable;
+        delete desc.initializer;
+        delete desc.value;
+    }
+    if (desc.initializer === void 0) {
+        Object["define" + "Property"](target, property, desc);
+        desc = null;
+    }
+
+    return desc;
+}
+export { _apply_decorated_descriptor as _ };
diff --git a/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js b/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd6d00132336bde26115d8f769610c470701cf0d
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_apply_decs_2203_r.js
@@ -0,0 +1,548 @@
+/* @minVersion 7.20.0 */
+
+/**
+  Enums are used in this file, but not assigned to vars to avoid non-hoistable values
+
+  CONSTRUCTOR = 0;
+  PUBLIC = 1;
+  PRIVATE = 2;
+
+  FIELD = 0;
+  ACCESSOR = 1;
+  METHOD = 2;
+  GETTER = 3;
+  SETTER = 4;
+
+  STATIC = 5;
+
+  CLASS = 10; // only used in assertValidReturnValue
+*/
+
+function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
+    function createAddInitializerMethod(initializers, decoratorFinishedRef) {
+        return function addInitializer(initializer) {
+            assertNotFinished(decoratorFinishedRef, "addInitializer");
+            assertCallable(initializer, "An initializer");
+            initializers.push(initializer);
+        };
+    }
+
+    function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
+        var kindStr;
+
+        switch (kind) {
+            case 1 /* ACCESSOR */:
+                kindStr = "accessor";
+                break;
+            case 2 /* METHOD */:
+                kindStr = "method";
+                break;
+            case 3 /* GETTER */:
+                kindStr = "getter";
+                break;
+            case 4 /* SETTER */:
+                kindStr = "setter";
+                break;
+            default:
+                kindStr = "field";
+        }
+
+        var ctx = { kind: kindStr, name: isPrivate ? "#" + name : name, static: isStatic, private: isPrivate, metadata: metadata };
+
+        var decoratorFinishedRef = { v: false };
+
+        ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
+
+        var get, set;
+        if (kind === 0 /* FIELD */) {
+            if (isPrivate) {
+                get = desc.get;
+                set = desc.set;
+            } else {
+                get = function() {
+                    return this[name];
+                };
+                set = function(v) {
+                    this[name] = v;
+                };
+            }
+        } else if (kind === 2 /* METHOD */) {
+            get = function() {
+                return desc.value;
+            };
+        } else {
+            // replace with values that will go through the final getter and setter
+            if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {
+                get = function() {
+                    return desc.get.call(this);
+                };
+            }
+
+            if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {
+                set = function(v) {
+                    desc.set.call(this, v);
+                };
+            }
+        }
+        ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set };
+
+        try {
+            return dec(value, ctx);
+        } finally {
+            decoratorFinishedRef.v = true;
+        }
+    }
+
+    function assertNotFinished(decoratorFinishedRef, fnName) {
+        if (decoratorFinishedRef.v) {
+            throw new Error("attempted to call " + fnName + " after decoration was finished");
+        }
+    }
+
+    function assertCallable(fn, hint) {
+        if (typeof fn !== "function") {
+            throw new TypeError(hint + " must be a function");
+        }
+    }
+
+    function assertValidReturnValue(kind, value) {
+        var type = typeof value;
+
+        if (kind === 1 /* ACCESSOR */) {
+            if (type !== "object" || value === null) {
+                throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
+            }
+            if (value.get !== undefined) {
+                assertCallable(value.get, "accessor.get");
+            }
+            if (value.set !== undefined) {
+                assertCallable(value.set, "accessor.set");
+            }
+            if (value.init !== undefined) {
+                assertCallable(value.init, "accessor.init");
+            }
+        } else if (type !== "function") {
+            var hint;
+            if (kind === 0 /* FIELD */) {
+                hint = "field";
+            } else if (kind === 10 /* CLASS */) {
+                hint = "class";
+            } else {
+                hint = "method";
+            }
+            throw new TypeError(hint + " decorators must return a function or void 0");
+        }
+    }
+
+    function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
+        var decs = decInfo[0];
+
+        var desc, init, value;
+
+        if (isPrivate) {
+            if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+                desc = { get: decInfo[3], set: decInfo[4] };
+            } else if (kind === 3 /* GETTER */) {
+                desc = { get: decInfo[3] };
+            } else if (kind === 4 /* SETTER */) {
+                desc = { set: decInfo[3] };
+            } else {
+                desc = { value: decInfo[3] };
+            }
+        } else if (kind !== 0 /* FIELD */) {
+            desc = Object.getOwnPropertyDescriptor(base, name);
+        }
+
+        if (kind === 1 /* ACCESSOR */) {
+            value = { get: desc.get, set: desc.set };
+        } else if (kind === 2 /* METHOD */) {
+            value = desc.value;
+        } else if (kind === 3 /* GETTER */) {
+            value = desc.get;
+        } else if (kind === 4 /* SETTER */) {
+            value = desc.set;
+        }
+
+        var newValue, get, set;
+
+        if (typeof decs === "function") {
+            newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
+
+            if (newValue !== void 0) {
+                assertValidReturnValue(kind, newValue);
+
+                if (kind === 0 /* FIELD */) {
+                    init = newValue;
+                } else if (kind === 1 /* ACCESSOR */) {
+                    init = newValue.init;
+                    get = newValue.get || value.get;
+                    set = newValue.set || value.set;
+
+                    value = { get: get, set: set };
+                } else {
+                    value = newValue;
+                }
+            }
+        } else {
+            for (var i = decs.length - 1; i >= 0; i--) {
+                var dec = decs[i];
+
+                newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
+
+                if (newValue !== void 0) {
+                    assertValidReturnValue(kind, newValue);
+                    var newInit;
+
+                    if (kind === 0 /* FIELD */) {
+                        newInit = newValue;
+                    } else if (kind === 1 /* ACCESSOR */) {
+                        newInit = newValue.init;
+                        get = newValue.get || value.get;
+                        set = newValue.set || value.set;
+
+                        value = { get: get, set: set };
+                    } else {
+                        value = newValue;
+                    }
+
+                    if (newInit !== void 0) {
+                        if (init === void 0) {
+                            init = newInit;
+                        } else if (typeof init === "function") {
+                            init = [init, newInit];
+                        } else {
+                            init.push(newInit);
+                        }
+                    }
+                }
+            }
+        }
+
+        if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+            if (init === void 0) {
+                // If the initializer was void 0, sub in a dummy initializer
+                init = function(instance, init) {
+                    return init;
+                };
+            } else if (typeof init !== "function") {
+                var ownInitializers = init;
+
+                init = function(instance, init) {
+                    var value = init;
+
+                    for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value);
+
+                    return value;
+                };
+            } else {
+                var originalInitializer = init;
+
+                init = function(instance, init) {
+                    return originalInitializer.call(instance, init);
+                };
+            }
+
+            ret.push(init);
+        }
+
+        if (kind !== 0 /* FIELD */) {
+            if (kind === 1 /* ACCESSOR */) {
+                desc.get = value.get;
+                desc.set = value.set;
+            } else if (kind === 2 /* METHOD */) {
+                desc.value = value;
+            } else if (kind === 3 /* GETTER */) {
+                desc.get = value;
+            } else if (kind === 4 /* SETTER */) {
+                desc.set = value;
+            }
+
+            if (isPrivate) {
+                if (kind === 1 /* ACCESSOR */) {
+                    ret.push(function(instance, args) {
+                        return value.get.call(instance, args);
+                    });
+                    ret.push(function(instance, args) {
+                        return value.set.call(instance, args);
+                    });
+                } else if (kind === 2 /* METHOD */) {
+                    ret.push(value);
+                } else {
+                    ret.push(function(instance, args) {
+                        return value.call(instance, args);
+                    });
+                }
+            } else {
+                Object.defineProperty(base, name, desc);
+            }
+        }
+    }
+
+    function applyMemberDecs(Class, decInfos, metadata) {
+        var ret = [];
+        var protoInitializers;
+        var staticInitializers;
+
+        var existingProtoNonFields = new Map();
+        var existingStaticNonFields = new Map();
+
+        for (var i = 0; i < decInfos.length; i++) {
+            var decInfo = decInfos[i];
+
+            // skip computed property names
+            if (!Array.isArray(decInfo)) continue;
+
+            var kind = decInfo[1];
+            var name = decInfo[2];
+            var isPrivate = decInfo.length > 3;
+
+            var isStatic = kind >= 5; /* STATIC */
+            var base;
+            var initializers;
+
+            if (isStatic) {
+                base = Class;
+                kind = kind - 5 /* STATIC */;
+                // initialize staticInitializers when we see a non-field static member
+                staticInitializers = staticInitializers || [];
+                initializers = staticInitializers;
+            } else {
+                base = Class.prototype;
+                // initialize protoInitializers when we see a non-field member
+                protoInitializers = protoInitializers || [];
+                initializers = protoInitializers;
+            }
+
+            if (kind !== 0 /* FIELD */ && !isPrivate) {
+                var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
+
+                var existingKind = existingNonFields.get(name) || 0;
+
+                if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) {
+                    throw new Error(
+                        "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "
+                            + name
+                    );
+                } else if (!existingKind && kind > 2 /* METHOD */) {
+                    existingNonFields.set(name, kind);
+                } else {
+                    existingNonFields.set(name, true);
+                }
+            }
+
+            applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
+        }
+
+        pushInitializers(ret, protoInitializers);
+        pushInitializers(ret, staticInitializers);
+        return ret;
+    }
+
+    function pushInitializers(ret, initializers) {
+        if (initializers) {
+            ret.push(function(instance) {
+                for (var i = 0; i < initializers.length; i++) initializers[i].call(instance);
+                return instance;
+            });
+        }
+    }
+
+    function applyClassDecs(targetClass, classDecs, metadata) {
+        if (classDecs.length > 0) {
+            var initializers = [];
+            var newClass = targetClass;
+            var name = targetClass.name;
+
+            for (var i = classDecs.length - 1; i >= 0; i--) {
+                var decoratorFinishedRef = { v: false };
+
+                try {
+                    var nextNewClass = classDecs[i](newClass, { kind: "class", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata });
+                } finally {
+                    decoratorFinishedRef.v = true;
+                }
+
+                if (nextNewClass !== undefined) {
+                    assertValidReturnValue(10, /* CLASS */ nextNewClass);
+                    newClass = nextNewClass;
+                }
+            }
+
+            return [defineMetadata(newClass, metadata), function() {
+                for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass);
+            }];
+        }
+        // The transformer will not emit assignment when there are no class decorators,
+        // so we don't have to return an empty array here.
+    }
+
+    function defineMetadata(Class, metadata) {
+        return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), { configurable: true, enumerable: true, value: metadata });
+    }
+
+    /**
+    Basic usage:
+
+    applyDecs(
+      Class,
+      [
+        // member decorators
+        [
+          dec,                // dec or array of decs
+          0,                  // kind of value being decorated
+          'prop',             // name of public prop on class containing the value being decorated,
+          '#p',               // the name of the private property (if is private, void 0 otherwise),
+        ]
+      ],
+      [
+        // class decorators
+        dec1, dec2
+      ]
+    )
+    ```
+
+    Fully transpiled example:
+
+    ```js
+    @dec
+    class Class {
+      @dec
+      a = 123;
+
+      @dec
+      #a = 123;
+
+      @dec
+      @dec2
+      accessor b = 123;
+
+      @dec
+      accessor #b = 123;
+
+      @dec
+      c() { console.log('c'); }
+
+      @dec
+      #c() { console.log('privC'); }
+
+      @dec
+      get d() { console.log('d'); }
+
+      @dec
+      get #d() { console.log('privD'); }
+
+      @dec
+      set e(v) { console.log('e'); }
+
+      @dec
+      set #e(v) { console.log('privE'); }
+    }
+
+
+    // becomes
+    let initializeInstance;
+    let initializeClass;
+
+    let initA;
+    let initPrivA;
+
+    let initB;
+    let initPrivB, getPrivB, setPrivB;
+
+    let privC;
+    let privD;
+    let privE;
+
+    let Class;
+    class _Class {
+      static {
+        let ret = applyDecs(
+          this,
+          [
+            [dec, 0, 'a'],
+            [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v],
+            [[dec, dec2], 1, 'b'],
+            [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v],
+            [dec, 2, 'c'],
+            [dec, 2, 'c', () => console.log('privC')],
+            [dec, 3, 'd'],
+            [dec, 3, 'd', () => console.log('privD')],
+            [dec, 4, 'e'],
+            [dec, 4, 'e', () => console.log('privE')],
+          ],
+          [
+            dec
+          ]
+        )
+
+        initA = ret[0];
+
+        initPrivA = ret[1];
+
+        initB = ret[2];
+
+        initPrivB = ret[3];
+        getPrivB = ret[4];
+        setPrivB = ret[5];
+
+        privC = ret[6];
+
+        privD = ret[7];
+
+        privE = ret[8];
+
+        initializeInstance = ret[9];
+
+        Class = ret[10]
+
+        initializeClass = ret[11];
+      }
+
+      a = (initializeInstance(this), initA(this, 123));
+
+      #a = initPrivA(this, 123);
+
+      #bData = initB(this, 123);
+      get b() { return this.#bData }
+      set b(v) { this.#bData = v }
+
+      #privBData = initPrivB(this, 123);
+      get #b() { return getPrivB(this); }
+      set #b(v) { setPrivB(this, v); }
+
+      c() { console.log('c'); }
+
+      #c(...args) { return privC(this, ...args) }
+
+      get d() { console.log('d'); }
+
+      get #d() { return privD(this); }
+
+      set e(v) { console.log('e'); }
+
+      set #e(v) { privE(this, v); }
+    }
+
+    initializeClass(Class);
+   */
+
+    _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) {
+        if (parentClass !== void 0) {
+            var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
+        }
+        var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
+        var e = applyMemberDecs(targetClass, memberDecs, metadata);
+        if (!classDecs.length) defineMetadata(targetClass, metadata);
+        return {
+            e: e,
+            // Lazily apply class decorations so that member init locals can be properly bound.
+            get c() {
+                return applyClassDecs(targetClass, classDecs, metadata);
+            }
+        };
+    };
+
+    return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass);
+}
+
+export { _apply_decs_2203_r as _ };
diff --git a/node_modules/@swc/helpers/esm/_array_like_to_array.js b/node_modules/@swc/helpers/esm/_array_like_to_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb80534d6f49d7f019cf76feb156c14f6079a643
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_array_like_to_array.js
@@ -0,0 +1,8 @@
+function _array_like_to_array(arr, len) {
+    if (len == null || len > arr.length) len = arr.length;
+
+    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+    return arr2;
+}
+export { _array_like_to_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_array_with_holes.js b/node_modules/@swc/helpers/esm/_array_with_holes.js
new file mode 100644
index 0000000000000000000000000000000000000000..2532c929d0f531129c8597f08933cf00faad8ed7
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_array_with_holes.js
@@ -0,0 +1,4 @@
+function _array_with_holes(arr) {
+    if (Array.isArray(arr)) return arr;
+}
+export { _array_with_holes as _ };
diff --git a/node_modules/@swc/helpers/esm/_array_without_holes.js b/node_modules/@swc/helpers/esm/_array_without_holes.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbdbc3222af81004fc0340df98436b9c2e360b76
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_array_without_holes.js
@@ -0,0 +1,6 @@
+import { _ as _array_like_to_array } from "./_array_like_to_array.js";
+
+function _array_without_holes(arr) {
+    if (Array.isArray(arr)) return _array_like_to_array(arr);
+}
+export { _array_without_holes as _ };
diff --git a/node_modules/@swc/helpers/esm/_assert_this_initialized.js b/node_modules/@swc/helpers/esm/_assert_this_initialized.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e2830a3ff96ffd43fc14ca94de2f688ddbe468a
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_assert_this_initialized.js
@@ -0,0 +1,6 @@
+function _assert_this_initialized(self) {
+    if (self === void 0) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+
+    return self;
+}
+export { _assert_this_initialized as _ };
diff --git a/node_modules/@swc/helpers/esm/_async_generator.js b/node_modules/@swc/helpers/esm/_async_generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..76148e32ac909d333ce97078a3a3034e8e5f36b5
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_async_generator.js
@@ -0,0 +1,76 @@
+import { _ as _await_value } from "./_await_value.js";
+
+function _async_generator(gen) {
+    var front, back;
+
+    function send(key, arg) {
+        return new Promise(function(resolve, reject) {
+            var request = { key: key, arg: arg, resolve: resolve, reject: reject, next: null };
+            if (back) back = back.next = request;
+            else {
+                front = back = request;
+                resume(key, arg);
+            }
+        });
+    }
+
+    function resume(key, arg) {
+        try {
+            var result = gen[key](arg);
+            var value = result.value;
+            var wrappedAwait = value instanceof _await_value;
+            Promise.resolve(wrappedAwait ? value.wrapped : value).then(function(arg) {
+                if (wrappedAwait) {
+                    resume("next", arg);
+
+                    return;
+                }
+                settle(result.done ? "return" : "normal", arg);
+            }, function(err) {
+                resume("throw", err);
+            });
+        } catch (err) {
+            settle("throw", err);
+        }
+    }
+
+    function settle(type, value) {
+        switch (type) {
+            case "return":
+                front.resolve({ value: value, done: true });
+                break;
+            case "throw":
+                front.reject(value);
+                break;
+            default:
+                front.resolve({ value: value, done: false });
+                break;
+        }
+        front = front.next;
+        if (front) resume(front.key, front.arg);
+        else back = null;
+    }
+
+    this._invoke = send;
+
+    if (typeof gen.return !== "function") this.return = undefined;
+}
+
+if (typeof Symbol === "function" && Symbol.asyncIterator) {
+    _async_generator.prototype[Symbol.asyncIterator] = function() {
+        return this;
+    };
+}
+
+_async_generator.prototype.next = function(arg) {
+    return this._invoke("next", arg);
+};
+
+_async_generator.prototype.throw = function(arg) {
+    return this._invoke("throw", arg);
+};
+
+_async_generator.prototype.return = function(arg) {
+    return this._invoke("return", arg);
+};
+export { _async_generator as _ };
diff --git a/node_modules/@swc/helpers/esm/_async_generator_delegate.js b/node_modules/@swc/helpers/esm/_async_generator_delegate.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb14b23c26d9fcf6d3534b5c82e4b1f463acf825
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_async_generator_delegate.js
@@ -0,0 +1,47 @@
+function _async_generator_delegate(inner, awaitWrap) {
+    var iter = {}, waiting = false;
+
+    function pump(key, value) {
+        waiting = true;
+        value = new Promise(function(resolve) {
+            resolve(inner[key](value));
+        });
+
+        return { done: false, value: awaitWrap(value) };
+    }
+
+    if (typeof Symbol === "function" && Symbol.iterator) {
+        iter[Symbol.iterator] = function() {
+            return this;
+        };
+    }
+
+    iter.next = function(value) {
+        if (waiting) {
+            waiting = false;
+
+            return value;
+        }
+
+        return pump("next", value);
+    };
+
+    if (typeof inner.throw === "function") {
+        iter.throw = function(value) {
+            if (waiting) {
+                waiting = false;
+                throw value;
+            }
+
+            return pump("throw", value);
+        };
+    }
+    if (typeof inner.return === "function") {
+        iter.return = function(value) {
+            return pump("return", value);
+        };
+    }
+
+    return iter;
+}
+export { _async_generator_delegate as _ };
diff --git a/node_modules/@swc/helpers/esm/_async_iterator.js b/node_modules/@swc/helpers/esm/_async_iterator.js
new file mode 100644
index 0000000000000000000000000000000000000000..b7ffe4cc732a210d45532432bacd1ea059747e38
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_async_iterator.js
@@ -0,0 +1,44 @@
+function _async_iterator(iterable) {
+    var method, async, sync, retry = 2;
+    for ("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;) {
+        if (async && null != (method = iterable[async])) return method.call(iterable);
+        if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable));
+        async = "@@asyncIterator", sync = "@@iterator";
+    }
+    throw new TypeError("Object is not async iterable");
+}
+function AsyncFromSyncIterator(s) {
+    function AsyncFromSyncIteratorContinuation(r) {
+        if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object."));
+
+        var done = r.done;
+
+        return Promise.resolve(r.value).then(function(value) {
+            return { value: value, done: done };
+        });
+    }
+
+    return AsyncFromSyncIterator = function(s) {
+        this.s = s, this.n = s.next;
+    },
+        AsyncFromSyncIterator.prototype = {
+            s: null,
+            n: null,
+
+            next: function() {
+                return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments));
+            },
+            return: function(value) {
+                var ret = this.s.return;
+
+                return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments));
+            },
+            throw: function(value) {
+                var thr = this.s.return;
+
+                return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments));
+            }
+        },
+        new AsyncFromSyncIterator(s);
+}
+export { _async_iterator as _ };
diff --git a/node_modules/@swc/helpers/esm/_async_to_generator.js b/node_modules/@swc/helpers/esm/_async_to_generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..2fcf6ee883d12b1de673cc0b820939b50ae1b63f
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_async_to_generator.js
@@ -0,0 +1,31 @@
+function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
+    try {
+        var info = gen[key](arg);
+        var value = info.value;
+    } catch (error) {
+        reject(error);
+        return;
+    }
+    if (info.done) resolve(value);
+    else Promise.resolve(value).then(_next, _throw);
+}
+function _async_to_generator(fn) {
+    return function() {
+        var self = this, args = arguments;
+
+        return new Promise(function(resolve, reject) {
+            var gen = fn.apply(self, args);
+
+            function _next(value) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
+            }
+
+            function _throw(err) {
+                asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
+            }
+
+            _next(undefined);
+        });
+    };
+}
+export { _async_to_generator as _ };
diff --git a/node_modules/@swc/helpers/esm/_await_async_generator.js b/node_modules/@swc/helpers/esm/_await_async_generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ae1df6c50d451205235dfc6e19eb28e69c032b7
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_await_async_generator.js
@@ -0,0 +1,6 @@
+import { _ as _await_value } from "./_await_value.js";
+
+function _await_async_generator(value) {
+    return new _await_value(value);
+}
+export { _await_async_generator as _ };
diff --git a/node_modules/@swc/helpers/esm/_await_value.js b/node_modules/@swc/helpers/esm/_await_value.js
new file mode 100644
index 0000000000000000000000000000000000000000..33a09128522c1a6e3958375eb204fa2d509cb5b0
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_await_value.js
@@ -0,0 +1,4 @@
+function _await_value(value) {
+    this.wrapped = value;
+}
+export { _await_value as _ };
diff --git a/node_modules/@swc/helpers/esm/_call_super.js b/node_modules/@swc/helpers/esm/_call_super.js
new file mode 100644
index 0000000000000000000000000000000000000000..f569d6270c36acfc3c708752dfc2a43dd042257c
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_call_super.js
@@ -0,0 +1,17 @@
+import { _ as _get_prototype_of } from "./_get_prototype_of.js";
+import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js";
+import { _ as _possible_constructor_return } from "./_possible_constructor_return.js";
+
+function _call_super(_this, derived, args) {
+    // Super
+    derived = _get_prototype_of(derived);
+    return _possible_constructor_return(
+        _this,
+        _is_native_reflect_construct()
+            // NOTE: This doesn't work if this.__proto__.constructor has been modified.
+            ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor)
+            : derived.apply(_this, args)
+    );
+}
+
+export { _call_super as _ };
diff --git a/node_modules/@swc/helpers/esm/_check_private_redeclaration.js b/node_modules/@swc/helpers/esm/_check_private_redeclaration.js
new file mode 100644
index 0000000000000000000000000000000000000000..21e96da1a44c80b3a68c708b89cfb54f6e70122f
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_check_private_redeclaration.js
@@ -0,0 +1,6 @@
+function _check_private_redeclaration(obj, privateCollection) {
+    if (privateCollection.has(obj)) {
+        throw new TypeError("Cannot initialize the same private elements twice on an object");
+    }
+}
+export { _check_private_redeclaration as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js b/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js
new file mode 100644
index 0000000000000000000000000000000000000000..9bf79ee8b0d5dd7b54930c1f3ac55b81fa337aaa
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_apply_descriptor_destructure.js
@@ -0,0 +1,23 @@
+function _class_apply_descriptor_destructure(receiver, descriptor) {
+    if (descriptor.set) {
+        if (!("__destrObj" in descriptor)) {
+            descriptor.__destrObj = {
+                set value(v) {
+                    descriptor.set.call(receiver, v);
+                }
+            };
+        }
+
+        return descriptor.__destrObj;
+    } else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+
+        return descriptor;
+    }
+}
+export { _class_apply_descriptor_destructure as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js b/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..15c6f2389719bcfc77bb03e6ce48e7839a4dee02
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.js
@@ -0,0 +1,6 @@
+function _class_apply_descriptor_get(receiver, descriptor) {
+    if (descriptor.get) return descriptor.get.call(receiver);
+
+    return descriptor.value;
+}
+export { _class_apply_descriptor_get as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js b/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js
new file mode 100644
index 0000000000000000000000000000000000000000..75091e1053bb95059ef1f3d92d58212f36b2fdd2
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.js
@@ -0,0 +1,13 @@
+function _class_apply_descriptor_set(receiver, descriptor, value) {
+    if (descriptor.set) descriptor.set.call(receiver, value);
+    else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+        descriptor.value = value;
+    }
+}
+export { _class_apply_descriptor_set as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js b/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js
new file mode 100644
index 0000000000000000000000000000000000000000..adf62fb73c159d106abe7e855d1be0a2cc345ae2
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_apply_descriptor_update.js
@@ -0,0 +1,28 @@
+function _class_apply_descriptor_update(receiver, descriptor) {
+    if (descriptor.set) {
+        if (!descriptor.get) throw new TypeError("attempted to read set only private field");
+
+        if (!("__destrWrapper" in descriptor)) {
+            descriptor.__destrWrapper = {
+                set value(v) {
+                    descriptor.set.call(receiver, v);
+                },
+                get value() {
+                    return descriptor.get.call(receiver);
+                }
+            };
+        }
+
+        return descriptor.__destrWrapper;
+    } else {
+        if (!descriptor.writable) {
+            // This should only throw in strict mode, but class bodies are
+            // always strict and private fields can only be used inside
+            // class bodies.
+            throw new TypeError("attempted to set read only private field");
+        }
+
+        return descriptor;
+    }
+}
+export { _class_apply_descriptor_update as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_call_check.js b/node_modules/@swc/helpers/esm/_class_call_check.js
new file mode 100644
index 0000000000000000000000000000000000000000..f0caf9e3178dde12cddc511c13537fe05afe682c
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_call_check.js
@@ -0,0 +1,4 @@
+function _class_call_check(instance, Constructor) {
+    if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function");
+}
+export { _class_call_check as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_check_private_static_access.js b/node_modules/@swc/helpers/esm/_class_check_private_static_access.js
new file mode 100644
index 0000000000000000000000000000000000000000..380f1d9bcba22a0b884f110a649cd30ec5068355
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_check_private_static_access.js
@@ -0,0 +1,4 @@
+function _class_check_private_static_access(receiver, classConstructor) {
+    if (receiver !== classConstructor) throw new TypeError("Private static access of wrong provenance");
+}
+export { _class_check_private_static_access as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js b/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6a0a7fd6ae7894ddf48adfb1a332d87c96e3e7f
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_check_private_static_field_descriptor.js
@@ -0,0 +1,6 @@
+function _class_check_private_static_field_descriptor(descriptor, action) {
+    if (descriptor === undefined) {
+        throw new TypeError("attempted to " + action + " private static field before its declaration");
+    }
+}
+export { _class_check_private_static_field_descriptor as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js b/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js
new file mode 100644
index 0000000000000000000000000000000000000000..44ca9e7fbc38b787afb195a10f92092a82b5efef
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.js
@@ -0,0 +1,6 @@
+function _class_extract_field_descriptor(receiver, privateMap, action) {
+    if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
+
+    return privateMap.get(receiver);
+}
+export { _class_extract_field_descriptor as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_name_tdz_error.js b/node_modules/@swc/helpers/esm/_class_name_tdz_error.js
new file mode 100644
index 0000000000000000000000000000000000000000..56620e8d4c63b43633ec47e2c780e7582e6fcc25
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_name_tdz_error.js
@@ -0,0 +1,4 @@
+function _class_name_tdz_error(name) {
+    throw new Error("Class \"" + name + "\" cannot be referenced in computed property keys.");
+}
+export { _class_name_tdz_error as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_destructure.js b/node_modules/@swc/helpers/esm/_class_private_field_destructure.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c624330fee0a0c5eb73240498ae78bc019523e0
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_destructure.js
@@ -0,0 +1,8 @@
+import { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js";
+import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js";
+
+function _class_private_field_destructure(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
+    return _class_apply_descriptor_destructure(receiver, descriptor);
+}
+export { _class_private_field_destructure as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_get.js b/node_modules/@swc/helpers/esm/_class_private_field_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..078d320a5e9674865ae0e385200a989b3f297752
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_get.js
@@ -0,0 +1,8 @@
+import { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js";
+import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js";
+
+function _class_private_field_get(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
+    return _class_apply_descriptor_get(receiver, descriptor);
+}
+export { _class_private_field_get as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_init.js b/node_modules/@swc/helpers/esm/_class_private_field_init.js
new file mode 100644
index 0000000000000000000000000000000000000000..3daa81a52643636429ac74afdb25093a01ad2d54
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_init.js
@@ -0,0 +1,7 @@
+import { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js";
+
+function _class_private_field_init(obj, privateMap, value) {
+    _check_private_redeclaration(obj, privateMap);
+    privateMap.set(obj, value);
+}
+export { _class_private_field_init as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js b/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js
new file mode 100644
index 0000000000000000000000000000000000000000..92f4c0729615b45bd27a074830eccf8d9f03ebbd
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_loose_base.js
@@ -0,0 +1,8 @@
+function _class_private_field_loose_base(receiver, privateKey) {
+    if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
+        throw new TypeError("attempted to use private field on non-instance");
+    }
+
+    return receiver;
+}
+export { _class_private_field_loose_base as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js b/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js
new file mode 100644
index 0000000000000000000000000000000000000000..83e89e7d6e92587fd8d4bf89cc0c1bb67352b6da
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_loose_key.js
@@ -0,0 +1,6 @@
+var id = 0;
+
+function _class_private_field_loose_key(name) {
+    return "__private_" + id++ + "_" + name;
+}
+export { _class_private_field_loose_key as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_set.js b/node_modules/@swc/helpers/esm/_class_private_field_set.js
new file mode 100644
index 0000000000000000000000000000000000000000..7640b8ea6be6db74c9e0c17cb72084dfef20eeb1
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_set.js
@@ -0,0 +1,9 @@
+import { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js";
+import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js";
+
+function _class_private_field_set(receiver, privateMap, value) {
+    var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
+    _class_apply_descriptor_set(receiver, descriptor, value);
+    return value;
+}
+export { _class_private_field_set as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_field_update.js b/node_modules/@swc/helpers/esm/_class_private_field_update.js
new file mode 100644
index 0000000000000000000000000000000000000000..d758a17e42e3a1340569bf21cb594578c44f511c
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_field_update.js
@@ -0,0 +1,8 @@
+import { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js";
+import { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js";
+
+function _class_private_field_update(receiver, privateMap) {
+    var descriptor = _class_extract_field_descriptor(receiver, privateMap, "update");
+    return _class_apply_descriptor_update(receiver, descriptor);
+}
+export { _class_private_field_update as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_method_get.js b/node_modules/@swc/helpers/esm/_class_private_method_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9d6946fcb2ff4ab321eb95d057f8e4024994ba4
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_method_get.js
@@ -0,0 +1,6 @@
+function _class_private_method_get(receiver, privateSet, fn) {
+    if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
+
+    return fn;
+}
+export { _class_private_method_get as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_method_init.js b/node_modules/@swc/helpers/esm/_class_private_method_init.js
new file mode 100644
index 0000000000000000000000000000000000000000..f2f4eda710b9f4144d0f17a0e82a5bf3a81ef781
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_method_init.js
@@ -0,0 +1,7 @@
+import { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js";
+
+function _class_private_method_init(obj, privateSet) {
+    _check_private_redeclaration(obj, privateSet);
+    privateSet.add(obj);
+}
+export { _class_private_method_init as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_private_method_set.js b/node_modules/@swc/helpers/esm/_class_private_method_set.js
new file mode 100644
index 0000000000000000000000000000000000000000..98e3be1ca2b2c09f1326800f4fd601de8943607c
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_private_method_set.js
@@ -0,0 +1,4 @@
+function _class_private_method_set() {
+    throw new TypeError("attempted to reassign private method");
+}
+export { _class_private_method_set as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js b/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js
new file mode 100644
index 0000000000000000000000000000000000000000..1aea463503a55d7f47263ff213febb507f8d0cf8
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_static_private_field_destructure.js
@@ -0,0 +1,11 @@
+import { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js";
+import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js";
+
+function _class_static_private_field_destructure(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access(receiver, classConstructor);
+    _class_check_private_static_field_descriptor(descriptor, "set");
+
+    return _class_apply_descriptor_destructure(receiver, descriptor);
+}
+export { _class_static_private_field_destructure as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js b/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..128476cbabad2619fd9214acb1a473a24ce49e1a
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_static_private_field_spec_get.js
@@ -0,0 +1,11 @@
+import { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js";
+import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js";
+
+function _class_static_private_field_spec_get(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access(receiver, classConstructor);
+    _class_check_private_static_field_descriptor(descriptor, "get");
+
+    return _class_apply_descriptor_get(receiver, descriptor);
+}
+export { _class_static_private_field_spec_get as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js b/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js
new file mode 100644
index 0000000000000000000000000000000000000000..0137ff7f88dc4d07c7b4fe69b81cc68794e9beec
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_static_private_field_spec_set.js
@@ -0,0 +1,12 @@
+import { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js";
+import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js";
+
+function _class_static_private_field_spec_set(receiver, classConstructor, descriptor, value) {
+    _class_check_private_static_access(receiver, classConstructor);
+    _class_check_private_static_field_descriptor(descriptor, "set");
+    _class_apply_descriptor_set(receiver, descriptor, value);
+
+    return value;
+}
+export { _class_static_private_field_spec_set as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_static_private_field_update.js b/node_modules/@swc/helpers/esm/_class_static_private_field_update.js
new file mode 100644
index 0000000000000000000000000000000000000000..d53d66aed9f9a252d55c368884c552e3ca0fbe7d
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_static_private_field_update.js
@@ -0,0 +1,11 @@
+import { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js";
+import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+import { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js";
+
+function _class_static_private_field_update(receiver, classConstructor, descriptor) {
+    _class_check_private_static_access(receiver, classConstructor);
+    _class_check_private_static_field_descriptor(descriptor, "update");
+
+    return _class_apply_descriptor_update(receiver, descriptor);
+}
+export { _class_static_private_field_update as _ };
diff --git a/node_modules/@swc/helpers/esm/_class_static_private_method_get.js b/node_modules/@swc/helpers/esm/_class_static_private_method_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..d9309f4d9264e5fcad844d337131a2e861700744
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_class_static_private_method_get.js
@@ -0,0 +1,8 @@
+import { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+
+function _class_static_private_method_get(receiver, classConstructor, method) {
+    _class_check_private_static_access(receiver, classConstructor);
+
+    return method;
+}
+export { _class_static_private_method_get as _ };
diff --git a/node_modules/@swc/helpers/esm/_construct.js b/node_modules/@swc/helpers/esm/_construct.js
new file mode 100644
index 0000000000000000000000000000000000000000..affce786612fe47cebe9bca0e9ad2f9502fcb248
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_construct.js
@@ -0,0 +1,20 @@
+import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js";
+import { _ as _set_prototype_of } from "./_set_prototype_of.js";
+function _construct(Parent, args, Class) {
+    if (_is_native_reflect_construct()) _construct = Reflect.construct;
+    else {
+        _construct = function construct(Parent, args, Class) {
+            var a = [null];
+            a.push.apply(a, args);
+            var Constructor = Function.bind.apply(Parent, a);
+            var instance = new Constructor();
+
+            if (Class) _set_prototype_of(instance, Class.prototype);
+
+            return instance;
+        };
+    }
+
+    return _construct.apply(null, arguments);
+}
+export { _construct as _ };
diff --git a/node_modules/@swc/helpers/esm/_create_class.js b/node_modules/@swc/helpers/esm/_create_class.js
new file mode 100644
index 0000000000000000000000000000000000000000..f251d98bc64f6ccf67fe4e41876948f8209d1f21
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_create_class.js
@@ -0,0 +1,18 @@
+function _defineProperties(target, props) {
+    for (var i = 0; i < props.length; i++) {
+        var descriptor = props[i];
+        descriptor.enumerable = descriptor.enumerable || false;
+        descriptor.configurable = true;
+
+        if ("value" in descriptor) descriptor.writable = true;
+
+        Object.defineProperty(target, descriptor.key, descriptor);
+    }
+}
+function _create_class(Constructor, protoProps, staticProps) {
+    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+    if (staticProps) _defineProperties(Constructor, staticProps);
+
+    return Constructor;
+}
+export { _create_class as _ };
diff --git a/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js b/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..d848f09d1e8144ded2502de2bbdbbf56c8e54af1
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js
@@ -0,0 +1,22 @@
+import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+
+function _create_for_of_iterator_helper_loose(o, allowArrayLike) {
+    var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+
+    if (it) return (it = it.call(o)).next.bind(it);
+    // Fallback for engines without symbol support
+    if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === "number") {
+        if (it) o = it;
+
+        var i = 0;
+
+        return function() {
+            if (i >= o.length) return { done: true };
+
+            return { done: false, value: o[i++] };
+        };
+    }
+
+    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _create_for_of_iterator_helper_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_create_super.js b/node_modules/@swc/helpers/esm/_create_super.js
new file mode 100644
index 0000000000000000000000000000000000000000..09b3ec024b965a715b7ede1f1b29f05d2ae1e655
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_create_super.js
@@ -0,0 +1,21 @@
+import { _ as _get_prototype_of } from "./_get_prototype_of.js";
+import { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js";
+import { _ as _possible_constructor_return } from "./_possible_constructor_return.js";
+
+function _create_super(Derived) {
+    var hasNativeReflectConstruct = _is_native_reflect_construct();
+
+    return function _createSuperInternal() {
+        var Super = _get_prototype_of(Derived), result;
+
+        if (hasNativeReflectConstruct) {
+            var NewTarget = _get_prototype_of(this).constructor;
+            result = Reflect.construct(Super, arguments, NewTarget);
+        } else {
+            result = Super.apply(this, arguments);
+        }
+
+        return _possible_constructor_return(this, result);
+    };
+}
+export { _create_super as _ };
diff --git a/node_modules/@swc/helpers/esm/_decorate.js b/node_modules/@swc/helpers/esm/_decorate.js
new file mode 100644
index 0000000000000000000000000000000000000000..7131a6dc1a9c73d3470e1ebab981da88731b74a3
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_decorate.js
@@ -0,0 +1,268 @@
+import { _ as _to_array } from "./_to_array.js";
+import { _ as _to_property_key } from "./_to_property_key.js";
+import { _ as _type_of } from "./_type_of.js";
+
+function _decorate(decorators, factory, superClass) {
+    var r = factory(function initialize(O) {
+        _initializeInstanceElements(O, decorated.elements);
+    }, superClass);
+    var decorated = _decorateClass(_coalesceClassElements(r.d.map(_createElementDescriptor)), decorators);
+    _initializeClassElements(r.F, decorated.elements);
+
+    return _runClassFinishers(r.F, decorated.finishers);
+}
+
+function _createElementDescriptor(def) {
+    var key = _to_property_key(def.key);
+    var descriptor;
+
+    if (def.kind === "method") {
+        descriptor = { value: def.value, writable: true, configurable: true, enumerable: false };
+        Object.defineProperty(def.value, "name", { value: _type_of(key) === "symbol" ? "" : key, configurable: true });
+    } else if (def.kind === "get") descriptor = { get: def.value, configurable: true, enumerable: false };
+    else if (def.kind === "set") descriptor = { set: def.value, configurable: true, enumerable: false };
+    else if (def.kind === "field") descriptor = { configurable: true, writable: true, enumerable: true };
+
+    var element = { kind: def.kind === "field" ? "field" : "method", key: key, placement: def.static ? "static" : def.kind === "field" ? "own" : "prototype", descriptor: descriptor };
+
+    if (def.decorators) element.decorators = def.decorators;
+
+    if (def.kind === "field") element.initializer = def.value;
+
+    return element;
+}
+function _coalesceGetterSetter(element, other) {
+    if (element.descriptor.get !== undefined) other.descriptor.get = element.descriptor.get;
+    else other.descriptor.set = element.descriptor.set;
+}
+function _coalesceClassElements(elements) {
+    var newElements = [];
+    var isSameElement = function isSameElement(other) {
+        return other.kind === "method" && other.key === element.key && other.placement === element.placement;
+    };
+
+    for (var i = 0; i < elements.length; i++) {
+        var element = elements[i];
+        var other;
+
+        if (element.kind === "method" && (other = newElements.find(isSameElement))) {
+            if (_isDataDescriptor(element.descriptor) || _isDataDescriptor(other.descriptor)) {
+                if (_hasDecorators(element) || _hasDecorators(other)) {
+                    throw new ReferenceError("Duplicated methods (" + element.key + ") can't be decorated.");
+                }
+                other.descriptor = element.descriptor;
+            } else {
+                if (_hasDecorators(element)) {
+                    if (_hasDecorators(other)) {
+                        throw new ReferenceError("Decorators can't be placed on different accessors with for " + "the same property (" + element.key + ").");
+                    }
+                    other.decorators = element.decorators;
+                }
+                _coalesceGetterSetter(element, other);
+            }
+        } else {
+            newElements.push(element);
+        }
+    }
+
+    return newElements;
+}
+function _hasDecorators(element) {
+    return element.decorators && element.decorators.length;
+}
+function _isDataDescriptor(desc) {
+    return desc !== undefined && !(desc.value === undefined && desc.writable === undefined);
+}
+function _initializeClassElements(F, elements) {
+    var proto = F.prototype;
+    ["method", "field"].forEach(function(kind) {
+        elements.forEach(function(element) {
+            var placement = element.placement;
+            if (element.kind === kind && (placement === "static" || placement === "prototype")) {
+                var receiver = placement === "static" ? F : proto;
+                _defineClassElement(receiver, element);
+            }
+        });
+    });
+}
+function _initializeInstanceElements(O, elements) {
+    ["method", "field"].forEach(function(kind) {
+        elements.forEach(function(element) {
+            if (element.kind === kind && element.placement === "own") _defineClassElement(O, element);
+        });
+    });
+}
+function _defineClassElement(receiver, element) {
+    var descriptor = element.descriptor;
+    if (element.kind === "field") {
+        var initializer = element.initializer;
+        descriptor = { enumerable: descriptor.enumerable, writable: descriptor.writable, configurable: descriptor.configurable, value: initializer === void 0 ? void 0 : initializer.call(receiver) };
+    }
+    Object.defineProperty(receiver, element.key, descriptor);
+}
+function _decorateClass(elements, decorators) {
+    var newElements = [];
+    var finishers = [];
+    var placements = { static: [], prototype: [], own: [] };
+    elements.forEach(function(element) {
+        _addElementPlacement(element, placements);
+    });
+    elements.forEach(function(element) {
+        if (!_hasDecorators(element)) return newElements.push(element);
+        var elementFinishersExtras = _decorateElement(element, placements);
+        newElements.push(elementFinishersExtras.element);
+        newElements.push.apply(newElements, elementFinishersExtras.extras);
+        finishers.push.apply(finishers, elementFinishersExtras.finishers);
+    });
+    if (!decorators) return { elements: newElements, finishers: finishers };
+    var result = _decorateConstructor(newElements, decorators);
+    finishers.push.apply(finishers, result.finishers);
+    result.finishers = finishers;
+
+    return result;
+}
+function _addElementPlacement(element, placements, silent) {
+    var keys = placements[element.placement];
+    if (!silent && keys.indexOf(element.key) !== -1) throw new TypeError("Duplicated element (" + element.key + ")");
+    keys.push(element.key);
+}
+function _decorateElement(element, placements) {
+    var extras = [];
+    var finishers = [];
+    for (var decorators = element.decorators, i = decorators.length - 1; i >= 0; i--) {
+        var keys = placements[element.placement];
+        keys.splice(keys.indexOf(element.key), 1);
+        var elementObject = _fromElementDescriptor(element);
+        var elementFinisherExtras = _toElementFinisherExtras((0, decorators[i])(elementObject) || elementObject);
+        element = elementFinisherExtras.element;
+        _addElementPlacement(element, placements);
+        if (elementFinisherExtras.finisher) finishers.push(elementFinisherExtras.finisher);
+        var newExtras = elementFinisherExtras.extras;
+        if (newExtras) {
+            for (var j = 0; j < newExtras.length; j++) _addElementPlacement(newExtras[j], placements);
+            extras.push.apply(extras, newExtras);
+        }
+    }
+
+    return { element: element, finishers: finishers, extras: extras };
+}
+function _decorateConstructor(elements, decorators) {
+    var finishers = [];
+    for (var i = decorators.length - 1; i >= 0; i--) {
+        var obj = _fromClassDescriptor(elements);
+        var elementsAndFinisher = _toClassDescriptor((0, decorators[i])(obj) || obj);
+        if (elementsAndFinisher.finisher !== undefined) finishers.push(elementsAndFinisher.finisher);
+        if (elementsAndFinisher.elements !== undefined) {
+            elements = elementsAndFinisher.elements;
+            for (var j = 0; j < elements.length - 1; j++) {
+                for (var k = j + 1; k < elements.length; k++) {
+                    if (elements[j].key === elements[k].key && elements[j].placement === elements[k].placement) {
+                        throw new TypeError("Duplicated element (" + elements[j].key + ")");
+                    }
+                }
+            }
+        }
+    }
+
+    return { elements: elements, finishers: finishers };
+}
+function _fromElementDescriptor(element) {
+    var obj = { kind: element.kind, key: element.key, placement: element.placement, descriptor: element.descriptor };
+    var desc = { value: "Descriptor", configurable: true };
+    Object.defineProperty(obj, Symbol.toStringTag, desc);
+    if (element.kind === "field") obj.initializer = element.initializer;
+
+    return obj;
+}
+function _toElementDescriptors(elementObjects) {
+    if (elementObjects === undefined) return;
+
+    return _to_array(elementObjects).map(function(elementObject) {
+        var element = _toElementDescriptor(elementObject);
+        _disallowProperty(elementObject, "finisher", "An element descriptor");
+        _disallowProperty(elementObject, "extras", "An element descriptor");
+
+        return element;
+    });
+}
+function _toElementDescriptor(elementObject) {
+    var kind = String(elementObject.kind);
+    if (kind !== "method" && kind !== "field") {
+        throw new TypeError("An element descriptor's .kind property must be either \"method\" or" + " \"field\", but a decorator created an element descriptor with" + " .kind \"" + kind + "\"");
+    }
+    var key = _to_property_key(elementObject.key);
+    var placement = String(elementObject.placement);
+    if (placement !== "static" && placement !== "prototype" && placement !== "own") {
+        throw new TypeError(
+            "An element descriptor's .placement property must be one of \"static\","
+                + " \"prototype\" or \"own\", but a decorator created an element descriptor"
+                + " with .placement \""
+                + placement
+                + "\""
+        );
+    }
+    var descriptor = elementObject.descriptor;
+    _disallowProperty(elementObject, "elements", "An element descriptor");
+    var element = { kind: kind, key: key, placement: placement, descriptor: Object.assign({}, descriptor) };
+    if (kind !== "field") _disallowProperty(elementObject, "initializer", "A method descriptor");
+    else {
+        _disallowProperty(descriptor, "get", "The property descriptor of a field descriptor");
+        _disallowProperty(descriptor, "set", "The property descriptor of a field descriptor");
+        _disallowProperty(descriptor, "value", "The property descriptor of a field descriptor");
+        element.initializer = elementObject.initializer;
+    }
+
+    return element;
+}
+function _toElementFinisherExtras(elementObject) {
+    var element = _toElementDescriptor(elementObject);
+    var finisher = _optionalCallableProperty(elementObject, "finisher");
+    var extras = _toElementDescriptors(elementObject.extras);
+
+    return { element: element, finisher: finisher, extras: extras };
+}
+function _fromClassDescriptor(elements) {
+    var obj = { kind: "class", elements: elements.map(_fromElementDescriptor) };
+    var desc = { value: "Descriptor", configurable: true };
+    Object.defineProperty(obj, Symbol.toStringTag, desc);
+
+    return obj;
+}
+function _toClassDescriptor(obj) {
+    var kind = String(obj.kind);
+    if (kind !== "class") {
+        throw new TypeError("A class descriptor's .kind property must be \"class\", but a decorator" + " created a class descriptor with .kind \"" + kind + "\"");
+    }
+    _disallowProperty(obj, "key", "A class descriptor");
+    _disallowProperty(obj, "placement", "A class descriptor");
+    _disallowProperty(obj, "descriptor", "A class descriptor");
+    _disallowProperty(obj, "initializer", "A class descriptor");
+    _disallowProperty(obj, "extras", "A class descriptor");
+    var finisher = _optionalCallableProperty(obj, "finisher");
+    var elements = _toElementDescriptors(obj.elements);
+
+    return { elements: elements, finisher: finisher };
+}
+function _disallowProperty(obj, name, objectType) {
+    if (obj[name] !== undefined) throw new TypeError(objectType + " can't have a ." + name + " property.");
+}
+function _optionalCallableProperty(obj, name) {
+    var value = obj[name];
+    if (value !== undefined && typeof value !== "function") {
+        throw new TypeError("Expected '" + name + "' to be a function");
+    }
+
+    return value;
+}
+function _runClassFinishers(constructor, finishers) {
+    for (var i = 0; i < finishers.length; i++) {
+        var newConstructor = (0, finishers[i])(constructor);
+        if (newConstructor !== undefined) {
+            if (typeof newConstructor !== "function") throw new TypeError("Finishers must return a constructor.");
+            constructor = newConstructor;
+        }
+    }
+
+    return constructor;
+}
+export { _decorate as _ };
diff --git a/node_modules/@swc/helpers/esm/_defaults.js b/node_modules/@swc/helpers/esm/_defaults.js
new file mode 100644
index 0000000000000000000000000000000000000000..de0bc0cbce96200cb9709553d2a3e31198c9ee89
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_defaults.js
@@ -0,0 +1,13 @@
+function _defaults(obj, defaults) {
+    var keys = Object.getOwnPropertyNames(defaults);
+
+    for (var i = 0; i < keys.length; i++) {
+        var key = keys[i];
+        var value = Object.getOwnPropertyDescriptor(defaults, key);
+
+        if (value && value.configurable && obj[key] === undefined) Object.defineProperty(obj, key, value);
+    }
+
+    return obj;
+}
+export { _defaults as _ };
diff --git a/node_modules/@swc/helpers/esm/_define_enumerable_properties.js b/node_modules/@swc/helpers/esm/_define_enumerable_properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e184ef6973396c6beda4287bbb977d6ac59100c
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_define_enumerable_properties.js
@@ -0,0 +1,24 @@
+function _define_enumerable_properties(obj, descs) {
+    for (var key in descs) {
+        var desc = descs[key];
+        desc.configurable = desc.enumerable = true;
+
+        if ("value" in desc) desc.writable = true;
+
+        Object.defineProperty(obj, key, desc);
+    }
+
+    if (Object.getOwnPropertySymbols) {
+        var objectSymbols = Object.getOwnPropertySymbols(descs);
+        for (var i = 0; i < objectSymbols.length; i++) {
+            var sym = objectSymbols[i];
+            var desc = descs[sym];
+            desc.configurable = desc.enumerable = true;
+            if ("value" in desc) desc.writable = true;
+            Object.defineProperty(obj, sym, desc);
+        }
+    }
+
+    return obj;
+}
+export { _define_enumerable_properties as _ };
diff --git a/node_modules/@swc/helpers/esm/_define_property.js b/node_modules/@swc/helpers/esm/_define_property.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe259f2a5e3b088a56f02439f2a282e42da82231
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_define_property.js
@@ -0,0 +1,8 @@
+function _define_property(obj, key, value) {
+    if (key in obj) {
+        Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });
+    } else obj[key] = value;
+
+    return obj;
+}
+export { _define_property as _ };
diff --git a/node_modules/@swc/helpers/esm/_dispose.js b/node_modules/@swc/helpers/esm/_dispose.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e0837318aed14b09cb507df61a34eb40cb594c7
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_dispose.js
@@ -0,0 +1,41 @@
+/* @minVersion 7.22.0 */
+function dispose_SuppressedError(suppressed, error) {
+    if (typeof SuppressedError !== "undefined") {
+        // eslint-disable-next-line no-undef
+        dispose_SuppressedError = SuppressedError;
+    } else {
+        dispose_SuppressedError = function SuppressedError(suppressed, error) {
+            this.suppressed = suppressed;
+            this.error = error;
+            this.stack = new Error().stack;
+        };
+        dispose_SuppressedError.prototype = Object.create(Error.prototype, { constructor: { value: dispose_SuppressedError, writable: true, configurable: true } });
+    }
+    return new dispose_SuppressedError(suppressed, error);
+}
+
+function _dispose(stack, error, hasError) {
+    function next() {
+        while (stack.length > 0) {
+            try {
+                var r = stack.pop();
+                var p = r.d.call(r.v);
+                if (r.a) return Promise.resolve(p).then(next, err);
+            } catch (e) {
+                return err(e);
+            }
+        }
+        if (hasError) throw error;
+    }
+
+    function err(e) {
+        error = hasError ? new dispose_SuppressedError(e, error) : e;
+        hasError = true;
+
+        return next();
+    }
+
+    return next();
+}
+
+export { _dispose as _ };
diff --git a/node_modules/@swc/helpers/esm/_export_star.js b/node_modules/@swc/helpers/esm/_export_star.js
new file mode 100644
index 0000000000000000000000000000000000000000..98789f732c4d852ac6dc1d017dd07dba914066dc
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_export_star.js
@@ -0,0 +1,15 @@
+function _export_star(from, to) {
+    Object.keys(from).forEach(function(k) {
+        if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
+            Object.defineProperty(to, k, {
+                enumerable: true,
+                get: function() {
+                    return from[k];
+                }
+            });
+        }
+    });
+
+    return from;
+}
+export { _export_star as _ };
diff --git a/node_modules/@swc/helpers/esm/_extends.js b/node_modules/@swc/helpers/esm/_extends.js
new file mode 100644
index 0000000000000000000000000000000000000000..7baa58ee45c735a305b73134cb4956795d17aef0
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_extends.js
@@ -0,0 +1,13 @@
+function _extends() {
+    _extends = Object.assign || function assign(target) {
+        for (var i = 1; i < arguments.length; i++) {
+            var source = arguments[i];
+            for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];
+        }
+
+        return target;
+    };
+
+    return _extends.apply(this, arguments);
+}
+export { _extends as _ };
diff --git a/node_modules/@swc/helpers/esm/_get.js b/node_modules/@swc/helpers/esm/_get.js
new file mode 100644
index 0000000000000000000000000000000000000000..0d5fd28157c0ebc6df5276e1231e7b7d2cc3551f
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_get.js
@@ -0,0 +1,21 @@
+import { _ as _super_prop_base } from "./_super_prop_base.js";
+
+function _get(target, property, receiver) {
+    if (typeof Reflect !== "undefined" && Reflect.get) _get = Reflect.get;
+    else {
+        _get = function get(target, property, receiver) {
+            var base = _super_prop_base(target, property);
+
+            if (!base) return;
+
+            var desc = Object.getOwnPropertyDescriptor(base, property);
+
+            if (desc.get) return desc.get.call(receiver || target);
+
+            return desc.value;
+        };
+    }
+
+    return _get(target, property, receiver || target);
+}
+export { _get as _ };
diff --git a/node_modules/@swc/helpers/esm/_get_prototype_of.js b/node_modules/@swc/helpers/esm/_get_prototype_of.js
new file mode 100644
index 0000000000000000000000000000000000000000..951dd01d2996418f5b143a4e1aa241368d68330f
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_get_prototype_of.js
@@ -0,0 +1,8 @@
+function _get_prototype_of(o) {
+    _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
+        return o.__proto__ || Object.getPrototypeOf(o);
+    };
+
+    return _get_prototype_of(o);
+}
+export { _get_prototype_of as _ };
diff --git a/node_modules/@swc/helpers/esm/_identity.js b/node_modules/@swc/helpers/esm/_identity.js
new file mode 100644
index 0000000000000000000000000000000000000000..9af20108a23cc8e8a53ffd938abf2a503f8089ff
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_identity.js
@@ -0,0 +1,5 @@
+function _identity(x) {
+    return x;
+}
+
+export { _identity as _ };
diff --git a/node_modules/@swc/helpers/esm/_inherits.js b/node_modules/@swc/helpers/esm/_inherits.js
new file mode 100644
index 0000000000000000000000000000000000000000..563d0d25fd705539ca9b6c21e993a4b1f9ec089b
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_inherits.js
@@ -0,0 +1,12 @@
+import { _ as _set_prototype_of } from "./_set_prototype_of.js";
+
+function _inherits(subClass, superClass) {
+    if (typeof superClass !== "function" && superClass !== null) {
+        throw new TypeError("Super expression must either be null or a function");
+    }
+
+    subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
+
+    if (superClass) _set_prototype_of(subClass, superClass);
+}
+export { _inherits as _ };
diff --git a/node_modules/@swc/helpers/esm/_inherits_loose.js b/node_modules/@swc/helpers/esm/_inherits_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..d222f69fc6064fad2d216b37d6c5bfa1cab61db8
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_inherits_loose.js
@@ -0,0 +1,6 @@
+function _inherits_loose(subClass, superClass) {
+    subClass.prototype = Object.create(superClass.prototype);
+    subClass.prototype.constructor = subClass;
+    subClass.__proto__ = superClass;
+}
+export { _inherits_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_initializer_define_property.js b/node_modules/@swc/helpers/esm/_initializer_define_property.js
new file mode 100644
index 0000000000000000000000000000000000000000..396946028ea216baa1e8352d7eaf8ba8573eb0d4
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_initializer_define_property.js
@@ -0,0 +1,11 @@
+function _initializer_define_property(target, property, descriptor, context) {
+    if (!descriptor) return;
+
+    Object.defineProperty(target, property, {
+        enumerable: descriptor.enumerable,
+        configurable: descriptor.configurable,
+        writable: descriptor.writable,
+        value: descriptor.initializer ? descriptor.initializer.call(context) : void 0
+    });
+}
+export { _initializer_define_property as _ };
diff --git a/node_modules/@swc/helpers/esm/_initializer_warning_helper.js b/node_modules/@swc/helpers/esm/_initializer_warning_helper.js
new file mode 100644
index 0000000000000000000000000000000000000000..2590876ef35969021d554d06d0fa947a95842572
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_initializer_warning_helper.js
@@ -0,0 +1,9 @@
+function _initializer_warning_helper(descriptor, context) {
+    throw new Error(
+        "Decorating class property failed. Please ensure that "
+            + "proposal-class-properties is enabled and set to use loose mode. "
+            + "To use proposal-class-properties in spec mode with decorators, wait for "
+            + "the next major version of decorators in stage 2."
+    );
+}
+export { _initializer_warning_helper as _ };
diff --git a/node_modules/@swc/helpers/esm/_instanceof.js b/node_modules/@swc/helpers/esm/_instanceof.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba3a66180e6e7d9dbc78ba6f319237d977db6e1b
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_instanceof.js
@@ -0,0 +1,6 @@
+function _instanceof(left, right) {
+    if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
+        return !!right[Symbol.hasInstance](left);
+    } else return left instanceof right;
+}
+export { _instanceof as _ };
diff --git a/node_modules/@swc/helpers/esm/_interop_require_default.js b/node_modules/@swc/helpers/esm/_interop_require_default.js
new file mode 100644
index 0000000000000000000000000000000000000000..12458929e47122d60e870bbe19af56522a3bf106
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_interop_require_default.js
@@ -0,0 +1,4 @@
+function _interop_require_default(obj) {
+    return obj && obj.__esModule ? obj : { default: obj };
+}
+export { _interop_require_default as _ };
diff --git a/node_modules/@swc/helpers/esm/_interop_require_wildcard.js b/node_modules/@swc/helpers/esm/_interop_require_wildcard.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd78233b3d31e0df33707646b175a74eddb872ec
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_interop_require_wildcard.js
@@ -0,0 +1,36 @@
+function _getRequireWildcardCache(nodeInterop) {
+    if (typeof WeakMap !== "function") return null;
+
+    var cacheBabelInterop = new WeakMap();
+    var cacheNodeInterop = new WeakMap();
+
+    return (_getRequireWildcardCache = function(nodeInterop) {
+        return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
+    })(nodeInterop);
+}
+function _interop_require_wildcard(obj, nodeInterop) {
+    if (!nodeInterop && obj && obj.__esModule) return obj;
+    if (obj === null || typeof obj !== "object" && typeof obj !== "function") return { default: obj };
+
+    var cache = _getRequireWildcardCache(nodeInterop);
+
+    if (cache && cache.has(obj)) return cache.get(obj);
+
+    var newObj = { __proto__: null };
+    var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
+
+    for (var key in obj) {
+        if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
+            var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
+            if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
+            else newObj[key] = obj[key];
+        }
+    }
+
+    newObj.default = obj;
+
+    if (cache) cache.set(obj, newObj);
+
+    return newObj;
+}
+export { _interop_require_wildcard as _ };
diff --git a/node_modules/@swc/helpers/esm/_is_native_function.js b/node_modules/@swc/helpers/esm/_is_native_function.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7cf198731b57e5a3604e114f26e40acf9fda9f9
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_is_native_function.js
@@ -0,0 +1,4 @@
+function _is_native_function(fn) {
+    return Function.toString.call(fn).indexOf("[native code]") !== -1;
+}
+export { _is_native_function as _ };
diff --git a/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js b/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js
new file mode 100644
index 0000000000000000000000000000000000000000..af04603219bbe74a961e2d97e755121f504b5562
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js
@@ -0,0 +1,16 @@
+function _is_native_reflect_construct() {
+    // Since Reflect.construct can't be properly polyfilled, some
+    // implementations (e.g. core-js@2) don't set the correct internal slots.
+    // Those polyfills don't allow us to subclass built-ins, so we need to
+    // use our fallback implementation.
+    try {
+        // If the internal slots aren't set, this throws an error similar to
+        //   TypeError: this is not a Boolean object.
+        var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
+    } catch (_) {}
+    return (_is_native_reflect_construct = function() {
+        return !!result;
+    })();
+}
+
+export { _is_native_reflect_construct as _ };
diff --git a/node_modules/@swc/helpers/esm/_iterable_to_array.js b/node_modules/@swc/helpers/esm/_iterable_to_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..e44dfb002305add6b2023deeae15bb9b6f9e6924
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_iterable_to_array.js
@@ -0,0 +1,6 @@
+function _iterable_to_array(iter) {
+    if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) {
+        return Array.from(iter);
+    }
+}
+export { _iterable_to_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js b/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ce2bc94b3654416919ceb097987202861b1fdd3
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_iterable_to_array_limit.js
@@ -0,0 +1,29 @@
+function _iterable_to_array_limit(arr, i) {
+    var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
+
+    if (_i == null) return;
+
+    var _arr = [];
+    var _n = true;
+    var _d = false;
+    var _s, _e;
+
+    try {
+        for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
+            _arr.push(_s.value);
+            if (i && _arr.length === i) break;
+        }
+    } catch (err) {
+        _d = true;
+        _e = err;
+    } finally {
+        try {
+            if (!_n && _i["return"] != null) _i["return"]();
+        } finally {
+            if (_d) throw _e;
+        }
+    }
+
+    return _arr;
+}
+export { _iterable_to_array_limit as _ };
diff --git a/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js b/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..2369e8b6858d5703212d76599cc73c1b05cce98a
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_iterable_to_array_limit_loose.js
@@ -0,0 +1,15 @@
+function _iterable_to_array_limit_loose(arr, i) {
+    var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]);
+
+    if (_i == null) return;
+
+    var _arr = [];
+
+    for (_i = _i.call(arr), _step; !(_step = _i.next()).done;) {
+        _arr.push(_step.value);
+        if (i && _arr.length === i) break;
+    }
+
+    return _arr;
+}
+export { _iterable_to_array_limit_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_jsx.js b/node_modules/@swc/helpers/esm/_jsx.js
new file mode 100644
index 0000000000000000000000000000000000000000..0695535c02077402a4c60ee231de9730583886d4
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_jsx.js
@@ -0,0 +1,26 @@
+var REACT_ELEMENT_TYPE;
+function _jsx(type, props, key, children) {
+    if (!REACT_ELEMENT_TYPE) {
+        REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7;
+    }
+
+    var defaultProps = type && type.defaultProps;
+    var childrenLength = arguments.length - 3;
+
+    if (!props && childrenLength !== 0) props = { children: void 0 };
+    if (props && defaultProps) {
+        for (var propName in defaultProps) {
+            if (props[propName] === void 0) props[propName] = defaultProps[propName];
+            else if (!props) props = defaultProps || {};
+        }
+    }
+    if (childrenLength === 1) props.children = children;
+    else if (childrenLength > 1) {
+        var childArray = new Array(childrenLength);
+        for (var i = 0; i < childrenLength; i++) childArray[i] = arguments[i + 3];
+        props.children = childArray;
+    }
+
+    return { $$typeof: REACT_ELEMENT_TYPE, type: type, key: key === undefined ? null : "" + key, ref: null, props: props, _owner: null };
+}
+export { _jsx as _ };
diff --git a/node_modules/@swc/helpers/esm/_new_arrow_check.js b/node_modules/@swc/helpers/esm/_new_arrow_check.js
new file mode 100644
index 0000000000000000000000000000000000000000..0651b3c550d2d12e6855b84167015dd2b1d86e17
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_new_arrow_check.js
@@ -0,0 +1,4 @@
+function _new_arrow_check(innerThis, boundThis) {
+    if (innerThis !== boundThis) throw new TypeError("Cannot instantiate an arrow function");
+}
+export { _new_arrow_check as _ };
diff --git a/node_modules/@swc/helpers/esm/_non_iterable_rest.js b/node_modules/@swc/helpers/esm/_non_iterable_rest.js
new file mode 100644
index 0000000000000000000000000000000000000000..b41d9c237199d2441241083fbacce824805d1e56
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_non_iterable_rest.js
@@ -0,0 +1,4 @@
+function _non_iterable_rest() {
+    throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _non_iterable_rest as _ };
diff --git a/node_modules/@swc/helpers/esm/_non_iterable_spread.js b/node_modules/@swc/helpers/esm/_non_iterable_spread.js
new file mode 100644
index 0000000000000000000000000000000000000000..fd7b50e72a3e57ff9b44167297c23e36a1e181e4
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_non_iterable_spread.js
@@ -0,0 +1,4 @@
+function _non_iterable_spread() {
+    throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+}
+export { _non_iterable_spread as _ };
diff --git a/node_modules/@swc/helpers/esm/_object_destructuring_empty.js b/node_modules/@swc/helpers/esm/_object_destructuring_empty.js
new file mode 100644
index 0000000000000000000000000000000000000000..97a6dd750cfd9e740dbd02ef5fb3a9158fb2cb4d
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_object_destructuring_empty.js
@@ -0,0 +1,6 @@
+function _object_destructuring_empty(o) {
+    if (o === null || o === void 0) throw new TypeError("Cannot destructure " + o);
+
+    return o;
+}
+export { _object_destructuring_empty as _ };
diff --git a/node_modules/@swc/helpers/esm/_object_spread.js b/node_modules/@swc/helpers/esm/_object_spread.js
new file mode 100644
index 0000000000000000000000000000000000000000..a71c747f5d857a1d7776c14469350fd2f6a30dc1
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_object_spread.js
@@ -0,0 +1,23 @@
+import { _ as _define_property } from "./_define_property.js";
+
+function _object_spread(target) {
+    for (var i = 1; i < arguments.length; i++) {
+        var source = arguments[i] != null ? arguments[i] : {};
+        var ownKeys = Object.keys(source);
+
+        if (typeof Object.getOwnPropertySymbols === "function") {
+            ownKeys = ownKeys.concat(
+                Object.getOwnPropertySymbols(source).filter(function(sym) {
+                    return Object.getOwnPropertyDescriptor(source, sym).enumerable;
+                })
+            );
+        }
+
+        ownKeys.forEach(function(key) {
+            _define_property(target, key, source[key]);
+        });
+    }
+
+    return target;
+}
+export { _object_spread as _ };
diff --git a/node_modules/@swc/helpers/esm/_object_spread_props.js b/node_modules/@swc/helpers/esm/_object_spread_props.js
new file mode 100644
index 0000000000000000000000000000000000000000..88593ee348d78afedbd90c5a69f79b5e668de247
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_object_spread_props.js
@@ -0,0 +1,28 @@
+function ownKeys(object, enumerableOnly) {
+    var keys = Object.keys(object);
+
+    if (Object.getOwnPropertySymbols) {
+        var symbols = Object.getOwnPropertySymbols(object);
+        if (enumerableOnly) {
+            symbols = symbols.filter(function(sym) {
+                return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+            });
+        }
+        keys.push.apply(keys, symbols);
+    }
+
+    return keys;
+}
+function _object_spread_props(target, source) {
+    source = source != null ? source : {};
+
+    if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
+    else {
+        ownKeys(Object(source)).forEach(function(key) {
+            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+        });
+    }
+
+    return target;
+}
+export { _object_spread_props as _ };
diff --git a/node_modules/@swc/helpers/esm/_object_without_properties.js b/node_modules/@swc/helpers/esm/_object_without_properties.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb63487b12f2744710f3103cdb763fa2745c2d5e
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_object_without_properties.js
@@ -0,0 +1,21 @@
+import { _ as _object_without_properties_loose } from "./_object_without_properties_loose.js";
+
+function _object_without_properties(source, excluded) {
+    if (source == null) return {};
+
+    var target = _object_without_properties_loose(source, excluded);
+    var key, i;
+
+    if (Object.getOwnPropertySymbols) {
+        var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
+        for (i = 0; i < sourceSymbolKeys.length; i++) {
+            key = sourceSymbolKeys[i];
+            if (excluded.indexOf(key) >= 0) continue;
+            if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
+            target[key] = source[key];
+        }
+    }
+
+    return target;
+}
+export { _object_without_properties as _ };
diff --git a/node_modules/@swc/helpers/esm/_object_without_properties_loose.js b/node_modules/@swc/helpers/esm/_object_without_properties_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..db7b040e36f8780c93a9f7336c18605b50b925fe
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_object_without_properties_loose.js
@@ -0,0 +1,16 @@
+function _object_without_properties_loose(source, excluded) {
+    if (source == null) return {};
+
+    var target = {};
+    var sourceKeys = Object.keys(source);
+    var key, i;
+
+    for (i = 0; i < sourceKeys.length; i++) {
+        key = sourceKeys[i];
+        if (excluded.indexOf(key) >= 0) continue;
+        target[key] = source[key];
+    }
+
+    return target;
+}
+export { _object_without_properties_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_possible_constructor_return.js b/node_modules/@swc/helpers/esm/_possible_constructor_return.js
new file mode 100644
index 0000000000000000000000000000000000000000..b07f39070b46bc30a040454b5951fd9c11c7f06d
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_possible_constructor_return.js
@@ -0,0 +1,9 @@
+import { _ as _assert_this_initialized } from "./_assert_this_initialized.js";
+import { _ as _type_of } from "./_type_of.js";
+
+function _possible_constructor_return(self, call) {
+    if (call && (_type_of(call) === "object" || typeof call === "function")) return call;
+
+    return _assert_this_initialized(self);
+}
+export { _possible_constructor_return as _ };
diff --git a/node_modules/@swc/helpers/esm/_read_only_error.js b/node_modules/@swc/helpers/esm/_read_only_error.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b63ee3ea3bd8ecd51b09a4e3c2a3694c8db01cd
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_read_only_error.js
@@ -0,0 +1,4 @@
+function _read_only_error(name) {
+    throw new TypeError("\"" + name + "\" is read-only");
+}
+export { _read_only_error as _ };
diff --git a/node_modules/@swc/helpers/esm/_set.js b/node_modules/@swc/helpers/esm/_set.js
new file mode 100644
index 0000000000000000000000000000000000000000..15dc2f1b6eb0a05f8d15f7c5bfcda6cb12488c20
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_set.js
@@ -0,0 +1,42 @@
+import { _ as _define_property } from "./_define_property.js";
+import { _ as _super_prop_base } from "./_super_prop_base.js";
+
+function set(target, property, value, receiver) {
+    if (typeof Reflect !== "undefined" && Reflect.set) set = Reflect.set;
+    else {
+        set = function set(target, property, value, receiver) {
+            var base = _super_prop_base(target, property);
+            var desc;
+            if (base) {
+                desc = Object.getOwnPropertyDescriptor(base, property);
+                if (desc.set) {
+                    desc.set.call(receiver, value);
+
+                    return true;
+                } else if (!desc.writable) {
+                    return false;
+                }
+            }
+            desc = Object.getOwnPropertyDescriptor(receiver, property);
+            if (desc) {
+                if (!desc.writable) return false;
+                desc.value = value;
+                Object.defineProperty(receiver, property, desc);
+            } else {
+                _define_property(receiver, property, value);
+            }
+
+            return true;
+        };
+    }
+
+    return set(target, property, value, receiver);
+}
+
+function _set(target, property, value, receiver, isStrict) {
+    var s = set(target, property, value, receiver || target);
+    if (!s && isStrict) throw new Error("failed to set property");
+
+    return value;
+}
+export { _set as _ };
diff --git a/node_modules/@swc/helpers/esm/_set_prototype_of.js b/node_modules/@swc/helpers/esm/_set_prototype_of.js
new file mode 100644
index 0000000000000000000000000000000000000000..6a1f4df4183e6be4c3108f86e7d49d39c702dd00
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_set_prototype_of.js
@@ -0,0 +1,10 @@
+function _set_prototype_of(o, p) {
+    _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
+        o.__proto__ = p;
+
+        return o;
+    };
+
+    return _set_prototype_of(o, p);
+}
+export { _set_prototype_of as _ };
diff --git a/node_modules/@swc/helpers/esm/_skip_first_generator_next.js b/node_modules/@swc/helpers/esm/_skip_first_generator_next.js
new file mode 100644
index 0000000000000000000000000000000000000000..1ccf48901c343fff5e854081f5529af64d04a7ca
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_skip_first_generator_next.js
@@ -0,0 +1,9 @@
+function _skip_first_generator_next(fn) {
+    return function() {
+        var it = fn.apply(this, arguments);
+        it.next();
+
+        return it;
+    };
+}
+export { _skip_first_generator_next as _ };
diff --git a/node_modules/@swc/helpers/esm/_sliced_to_array.js b/node_modules/@swc/helpers/esm/_sliced_to_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..750c3019fb108e78759f797a64d9f1bc05d42aad
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_sliced_to_array.js
@@ -0,0 +1,9 @@
+import { _ as _array_with_holes } from "./_array_with_holes.js";
+import { _ as _iterable_to_array_limit } from "./_iterable_to_array_limit.js";
+import { _ as _non_iterable_rest } from "./_non_iterable_rest.js";
+import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+
+function _sliced_to_array(arr, i) {
+    return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
+}
+export { _sliced_to_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js b/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..859de45d8cb2e470a81133baccf1e0b6eed59d7e
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_sliced_to_array_loose.js
@@ -0,0 +1,9 @@
+import { _ as _array_with_holes } from "./_array_with_holes.js";
+import { _ as _iterable_to_array_limit_loose } from "./_iterable_to_array_limit_loose.js";
+import { _ as _non_iterable_rest } from "./_non_iterable_rest.js";
+import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+
+function _sliced_to_array_loose(arr, i) {
+    return _array_with_holes(arr) || _iterable_to_array_limit_loose(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
+}
+export { _sliced_to_array_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_super_prop_base.js b/node_modules/@swc/helpers/esm/_super_prop_base.js
new file mode 100644
index 0000000000000000000000000000000000000000..47dec411f2300277c10b3956bd491c09e0a3b260
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_super_prop_base.js
@@ -0,0 +1,11 @@
+import { _ as _get_prototype_of } from "./_get_prototype_of.js";
+
+function _super_prop_base(object, property) {
+    while (!Object.prototype.hasOwnProperty.call(object, property)) {
+        object = _get_prototype_of(object);
+        if (object === null) break;
+    }
+
+    return object;
+}
+export { _super_prop_base as _ };
diff --git a/node_modules/@swc/helpers/esm/_tagged_template_literal.js b/node_modules/@swc/helpers/esm/_tagged_template_literal.js
new file mode 100644
index 0000000000000000000000000000000000000000..429cc779826de902444fa7704b4cee9db070cb18
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_tagged_template_literal.js
@@ -0,0 +1,6 @@
+function _tagged_template_literal(strings, raw) {
+    if (!raw) raw = strings.slice(0);
+
+    return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } }));
+}
+export { _tagged_template_literal as _ };
diff --git a/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js b/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fbb61e6dc1c253eff4d3b45ea9224c6493119c7
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_tagged_template_literal_loose.js
@@ -0,0 +1,8 @@
+function _tagged_template_literal_loose(strings, raw) {
+    if (!raw) raw = strings.slice(0);
+
+    strings.raw = raw;
+
+    return strings;
+}
+export { _tagged_template_literal_loose as _ };
diff --git a/node_modules/@swc/helpers/esm/_throw.js b/node_modules/@swc/helpers/esm/_throw.js
new file mode 100644
index 0000000000000000000000000000000000000000..5de41f16fcbea51c2873849ff26fb1d66c337fe9
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_throw.js
@@ -0,0 +1,4 @@
+function _throw(e) {
+    throw e;
+}
+export { _throw as _ };
diff --git a/node_modules/@swc/helpers/esm/_to_array.js b/node_modules/@swc/helpers/esm/_to_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..7451fb2a14d5f123995b93f3183fdba27d2ae1eb
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_to_array.js
@@ -0,0 +1,9 @@
+import { _ as _array_with_holes } from "./_array_with_holes.js";
+import { _ as _iterable_to_array } from "./_iterable_to_array.js";
+import { _ as _non_iterable_rest } from "./_non_iterable_rest.js";
+import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+
+function _to_array(arr) {
+    return _array_with_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_rest();
+}
+export { _to_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_to_consumable_array.js b/node_modules/@swc/helpers/esm/_to_consumable_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..048ad6e25a2a1560535d380c0d2784a842e504b0
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_to_consumable_array.js
@@ -0,0 +1,9 @@
+import { _ as _array_without_holes } from "./_array_without_holes.js";
+import { _ as _iterable_to_array } from "./_iterable_to_array.js";
+import { _ as _non_iterable_spread } from "./_non_iterable_spread.js";
+import { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+
+function _to_consumable_array(arr) {
+    return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
+}
+export { _to_consumable_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_to_primitive.js b/node_modules/@swc/helpers/esm/_to_primitive.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c8e4255c85a580cfbf8e0bea1c389bab23d3b04
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_to_primitive.js
@@ -0,0 +1,16 @@
+import { _ as _type_of } from "./_type_of.js";
+
+function _to_primitive(input, hint) {
+    if (_type_of(input) !== "object" || input === null) return input;
+
+    var prim = input[Symbol.toPrimitive];
+
+    if (prim !== undefined) {
+        var res = prim.call(input, hint || "default");
+        if (_type_of(res) !== "object") return res;
+        throw new TypeError("@@toPrimitive must return a primitive value.");
+    }
+
+    return (hint === "string" ? String : Number)(input);
+}
+export { _to_primitive as _ };
diff --git a/node_modules/@swc/helpers/esm/_to_property_key.js b/node_modules/@swc/helpers/esm/_to_property_key.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6f8d38ee92fa467ea4cba14649cd500f7b57511
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_to_property_key.js
@@ -0,0 +1,9 @@
+import { _ as _to_primitive } from "./_to_primitive.js";
+import { _ as _type_of } from "./_type_of.js";
+
+function _to_property_key(arg) {
+    var key = _to_primitive(arg, "string");
+
+    return _type_of(key) === "symbol" ? key : String(key);
+}
+export { _to_property_key as _ };
diff --git a/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js b/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js
new file mode 100644
index 0000000000000000000000000000000000000000..62fd1cb30bdc5fe7819b5a49f890ff45967a6ad1
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_add_disposable_resource.js
@@ -0,0 +1 @@
+export { __addDisposableResource as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_decorate.js b/node_modules/@swc/helpers/esm/_ts_decorate.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e0e46e62025ad7e6b49043d51ad9761007fff49
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_decorate.js
@@ -0,0 +1 @@
+export { __decorate as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_dispose_resources.js b/node_modules/@swc/helpers/esm/_ts_dispose_resources.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d06d4a5f87e34549d24dcba49041d6e3b75a7be
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_dispose_resources.js
@@ -0,0 +1 @@
+export { __disposeResources as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_generator.js b/node_modules/@swc/helpers/esm/_ts_generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfe3b633c16f763acf8766de5c77d08841910020
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_generator.js
@@ -0,0 +1 @@
+export { __generator as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_metadata.js b/node_modules/@swc/helpers/esm/_ts_metadata.js
new file mode 100644
index 0000000000000000000000000000000000000000..0aa522ed4b456c69033b8e32497149c4fa944980
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_metadata.js
@@ -0,0 +1 @@
+export { __metadata as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_param.js b/node_modules/@swc/helpers/esm/_ts_param.js
new file mode 100644
index 0000000000000000000000000000000000000000..f332a40307e16380c0e936f72ae0e44f68860fed
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_param.js
@@ -0,0 +1 @@
+export { __param as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_ts_values.js b/node_modules/@swc/helpers/esm/_ts_values.js
new file mode 100644
index 0000000000000000000000000000000000000000..298fd4b5929ff6f161fab818f0d246ed79fea4ea
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_ts_values.js
@@ -0,0 +1 @@
+export { __values as _ } from "tslib";
diff --git a/node_modules/@swc/helpers/esm/_type_of.js b/node_modules/@swc/helpers/esm/_type_of.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc7b859bcc389d28a2188c50b0ee02b33c459008
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_type_of.js
@@ -0,0 +1,6 @@
+function _type_of(obj) {
+    "@swc/helpers - typeof";
+
+    return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
+}
+export { _type_of as _ };
diff --git a/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js b/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js
new file mode 100644
index 0000000000000000000000000000000000000000..47ce85815c87f1d32e574ee7891adc765c5d9315
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js
@@ -0,0 +1,13 @@
+import { _ as _array_like_to_array } from "./_array_like_to_array.js";
+
+function _unsupported_iterable_to_array(o, minLen) {
+    if (!o) return;
+    if (typeof o === "string") return _array_like_to_array(o, minLen);
+
+    var n = Object.prototype.toString.call(o).slice(8, -1);
+
+    if (n === "Object" && o.constructor) n = o.constructor.name;
+    if (n === "Map" || n === "Set") return Array.from(n);
+    if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
+}
+export { _unsupported_iterable_to_array as _ };
diff --git a/node_modules/@swc/helpers/esm/_update.js b/node_modules/@swc/helpers/esm/_update.js
new file mode 100644
index 0000000000000000000000000000000000000000..86a7d688bc8ebf6fa1195d501ef99aec0ceee12b
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_update.js
@@ -0,0 +1,14 @@
+import { _ as _get } from "./_get.js";
+import { _ as _set } from "./_set.js";
+
+function _update(target, property, receiver, isStrict) {
+    return {
+        get _() {
+            return _get(target, property, receiver);
+        },
+        set _(value) {
+            _set(target, property, value, receiver, isStrict);
+        }
+    };
+}
+export { _update as _ };
diff --git a/node_modules/@swc/helpers/esm/_using.js b/node_modules/@swc/helpers/esm/_using.js
new file mode 100644
index 0000000000000000000000000000000000000000..b46fe691c4af6d882b4b0d0a587b8d2e00f31815
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_using.js
@@ -0,0 +1,22 @@
+/* @minVersion 7.22.0 */
+
+function _using(stack, value, isAwait) {
+    if (value === null || value === void 0) return value;
+    if (Object(value) !== value) {
+        throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+    }
+    // core-js-pure uses Symbol.for for polyfilling well-known symbols
+    if (isAwait) {
+        var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")];
+    }
+    if (dispose === null || dispose === void 0) {
+        dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")];
+    }
+    if (typeof dispose !== "function") {
+        throw new TypeError(`Property [Symbol.dispose] is not a function.`);
+    }
+    stack.push({ v: value, d: dispose, a: isAwait });
+    return value;
+}
+
+export { _using as _ };
diff --git a/node_modules/@swc/helpers/esm/_using_ctx.js b/node_modules/@swc/helpers/esm/_using_ctx.js
new file mode 100644
index 0000000000000000000000000000000000000000..b94ad75b1ba839169110538841532c67b01109b4
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_using_ctx.js
@@ -0,0 +1,73 @@
+function _using_ctx() {
+    var _disposeSuppressedError = typeof SuppressedError === "function"
+            // eslint-disable-next-line no-undef
+            ? SuppressedError
+            : (function(error, suppressed) {
+                var err = new Error();
+                err.name = "SuppressedError";
+                err.suppressed = suppressed;
+                err.error = error;
+                return err;
+            }),
+        empty = {},
+        stack = [];
+    function using(isAwait, value) {
+        if (value != null) {
+            if (Object(value) !== value) {
+                throw new TypeError("using declarations can only be used with objects, functions, null, or undefined.");
+            }
+            // core-js-pure uses Symbol.for for polyfilling well-known symbols
+            if (isAwait) {
+                var dispose = value[Symbol.asyncDispose || Symbol.for("Symbol.asyncDispose")];
+            }
+            if (dispose == null) {
+                dispose = value[Symbol.dispose || Symbol.for("Symbol.dispose")];
+            }
+            if (typeof dispose !== "function") {
+                throw new TypeError(`Property [Symbol.dispose] is not a function.`);
+            }
+            stack.push({ v: value, d: dispose, a: isAwait });
+        } else if (isAwait) {
+            // provide the nullish `value` as `d` for minification gain
+            stack.push({ d: value, a: isAwait });
+        }
+        return value;
+    }
+    return {
+        // error
+        e: empty,
+        // using
+        u: using.bind(null, false),
+        // await using
+        a: using.bind(null, true),
+        // dispose
+        d: function() {
+            var error = this.e;
+
+            function next() {
+                // eslint-disable-next-line @typescript-eslint/no-use-before-define
+                while ((resource = stack.pop())) {
+                    try {
+                        var resource, disposalResult = resource.d && resource.d.call(resource.v);
+                        if (resource.a) {
+                            return Promise.resolve(disposalResult).then(next, err);
+                        }
+                    } catch (e) {
+                        return err(e);
+                    }
+                }
+                if (error !== empty) throw error;
+            }
+
+            function err(e) {
+                error = error !== empty ? new _disposeSuppressedError(error, e) : e;
+
+                return next();
+            }
+
+            return next();
+        }
+    };
+}
+
+export { _using_ctx as _ };
diff --git a/node_modules/@swc/helpers/esm/_wrap_async_generator.js b/node_modules/@swc/helpers/esm/_wrap_async_generator.js
new file mode 100644
index 0000000000000000000000000000000000000000..b95574033fa3738d2d6d7c6888eee760c366a8b9
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_wrap_async_generator.js
@@ -0,0 +1,8 @@
+import { _ as _async_generator } from "./_async_generator.js";
+
+function _wrap_async_generator(fn) {
+    return function() {
+        return new _async_generator(fn.apply(this, arguments));
+    };
+}
+export { _wrap_async_generator as _ };
diff --git a/node_modules/@swc/helpers/esm/_wrap_native_super.js b/node_modules/@swc/helpers/esm/_wrap_native_super.js
new file mode 100644
index 0000000000000000000000000000000000000000..e942eb5d67c7a65c254fabfcfbb9204a385970bc
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_wrap_native_super.js
@@ -0,0 +1,26 @@
+import { _ as _construct } from "./_construct.js";
+import { _ as _get_prototype_of } from "./_get_prototype_of.js";
+import { _ as _is_native_function } from "./_is_native_function.js";
+import { _ as _set_prototype_of } from "./_set_prototype_of.js";
+
+function _wrap_native_super(Class) {
+    var _cache = typeof Map === "function" ? new Map() : undefined;
+    _wrap_native_super = function(Class) {
+        if (Class === null || !_is_native_function(Class)) return Class;
+        if (typeof Class !== "function") throw new TypeError("Super expression must either be null or a function");
+        if (typeof _cache !== "undefined") {
+            if (_cache.has(Class)) return _cache.get(Class);
+            _cache.set(Class, Wrapper);
+        }
+
+        function Wrapper() {
+            return _construct(Class, arguments, _get_prototype_of(this).constructor);
+        }
+        Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });
+
+        return _set_prototype_of(Wrapper, Class);
+    };
+
+    return _wrap_native_super(Class);
+}
+export { _wrap_native_super as _ };
diff --git a/node_modules/@swc/helpers/esm/_write_only_error.js b/node_modules/@swc/helpers/esm/_write_only_error.js
new file mode 100644
index 0000000000000000000000000000000000000000..87c24aa07782aa268c6cd6bddaab94113d8c4c74
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/_write_only_error.js
@@ -0,0 +1,4 @@
+function _write_only_error(name) {
+    throw new TypeError("\"" + name + "\" is write-only");
+}
+export { _write_only_error as _ };
diff --git a/node_modules/@swc/helpers/esm/index.js b/node_modules/@swc/helpers/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe511005bd787f59905996193762de69b8cf563e
--- /dev/null
+++ b/node_modules/@swc/helpers/esm/index.js
@@ -0,0 +1,106 @@
+/* This file is automatically generated and should not be manually edited. */
+/* To modify this file, please run the `npm run build` command instead. */
+
+export { _ as _apply_decorated_descriptor } from "./_apply_decorated_descriptor.js";
+export { _ as _apply_decs_2203_r } from "./_apply_decs_2203_r.js";
+export { _ as _array_like_to_array } from "./_array_like_to_array.js";
+export { _ as _array_with_holes } from "./_array_with_holes.js";
+export { _ as _array_without_holes } from "./_array_without_holes.js";
+export { _ as _assert_this_initialized } from "./_assert_this_initialized.js";
+export { _ as _async_generator } from "./_async_generator.js";
+export { _ as _async_generator_delegate } from "./_async_generator_delegate.js";
+export { _ as _async_iterator } from "./_async_iterator.js";
+export { _ as _async_to_generator } from "./_async_to_generator.js";
+export { _ as _await_async_generator } from "./_await_async_generator.js";
+export { _ as _await_value } from "./_await_value.js";
+export { _ as _call_super } from "./_call_super.js";
+export { _ as _check_private_redeclaration } from "./_check_private_redeclaration.js";
+export { _ as _class_apply_descriptor_destructure } from "./_class_apply_descriptor_destructure.js";
+export { _ as _class_apply_descriptor_get } from "./_class_apply_descriptor_get.js";
+export { _ as _class_apply_descriptor_set } from "./_class_apply_descriptor_set.js";
+export { _ as _class_apply_descriptor_update } from "./_class_apply_descriptor_update.js";
+export { _ as _class_call_check } from "./_class_call_check.js";
+export { _ as _class_check_private_static_access } from "./_class_check_private_static_access.js";
+export { _ as _class_check_private_static_field_descriptor } from "./_class_check_private_static_field_descriptor.js";
+export { _ as _class_extract_field_descriptor } from "./_class_extract_field_descriptor.js";
+export { _ as _class_name_tdz_error } from "./_class_name_tdz_error.js";
+export { _ as _class_private_field_destructure } from "./_class_private_field_destructure.js";
+export { _ as _class_private_field_get } from "./_class_private_field_get.js";
+export { _ as _class_private_field_init } from "./_class_private_field_init.js";
+export { _ as _class_private_field_loose_base } from "./_class_private_field_loose_base.js";
+export { _ as _class_private_field_loose_key } from "./_class_private_field_loose_key.js";
+export { _ as _class_private_field_set } from "./_class_private_field_set.js";
+export { _ as _class_private_field_update } from "./_class_private_field_update.js";
+export { _ as _class_private_method_get } from "./_class_private_method_get.js";
+export { _ as _class_private_method_init } from "./_class_private_method_init.js";
+export { _ as _class_private_method_set } from "./_class_private_method_set.js";
+export { _ as _class_static_private_field_destructure } from "./_class_static_private_field_destructure.js";
+export { _ as _class_static_private_field_spec_get } from "./_class_static_private_field_spec_get.js";
+export { _ as _class_static_private_field_spec_set } from "./_class_static_private_field_spec_set.js";
+export { _ as _class_static_private_field_update } from "./_class_static_private_field_update.js";
+export { _ as _class_static_private_method_get } from "./_class_static_private_method_get.js";
+export { _ as _construct } from "./_construct.js";
+export { _ as _create_class } from "./_create_class.js";
+export { _ as _create_for_of_iterator_helper_loose } from "./_create_for_of_iterator_helper_loose.js";
+export { _ as _create_super } from "./_create_super.js";
+export { _ as _decorate } from "./_decorate.js";
+export { _ as _defaults } from "./_defaults.js";
+export { _ as _define_enumerable_properties } from "./_define_enumerable_properties.js";
+export { _ as _define_property } from "./_define_property.js";
+export { _ as _dispose } from "./_dispose.js";
+export { _ as _export_star } from "./_export_star.js";
+export { _ as _extends } from "./_extends.js";
+export { _ as _get } from "./_get.js";
+export { _ as _get_prototype_of } from "./_get_prototype_of.js";
+export { _ as _identity } from "./_identity.js";
+export { _ as _inherits } from "./_inherits.js";
+export { _ as _inherits_loose } from "./_inherits_loose.js";
+export { _ as _initializer_define_property } from "./_initializer_define_property.js";
+export { _ as _initializer_warning_helper } from "./_initializer_warning_helper.js";
+export { _ as _instanceof } from "./_instanceof.js";
+export { _ as _interop_require_default } from "./_interop_require_default.js";
+export { _ as _interop_require_wildcard } from "./_interop_require_wildcard.js";
+export { _ as _is_native_function } from "./_is_native_function.js";
+export { _ as _is_native_reflect_construct } from "./_is_native_reflect_construct.js";
+export { _ as _iterable_to_array } from "./_iterable_to_array.js";
+export { _ as _iterable_to_array_limit } from "./_iterable_to_array_limit.js";
+export { _ as _iterable_to_array_limit_loose } from "./_iterable_to_array_limit_loose.js";
+export { _ as _jsx } from "./_jsx.js";
+export { _ as _new_arrow_check } from "./_new_arrow_check.js";
+export { _ as _non_iterable_rest } from "./_non_iterable_rest.js";
+export { _ as _non_iterable_spread } from "./_non_iterable_spread.js";
+export { _ as _object_destructuring_empty } from "./_object_destructuring_empty.js";
+export { _ as _object_spread } from "./_object_spread.js";
+export { _ as _object_spread_props } from "./_object_spread_props.js";
+export { _ as _object_without_properties } from "./_object_without_properties.js";
+export { _ as _object_without_properties_loose } from "./_object_without_properties_loose.js";
+export { _ as _possible_constructor_return } from "./_possible_constructor_return.js";
+export { _ as _read_only_error } from "./_read_only_error.js";
+export { _ as _set } from "./_set.js";
+export { _ as _set_prototype_of } from "./_set_prototype_of.js";
+export { _ as _skip_first_generator_next } from "./_skip_first_generator_next.js";
+export { _ as _sliced_to_array } from "./_sliced_to_array.js";
+export { _ as _sliced_to_array_loose } from "./_sliced_to_array_loose.js";
+export { _ as _super_prop_base } from "./_super_prop_base.js";
+export { _ as _tagged_template_literal } from "./_tagged_template_literal.js";
+export { _ as _tagged_template_literal_loose } from "./_tagged_template_literal_loose.js";
+export { _ as _throw } from "./_throw.js";
+export { _ as _to_array } from "./_to_array.js";
+export { _ as _to_consumable_array } from "./_to_consumable_array.js";
+export { _ as _to_primitive } from "./_to_primitive.js";
+export { _ as _to_property_key } from "./_to_property_key.js";
+export { _ as _ts_add_disposable_resource } from "./_ts_add_disposable_resource.js";
+export { _ as _ts_decorate } from "./_ts_decorate.js";
+export { _ as _ts_dispose_resources } from "./_ts_dispose_resources.js";
+export { _ as _ts_generator } from "./_ts_generator.js";
+export { _ as _ts_metadata } from "./_ts_metadata.js";
+export { _ as _ts_param } from "./_ts_param.js";
+export { _ as _ts_values } from "./_ts_values.js";
+export { _ as _type_of } from "./_type_of.js";
+export { _ as _unsupported_iterable_to_array } from "./_unsupported_iterable_to_array.js";
+export { _ as _update } from "./_update.js";
+export { _ as _using } from "./_using.js";
+export { _ as _using_ctx } from "./_using_ctx.js";
+export { _ as _wrap_async_generator } from "./_wrap_async_generator.js";
+export { _ as _wrap_native_super } from "./_wrap_native_super.js";
+export { _ as _write_only_error } from "./_write_only_error.js";
diff --git a/node_modules/@swc/helpers/package.json b/node_modules/@swc/helpers/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..db2a0dca3517edc22c2376da31d2c7eccd0e501f
--- /dev/null
+++ b/node_modules/@swc/helpers/package.json
@@ -0,0 +1,500 @@
+{
+  "_from": "@swc/helpers@^0.5.0",
+  "_id": "@swc/helpers@0.5.15",
+  "_inBundle": false,
+  "_integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+  "_location": "/@swc/helpers",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@swc/helpers@^0.5.0",
+    "name": "@swc/helpers",
+    "escapedName": "@swc%2fhelpers",
+    "scope": "@swc",
+    "rawSpec": "^0.5.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.5.0"
+  },
+  "_requiredBy": [
+    "/@react-aria/ssr"
+  ],
+  "_resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+  "_shasum": "79efab344c5819ecf83a43f3f9f811fc84b516d7",
+  "_spec": "@swc/helpers@^0.5.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/@react-aria/ssr",
+  "author": {
+    "name": "강동윤",
+    "email": "kdy1997.dev@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/swc-project/swc/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "tslib": "^2.8.0"
+  },
+  "deprecated": false,
+  "description": "External helpers for the swc project.",
+  "devDependencies": {
+    "@ast-grep/napi": "^0.3.1",
+    "dprint": "^0.35.3",
+    "magic-string": "^0.30.0",
+    "zx": "^7.2.1"
+  },
+  "exports": {
+    "./package.json": "./package.json",
+    "./esm/*": "./esm/*",
+    "./cjs/*": "./cjs/*",
+    "./src/*": "./src/*",
+    ".": {
+      "import": "./esm/index.js",
+      "default": "./cjs/index.cjs"
+    },
+    "./_": {
+      "import": "./esm/index.js",
+      "default": "./cjs/index.cjs"
+    },
+    "./_/_apply_decorated_descriptor": {
+      "import": "./esm/_apply_decorated_descriptor.js",
+      "default": "./cjs/_apply_decorated_descriptor.cjs"
+    },
+    "./_/_apply_decs_2203_r": {
+      "import": "./esm/_apply_decs_2203_r.js",
+      "default": "./cjs/_apply_decs_2203_r.cjs"
+    },
+    "./_/_array_like_to_array": {
+      "import": "./esm/_array_like_to_array.js",
+      "default": "./cjs/_array_like_to_array.cjs"
+    },
+    "./_/_array_with_holes": {
+      "import": "./esm/_array_with_holes.js",
+      "default": "./cjs/_array_with_holes.cjs"
+    },
+    "./_/_array_without_holes": {
+      "import": "./esm/_array_without_holes.js",
+      "default": "./cjs/_array_without_holes.cjs"
+    },
+    "./_/_assert_this_initialized": {
+      "import": "./esm/_assert_this_initialized.js",
+      "default": "./cjs/_assert_this_initialized.cjs"
+    },
+    "./_/_async_generator": {
+      "import": "./esm/_async_generator.js",
+      "default": "./cjs/_async_generator.cjs"
+    },
+    "./_/_async_generator_delegate": {
+      "import": "./esm/_async_generator_delegate.js",
+      "default": "./cjs/_async_generator_delegate.cjs"
+    },
+    "./_/_async_iterator": {
+      "import": "./esm/_async_iterator.js",
+      "default": "./cjs/_async_iterator.cjs"
+    },
+    "./_/_async_to_generator": {
+      "import": "./esm/_async_to_generator.js",
+      "default": "./cjs/_async_to_generator.cjs"
+    },
+    "./_/_await_async_generator": {
+      "import": "./esm/_await_async_generator.js",
+      "default": "./cjs/_await_async_generator.cjs"
+    },
+    "./_/_await_value": {
+      "import": "./esm/_await_value.js",
+      "default": "./cjs/_await_value.cjs"
+    },
+    "./_/_call_super": {
+      "import": "./esm/_call_super.js",
+      "default": "./cjs/_call_super.cjs"
+    },
+    "./_/_check_private_redeclaration": {
+      "import": "./esm/_check_private_redeclaration.js",
+      "default": "./cjs/_check_private_redeclaration.cjs"
+    },
+    "./_/_class_apply_descriptor_destructure": {
+      "import": "./esm/_class_apply_descriptor_destructure.js",
+      "default": "./cjs/_class_apply_descriptor_destructure.cjs"
+    },
+    "./_/_class_apply_descriptor_get": {
+      "import": "./esm/_class_apply_descriptor_get.js",
+      "default": "./cjs/_class_apply_descriptor_get.cjs"
+    },
+    "./_/_class_apply_descriptor_set": {
+      "import": "./esm/_class_apply_descriptor_set.js",
+      "default": "./cjs/_class_apply_descriptor_set.cjs"
+    },
+    "./_/_class_apply_descriptor_update": {
+      "import": "./esm/_class_apply_descriptor_update.js",
+      "default": "./cjs/_class_apply_descriptor_update.cjs"
+    },
+    "./_/_class_call_check": {
+      "import": "./esm/_class_call_check.js",
+      "default": "./cjs/_class_call_check.cjs"
+    },
+    "./_/_class_check_private_static_access": {
+      "import": "./esm/_class_check_private_static_access.js",
+      "default": "./cjs/_class_check_private_static_access.cjs"
+    },
+    "./_/_class_check_private_static_field_descriptor": {
+      "import": "./esm/_class_check_private_static_field_descriptor.js",
+      "default": "./cjs/_class_check_private_static_field_descriptor.cjs"
+    },
+    "./_/_class_extract_field_descriptor": {
+      "import": "./esm/_class_extract_field_descriptor.js",
+      "default": "./cjs/_class_extract_field_descriptor.cjs"
+    },
+    "./_/_class_name_tdz_error": {
+      "import": "./esm/_class_name_tdz_error.js",
+      "default": "./cjs/_class_name_tdz_error.cjs"
+    },
+    "./_/_class_private_field_destructure": {
+      "import": "./esm/_class_private_field_destructure.js",
+      "default": "./cjs/_class_private_field_destructure.cjs"
+    },
+    "./_/_class_private_field_get": {
+      "import": "./esm/_class_private_field_get.js",
+      "default": "./cjs/_class_private_field_get.cjs"
+    },
+    "./_/_class_private_field_init": {
+      "import": "./esm/_class_private_field_init.js",
+      "default": "./cjs/_class_private_field_init.cjs"
+    },
+    "./_/_class_private_field_loose_base": {
+      "import": "./esm/_class_private_field_loose_base.js",
+      "default": "./cjs/_class_private_field_loose_base.cjs"
+    },
+    "./_/_class_private_field_loose_key": {
+      "import": "./esm/_class_private_field_loose_key.js",
+      "default": "./cjs/_class_private_field_loose_key.cjs"
+    },
+    "./_/_class_private_field_set": {
+      "import": "./esm/_class_private_field_set.js",
+      "default": "./cjs/_class_private_field_set.cjs"
+    },
+    "./_/_class_private_field_update": {
+      "import": "./esm/_class_private_field_update.js",
+      "default": "./cjs/_class_private_field_update.cjs"
+    },
+    "./_/_class_private_method_get": {
+      "import": "./esm/_class_private_method_get.js",
+      "default": "./cjs/_class_private_method_get.cjs"
+    },
+    "./_/_class_private_method_init": {
+      "import": "./esm/_class_private_method_init.js",
+      "default": "./cjs/_class_private_method_init.cjs"
+    },
+    "./_/_class_private_method_set": {
+      "import": "./esm/_class_private_method_set.js",
+      "default": "./cjs/_class_private_method_set.cjs"
+    },
+    "./_/_class_static_private_field_destructure": {
+      "import": "./esm/_class_static_private_field_destructure.js",
+      "default": "./cjs/_class_static_private_field_destructure.cjs"
+    },
+    "./_/_class_static_private_field_spec_get": {
+      "import": "./esm/_class_static_private_field_spec_get.js",
+      "default": "./cjs/_class_static_private_field_spec_get.cjs"
+    },
+    "./_/_class_static_private_field_spec_set": {
+      "import": "./esm/_class_static_private_field_spec_set.js",
+      "default": "./cjs/_class_static_private_field_spec_set.cjs"
+    },
+    "./_/_class_static_private_field_update": {
+      "import": "./esm/_class_static_private_field_update.js",
+      "default": "./cjs/_class_static_private_field_update.cjs"
+    },
+    "./_/_class_static_private_method_get": {
+      "import": "./esm/_class_static_private_method_get.js",
+      "default": "./cjs/_class_static_private_method_get.cjs"
+    },
+    "./_/_construct": {
+      "import": "./esm/_construct.js",
+      "default": "./cjs/_construct.cjs"
+    },
+    "./_/_create_class": {
+      "import": "./esm/_create_class.js",
+      "default": "./cjs/_create_class.cjs"
+    },
+    "./_/_create_for_of_iterator_helper_loose": {
+      "import": "./esm/_create_for_of_iterator_helper_loose.js",
+      "default": "./cjs/_create_for_of_iterator_helper_loose.cjs"
+    },
+    "./_/_create_super": {
+      "import": "./esm/_create_super.js",
+      "default": "./cjs/_create_super.cjs"
+    },
+    "./_/_decorate": {
+      "import": "./esm/_decorate.js",
+      "default": "./cjs/_decorate.cjs"
+    },
+    "./_/_defaults": {
+      "import": "./esm/_defaults.js",
+      "default": "./cjs/_defaults.cjs"
+    },
+    "./_/_define_enumerable_properties": {
+      "import": "./esm/_define_enumerable_properties.js",
+      "default": "./cjs/_define_enumerable_properties.cjs"
+    },
+    "./_/_define_property": {
+      "import": "./esm/_define_property.js",
+      "default": "./cjs/_define_property.cjs"
+    },
+    "./_/_dispose": {
+      "import": "./esm/_dispose.js",
+      "default": "./cjs/_dispose.cjs"
+    },
+    "./_/_export_star": {
+      "import": "./esm/_export_star.js",
+      "default": "./cjs/_export_star.cjs"
+    },
+    "./_/_extends": {
+      "import": "./esm/_extends.js",
+      "default": "./cjs/_extends.cjs"
+    },
+    "./_/_get": {
+      "import": "./esm/_get.js",
+      "default": "./cjs/_get.cjs"
+    },
+    "./_/_get_prototype_of": {
+      "import": "./esm/_get_prototype_of.js",
+      "default": "./cjs/_get_prototype_of.cjs"
+    },
+    "./_/_identity": {
+      "import": "./esm/_identity.js",
+      "default": "./cjs/_identity.cjs"
+    },
+    "./_/_inherits": {
+      "import": "./esm/_inherits.js",
+      "default": "./cjs/_inherits.cjs"
+    },
+    "./_/_inherits_loose": {
+      "import": "./esm/_inherits_loose.js",
+      "default": "./cjs/_inherits_loose.cjs"
+    },
+    "./_/_initializer_define_property": {
+      "import": "./esm/_initializer_define_property.js",
+      "default": "./cjs/_initializer_define_property.cjs"
+    },
+    "./_/_initializer_warning_helper": {
+      "import": "./esm/_initializer_warning_helper.js",
+      "default": "./cjs/_initializer_warning_helper.cjs"
+    },
+    "./_/_instanceof": {
+      "import": "./esm/_instanceof.js",
+      "default": "./cjs/_instanceof.cjs"
+    },
+    "./_/_interop_require_default": {
+      "import": "./esm/_interop_require_default.js",
+      "default": "./cjs/_interop_require_default.cjs"
+    },
+    "./_/_interop_require_wildcard": {
+      "import": "./esm/_interop_require_wildcard.js",
+      "default": "./cjs/_interop_require_wildcard.cjs"
+    },
+    "./_/_is_native_function": {
+      "import": "./esm/_is_native_function.js",
+      "default": "./cjs/_is_native_function.cjs"
+    },
+    "./_/_is_native_reflect_construct": {
+      "import": "./esm/_is_native_reflect_construct.js",
+      "default": "./cjs/_is_native_reflect_construct.cjs"
+    },
+    "./_/_iterable_to_array": {
+      "import": "./esm/_iterable_to_array.js",
+      "default": "./cjs/_iterable_to_array.cjs"
+    },
+    "./_/_iterable_to_array_limit": {
+      "import": "./esm/_iterable_to_array_limit.js",
+      "default": "./cjs/_iterable_to_array_limit.cjs"
+    },
+    "./_/_iterable_to_array_limit_loose": {
+      "import": "./esm/_iterable_to_array_limit_loose.js",
+      "default": "./cjs/_iterable_to_array_limit_loose.cjs"
+    },
+    "./_/_jsx": {
+      "import": "./esm/_jsx.js",
+      "default": "./cjs/_jsx.cjs"
+    },
+    "./_/_new_arrow_check": {
+      "import": "./esm/_new_arrow_check.js",
+      "default": "./cjs/_new_arrow_check.cjs"
+    },
+    "./_/_non_iterable_rest": {
+      "import": "./esm/_non_iterable_rest.js",
+      "default": "./cjs/_non_iterable_rest.cjs"
+    },
+    "./_/_non_iterable_spread": {
+      "import": "./esm/_non_iterable_spread.js",
+      "default": "./cjs/_non_iterable_spread.cjs"
+    },
+    "./_/_object_destructuring_empty": {
+      "import": "./esm/_object_destructuring_empty.js",
+      "default": "./cjs/_object_destructuring_empty.cjs"
+    },
+    "./_/_object_spread": {
+      "import": "./esm/_object_spread.js",
+      "default": "./cjs/_object_spread.cjs"
+    },
+    "./_/_object_spread_props": {
+      "import": "./esm/_object_spread_props.js",
+      "default": "./cjs/_object_spread_props.cjs"
+    },
+    "./_/_object_without_properties": {
+      "import": "./esm/_object_without_properties.js",
+      "default": "./cjs/_object_without_properties.cjs"
+    },
+    "./_/_object_without_properties_loose": {
+      "import": "./esm/_object_without_properties_loose.js",
+      "default": "./cjs/_object_without_properties_loose.cjs"
+    },
+    "./_/_possible_constructor_return": {
+      "import": "./esm/_possible_constructor_return.js",
+      "default": "./cjs/_possible_constructor_return.cjs"
+    },
+    "./_/_read_only_error": {
+      "import": "./esm/_read_only_error.js",
+      "default": "./cjs/_read_only_error.cjs"
+    },
+    "./_/_set": {
+      "import": "./esm/_set.js",
+      "default": "./cjs/_set.cjs"
+    },
+    "./_/_set_prototype_of": {
+      "import": "./esm/_set_prototype_of.js",
+      "default": "./cjs/_set_prototype_of.cjs"
+    },
+    "./_/_skip_first_generator_next": {
+      "import": "./esm/_skip_first_generator_next.js",
+      "default": "./cjs/_skip_first_generator_next.cjs"
+    },
+    "./_/_sliced_to_array": {
+      "import": "./esm/_sliced_to_array.js",
+      "default": "./cjs/_sliced_to_array.cjs"
+    },
+    "./_/_sliced_to_array_loose": {
+      "import": "./esm/_sliced_to_array_loose.js",
+      "default": "./cjs/_sliced_to_array_loose.cjs"
+    },
+    "./_/_super_prop_base": {
+      "import": "./esm/_super_prop_base.js",
+      "default": "./cjs/_super_prop_base.cjs"
+    },
+    "./_/_tagged_template_literal": {
+      "import": "./esm/_tagged_template_literal.js",
+      "default": "./cjs/_tagged_template_literal.cjs"
+    },
+    "./_/_tagged_template_literal_loose": {
+      "import": "./esm/_tagged_template_literal_loose.js",
+      "default": "./cjs/_tagged_template_literal_loose.cjs"
+    },
+    "./_/_throw": {
+      "import": "./esm/_throw.js",
+      "default": "./cjs/_throw.cjs"
+    },
+    "./_/_to_array": {
+      "import": "./esm/_to_array.js",
+      "default": "./cjs/_to_array.cjs"
+    },
+    "./_/_to_consumable_array": {
+      "import": "./esm/_to_consumable_array.js",
+      "default": "./cjs/_to_consumable_array.cjs"
+    },
+    "./_/_to_primitive": {
+      "import": "./esm/_to_primitive.js",
+      "default": "./cjs/_to_primitive.cjs"
+    },
+    "./_/_to_property_key": {
+      "import": "./esm/_to_property_key.js",
+      "default": "./cjs/_to_property_key.cjs"
+    },
+    "./_/_ts_add_disposable_resource": {
+      "import": "./esm/_ts_add_disposable_resource.js",
+      "default": "./cjs/_ts_add_disposable_resource.cjs"
+    },
+    "./_/_ts_decorate": {
+      "import": "./esm/_ts_decorate.js",
+      "default": "./cjs/_ts_decorate.cjs"
+    },
+    "./_/_ts_dispose_resources": {
+      "import": "./esm/_ts_dispose_resources.js",
+      "default": "./cjs/_ts_dispose_resources.cjs"
+    },
+    "./_/_ts_generator": {
+      "import": "./esm/_ts_generator.js",
+      "default": "./cjs/_ts_generator.cjs"
+    },
+    "./_/_ts_metadata": {
+      "import": "./esm/_ts_metadata.js",
+      "default": "./cjs/_ts_metadata.cjs"
+    },
+    "./_/_ts_param": {
+      "import": "./esm/_ts_param.js",
+      "default": "./cjs/_ts_param.cjs"
+    },
+    "./_/_ts_values": {
+      "import": "./esm/_ts_values.js",
+      "default": "./cjs/_ts_values.cjs"
+    },
+    "./_/_type_of": {
+      "import": "./esm/_type_of.js",
+      "default": "./cjs/_type_of.cjs"
+    },
+    "./_/_unsupported_iterable_to_array": {
+      "import": "./esm/_unsupported_iterable_to_array.js",
+      "default": "./cjs/_unsupported_iterable_to_array.cjs"
+    },
+    "./_/_update": {
+      "import": "./esm/_update.js",
+      "default": "./cjs/_update.cjs"
+    },
+    "./_/_using": {
+      "import": "./esm/_using.js",
+      "default": "./cjs/_using.cjs"
+    },
+    "./_/_using_ctx": {
+      "import": "./esm/_using_ctx.js",
+      "default": "./cjs/_using_ctx.cjs"
+    },
+    "./_/_wrap_async_generator": {
+      "import": "./esm/_wrap_async_generator.js",
+      "default": "./cjs/_wrap_async_generator.cjs"
+    },
+    "./_/_wrap_native_super": {
+      "import": "./esm/_wrap_native_super.js",
+      "default": "./cjs/_wrap_native_super.cjs"
+    },
+    "./_/_write_only_error": {
+      "import": "./esm/_write_only_error.js",
+      "default": "./cjs/_write_only_error.cjs"
+    },
+    "./_/index": {
+      "import": "./esm/index.js",
+      "default": "./cjs/index.cjs"
+    }
+  },
+  "homepage": "https://swc.rs",
+  "keywords": [
+    "swc",
+    "helpers"
+  ],
+  "license": "Apache-2.0",
+  "main": "cjs/index.cjs",
+  "module": "esm/index.js",
+  "name": "@swc/helpers",
+  "packageManager": "yarn@4.0.2",
+  "publishConfig": {
+    "registry": "https://registry.npmjs.org/",
+    "access": "public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/swc-project/swc.git"
+  },
+  "scripts": {
+    "build": "zx ./scripts/build.js",
+    "prepack": "zx ./scripts/build.js"
+  },
+  "sideEffects": false,
+  "type": "module",
+  "version": "0.5.15"
+}
diff --git a/node_modules/@swc/helpers/scripts/ast_grep.js b/node_modules/@swc/helpers/scripts/ast_grep.js
new file mode 100644
index 0000000000000000000000000000000000000000..30bc1c26b2c5cbd079a461d601074f4287cd0d62
--- /dev/null
+++ b/node_modules/@swc/helpers/scripts/ast_grep.js
@@ -0,0 +1,229 @@
+import { parseFiles } from "@ast-grep/napi";
+import MagicString from "magic-string";
+import { chalk, fs, path } from "zx";
+import { errors } from "./errors.js";
+import { root } from "./utils.js";
+
+/**
+ * @typedef {import("@ast-grep/napi").SgNode} SgNode
+ */
+
+export function ast_grep() {
+    const task_queue = [];
+
+    const task = parseFiles([root("esm")], (err, tree) => {
+        const filename = path.basename(tree.filename(), ".js");
+        if (filename === "index") {
+            return;
+        }
+
+        const source = new MagicString(tree.root().text());
+        source.prepend(`"use strict";\n\n`);
+
+        if (filename.startsWith("_ts")) {
+            const match = tree.root().find(`export { $NAME as _ } from "tslib"`);
+            if (match) {
+                const name = match.getMatch("NAME").text();
+
+                const range = match.range();
+
+                source.update(
+                    range.start.index,
+                    range.end.index,
+                    `exports._ = require("tslib").${name};`,
+                );
+                task_queue.push(
+                    fs.writeFile(root("cjs", `${filename}.cjs`), source.toString(), {
+                        encoding: "utf-8",
+                    }),
+                );
+            } else {
+                report_noexport(tree.filename());
+            }
+            return;
+        }
+
+        // rewrite export named function
+        const match = tree.root().find({
+            rule: {
+                kind: "export_statement",
+                pattern: "export { $FUNC as _ }",
+            },
+        });
+
+        if (match) {
+            const func = match.getMatch("FUNC");
+            const func_name = func.text();
+            if (func_name !== filename) {
+                report_export_mismatch(tree.filename(), match);
+            }
+
+            const range = match.range();
+            source.update(
+                range.start.index,
+                range.end.index,
+                `exports._ = ${func_name};`,
+            );
+
+            // since we match the { export x as _ } pattern,
+            // we need to find the assignment expression from the root
+            tree
+                .root()
+                .findAll({
+                    rule: {
+                        pattern: func_name,
+                        kind: "identifier",
+                        inside: { kind: "assignment_expression", field: "left" },
+                    },
+                })
+                .forEach((match) => {
+                    const range = match.range();
+
+                    source.prependLeft(range.start.index, `exports._ = `);
+                });
+        } else {
+            report_noexport(tree.filename(tree.filename()));
+        }
+
+        // rewrite import
+        tree
+            .root()
+            .findAll({ rule: { pattern: `import { _ as $BINDING } from "$SOURCE"` } })
+            .forEach((match) => {
+                const import_binding = match.getMatch("BINDING").text();
+                const import_source = match.getMatch("SOURCE").text();
+
+                const import_basename = path.basename(import_source, ".js");
+
+                if (import_binding !== import_basename) {
+                    report_import_mismatch(tree.filename(), match);
+                }
+
+                const range = match.range();
+
+                source.update(
+                    range.start.index,
+                    range.end.index,
+                    `var ${import_binding} = require("./${import_binding}.cjs");`,
+                );
+
+                tree
+                    .root()
+                    .findAll({
+                        rule: {
+                            pattern: import_binding,
+                            kind: "identifier",
+                            inside: {
+                                not: {
+                                    kind: "import_specifier",
+                                },
+                            },
+                        },
+                    })
+                    .forEach((match) => {
+                        const range = match.range();
+                        const ref_name = match.text();
+
+                        source.update(
+                            range.start.index,
+                            range.end.index,
+                            `${ref_name}._`,
+                        );
+                    });
+            });
+
+        task_queue.push(
+            fs.writeFile(root("cjs", `${filename}.cjs`), source.toString(), {
+                encoding: "utf-8",
+            }),
+        );
+    });
+
+    task_queue.push(task);
+
+    return task_queue;
+}
+
+/**
+ * @param {string} filename
+ * @param {SgNode} match
+ */
+function report_export_mismatch(filename, match) {
+    const func = match.getMatch("FUNC");
+    const func_range = func.range();
+
+    const text = match.text().split("\n");
+    const offset = func_range.start.line - match.range().start.line;
+
+    text.splice(
+        offset + 1,
+        text.length,
+        chalk.red(
+            [
+                " ".repeat(func_range.start.column),
+                "^".repeat(func_range.end.column - func_range.start.column),
+            ]
+                .join(""),
+        ),
+    );
+
+    errors.push(
+        [
+            `${chalk.bold.red("error")}: mismatch exported function name.`,
+            "",
+            `${chalk.blue("-->")} ${filename}:${func_range.start.line + 1}:${func_range.start.column + 1}`,
+            "",
+            ...text,
+            "",
+            `${
+                chalk.bold(
+                    "note:",
+                )
+            } The exported name should be the same as the filename.`,
+            "",
+        ]
+            .join("\n"),
+    );
+}
+
+/**
+ * @param {string} filename
+ * @param {SgNode} match
+ */
+function report_import_mismatch(filename, match) {
+    const binding_range = match.getMatch("BINDING").range();
+    const source_range = match.getMatch("SOURCE").range();
+
+    errors.push(
+        [
+            `${chalk.bold.red("error")}: mismatch imported binding name.`,
+            "",
+            `${chalk.blue("-->")} ${filename}:${match.range().start.line + 1}`,
+            "",
+            match.text(),
+            [
+                " ".repeat(binding_range.start.column),
+                chalk.red("^".repeat(binding_range.end.column - binding_range.start.column)),
+                " ".repeat(source_range.start.column - binding_range.end.column),
+                chalk.blue("-".repeat(source_range.end.column - source_range.start.column)),
+            ]
+                .join(""),
+            `${
+                chalk.bold(
+                    "note:",
+                )
+            } The imported binding name should be the same as the import source basename.`,
+            "",
+        ]
+            .join("\n"),
+    );
+}
+
+/**
+ * @param {string} filename
+ */
+function report_noexport(filename) {
+    errors.push(
+        [`${chalk.bold.red("error")}: exported name not found`, `${chalk.blue("-->")} ${filename}`].join("\n"),
+    );
+}
diff --git a/node_modules/@swc/helpers/scripts/build.js b/node_modules/@swc/helpers/scripts/build.js
new file mode 100644
index 0000000000000000000000000000000000000000..6857eab17cebda2c85c75c492840477a337ef177
--- /dev/null
+++ b/node_modules/@swc/helpers/scripts/build.js
@@ -0,0 +1,121 @@
+#!/usr/bin/env zx
+
+import { $, fs, glob } from "zx";
+import { ast_grep } from "./ast_grep.js";
+import { errors } from "./errors.js";
+import { root } from "./utils.js";
+
+// clear generated content
+await Promise.all([
+    fs.remove(root("cjs")),
+    fs.remove(root("_")),
+    fs.remove(root("src")),
+]);
+
+let modules = await glob("*.js", { cwd: root("esm") });
+
+const task_queue = [];
+
+const NO_MODIFY = [
+    "/* This file is automatically generated and should not be manually edited. */",
+    "/* To modify this file, please run the `npm run build` command instead. */",
+];
+
+// generate index.js
+const indexESM = [...NO_MODIFY, ""];
+
+const indexCJS = [`"use strict";`, "", ...NO_MODIFY, ""];
+
+const cjs_export_list = [];
+const cjs_module_lexer = [];
+
+const main_package_json = fs.readJSONSync(root("package.json"));
+
+main_package_json.exports = {
+    "./package.json": "./package.json",
+    "./esm/*": "./esm/*",
+    "./cjs/*": "./cjs/*",
+    "./src/*": "./src/*",
+    ".": { import: "./esm/index.js", default: "./cjs/index.cjs" },
+    "./_": { import: "./esm/index.js", default: "./cjs/index.cjs" },
+};
+
+modules.forEach((p) => {
+    const importBinding = p.slice(0, -3);
+
+    main_package_json.exports[`./_/${importBinding}`] = {
+        import: `./esm/${importBinding}.js`,
+        default: `./cjs/${importBinding}.cjs`,
+    };
+
+    const alias_package = {
+        main: `../../cjs/${importBinding}.cjs`,
+        module: `../../esm/${importBinding}.js`,
+    };
+    task_queue.push(
+        fs.outputJSON(root("_", importBinding, "package.json"), alias_package, {
+            encoding: "utf-8",
+            spaces: 4,
+        }),
+    );
+
+    if (importBinding === "index") {
+        return;
+    }
+
+    task_queue.push(
+        fs.outputFile(root("src", `${importBinding}.mjs`), re_export_esm(importBinding), {
+            encoding: "utf-8",
+        }),
+    );
+
+    indexESM.push(`export { _ as ${importBinding} } from "./${importBinding}.js";`);
+
+    cjs_module_lexer.push(`${importBinding}: null,`);
+    cjs_export_list.push(`get ${importBinding}() {
+      return require("./${importBinding}.cjs")._;
+  },`);
+});
+
+indexCJS.push(
+    `0 && (module.exports = {`,
+    "/* @Annotate_start: the CommonJS named exports for ESM import in node */",
+    ...cjs_module_lexer,
+    "/* @Annotate_end */",
+    `});`,
+    `module.exports = {`,
+    ...cjs_export_list,
+    `};`,
+);
+
+task_queue.push(
+    fs.outputJSON(root("package.json"), main_package_json, { spaces: 4 }),
+    fs.outputFile(root("esm", "index.js"), indexESM.join("\n") + "\n", {
+        encoding: "utf-8",
+    }),
+    fs.outputFile(root("cjs", "index.cjs"), indexCJS.join("\n") + "\n", {
+        encoding: "utf-8",
+    }),
+    fs.outputFile(root("src", "index.mjs"), `export * from "../esm/index.js"`, {
+        "encoding": "utf-8",
+    }),
+);
+
+task_queue.push(...ast_grep());
+
+await Promise.all(task_queue);
+
+if (errors.length > 0) {
+    errors.forEach((e) => {
+        console.error(e);
+    });
+    process.exitCode = 1;
+} else {
+    $.cwd = root(".");
+    await $`dprint fmt`;
+    await $`dprint fmt "scripts/*.js" -c scripts/.dprint.json`;
+}
+
+function re_export_esm(importBinding) {
+    return `export { _ as default } from "../esm/${importBinding}.js"`;
+}
diff --git a/node_modules/@swc/helpers/scripts/errors.js b/node_modules/@swc/helpers/scripts/errors.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5b3c15937ed8898692244cccea7240dcaae1ebb
--- /dev/null
+++ b/node_modules/@swc/helpers/scripts/errors.js
@@ -0,0 +1 @@
+export const errors = [];
diff --git a/node_modules/@swc/helpers/scripts/utils.js b/node_modules/@swc/helpers/scripts/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..479b100ce30bd88647aed1475be95fef2129e45f
--- /dev/null
+++ b/node_modules/@swc/helpers/scripts/utils.js
@@ -0,0 +1,3 @@
+export function root(...p) {
+    return path.resolve(__dirname, "..", ...p);
+}
diff --git a/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs b/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..e4839a154f839c83f9ad9e3caa3eb98acad12bc7
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_apply_decorated_descriptor.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_apply_decorated_descriptor.js";
diff --git a/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs b/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c10cb5619351b9460f740db5a4811f09b15cbdf2
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_apply_decs_2203_r.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_apply_decs_2203_r.js";
diff --git a/node_modules/@swc/helpers/src/_array_like_to_array.mjs b/node_modules/@swc/helpers/src/_array_like_to_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..7691b3201856cb14d8064c34ff6d4a356d79d972
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_array_like_to_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_array_like_to_array.js";
diff --git a/node_modules/@swc/helpers/src/_array_with_holes.mjs b/node_modules/@swc/helpers/src/_array_with_holes.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..1a622996dd2107d07ccf6a97a3b46b21242c977d
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_array_with_holes.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_array_with_holes.js";
diff --git a/node_modules/@swc/helpers/src/_array_without_holes.mjs b/node_modules/@swc/helpers/src/_array_without_holes.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..ee2f265ee78d338cc2e4a42c5f766c3c6394323f
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_array_without_holes.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_array_without_holes.js";
diff --git a/node_modules/@swc/helpers/src/_assert_this_initialized.mjs b/node_modules/@swc/helpers/src/_assert_this_initialized.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..36772535e42670f86bbb351b24ef5b402ef237de
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_assert_this_initialized.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_assert_this_initialized.js";
diff --git a/node_modules/@swc/helpers/src/_async_generator.mjs b/node_modules/@swc/helpers/src/_async_generator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b3ced536baf839a663df32be644a3206c18c3bb8
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_async_generator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_async_generator.js";
diff --git a/node_modules/@swc/helpers/src/_async_generator_delegate.mjs b/node_modules/@swc/helpers/src/_async_generator_delegate.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..29dd8b2230e90da9b8560d9ba238b3b1d9a3a221
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_async_generator_delegate.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_async_generator_delegate.js";
diff --git a/node_modules/@swc/helpers/src/_async_iterator.mjs b/node_modules/@swc/helpers/src/_async_iterator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d1300321c17bb8934c7e6cc42a559721ecb1c01b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_async_iterator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_async_iterator.js";
diff --git a/node_modules/@swc/helpers/src/_async_to_generator.mjs b/node_modules/@swc/helpers/src/_async_to_generator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..18adef559169baa84723edc8f954b70489badd1d
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_async_to_generator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_async_to_generator.js";
diff --git a/node_modules/@swc/helpers/src/_await_async_generator.mjs b/node_modules/@swc/helpers/src/_await_async_generator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..da13a9fbdaca80544dae905cc12b77935706768f
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_await_async_generator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_await_async_generator.js";
diff --git a/node_modules/@swc/helpers/src/_await_value.mjs b/node_modules/@swc/helpers/src/_await_value.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..3c2416176d572acbb144c717c5a4b0ed05c43b13
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_await_value.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_await_value.js";
diff --git a/node_modules/@swc/helpers/src/_call_super.mjs b/node_modules/@swc/helpers/src/_call_super.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..da6071660c392fe04dda61a1aead8f8763db20c3
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_call_super.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_call_super.js";
diff --git a/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs b/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..7d78cfe173fc3eccb36c19126752a142c3ab046a
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_check_private_redeclaration.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_check_private_redeclaration.js";
diff --git a/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs b/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b606b53792b91b99a02af6d63c7c42dc0d0dbe0b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_apply_descriptor_destructure.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_apply_descriptor_destructure.js";
diff --git a/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs b/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f888b6bef005107aef6ece6b311b532cadb0e908
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_apply_descriptor_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_apply_descriptor_get.js";
diff --git a/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs b/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..fb0067998aa7817f7e3701802a61e5e9f274d3dd
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_apply_descriptor_set.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_apply_descriptor_set.js";
diff --git a/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs b/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..e7a9915b2f9d7b0671716834e1d76141580fa2fa
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_apply_descriptor_update.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_apply_descriptor_update.js";
diff --git a/node_modules/@swc/helpers/src/_class_call_check.mjs b/node_modules/@swc/helpers/src/_class_call_check.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..220c3c81f0ff4d3e955d0d2fa929f75dde407543
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_call_check.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_call_check.js";
diff --git a/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs b/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..a52a4d8d6d109fba265e9e36a520532de81b1b67
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_check_private_static_access.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_check_private_static_access.js";
diff --git a/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs b/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..cb8a623dc776747525ad601bd98ff874653eec18
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_check_private_static_field_descriptor.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_check_private_static_field_descriptor.js";
diff --git a/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs b/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..7586ce8211cd95b0da1acf472fcacb0409574472
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_extract_field_descriptor.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_extract_field_descriptor.js";
diff --git a/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs b/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c211d7fb5d51e41913d960f7bc689a032a3c595a
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_name_tdz_error.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_name_tdz_error.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs b/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b06b763f8bdc824e2ea0c24de0760201eb3dbb9e
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_destructure.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_destructure.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_get.mjs b/node_modules/@swc/helpers/src/_class_private_field_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..1f8854a81cd2c9ecc4aac02e58498eb1a78e59cb
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_get.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_init.mjs b/node_modules/@swc/helpers/src/_class_private_field_init.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..48d4d17b93a515e39518a58f00adeca0c724fd58
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_init.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_init.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs b/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..a10b033f37bb151dbaa031a375c1e9b72b816337
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_loose_base.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_loose_base.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs b/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..6e80fd9835d817043f1e7c7a8c44ba8ccdb7018b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_loose_key.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_loose_key.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_set.mjs b/node_modules/@swc/helpers/src/_class_private_field_set.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..cb54a1be34aebb9df26979d96db4980bb81f1ace
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_set.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_set.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_field_update.mjs b/node_modules/@swc/helpers/src/_class_private_field_update.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c5f0c633e0ee9d8b3cbe49fc51ed1be62b3551ad
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_field_update.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_field_update.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_method_get.mjs b/node_modules/@swc/helpers/src/_class_private_method_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..9f5248a53d824b6f0fbf0b1c57b6cd46c89b05d6
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_method_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_method_get.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_method_init.mjs b/node_modules/@swc/helpers/src/_class_private_method_init.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..afce453b890ae1fd887e3920a5203507c6c28677
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_method_init.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_method_init.js";
diff --git a/node_modules/@swc/helpers/src/_class_private_method_set.mjs b/node_modules/@swc/helpers/src/_class_private_method_set.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..327252dae17c7e4e2348081595b5af7ad9b41fca
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_private_method_set.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_private_method_set.js";
diff --git a/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs b/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c35376d2dc8eee18ddcb3b322d423734172a70dc
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_static_private_field_destructure.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_static_private_field_destructure.js";
diff --git a/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs b/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..0cc7854d6e0a5e2d8d46b06a9213eec6652ecec2
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_static_private_field_spec_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_static_private_field_spec_get.js";
diff --git a/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs b/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..208cf9730a3c2265dccf8e9c42a6feace7fa1fb6
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_static_private_field_spec_set.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_static_private_field_spec_set.js";
diff --git a/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs b/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..87e043817674aa712f46736b85e2c27fd8835908
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_static_private_field_update.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_static_private_field_update.js";
diff --git a/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs b/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..2241a1a84a2863cbd974e94efd5647703bfa0bf9
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_class_static_private_method_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_class_static_private_method_get.js";
diff --git a/node_modules/@swc/helpers/src/_construct.mjs b/node_modules/@swc/helpers/src/_construct.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..54acb64d632828fb35c0273bdb7427262a79a9f5
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_construct.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_construct.js";
diff --git a/node_modules/@swc/helpers/src/_create_class.mjs b/node_modules/@swc/helpers/src/_create_class.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..78c2af2273b8198e611978bec75b3e27b9912f89
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_create_class.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_create_class.js";
diff --git a/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs b/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..303e056c5a26660873b4566d546bb02785207213
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_create_for_of_iterator_helper_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_create_for_of_iterator_helper_loose.js";
diff --git a/node_modules/@swc/helpers/src/_create_super.mjs b/node_modules/@swc/helpers/src/_create_super.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..44a06bfe18eaa069c86c7b2c85d482a155f06a12
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_create_super.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_create_super.js";
diff --git a/node_modules/@swc/helpers/src/_decorate.mjs b/node_modules/@swc/helpers/src/_decorate.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..087899164b69fef93291302e293475dde067c99e
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_decorate.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_decorate.js";
diff --git a/node_modules/@swc/helpers/src/_defaults.mjs b/node_modules/@swc/helpers/src/_defaults.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..624e68460fb3ea1e0fafae83db5dfc40a448ecf6
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_defaults.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_defaults.js";
diff --git a/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs b/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b6a87fc8db4d396bbf555c31fd319693b0e2f1ce
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_define_enumerable_properties.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_define_enumerable_properties.js";
diff --git a/node_modules/@swc/helpers/src/_define_property.mjs b/node_modules/@swc/helpers/src/_define_property.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b60b2c824d6438cddd671ac08e21777adf1917ef
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_define_property.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_define_property.js";
diff --git a/node_modules/@swc/helpers/src/_dispose.mjs b/node_modules/@swc/helpers/src/_dispose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..2f217e87221b1bed86ef2014d60ca9cdd5f8f023
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_dispose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_dispose.js";
diff --git a/node_modules/@swc/helpers/src/_export_star.mjs b/node_modules/@swc/helpers/src/_export_star.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c7011c2f61a7f4173912a29a62bd7109cf089ca8
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_export_star.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_export_star.js";
diff --git a/node_modules/@swc/helpers/src/_extends.mjs b/node_modules/@swc/helpers/src/_extends.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..804a28bab3d1cd3e01dfc065af3afd40214ed08d
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_extends.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_extends.js";
diff --git a/node_modules/@swc/helpers/src/_get.mjs b/node_modules/@swc/helpers/src/_get.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..fae4b22b5279e24a7c15ae631a7f4b56fa759784
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_get.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_get.js";
diff --git a/node_modules/@swc/helpers/src/_get_prototype_of.mjs b/node_modules/@swc/helpers/src/_get_prototype_of.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..57e820cebb170ec6831f6c73dd137a7a10e4a783
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_get_prototype_of.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_get_prototype_of.js";
diff --git a/node_modules/@swc/helpers/src/_identity.mjs b/node_modules/@swc/helpers/src/_identity.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..5ab4a08a7e7207e27cfcc921940a069757d73e8e
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_identity.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_identity.js";
diff --git a/node_modules/@swc/helpers/src/_inherits.mjs b/node_modules/@swc/helpers/src/_inherits.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d5e3767700736ad2a5305d6138ca93d9bb704d2c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_inherits.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_inherits.js";
diff --git a/node_modules/@swc/helpers/src/_inherits_loose.mjs b/node_modules/@swc/helpers/src/_inherits_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..4f5187d98db0c35363d36e5ffaaaf049ea04f673
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_inherits_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_inherits_loose.js";
diff --git a/node_modules/@swc/helpers/src/_initializer_define_property.mjs b/node_modules/@swc/helpers/src/_initializer_define_property.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..fa0a3b8e2e1de0caef9b8d9f42e711a1b743ca89
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_initializer_define_property.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_initializer_define_property.js";
diff --git a/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs b/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f9251ab5bb30a1d403daf2c1297a065b22dd2bcb
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_initializer_warning_helper.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_initializer_warning_helper.js";
diff --git a/node_modules/@swc/helpers/src/_instanceof.mjs b/node_modules/@swc/helpers/src/_instanceof.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..609f78692e0778dacf43f68178b5680800535ce5
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_instanceof.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_instanceof.js";
diff --git a/node_modules/@swc/helpers/src/_interop_require_default.mjs b/node_modules/@swc/helpers/src/_interop_require_default.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..454ce7154f35618f3d90529075a33705c1ec252c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_interop_require_default.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_interop_require_default.js";
diff --git a/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs b/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..07f7a7ed50d966a913b170c51e2788fcd2303a3b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_interop_require_wildcard.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_interop_require_wildcard.js";
diff --git a/node_modules/@swc/helpers/src/_is_native_function.mjs b/node_modules/@swc/helpers/src/_is_native_function.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..8bacb3ab51baf5b97c00041a13b8941f36398175
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_is_native_function.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_is_native_function.js";
diff --git a/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs b/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..7c0394d9c46319c4cc90b44ac782f0eb40ce3a0c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_is_native_reflect_construct.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_is_native_reflect_construct.js";
diff --git a/node_modules/@swc/helpers/src/_iterable_to_array.mjs b/node_modules/@swc/helpers/src/_iterable_to_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..4baf94afb72d4e69c75859c799c435fa319380f4
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_iterable_to_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_iterable_to_array.js";
diff --git a/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs b/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..45f70f503fdfc7a1b748ff477df426e697553a9c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_iterable_to_array_limit.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_iterable_to_array_limit.js";
diff --git a/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs b/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..400a9e019fa62d55e697898982b8416fc4b8db80
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_iterable_to_array_limit_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_iterable_to_array_limit_loose.js";
diff --git a/node_modules/@swc/helpers/src/_jsx.mjs b/node_modules/@swc/helpers/src/_jsx.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..8b0646a0f85ffce214b69ddc1eabb738650aa99c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_jsx.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_jsx.js";
diff --git a/node_modules/@swc/helpers/src/_new_arrow_check.mjs b/node_modules/@swc/helpers/src/_new_arrow_check.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..e694d150cf518a9a826c74be35233e907346d2e5
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_new_arrow_check.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_new_arrow_check.js";
diff --git a/node_modules/@swc/helpers/src/_non_iterable_rest.mjs b/node_modules/@swc/helpers/src/_non_iterable_rest.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..83218078cb83ac7ad740d4991143db7a5237074b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_non_iterable_rest.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_non_iterable_rest.js";
diff --git a/node_modules/@swc/helpers/src/_non_iterable_spread.mjs b/node_modules/@swc/helpers/src/_non_iterable_spread.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..12993f133d0d19cafe2279dc1dc30b43ecfcde7b
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_non_iterable_spread.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_non_iterable_spread.js";
diff --git a/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs b/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b8aed9ce98d6933a22b9951013eab1315dd558d3
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_object_destructuring_empty.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_object_destructuring_empty.js";
diff --git a/node_modules/@swc/helpers/src/_object_spread.mjs b/node_modules/@swc/helpers/src/_object_spread.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..9b536f58d64da93abc86b8d1050baabe8f79133d
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_object_spread.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_object_spread.js";
diff --git a/node_modules/@swc/helpers/src/_object_spread_props.mjs b/node_modules/@swc/helpers/src/_object_spread_props.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..799de3f688769af054dabb5f16accc42e1713c45
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_object_spread_props.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_object_spread_props.js";
diff --git a/node_modules/@swc/helpers/src/_object_without_properties.mjs b/node_modules/@swc/helpers/src/_object_without_properties.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f0ce12c6c1d4060268f13d452cb98efccff35df7
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_object_without_properties.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_object_without_properties.js";
diff --git a/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs b/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f6f26696e521cd5959979a55b2be6c97c804e1f3
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_object_without_properties_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_object_without_properties_loose.js";
diff --git a/node_modules/@swc/helpers/src/_possible_constructor_return.mjs b/node_modules/@swc/helpers/src/_possible_constructor_return.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..ee9657d256cfa0ce49ba8fa14b3d718fd6ae17e9
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_possible_constructor_return.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_possible_constructor_return.js";
diff --git a/node_modules/@swc/helpers/src/_read_only_error.mjs b/node_modules/@swc/helpers/src/_read_only_error.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..3e95329b1430b6d42833466404eac08f997bd3b5
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_read_only_error.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_read_only_error.js";
diff --git a/node_modules/@swc/helpers/src/_set.mjs b/node_modules/@swc/helpers/src/_set.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..5cc033773f86b25240a88b6eaf3e68c7611b90d6
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_set.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_set.js";
diff --git a/node_modules/@swc/helpers/src/_set_prototype_of.mjs b/node_modules/@swc/helpers/src/_set_prototype_of.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f244856c06d0e81b10b9e2af893ec186d13bbc7c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_set_prototype_of.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_set_prototype_of.js";
diff --git a/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs b/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f437b3ce8d22a24157f65ae86f68fdcc6b0d46e6
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_skip_first_generator_next.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_skip_first_generator_next.js";
diff --git a/node_modules/@swc/helpers/src/_sliced_to_array.mjs b/node_modules/@swc/helpers/src/_sliced_to_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..34f97233d08a7aca1b05c49c633d8082288f0e16
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_sliced_to_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_sliced_to_array.js";
diff --git a/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs b/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..116211bc5e8d53fb6df1b836ac6bb968c2a11992
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_sliced_to_array_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_sliced_to_array_loose.js";
diff --git a/node_modules/@swc/helpers/src/_super_prop_base.mjs b/node_modules/@swc/helpers/src/_super_prop_base.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..25a1b4b471aa70874f7903b58213fa215f2b4007
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_super_prop_base.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_super_prop_base.js";
diff --git a/node_modules/@swc/helpers/src/_tagged_template_literal.mjs b/node_modules/@swc/helpers/src/_tagged_template_literal.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..ea788727152e810036920619a7d3206d53acf5b9
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_tagged_template_literal.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_tagged_template_literal.js";
diff --git a/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs b/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f65c3bb96cb74697023650709cb99c917af31626
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_tagged_template_literal_loose.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_tagged_template_literal_loose.js";
diff --git a/node_modules/@swc/helpers/src/_throw.mjs b/node_modules/@swc/helpers/src/_throw.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..a0b50e049821d3616ee6cb659d28eaa153ceddfd
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_throw.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_throw.js";
diff --git a/node_modules/@swc/helpers/src/_to_array.mjs b/node_modules/@swc/helpers/src/_to_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d42cba535fc0174c5574b916c711790400350f86
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_to_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_to_array.js";
diff --git a/node_modules/@swc/helpers/src/_to_consumable_array.mjs b/node_modules/@swc/helpers/src/_to_consumable_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..e23f2ebc610b6fcca2eb82191ebe59e080c8ca78
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_to_consumable_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_to_consumable_array.js";
diff --git a/node_modules/@swc/helpers/src/_to_primitive.mjs b/node_modules/@swc/helpers/src/_to_primitive.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..0d4a248636fc7338159a5b0368c35fec30bbed51
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_to_primitive.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_to_primitive.js";
diff --git a/node_modules/@swc/helpers/src/_to_property_key.mjs b/node_modules/@swc/helpers/src/_to_property_key.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..7b767073fe22d03acba912f6ea0fd6676dd7d4e0
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_to_property_key.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_to_property_key.js";
diff --git a/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs b/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..b059656ed4f603ce9f2e0e6604b5d461edbd0922
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_add_disposable_resource.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_add_disposable_resource.js";
diff --git a/node_modules/@swc/helpers/src/_ts_decorate.mjs b/node_modules/@swc/helpers/src/_ts_decorate.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..2d7763f3516b49384460263ea06c64f127a04c9c
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_decorate.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_decorate.js";
diff --git a/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs b/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..ba5ec13678ca62b0644c48cbdf0a98644714bae0
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_dispose_resources.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_dispose_resources.js";
diff --git a/node_modules/@swc/helpers/src/_ts_generator.mjs b/node_modules/@swc/helpers/src/_ts_generator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f595f6d8753215b2a79f2da4cf49f184d2daf5ba
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_generator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_generator.js";
diff --git a/node_modules/@swc/helpers/src/_ts_metadata.mjs b/node_modules/@swc/helpers/src/_ts_metadata.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..424457eba9d0fa2c29b2ed25b383808841f2187f
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_metadata.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_metadata.js";
diff --git a/node_modules/@swc/helpers/src/_ts_param.mjs b/node_modules/@swc/helpers/src/_ts_param.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..1806317955415fb518eca6bb4cae127028347142
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_param.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_param.js";
diff --git a/node_modules/@swc/helpers/src/_ts_values.mjs b/node_modules/@swc/helpers/src/_ts_values.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..126c78379e63dd43b24acbcc25f6e0599b2eec44
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_ts_values.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_ts_values.js";
diff --git a/node_modules/@swc/helpers/src/_type_of.mjs b/node_modules/@swc/helpers/src/_type_of.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..4f8a93659e2c913833a8bdcc9018f4e878c6b2f1
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_type_of.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_type_of.js";
diff --git a/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs b/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..9e4222212cd297cb99ae171756f0aae9f3e723d8
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_unsupported_iterable_to_array.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_unsupported_iterable_to_array.js";
diff --git a/node_modules/@swc/helpers/src/_update.mjs b/node_modules/@swc/helpers/src/_update.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..6adb4a428daadcf4d8a340f101cd0da3afa19b92
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_update.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_update.js";
diff --git a/node_modules/@swc/helpers/src/_using.mjs b/node_modules/@swc/helpers/src/_using.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..f71681556fd04759dc6b2d0e0279318f172d4c9a
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_using.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_using.js";
diff --git a/node_modules/@swc/helpers/src/_using_ctx.mjs b/node_modules/@swc/helpers/src/_using_ctx.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..87e80979e1a8fed77a193cc930bbbccd014ed668
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_using_ctx.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_using_ctx.js";
diff --git a/node_modules/@swc/helpers/src/_wrap_async_generator.mjs b/node_modules/@swc/helpers/src/_wrap_async_generator.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..44acb1ab4aac6c7aa242be492b621cdbb4418ded
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_wrap_async_generator.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_wrap_async_generator.js";
diff --git a/node_modules/@swc/helpers/src/_wrap_native_super.mjs b/node_modules/@swc/helpers/src/_wrap_native_super.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..266f5d3b74eda2dd9c46f3ff904a6ccc63ec3993
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_wrap_native_super.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_wrap_native_super.js";
diff --git a/node_modules/@swc/helpers/src/_write_only_error.mjs b/node_modules/@swc/helpers/src/_write_only_error.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..68c8af268662b7f0a016ce35f5c3ea6e388cf352
--- /dev/null
+++ b/node_modules/@swc/helpers/src/_write_only_error.mjs
@@ -0,0 +1 @@
+export { _ as default } from "../esm/_write_only_error.js";
diff --git a/node_modules/@swc/helpers/src/index.mjs b/node_modules/@swc/helpers/src/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d0d0812948c6fe0d4ce5f0fde507a21166548781
--- /dev/null
+++ b/node_modules/@swc/helpers/src/index.mjs
@@ -0,0 +1 @@
+export * from "../esm/index.js";
diff --git a/node_modules/@types/prop-types/LICENSE b/node_modules/@types/prop-types/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/node_modules/@types/prop-types/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/node_modules/@types/prop-types/README.md b/node_modules/@types/prop-types/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d1ea04961e58fdeff6f50c35998e0b051e81a76
--- /dev/null
+++ b/node_modules/@types/prop-types/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/prop-types`
+
+# Summary
+This package contains type definitions for prop-types (https://github.com/facebook/prop-types).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/prop-types.
+
+### Additional Details
+ * Last updated: Mon, 16 Sep 2024 19:07:13 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [DovydasNavickas](https://github.com/DovydasNavickas), [Ferdy Budhidharma](https://github.com/ferdaber), and [Sebastian Silbermann](https://github.com/eps1lon).
diff --git a/node_modules/@types/prop-types/index.d.ts b/node_modules/@types/prop-types/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..26d067fb0519cbd282350f989fb4f0718bb41c58
--- /dev/null
+++ b/node_modules/@types/prop-types/index.d.ts
@@ -0,0 +1,114 @@
+// eslint-disable-next-line @definitelytyped/export-just-namespace
+export = PropTypes;
+
+declare namespace PropTypes {
+    type ReactComponentLike =
+        | string
+        | ((props: any, context?: any) => any)
+        | (new(props: any, context?: any) => any);
+
+    interface ReactElementLike {
+        type: ReactComponentLike;
+        props: any;
+        key: string | null;
+    }
+
+    interface ReactNodeArray extends Iterable<ReactNodeLike> {}
+
+    type ReactNodeLike =
+        | ReactElementLike
+        | ReactNodeArray
+        | string
+        | number
+        | boolean
+        | null
+        | undefined;
+
+    const nominalTypeHack: unique symbol;
+
+    type IsOptional<T> = undefined extends T ? true : false;
+
+    type RequiredKeys<V> = {
+        [K in keyof V]-?: Exclude<V[K], undefined> extends Validator<infer T> ? IsOptional<T> extends true ? never : K
+            : never;
+    }[keyof V];
+    type OptionalKeys<V> = Exclude<keyof V, RequiredKeys<V>>;
+    type InferPropsInner<V> = { [K in keyof V]-?: InferType<V[K]> };
+
+    interface Validator<T> {
+        (
+            props: { [key: string]: any },
+            propName: string,
+            componentName: string,
+            location: string,
+            propFullName: string,
+        ): Error | null;
+        [nominalTypeHack]?: {
+            type: T;
+        } | undefined;
+    }
+
+    interface Requireable<T> extends Validator<T | undefined | null> {
+        isRequired: Validator<NonNullable<T>>;
+    }
+
+    type ValidationMap<T> = { [K in keyof T]?: Validator<T[K]> };
+
+    /**
+     * Like {@link ValidationMap} but treats `undefined`, `null` and optional properties the same.
+     * This type is only added as a migration path in React 19 where this type was removed from React.
+     * Runtime and compile time types would mismatch since you could see `undefined` at runtime when your types don't expect this type.
+     */
+    type WeakValidationMap<T> = {
+        [K in keyof T]?: null extends T[K] ? Validator<T[K] | null | undefined>
+            : undefined extends T[K] ? Validator<T[K] | null | undefined>
+            : Validator<T[K]>;
+    };
+
+    type InferType<V> = V extends Validator<infer T> ? T : any;
+    type InferProps<V> =
+        & InferPropsInner<Pick<V, RequiredKeys<V>>>
+        & Partial<InferPropsInner<Pick<V, OptionalKeys<V>>>>;
+
+    const any: Requireable<any>;
+    const array: Requireable<any[]>;
+    const bool: Requireable<boolean>;
+    const func: Requireable<(...args: any[]) => any>;
+    const number: Requireable<number>;
+    const object: Requireable<object>;
+    const string: Requireable<string>;
+    const node: Requireable<ReactNodeLike>;
+    const element: Requireable<ReactElementLike>;
+    const symbol: Requireable<symbol>;
+    const elementType: Requireable<ReactComponentLike>;
+    function instanceOf<T>(expectedClass: new(...args: any[]) => T): Requireable<T>;
+    function oneOf<T>(types: readonly T[]): Requireable<T>;
+    function oneOfType<T extends Validator<any>>(types: T[]): Requireable<NonNullable<InferType<T>>>;
+    function arrayOf<T>(type: Validator<T>): Requireable<T[]>;
+    function objectOf<T>(type: Validator<T>): Requireable<{ [K in keyof any]: T }>;
+    function shape<P extends ValidationMap<any>>(type: P): Requireable<InferProps<P>>;
+    function exact<P extends ValidationMap<any>>(type: P): Requireable<Required<InferProps<P>>>;
+
+    /**
+     * Assert that the values match with the type specs.
+     * Error messages are memorized and will only be shown once.
+     *
+     * @param typeSpecs Map of name to a ReactPropType
+     * @param values Runtime values that need to be type-checked
+     * @param location e.g. "prop", "context", "child context"
+     * @param componentName Name of the component for error messages
+     * @param getStack Returns the component stack
+     */
+    function checkPropTypes(
+        typeSpecs: any,
+        values: any,
+        location: string,
+        componentName: string,
+        getStack?: () => any,
+    ): void;
+
+    /**
+     * Only available if NODE_ENV=production
+     */
+    function resetWarningCache(): void;
+}
diff --git a/node_modules/@types/prop-types/package.json b/node_modules/@types/prop-types/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..7508d1fb281080617978a348fdd3b53ecde72b21
--- /dev/null
+++ b/node_modules/@types/prop-types/package.json
@@ -0,0 +1,61 @@
+{
+  "_from": "@types/prop-types@*",
+  "_id": "@types/prop-types@15.7.13",
+  "_inBundle": false,
+  "_integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
+  "_location": "/@types/prop-types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/prop-types@*",
+    "name": "@types/prop-types",
+    "escapedName": "@types%2fprop-types",
+    "scope": "@types",
+    "rawSpec": "*",
+    "saveSpec": null,
+    "fetchSpec": "*"
+  },
+  "_requiredBy": [
+    "/@types/react"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
+  "_shasum": "2af91918ee12d9d32914feb13f5326658461b451",
+  "_spec": "@types/prop-types@*",
+  "_where": "/home/ethan2.clay/flask/node_modules/@types/react",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "DovydasNavickas",
+      "url": "https://github.com/DovydasNavickas"
+    },
+    {
+      "name": "Ferdy Budhidharma",
+      "url": "https://github.com/ferdaber"
+    },
+    {
+      "name": "Sebastian Silbermann",
+      "url": "https://github.com/eps1lon"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "TypeScript definitions for prop-types",
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/prop-types",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/prop-types",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/prop-types"
+  },
+  "scripts": {},
+  "typeScriptVersion": "4.8",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "463997a2d1b4bb7e18554d9d12146cc74169e8bda6a4b9008306c38797ae14d3",
+  "version": "15.7.13"
+}
diff --git a/node_modules/@types/react-transition-group/CSSTransition.d.ts b/node_modules/@types/react-transition-group/CSSTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..edc122fbc477d060d9a3ff252747dac54e37e774
--- /dev/null
+++ b/node_modules/@types/react-transition-group/CSSTransition.d.ts
@@ -0,0 +1,45 @@
+import { Component } from "react";
+import { TransitionProps } from "./Transition";
+
+export interface CSSTransitionClassNames {
+    appear?: string | undefined;
+    appearActive?: string | undefined;
+    appearDone?: string | undefined;
+    enter?: string | undefined;
+    enterActive?: string | undefined;
+    enterDone?: string | undefined;
+    exit?: string | undefined;
+    exitActive?: string | undefined;
+    exitDone?: string | undefined;
+}
+
+export type CSSTransitionProps<Ref extends undefined | HTMLElement = undefined> = TransitionProps<Ref> & {
+    /**
+     * The animation `classNames` applied to the component as it enters or exits.
+     * A single name can be provided and it will be suffixed for each stage: e.g.
+     *
+     * `classNames="fade"` applies `fade-enter`, `fade-enter-active`,
+     * `fade-exit`, `fade-exit-active`, `fade-appear`, and `fade-appear-active`.
+     *
+     * Each individual classNames can also be specified independently like:
+     *
+     * ```js
+     * classNames={{
+     *   appear: 'my-appear',
+     *   appearActive: 'my-appear-active',
+     *   appearDone: 'my-appear-done',
+     *   enter: 'my-enter',
+     *   enterActive: 'my-enter-active',
+     *   enterDone: 'my-enter-done',
+     *   exit: 'my-exit',
+     *   exitActive: 'my-exit-active',
+     *   exitDone: 'my-exit-done'
+     * }}
+     * ```
+     */
+    classNames?: string | CSSTransitionClassNames | undefined;
+};
+
+declare class CSSTransition<Ref extends undefined | HTMLElement> extends Component<CSSTransitionProps<Ref>> {}
+
+export default CSSTransition;
diff --git a/node_modules/@types/react-transition-group/LICENSE b/node_modules/@types/react-transition-group/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/node_modules/@types/react-transition-group/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/node_modules/@types/react-transition-group/README.md b/node_modules/@types/react-transition-group/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..89460c930c62aa9ef7bf18724345c9404e4f8d45
--- /dev/null
+++ b/node_modules/@types/react-transition-group/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/react-transition-group`
+
+# Summary
+This package contains type definitions for react-transition-group (https://github.com/reactjs/react-transition-group).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-transition-group.
+
+### Additional Details
+ * Last updated: Sat, 10 Aug 2024 14:07:19 GMT
+ * Dependencies: [@types/react](https://npmjs.com/package/@types/react)
+
+# Credits
+These definitions were written by [Karol Janyst](https://github.com/LKay), [Epskampie](https://github.com/Epskampie), [Masafumi Koba](https://github.com/ybiquitous), and [Ben Grynhaus](https://github.com/bengry).
diff --git a/node_modules/@types/react-transition-group/SwitchTransition.d.ts b/node_modules/@types/react-transition-group/SwitchTransition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eba92cf4d2d1f00c02a0821726fc91fce801d8a5
--- /dev/null
+++ b/node_modules/@types/react-transition-group/SwitchTransition.d.ts
@@ -0,0 +1,49 @@
+import { Component, ReactElement } from "react";
+
+export enum modes {
+    out = "out-in",
+    in = "in-out",
+}
+
+export interface SwitchTransitionProps {
+    /**
+     * Transition modes.
+     * `out-in`: Current element transitions out first, then when complete, the new element transitions in.
+     * `in-out`: New element transitions in first, then when complete, the current element transitions out.
+     */
+    mode?: "out-in" | "in-out" | undefined;
+
+    /**
+     * Any `Transition` or `CSSTransition` component
+     */
+    children: ReactElement;
+}
+
+/**
+ * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).
+ * You can use it when you want to control the render between state transitions.
+ * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.
+ *
+ * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.
+ * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child
+ *
+ * ```jsx
+ * function App() {
+ *  const [state, setState] = useState(false);
+ *  return (
+ *    <SwitchTransition>
+ *      <FadeTransition key={state ? "Goodbye, world!" : "Hello, world!"}
+ *        addEndListener={(node, done) => node.addEventListener("transitionend", done, false)}
+ *        classNames='fade' >
+ *        <button onClick={() => setState(state => !state)}>
+ *          {state ? "Goodbye, world!" : "Hello, world!"}
+ *        </button>
+ *      </FadeTransition>
+ *    </SwitchTransition>
+ *  )
+ * }
+ * ```
+ */
+declare class SwitchTransition extends Component<SwitchTransitionProps> {}
+
+export default SwitchTransition;
diff --git a/node_modules/@types/react-transition-group/Transition.d.ts b/node_modules/@types/react-transition-group/Transition.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2bc3d62c3dc7b32014cc0e395a55dcf40a18c74d
--- /dev/null
+++ b/node_modules/@types/react-transition-group/Transition.d.ts
@@ -0,0 +1,250 @@
+import { Component, ReactNode } from "react";
+
+type RefHandler<
+    RefElement extends undefined | HTMLElement,
+    ImplicitRefHandler extends (node: HTMLElement, ...args: any[]) => void,
+    ExplicitRefHandler extends (...args: any[]) => void,
+> = {
+    implicit: ImplicitRefHandler;
+    explicit: ExplicitRefHandler;
+}[RefElement extends undefined ? "implicit" : "explicit"];
+
+export type EndHandler<RefElement extends undefined | HTMLElement> = RefHandler<
+    RefElement,
+    (node: HTMLElement, done: () => void) => void,
+    (done: () => void) => void
+>;
+
+export type EnterHandler<RefElement extends undefined | HTMLElement> = RefHandler<
+    RefElement,
+    (node: HTMLElement, isAppearing: boolean) => void,
+    (isAppearing: boolean) => void
+>;
+
+export type ExitHandler<E extends undefined | HTMLElement> = RefHandler<E, (node: HTMLElement) => void, () => void>;
+
+export const UNMOUNTED = "unmounted";
+export const EXITED = "exited";
+export const ENTERING = "entering";
+export const ENTERED = "entered";
+export const EXITING = "exiting";
+
+export interface TransitionActions {
+    /**
+     * Normally a component is not transitioned if it is shown when the
+     * `<Transition>` component mounts. If you want to transition on the first
+     * mount set  appear to true, and the component will transition in as soon
+     * as the `<Transition>` mounts. Note: there are no specific "appear" states.
+     * appear only adds an additional enter transition.
+     */
+    appear?: boolean | undefined;
+
+    /**
+     * Enable or disable enter transitions.
+     */
+    enter?: boolean | undefined;
+
+    /**
+     * Enable or disable exit transitions.
+     */
+    exit?: boolean | undefined;
+}
+
+interface BaseTransitionProps<RefElement extends undefined | HTMLElement> extends TransitionActions {
+    /**
+     * Show the component; triggers the enter or exit states
+     */
+    in?: boolean | undefined;
+
+    /**
+     * By default the child component is mounted immediately along with the
+     * parent Transition component. If you want to "lazy mount" the component on
+     * the first `in={true}` you can set `mountOnEnter`. After the first enter
+     * transition the component will stay mounted, even on "exited", unless you
+     * also specify `unmountOnExit`.
+     */
+    mountOnEnter?: boolean | undefined;
+
+    /**
+     * By default the child component stays mounted after it reaches the
+     * 'exited' state. Set `unmountOnExit` if you'd prefer to unmount the
+     * component after it finishes exiting.
+     */
+    unmountOnExit?: boolean | undefined;
+
+    /**
+     * Callback fired before the "entering" status is applied. An extra
+     * parameter `isAppearing` is supplied to indicate if the enter stage is
+     * occurring on the initial mount
+     */
+    onEnter?: EnterHandler<RefElement> | undefined;
+
+    /**
+     * Callback fired after the "entering" status is applied. An extra parameter
+     * isAppearing is supplied to indicate if the enter stage is occurring on
+     * the initial mount
+     */
+    onEntering?: EnterHandler<RefElement> | undefined;
+
+    /**
+     * Callback fired after the "entered" status is applied. An extra parameter
+     * isAppearing is supplied to indicate if the enter stage is occurring on
+     * the initial mount
+     */
+    onEntered?: EnterHandler<RefElement> | undefined;
+
+    /**
+     * Callback fired before the "exiting" status is applied.
+     */
+    onExit?: ExitHandler<RefElement> | undefined;
+
+    /**
+     * Callback fired after the "exiting" status is applied.
+     */
+    onExiting?: ExitHandler<RefElement> | undefined;
+
+    /**
+     * Callback fired after the "exited" status is applied.
+     */
+    onExited?: ExitHandler<RefElement> | undefined;
+
+    /**
+     * A function child can be used instead of a React element. This function is
+     * called with the current transition status ('entering', 'entered',
+     * 'exiting',  'exited', 'unmounted'), which can be used to apply context
+     * specific props to a component.
+     * ```jsx
+     *    <Transition in={this.state.in} timeout={150}>
+     *        {state => (
+     *            <MyComponent className={`fade fade-${state}`} />
+     *        )}
+     *    </Transition>
+     * ```
+     */
+    children?: TransitionChildren | undefined;
+
+    /**
+     * A React reference to DOM element that need to transition: https://stackoverflow.com/a/51127130/4671932
+     * When `nodeRef` prop is used, node is not passed to callback functions (e.g. onEnter) because user already has direct access to the node.
+     * When changing `key` prop of `Transition` in a `TransitionGroup` a new `nodeRef` need to be provided to `Transition` with changed `key`
+     * prop (@see https://github.com/reactjs/react-transition-group/blob/master/test/Transition-test.js).
+     */
+    nodeRef?: React.Ref<RefElement> | undefined;
+
+    [prop: string]: any;
+}
+
+export type TransitionStatus = typeof ENTERING | typeof ENTERED | typeof EXITING | typeof EXITED | typeof UNMOUNTED;
+export type TransitionChildren =
+    | ReactNode
+    | ((status: TransitionStatus, childProps?: Record<string, unknown>) => ReactNode);
+
+export interface TimeoutProps<RefElement extends undefined | HTMLElement> extends BaseTransitionProps<RefElement> {
+    /**
+     * The duration of the transition, in milliseconds. Required unless addEndListener is provided.
+     *
+     * You may specify a single timeout for all transitions:
+     * ```js
+     *   timeout={500}
+     * ```
+     * or individually:
+     * ```js
+     * timeout={{
+     *  appear: 500,
+     *  enter: 300,
+     *  exit: 500,
+     * }}
+     * ```
+     * - appear defaults to the value of `enter`
+     * - enter defaults to `0`
+     * - exit defaults to `0`
+     */
+    timeout: number | { appear?: number | undefined; enter?: number | undefined; exit?: number | undefined };
+
+    /**
+     * Add a custom transition end trigger. Called with the transitioning DOM
+     * node and a done callback. Allows for more fine grained transition end
+     * logic. Note: Timeouts are still used as a fallback if provided.
+     */
+    addEndListener?: EndHandler<RefElement> | undefined;
+}
+
+export interface EndListenerProps<Ref extends undefined | HTMLElement> extends BaseTransitionProps<Ref> {
+    /**
+     * The duration of the transition, in milliseconds. Required unless addEndListener is provided.
+     *
+     * You may specify a single timeout for all transitions:
+     * ```js
+     *   timeout={500}
+     * ```
+     * or individually:
+     * ```js
+     * timeout={{
+     *  appear: 500,
+     *  enter: 300,
+     *  exit: 500,
+     * }}
+     * ```
+     * - appear defaults to the value of `enter`
+     * - enter defaults to `0`
+     * - exit defaults to `0`
+     */
+    timeout?:
+        | number
+        | { appear?: number | undefined; enter?: number | undefined; exit?: number | undefined }
+        | undefined;
+    /**
+     * Add a custom transition end trigger. Called with the transitioning DOM
+     * node and a done callback. Allows for more fine grained transition end
+     * logic. Note: Timeouts are still used as a fallback if provided.
+     */
+    addEndListener: EndHandler<Ref>;
+}
+
+export type TransitionProps<RefElement extends undefined | HTMLElement = undefined> =
+    | TimeoutProps<RefElement>
+    | EndListenerProps<RefElement>;
+
+/**
+ * The Transition component lets you describe a transition from one component
+ * state to another _over time_ with a simple declarative API. Most commonly
+ * It's used to animate the mounting and unmounting of Component, but can also
+ * be used to describe in-place transition states as well.
+ *
+ * By default the `Transition` component does not alter the behavior of the
+ * component it renders, it only tracks "enter" and "exit" states for the components.
+ * It's up to you to give meaning and effect to those states. For example we can
+ * add styles to a component when it enters or exits:
+ *
+ * ```jsx
+ * import Transition from 'react-transition-group/Transition';
+ *
+ * const duration = 300;
+ *
+ * const defaultStyle = {
+ *   transition: `opacity ${duration}ms ease-in-out`,
+ *   opacity: 0,
+ * }
+ *
+ * const transitionStyles = {
+ *   entering: { opacity: 1 },
+ *   entered:  { opacity: 1 },
+ * };
+ *
+ * const Fade = ({ in: inProp }) => (
+ *   <Transition in={inProp} timeout={duration}>
+ *     {(state) => (
+ *       <div style={{
+ *         ...defaultStyle,
+ *         ...transitionStyles[state]
+ *       }}>
+ *         I'm A fade Transition!
+ *       </div>
+ *     )}
+ *   </Transition>
+ * );
+ * ```
+ */
+declare class Transition<RefElement extends HTMLElement | undefined> extends Component<TransitionProps<RefElement>> {}
+
+export default Transition;
diff --git a/node_modules/@types/react-transition-group/TransitionGroup.d.ts b/node_modules/@types/react-transition-group/TransitionGroup.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a3ab86438e59cb0b0a7f9c8e3ee1be182bc3d344
--- /dev/null
+++ b/node_modules/@types/react-transition-group/TransitionGroup.d.ts
@@ -0,0 +1,81 @@
+import { Component, ElementType, JSX, ReactElement } from "react";
+import { TransitionActions, TransitionProps } from "./Transition";
+
+export interface IntrinsicTransitionGroupProps<T extends keyof JSX.IntrinsicElements = "div">
+    extends TransitionActions
+{
+    component?: T | null | undefined;
+}
+
+export interface ComponentTransitionGroupProps<T extends ElementType> extends TransitionActions {
+    component: T;
+}
+
+export type TransitionGroupProps<T extends keyof JSX.IntrinsicElements = "div", V extends ElementType = any> =
+    | (IntrinsicTransitionGroupProps<T> & JSX.IntrinsicElements[T])
+    | (ComponentTransitionGroupProps<V>) & {
+        children?: ReactElement<TransitionProps<any>> | Array<ReactElement<TransitionProps<any>>> | undefined;
+        childFactory?(child: ReactElement): ReactElement;
+        [prop: string]: any;
+    };
+
+/**
+ * The `<TransitionGroup>` component manages a set of `<Transition>` components
+ * in a list. Like with the `<Transition>` component, `<TransitionGroup>`, is a
+ * state machine for managing the mounting and unmounting of components over
+ * time.
+ *
+ * Consider the example below using the `Fade` CSS transition from before.
+ * As items are removed or added to the TodoList the `in` prop is toggled
+ * automatically by the `<TransitionGroup>`. You can use _any_ `<Transition>`
+ * component in a `<TransitionGroup>`, not just css.
+ *
+ * ```jsx
+ * import TransitionGroup from 'react-transition-group/TransitionGroup';
+ *
+ * class TodoList extends React.Component {
+ *   constructor(props) {
+ *     super(props)
+ *     this.state = {items: ['hello', 'world', 'click', 'me']}
+ *   }
+ *   handleAdd() {
+ *     const newItems = this.state.items.concat([
+ *       prompt('Enter some text')
+ *     ]);
+ *     this.setState({ items: newItems });
+ *   }
+ *   handleRemove(i) {
+ *     let newItems = this.state.items.slice();
+ *     newItems.splice(i, 1);
+ *     this.setState({items: newItems});
+ *   }
+ *   render() {
+ *     return (
+ *       <div>
+ *         <button onClick={() => this.handleAdd()}>Add Item</button>
+ *         <TransitionGroup>
+ *           {this.state.items.map((item, i) => (
+ *             <FadeTransition key={item}>
+ *               <div>
+ *                 {item}{' '}
+ *                 <button onClick={() => this.handleRemove(i)}>
+ *                   remove
+ *                 </button>
+ *               </div>
+ *             </FadeTransition>
+ *           ))}
+ *         </TransitionGroup>
+ *       </div>
+ *     );
+ *   }
+ * }
+ * ```
+ *
+ * Note that `<TransitionGroup>`  does not define any animation behavior!
+ * Exactly _how_ a list item animates is up to the individual `<Transition>`
+ * components. This means you can mix and match animations across different
+ * list items.
+ */
+declare class TransitionGroup extends Component<TransitionGroupProps> {}
+
+export default TransitionGroup;
diff --git a/node_modules/@types/react-transition-group/config.d.ts b/node_modules/@types/react-transition-group/config.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..432ce5f9e0857640e87565e1faeb379dd98b3419
--- /dev/null
+++ b/node_modules/@types/react-transition-group/config.d.ts
@@ -0,0 +1,6 @@
+export interface Config {
+    disabled: boolean;
+}
+
+declare const config: Config;
+export default config;
diff --git a/node_modules/@types/react-transition-group/index.d.ts b/node_modules/@types/react-transition-group/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f5bfd9d65ba69c5655ac1b073f8dc362b528d817
--- /dev/null
+++ b/node_modules/@types/react-transition-group/index.d.ts
@@ -0,0 +1,5 @@
+export { default as config } from "./config";
+export { default as CSSTransition } from "./CSSTransition";
+export { default as SwitchTransition } from "./SwitchTransition";
+export { default as Transition, TransitionStatus } from "./Transition";
+export { default as TransitionGroup } from "./TransitionGroup";
diff --git a/node_modules/@types/react-transition-group/package.json b/node_modules/@types/react-transition-group/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..06fece7dd95016ce54d754bc30b5da637a1d7ccd
--- /dev/null
+++ b/node_modules/@types/react-transition-group/package.json
@@ -0,0 +1,67 @@
+{
+  "_from": "@types/react-transition-group@^4.4.6",
+  "_id": "@types/react-transition-group@4.4.11",
+  "_inBundle": false,
+  "_integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==",
+  "_location": "/@types/react-transition-group",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/react-transition-group@^4.4.6",
+    "name": "@types/react-transition-group",
+    "escapedName": "@types%2freact-transition-group",
+    "scope": "@types",
+    "rawSpec": "^4.4.6",
+    "saveSpec": null,
+    "fetchSpec": "^4.4.6"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz",
+  "_shasum": "d963253a611d757de01ebb241143b1017d5d63d5",
+  "_spec": "@types/react-transition-group@^4.4.6",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Karol Janyst",
+      "url": "https://github.com/LKay"
+    },
+    {
+      "name": "Epskampie",
+      "url": "https://github.com/Epskampie"
+    },
+    {
+      "name": "Masafumi Koba",
+      "url": "https://github.com/ybiquitous"
+    },
+    {
+      "name": "Ben Grynhaus",
+      "url": "https://github.com/bengry"
+    }
+  ],
+  "dependencies": {
+    "@types/react": "*"
+  },
+  "deprecated": false,
+  "description": "TypeScript definitions for react-transition-group",
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-transition-group",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/react-transition-group",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/react-transition-group"
+  },
+  "scripts": {},
+  "typeScriptVersion": "4.8",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "03da65f6e9cecec22acd2ddfa711f1222ce6bcbd206cfef6e6e3d66f087b0de5",
+  "version": "4.4.11"
+}
diff --git a/node_modules/@types/react/LICENSE b/node_modules/@types/react/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/node_modules/@types/react/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/node_modules/@types/react/README.md b/node_modules/@types/react/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..c752f3df5dd85db25d3772c7b9f8c8cddbcae848
--- /dev/null
+++ b/node_modules/@types/react/README.md
@@ -0,0 +1,15 @@
+# Installation
+> `npm install --save @types/react`
+
+# Summary
+This package contains type definitions for react (https://react.dev/).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react.
+
+### Additional Details
+ * Last updated: Wed, 23 Oct 2024 03:36:41 GMT
+ * Dependencies: [@types/prop-types](https://npmjs.com/package/@types/prop-types), [csstype](https://npmjs.com/package/csstype)
+
+# Credits
+These definitions were written by [Asana](https://asana.com), [AssureSign](http://www.assuresign.com), [Microsoft](https://microsoft.com), [John Reilly](https://github.com/johnnyreilly), [Benoit Benezech](https://github.com/bbenezech), [Patricio Zavolinsky](https://github.com/pzavolinsky), [Eric Anderson](https://github.com/ericanderson), [Dovydas Navickas](https://github.com/DovydasNavickas), [Josh Rutherford](https://github.com/theruther4d), [Guilherme Hübner](https://github.com/guilhermehubner), [Ferdy Budhidharma](https://github.com/ferdaber), [Johann Rakotoharisoa](https://github.com/jrakotoharisoa), [Olivier Pascal](https://github.com/pascaloliv), [Martin Hochel](https://github.com/hotell), [Frank Li](https://github.com/franklixuefei), [Jessica Franco](https://github.com/Jessidhia), [Saransh Kataria](https://github.com/saranshkataria), [Kanitkorn Sujautra](https://github.com/lukyth), [Sebastian Silbermann](https://github.com/eps1lon), [Kyle Scully](https://github.com/zieka), [Cong Zhang](https://github.com/dancerphil), [Dimitri Mitropoulos](https://github.com/dimitropoulos), [JongChan Choi](https://github.com/disjukr), [Victor Magalhães](https://github.com/vhfmag), [Priyanshu Rav](https://github.com/priyanshurav), [Dmitry Semigradsky](https://github.com/Semigradsky), and [Matt Pocock](https://github.com/mattpocock).
diff --git a/node_modules/@types/react/canary.d.ts b/node_modules/@types/react/canary.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..74795b53f98034f287bea2ca7025a8124e695a0f
--- /dev/null
+++ b/node_modules/@types/react/canary.d.ts
@@ -0,0 +1,166 @@
+/**
+ * These are types for things that are present in the React `canary` release channel.
+ *
+ * To load the types declared here in an actual project, there are three ways. The easiest one,
+ * if your `tsconfig.json` already has a `"types"` array in the `"compilerOptions"` section,
+ * is to add `"react/canary"` to the `"types"` array.
+ *
+ * Alternatively, a specific import syntax can to be used from a typescript file.
+ * This module does not exist in reality, which is why the {} is important:
+ *
+ * ```ts
+ * import {} from 'react/canary'
+ * ```
+ *
+ * It is also possible to include it through a triple-slash reference:
+ *
+ * ```ts
+ * /// <reference types="react/canary" />
+ * ```
+ *
+ * Either the import or the reference only needs to appear once, anywhere in the project.
+ */
+
+// See https://github.com/facebook/react/blob/main/packages/react/src/React.js to see how the exports are declared,
+
+import React = require(".");
+
+export {};
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+type NativeToggleEvent = ToggleEvent;
+
+declare module "." {
+    export type Usable<T> = PromiseLike<T> | Context<T>;
+
+    export function use<T>(usable: Usable<T>): T;
+
+    interface ServerContextJSONArray extends ReadonlyArray<ServerContextJSONValue> {}
+    export type ServerContextJSONValue =
+        | string
+        | boolean
+        | number
+        | null
+        | ServerContextJSONArray
+        | { [key: string]: ServerContextJSONValue };
+    export interface ServerContext<T extends ServerContextJSONValue> {
+        Provider: Provider<T>;
+    }
+    /**
+     * Accepts a context object (the value returned from `React.createContext` or `React.createServerContext`) and returns the current
+     * context value, as given by the nearest context provider for the given context.
+     *
+     * @version 16.8.0
+     * @see https://react.dev/reference/react/useContext
+     */
+    function useContext<T extends ServerContextJSONValue>(context: ServerContext<T>): T;
+    export function createServerContext<T extends ServerContextJSONValue>(
+        globalName: string,
+        defaultValue: T,
+    ): ServerContext<T>;
+
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    export function cache<CachedFunction extends Function>(fn: CachedFunction): CachedFunction;
+
+    export function unstable_useCacheRefresh(): () => void;
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS {
+        functions: (formData: FormData) => void | Promise<void>;
+    }
+
+    export interface TransitionStartFunction {
+        /**
+         * Marks all state updates inside the async function as transitions
+         *
+         * @see {https://react.dev/reference/react/useTransition#starttransition}
+         *
+         * @param callback
+         */
+        (callback: () => Promise<VoidOrUndefinedOnly>): void;
+    }
+
+    /**
+     * Similar to `useTransition` but allows uses where hooks are not available.
+     *
+     * @param callback An _asynchronous_ function which causes state updates that can be deferred.
+     */
+    export function startTransition(scope: () => Promise<VoidOrUndefinedOnly>): void;
+
+    export function useOptimistic<State>(
+        passthrough: State,
+    ): [State, (action: State | ((pendingState: State) => State)) => void];
+    export function useOptimistic<State, Action>(
+        passthrough: State,
+        reducer: (state: State, action: Action) => State,
+    ): [State, (action: Action) => void];
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES {
+        cleanup: () => VoidOrUndefinedOnly;
+    }
+
+    export function useActionState<State>(
+        action: (state: Awaited<State>) => State | Promise<State>,
+        initialState: Awaited<State>,
+        permalink?: string,
+    ): [state: Awaited<State>, dispatch: () => void, isPending: boolean];
+    export function useActionState<State, Payload>(
+        action: (state: Awaited<State>, payload: Payload) => State | Promise<State>,
+        initialState: Awaited<State>,
+        permalink?: string,
+    ): [state: Awaited<State>, dispatch: (payload: Payload) => void, isPending: boolean];
+
+    interface DOMAttributes<T> {
+        // Transition Events
+        onTransitionCancel?: TransitionEventHandler<T> | undefined;
+        onTransitionCancelCapture?: TransitionEventHandler<T> | undefined;
+        onTransitionRun?: TransitionEventHandler<T> | undefined;
+        onTransitionRunCapture?: TransitionEventHandler<T> | undefined;
+        onTransitionStart?: TransitionEventHandler<T> | undefined;
+        onTransitionStartCapture?: TransitionEventHandler<T> | undefined;
+    }
+
+    type ToggleEventHandler<T = Element> = EventHandler<ToggleEvent<T>>;
+
+    interface HTMLAttributes<T> {
+        popover?: "" | "auto" | "manual" | undefined;
+        popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
+        popoverTarget?: string | undefined;
+        onToggle?: ToggleEventHandler<T> | undefined;
+        onBeforeToggle?: ToggleEventHandler<T> | undefined;
+    }
+
+    interface ToggleEvent<T = Element> extends SyntheticEvent<T, NativeToggleEvent> {
+        oldState: "closed" | "open";
+        newState: "closed" | "open";
+    }
+
+    interface LinkHTMLAttributes<T> {
+        precedence?: string | undefined;
+    }
+
+    interface StyleHTMLAttributes<T> {
+        href?: string | undefined;
+        precedence?: string | undefined;
+    }
+
+    /**
+     * @internal Use `Awaited<ReactNode>` instead
+     */
+    // Helper type to enable `Awaited<ReactNode>`.
+    // Must be a copy of the non-thenables of `ReactNode`.
+    type AwaitedReactNode =
+        | ReactElement
+        | string
+        | number
+        | Iterable<AwaitedReactNode>
+        | ReactPortal
+        | boolean
+        | null
+        | undefined;
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES {
+        promises: Promise<AwaitedReactNode>;
+        bigints: bigint;
+    }
+}
diff --git a/node_modules/@types/react/experimental.d.ts b/node_modules/@types/react/experimental.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0bc4ba6a815798da0f834fc6e07c23c8f0da8f20
--- /dev/null
+++ b/node_modules/@types/react/experimental.d.ts
@@ -0,0 +1,127 @@
+/**
+ * These are types for things that are present in the `experimental` builds of React but not yet
+ * on a stable build.
+ *
+ * Once they are promoted to stable they can just be moved to the main index file.
+ *
+ * To load the types declared here in an actual project, there are three ways. The easiest one,
+ * if your `tsconfig.json` already has a `"types"` array in the `"compilerOptions"` section,
+ * is to add `"react/experimental"` to the `"types"` array.
+ *
+ * Alternatively, a specific import syntax can to be used from a typescript file.
+ * This module does not exist in reality, which is why the {} is important:
+ *
+ * ```ts
+ * import {} from 'react/experimental'
+ * ```
+ *
+ * It is also possible to include it through a triple-slash reference:
+ *
+ * ```ts
+ * /// <reference types="react/experimental" />
+ * ```
+ *
+ * Either the import or the reference only needs to appear once, anywhere in the project.
+ */
+
+// See https://github.com/facebook/react/blob/master/packages/react/src/React.js to see how the exports are declared,
+// and https://github.com/facebook/react/blob/master/packages/shared/ReactFeatureFlags.js to verify which APIs are
+// flagged experimental or not. Experimental APIs will be tagged with `__EXPERIMENTAL__`.
+//
+// For the inputs of types exported as simply a fiber tag, the `beginWork` function of ReactFiberBeginWork.js
+// is a good place to start looking for details; it generally calls prop validation functions or delegates
+// all tasks done as part of the render phase (the concurrent part of the React update cycle).
+//
+// Suspense-related handling can be found in ReactFiberThrow.js.
+
+import React = require("./canary");
+
+export {};
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+declare module "." {
+    export interface SuspenseProps {
+        /**
+         * The presence of this prop indicates that the content is computationally expensive to render.
+         * In other words, the tree is CPU bound and not I/O bound (e.g. due to fetching data).
+         * @see {@link https://github.com/facebook/react/pull/19936}
+         */
+        unstable_expectedLoadTime?: number | undefined;
+    }
+
+    export type SuspenseListRevealOrder = "forwards" | "backwards" | "together";
+    export type SuspenseListTailMode = "collapsed" | "hidden";
+
+    export interface SuspenseListCommonProps {
+        /**
+         * Note that SuspenseList require more than one child;
+         * it is a runtime warning to provide only a single child.
+         *
+         * It does, however, allow those children to be wrapped inside a single
+         * level of `<React.Fragment>`.
+         */
+        children: ReactElement | Iterable<ReactElement>;
+    }
+
+    interface DirectionalSuspenseListProps extends SuspenseListCommonProps {
+        /**
+         * Defines the order in which the `SuspenseList` children should be revealed.
+         */
+        revealOrder: "forwards" | "backwards";
+        /**
+         * Dictates how unloaded items in a SuspenseList is shown.
+         *
+         * - By default, `SuspenseList` will show all fallbacks in the list.
+         * - `collapsed` shows only the next fallback in the list.
+         * - `hidden` doesn’t show any unloaded items.
+         */
+        tail?: SuspenseListTailMode | undefined;
+    }
+
+    interface NonDirectionalSuspenseListProps extends SuspenseListCommonProps {
+        /**
+         * Defines the order in which the `SuspenseList` children should be revealed.
+         */
+        revealOrder?: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]> | undefined;
+        /**
+         * The tail property is invalid when not using the `forwards` or `backwards` reveal orders.
+         */
+        tail?: never | undefined;
+    }
+
+    export type SuspenseListProps = DirectionalSuspenseListProps | NonDirectionalSuspenseListProps;
+
+    /**
+     * `SuspenseList` helps coordinate many components that can suspend by orchestrating the order
+     * in which these components are revealed to the user.
+     *
+     * When multiple components need to fetch data, this data may arrive in an unpredictable order.
+     * However, if you wrap these items in a `SuspenseList`, React will not show an item in the list
+     * until previous items have been displayed (this behavior is adjustable).
+     *
+     * @see https://reactjs.org/docs/concurrent-mode-reference.html#suspenselist
+     * @see https://reactjs.org/docs/concurrent-mode-patterns.html#suspenselist
+     */
+    export const unstable_SuspenseList: ExoticComponent<SuspenseListProps>;
+
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    export function experimental_useEffectEvent<T extends Function>(event: T): T;
+
+    type Reference = object;
+    type TaintableUniqueValue = string | bigint | ArrayBufferView;
+    function experimental_taintUniqueValue(
+        message: string | undefined,
+        lifetime: Reference,
+        value: TaintableUniqueValue,
+    ): void;
+    function experimental_taintObjectReference(message: string | undefined, object: Reference): void;
+
+    export interface HTMLAttributes<T> {
+        /**
+         * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert
+         */
+        inert?: boolean | undefined;
+    }
+}
diff --git a/node_modules/@types/react/global.d.ts b/node_modules/@types/react/global.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8ae2ddd881cc2bee2a2b20844ee32ad95289e863
--- /dev/null
+++ b/node_modules/@types/react/global.d.ts
@@ -0,0 +1,160 @@
+/*
+React projects that don't include the DOM library need these interfaces to compile.
+React Native applications use React, but there is no DOM available. The JavaScript runtime
+is ES6/ES2015 only. These definitions allow such projects to compile with only `--lib ES6`.
+
+Warning: all of these interfaces are empty. If you want type definitions for various properties
+(such as HTMLInputElement.prototype.value), you need to add `--lib DOM` (via command line or tsconfig.json).
+*/
+
+interface Event {}
+interface AnimationEvent extends Event {}
+interface ClipboardEvent extends Event {}
+interface CompositionEvent extends Event {}
+interface DragEvent extends Event {}
+interface FocusEvent extends Event {}
+interface KeyboardEvent extends Event {}
+interface MouseEvent extends Event {}
+interface TouchEvent extends Event {}
+interface PointerEvent extends Event {}
+interface ToggleEvent extends Event {}
+interface TransitionEvent extends Event {}
+interface UIEvent extends Event {}
+interface WheelEvent extends Event {}
+
+interface EventTarget {}
+interface Document {}
+interface DataTransfer {}
+interface StyleMedia {}
+
+interface Element {}
+interface DocumentFragment {}
+
+interface HTMLElement extends Element {}
+interface HTMLAnchorElement extends HTMLElement {}
+interface HTMLAreaElement extends HTMLElement {}
+interface HTMLAudioElement extends HTMLElement {}
+interface HTMLBaseElement extends HTMLElement {}
+interface HTMLBodyElement extends HTMLElement {}
+interface HTMLBRElement extends HTMLElement {}
+interface HTMLButtonElement extends HTMLElement {}
+interface HTMLCanvasElement extends HTMLElement {}
+interface HTMLDataElement extends HTMLElement {}
+interface HTMLDataListElement extends HTMLElement {}
+interface HTMLDetailsElement extends HTMLElement {}
+interface HTMLDialogElement extends HTMLElement {}
+interface HTMLDivElement extends HTMLElement {}
+interface HTMLDListElement extends HTMLElement {}
+interface HTMLEmbedElement extends HTMLElement {}
+interface HTMLFieldSetElement extends HTMLElement {}
+interface HTMLFormElement extends HTMLElement {}
+interface HTMLHeadingElement extends HTMLElement {}
+interface HTMLHeadElement extends HTMLElement {}
+interface HTMLHRElement extends HTMLElement {}
+interface HTMLHtmlElement extends HTMLElement {}
+interface HTMLIFrameElement extends HTMLElement {}
+interface HTMLImageElement extends HTMLElement {}
+interface HTMLInputElement extends HTMLElement {}
+interface HTMLModElement extends HTMLElement {}
+interface HTMLLabelElement extends HTMLElement {}
+interface HTMLLegendElement extends HTMLElement {}
+interface HTMLLIElement extends HTMLElement {}
+interface HTMLLinkElement extends HTMLElement {}
+interface HTMLMapElement extends HTMLElement {}
+interface HTMLMetaElement extends HTMLElement {}
+interface HTMLMeterElement extends HTMLElement {}
+interface HTMLObjectElement extends HTMLElement {}
+interface HTMLOListElement extends HTMLElement {}
+interface HTMLOptGroupElement extends HTMLElement {}
+interface HTMLOptionElement extends HTMLElement {}
+interface HTMLOutputElement extends HTMLElement {}
+interface HTMLParagraphElement extends HTMLElement {}
+interface HTMLParamElement extends HTMLElement {}
+interface HTMLPreElement extends HTMLElement {}
+interface HTMLProgressElement extends HTMLElement {}
+interface HTMLQuoteElement extends HTMLElement {}
+interface HTMLSlotElement extends HTMLElement {}
+interface HTMLScriptElement extends HTMLElement {}
+interface HTMLSelectElement extends HTMLElement {}
+interface HTMLSourceElement extends HTMLElement {}
+interface HTMLSpanElement extends HTMLElement {}
+interface HTMLStyleElement extends HTMLElement {}
+interface HTMLTableElement extends HTMLElement {}
+interface HTMLTableColElement extends HTMLElement {}
+interface HTMLTableDataCellElement extends HTMLElement {}
+interface HTMLTableHeaderCellElement extends HTMLElement {}
+interface HTMLTableRowElement extends HTMLElement {}
+interface HTMLTableSectionElement extends HTMLElement {}
+interface HTMLTemplateElement extends HTMLElement {}
+interface HTMLTextAreaElement extends HTMLElement {}
+interface HTMLTimeElement extends HTMLElement {}
+interface HTMLTitleElement extends HTMLElement {}
+interface HTMLTrackElement extends HTMLElement {}
+interface HTMLUListElement extends HTMLElement {}
+interface HTMLVideoElement extends HTMLElement {}
+interface HTMLWebViewElement extends HTMLElement {}
+
+interface SVGElement extends Element {}
+interface SVGSVGElement extends SVGElement {}
+interface SVGCircleElement extends SVGElement {}
+interface SVGClipPathElement extends SVGElement {}
+interface SVGDefsElement extends SVGElement {}
+interface SVGDescElement extends SVGElement {}
+interface SVGEllipseElement extends SVGElement {}
+interface SVGFEBlendElement extends SVGElement {}
+interface SVGFEColorMatrixElement extends SVGElement {}
+interface SVGFEComponentTransferElement extends SVGElement {}
+interface SVGFECompositeElement extends SVGElement {}
+interface SVGFEConvolveMatrixElement extends SVGElement {}
+interface SVGFEDiffuseLightingElement extends SVGElement {}
+interface SVGFEDisplacementMapElement extends SVGElement {}
+interface SVGFEDistantLightElement extends SVGElement {}
+interface SVGFEDropShadowElement extends SVGElement {}
+interface SVGFEFloodElement extends SVGElement {}
+interface SVGFEFuncAElement extends SVGElement {}
+interface SVGFEFuncBElement extends SVGElement {}
+interface SVGFEFuncGElement extends SVGElement {}
+interface SVGFEFuncRElement extends SVGElement {}
+interface SVGFEGaussianBlurElement extends SVGElement {}
+interface SVGFEImageElement extends SVGElement {}
+interface SVGFEMergeElement extends SVGElement {}
+interface SVGFEMergeNodeElement extends SVGElement {}
+interface SVGFEMorphologyElement extends SVGElement {}
+interface SVGFEOffsetElement extends SVGElement {}
+interface SVGFEPointLightElement extends SVGElement {}
+interface SVGFESpecularLightingElement extends SVGElement {}
+interface SVGFESpotLightElement extends SVGElement {}
+interface SVGFETileElement extends SVGElement {}
+interface SVGFETurbulenceElement extends SVGElement {}
+interface SVGFilterElement extends SVGElement {}
+interface SVGForeignObjectElement extends SVGElement {}
+interface SVGGElement extends SVGElement {}
+interface SVGImageElement extends SVGElement {}
+interface SVGLineElement extends SVGElement {}
+interface SVGLinearGradientElement extends SVGElement {}
+interface SVGMarkerElement extends SVGElement {}
+interface SVGMaskElement extends SVGElement {}
+interface SVGMetadataElement extends SVGElement {}
+interface SVGPathElement extends SVGElement {}
+interface SVGPatternElement extends SVGElement {}
+interface SVGPolygonElement extends SVGElement {}
+interface SVGPolylineElement extends SVGElement {}
+interface SVGRadialGradientElement extends SVGElement {}
+interface SVGRectElement extends SVGElement {}
+interface SVGSetElement extends SVGElement {}
+interface SVGStopElement extends SVGElement {}
+interface SVGSwitchElement extends SVGElement {}
+interface SVGSymbolElement extends SVGElement {}
+interface SVGTextElement extends SVGElement {}
+interface SVGTextPathElement extends SVGElement {}
+interface SVGTSpanElement extends SVGElement {}
+interface SVGUseElement extends SVGElement {}
+interface SVGViewElement extends SVGElement {}
+
+interface FormData {}
+interface Text {}
+interface TouchList {}
+interface WebGLRenderingContext {}
+interface WebGL2RenderingContext {}
+
+interface TrustedHTML {}
diff --git a/node_modules/@types/react/index.d.ts b/node_modules/@types/react/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b4072418d7d8175cfc71ec7ba5bd492061fbbad9
--- /dev/null
+++ b/node_modules/@types/react/index.d.ts
@@ -0,0 +1,4543 @@
+// NOTE: Users of the `experimental` builds of React should add a reference
+// to 'react/experimental' in their project. See experimental.d.ts's top comment
+// for reference and documentation on how exactly to do it.
+
+/// <reference path="global.d.ts" />
+
+import * as CSS from "csstype";
+import * as PropTypes from "prop-types";
+
+type NativeAnimationEvent = AnimationEvent;
+type NativeClipboardEvent = ClipboardEvent;
+type NativeCompositionEvent = CompositionEvent;
+type NativeDragEvent = DragEvent;
+type NativeFocusEvent = FocusEvent;
+type NativeKeyboardEvent = KeyboardEvent;
+type NativeMouseEvent = MouseEvent;
+type NativeTouchEvent = TouchEvent;
+type NativePointerEvent = PointerEvent;
+type NativeTransitionEvent = TransitionEvent;
+type NativeUIEvent = UIEvent;
+type NativeWheelEvent = WheelEvent;
+
+/**
+ * Used to represent DOM API's where users can either pass
+ * true or false as a boolean or as its equivalent strings.
+ */
+type Booleanish = boolean | "true" | "false";
+
+/**
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin MDN}
+ */
+type CrossOrigin = "anonymous" | "use-credentials" | "" | undefined;
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+
+/**
+ * The function returned from an effect passed to {@link React.useEffect useEffect},
+ * which can be used to clean up the effect when the component unmounts.
+ *
+ * @see {@link https://react.dev/reference/react/useEffect React Docs}
+ */
+type Destructor = () => void | { [UNDEFINED_VOID_ONLY]: never };
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+// eslint-disable-next-line @definitelytyped/export-just-namespace
+export = React;
+export as namespace React;
+
+declare namespace React {
+    //
+    // React Elements
+    // ----------------------------------------------------------------------
+
+    /**
+     * Used to retrieve the possible components which accept a given set of props.
+     *
+     * Can be passed no type parameters to get a union of all possible components
+     * and tags.
+     *
+     * Is a superset of {@link ComponentType}.
+     *
+     * @template P The props to match against. If not passed, defaults to any.
+     * @template Tag An optional tag to match against. If not passed, attempts to match against all possible tags.
+     *
+     * @example
+     *
+     * ```tsx
+     * // All components and tags (img, embed etc.)
+     * // which accept `src`
+     * type SrcComponents = ElementType<{ src: any }>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // All components
+     * type AllComponents = ElementType;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // All custom components which match `src`, and tags which
+     * // match `src`, narrowed down to just `audio` and `embed`
+     * type SrcComponents = ElementType<{ src: any }, 'audio' | 'embed'>;
+     * ```
+     */
+    type ElementType<P = any, Tag extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements> =
+        | { [K in Tag]: P extends JSX.IntrinsicElements[K] ? K : never }[Tag]
+        | ComponentType<P>;
+
+    /**
+     * Represents any user-defined component, either as a function or a class.
+     *
+     * Similar to {@link JSXElementConstructor}, but with extra properties like
+     * {@link FunctionComponent.defaultProps defaultProps } and
+     * {@link ComponentClass.contextTypes contextTypes}.
+     *
+     * @template P The props the component accepts.
+     *
+     * @see {@link ComponentClass}
+     * @see {@link FunctionComponent}
+     */
+    type ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P>;
+
+    /**
+     * Represents any user-defined component, either as a function or a class.
+     *
+     * Similar to {@link ComponentType}, but without extra properties like
+     * {@link FunctionComponent.defaultProps defaultProps } and
+     * {@link ComponentClass.contextTypes contextTypes}.
+     *
+     * @template P The props the component accepts.
+     */
+    type JSXElementConstructor<P> =
+        | ((
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-stateless-function-components React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ) => ReactNode)
+        | (new(
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ) => Component<any, any>);
+
+    /**
+     * A readonly ref container where {@link current} cannot be mutated.
+     *
+     * Created by {@link createRef}, or {@link useRef} when passed `null`.
+     *
+     * @template T The type of the ref's value.
+     *
+     * @example
+     *
+     * ```tsx
+     * const ref = createRef<HTMLDivElement>();
+     *
+     * ref.current = document.createElement('div'); // Error
+     * ```
+     */
+    interface RefObject<T> {
+        /**
+         * The current value of the ref.
+         */
+        readonly current: T | null;
+    }
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES {
+    }
+    /**
+     * A callback fired whenever the ref's value changes.
+     *
+     * @template T The type of the ref's value.
+     *
+     * @see {@link https://react.dev/reference/react-dom/components/common#ref-callback React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <div ref={(node) => console.log(node)} />
+     * ```
+     */
+    type RefCallback<T> = {
+        bivarianceHack(
+            instance: T | null,
+        ):
+            | void
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES
+            ];
+    }["bivarianceHack"];
+
+    /**
+     * A union type of all possible shapes for React refs.
+     *
+     * @see {@link RefCallback}
+     * @see {@link RefObject}
+     */
+
+    type Ref<T> = RefCallback<T> | RefObject<T> | null;
+    /**
+     * A legacy implementation of refs where you can pass a string to a ref prop.
+     *
+     * @see {@link https://react.dev/reference/react/Component#refs React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <div ref="myRef" />
+     * ```
+     */
+    // TODO: Remove the string ref special case from `PropsWithRef` once we remove LegacyRef
+    type LegacyRef<T> = string | Ref<T>;
+
+    /**
+     * Retrieves the type of the 'ref' prop for a given component type or tag name.
+     *
+     * @template C The component type.
+     *
+     * @example
+     *
+     * ```tsx
+     * type MyComponentRef = React.ElementRef<typeof MyComponent>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * type DivRef = React.ElementRef<'div'>;
+     * ```
+     */
+    type ElementRef<
+        C extends
+            | ForwardRefExoticComponent<any>
+            | { new(props: any): Component<any> }
+            | ((props: any, deprecatedLegacyContext?: any) => ReactNode)
+            | keyof JSX.IntrinsicElements,
+    > =
+        // need to check first if `ref` is a valid prop for ts@3.0
+        // otherwise it will infer `{}` instead of `never`
+        "ref" extends keyof ComponentPropsWithRef<C>
+            ? NonNullable<ComponentPropsWithRef<C>["ref"]> extends RefAttributes<
+                infer Instance
+            >["ref"] ? Instance
+            : never
+            : never;
+
+    type ComponentState = any;
+
+    /**
+     * A value which uniquely identifies a node among items in an array.
+     *
+     * @see {@link https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key React Docs}
+     */
+    type Key = string | number | bigint;
+
+    /**
+     * @internal The props any component can receive.
+     * You don't have to add this type. All components automatically accept these props.
+     * ```tsx
+     * const Component = () => <div />;
+     * <Component key="one" />
+     * ```
+     *
+     * WARNING: The implementation of a component will never have access to these attributes.
+     * The following example would be incorrect usage because {@link Component} would never have access to `key`:
+     * ```tsx
+     * const Component = (props: React.Attributes) => props.key;
+     * ```
+     */
+    interface Attributes {
+        key?: Key | null | undefined;
+    }
+    /**
+     * The props any component accepting refs can receive.
+     * Class components, built-in browser components (e.g. `div`) and forwardRef components can receive refs and automatically accept these props.
+     * ```tsx
+     * const Component = forwardRef(() => <div />);
+     * <Component ref={(current) => console.log(current)} />
+     * ```
+     *
+     * You only need this type if you manually author the types of props that need to be compatible with legacy refs.
+     * ```tsx
+     * interface Props extends React.RefAttributes<HTMLDivElement> {}
+     * declare const Component: React.FunctionComponent<Props>;
+     * ```
+     *
+     * Otherwise it's simpler to directly use {@link Ref} since you can safely use the
+     * props type to describe to props that a consumer can pass to the component
+     * as well as describing the props the implementation of a component "sees".
+     * {@link RefAttributes} is generally not safe to describe both consumer and seen props.
+     *
+     * ```tsx
+     * interface Props extends {
+     *   ref?: React.Ref<HTMLDivElement> | undefined;
+     * }
+     * declare const Component: React.FunctionComponent<Props>;
+     * ```
+     *
+     * WARNING: The implementation of a component will not have access to the same type in versions of React supporting string refs.
+     * The following example would be incorrect usage because {@link Component} would never have access to a `ref` with type `string`
+     * ```tsx
+     * const Component = (props: React.RefAttributes) => props.ref;
+     * ```
+     */
+    interface RefAttributes<T> extends Attributes {
+        /**
+         * Allows getting a ref to the component instance.
+         * Once the component unmounts, React will set `ref.current` to `null`
+         * (or call the ref with `null` if you passed a callback ref).
+         *
+         * @see {@link https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom React Docs}
+         */
+        ref?: LegacyRef<T> | undefined;
+    }
+
+    /**
+     * Represents the built-in attributes available to class components.
+     */
+    interface ClassAttributes<T> extends RefAttributes<T> {
+    }
+
+    /**
+     * Represents a JSX element.
+     *
+     * Where {@link ReactNode} represents everything that can be rendered, `ReactElement`
+     * only represents JSX.
+     *
+     * @template P The type of the props object
+     * @template T The type of the component or tag
+     *
+     * @example
+     *
+     * ```tsx
+     * const element: ReactElement = <div />;
+     * ```
+     */
+    interface ReactElement<
+        P = any,
+        T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>,
+    > {
+        type: T;
+        props: P;
+        key: string | null;
+    }
+
+    /**
+     * @deprecated
+     */
+    interface ReactComponentElement<
+        T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>,
+        P = Pick<ComponentProps<T>, Exclude<keyof ComponentProps<T>, "key" | "ref">>,
+    > extends ReactElement<P, Exclude<T, number>> {}
+
+    interface FunctionComponentElement<P> extends ReactElement<P, FunctionComponent<P>> {
+        ref?: ("ref" extends keyof P ? P extends { ref?: infer R | undefined } ? R : never : never) | undefined;
+    }
+
+    type CElement<P, T extends Component<P, ComponentState>> = ComponentElement<P, T>;
+    interface ComponentElement<P, T extends Component<P, ComponentState>> extends ReactElement<P, ComponentClass<P>> {
+        ref?: LegacyRef<T> | undefined;
+    }
+
+    /**
+     * @deprecated Use {@link ComponentElement} instead.
+     */
+    type ClassicElement<P> = CElement<P, ClassicComponent<P, ComponentState>>;
+
+    // string fallback for custom web-components
+    interface DOMElement<P extends HTMLAttributes<T> | SVGAttributes<T>, T extends Element>
+        extends ReactElement<P, string>
+    {
+        ref: LegacyRef<T>;
+    }
+
+    // ReactHTML for ReactHTMLElement
+    interface ReactHTMLElement<T extends HTMLElement> extends DetailedReactHTMLElement<AllHTMLAttributes<T>, T> {}
+
+    interface DetailedReactHTMLElement<P extends HTMLAttributes<T>, T extends HTMLElement> extends DOMElement<P, T> {
+        type: keyof ReactHTML;
+    }
+
+    // ReactSVG for ReactSVGElement
+    interface ReactSVGElement extends DOMElement<SVGAttributes<SVGElement>, SVGElement> {
+        type: keyof ReactSVG;
+    }
+
+    interface ReactPortal extends ReactElement {
+        children: ReactNode;
+    }
+
+    //
+    // Factories
+    // ----------------------------------------------------------------------
+
+    type Factory<P> = (props?: Attributes & P, ...children: ReactNode[]) => ReactElement<P>;
+
+    /**
+     * @deprecated Please use `FunctionComponentFactory`
+     */
+    type SFCFactory<P> = FunctionComponentFactory<P>;
+
+    type FunctionComponentFactory<P> = (
+        props?: Attributes & P,
+        ...children: ReactNode[]
+    ) => FunctionComponentElement<P>;
+
+    type ComponentFactory<P, T extends Component<P, ComponentState>> = (
+        props?: ClassAttributes<T> & P,
+        ...children: ReactNode[]
+    ) => CElement<P, T>;
+
+    type CFactory<P, T extends Component<P, ComponentState>> = ComponentFactory<P, T>;
+    type ClassicFactory<P> = CFactory<P, ClassicComponent<P, ComponentState>>;
+
+    type DOMFactory<P extends DOMAttributes<T>, T extends Element> = (
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ) => DOMElement<P, T>;
+
+    interface HTMLFactory<T extends HTMLElement> extends DetailedHTMLFactory<AllHTMLAttributes<T>, T> {}
+
+    interface DetailedHTMLFactory<P extends HTMLAttributes<T>, T extends HTMLElement> extends DOMFactory<P, T> {
+        (props?: ClassAttributes<T> & P | null, ...children: ReactNode[]): DetailedReactHTMLElement<P, T>;
+    }
+
+    interface SVGFactory extends DOMFactory<SVGAttributes<SVGElement>, SVGElement> {
+        (
+            props?: ClassAttributes<SVGElement> & SVGAttributes<SVGElement> | null,
+            ...children: ReactNode[]
+        ): ReactSVGElement;
+    }
+
+    /**
+     * @deprecated - This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactText = string | number;
+    /**
+     * @deprecated - This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactChild = ReactElement | string | number;
+
+    /**
+     * @deprecated Use either `ReactNode[]` if you need an array or `Iterable<ReactNode>` if its passed to a host component.
+     */
+    interface ReactNodeArray extends ReadonlyArray<ReactNode> {}
+    /**
+     * WARNING: Not related to `React.Fragment`.
+     * @deprecated This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactFragment = Iterable<ReactNode>;
+
+    /**
+     * Different release channels declare additional types of ReactNode this particular release channel accepts.
+     * App or library types should never augment this interface.
+     */
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES {}
+
+    /**
+     * Represents all of the things React can render.
+     *
+     * Where {@link ReactElement} only represents JSX, `ReactNode` represents everything that can be rendered.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/reactnode/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Typing children
+     * type Props = { children: ReactNode }
+     *
+     * const Component = ({ children }: Props) => <div>{children}</div>
+     *
+     * <Component>hello</Component>
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Typing a custom element
+     * type Props = { customElement: ReactNode }
+     *
+     * const Component = ({ customElement }: Props) => <div>{customElement}</div>
+     *
+     * <Component customElement={<div>hello</div>} />
+     * ```
+     */
+    // non-thenables need to be kept in sync with AwaitedReactNode
+    type ReactNode =
+        | ReactElement
+        | string
+        | number
+        | Iterable<ReactNode>
+        | ReactPortal
+        | boolean
+        | null
+        | undefined
+        | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES[
+            keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES
+        ];
+
+    //
+    // Top Level API
+    // ----------------------------------------------------------------------
+
+    // DOM Elements
+    /** @deprecated */
+    function createFactory<T extends HTMLElement>(
+        type: keyof ReactHTML,
+    ): HTMLFactory<T>;
+    /** @deprecated */
+    function createFactory(
+        type: keyof ReactSVG,
+    ): SVGFactory;
+    /** @deprecated */
+    function createFactory<P extends DOMAttributes<T>, T extends Element>(
+        type: string,
+    ): DOMFactory<P, T>;
+
+    // Custom components
+    /** @deprecated */
+    function createFactory<P>(type: FunctionComponent<P>): FunctionComponentFactory<P>;
+    /** @deprecated */
+    function createFactory<P, T extends Component<P, ComponentState>, C extends ComponentClass<P>>(
+        type: ClassType<P, T, C>,
+    ): CFactory<P, T>;
+    /** @deprecated */
+    function createFactory<P>(type: ComponentClass<P>): Factory<P>;
+
+    // DOM Elements
+    // TODO: generalize this to everything in `keyof ReactHTML`, not just "input"
+    function createElement(
+        type: "input",
+        props?: InputHTMLAttributes<HTMLInputElement> & ClassAttributes<HTMLInputElement> | null,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+    function createElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        type: keyof ReactHTML,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<P, T>;
+    function createElement<P extends SVGAttributes<T>, T extends SVGElement>(
+        type: keyof ReactSVG,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): ReactSVGElement;
+    function createElement<P extends DOMAttributes<T>, T extends Element>(
+        type: string,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): DOMElement<P, T>;
+
+    // Custom components
+
+    function createElement<P extends {}>(
+        type: FunctionComponent<P>,
+        props?: Attributes & P | null,
+        ...children: ReactNode[]
+    ): FunctionComponentElement<P>;
+    function createElement<P extends {}, T extends Component<P, ComponentState>, C extends ComponentClass<P>>(
+        type: ClassType<P, T, C>,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): CElement<P, T>;
+    function createElement<P extends {}>(
+        type: FunctionComponent<P> | ComponentClass<P> | string,
+        props?: Attributes & P | null,
+        ...children: ReactNode[]
+    ): ReactElement<P>;
+
+    // DOM Elements
+    // ReactHTMLElement
+    function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        element: DetailedReactHTMLElement<P, T>,
+        props?: P,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<P, T>;
+    // ReactHTMLElement, less specific
+    function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        element: ReactHTMLElement<T>,
+        props?: P,
+        ...children: ReactNode[]
+    ): ReactHTMLElement<T>;
+    // SVGElement
+    function cloneElement<P extends SVGAttributes<T>, T extends SVGElement>(
+        element: ReactSVGElement,
+        props?: P,
+        ...children: ReactNode[]
+    ): ReactSVGElement;
+    // DOM Element (has to be the last, because type checking stops at first overload that fits)
+    function cloneElement<P extends DOMAttributes<T>, T extends Element>(
+        element: DOMElement<P, T>,
+        props?: DOMAttributes<T> & P,
+        ...children: ReactNode[]
+    ): DOMElement<P, T>;
+
+    // Custom components
+    function cloneElement<P>(
+        element: FunctionComponentElement<P>,
+        props?: Partial<P> & Attributes,
+        ...children: ReactNode[]
+    ): FunctionComponentElement<P>;
+    function cloneElement<P, T extends Component<P, ComponentState>>(
+        element: CElement<P, T>,
+        props?: Partial<P> & ClassAttributes<T>,
+        ...children: ReactNode[]
+    ): CElement<P, T>;
+    function cloneElement<P>(
+        element: ReactElement<P>,
+        props?: Partial<P> & Attributes,
+        ...children: ReactNode[]
+    ): ReactElement<P>;
+
+    /**
+     * Describes the props accepted by a Context {@link Provider}.
+     *
+     * @template T The type of the value the context provides.
+     */
+    interface ProviderProps<T> {
+        value: T;
+        children?: ReactNode | undefined;
+    }
+
+    /**
+     * Describes the props accepted by a Context {@link Consumer}.
+     *
+     * @template T The type of the value the context provides.
+     */
+    interface ConsumerProps<T> {
+        children: (value: T) => ReactNode;
+    }
+
+    /**
+     * An object masquerading as a component. These are created by functions
+     * like {@link forwardRef}, {@link memo}, and {@link createContext}.
+     *
+     * In order to make TypeScript work, we pretend that they are normal
+     * components.
+     *
+     * But they are, in fact, not callable - instead, they are objects which
+     * are treated specially by the renderer.
+     *
+     * @template P The props the component accepts.
+     */
+    interface ExoticComponent<P = {}> {
+        (props: P): ReactNode;
+        readonly $$typeof: symbol;
+    }
+
+    /**
+     * An {@link ExoticComponent} with a `displayName` property applied to it.
+     *
+     * @template P The props the component accepts.
+     */
+    interface NamedExoticComponent<P = {}> extends ExoticComponent<P> {
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * An {@link ExoticComponent} with a `propTypes` property applied to it.
+     *
+     * @template P The props the component accepts.
+     */
+    interface ProviderExoticComponent<P> extends ExoticComponent<P> {
+        propTypes?: WeakValidationMap<P> | undefined;
+    }
+
+    /**
+     * Used to retrieve the type of a context object from a {@link Context}.
+     *
+     * @template C The context object.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const MyContext = createContext({ foo: 'bar' });
+     *
+     * type ContextType = ContextType<typeof MyContext>;
+     * // ContextType = { foo: string }
+     * ```
+     */
+    type ContextType<C extends Context<any>> = C extends Context<infer T> ? T : never;
+
+    /**
+     * Wraps your components to specify the value of this context for all components inside.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#provider React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     *
+     * function App() {
+     *   return (
+     *     <ThemeContext.Provider value="dark">
+     *       <Toolbar />
+     *     </ThemeContext.Provider>
+     *   );
+     * }
+     * ```
+     */
+    type Provider<T> = ProviderExoticComponent<ProviderProps<T>>;
+
+    /**
+     * The old way to read context, before {@link useContext} existed.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#consumer React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { UserContext } from './user-context';
+     *
+     * function Avatar() {
+     *   return (
+     *     <UserContext.Consumer>
+     *       {user => <img src={user.profileImage} alt={user.name} />}
+     *     </UserContext.Consumer>
+     *   );
+     * }
+     * ```
+     */
+    type Consumer<T> = ExoticComponent<ConsumerProps<T>>;
+
+    /**
+     * Context lets components pass information deep down without explicitly
+     * passing props.
+     *
+     * Created from {@link createContext}
+     *
+     * @see {@link https://react.dev/learn/passing-data-deeply-with-context React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/context/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     * ```
+     */
+    interface Context<T> {
+        Provider: Provider<T>;
+        Consumer: Consumer<T>;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * Lets you create a {@link Context} that components can provide or read.
+     *
+     * @param defaultValue The value you want the context to have when there is no matching
+     * {@link Provider} in the tree above the component reading the context. This is meant
+     * as a "last resort" fallback.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#reference React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/context/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     * ```
+     */
+    function createContext<T>(
+        // If you thought this should be optional, see
+        // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/24509#issuecomment-382213106
+        defaultValue: T,
+    ): Context<T>;
+
+    function isValidElement<P>(object: {} | null | undefined): object is ReactElement<P>;
+
+    /**
+     * Maintainer's note: Sync with {@link ReactChildren} until {@link ReactChildren} is removed.
+     */
+    const Children: {
+        map<T, C>(
+            children: C | readonly C[],
+            fn: (child: C, index: number) => T,
+        ): C extends null | undefined ? C : Array<Exclude<T, boolean | null | undefined>>;
+        forEach<C>(children: C | readonly C[], fn: (child: C, index: number) => void): void;
+        count(children: any): number;
+        only<C>(children: C): C extends any[] ? never : C;
+        toArray(children: ReactNode | ReactNode[]): Array<Exclude<ReactNode, boolean | null | undefined>>;
+    };
+    /**
+     * Lets you group elements without a wrapper node.
+     *
+     * @see {@link https://react.dev/reference/react/Fragment React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { Fragment } from 'react';
+     *
+     * <Fragment>
+     *   <td>Hello</td>
+     *   <td>World</td>
+     * </Fragment>
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Using the <></> shorthand syntax:
+     *
+     * <>
+     *   <td>Hello</td>
+     *   <td>World</td>
+     * </>
+     * ```
+     */
+    const Fragment: ExoticComponent<{ children?: ReactNode | undefined }>;
+
+    /**
+     * Lets you find common bugs in your components early during development.
+     *
+     * @see {@link https://react.dev/reference/react/StrictMode React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { StrictMode } from 'react';
+     *
+     * <StrictMode>
+     *   <App />
+     * </StrictMode>
+     * ```
+     */
+    const StrictMode: ExoticComponent<{ children?: ReactNode | undefined }>;
+
+    /**
+     * The props accepted by {@link Suspense}.
+     *
+     * @see {@link https://react.dev/reference/react/Suspense React Docs}
+     */
+    interface SuspenseProps {
+        children?: ReactNode | undefined;
+
+        /** A fallback react tree to show when a Suspense child (like React.lazy) suspends */
+        fallback?: ReactNode;
+
+        /**
+         * A name for this Suspense boundary for instrumentation purposes.
+         * The name will help identify this boundary in React DevTools.
+         */
+        name?: string | undefined;
+    }
+
+    /**
+     * Lets you display a fallback until its children have finished loading.
+     *
+     * @see {@link https://react.dev/reference/react/Suspense React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { Suspense } from 'react';
+     *
+     * <Suspense fallback={<Loading />}>
+     *   <ProfileDetails />
+     * </Suspense>
+     * ```
+     */
+    const Suspense: ExoticComponent<SuspenseProps>;
+    const version: string;
+
+    /**
+     * The callback passed to {@link ProfilerProps.onRender}.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+     */
+    type ProfilerOnRenderCallback = (
+        /**
+         * The string id prop of the {@link Profiler} tree that has just committed. This lets
+         * you identify which part of the tree was committed if you are using multiple
+         * profilers.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        id: string,
+        /**
+         * This lets you know whether the tree has just been mounted for the first time
+         * or re-rendered due to a change in props, state, or hooks.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        phase: "mount" | "update" | "nested-update",
+        /**
+         * The number of milliseconds spent rendering the {@link Profiler} and its descendants
+         * for the current update. This indicates how well the subtree makes use of
+         * memoization (e.g. {@link memo} and {@link useMemo}). Ideally this value should decrease
+         * significantly after the initial mount as many of the descendants will only need to
+         * re-render if their specific props change.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        actualDuration: number,
+        /**
+         * The number of milliseconds estimating how much time it would take to re-render the entire
+         * {@link Profiler} subtree without any optimizations. It is calculated by summing up the most
+         * recent render durations of each component in the tree. This value estimates a worst-case
+         * cost of rendering (e.g. the initial mount or a tree with no memoization). Compare
+         * {@link actualDuration} against it to see if memoization is working.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        baseDuration: number,
+        /**
+         * A numeric timestamp for when React began rendering the current update.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        startTime: number,
+        /**
+         * A numeric timestamp for when React committed the current update. This value is shared
+         * between all profilers in a commit, enabling them to be grouped if desirable.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        commitTime: number,
+    ) => void;
+
+    /**
+     * The props accepted by {@link Profiler}.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler React Docs}
+     */
+    interface ProfilerProps {
+        children?: ReactNode | undefined;
+        id: string;
+        onRender: ProfilerOnRenderCallback;
+    }
+
+    /**
+     * Lets you measure rendering performance of a React tree programmatically.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <Profiler id="App" onRender={onRender}>
+     *   <App />
+     * </Profiler>
+     * ```
+     */
+    const Profiler: ExoticComponent<ProfilerProps>;
+
+    //
+    // Component API
+    // ----------------------------------------------------------------------
+
+    type ReactInstance = Component<any> | Element;
+
+    // Base component for plain JS classes
+    interface Component<P = {}, S = {}, SS = any> extends ComponentLifecycle<P, S, SS> {}
+    class Component<P, S> {
+        /**
+         * If set, `this.context` will be set at runtime to the current value of the given Context.
+         *
+         * @example
+         *
+         * ```ts
+         * type MyContext = number
+         * const Ctx = React.createContext<MyContext>(0)
+         *
+         * class Foo extends React.Component {
+         *   static contextType = Ctx
+         *   context!: React.ContextType<typeof Ctx>
+         *   render () {
+         *     return <>My context's value: {this.context}</>;
+         *   }
+         * }
+         * ```
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-contexttype}
+         */
+        static contextType?: Context<any> | undefined;
+
+        /**
+         * If using the new style context, re-declare this in your class to be the
+         * `React.ContextType` of your `static contextType`.
+         * Should be used with type annotation or static contextType.
+         *
+         * @example
+         * ```ts
+         * static contextType = MyContext
+         * // For TS pre-3.7:
+         * context!: React.ContextType<typeof MyContext>
+         * // For TS 3.7 and above:
+         * declare context: React.ContextType<typeof MyContext>
+         * ```
+         *
+         * @see {@link https://react.dev/reference/react/Component#context React Docs}
+         */
+        context: unknown;
+
+        constructor(props: P);
+        /**
+         * @deprecated
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html React Docs}
+         */
+        constructor(props: P, context: any);
+
+        // We MUST keep setState() as a unified signature because it allows proper checking of the method return type.
+        // See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18365#issuecomment-351013257
+        // Also, the ` | S` allows intellisense to not be dumbisense
+        setState<K extends keyof S>(
+            state: ((prevState: Readonly<S>, props: Readonly<P>) => Pick<S, K> | S | null) | (Pick<S, K> | S | null),
+            callback?: () => void,
+        ): void;
+
+        forceUpdate(callback?: () => void): void;
+        render(): ReactNode;
+
+        readonly props: Readonly<P>;
+        state: Readonly<S>;
+        /**
+         * @deprecated
+         *
+         * @see {@link https://legacy.reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs Legacy React Docs}
+         */
+        refs: {
+            [key: string]: ReactInstance;
+        };
+    }
+
+    class PureComponent<P = {}, S = {}, SS = any> extends Component<P, S, SS> {}
+
+    /**
+     * @deprecated Use `ClassicComponent` from `create-react-class`
+     *
+     * @see {@link https://legacy.reactjs.org/docs/react-without-es6.html Legacy React Docs}
+     * @see {@link https://www.npmjs.com/package/create-react-class `create-react-class` on npm}
+     */
+    interface ClassicComponent<P = {}, S = {}> extends Component<P, S> {
+        replaceState(nextState: S, callback?: () => void): void;
+        isMounted(): boolean;
+        getInitialState?(): S;
+    }
+
+    interface ChildContextProvider<CC> {
+        getChildContext(): CC;
+    }
+
+    //
+    // Class Interfaces
+    // ----------------------------------------------------------------------
+
+    /**
+     * Represents the type of a function component. Can optionally
+     * receive a type argument that represents the props the component
+     * receives.
+     *
+     * @template P The props the component accepts.
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/function_components React TypeScript Cheatsheet}
+     * @alias for {@link FunctionComponent}
+     *
+     * @example
+     *
+     * ```tsx
+     * // With props:
+     * type Props = { name: string }
+     *
+     * const MyComponent: FC<Props> = (props) => {
+     *  return <div>{props.name}</div>
+     * }
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Without props:
+     * const MyComponentWithoutProps: FC = () => {
+     *   return <div>MyComponentWithoutProps</div>
+     * }
+     * ```
+     */
+    type FC<P = {}> = FunctionComponent<P>;
+
+    /**
+     * Represents the type of a function component. Can optionally
+     * receive a type argument that represents the props the component
+     * accepts.
+     *
+     * @template P The props the component accepts.
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/function_components React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // With props:
+     * type Props = { name: string }
+     *
+     * const MyComponent: FunctionComponent<Props> = (props) => {
+     *  return <div>{props.name}</div>
+     * }
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Without props:
+     * const MyComponentWithoutProps: FunctionComponent = () => {
+     *   return <div>MyComponentWithoutProps</div>
+     * }
+     * ```
+     */
+    interface FunctionComponent<P = {}> {
+        (
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): ReactNode;
+        /**
+         * Used to declare the types of the props accepted by the
+         * component. These types will be checked during rendering
+         * and in development only.
+         *
+         * We recommend using TypeScript instead of checking prop
+         * types at runtime.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: WeakValidationMap<P> | undefined;
+        /**
+         * @deprecated
+         *
+         * Lets you specify which legacy context is consumed by
+         * this component.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html Legacy React Docs}
+         */
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * Used to define default values for the props accepted by
+         * the component.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         *
+         * @example
+         *
+         * ```tsx
+         * type Props = { name?: string }
+         *
+         * const MyComponent: FC<Props> = (props) => {
+         *   return <div>{props.name}</div>
+         * }
+         *
+         * MyComponent.defaultProps = {
+         *   name: 'John Doe'
+         * }
+         * ```
+         *
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         *
+         * @example
+         *
+         * ```tsx
+         *
+         * const MyComponent: FC = () => {
+         *   return <div>Hello!</div>
+         * }
+         *
+         * MyComponent.displayName = 'MyAwesomeComponent'
+         * ```
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * @deprecated - Equivalent to {@link React.FunctionComponent}.
+     *
+     * @see {@link React.FunctionComponent}
+     * @alias {@link VoidFunctionComponent}
+     */
+    type VFC<P = {}> = VoidFunctionComponent<P>;
+
+    /**
+     * @deprecated - Equivalent to {@link React.FunctionComponent}.
+     *
+     * @see {@link React.FunctionComponent}
+     */
+    interface VoidFunctionComponent<P = {}> {
+        (
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): ReactNode;
+        propTypes?: WeakValidationMap<P> | undefined;
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        displayName?: string | undefined;
+    }
+
+    /**
+     * The type of the ref received by a {@link ForwardRefRenderFunction}.
+     *
+     * @see {@link ForwardRefRenderFunction}
+     */
+    type ForwardedRef<T> = ((instance: T | null) => void) | MutableRefObject<T | null> | null;
+
+    /**
+     * The type of the function passed to {@link forwardRef}. This is considered different
+     * to a normal {@link FunctionComponent} because it receives an additional argument,
+     *
+     * @param props Props passed to the component, if any.
+     * @param ref A ref forwarded to the component of type {@link ForwardedRef}.
+     *
+     * @template T The type of the forwarded ref.
+     * @template P The type of the props the component accepts.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forward_and_create_ref/ React TypeScript Cheatsheet}
+     * @see {@link forwardRef}
+     */
+    interface ForwardRefRenderFunction<T, P = {}> {
+        (props: P, ref: ForwardedRef<T>): ReactNode;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * Will show `ForwardRef(${Component.displayName || Component.name})`
+         * in devtools by default, but can be given its own specific name.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+        /**
+         * defaultProps are not supported on render functions passed to forwardRef.
+         *
+         * @see {@link https://github.com/microsoft/TypeScript/issues/36826 linked GitHub issue} for context
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         */
+        defaultProps?: never | undefined;
+        /**
+         * propTypes are not supported on render functions passed to forwardRef.
+         *
+         * @see {@link https://github.com/microsoft/TypeScript/issues/36826 linked GitHub issue} for context
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: never | undefined;
+    }
+
+    /**
+     * Represents a component class in React.
+     *
+     * @template P The props the component accepts.
+     * @template S The internal state of the component.
+     */
+    interface ComponentClass<P = {}, S = ComponentState> extends StaticLifecycle<P, S> {
+        new(
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): Component<P, S>;
+        /**
+         * Used to declare the types of the props accepted by the
+         * component. These types will be checked during rendering
+         * and in development only.
+         *
+         * We recommend using TypeScript instead of checking prop
+         * types at runtime.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: WeakValidationMap<P> | undefined;
+        contextType?: Context<any> | undefined;
+        /**
+         * @deprecated use {@link ComponentClass.contextType} instead
+         *
+         * Lets you specify which legacy context is consumed by
+         * this component.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html Legacy React Docs}
+         */
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * @deprecated
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#how-to-use-context Legacy React Docs}
+         */
+        childContextTypes?: ValidationMap<any> | undefined;
+        /**
+         * Used to define default values for the props accepted by
+         * the component.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         */
+        defaultProps?: Partial<P> | undefined;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * @deprecated Use `ClassicComponentClass` from `create-react-class`
+     *
+     * @see {@link https://legacy.reactjs.org/docs/react-without-es6.html Legacy React Docs}
+     * @see {@link https://www.npmjs.com/package/create-react-class `create-react-class` on npm}
+     */
+    interface ClassicComponentClass<P = {}> extends ComponentClass<P> {
+        new(props: P, deprecatedLegacyContext?: any): ClassicComponent<P, ComponentState>;
+        getDefaultProps?(): P;
+    }
+
+    /**
+     * Used in {@link createElement} and {@link createFactory} to represent
+     * a class.
+     *
+     * An intersection type is used to infer multiple type parameters from
+     * a single argument, which is useful for many top-level API defs.
+     * See {@link https://github.com/Microsoft/TypeScript/issues/7234 this GitHub issue}
+     * for more info.
+     */
+    type ClassType<P, T extends Component<P, ComponentState>, C extends ComponentClass<P>> =
+        & C
+        & (new(props: P, deprecatedLegacyContext?: any) => T);
+
+    //
+    // Component Specs and Lifecycle
+    // ----------------------------------------------------------------------
+
+    // This should actually be something like `Lifecycle<P, S> | DeprecatedLifecycle<P, S>`,
+    // as React will _not_ call the deprecated lifecycle methods if any of the new lifecycle
+    // methods are present.
+    interface ComponentLifecycle<P, S, SS = any> extends NewLifecycle<P, S, SS>, DeprecatedLifecycle<P, S> {
+        /**
+         * Called immediately after a component is mounted. Setting state here will trigger re-rendering.
+         */
+        componentDidMount?(): void;
+        /**
+         * Called to determine whether the change in props and state should trigger a re-render.
+         *
+         * `Component` always returns true.
+         * `PureComponent` implements a shallow comparison on props and state and returns true if any
+         * props or states have changed.
+         *
+         * If false is returned, {@link Component.render}, `componentWillUpdate`
+         * and `componentDidUpdate` will not be called.
+         */
+        shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): boolean;
+        /**
+         * Called immediately before a component is destroyed. Perform any necessary cleanup in this method, such as
+         * cancelled network requests, or cleaning up any DOM elements created in `componentDidMount`.
+         */
+        componentWillUnmount?(): void;
+        /**
+         * Catches exceptions generated in descendant components. Unhandled exceptions will cause
+         * the entire component tree to unmount.
+         */
+        componentDidCatch?(error: Error, errorInfo: ErrorInfo): void;
+    }
+
+    // Unfortunately, we have no way of declaring that the component constructor must implement this
+    interface StaticLifecycle<P, S> {
+        getDerivedStateFromProps?: GetDerivedStateFromProps<P, S> | undefined;
+        getDerivedStateFromError?: GetDerivedStateFromError<P, S> | undefined;
+    }
+
+    type GetDerivedStateFromProps<P, S> =
+        /**
+         * Returns an update to a component's state based on its new props and old state.
+         *
+         * Note: its presence prevents any of the deprecated lifecycle methods from being invoked
+         */
+        (nextProps: Readonly<P>, prevState: S) => Partial<S> | null;
+
+    type GetDerivedStateFromError<P, S> =
+        /**
+         * This lifecycle is invoked after an error has been thrown by a descendant component.
+         * It receives the error that was thrown as a parameter and should return a value to update state.
+         *
+         * Note: its presence prevents any of the deprecated lifecycle methods from being invoked
+         */
+        (error: any) => Partial<S> | null;
+
+    // This should be "infer SS" but can't use it yet
+    interface NewLifecycle<P, S, SS> {
+        /**
+         * Runs before React applies the result of {@link Component.render render} to the document, and
+         * returns an object to be given to {@link componentDidUpdate}. Useful for saving
+         * things such as scroll position before {@link Component.render render} causes changes to it.
+         *
+         * Note: the presence of this method prevents any of the deprecated
+         * lifecycle events from running.
+         */
+        getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<S>): SS | null;
+        /**
+         * Called immediately after updating occurs. Not called for the initial render.
+         *
+         * The snapshot is only present if {@link getSnapshotBeforeUpdate} is present and returns non-null.
+         */
+        componentDidUpdate?(prevProps: Readonly<P>, prevState: Readonly<S>, snapshot?: SS): void;
+    }
+
+    interface DeprecatedLifecycle<P, S> {
+        /**
+         * Called immediately before mounting occurs, and before {@link Component.render}.
+         * Avoid introducing any side-effects or subscriptions in this method.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use {@link ComponentLifecycle.componentDidMount componentDidMount} or the constructor instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillMount?(): void;
+        /**
+         * Called immediately before mounting occurs, and before {@link Component.render}.
+         * Avoid introducing any side-effects or subscriptions in this method.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use {@link ComponentLifecycle.componentDidMount componentDidMount} or the constructor instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillMount?(): void;
+        /**
+         * Called when the component may be receiving new props.
+         * React may call this even if props have not changed, so be sure to compare new and existing
+         * props if you only want to handle changes.
+         *
+         * Calling {@link Component.setState} generally does not trigger this method.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use static {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
+        /**
+         * Called when the component may be receiving new props.
+         * React may call this even if props have not changed, so be sure to compare new and existing
+         * props if you only want to handle changes.
+         *
+         * Calling {@link Component.setState} generally does not trigger this method.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use static {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
+        /**
+         * Called immediately before rendering when new props or state is received. Not called for the initial render.
+         *
+         * Note: You cannot call {@link Component.setState} here.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use getSnapshotBeforeUpdate instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): void;
+        /**
+         * Called immediately before rendering when new props or state is received. Not called for the initial render.
+         *
+         * Note: You cannot call {@link Component.setState} here.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use getSnapshotBeforeUpdate instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): void;
+    }
+
+    /**
+     * @deprecated
+     *
+     * @see {@link https://legacy.reactjs.org/blog/2016/07/13/mixins-considered-harmful.html Mixins Considered Harmful}
+     */
+    interface Mixin<P, S> extends ComponentLifecycle<P, S> {
+        mixins?: Array<Mixin<P, S>> | undefined;
+        statics?: {
+            [key: string]: any;
+        } | undefined;
+
+        displayName?: string | undefined;
+        propTypes?: ValidationMap<any> | undefined;
+        contextTypes?: ValidationMap<any> | undefined;
+        childContextTypes?: ValidationMap<any> | undefined;
+
+        getDefaultProps?(): P;
+        getInitialState?(): S;
+    }
+
+    /**
+     * @deprecated
+     *
+     * @see {@link https://legacy.reactjs.org/blog/2016/07/13/mixins-considered-harmful.html Mixins Considered Harmful}
+     */
+    interface ComponentSpec<P, S> extends Mixin<P, S> {
+        render(): ReactNode;
+
+        [propertyName: string]: any;
+    }
+
+    function createRef<T>(): RefObject<T>;
+
+    /**
+     * The type of the component returned from {@link forwardRef}.
+     *
+     * @template P The props the component accepts, if any.
+     *
+     * @see {@link ExoticComponent}
+     */
+    interface ForwardRefExoticComponent<P> extends NamedExoticComponent<P> {
+        /**
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        propTypes?: WeakValidationMap<P> | undefined;
+    }
+
+    /**
+     * Lets your component expose a DOM node to a parent component
+     * using a ref.
+     *
+     * @see {@link https://react.dev/reference/react/forwardRef React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forward_and_create_ref/ React TypeScript Cheatsheet}
+     *
+     * @param render See the {@link ForwardRefRenderFunction}.
+     *
+     * @template T The type of the DOM node.
+     * @template P The props the component accepts, if any.
+     *
+     * @example
+     *
+     * ```tsx
+     * interface Props {
+     *   children?: ReactNode;
+     *   type: "submit" | "button";
+     * }
+     *
+     * export const FancyButton = forwardRef<HTMLButtonElement, Props>((props, ref) => (
+     *   <button ref={ref} className="MyClassName" type={props.type}>
+     *     {props.children}
+     *   </button>
+     * ));
+     * ```
+     */
+    function forwardRef<T, P = {}>(
+        render: ForwardRefRenderFunction<T, PropsWithoutRef<P>>,
+    ): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;
+
+    /**
+     * Omits the 'ref' attribute from the given props object.
+     *
+     * @template P The props object type.
+     */
+    type PropsWithoutRef<P> =
+        // Omit would not be sufficient for this. We'd like to avoid unnecessary mapping and need a distributive conditional to support unions.
+        // see: https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
+        // https://github.com/Microsoft/TypeScript/issues/28339
+        P extends any ? ("ref" extends keyof P ? Omit<P, "ref"> : P) : P;
+    /** Ensures that the props do not include string ref, which cannot be forwarded */
+    type PropsWithRef<P> =
+        // Note: String refs can be forwarded. We can't fix this bug without breaking a bunch of libraries now though.
+        // Just "P extends { ref?: infer R }" looks sufficient, but R will infer as {} if P is {}.
+        "ref" extends keyof P
+            ? P extends { ref?: infer R | undefined }
+                ? string extends R ? PropsWithoutRef<P> & { ref?: Exclude<R, string> | undefined }
+                : P
+            : P
+            : P;
+
+    type PropsWithChildren<P = unknown> = P & { children?: ReactNode | undefined };
+
+    /**
+     * Used to retrieve the props a component accepts. Can either be passed a string,
+     * indicating a DOM element (e.g. 'div', 'span', etc.) or the type of a React
+     * component.
+     *
+     * It's usually better to use {@link ComponentPropsWithRef} or {@link ComponentPropsWithoutRef}
+     * instead of this type, as they let you be explicit about whether or not to include
+     * the `ref` prop.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentProps<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentProps = React.ComponentProps<typeof MyComponent>;
+     * ```
+     */
+    type ComponentProps<T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>> = T extends
+        JSXElementConstructor<infer P> ? P
+        : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T]
+        : {};
+
+    /**
+     * Used to retrieve the props a component accepts with its ref. Can either be
+     * passed a string, indicating a DOM element (e.g. 'div', 'span', etc.) or the
+     * type of a React component.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentPropsWithRef<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithRef = React.ComponentPropsWithRef<typeof MyComponent>;
+     * ```
+     */
+    type ComponentPropsWithRef<T extends ElementType> = T extends (new(props: infer P) => Component<any, any>)
+        ? PropsWithoutRef<P> & RefAttributes<InstanceType<T>>
+        : PropsWithRef<ComponentProps<T>>;
+    /**
+     * Used to retrieve the props a custom component accepts with its ref.
+     *
+     * Unlike {@link ComponentPropsWithRef}, this only works with custom
+     * components, i.e. components you define yourself. This is to improve
+     * type-checking performance.
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithRef = React.CustomComponentPropsWithRef<typeof MyComponent>;
+     * ```
+     */
+    type CustomComponentPropsWithRef<T extends ComponentType> = T extends (new(props: infer P) => Component<any, any>)
+        ? (PropsWithoutRef<P> & RefAttributes<InstanceType<T>>)
+        : T extends ((props: infer P, legacyContext?: any) => ReactNode) ? PropsWithRef<P>
+        : never;
+
+    /**
+     * Used to retrieve the props a component accepts without its ref. Can either be
+     * passed a string, indicating a DOM element (e.g. 'div', 'span', etc.) or the
+     * type of a React component.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentPropsWithoutRef<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithoutRef = React.ComponentPropsWithoutRef<typeof MyComponent>;
+     * ```
+     */
+    type ComponentPropsWithoutRef<T extends ElementType> = PropsWithoutRef<ComponentProps<T>>;
+
+    type ComponentRef<T extends ElementType> = T extends NamedExoticComponent<
+        ComponentPropsWithoutRef<T> & RefAttributes<infer Method>
+    > ? Method
+        : ComponentPropsWithRef<T> extends RefAttributes<infer Method> ? Method
+        : never;
+
+    // will show `Memo(${Component.displayName || Component.name})` in devtools by default,
+    // but can be given its own specific name
+    type MemoExoticComponent<T extends ComponentType<any>> = NamedExoticComponent<CustomComponentPropsWithRef<T>> & {
+        readonly type: T;
+    };
+
+    /**
+     * Lets you skip re-rendering a component when its props are unchanged.
+     *
+     * @see {@link https://react.dev/reference/react/memo React Docs}
+     *
+     * @param Component The component to memoize.
+     * @param propsAreEqual A function that will be used to determine if the props have changed.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { memo } from 'react';
+     *
+     * const SomeComponent = memo(function SomeComponent(props: { foo: string }) {
+     *   // ...
+     * });
+     * ```
+     */
+    function memo<P extends object>(
+        Component: FunctionComponent<P>,
+        propsAreEqual?: (prevProps: Readonly<P>, nextProps: Readonly<P>) => boolean,
+    ): NamedExoticComponent<P>;
+    function memo<T extends ComponentType<any>>(
+        Component: T,
+        propsAreEqual?: (prevProps: Readonly<ComponentProps<T>>, nextProps: Readonly<ComponentProps<T>>) => boolean,
+    ): MemoExoticComponent<T>;
+
+    interface LazyExoticComponent<T extends ComponentType<any>>
+        extends ExoticComponent<CustomComponentPropsWithRef<T>>
+    {
+        readonly _result: T;
+    }
+
+    /**
+     * Lets you defer loading a component’s code until it is rendered for the first time.
+     *
+     * @see {@link https://react.dev/reference/react/lazy React Docs}
+     *
+     * @param load A function that returns a `Promise` or another thenable (a `Promise`-like object with a
+     * then method). React will not call `load` until the first time you attempt to render the returned
+     * component. After React first calls load, it will wait for it to resolve, and then render the
+     * resolved value’s `.default` as a React component. Both the returned `Promise` and the `Promise`’s
+     * resolved value will be cached, so React will not call load more than once. If the `Promise` rejects,
+     * React will throw the rejection reason for the nearest Error Boundary to handle.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { lazy } from 'react';
+     *
+     * const MarkdownPreview = lazy(() => import('./MarkdownPreview.js'));
+     * ```
+     */
+    function lazy<T extends ComponentType<any>>(
+        load: () => Promise<{ default: T }>,
+    ): LazyExoticComponent<T>;
+
+    //
+    // React Hooks
+    // ----------------------------------------------------------------------
+
+    /**
+     * The instruction passed to a {@link Dispatch} function in {@link useState}
+     * to tell React what the next value of the {@link useState} should be.
+     *
+     * Often found wrapped in {@link Dispatch}.
+     *
+     * @template S The type of the state.
+     *
+     * @example
+     *
+     * ```tsx
+     * // This return type correctly represents the type of
+     * // `setCount` in the example below.
+     * const useCustomState = (): Dispatch<SetStateAction<number>> => {
+     *   const [count, setCount] = useState(0);
+     *
+     *   return setCount;
+     * }
+     * ```
+     */
+    type SetStateAction<S> = S | ((prevState: S) => S);
+
+    /**
+     * A function that can be used to update the state of a {@link useState}
+     * or {@link useReducer} hook.
+     */
+    type Dispatch<A> = (value: A) => void;
+    /**
+     * A {@link Dispatch} function can sometimes be called without any arguments.
+     */
+    type DispatchWithoutAction = () => void;
+    // Unlike redux, the actions _can_ be anything
+    type Reducer<S, A> = (prevState: S, action: A) => S;
+    // If useReducer accepts a reducer without action, dispatch may be called without any parameters.
+    type ReducerWithoutAction<S> = (prevState: S) => S;
+    // types used to try and prevent the compiler from reducing S
+    // to a supertype common with the second argument to useReducer()
+    type ReducerState<R extends Reducer<any, any>> = R extends Reducer<infer S, any> ? S : never;
+    type ReducerAction<R extends Reducer<any, any>> = R extends Reducer<any, infer A> ? A : never;
+    // The identity check is done with the SameValue algorithm (Object.is), which is stricter than ===
+    type ReducerStateWithoutAction<R extends ReducerWithoutAction<any>> = R extends ReducerWithoutAction<infer S> ? S
+        : never;
+    type DependencyList = readonly unknown[];
+
+    // NOTE: callbacks are _only_ allowed to return either void, or a destructor.
+    type EffectCallback = () => void | Destructor;
+
+    interface MutableRefObject<T> {
+        current: T;
+    }
+
+    // This will technically work if you give a Consumer<T> or Provider<T> but it's deprecated and warns
+    /**
+     * Accepts a context object (the value returned from `React.createContext`) and returns the current
+     * context value, as given by the nearest context provider for the given context.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useContext}
+     */
+    function useContext<T>(context: Context<T> /*, (not public API) observedBits?: number|boolean */): T;
+    /**
+     * Returns a stateful value, and a function to update it.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useState}
+     */
+    function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
+    // convenience overload when first argument is omitted
+    /**
+     * Returns a stateful value, and a function to update it.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useState}
+     */
+    function useState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where dispatch could accept 0 arguments.
+    function useReducer<R extends ReducerWithoutAction<any>, I>(
+        reducer: R,
+        initializerArg: I,
+        initializer: (arg: I) => ReducerStateWithoutAction<R>,
+    ): [ReducerStateWithoutAction<R>, DispatchWithoutAction];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where dispatch could accept 0 arguments.
+    function useReducer<R extends ReducerWithoutAction<any>>(
+        reducer: R,
+        initializerArg: ReducerStateWithoutAction<R>,
+        initializer?: undefined,
+    ): [ReducerStateWithoutAction<R>, DispatchWithoutAction];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where "I" may be a subset of ReducerState<R>; used to provide autocompletion.
+    // If "I" matches ReducerState<R> exactly then the last overload will allow initializer to be omitted.
+    // the last overload effectively behaves as if the identity function (x => x) is the initializer.
+    function useReducer<R extends Reducer<any, any>, I>(
+        reducer: R,
+        initializerArg: I & ReducerState<R>,
+        initializer: (arg: I & ReducerState<R>) => ReducerState<R>,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload for free "I"; all goes as long as initializer converts it into "ReducerState<R>".
+    function useReducer<R extends Reducer<any, any>, I>(
+        reducer: R,
+        initializerArg: I,
+        initializer: (arg: I) => ReducerState<R>,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+
+    // I'm not sure if I keep this 2-ary or if I make it (2,3)-ary; it's currently (2,3)-ary.
+    // The Flow types do have an overload for 3-ary invocation with undefined initializer.
+
+    // NOTE: without the ReducerState indirection, TypeScript would reduce S to be the most common
+    // supertype between the reducer's return type and the initialState (or the initializer's return type),
+    // which would prevent autocompletion from ever working.
+
+    // TODO: double-check if this weird overload logic is necessary. It is possible it's either a bug
+    // in older versions, or a regression in newer versions of the typescript completion service.
+    function useReducer<R extends Reducer<any, any>>(
+        reducer: R,
+        initialState: ReducerState<R>,
+        initializer?: undefined,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T>(initialValue: T): MutableRefObject<T>;
+    // convenience overload for refs given as a ref prop as they typically start with a null value
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * Usage note: if you need the result of useRef to be directly mutable, include `| null` in the type
+     * of the generic argument.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T>(initialValue: T | null): RefObject<T>;
+    // convenience overload for potentially undefined initialValue / call with 0 arguments
+    // has a default to stop it from defaulting to {} instead
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T = undefined>(): MutableRefObject<T | undefined>;
+    /**
+     * The signature is identical to `useEffect`, but it fires synchronously after all DOM mutations.
+     * Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside
+     * `useLayoutEffect` will be flushed synchronously, before the browser has a chance to paint.
+     *
+     * Prefer the standard `useEffect` when possible to avoid blocking visual updates.
+     *
+     * If you’re migrating code from a class component, `useLayoutEffect` fires in the same phase as
+     * `componentDidMount` and `componentDidUpdate`.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useLayoutEffect}
+     */
+    function useLayoutEffect(effect: EffectCallback, deps?: DependencyList): void;
+    /**
+     * Accepts a function that contains imperative, possibly effectful code.
+     *
+     * @param effect Imperative function that can return a cleanup function
+     * @param deps If present, effect will only activate if the values in the list change.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useEffect}
+     */
+    function useEffect(effect: EffectCallback, deps?: DependencyList): void;
+    // NOTE: this does not accept strings, but this will have to be fixed by removing strings from type Ref<T>
+    /**
+     * `useImperativeHandle` customizes the instance value that is exposed to parent components when using
+     * `ref`. As always, imperative code using refs should be avoided in most cases.
+     *
+     * `useImperativeHandle` should be used with `React.forwardRef`.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useImperativeHandle}
+     */
+    function useImperativeHandle<T, R extends T>(ref: Ref<T> | undefined, init: () => R, deps?: DependencyList): void;
+    // I made 'inputs' required here and in useMemo as there's no point to memoizing without the memoization key
+    // useCallback(X) is identical to just using X, useMemo(() => Y) is identical to just using Y.
+    /**
+     * `useCallback` will return a memoized version of the callback that only changes if one of the `inputs`
+     * has changed.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useCallback}
+     */
+    // A specific function type would not trigger implicit any.
+    // See https://github.com/DefinitelyTyped/DefinitelyTyped/issues/52873#issuecomment-845806435 for a comparison between `Function` and more specific types.
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    function useCallback<T extends Function>(callback: T, deps: DependencyList): T;
+    /**
+     * `useMemo` will only recompute the memoized value when one of the `deps` has changed.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useMemo}
+     */
+    // allow undefined, but don't make it optional as that is very likely a mistake
+    function useMemo<T>(factory: () => T, deps: DependencyList): T;
+    /**
+     * `useDebugValue` can be used to display a label for custom hooks in React DevTools.
+     *
+     * NOTE: We don’t recommend adding debug values to every custom hook.
+     * It’s most valuable for custom hooks that are part of shared libraries.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useDebugValue}
+     */
+    // the name of the custom hook is itself derived from the function name at runtime:
+    // it's just the function name without the "use" prefix.
+    function useDebugValue<T>(value: T, format?: (value: T) => any): void;
+
+    // must be synchronous
+    export type TransitionFunction = () => VoidOrUndefinedOnly;
+    // strange definition to allow vscode to show documentation on the invocation
+    export interface TransitionStartFunction {
+        /**
+         * State updates caused inside the callback are allowed to be deferred.
+         *
+         * **If some state update causes a component to suspend, that state update should be wrapped in a transition.**
+         *
+         * @param callback A _synchronous_ function which causes state updates that can be deferred.
+         */
+        (callback: TransitionFunction): void;
+    }
+
+    /**
+     * Returns a deferred version of the value that may “lag behind” it.
+     *
+     * This is commonly used to keep the interface responsive when you have something that renders immediately
+     * based on user input and something that needs to wait for a data fetch.
+     *
+     * A good example of this is a text input.
+     *
+     * @param value The value that is going to be deferred
+     *
+     * @see {@link https://react.dev/reference/react/useDeferredValue}
+     */
+    export function useDeferredValue<T>(value: T): T;
+
+    /**
+     * Allows components to avoid undesirable loading states by waiting for content to load
+     * before transitioning to the next screen. It also allows components to defer slower,
+     * data fetching updates until subsequent renders so that more crucial updates can be
+     * rendered immediately.
+     *
+     * The `useTransition` hook returns two values in an array.
+     *
+     * The first is a boolean, React’s way of informing us whether we’re waiting for the transition to finish.
+     * The second is a function that takes a callback. We can use it to tell React which state we want to defer.
+     *
+     * **If some state update causes a component to suspend, that state update should be wrapped in a transition.**
+     *
+     * @see {@link https://react.dev/reference/react/useTransition}
+     */
+    export function useTransition(): [boolean, TransitionStartFunction];
+
+    /**
+     * Similar to `useTransition` but allows uses where hooks are not available.
+     *
+     * @param callback A _synchronous_ function which causes state updates that can be deferred.
+     */
+    export function startTransition(scope: TransitionFunction): void;
+
+    /**
+     * Wrap any code rendering and triggering updates to your components into `act()` calls.
+     *
+     * Ensures that the behavior in your tests matches what happens in the browser
+     * more closely by executing pending `useEffect`s before returning. This also
+     * reduces the amount of re-renders done.
+     *
+     * @param callback A synchronous, void callback that will execute as a single, complete React commit.
+     *
+     * @see https://reactjs.org/blog/2019/02/06/react-v16.8.0.html#testing-hooks
+     */
+    // While act does always return Thenable, if a void function is passed, we pretend the return value is also void to not trigger dangling Promise lint rules.
+    export function act(callback: () => VoidOrUndefinedOnly): void;
+    export function act<T>(callback: () => T | Promise<T>): Promise<T>;
+
+    export function useId(): string;
+
+    /**
+     * @param effect Imperative function that can return a cleanup function
+     * @param deps If present, effect will only activate if the values in the list change.
+     *
+     * @see {@link https://github.com/facebook/react/pull/21913}
+     */
+    export function useInsertionEffect(effect: EffectCallback, deps?: DependencyList): void;
+
+    /**
+     * @param subscribe
+     * @param getSnapshot
+     *
+     * @see {@link https://github.com/reactwg/react-18/discussions/86}
+     */
+    // keep in sync with `useSyncExternalStore` from `use-sync-external-store`
+    export function useSyncExternalStore<Snapshot>(
+        subscribe: (onStoreChange: () => void) => () => void,
+        getSnapshot: () => Snapshot,
+        getServerSnapshot?: () => Snapshot,
+    ): Snapshot;
+
+    //
+    // Event System
+    // ----------------------------------------------------------------------
+    // TODO: change any to unknown when moving to TS v3
+    interface BaseSyntheticEvent<E = object, C = any, T = any> {
+        nativeEvent: E;
+        currentTarget: C;
+        target: T;
+        bubbles: boolean;
+        cancelable: boolean;
+        defaultPrevented: boolean;
+        eventPhase: number;
+        isTrusted: boolean;
+        preventDefault(): void;
+        isDefaultPrevented(): boolean;
+        stopPropagation(): void;
+        isPropagationStopped(): boolean;
+        persist(): void;
+        timeStamp: number;
+        type: string;
+    }
+
+    /**
+     * currentTarget - a reference to the element on which the event listener is registered.
+     *
+     * target - a reference to the element from which the event was originally dispatched.
+     * This might be a child element to the element on which the event listener is registered.
+     * If you thought this should be `EventTarget & T`, see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11508#issuecomment-256045682
+     */
+    interface SyntheticEvent<T = Element, E = Event> extends BaseSyntheticEvent<E, EventTarget & T, EventTarget> {}
+
+    interface ClipboardEvent<T = Element> extends SyntheticEvent<T, NativeClipboardEvent> {
+        clipboardData: DataTransfer;
+    }
+
+    interface CompositionEvent<T = Element> extends SyntheticEvent<T, NativeCompositionEvent> {
+        data: string;
+    }
+
+    interface DragEvent<T = Element> extends MouseEvent<T, NativeDragEvent> {
+        dataTransfer: DataTransfer;
+    }
+
+    interface PointerEvent<T = Element> extends MouseEvent<T, NativePointerEvent> {
+        pointerId: number;
+        pressure: number;
+        tangentialPressure: number;
+        tiltX: number;
+        tiltY: number;
+        twist: number;
+        width: number;
+        height: number;
+        pointerType: "mouse" | "pen" | "touch";
+        isPrimary: boolean;
+    }
+
+    interface FocusEvent<Target = Element, RelatedTarget = Element> extends SyntheticEvent<Target, NativeFocusEvent> {
+        relatedTarget: (EventTarget & RelatedTarget) | null;
+        target: EventTarget & Target;
+    }
+
+    interface FormEvent<T = Element> extends SyntheticEvent<T> {
+    }
+
+    interface InvalidEvent<T = Element> extends SyntheticEvent<T> {
+        target: EventTarget & T;
+    }
+
+    interface ChangeEvent<T = Element> extends SyntheticEvent<T> {
+        target: EventTarget & T;
+    }
+
+    export type ModifierKey =
+        | "Alt"
+        | "AltGraph"
+        | "CapsLock"
+        | "Control"
+        | "Fn"
+        | "FnLock"
+        | "Hyper"
+        | "Meta"
+        | "NumLock"
+        | "ScrollLock"
+        | "Shift"
+        | "Super"
+        | "Symbol"
+        | "SymbolLock";
+
+    interface KeyboardEvent<T = Element> extends UIEvent<T, NativeKeyboardEvent> {
+        altKey: boolean;
+        /** @deprecated */
+        charCode: number;
+        ctrlKey: boolean;
+        code: string;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        /**
+         * See the [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#named-key-attribute-values). for possible values
+         */
+        key: string;
+        /** @deprecated */
+        keyCode: number;
+        locale: string;
+        location: number;
+        metaKey: boolean;
+        repeat: boolean;
+        shiftKey: boolean;
+        /** @deprecated */
+        which: number;
+    }
+
+    interface MouseEvent<T = Element, E = NativeMouseEvent> extends UIEvent<T, E> {
+        altKey: boolean;
+        button: number;
+        buttons: number;
+        clientX: number;
+        clientY: number;
+        ctrlKey: boolean;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        metaKey: boolean;
+        movementX: number;
+        movementY: number;
+        pageX: number;
+        pageY: number;
+        relatedTarget: EventTarget | null;
+        screenX: number;
+        screenY: number;
+        shiftKey: boolean;
+    }
+
+    interface TouchEvent<T = Element> extends UIEvent<T, NativeTouchEvent> {
+        altKey: boolean;
+        changedTouches: TouchList;
+        ctrlKey: boolean;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        metaKey: boolean;
+        shiftKey: boolean;
+        targetTouches: TouchList;
+        touches: TouchList;
+    }
+
+    interface UIEvent<T = Element, E = NativeUIEvent> extends SyntheticEvent<T, E> {
+        detail: number;
+        view: AbstractView;
+    }
+
+    interface WheelEvent<T = Element> extends MouseEvent<T, NativeWheelEvent> {
+        deltaMode: number;
+        deltaX: number;
+        deltaY: number;
+        deltaZ: number;
+    }
+
+    interface AnimationEvent<T = Element> extends SyntheticEvent<T, NativeAnimationEvent> {
+        animationName: string;
+        elapsedTime: number;
+        pseudoElement: string;
+    }
+
+    interface TransitionEvent<T = Element> extends SyntheticEvent<T, NativeTransitionEvent> {
+        elapsedTime: number;
+        propertyName: string;
+        pseudoElement: string;
+    }
+
+    //
+    // Event Handler Types
+    // ----------------------------------------------------------------------
+
+    type EventHandler<E extends SyntheticEvent<any>> = { bivarianceHack(event: E): void }["bivarianceHack"];
+
+    type ReactEventHandler<T = Element> = EventHandler<SyntheticEvent<T>>;
+
+    type ClipboardEventHandler<T = Element> = EventHandler<ClipboardEvent<T>>;
+    type CompositionEventHandler<T = Element> = EventHandler<CompositionEvent<T>>;
+    type DragEventHandler<T = Element> = EventHandler<DragEvent<T>>;
+    type FocusEventHandler<T = Element> = EventHandler<FocusEvent<T>>;
+    type FormEventHandler<T = Element> = EventHandler<FormEvent<T>>;
+    type ChangeEventHandler<T = Element> = EventHandler<ChangeEvent<T>>;
+    type KeyboardEventHandler<T = Element> = EventHandler<KeyboardEvent<T>>;
+    type MouseEventHandler<T = Element> = EventHandler<MouseEvent<T>>;
+    type TouchEventHandler<T = Element> = EventHandler<TouchEvent<T>>;
+    type PointerEventHandler<T = Element> = EventHandler<PointerEvent<T>>;
+    type UIEventHandler<T = Element> = EventHandler<UIEvent<T>>;
+    type WheelEventHandler<T = Element> = EventHandler<WheelEvent<T>>;
+    type AnimationEventHandler<T = Element> = EventHandler<AnimationEvent<T>>;
+    type TransitionEventHandler<T = Element> = EventHandler<TransitionEvent<T>>;
+
+    //
+    // Props / DOM Attributes
+    // ----------------------------------------------------------------------
+
+    interface HTMLProps<T> extends AllHTMLAttributes<T>, ClassAttributes<T> {
+    }
+
+    type DetailedHTMLProps<E extends HTMLAttributes<T>, T> = ClassAttributes<T> & E;
+
+    interface SVGProps<T> extends SVGAttributes<T>, ClassAttributes<T> {
+    }
+
+    interface SVGLineElementAttributes<T> extends SVGProps<T> {}
+    interface SVGTextElementAttributes<T> extends SVGProps<T> {}
+
+    interface DOMAttributes<T> {
+        children?: ReactNode | undefined;
+        dangerouslySetInnerHTML?: {
+            // Should be InnerHTML['innerHTML'].
+            // But unfortunately we're mixing renderer-specific type declarations.
+            __html: string | TrustedHTML;
+        } | undefined;
+
+        // Clipboard Events
+        onCopy?: ClipboardEventHandler<T> | undefined;
+        onCopyCapture?: ClipboardEventHandler<T> | undefined;
+        onCut?: ClipboardEventHandler<T> | undefined;
+        onCutCapture?: ClipboardEventHandler<T> | undefined;
+        onPaste?: ClipboardEventHandler<T> | undefined;
+        onPasteCapture?: ClipboardEventHandler<T> | undefined;
+
+        // Composition Events
+        onCompositionEnd?: CompositionEventHandler<T> | undefined;
+        onCompositionEndCapture?: CompositionEventHandler<T> | undefined;
+        onCompositionStart?: CompositionEventHandler<T> | undefined;
+        onCompositionStartCapture?: CompositionEventHandler<T> | undefined;
+        onCompositionUpdate?: CompositionEventHandler<T> | undefined;
+        onCompositionUpdateCapture?: CompositionEventHandler<T> | undefined;
+
+        // Focus Events
+        onFocus?: FocusEventHandler<T> | undefined;
+        onFocusCapture?: FocusEventHandler<T> | undefined;
+        onBlur?: FocusEventHandler<T> | undefined;
+        onBlurCapture?: FocusEventHandler<T> | undefined;
+
+        // Form Events
+        onChange?: FormEventHandler<T> | undefined;
+        onChangeCapture?: FormEventHandler<T> | undefined;
+        onBeforeInput?: FormEventHandler<T> | undefined;
+        onBeforeInputCapture?: FormEventHandler<T> | undefined;
+        onInput?: FormEventHandler<T> | undefined;
+        onInputCapture?: FormEventHandler<T> | undefined;
+        onReset?: FormEventHandler<T> | undefined;
+        onResetCapture?: FormEventHandler<T> | undefined;
+        onSubmit?: FormEventHandler<T> | undefined;
+        onSubmitCapture?: FormEventHandler<T> | undefined;
+        onInvalid?: FormEventHandler<T> | undefined;
+        onInvalidCapture?: FormEventHandler<T> | undefined;
+
+        // Image Events
+        onLoad?: ReactEventHandler<T> | undefined;
+        onLoadCapture?: ReactEventHandler<T> | undefined;
+        onError?: ReactEventHandler<T> | undefined; // also a Media Event
+        onErrorCapture?: ReactEventHandler<T> | undefined; // also a Media Event
+
+        // Keyboard Events
+        onKeyDown?: KeyboardEventHandler<T> | undefined;
+        onKeyDownCapture?: KeyboardEventHandler<T> | undefined;
+        /** @deprecated Use `onKeyUp` or `onKeyDown` instead */
+        onKeyPress?: KeyboardEventHandler<T> | undefined;
+        /** @deprecated Use `onKeyUpCapture` or `onKeyDownCapture` instead */
+        onKeyPressCapture?: KeyboardEventHandler<T> | undefined;
+        onKeyUp?: KeyboardEventHandler<T> | undefined;
+        onKeyUpCapture?: KeyboardEventHandler<T> | undefined;
+
+        // Media Events
+        onAbort?: ReactEventHandler<T> | undefined;
+        onAbortCapture?: ReactEventHandler<T> | undefined;
+        onCanPlay?: ReactEventHandler<T> | undefined;
+        onCanPlayCapture?: ReactEventHandler<T> | undefined;
+        onCanPlayThrough?: ReactEventHandler<T> | undefined;
+        onCanPlayThroughCapture?: ReactEventHandler<T> | undefined;
+        onDurationChange?: ReactEventHandler<T> | undefined;
+        onDurationChangeCapture?: ReactEventHandler<T> | undefined;
+        onEmptied?: ReactEventHandler<T> | undefined;
+        onEmptiedCapture?: ReactEventHandler<T> | undefined;
+        onEncrypted?: ReactEventHandler<T> | undefined;
+        onEncryptedCapture?: ReactEventHandler<T> | undefined;
+        onEnded?: ReactEventHandler<T> | undefined;
+        onEndedCapture?: ReactEventHandler<T> | undefined;
+        onLoadedData?: ReactEventHandler<T> | undefined;
+        onLoadedDataCapture?: ReactEventHandler<T> | undefined;
+        onLoadedMetadata?: ReactEventHandler<T> | undefined;
+        onLoadedMetadataCapture?: ReactEventHandler<T> | undefined;
+        onLoadStart?: ReactEventHandler<T> | undefined;
+        onLoadStartCapture?: ReactEventHandler<T> | undefined;
+        onPause?: ReactEventHandler<T> | undefined;
+        onPauseCapture?: ReactEventHandler<T> | undefined;
+        onPlay?: ReactEventHandler<T> | undefined;
+        onPlayCapture?: ReactEventHandler<T> | undefined;
+        onPlaying?: ReactEventHandler<T> | undefined;
+        onPlayingCapture?: ReactEventHandler<T> | undefined;
+        onProgress?: ReactEventHandler<T> | undefined;
+        onProgressCapture?: ReactEventHandler<T> | undefined;
+        onRateChange?: ReactEventHandler<T> | undefined;
+        onRateChangeCapture?: ReactEventHandler<T> | undefined;
+        onResize?: ReactEventHandler<T> | undefined;
+        onResizeCapture?: ReactEventHandler<T> | undefined;
+        onSeeked?: ReactEventHandler<T> | undefined;
+        onSeekedCapture?: ReactEventHandler<T> | undefined;
+        onSeeking?: ReactEventHandler<T> | undefined;
+        onSeekingCapture?: ReactEventHandler<T> | undefined;
+        onStalled?: ReactEventHandler<T> | undefined;
+        onStalledCapture?: ReactEventHandler<T> | undefined;
+        onSuspend?: ReactEventHandler<T> | undefined;
+        onSuspendCapture?: ReactEventHandler<T> | undefined;
+        onTimeUpdate?: ReactEventHandler<T> | undefined;
+        onTimeUpdateCapture?: ReactEventHandler<T> | undefined;
+        onVolumeChange?: ReactEventHandler<T> | undefined;
+        onVolumeChangeCapture?: ReactEventHandler<T> | undefined;
+        onWaiting?: ReactEventHandler<T> | undefined;
+        onWaitingCapture?: ReactEventHandler<T> | undefined;
+
+        // MouseEvents
+        onAuxClick?: MouseEventHandler<T> | undefined;
+        onAuxClickCapture?: MouseEventHandler<T> | undefined;
+        onClick?: MouseEventHandler<T> | undefined;
+        onClickCapture?: MouseEventHandler<T> | undefined;
+        onContextMenu?: MouseEventHandler<T> | undefined;
+        onContextMenuCapture?: MouseEventHandler<T> | undefined;
+        onDoubleClick?: MouseEventHandler<T> | undefined;
+        onDoubleClickCapture?: MouseEventHandler<T> | undefined;
+        onDrag?: DragEventHandler<T> | undefined;
+        onDragCapture?: DragEventHandler<T> | undefined;
+        onDragEnd?: DragEventHandler<T> | undefined;
+        onDragEndCapture?: DragEventHandler<T> | undefined;
+        onDragEnter?: DragEventHandler<T> | undefined;
+        onDragEnterCapture?: DragEventHandler<T> | undefined;
+        onDragExit?: DragEventHandler<T> | undefined;
+        onDragExitCapture?: DragEventHandler<T> | undefined;
+        onDragLeave?: DragEventHandler<T> | undefined;
+        onDragLeaveCapture?: DragEventHandler<T> | undefined;
+        onDragOver?: DragEventHandler<T> | undefined;
+        onDragOverCapture?: DragEventHandler<T> | undefined;
+        onDragStart?: DragEventHandler<T> | undefined;
+        onDragStartCapture?: DragEventHandler<T> | undefined;
+        onDrop?: DragEventHandler<T> | undefined;
+        onDropCapture?: DragEventHandler<T> | undefined;
+        onMouseDown?: MouseEventHandler<T> | undefined;
+        onMouseDownCapture?: MouseEventHandler<T> | undefined;
+        onMouseEnter?: MouseEventHandler<T> | undefined;
+        onMouseLeave?: MouseEventHandler<T> | undefined;
+        onMouseMove?: MouseEventHandler<T> | undefined;
+        onMouseMoveCapture?: MouseEventHandler<T> | undefined;
+        onMouseOut?: MouseEventHandler<T> | undefined;
+        onMouseOutCapture?: MouseEventHandler<T> | undefined;
+        onMouseOver?: MouseEventHandler<T> | undefined;
+        onMouseOverCapture?: MouseEventHandler<T> | undefined;
+        onMouseUp?: MouseEventHandler<T> | undefined;
+        onMouseUpCapture?: MouseEventHandler<T> | undefined;
+
+        // Selection Events
+        onSelect?: ReactEventHandler<T> | undefined;
+        onSelectCapture?: ReactEventHandler<T> | undefined;
+
+        // Touch Events
+        onTouchCancel?: TouchEventHandler<T> | undefined;
+        onTouchCancelCapture?: TouchEventHandler<T> | undefined;
+        onTouchEnd?: TouchEventHandler<T> | undefined;
+        onTouchEndCapture?: TouchEventHandler<T> | undefined;
+        onTouchMove?: TouchEventHandler<T> | undefined;
+        onTouchMoveCapture?: TouchEventHandler<T> | undefined;
+        onTouchStart?: TouchEventHandler<T> | undefined;
+        onTouchStartCapture?: TouchEventHandler<T> | undefined;
+
+        // Pointer Events
+        onPointerDown?: PointerEventHandler<T> | undefined;
+        onPointerDownCapture?: PointerEventHandler<T> | undefined;
+        onPointerMove?: PointerEventHandler<T> | undefined;
+        onPointerMoveCapture?: PointerEventHandler<T> | undefined;
+        onPointerUp?: PointerEventHandler<T> | undefined;
+        onPointerUpCapture?: PointerEventHandler<T> | undefined;
+        onPointerCancel?: PointerEventHandler<T> | undefined;
+        onPointerCancelCapture?: PointerEventHandler<T> | undefined;
+        onPointerEnter?: PointerEventHandler<T> | undefined;
+        onPointerLeave?: PointerEventHandler<T> | undefined;
+        onPointerOver?: PointerEventHandler<T> | undefined;
+        onPointerOverCapture?: PointerEventHandler<T> | undefined;
+        onPointerOut?: PointerEventHandler<T> | undefined;
+        onPointerOutCapture?: PointerEventHandler<T> | undefined;
+        onGotPointerCapture?: PointerEventHandler<T> | undefined;
+        onGotPointerCaptureCapture?: PointerEventHandler<T> | undefined;
+        onLostPointerCapture?: PointerEventHandler<T> | undefined;
+        onLostPointerCaptureCapture?: PointerEventHandler<T> | undefined;
+
+        // UI Events
+        onScroll?: UIEventHandler<T> | undefined;
+        onScrollCapture?: UIEventHandler<T> | undefined;
+
+        // Wheel Events
+        onWheel?: WheelEventHandler<T> | undefined;
+        onWheelCapture?: WheelEventHandler<T> | undefined;
+
+        // Animation Events
+        onAnimationStart?: AnimationEventHandler<T> | undefined;
+        onAnimationStartCapture?: AnimationEventHandler<T> | undefined;
+        onAnimationEnd?: AnimationEventHandler<T> | undefined;
+        onAnimationEndCapture?: AnimationEventHandler<T> | undefined;
+        onAnimationIteration?: AnimationEventHandler<T> | undefined;
+        onAnimationIterationCapture?: AnimationEventHandler<T> | undefined;
+
+        // Transition Events
+        onTransitionEnd?: TransitionEventHandler<T> | undefined;
+        onTransitionEndCapture?: TransitionEventHandler<T> | undefined;
+    }
+
+    export interface CSSProperties extends CSS.Properties<string | number> {
+        /**
+         * The index signature was removed to enable closed typing for style
+         * using CSSType. You're able to use type assertion or module augmentation
+         * to add properties or an index signature of your own.
+         *
+         * For examples and more information, visit:
+         * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors
+         */
+    }
+
+    // All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/
+    interface AriaAttributes {
+        /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */
+        "aria-activedescendant"?: string | undefined;
+        /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */
+        "aria-atomic"?: Booleanish | undefined;
+        /**
+         * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be
+         * presented if they are made.
+         */
+        "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
+        /** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */
+        /**
+         * Defines a string value that labels the current element, which is intended to be converted into Braille.
+         * @see aria-label.
+         */
+        "aria-braillelabel"?: string | undefined;
+        /**
+         * Defines a human-readable, author-localized abbreviated description for the role of an element, which is intended to be converted into Braille.
+         * @see aria-roledescription.
+         */
+        "aria-brailleroledescription"?: string | undefined;
+        "aria-busy"?: Booleanish | undefined;
+        /**
+         * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets.
+         * @see aria-pressed @see aria-selected.
+         */
+        "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
+        /**
+         * Defines the total number of columns in a table, grid, or treegrid.
+         * @see aria-colindex.
+         */
+        "aria-colcount"?: number | undefined;
+        /**
+         * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid.
+         * @see aria-colcount @see aria-colspan.
+         */
+        "aria-colindex"?: number | undefined;
+        /**
+         * Defines a human readable text alternative of aria-colindex.
+         * @see aria-rowindextext.
+         */
+        "aria-colindextext"?: string | undefined;
+        /**
+         * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.
+         * @see aria-colindex @see aria-rowspan.
+         */
+        "aria-colspan"?: number | undefined;
+        /**
+         * Identifies the element (or elements) whose contents or presence are controlled by the current element.
+         * @see aria-owns.
+         */
+        "aria-controls"?: string | undefined;
+        /** Indicates the element that represents the current item within a container or set of related elements. */
+        "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
+        /**
+         * Identifies the element (or elements) that describes the object.
+         * @see aria-labelledby
+         */
+        "aria-describedby"?: string | undefined;
+        /**
+         * Defines a string value that describes or annotates the current element.
+         * @see related aria-describedby.
+         */
+        "aria-description"?: string | undefined;
+        /**
+         * Identifies the element that provides a detailed, extended description for the object.
+         * @see aria-describedby.
+         */
+        "aria-details"?: string | undefined;
+        /**
+         * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.
+         * @see aria-hidden @see aria-readonly.
+         */
+        "aria-disabled"?: Booleanish | undefined;
+        /**
+         * Indicates what functions can be performed when a dragged object is released on the drop target.
+         * @deprecated in ARIA 1.1
+         */
+        "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
+        /**
+         * Identifies the element that provides an error message for the object.
+         * @see aria-invalid @see aria-describedby.
+         */
+        "aria-errormessage"?: string | undefined;
+        /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */
+        "aria-expanded"?: Booleanish | undefined;
+        /**
+         * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion,
+         * allows assistive technology to override the general default of reading in document source order.
+         */
+        "aria-flowto"?: string | undefined;
+        /**
+         * Indicates an element's "grabbed" state in a drag-and-drop operation.
+         * @deprecated in ARIA 1.1
+         */
+        "aria-grabbed"?: Booleanish | undefined;
+        /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */
+        "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
+        /**
+         * Indicates whether the element is exposed to an accessibility API.
+         * @see aria-disabled.
+         */
+        "aria-hidden"?: Booleanish | undefined;
+        /**
+         * Indicates the entered value does not conform to the format expected by the application.
+         * @see aria-errormessage.
+         */
+        "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
+        /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */
+        "aria-keyshortcuts"?: string | undefined;
+        /**
+         * Defines a string value that labels the current element.
+         * @see aria-labelledby.
+         */
+        "aria-label"?: string | undefined;
+        /**
+         * Identifies the element (or elements) that labels the current element.
+         * @see aria-describedby.
+         */
+        "aria-labelledby"?: string | undefined;
+        /** Defines the hierarchical level of an element within a structure. */
+        "aria-level"?: number | undefined;
+        /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */
+        "aria-live"?: "off" | "assertive" | "polite" | undefined;
+        /** Indicates whether an element is modal when displayed. */
+        "aria-modal"?: Booleanish | undefined;
+        /** Indicates whether a text box accepts multiple lines of input or only a single line. */
+        "aria-multiline"?: Booleanish | undefined;
+        /** Indicates that the user may select more than one item from the current selectable descendants. */
+        "aria-multiselectable"?: Booleanish | undefined;
+        /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */
+        "aria-orientation"?: "horizontal" | "vertical" | undefined;
+        /**
+         * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship
+         * between DOM elements where the DOM hierarchy cannot be used to represent the relationship.
+         * @see aria-controls.
+         */
+        "aria-owns"?: string | undefined;
+        /**
+         * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value.
+         * A hint could be a sample value or a brief description of the expected format.
+         */
+        "aria-placeholder"?: string | undefined;
+        /**
+         * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.
+         * @see aria-setsize.
+         */
+        "aria-posinset"?: number | undefined;
+        /**
+         * Indicates the current "pressed" state of toggle buttons.
+         * @see aria-checked @see aria-selected.
+         */
+        "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
+        /**
+         * Indicates that the element is not editable, but is otherwise operable.
+         * @see aria-disabled.
+         */
+        "aria-readonly"?: Booleanish | undefined;
+        /**
+         * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified.
+         * @see aria-atomic.
+         */
+        "aria-relevant"?:
+            | "additions"
+            | "additions removals"
+            | "additions text"
+            | "all"
+            | "removals"
+            | "removals additions"
+            | "removals text"
+            | "text"
+            | "text additions"
+            | "text removals"
+            | undefined;
+        /** Indicates that user input is required on the element before a form may be submitted. */
+        "aria-required"?: Booleanish | undefined;
+        /** Defines a human-readable, author-localized description for the role of an element. */
+        "aria-roledescription"?: string | undefined;
+        /**
+         * Defines the total number of rows in a table, grid, or treegrid.
+         * @see aria-rowindex.
+         */
+        "aria-rowcount"?: number | undefined;
+        /**
+         * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid.
+         * @see aria-rowcount @see aria-rowspan.
+         */
+        "aria-rowindex"?: number | undefined;
+        /**
+         * Defines a human readable text alternative of aria-rowindex.
+         * @see aria-colindextext.
+         */
+        "aria-rowindextext"?: string | undefined;
+        /**
+         * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.
+         * @see aria-rowindex @see aria-colspan.
+         */
+        "aria-rowspan"?: number | undefined;
+        /**
+         * Indicates the current "selected" state of various widgets.
+         * @see aria-checked @see aria-pressed.
+         */
+        "aria-selected"?: Booleanish | undefined;
+        /**
+         * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.
+         * @see aria-posinset.
+         */
+        "aria-setsize"?: number | undefined;
+        /** Indicates if items in a table or grid are sorted in ascending or descending order. */
+        "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
+        /** Defines the maximum allowed value for a range widget. */
+        "aria-valuemax"?: number | undefined;
+        /** Defines the minimum allowed value for a range widget. */
+        "aria-valuemin"?: number | undefined;
+        /**
+         * Defines the current value for a range widget.
+         * @see aria-valuetext.
+         */
+        "aria-valuenow"?: number | undefined;
+        /** Defines the human readable text alternative of aria-valuenow for a range widget. */
+        "aria-valuetext"?: string | undefined;
+    }
+
+    // All the WAI-ARIA 1.1 role attribute values from https://www.w3.org/TR/wai-aria-1.1/#role_definitions
+    type AriaRole =
+        | "alert"
+        | "alertdialog"
+        | "application"
+        | "article"
+        | "banner"
+        | "button"
+        | "cell"
+        | "checkbox"
+        | "columnheader"
+        | "combobox"
+        | "complementary"
+        | "contentinfo"
+        | "definition"
+        | "dialog"
+        | "directory"
+        | "document"
+        | "feed"
+        | "figure"
+        | "form"
+        | "grid"
+        | "gridcell"
+        | "group"
+        | "heading"
+        | "img"
+        | "link"
+        | "list"
+        | "listbox"
+        | "listitem"
+        | "log"
+        | "main"
+        | "marquee"
+        | "math"
+        | "menu"
+        | "menubar"
+        | "menuitem"
+        | "menuitemcheckbox"
+        | "menuitemradio"
+        | "navigation"
+        | "none"
+        | "note"
+        | "option"
+        | "presentation"
+        | "progressbar"
+        | "radio"
+        | "radiogroup"
+        | "region"
+        | "row"
+        | "rowgroup"
+        | "rowheader"
+        | "scrollbar"
+        | "search"
+        | "searchbox"
+        | "separator"
+        | "slider"
+        | "spinbutton"
+        | "status"
+        | "switch"
+        | "tab"
+        | "table"
+        | "tablist"
+        | "tabpanel"
+        | "term"
+        | "textbox"
+        | "timer"
+        | "toolbar"
+        | "tooltip"
+        | "tree"
+        | "treegrid"
+        | "treeitem"
+        | (string & {});
+
+    interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
+        // React-specific Attributes
+        defaultChecked?: boolean | undefined;
+        defaultValue?: string | number | readonly string[] | undefined;
+        suppressContentEditableWarning?: boolean | undefined;
+        suppressHydrationWarning?: boolean | undefined;
+
+        // Standard HTML Attributes
+        accessKey?: string | undefined;
+        autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
+        autoFocus?: boolean | undefined;
+        className?: string | undefined;
+        contentEditable?: Booleanish | "inherit" | "plaintext-only" | undefined;
+        contextMenu?: string | undefined;
+        dir?: string | undefined;
+        draggable?: Booleanish | undefined;
+        enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
+        hidden?: boolean | undefined;
+        id?: string | undefined;
+        lang?: string | undefined;
+        nonce?: string | undefined;
+        slot?: string | undefined;
+        spellCheck?: Booleanish | undefined;
+        style?: CSSProperties | undefined;
+        tabIndex?: number | undefined;
+        title?: string | undefined;
+        translate?: "yes" | "no" | undefined;
+
+        // Unknown
+        radioGroup?: string | undefined; // <command>, <menuitem>
+
+        // WAI-ARIA
+        role?: AriaRole | undefined;
+
+        // RDFa Attributes
+        about?: string | undefined;
+        content?: string | undefined;
+        datatype?: string | undefined;
+        inlist?: any;
+        prefix?: string | undefined;
+        property?: string | undefined;
+        rel?: string | undefined;
+        resource?: string | undefined;
+        rev?: string | undefined;
+        typeof?: string | undefined;
+        vocab?: string | undefined;
+
+        // Non-standard Attributes
+        autoCorrect?: string | undefined;
+        autoSave?: string | undefined;
+        color?: string | undefined;
+        itemProp?: string | undefined;
+        itemScope?: boolean | undefined;
+        itemType?: string | undefined;
+        itemID?: string | undefined;
+        itemRef?: string | undefined;
+        results?: number | undefined;
+        security?: string | undefined;
+        unselectable?: "on" | "off" | undefined;
+
+        // Living Standard
+        /**
+         * Hints at the type of data that might be entered by the user while editing the element or its contents
+         * @see {@link https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute}
+         */
+        inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
+        /**
+         * Specify that a standard HTML element should behave like a defined custom built-in element
+         * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is}
+         */
+        is?: string | undefined;
+    }
+
+    /**
+     * For internal usage only.
+     * Different release channels declare additional types of ReactNode this particular release channel accepts.
+     * App or library types should never augment this interface.
+     */
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS {}
+
+    interface AllHTMLAttributes<T> extends HTMLAttributes<T> {
+        // Standard HTML Attributes
+        accept?: string | undefined;
+        acceptCharset?: string | undefined;
+        action?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        allowFullScreen?: boolean | undefined;
+        allowTransparency?: boolean | undefined;
+        alt?: string | undefined;
+        as?: string | undefined;
+        async?: boolean | undefined;
+        autoComplete?: string | undefined;
+        autoPlay?: boolean | undefined;
+        capture?: boolean | "user" | "environment" | undefined;
+        cellPadding?: number | string | undefined;
+        cellSpacing?: number | string | undefined;
+        charSet?: string | undefined;
+        challenge?: string | undefined;
+        checked?: boolean | undefined;
+        cite?: string | undefined;
+        classID?: string | undefined;
+        cols?: number | undefined;
+        colSpan?: number | undefined;
+        controls?: boolean | undefined;
+        coords?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        data?: string | undefined;
+        dateTime?: string | undefined;
+        default?: boolean | undefined;
+        defer?: boolean | undefined;
+        disabled?: boolean | undefined;
+        download?: any;
+        encType?: string | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        frameBorder?: number | string | undefined;
+        headers?: string | undefined;
+        height?: number | string | undefined;
+        high?: number | undefined;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        htmlFor?: string | undefined;
+        httpEquiv?: string | undefined;
+        integrity?: string | undefined;
+        keyParams?: string | undefined;
+        keyType?: string | undefined;
+        kind?: string | undefined;
+        label?: string | undefined;
+        list?: string | undefined;
+        loop?: boolean | undefined;
+        low?: number | undefined;
+        manifest?: string | undefined;
+        marginHeight?: number | undefined;
+        marginWidth?: number | undefined;
+        max?: number | string | undefined;
+        maxLength?: number | undefined;
+        media?: string | undefined;
+        mediaGroup?: string | undefined;
+        method?: string | undefined;
+        min?: number | string | undefined;
+        minLength?: number | undefined;
+        multiple?: boolean | undefined;
+        muted?: boolean | undefined;
+        name?: string | undefined;
+        noValidate?: boolean | undefined;
+        open?: boolean | undefined;
+        optimum?: number | undefined;
+        pattern?: string | undefined;
+        placeholder?: string | undefined;
+        playsInline?: boolean | undefined;
+        poster?: string | undefined;
+        preload?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        reversed?: boolean | undefined;
+        rows?: number | undefined;
+        rowSpan?: number | undefined;
+        sandbox?: string | undefined;
+        scope?: string | undefined;
+        scoped?: boolean | undefined;
+        scrolling?: string | undefined;
+        seamless?: boolean | undefined;
+        selected?: boolean | undefined;
+        shape?: string | undefined;
+        size?: number | undefined;
+        sizes?: string | undefined;
+        span?: number | undefined;
+        src?: string | undefined;
+        srcDoc?: string | undefined;
+        srcLang?: string | undefined;
+        srcSet?: string | undefined;
+        start?: number | undefined;
+        step?: number | string | undefined;
+        summary?: string | undefined;
+        target?: string | undefined;
+        type?: string | undefined;
+        useMap?: string | undefined;
+        value?: string | readonly string[] | number | undefined;
+        width?: number | string | undefined;
+        wmode?: string | undefined;
+        wrap?: string | undefined;
+    }
+
+    type HTMLAttributeReferrerPolicy =
+        | ""
+        | "no-referrer"
+        | "no-referrer-when-downgrade"
+        | "origin"
+        | "origin-when-cross-origin"
+        | "same-origin"
+        | "strict-origin"
+        | "strict-origin-when-cross-origin"
+        | "unsafe-url";
+
+    type HTMLAttributeAnchorTarget =
+        | "_self"
+        | "_blank"
+        | "_parent"
+        | "_top"
+        | (string & {});
+
+    interface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {
+        download?: any;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        media?: string | undefined;
+        ping?: string | undefined;
+        target?: HTMLAttributeAnchorTarget | undefined;
+        type?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+    }
+
+    interface AudioHTMLAttributes<T> extends MediaHTMLAttributes<T> {}
+
+    interface AreaHTMLAttributes<T> extends HTMLAttributes<T> {
+        alt?: string | undefined;
+        coords?: string | undefined;
+        download?: any;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        media?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        shape?: string | undefined;
+        target?: string | undefined;
+    }
+
+    interface BaseHTMLAttributes<T> extends HTMLAttributes<T> {
+        href?: string | undefined;
+        target?: string | undefined;
+    }
+
+    interface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+    }
+
+    interface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ]
+            | undefined;
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        name?: string | undefined;
+        type?: "submit" | "reset" | "button" | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ColHTMLAttributes<T> extends HTMLAttributes<T> {
+        span?: number | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {
+        span?: number | undefined;
+    }
+
+    interface DataHTMLAttributes<T> extends HTMLAttributes<T> {
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {
+        open?: boolean | undefined;
+        onToggle?: ReactEventHandler<T> | undefined;
+        name?: string | undefined;
+    }
+
+    interface DelHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+        dateTime?: string | undefined;
+    }
+
+    interface DialogHTMLAttributes<T> extends HTMLAttributes<T> {
+        onCancel?: ReactEventHandler<T> | undefined;
+        onClose?: ReactEventHandler<T> | undefined;
+        open?: boolean | undefined;
+    }
+
+    interface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        src?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface FormHTMLAttributes<T> extends HTMLAttributes<T> {
+        acceptCharset?: string | undefined;
+        action?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        autoComplete?: string | undefined;
+        encType?: string | undefined;
+        method?: string | undefined;
+        name?: string | undefined;
+        noValidate?: boolean | undefined;
+        target?: string | undefined;
+    }
+
+    interface HtmlHTMLAttributes<T> extends HTMLAttributes<T> {
+        manifest?: string | undefined;
+    }
+
+    interface IframeHTMLAttributes<T> extends HTMLAttributes<T> {
+        allow?: string | undefined;
+        allowFullScreen?: boolean | undefined;
+        allowTransparency?: boolean | undefined;
+        /** @deprecated */
+        frameBorder?: number | string | undefined;
+        height?: number | string | undefined;
+        loading?: "eager" | "lazy" | undefined;
+        /** @deprecated */
+        marginHeight?: number | undefined;
+        /** @deprecated */
+        marginWidth?: number | undefined;
+        name?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sandbox?: string | undefined;
+        /** @deprecated */
+        scrolling?: string | undefined;
+        seamless?: boolean | undefined;
+        src?: string | undefined;
+        srcDoc?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
+        alt?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        decoding?: "async" | "auto" | "sync" | undefined;
+        fetchPriority?: "high" | "low" | "auto";
+        height?: number | string | undefined;
+        loading?: "eager" | "lazy" | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sizes?: string | undefined;
+        src?: string | undefined;
+        srcSet?: string | undefined;
+        useMap?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface InsHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+        dateTime?: string | undefined;
+    }
+
+    type HTMLInputTypeAttribute =
+        | "button"
+        | "checkbox"
+        | "color"
+        | "date"
+        | "datetime-local"
+        | "email"
+        | "file"
+        | "hidden"
+        | "image"
+        | "month"
+        | "number"
+        | "password"
+        | "radio"
+        | "range"
+        | "reset"
+        | "search"
+        | "submit"
+        | "tel"
+        | "text"
+        | "time"
+        | "url"
+        | "week"
+        | (string & {});
+
+    type AutoFillAddressKind = "billing" | "shipping";
+    type AutoFillBase = "" | "off" | "on";
+    type AutoFillContactField =
+        | "email"
+        | "tel"
+        | "tel-area-code"
+        | "tel-country-code"
+        | "tel-extension"
+        | "tel-local"
+        | "tel-local-prefix"
+        | "tel-local-suffix"
+        | "tel-national";
+    type AutoFillContactKind = "home" | "mobile" | "work";
+    type AutoFillCredentialField = "webauthn";
+    type AutoFillNormalField =
+        | "additional-name"
+        | "address-level1"
+        | "address-level2"
+        | "address-level3"
+        | "address-level4"
+        | "address-line1"
+        | "address-line2"
+        | "address-line3"
+        | "bday-day"
+        | "bday-month"
+        | "bday-year"
+        | "cc-csc"
+        | "cc-exp"
+        | "cc-exp-month"
+        | "cc-exp-year"
+        | "cc-family-name"
+        | "cc-given-name"
+        | "cc-name"
+        | "cc-number"
+        | "cc-type"
+        | "country"
+        | "country-name"
+        | "current-password"
+        | "family-name"
+        | "given-name"
+        | "honorific-prefix"
+        | "honorific-suffix"
+        | "name"
+        | "new-password"
+        | "one-time-code"
+        | "organization"
+        | "postal-code"
+        | "street-address"
+        | "transaction-amount"
+        | "transaction-currency"
+        | "username";
+    type OptionalPrefixToken<T extends string> = `${T} ` | "";
+    type OptionalPostfixToken<T extends string> = ` ${T}` | "";
+    type AutoFillField = AutoFillNormalField | `${OptionalPrefixToken<AutoFillContactKind>}${AutoFillContactField}`;
+    type AutoFillSection = `section-${string}`;
+    type AutoFill =
+        | AutoFillBase
+        | `${OptionalPrefixToken<AutoFillSection>}${OptionalPrefixToken<
+            AutoFillAddressKind
+        >}${AutoFillField}${OptionalPostfixToken<AutoFillCredentialField>}`;
+    type HTMLInputAutoCompleteAttribute = AutoFill | (string & {});
+
+    interface InputHTMLAttributes<T> extends HTMLAttributes<T> {
+        accept?: string | undefined;
+        alt?: string | undefined;
+        autoComplete?: HTMLInputAutoCompleteAttribute | undefined;
+        capture?: boolean | "user" | "environment" | undefined; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute
+        checked?: boolean | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ]
+            | undefined;
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        height?: number | string | undefined;
+        list?: string | undefined;
+        max?: number | string | undefined;
+        maxLength?: number | undefined;
+        min?: number | string | undefined;
+        minLength?: number | undefined;
+        multiple?: boolean | undefined;
+        name?: string | undefined;
+        pattern?: string | undefined;
+        placeholder?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        size?: number | undefined;
+        src?: string | undefined;
+        step?: number | string | undefined;
+        type?: HTMLInputTypeAttribute | undefined;
+        value?: string | readonly string[] | number | undefined;
+        width?: number | string | undefined;
+
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {
+        challenge?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        keyType?: string | undefined;
+        keyParams?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface LabelHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        htmlFor?: string | undefined;
+    }
+
+    interface LiHTMLAttributes<T> extends HTMLAttributes<T> {
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface LinkHTMLAttributes<T> extends HTMLAttributes<T> {
+        as?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        fetchPriority?: "high" | "low" | "auto";
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        integrity?: string | undefined;
+        media?: string | undefined;
+        imageSrcSet?: string | undefined;
+        imageSizes?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sizes?: string | undefined;
+        type?: string | undefined;
+        charSet?: string | undefined;
+    }
+
+    interface MapHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+    }
+
+    interface MenuHTMLAttributes<T> extends HTMLAttributes<T> {
+        type?: string | undefined;
+    }
+
+    interface MediaHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoPlay?: boolean | undefined;
+        controls?: boolean | undefined;
+        controlsList?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        loop?: boolean | undefined;
+        mediaGroup?: string | undefined;
+        muted?: boolean | undefined;
+        playsInline?: boolean | undefined;
+        preload?: string | undefined;
+        src?: string | undefined;
+    }
+
+    interface MetaHTMLAttributes<T> extends HTMLAttributes<T> {
+        charSet?: string | undefined;
+        content?: string | undefined;
+        httpEquiv?: string | undefined;
+        media?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface MeterHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        high?: number | undefined;
+        low?: number | undefined;
+        max?: number | string | undefined;
+        min?: number | string | undefined;
+        optimum?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+    }
+
+    interface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {
+        classID?: string | undefined;
+        data?: string | undefined;
+        form?: string | undefined;
+        height?: number | string | undefined;
+        name?: string | undefined;
+        type?: string | undefined;
+        useMap?: string | undefined;
+        width?: number | string | undefined;
+        wmode?: string | undefined;
+    }
+
+    interface OlHTMLAttributes<T> extends HTMLAttributes<T> {
+        reversed?: boolean | undefined;
+        start?: number | undefined;
+        type?: "1" | "a" | "A" | "i" | "I" | undefined;
+    }
+
+    interface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        label?: string | undefined;
+    }
+
+    interface OptionHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        label?: string | undefined;
+        selected?: boolean | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface OutputHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        htmlFor?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface ParamHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {
+        max?: number | string | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface SlotHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+    }
+
+    interface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {
+        async?: boolean | undefined;
+        /** @deprecated */
+        charSet?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        defer?: boolean | undefined;
+        integrity?: string | undefined;
+        noModule?: boolean | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        src?: string | undefined;
+        type?: string | undefined;
+    }
+
+    interface SelectHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoComplete?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        multiple?: boolean | undefined;
+        name?: string | undefined;
+        required?: boolean | undefined;
+        size?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        media?: string | undefined;
+        sizes?: string | undefined;
+        src?: string | undefined;
+        srcSet?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface StyleHTMLAttributes<T> extends HTMLAttributes<T> {
+        media?: string | undefined;
+        scoped?: boolean | undefined;
+        type?: string | undefined;
+    }
+
+    interface TableHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | undefined;
+        bgcolor?: string | undefined;
+        border?: number | undefined;
+        cellPadding?: number | string | undefined;
+        cellSpacing?: number | string | undefined;
+        frame?: boolean | undefined;
+        rules?: "none" | "groups" | "rows" | "columns" | "all" | undefined;
+        summary?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoComplete?: string | undefined;
+        cols?: number | undefined;
+        dirName?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        maxLength?: number | undefined;
+        minLength?: number | undefined;
+        name?: string | undefined;
+        placeholder?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        rows?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+        wrap?: string | undefined;
+
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface TdHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | "justify" | "char" | undefined;
+        colSpan?: number | undefined;
+        headers?: string | undefined;
+        rowSpan?: number | undefined;
+        scope?: string | undefined;
+        abbr?: string | undefined;
+        height?: number | string | undefined;
+        width?: number | string | undefined;
+        valign?: "top" | "middle" | "bottom" | "baseline" | undefined;
+    }
+
+    interface ThHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | "justify" | "char" | undefined;
+        colSpan?: number | undefined;
+        headers?: string | undefined;
+        rowSpan?: number | undefined;
+        scope?: string | undefined;
+        abbr?: string | undefined;
+    }
+
+    interface TimeHTMLAttributes<T> extends HTMLAttributes<T> {
+        dateTime?: string | undefined;
+    }
+
+    interface TrackHTMLAttributes<T> extends HTMLAttributes<T> {
+        default?: boolean | undefined;
+        kind?: string | undefined;
+        label?: string | undefined;
+        src?: string | undefined;
+        srcLang?: string | undefined;
+    }
+
+    interface VideoHTMLAttributes<T> extends MediaHTMLAttributes<T> {
+        height?: number | string | undefined;
+        playsInline?: boolean | undefined;
+        poster?: string | undefined;
+        width?: number | string | undefined;
+        disablePictureInPicture?: boolean | undefined;
+        disableRemotePlayback?: boolean | undefined;
+    }
+
+    // this list is "complete" in that it contains every SVG attribute
+    // that React supports, but the types can be improved.
+    // Full list here: https://facebook.github.io/react/docs/dom-elements.html
+    //
+    // The three broad type categories are (in order of restrictiveness):
+    //   - "number | string"
+    //   - "string"
+    //   - union of string literals
+    interface SVGAttributes<T> extends AriaAttributes, DOMAttributes<T> {
+        // React-specific Attributes
+        suppressHydrationWarning?: boolean | undefined;
+
+        // Attributes which also defined in HTMLAttributes
+        // See comment in SVGDOMPropertyConfig.js
+        className?: string | undefined;
+        color?: string | undefined;
+        height?: number | string | undefined;
+        id?: string | undefined;
+        lang?: string | undefined;
+        max?: number | string | undefined;
+        media?: string | undefined;
+        method?: string | undefined;
+        min?: number | string | undefined;
+        name?: string | undefined;
+        style?: CSSProperties | undefined;
+        target?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+
+        // Other HTML properties supported by SVG elements in browsers
+        role?: AriaRole | undefined;
+        tabIndex?: number | undefined;
+        crossOrigin?: CrossOrigin;
+
+        // SVG Specific attributes
+        accentHeight?: number | string | undefined;
+        accumulate?: "none" | "sum" | undefined;
+        additive?: "replace" | "sum" | undefined;
+        alignmentBaseline?:
+            | "auto"
+            | "baseline"
+            | "before-edge"
+            | "text-before-edge"
+            | "middle"
+            | "central"
+            | "after-edge"
+            | "text-after-edge"
+            | "ideographic"
+            | "alphabetic"
+            | "hanging"
+            | "mathematical"
+            | "inherit"
+            | undefined;
+        allowReorder?: "no" | "yes" | undefined;
+        alphabetic?: number | string | undefined;
+        amplitude?: number | string | undefined;
+        arabicForm?: "initial" | "medial" | "terminal" | "isolated" | undefined;
+        ascent?: number | string | undefined;
+        attributeName?: string | undefined;
+        attributeType?: string | undefined;
+        autoReverse?: Booleanish | undefined;
+        azimuth?: number | string | undefined;
+        baseFrequency?: number | string | undefined;
+        baselineShift?: number | string | undefined;
+        baseProfile?: number | string | undefined;
+        bbox?: number | string | undefined;
+        begin?: number | string | undefined;
+        bias?: number | string | undefined;
+        by?: number | string | undefined;
+        calcMode?: number | string | undefined;
+        capHeight?: number | string | undefined;
+        clip?: number | string | undefined;
+        clipPath?: string | undefined;
+        clipPathUnits?: number | string | undefined;
+        clipRule?: number | string | undefined;
+        colorInterpolation?: number | string | undefined;
+        colorInterpolationFilters?: "auto" | "sRGB" | "linearRGB" | "inherit" | undefined;
+        colorProfile?: number | string | undefined;
+        colorRendering?: number | string | undefined;
+        contentScriptType?: number | string | undefined;
+        contentStyleType?: number | string | undefined;
+        cursor?: number | string | undefined;
+        cx?: number | string | undefined;
+        cy?: number | string | undefined;
+        d?: string | undefined;
+        decelerate?: number | string | undefined;
+        descent?: number | string | undefined;
+        diffuseConstant?: number | string | undefined;
+        direction?: number | string | undefined;
+        display?: number | string | undefined;
+        divisor?: number | string | undefined;
+        dominantBaseline?: number | string | undefined;
+        dur?: number | string | undefined;
+        dx?: number | string | undefined;
+        dy?: number | string | undefined;
+        edgeMode?: number | string | undefined;
+        elevation?: number | string | undefined;
+        enableBackground?: number | string | undefined;
+        end?: number | string | undefined;
+        exponent?: number | string | undefined;
+        externalResourcesRequired?: Booleanish | undefined;
+        fill?: string | undefined;
+        fillOpacity?: number | string | undefined;
+        fillRule?: "nonzero" | "evenodd" | "inherit" | undefined;
+        filter?: string | undefined;
+        filterRes?: number | string | undefined;
+        filterUnits?: number | string | undefined;
+        floodColor?: number | string | undefined;
+        floodOpacity?: number | string | undefined;
+        focusable?: Booleanish | "auto" | undefined;
+        fontFamily?: string | undefined;
+        fontSize?: number | string | undefined;
+        fontSizeAdjust?: number | string | undefined;
+        fontStretch?: number | string | undefined;
+        fontStyle?: number | string | undefined;
+        fontVariant?: number | string | undefined;
+        fontWeight?: number | string | undefined;
+        format?: number | string | undefined;
+        fr?: number | string | undefined;
+        from?: number | string | undefined;
+        fx?: number | string | undefined;
+        fy?: number | string | undefined;
+        g1?: number | string | undefined;
+        g2?: number | string | undefined;
+        glyphName?: number | string | undefined;
+        glyphOrientationHorizontal?: number | string | undefined;
+        glyphOrientationVertical?: number | string | undefined;
+        glyphRef?: number | string | undefined;
+        gradientTransform?: string | undefined;
+        gradientUnits?: string | undefined;
+        hanging?: number | string | undefined;
+        horizAdvX?: number | string | undefined;
+        horizOriginX?: number | string | undefined;
+        href?: string | undefined;
+        ideographic?: number | string | undefined;
+        imageRendering?: number | string | undefined;
+        in2?: number | string | undefined;
+        in?: string | undefined;
+        intercept?: number | string | undefined;
+        k1?: number | string | undefined;
+        k2?: number | string | undefined;
+        k3?: number | string | undefined;
+        k4?: number | string | undefined;
+        k?: number | string | undefined;
+        kernelMatrix?: number | string | undefined;
+        kernelUnitLength?: number | string | undefined;
+        kerning?: number | string | undefined;
+        keyPoints?: number | string | undefined;
+        keySplines?: number | string | undefined;
+        keyTimes?: number | string | undefined;
+        lengthAdjust?: number | string | undefined;
+        letterSpacing?: number | string | undefined;
+        lightingColor?: number | string | undefined;
+        limitingConeAngle?: number | string | undefined;
+        local?: number | string | undefined;
+        markerEnd?: string | undefined;
+        markerHeight?: number | string | undefined;
+        markerMid?: string | undefined;
+        markerStart?: string | undefined;
+        markerUnits?: number | string | undefined;
+        markerWidth?: number | string | undefined;
+        mask?: string | undefined;
+        maskContentUnits?: number | string | undefined;
+        maskUnits?: number | string | undefined;
+        mathematical?: number | string | undefined;
+        mode?: number | string | undefined;
+        numOctaves?: number | string | undefined;
+        offset?: number | string | undefined;
+        opacity?: number | string | undefined;
+        operator?: number | string | undefined;
+        order?: number | string | undefined;
+        orient?: number | string | undefined;
+        orientation?: number | string | undefined;
+        origin?: number | string | undefined;
+        overflow?: number | string | undefined;
+        overlinePosition?: number | string | undefined;
+        overlineThickness?: number | string | undefined;
+        paintOrder?: number | string | undefined;
+        panose1?: number | string | undefined;
+        path?: string | undefined;
+        pathLength?: number | string | undefined;
+        patternContentUnits?: string | undefined;
+        patternTransform?: number | string | undefined;
+        patternUnits?: string | undefined;
+        pointerEvents?: number | string | undefined;
+        points?: string | undefined;
+        pointsAtX?: number | string | undefined;
+        pointsAtY?: number | string | undefined;
+        pointsAtZ?: number | string | undefined;
+        preserveAlpha?: Booleanish | undefined;
+        preserveAspectRatio?: string | undefined;
+        primitiveUnits?: number | string | undefined;
+        r?: number | string | undefined;
+        radius?: number | string | undefined;
+        refX?: number | string | undefined;
+        refY?: number | string | undefined;
+        renderingIntent?: number | string | undefined;
+        repeatCount?: number | string | undefined;
+        repeatDur?: number | string | undefined;
+        requiredExtensions?: number | string | undefined;
+        requiredFeatures?: number | string | undefined;
+        restart?: number | string | undefined;
+        result?: string | undefined;
+        rotate?: number | string | undefined;
+        rx?: number | string | undefined;
+        ry?: number | string | undefined;
+        scale?: number | string | undefined;
+        seed?: number | string | undefined;
+        shapeRendering?: number | string | undefined;
+        slope?: number | string | undefined;
+        spacing?: number | string | undefined;
+        specularConstant?: number | string | undefined;
+        specularExponent?: number | string | undefined;
+        speed?: number | string | undefined;
+        spreadMethod?: string | undefined;
+        startOffset?: number | string | undefined;
+        stdDeviation?: number | string | undefined;
+        stemh?: number | string | undefined;
+        stemv?: number | string | undefined;
+        stitchTiles?: number | string | undefined;
+        stopColor?: string | undefined;
+        stopOpacity?: number | string | undefined;
+        strikethroughPosition?: number | string | undefined;
+        strikethroughThickness?: number | string | undefined;
+        string?: number | string | undefined;
+        stroke?: string | undefined;
+        strokeDasharray?: string | number | undefined;
+        strokeDashoffset?: string | number | undefined;
+        strokeLinecap?: "butt" | "round" | "square" | "inherit" | undefined;
+        strokeLinejoin?: "miter" | "round" | "bevel" | "inherit" | undefined;
+        strokeMiterlimit?: number | string | undefined;
+        strokeOpacity?: number | string | undefined;
+        strokeWidth?: number | string | undefined;
+        surfaceScale?: number | string | undefined;
+        systemLanguage?: number | string | undefined;
+        tableValues?: number | string | undefined;
+        targetX?: number | string | undefined;
+        targetY?: number | string | undefined;
+        textAnchor?: string | undefined;
+        textDecoration?: number | string | undefined;
+        textLength?: number | string | undefined;
+        textRendering?: number | string | undefined;
+        to?: number | string | undefined;
+        transform?: string | undefined;
+        u1?: number | string | undefined;
+        u2?: number | string | undefined;
+        underlinePosition?: number | string | undefined;
+        underlineThickness?: number | string | undefined;
+        unicode?: number | string | undefined;
+        unicodeBidi?: number | string | undefined;
+        unicodeRange?: number | string | undefined;
+        unitsPerEm?: number | string | undefined;
+        vAlphabetic?: number | string | undefined;
+        values?: string | undefined;
+        vectorEffect?: number | string | undefined;
+        version?: string | undefined;
+        vertAdvY?: number | string | undefined;
+        vertOriginX?: number | string | undefined;
+        vertOriginY?: number | string | undefined;
+        vHanging?: number | string | undefined;
+        vIdeographic?: number | string | undefined;
+        viewBox?: string | undefined;
+        viewTarget?: number | string | undefined;
+        visibility?: number | string | undefined;
+        vMathematical?: number | string | undefined;
+        widths?: number | string | undefined;
+        wordSpacing?: number | string | undefined;
+        writingMode?: number | string | undefined;
+        x1?: number | string | undefined;
+        x2?: number | string | undefined;
+        x?: number | string | undefined;
+        xChannelSelector?: string | undefined;
+        xHeight?: number | string | undefined;
+        xlinkActuate?: string | undefined;
+        xlinkArcrole?: string | undefined;
+        xlinkHref?: string | undefined;
+        xlinkRole?: string | undefined;
+        xlinkShow?: string | undefined;
+        xlinkTitle?: string | undefined;
+        xlinkType?: string | undefined;
+        xmlBase?: string | undefined;
+        xmlLang?: string | undefined;
+        xmlns?: string | undefined;
+        xmlnsXlink?: string | undefined;
+        xmlSpace?: string | undefined;
+        y1?: number | string | undefined;
+        y2?: number | string | undefined;
+        y?: number | string | undefined;
+        yChannelSelector?: string | undefined;
+        z?: number | string | undefined;
+        zoomAndPan?: string | undefined;
+    }
+
+    interface WebViewHTMLAttributes<T> extends HTMLAttributes<T> {
+        allowFullScreen?: boolean | undefined;
+        allowpopups?: boolean | undefined;
+        autosize?: boolean | undefined;
+        blinkfeatures?: string | undefined;
+        disableblinkfeatures?: string | undefined;
+        disableguestresize?: boolean | undefined;
+        disablewebsecurity?: boolean | undefined;
+        guestinstance?: string | undefined;
+        httpreferrer?: string | undefined;
+        nodeintegration?: boolean | undefined;
+        partition?: string | undefined;
+        plugins?: boolean | undefined;
+        preload?: string | undefined;
+        src?: string | undefined;
+        useragent?: string | undefined;
+        webpreferences?: string | undefined;
+    }
+
+    //
+    // React.DOM
+    // ----------------------------------------------------------------------
+
+    interface ReactHTML {
+        a: DetailedHTMLFactory<AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
+        abbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        address: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        area: DetailedHTMLFactory<AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>;
+        article: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        aside: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        audio: DetailedHTMLFactory<AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>;
+        b: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        base: DetailedHTMLFactory<BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>;
+        bdi: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        bdo: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        big: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        blockquote: DetailedHTMLFactory<BlockquoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+        body: DetailedHTMLFactory<HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>;
+        br: DetailedHTMLFactory<HTMLAttributes<HTMLBRElement>, HTMLBRElement>;
+        button: DetailedHTMLFactory<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
+        canvas: DetailedHTMLFactory<CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>;
+        caption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        center: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        cite: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        code: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        col: DetailedHTMLFactory<ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+        colgroup: DetailedHTMLFactory<ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+        data: DetailedHTMLFactory<DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>;
+        datalist: DetailedHTMLFactory<HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>;
+        dd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        del: DetailedHTMLFactory<DelHTMLAttributes<HTMLModElement>, HTMLModElement>;
+        details: DetailedHTMLFactory<DetailsHTMLAttributes<HTMLDetailsElement>, HTMLDetailsElement>;
+        dfn: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        dialog: DetailedHTMLFactory<DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>;
+        div: DetailedHTMLFactory<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
+        dl: DetailedHTMLFactory<HTMLAttributes<HTMLDListElement>, HTMLDListElement>;
+        dt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        em: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        embed: DetailedHTMLFactory<EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement>;
+        fieldset: DetailedHTMLFactory<FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>;
+        figcaption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        figure: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        footer: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        form: DetailedHTMLFactory<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
+        h1: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h2: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h3: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h4: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h5: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h6: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        head: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLHeadElement>;
+        header: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        hgroup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        hr: DetailedHTMLFactory<HTMLAttributes<HTMLHRElement>, HTMLHRElement>;
+        html: DetailedHTMLFactory<HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>;
+        i: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        iframe: DetailedHTMLFactory<IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>;
+        img: DetailedHTMLFactory<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
+        input: DetailedHTMLFactory<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+        ins: DetailedHTMLFactory<InsHTMLAttributes<HTMLModElement>, HTMLModElement>;
+        kbd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        keygen: DetailedHTMLFactory<KeygenHTMLAttributes<HTMLElement>, HTMLElement>;
+        label: DetailedHTMLFactory<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>;
+        legend: DetailedHTMLFactory<HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>;
+        li: DetailedHTMLFactory<LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
+        link: DetailedHTMLFactory<LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
+        main: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        map: DetailedHTMLFactory<MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>;
+        mark: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        menu: DetailedHTMLFactory<MenuHTMLAttributes<HTMLElement>, HTMLElement>;
+        menuitem: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        meta: DetailedHTMLFactory<MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
+        meter: DetailedHTMLFactory<MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>;
+        nav: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        noscript: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        object: DetailedHTMLFactory<ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement>;
+        ol: DetailedHTMLFactory<OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>;
+        optgroup: DetailedHTMLFactory<OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement>;
+        option: DetailedHTMLFactory<OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement>;
+        output: DetailedHTMLFactory<OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>;
+        p: DetailedHTMLFactory<HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>;
+        param: DetailedHTMLFactory<ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement>;
+        picture: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        pre: DetailedHTMLFactory<HTMLAttributes<HTMLPreElement>, HTMLPreElement>;
+        progress: DetailedHTMLFactory<ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>;
+        q: DetailedHTMLFactory<QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+        rp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        rt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        ruby: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        s: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        samp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        search: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        slot: DetailedHTMLFactory<SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>;
+        script: DetailedHTMLFactory<ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>;
+        section: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        select: DetailedHTMLFactory<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>;
+        small: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        source: DetailedHTMLFactory<SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement>;
+        span: DetailedHTMLFactory<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
+        strong: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        style: DetailedHTMLFactory<StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>;
+        sub: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        summary: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        sup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        table: DetailedHTMLFactory<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>;
+        template: DetailedHTMLFactory<HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement>;
+        tbody: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        td: DetailedHTMLFactory<TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>;
+        textarea: DetailedHTMLFactory<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>;
+        tfoot: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        th: DetailedHTMLFactory<ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>;
+        thead: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        time: DetailedHTMLFactory<TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>;
+        title: DetailedHTMLFactory<HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
+        tr: DetailedHTMLFactory<HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>;
+        track: DetailedHTMLFactory<TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement>;
+        u: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        ul: DetailedHTMLFactory<HTMLAttributes<HTMLUListElement>, HTMLUListElement>;
+        "var": DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        video: DetailedHTMLFactory<VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>;
+        wbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        webview: DetailedHTMLFactory<WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement>;
+    }
+
+    interface ReactSVG {
+        animate: SVGFactory;
+        circle: SVGFactory;
+        clipPath: SVGFactory;
+        defs: SVGFactory;
+        desc: SVGFactory;
+        ellipse: SVGFactory;
+        feBlend: SVGFactory;
+        feColorMatrix: SVGFactory;
+        feComponentTransfer: SVGFactory;
+        feComposite: SVGFactory;
+        feConvolveMatrix: SVGFactory;
+        feDiffuseLighting: SVGFactory;
+        feDisplacementMap: SVGFactory;
+        feDistantLight: SVGFactory;
+        feDropShadow: SVGFactory;
+        feFlood: SVGFactory;
+        feFuncA: SVGFactory;
+        feFuncB: SVGFactory;
+        feFuncG: SVGFactory;
+        feFuncR: SVGFactory;
+        feGaussianBlur: SVGFactory;
+        feImage: SVGFactory;
+        feMerge: SVGFactory;
+        feMergeNode: SVGFactory;
+        feMorphology: SVGFactory;
+        feOffset: SVGFactory;
+        fePointLight: SVGFactory;
+        feSpecularLighting: SVGFactory;
+        feSpotLight: SVGFactory;
+        feTile: SVGFactory;
+        feTurbulence: SVGFactory;
+        filter: SVGFactory;
+        foreignObject: SVGFactory;
+        g: SVGFactory;
+        image: SVGFactory;
+        line: SVGFactory;
+        linearGradient: SVGFactory;
+        marker: SVGFactory;
+        mask: SVGFactory;
+        metadata: SVGFactory;
+        path: SVGFactory;
+        pattern: SVGFactory;
+        polygon: SVGFactory;
+        polyline: SVGFactory;
+        radialGradient: SVGFactory;
+        rect: SVGFactory;
+        stop: SVGFactory;
+        svg: SVGFactory;
+        switch: SVGFactory;
+        symbol: SVGFactory;
+        text: SVGFactory;
+        textPath: SVGFactory;
+        tspan: SVGFactory;
+        use: SVGFactory;
+        view: SVGFactory;
+    }
+
+    interface ReactDOM extends ReactHTML, ReactSVG {}
+
+    //
+    // React.PropTypes
+    // ----------------------------------------------------------------------
+
+    /**
+     * @deprecated Use `Validator` from the ´prop-types` instead.
+     */
+    type Validator<T> = PropTypes.Validator<T>;
+
+    /**
+     * @deprecated Use `Requireable` from the ´prop-types` instead.
+     */
+    type Requireable<T> = PropTypes.Requireable<T>;
+
+    /**
+     * @deprecated Use `ValidationMap` from the ´prop-types` instead.
+     */
+    type ValidationMap<T> = PropTypes.ValidationMap<T>;
+
+    /**
+     * @deprecated Use `WeakValidationMap` from the ´prop-types` instead.
+     */
+    type WeakValidationMap<T> = {
+        [K in keyof T]?: null extends T[K] ? Validator<T[K] | null | undefined>
+            : undefined extends T[K] ? Validator<T[K] | null | undefined>
+            : Validator<T[K]>;
+    };
+
+    /**
+     * @deprecated Use `PropTypes.*` where `PropTypes` comes from `import * as PropTypes from 'prop-types'` instead.
+     */
+    interface ReactPropTypes {
+        any: typeof PropTypes.any;
+        array: typeof PropTypes.array;
+        bool: typeof PropTypes.bool;
+        func: typeof PropTypes.func;
+        number: typeof PropTypes.number;
+        object: typeof PropTypes.object;
+        string: typeof PropTypes.string;
+        node: typeof PropTypes.node;
+        element: typeof PropTypes.element;
+        instanceOf: typeof PropTypes.instanceOf;
+        oneOf: typeof PropTypes.oneOf;
+        oneOfType: typeof PropTypes.oneOfType;
+        arrayOf: typeof PropTypes.arrayOf;
+        objectOf: typeof PropTypes.objectOf;
+        shape: typeof PropTypes.shape;
+        exact: typeof PropTypes.exact;
+    }
+
+    //
+    // React.Children
+    // ----------------------------------------------------------------------
+
+    /**
+     * @deprecated - Use `typeof React.Children` instead.
+     */
+    // Sync with type of `const Children`.
+    interface ReactChildren {
+        map<T, C>(
+            children: C | readonly C[],
+            fn: (child: C, index: number) => T,
+        ): C extends null | undefined ? C : Array<Exclude<T, boolean | null | undefined>>;
+        forEach<C>(children: C | readonly C[], fn: (child: C, index: number) => void): void;
+        count(children: any): number;
+        only<C>(children: C): C extends any[] ? never : C;
+        toArray(children: ReactNode | ReactNode[]): Array<Exclude<ReactNode, boolean | null | undefined>>;
+    }
+
+    //
+    // Browser Interfaces
+    // https://github.com/nikeee/2048-typescript/blob/master/2048/js/touch.d.ts
+    // ----------------------------------------------------------------------
+
+    interface AbstractView {
+        styleMedia: StyleMedia;
+        document: Document;
+    }
+
+    interface Touch {
+        identifier: number;
+        target: EventTarget;
+        screenX: number;
+        screenY: number;
+        clientX: number;
+        clientY: number;
+        pageX: number;
+        pageY: number;
+    }
+
+    interface TouchList {
+        [index: number]: Touch;
+        length: number;
+        item(index: number): Touch;
+        identifiedTouch(identifier: number): Touch;
+    }
+
+    //
+    // Error Interfaces
+    // ----------------------------------------------------------------------
+    interface ErrorInfo {
+        /**
+         * Captures which component contained the exception, and its ancestors.
+         */
+        componentStack?: string | null;
+        digest?: string | null;
+    }
+
+    // Keep in sync with JSX namespace in ./jsx-runtime.d.ts and ./jsx-dev-runtime.d.ts
+    namespace JSX {
+        type ElementType = GlobalJSXElementType;
+        interface Element extends GlobalJSXElement {}
+        interface ElementClass extends GlobalJSXElementClass {}
+        interface ElementAttributesProperty extends GlobalJSXElementAttributesProperty {}
+        interface ElementChildrenAttribute extends GlobalJSXElementChildrenAttribute {}
+
+        type LibraryManagedAttributes<C, P> = GlobalJSXLibraryManagedAttributes<C, P>;
+
+        interface IntrinsicAttributes extends GlobalJSXIntrinsicAttributes {}
+        interface IntrinsicClassAttributes<T> extends GlobalJSXIntrinsicClassAttributes<T> {}
+        interface IntrinsicElements extends GlobalJSXIntrinsicElements {}
+    }
+}
+
+// naked 'any' type in a conditional type will short circuit and union both the then/else branches
+// so boolean is only resolved for T = any
+type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
+
+type ExactlyAnyPropertyKeys<T> = { [K in keyof T]: IsExactlyAny<T[K]> extends true ? K : never }[keyof T];
+type NotExactlyAnyPropertyKeys<T> = Exclude<keyof T, ExactlyAnyPropertyKeys<T>>;
+
+// Try to resolve ill-defined props like for JS users: props can be any, or sometimes objects with properties of type any
+type MergePropTypes<P, T> =
+    // Distribute over P in case it is a union type
+    P extends any
+        // If props is type any, use propTypes definitions
+        ? IsExactlyAny<P> extends true ? T
+            // If declared props have indexed properties, ignore inferred props entirely as keyof gets widened
+        : string extends keyof P ? P
+            // Prefer declared types which are not exactly any
+        :
+            & Pick<P, NotExactlyAnyPropertyKeys<P>>
+            // For props which are exactly any, use the type inferred from propTypes if present
+            & Pick<T, Exclude<keyof T, NotExactlyAnyPropertyKeys<P>>>
+            // Keep leftover props not specified in propTypes
+            & Pick<P, Exclude<keyof P, keyof T>>
+        : never;
+
+type InexactPartial<T> = { [K in keyof T]?: T[K] | undefined };
+
+// Any prop that has a default prop becomes optional, but its type is unchanged
+// Undeclared default props are augmented into the resulting allowable attributes
+// If declared props have indexed properties, ignore default props entirely as keyof gets widened
+// Wrap in an outer-level conditional type to allow distribution over props that are unions
+type Defaultize<P, D> = P extends any ? string extends keyof P ? P
+    :
+        & Pick<P, Exclude<keyof P, keyof D>>
+        & InexactPartial<Pick<P, Extract<keyof P, keyof D>>>
+        & InexactPartial<Pick<D, Exclude<keyof D, keyof P>>>
+    : never;
+
+type ReactManagedAttributes<C, P> = C extends { propTypes: infer T; defaultProps: infer D }
+    ? Defaultize<MergePropTypes<P, PropTypes.InferProps<T>>, D>
+    : C extends { propTypes: infer T } ? MergePropTypes<P, PropTypes.InferProps<T>>
+    : C extends { defaultProps: infer D } ? Defaultize<P, D>
+    : P;
+
+declare global {
+    /**
+     * @deprecated Use `React.JSX` instead of the global `JSX` namespace.
+     */
+    namespace JSX {
+        // We don't just alias React.ElementType because React.ElementType
+        // historically does more than we need it to.
+        // E.g. it also contains .propTypes and so TS also verifies the declared
+        // props type does match the declared .propTypes.
+        // But if libraries declared their .propTypes but not props type,
+        // or they mismatch, you won't be able to use the class component
+        // as a JSX.ElementType.
+        // We could fix this everywhere but we're ultimately not interested in
+        // .propTypes assignability so we might as well drop it entirely here to
+        //  reduce the work of the type-checker.
+        // TODO: Check impact of making React.ElementType<P = any> = React.JSXElementConstructor<P>
+        type ElementType = string | React.JSXElementConstructor<any>;
+        interface Element extends React.ReactElement<any, any> {}
+        interface ElementClass extends React.Component<any> {
+            render(): React.ReactNode;
+        }
+        interface ElementAttributesProperty {
+            props: {};
+        }
+        interface ElementChildrenAttribute {
+            children: {};
+        }
+
+        // We can't recurse forever because `type` can't be self-referential;
+        // let's assume it's reasonable to do a single React.lazy() around a single React.memo() / vice-versa
+        type LibraryManagedAttributes<C, P> = C extends
+            React.MemoExoticComponent<infer T> | React.LazyExoticComponent<infer T>
+            ? T extends React.MemoExoticComponent<infer U> | React.LazyExoticComponent<infer U>
+                ? ReactManagedAttributes<U, P>
+            : ReactManagedAttributes<T, P>
+            : ReactManagedAttributes<C, P>;
+
+        interface IntrinsicAttributes extends React.Attributes {}
+        interface IntrinsicClassAttributes<T> extends React.ClassAttributes<T> {}
+
+        interface IntrinsicElements {
+            // HTML
+            a: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
+            abbr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            address: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            area: React.DetailedHTMLProps<React.AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>;
+            article: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            aside: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            audio: React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>;
+            b: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            base: React.DetailedHTMLProps<React.BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>;
+            bdi: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            bdo: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            big: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            blockquote: React.DetailedHTMLProps<React.BlockquoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+            body: React.DetailedHTMLProps<React.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>;
+            br: React.DetailedHTMLProps<React.HTMLAttributes<HTMLBRElement>, HTMLBRElement>;
+            button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
+            canvas: React.DetailedHTMLProps<React.CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>;
+            caption: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            center: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            cite: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            code: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            col: React.DetailedHTMLProps<React.ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+            colgroup: React.DetailedHTMLProps<React.ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+            data: React.DetailedHTMLProps<React.DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>;
+            datalist: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>;
+            dd: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            del: React.DetailedHTMLProps<React.DelHTMLAttributes<HTMLModElement>, HTMLModElement>;
+            details: React.DetailedHTMLProps<React.DetailsHTMLAttributes<HTMLDetailsElement>, HTMLDetailsElement>;
+            dfn: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            dialog: React.DetailedHTMLProps<React.DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>;
+            div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
+            dl: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDListElement>, HTMLDListElement>;
+            dt: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            em: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            embed: React.DetailedHTMLProps<React.EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement>;
+            fieldset: React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>;
+            figcaption: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            figure: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            footer: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            form: React.DetailedHTMLProps<React.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
+            h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h2: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h3: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h4: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h5: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h6: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            head: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>;
+            header: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            hgroup: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            hr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHRElement>, HTMLHRElement>;
+            html: React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>;
+            i: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            iframe: React.DetailedHTMLProps<React.IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>;
+            img: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
+            input: React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+            ins: React.DetailedHTMLProps<React.InsHTMLAttributes<HTMLModElement>, HTMLModElement>;
+            kbd: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            keygen: React.DetailedHTMLProps<React.KeygenHTMLAttributes<HTMLElement>, HTMLElement>;
+            label: React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>;
+            legend: React.DetailedHTMLProps<React.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>;
+            li: React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
+            link: React.DetailedHTMLProps<React.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
+            main: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            map: React.DetailedHTMLProps<React.MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>;
+            mark: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            menu: React.DetailedHTMLProps<React.MenuHTMLAttributes<HTMLElement>, HTMLElement>;
+            menuitem: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            meta: React.DetailedHTMLProps<React.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
+            meter: React.DetailedHTMLProps<React.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>;
+            nav: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            noindex: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            noscript: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            object: React.DetailedHTMLProps<React.ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement>;
+            ol: React.DetailedHTMLProps<React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>;
+            optgroup: React.DetailedHTMLProps<React.OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement>;
+            option: React.DetailedHTMLProps<React.OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement>;
+            output: React.DetailedHTMLProps<React.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>;
+            p: React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>;
+            param: React.DetailedHTMLProps<React.ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement>;
+            picture: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            pre: React.DetailedHTMLProps<React.HTMLAttributes<HTMLPreElement>, HTMLPreElement>;
+            progress: React.DetailedHTMLProps<React.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>;
+            q: React.DetailedHTMLProps<React.QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+            rp: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            rt: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            ruby: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            s: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            samp: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            search: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            slot: React.DetailedHTMLProps<React.SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>;
+            script: React.DetailedHTMLProps<React.ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>;
+            section: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            select: React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>;
+            small: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            source: React.DetailedHTMLProps<React.SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement>;
+            span: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
+            strong: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            style: React.DetailedHTMLProps<React.StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>;
+            sub: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            summary: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            sup: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            table: React.DetailedHTMLProps<React.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>;
+            template: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement>;
+            tbody: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            td: React.DetailedHTMLProps<React.TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>;
+            textarea: React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>;
+            tfoot: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            th: React.DetailedHTMLProps<React.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>;
+            thead: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            time: React.DetailedHTMLProps<React.TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>;
+            title: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
+            tr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>;
+            track: React.DetailedHTMLProps<React.TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement>;
+            u: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            ul: React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>;
+            "var": React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            video: React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>;
+            wbr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            webview: React.DetailedHTMLProps<React.WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement>;
+
+            // SVG
+            svg: React.SVGProps<SVGSVGElement>;
+
+            animate: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateElement but is not in TypeScript's lib.dom.d.ts for now.
+            animateMotion: React.SVGProps<SVGElement>;
+            animateTransform: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateTransformElement but is not in TypeScript's lib.dom.d.ts for now.
+            circle: React.SVGProps<SVGCircleElement>;
+            clipPath: React.SVGProps<SVGClipPathElement>;
+            defs: React.SVGProps<SVGDefsElement>;
+            desc: React.SVGProps<SVGDescElement>;
+            ellipse: React.SVGProps<SVGEllipseElement>;
+            feBlend: React.SVGProps<SVGFEBlendElement>;
+            feColorMatrix: React.SVGProps<SVGFEColorMatrixElement>;
+            feComponentTransfer: React.SVGProps<SVGFEComponentTransferElement>;
+            feComposite: React.SVGProps<SVGFECompositeElement>;
+            feConvolveMatrix: React.SVGProps<SVGFEConvolveMatrixElement>;
+            feDiffuseLighting: React.SVGProps<SVGFEDiffuseLightingElement>;
+            feDisplacementMap: React.SVGProps<SVGFEDisplacementMapElement>;
+            feDistantLight: React.SVGProps<SVGFEDistantLightElement>;
+            feDropShadow: React.SVGProps<SVGFEDropShadowElement>;
+            feFlood: React.SVGProps<SVGFEFloodElement>;
+            feFuncA: React.SVGProps<SVGFEFuncAElement>;
+            feFuncB: React.SVGProps<SVGFEFuncBElement>;
+            feFuncG: React.SVGProps<SVGFEFuncGElement>;
+            feFuncR: React.SVGProps<SVGFEFuncRElement>;
+            feGaussianBlur: React.SVGProps<SVGFEGaussianBlurElement>;
+            feImage: React.SVGProps<SVGFEImageElement>;
+            feMerge: React.SVGProps<SVGFEMergeElement>;
+            feMergeNode: React.SVGProps<SVGFEMergeNodeElement>;
+            feMorphology: React.SVGProps<SVGFEMorphologyElement>;
+            feOffset: React.SVGProps<SVGFEOffsetElement>;
+            fePointLight: React.SVGProps<SVGFEPointLightElement>;
+            feSpecularLighting: React.SVGProps<SVGFESpecularLightingElement>;
+            feSpotLight: React.SVGProps<SVGFESpotLightElement>;
+            feTile: React.SVGProps<SVGFETileElement>;
+            feTurbulence: React.SVGProps<SVGFETurbulenceElement>;
+            filter: React.SVGProps<SVGFilterElement>;
+            foreignObject: React.SVGProps<SVGForeignObjectElement>;
+            g: React.SVGProps<SVGGElement>;
+            image: React.SVGProps<SVGImageElement>;
+            line: React.SVGLineElementAttributes<SVGLineElement>;
+            linearGradient: React.SVGProps<SVGLinearGradientElement>;
+            marker: React.SVGProps<SVGMarkerElement>;
+            mask: React.SVGProps<SVGMaskElement>;
+            metadata: React.SVGProps<SVGMetadataElement>;
+            mpath: React.SVGProps<SVGElement>;
+            path: React.SVGProps<SVGPathElement>;
+            pattern: React.SVGProps<SVGPatternElement>;
+            polygon: React.SVGProps<SVGPolygonElement>;
+            polyline: React.SVGProps<SVGPolylineElement>;
+            radialGradient: React.SVGProps<SVGRadialGradientElement>;
+            rect: React.SVGProps<SVGRectElement>;
+            set: React.SVGProps<SVGSetElement>;
+            stop: React.SVGProps<SVGStopElement>;
+            switch: React.SVGProps<SVGSwitchElement>;
+            symbol: React.SVGProps<SVGSymbolElement>;
+            text: React.SVGTextElementAttributes<SVGTextElement>;
+            textPath: React.SVGProps<SVGTextPathElement>;
+            tspan: React.SVGProps<SVGTSpanElement>;
+            use: React.SVGProps<SVGUseElement>;
+            view: React.SVGProps<SVGViewElement>;
+        }
+    }
+}
+
+// React.JSX needs to point to global.JSX to keep global module augmentations intact.
+// But we can't access global.JSX so we need to create these aliases instead.
+// Once the global JSX namespace will be removed we replace React.JSX with the contents of global.JSX
+type GlobalJSXElementType = JSX.ElementType;
+interface GlobalJSXElement extends JSX.Element {}
+interface GlobalJSXElementClass extends JSX.ElementClass {}
+interface GlobalJSXElementAttributesProperty extends JSX.ElementAttributesProperty {}
+interface GlobalJSXElementChildrenAttribute extends JSX.ElementChildrenAttribute {}
+
+type GlobalJSXLibraryManagedAttributes<C, P> = JSX.LibraryManagedAttributes<C, P>;
+
+interface GlobalJSXIntrinsicAttributes extends JSX.IntrinsicAttributes {}
+interface GlobalJSXIntrinsicClassAttributes<T> extends JSX.IntrinsicClassAttributes<T> {}
+
+interface GlobalJSXIntrinsicElements extends JSX.IntrinsicElements {}
diff --git a/node_modules/@types/react/jsx-dev-runtime.d.ts b/node_modules/@types/react/jsx-dev-runtime.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d28644c6cefa453c68fb41a7920b74ee7fbdacb6
--- /dev/null
+++ b/node_modules/@types/react/jsx-dev-runtime.d.ts
@@ -0,0 +1,45 @@
+import * as React from "./";
+export { Fragment } from "./";
+
+export namespace JSX {
+    type ElementType = React.JSX.ElementType;
+    interface Element extends React.JSX.Element {}
+    interface ElementClass extends React.JSX.ElementClass {}
+    interface ElementAttributesProperty extends React.JSX.ElementAttributesProperty {}
+    interface ElementChildrenAttribute extends React.JSX.ElementChildrenAttribute {}
+    type LibraryManagedAttributes<C, P> = React.JSX.LibraryManagedAttributes<C, P>;
+    interface IntrinsicAttributes extends React.JSX.IntrinsicAttributes {}
+    interface IntrinsicClassAttributes<T> extends React.JSX.IntrinsicClassAttributes<T> {}
+    interface IntrinsicElements extends React.JSX.IntrinsicElements {}
+}
+
+export interface JSXSource {
+    /**
+     * The source file where the element originates from.
+     */
+    fileName?: string | undefined;
+
+    /**
+     * The line number where the element was created.
+     */
+    lineNumber?: number | undefined;
+
+    /**
+     * The column number where the element was created.
+     */
+    columnNumber?: number | undefined;
+}
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsxDEV(
+    type: React.ElementType,
+    props: unknown,
+    key: React.Key | undefined,
+    isStatic: boolean,
+    source?: JSXSource,
+    self?: unknown,
+): React.ReactElement;
diff --git a/node_modules/@types/react/jsx-runtime.d.ts b/node_modules/@types/react/jsx-runtime.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e9fea27d741f52c8083e5507adc59ea27bd54f38
--- /dev/null
+++ b/node_modules/@types/react/jsx-runtime.d.ts
@@ -0,0 +1,36 @@
+import * as React from "./";
+export { Fragment } from "./";
+
+export namespace JSX {
+    type ElementType = React.JSX.ElementType;
+    interface Element extends React.JSX.Element {}
+    interface ElementClass extends React.JSX.ElementClass {}
+    interface ElementAttributesProperty extends React.JSX.ElementAttributesProperty {}
+    interface ElementChildrenAttribute extends React.JSX.ElementChildrenAttribute {}
+    type LibraryManagedAttributes<C, P> = React.JSX.LibraryManagedAttributes<C, P>;
+    interface IntrinsicAttributes extends React.JSX.IntrinsicAttributes {}
+    interface IntrinsicClassAttributes<T> extends React.JSX.IntrinsicClassAttributes<T> {}
+    interface IntrinsicElements extends React.JSX.IntrinsicElements {}
+}
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsx(
+    type: React.ElementType,
+    props: unknown,
+    key?: React.Key,
+): React.ReactElement;
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsxs(
+    type: React.ElementType,
+    props: unknown,
+    key?: React.Key,
+): React.ReactElement;
diff --git a/node_modules/@types/react/package.json b/node_modules/@types/react/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ded64cd695097e4f2c81b49773d129195cb8446b
--- /dev/null
+++ b/node_modules/@types/react/package.json
@@ -0,0 +1,212 @@
+{
+  "_from": "@types/react@*",
+  "_id": "@types/react@18.3.12",
+  "_inBundle": false,
+  "_integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
+  "_location": "/@types/react",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/react@*",
+    "name": "@types/react",
+    "escapedName": "@types%2freact",
+    "scope": "@types",
+    "rawSpec": "*",
+    "saveSpec": null,
+    "fetchSpec": "*"
+  },
+  "_requiredBy": [
+    "/@types/react-transition-group",
+    "/uncontrollable"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
+  "_shasum": "99419f182ccd69151813b7ee24b792fe08774f60",
+  "_spec": "@types/react@*",
+  "_where": "/home/ethan2.clay/flask/node_modules/@types/react-transition-group",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Asana",
+      "url": "https://asana.com"
+    },
+    {
+      "name": "AssureSign",
+      "url": "http://www.assuresign.com"
+    },
+    {
+      "name": "Microsoft",
+      "url": "https://microsoft.com"
+    },
+    {
+      "name": "John Reilly",
+      "url": "https://github.com/johnnyreilly"
+    },
+    {
+      "name": "Benoit Benezech",
+      "url": "https://github.com/bbenezech"
+    },
+    {
+      "name": "Patricio Zavolinsky",
+      "url": "https://github.com/pzavolinsky"
+    },
+    {
+      "name": "Eric Anderson",
+      "url": "https://github.com/ericanderson"
+    },
+    {
+      "name": "Dovydas Navickas",
+      "url": "https://github.com/DovydasNavickas"
+    },
+    {
+      "name": "Josh Rutherford",
+      "url": "https://github.com/theruther4d"
+    },
+    {
+      "name": "Guilherme Hübner",
+      "url": "https://github.com/guilhermehubner"
+    },
+    {
+      "name": "Ferdy Budhidharma",
+      "url": "https://github.com/ferdaber"
+    },
+    {
+      "name": "Johann Rakotoharisoa",
+      "url": "https://github.com/jrakotoharisoa"
+    },
+    {
+      "name": "Olivier Pascal",
+      "url": "https://github.com/pascaloliv"
+    },
+    {
+      "name": "Martin Hochel",
+      "url": "https://github.com/hotell"
+    },
+    {
+      "name": "Frank Li",
+      "url": "https://github.com/franklixuefei"
+    },
+    {
+      "name": "Jessica Franco",
+      "url": "https://github.com/Jessidhia"
+    },
+    {
+      "name": "Saransh Kataria",
+      "url": "https://github.com/saranshkataria"
+    },
+    {
+      "name": "Kanitkorn Sujautra",
+      "url": "https://github.com/lukyth"
+    },
+    {
+      "name": "Sebastian Silbermann",
+      "url": "https://github.com/eps1lon"
+    },
+    {
+      "name": "Kyle Scully",
+      "url": "https://github.com/zieka"
+    },
+    {
+      "name": "Cong Zhang",
+      "url": "https://github.com/dancerphil"
+    },
+    {
+      "name": "Dimitri Mitropoulos",
+      "url": "https://github.com/dimitropoulos"
+    },
+    {
+      "name": "JongChan Choi",
+      "url": "https://github.com/disjukr"
+    },
+    {
+      "name": "Victor Magalhães",
+      "url": "https://github.com/vhfmag"
+    },
+    {
+      "name": "Priyanshu Rav",
+      "url": "https://github.com/priyanshurav"
+    },
+    {
+      "name": "Dmitry Semigradsky",
+      "url": "https://github.com/Semigradsky"
+    },
+    {
+      "name": "Matt Pocock",
+      "url": "https://github.com/mattpocock"
+    }
+  ],
+  "dependencies": {
+    "@types/prop-types": "*",
+    "csstype": "^3.0.2"
+  },
+  "deprecated": false,
+  "description": "TypeScript definitions for react",
+  "exports": {
+    ".": {
+      "types@<=5.0": {
+        "default": "./ts5.0/index.d.ts"
+      },
+      "types": {
+        "default": "./index.d.ts"
+      }
+    },
+    "./canary": {
+      "types@<=5.0": {
+        "default": "./ts5.0/canary.d.ts"
+      },
+      "types": {
+        "default": "./canary.d.ts"
+      }
+    },
+    "./experimental": {
+      "types@<=5.0": {
+        "default": "./ts5.0/experimental.d.ts"
+      },
+      "types": {
+        "default": "./experimental.d.ts"
+      }
+    },
+    "./jsx-runtime": {
+      "types@<=5.0": {
+        "default": "./ts5.0/jsx-runtime.d.ts"
+      },
+      "types": {
+        "default": "./jsx-runtime.d.ts"
+      }
+    },
+    "./jsx-dev-runtime": {
+      "types@<=5.0": {
+        "default": "./ts5.0/jsx-dev-runtime.d.ts"
+      },
+      "types": {
+        "default": "./jsx-dev-runtime.d.ts"
+      }
+    },
+    "./package.json": "./package.json"
+  },
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/react",
+  "peerDependencies": {},
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/react"
+  },
+  "scripts": {},
+  "typeScriptVersion": "4.8",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "d59942da5433cf6c9d66442070074fa48ef9c823a4175da6e4d183d0a70ccc72",
+  "typesVersions": {
+    "<=5.0": {
+      "*": [
+        "ts5.0/*"
+      ]
+    }
+  },
+  "version": "18.3.12"
+}
diff --git a/node_modules/@types/react/ts5.0/canary.d.ts b/node_modules/@types/react/ts5.0/canary.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..74795b53f98034f287bea2ca7025a8124e695a0f
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/canary.d.ts
@@ -0,0 +1,166 @@
+/**
+ * These are types for things that are present in the React `canary` release channel.
+ *
+ * To load the types declared here in an actual project, there are three ways. The easiest one,
+ * if your `tsconfig.json` already has a `"types"` array in the `"compilerOptions"` section,
+ * is to add `"react/canary"` to the `"types"` array.
+ *
+ * Alternatively, a specific import syntax can to be used from a typescript file.
+ * This module does not exist in reality, which is why the {} is important:
+ *
+ * ```ts
+ * import {} from 'react/canary'
+ * ```
+ *
+ * It is also possible to include it through a triple-slash reference:
+ *
+ * ```ts
+ * /// <reference types="react/canary" />
+ * ```
+ *
+ * Either the import or the reference only needs to appear once, anywhere in the project.
+ */
+
+// See https://github.com/facebook/react/blob/main/packages/react/src/React.js to see how the exports are declared,
+
+import React = require(".");
+
+export {};
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+type NativeToggleEvent = ToggleEvent;
+
+declare module "." {
+    export type Usable<T> = PromiseLike<T> | Context<T>;
+
+    export function use<T>(usable: Usable<T>): T;
+
+    interface ServerContextJSONArray extends ReadonlyArray<ServerContextJSONValue> {}
+    export type ServerContextJSONValue =
+        | string
+        | boolean
+        | number
+        | null
+        | ServerContextJSONArray
+        | { [key: string]: ServerContextJSONValue };
+    export interface ServerContext<T extends ServerContextJSONValue> {
+        Provider: Provider<T>;
+    }
+    /**
+     * Accepts a context object (the value returned from `React.createContext` or `React.createServerContext`) and returns the current
+     * context value, as given by the nearest context provider for the given context.
+     *
+     * @version 16.8.0
+     * @see https://react.dev/reference/react/useContext
+     */
+    function useContext<T extends ServerContextJSONValue>(context: ServerContext<T>): T;
+    export function createServerContext<T extends ServerContextJSONValue>(
+        globalName: string,
+        defaultValue: T,
+    ): ServerContext<T>;
+
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    export function cache<CachedFunction extends Function>(fn: CachedFunction): CachedFunction;
+
+    export function unstable_useCacheRefresh(): () => void;
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS {
+        functions: (formData: FormData) => void | Promise<void>;
+    }
+
+    export interface TransitionStartFunction {
+        /**
+         * Marks all state updates inside the async function as transitions
+         *
+         * @see {https://react.dev/reference/react/useTransition#starttransition}
+         *
+         * @param callback
+         */
+        (callback: () => Promise<VoidOrUndefinedOnly>): void;
+    }
+
+    /**
+     * Similar to `useTransition` but allows uses where hooks are not available.
+     *
+     * @param callback An _asynchronous_ function which causes state updates that can be deferred.
+     */
+    export function startTransition(scope: () => Promise<VoidOrUndefinedOnly>): void;
+
+    export function useOptimistic<State>(
+        passthrough: State,
+    ): [State, (action: State | ((pendingState: State) => State)) => void];
+    export function useOptimistic<State, Action>(
+        passthrough: State,
+        reducer: (state: State, action: Action) => State,
+    ): [State, (action: Action) => void];
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES {
+        cleanup: () => VoidOrUndefinedOnly;
+    }
+
+    export function useActionState<State>(
+        action: (state: Awaited<State>) => State | Promise<State>,
+        initialState: Awaited<State>,
+        permalink?: string,
+    ): [state: Awaited<State>, dispatch: () => void, isPending: boolean];
+    export function useActionState<State, Payload>(
+        action: (state: Awaited<State>, payload: Payload) => State | Promise<State>,
+        initialState: Awaited<State>,
+        permalink?: string,
+    ): [state: Awaited<State>, dispatch: (payload: Payload) => void, isPending: boolean];
+
+    interface DOMAttributes<T> {
+        // Transition Events
+        onTransitionCancel?: TransitionEventHandler<T> | undefined;
+        onTransitionCancelCapture?: TransitionEventHandler<T> | undefined;
+        onTransitionRun?: TransitionEventHandler<T> | undefined;
+        onTransitionRunCapture?: TransitionEventHandler<T> | undefined;
+        onTransitionStart?: TransitionEventHandler<T> | undefined;
+        onTransitionStartCapture?: TransitionEventHandler<T> | undefined;
+    }
+
+    type ToggleEventHandler<T = Element> = EventHandler<ToggleEvent<T>>;
+
+    interface HTMLAttributes<T> {
+        popover?: "" | "auto" | "manual" | undefined;
+        popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
+        popoverTarget?: string | undefined;
+        onToggle?: ToggleEventHandler<T> | undefined;
+        onBeforeToggle?: ToggleEventHandler<T> | undefined;
+    }
+
+    interface ToggleEvent<T = Element> extends SyntheticEvent<T, NativeToggleEvent> {
+        oldState: "closed" | "open";
+        newState: "closed" | "open";
+    }
+
+    interface LinkHTMLAttributes<T> {
+        precedence?: string | undefined;
+    }
+
+    interface StyleHTMLAttributes<T> {
+        href?: string | undefined;
+        precedence?: string | undefined;
+    }
+
+    /**
+     * @internal Use `Awaited<ReactNode>` instead
+     */
+    // Helper type to enable `Awaited<ReactNode>`.
+    // Must be a copy of the non-thenables of `ReactNode`.
+    type AwaitedReactNode =
+        | ReactElement
+        | string
+        | number
+        | Iterable<AwaitedReactNode>
+        | ReactPortal
+        | boolean
+        | null
+        | undefined;
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES {
+        promises: Promise<AwaitedReactNode>;
+        bigints: bigint;
+    }
+}
diff --git a/node_modules/@types/react/ts5.0/experimental.d.ts b/node_modules/@types/react/ts5.0/experimental.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0bc4ba6a815798da0f834fc6e07c23c8f0da8f20
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/experimental.d.ts
@@ -0,0 +1,127 @@
+/**
+ * These are types for things that are present in the `experimental` builds of React but not yet
+ * on a stable build.
+ *
+ * Once they are promoted to stable they can just be moved to the main index file.
+ *
+ * To load the types declared here in an actual project, there are three ways. The easiest one,
+ * if your `tsconfig.json` already has a `"types"` array in the `"compilerOptions"` section,
+ * is to add `"react/experimental"` to the `"types"` array.
+ *
+ * Alternatively, a specific import syntax can to be used from a typescript file.
+ * This module does not exist in reality, which is why the {} is important:
+ *
+ * ```ts
+ * import {} from 'react/experimental'
+ * ```
+ *
+ * It is also possible to include it through a triple-slash reference:
+ *
+ * ```ts
+ * /// <reference types="react/experimental" />
+ * ```
+ *
+ * Either the import or the reference only needs to appear once, anywhere in the project.
+ */
+
+// See https://github.com/facebook/react/blob/master/packages/react/src/React.js to see how the exports are declared,
+// and https://github.com/facebook/react/blob/master/packages/shared/ReactFeatureFlags.js to verify which APIs are
+// flagged experimental or not. Experimental APIs will be tagged with `__EXPERIMENTAL__`.
+//
+// For the inputs of types exported as simply a fiber tag, the `beginWork` function of ReactFiberBeginWork.js
+// is a good place to start looking for details; it generally calls prop validation functions or delegates
+// all tasks done as part of the render phase (the concurrent part of the React update cycle).
+//
+// Suspense-related handling can be found in ReactFiberThrow.js.
+
+import React = require("./canary");
+
+export {};
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+declare module "." {
+    export interface SuspenseProps {
+        /**
+         * The presence of this prop indicates that the content is computationally expensive to render.
+         * In other words, the tree is CPU bound and not I/O bound (e.g. due to fetching data).
+         * @see {@link https://github.com/facebook/react/pull/19936}
+         */
+        unstable_expectedLoadTime?: number | undefined;
+    }
+
+    export type SuspenseListRevealOrder = "forwards" | "backwards" | "together";
+    export type SuspenseListTailMode = "collapsed" | "hidden";
+
+    export interface SuspenseListCommonProps {
+        /**
+         * Note that SuspenseList require more than one child;
+         * it is a runtime warning to provide only a single child.
+         *
+         * It does, however, allow those children to be wrapped inside a single
+         * level of `<React.Fragment>`.
+         */
+        children: ReactElement | Iterable<ReactElement>;
+    }
+
+    interface DirectionalSuspenseListProps extends SuspenseListCommonProps {
+        /**
+         * Defines the order in which the `SuspenseList` children should be revealed.
+         */
+        revealOrder: "forwards" | "backwards";
+        /**
+         * Dictates how unloaded items in a SuspenseList is shown.
+         *
+         * - By default, `SuspenseList` will show all fallbacks in the list.
+         * - `collapsed` shows only the next fallback in the list.
+         * - `hidden` doesn’t show any unloaded items.
+         */
+        tail?: SuspenseListTailMode | undefined;
+    }
+
+    interface NonDirectionalSuspenseListProps extends SuspenseListCommonProps {
+        /**
+         * Defines the order in which the `SuspenseList` children should be revealed.
+         */
+        revealOrder?: Exclude<SuspenseListRevealOrder, DirectionalSuspenseListProps["revealOrder"]> | undefined;
+        /**
+         * The tail property is invalid when not using the `forwards` or `backwards` reveal orders.
+         */
+        tail?: never | undefined;
+    }
+
+    export type SuspenseListProps = DirectionalSuspenseListProps | NonDirectionalSuspenseListProps;
+
+    /**
+     * `SuspenseList` helps coordinate many components that can suspend by orchestrating the order
+     * in which these components are revealed to the user.
+     *
+     * When multiple components need to fetch data, this data may arrive in an unpredictable order.
+     * However, if you wrap these items in a `SuspenseList`, React will not show an item in the list
+     * until previous items have been displayed (this behavior is adjustable).
+     *
+     * @see https://reactjs.org/docs/concurrent-mode-reference.html#suspenselist
+     * @see https://reactjs.org/docs/concurrent-mode-patterns.html#suspenselist
+     */
+    export const unstable_SuspenseList: ExoticComponent<SuspenseListProps>;
+
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    export function experimental_useEffectEvent<T extends Function>(event: T): T;
+
+    type Reference = object;
+    type TaintableUniqueValue = string | bigint | ArrayBufferView;
+    function experimental_taintUniqueValue(
+        message: string | undefined,
+        lifetime: Reference,
+        value: TaintableUniqueValue,
+    ): void;
+    function experimental_taintObjectReference(message: string | undefined, object: Reference): void;
+
+    export interface HTMLAttributes<T> {
+        /**
+         * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert
+         */
+        inert?: boolean | undefined;
+    }
+}
diff --git a/node_modules/@types/react/ts5.0/global.d.ts b/node_modules/@types/react/ts5.0/global.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8ae2ddd881cc2bee2a2b20844ee32ad95289e863
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/global.d.ts
@@ -0,0 +1,160 @@
+/*
+React projects that don't include the DOM library need these interfaces to compile.
+React Native applications use React, but there is no DOM available. The JavaScript runtime
+is ES6/ES2015 only. These definitions allow such projects to compile with only `--lib ES6`.
+
+Warning: all of these interfaces are empty. If you want type definitions for various properties
+(such as HTMLInputElement.prototype.value), you need to add `--lib DOM` (via command line or tsconfig.json).
+*/
+
+interface Event {}
+interface AnimationEvent extends Event {}
+interface ClipboardEvent extends Event {}
+interface CompositionEvent extends Event {}
+interface DragEvent extends Event {}
+interface FocusEvent extends Event {}
+interface KeyboardEvent extends Event {}
+interface MouseEvent extends Event {}
+interface TouchEvent extends Event {}
+interface PointerEvent extends Event {}
+interface ToggleEvent extends Event {}
+interface TransitionEvent extends Event {}
+interface UIEvent extends Event {}
+interface WheelEvent extends Event {}
+
+interface EventTarget {}
+interface Document {}
+interface DataTransfer {}
+interface StyleMedia {}
+
+interface Element {}
+interface DocumentFragment {}
+
+interface HTMLElement extends Element {}
+interface HTMLAnchorElement extends HTMLElement {}
+interface HTMLAreaElement extends HTMLElement {}
+interface HTMLAudioElement extends HTMLElement {}
+interface HTMLBaseElement extends HTMLElement {}
+interface HTMLBodyElement extends HTMLElement {}
+interface HTMLBRElement extends HTMLElement {}
+interface HTMLButtonElement extends HTMLElement {}
+interface HTMLCanvasElement extends HTMLElement {}
+interface HTMLDataElement extends HTMLElement {}
+interface HTMLDataListElement extends HTMLElement {}
+interface HTMLDetailsElement extends HTMLElement {}
+interface HTMLDialogElement extends HTMLElement {}
+interface HTMLDivElement extends HTMLElement {}
+interface HTMLDListElement extends HTMLElement {}
+interface HTMLEmbedElement extends HTMLElement {}
+interface HTMLFieldSetElement extends HTMLElement {}
+interface HTMLFormElement extends HTMLElement {}
+interface HTMLHeadingElement extends HTMLElement {}
+interface HTMLHeadElement extends HTMLElement {}
+interface HTMLHRElement extends HTMLElement {}
+interface HTMLHtmlElement extends HTMLElement {}
+interface HTMLIFrameElement extends HTMLElement {}
+interface HTMLImageElement extends HTMLElement {}
+interface HTMLInputElement extends HTMLElement {}
+interface HTMLModElement extends HTMLElement {}
+interface HTMLLabelElement extends HTMLElement {}
+interface HTMLLegendElement extends HTMLElement {}
+interface HTMLLIElement extends HTMLElement {}
+interface HTMLLinkElement extends HTMLElement {}
+interface HTMLMapElement extends HTMLElement {}
+interface HTMLMetaElement extends HTMLElement {}
+interface HTMLMeterElement extends HTMLElement {}
+interface HTMLObjectElement extends HTMLElement {}
+interface HTMLOListElement extends HTMLElement {}
+interface HTMLOptGroupElement extends HTMLElement {}
+interface HTMLOptionElement extends HTMLElement {}
+interface HTMLOutputElement extends HTMLElement {}
+interface HTMLParagraphElement extends HTMLElement {}
+interface HTMLParamElement extends HTMLElement {}
+interface HTMLPreElement extends HTMLElement {}
+interface HTMLProgressElement extends HTMLElement {}
+interface HTMLQuoteElement extends HTMLElement {}
+interface HTMLSlotElement extends HTMLElement {}
+interface HTMLScriptElement extends HTMLElement {}
+interface HTMLSelectElement extends HTMLElement {}
+interface HTMLSourceElement extends HTMLElement {}
+interface HTMLSpanElement extends HTMLElement {}
+interface HTMLStyleElement extends HTMLElement {}
+interface HTMLTableElement extends HTMLElement {}
+interface HTMLTableColElement extends HTMLElement {}
+interface HTMLTableDataCellElement extends HTMLElement {}
+interface HTMLTableHeaderCellElement extends HTMLElement {}
+interface HTMLTableRowElement extends HTMLElement {}
+interface HTMLTableSectionElement extends HTMLElement {}
+interface HTMLTemplateElement extends HTMLElement {}
+interface HTMLTextAreaElement extends HTMLElement {}
+interface HTMLTimeElement extends HTMLElement {}
+interface HTMLTitleElement extends HTMLElement {}
+interface HTMLTrackElement extends HTMLElement {}
+interface HTMLUListElement extends HTMLElement {}
+interface HTMLVideoElement extends HTMLElement {}
+interface HTMLWebViewElement extends HTMLElement {}
+
+interface SVGElement extends Element {}
+interface SVGSVGElement extends SVGElement {}
+interface SVGCircleElement extends SVGElement {}
+interface SVGClipPathElement extends SVGElement {}
+interface SVGDefsElement extends SVGElement {}
+interface SVGDescElement extends SVGElement {}
+interface SVGEllipseElement extends SVGElement {}
+interface SVGFEBlendElement extends SVGElement {}
+interface SVGFEColorMatrixElement extends SVGElement {}
+interface SVGFEComponentTransferElement extends SVGElement {}
+interface SVGFECompositeElement extends SVGElement {}
+interface SVGFEConvolveMatrixElement extends SVGElement {}
+interface SVGFEDiffuseLightingElement extends SVGElement {}
+interface SVGFEDisplacementMapElement extends SVGElement {}
+interface SVGFEDistantLightElement extends SVGElement {}
+interface SVGFEDropShadowElement extends SVGElement {}
+interface SVGFEFloodElement extends SVGElement {}
+interface SVGFEFuncAElement extends SVGElement {}
+interface SVGFEFuncBElement extends SVGElement {}
+interface SVGFEFuncGElement extends SVGElement {}
+interface SVGFEFuncRElement extends SVGElement {}
+interface SVGFEGaussianBlurElement extends SVGElement {}
+interface SVGFEImageElement extends SVGElement {}
+interface SVGFEMergeElement extends SVGElement {}
+interface SVGFEMergeNodeElement extends SVGElement {}
+interface SVGFEMorphologyElement extends SVGElement {}
+interface SVGFEOffsetElement extends SVGElement {}
+interface SVGFEPointLightElement extends SVGElement {}
+interface SVGFESpecularLightingElement extends SVGElement {}
+interface SVGFESpotLightElement extends SVGElement {}
+interface SVGFETileElement extends SVGElement {}
+interface SVGFETurbulenceElement extends SVGElement {}
+interface SVGFilterElement extends SVGElement {}
+interface SVGForeignObjectElement extends SVGElement {}
+interface SVGGElement extends SVGElement {}
+interface SVGImageElement extends SVGElement {}
+interface SVGLineElement extends SVGElement {}
+interface SVGLinearGradientElement extends SVGElement {}
+interface SVGMarkerElement extends SVGElement {}
+interface SVGMaskElement extends SVGElement {}
+interface SVGMetadataElement extends SVGElement {}
+interface SVGPathElement extends SVGElement {}
+interface SVGPatternElement extends SVGElement {}
+interface SVGPolygonElement extends SVGElement {}
+interface SVGPolylineElement extends SVGElement {}
+interface SVGRadialGradientElement extends SVGElement {}
+interface SVGRectElement extends SVGElement {}
+interface SVGSetElement extends SVGElement {}
+interface SVGStopElement extends SVGElement {}
+interface SVGSwitchElement extends SVGElement {}
+interface SVGSymbolElement extends SVGElement {}
+interface SVGTextElement extends SVGElement {}
+interface SVGTextPathElement extends SVGElement {}
+interface SVGTSpanElement extends SVGElement {}
+interface SVGUseElement extends SVGElement {}
+interface SVGViewElement extends SVGElement {}
+
+interface FormData {}
+interface Text {}
+interface TouchList {}
+interface WebGLRenderingContext {}
+interface WebGL2RenderingContext {}
+
+interface TrustedHTML {}
diff --git a/node_modules/@types/react/ts5.0/index.d.ts b/node_modules/@types/react/ts5.0/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..703314058fb259098ec42cee14842cf4d33a698f
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/index.d.ts
@@ -0,0 +1,4530 @@
+// NOTE: Users of the `experimental` builds of React should add a reference
+// to 'react/experimental' in their project. See experimental.d.ts's top comment
+// for reference and documentation on how exactly to do it.
+
+/// <reference path="global.d.ts" />
+
+import * as CSS from "csstype";
+import * as PropTypes from "prop-types";
+
+type NativeAnimationEvent = AnimationEvent;
+type NativeClipboardEvent = ClipboardEvent;
+type NativeCompositionEvent = CompositionEvent;
+type NativeDragEvent = DragEvent;
+type NativeFocusEvent = FocusEvent;
+type NativeKeyboardEvent = KeyboardEvent;
+type NativeMouseEvent = MouseEvent;
+type NativeTouchEvent = TouchEvent;
+type NativePointerEvent = PointerEvent;
+type NativeTransitionEvent = TransitionEvent;
+type NativeUIEvent = UIEvent;
+type NativeWheelEvent = WheelEvent;
+
+/**
+ * Used to represent DOM API's where users can either pass
+ * true or false as a boolean or as its equivalent strings.
+ */
+type Booleanish = boolean | "true" | "false";
+
+/**
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin MDN}
+ */
+type CrossOrigin = "anonymous" | "use-credentials" | "" | undefined;
+
+declare const UNDEFINED_VOID_ONLY: unique symbol;
+
+/**
+ * The function returned from an effect passed to {@link React.useEffect useEffect},
+ * which can be used to clean up the effect when the component unmounts.
+ *
+ * @see {@link https://react.dev/reference/react/useEffect React Docs}
+ */
+type Destructor = () => void | { [UNDEFINED_VOID_ONLY]: never };
+type VoidOrUndefinedOnly = void | { [UNDEFINED_VOID_ONLY]: never };
+
+// eslint-disable-next-line @definitelytyped/export-just-namespace
+export = React;
+export as namespace React;
+
+declare namespace React {
+    //
+    // React Elements
+    // ----------------------------------------------------------------------
+
+    /**
+     * Used to retrieve the possible components which accept a given set of props.
+     *
+     * Can be passed no type parameters to get a union of all possible components
+     * and tags.
+     *
+     * Is a superset of {@link ComponentType}.
+     *
+     * @template P The props to match against. If not passed, defaults to any.
+     * @template Tag An optional tag to match against. If not passed, attempts to match against all possible tags.
+     *
+     * @example
+     *
+     * ```tsx
+     * // All components and tags (img, embed etc.)
+     * // which accept `src`
+     * type SrcComponents = ElementType<{ src: any }>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // All components
+     * type AllComponents = ElementType;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // All custom components which match `src`, and tags which
+     * // match `src`, narrowed down to just `audio` and `embed`
+     * type SrcComponents = ElementType<{ src: any }, 'audio' | 'embed'>;
+     * ```
+     */
+    type ElementType<P = any, Tag extends keyof JSX.IntrinsicElements = keyof JSX.IntrinsicElements> =
+        | { [K in Tag]: P extends JSX.IntrinsicElements[K] ? K : never }[Tag]
+        | ComponentType<P>;
+
+    /**
+     * Represents any user-defined component, either as a function or a class.
+     *
+     * Similar to {@link JSXElementConstructor}, but with extra properties like
+     * {@link FunctionComponent.defaultProps defaultProps } and
+     * {@link ComponentClass.contextTypes contextTypes}.
+     *
+     * @template P The props the component accepts.
+     *
+     * @see {@link ComponentClass}
+     * @see {@link FunctionComponent}
+     */
+    type ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P>;
+
+    /**
+     * Represents any user-defined component, either as a function or a class.
+     *
+     * Similar to {@link ComponentType}, but without extra properties like
+     * {@link FunctionComponent.defaultProps defaultProps } and
+     * {@link ComponentClass.contextTypes contextTypes}.
+     *
+     * @template P The props the component accepts.
+     */
+    type JSXElementConstructor<P> =
+        | ((
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-stateless-function-components React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ) => ReactElement<any, any> | null)
+        | (new(
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ) => Component<any, any>);
+
+    /**
+     * A readonly ref container where {@link current} cannot be mutated.
+     *
+     * Created by {@link createRef}, or {@link useRef} when passed `null`.
+     *
+     * @template T The type of the ref's value.
+     *
+     * @example
+     *
+     * ```tsx
+     * const ref = createRef<HTMLDivElement>();
+     *
+     * ref.current = document.createElement('div'); // Error
+     * ```
+     */
+    interface RefObject<T> {
+        /**
+         * The current value of the ref.
+         */
+        readonly current: T | null;
+    }
+
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES {
+    }
+    /**
+     * A callback fired whenever the ref's value changes.
+     *
+     * @template T The type of the ref's value.
+     *
+     * @see {@link https://react.dev/reference/react-dom/components/common#ref-callback React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <div ref={(node) => console.log(node)} />
+     * ```
+     */
+    type RefCallback<T> = {
+        bivarianceHack(
+            instance: T | null,
+        ):
+            | void
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES
+            ];
+    }["bivarianceHack"];
+
+    /**
+     * A union type of all possible shapes for React refs.
+     *
+     * @see {@link RefCallback}
+     * @see {@link RefObject}
+     */
+
+    type Ref<T> = RefCallback<T> | RefObject<T> | null;
+    /**
+     * A legacy implementation of refs where you can pass a string to a ref prop.
+     *
+     * @see {@link https://react.dev/reference/react/Component#refs React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <div ref="myRef" />
+     * ```
+     */
+    // TODO: Remove the string ref special case from `PropsWithRef` once we remove LegacyRef
+    type LegacyRef<T> = string | Ref<T>;
+
+    /**
+     * Retrieves the type of the 'ref' prop for a given component type or tag name.
+     *
+     * @template C The component type.
+     *
+     * @example
+     *
+     * ```tsx
+     * type MyComponentRef = React.ElementRef<typeof MyComponent>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * type DivRef = React.ElementRef<'div'>;
+     * ```
+     */
+    type ElementRef<
+        C extends
+            | ForwardRefExoticComponent<any>
+            | { new(props: any): Component<any> }
+            | ((props: any, deprecatedLegacyContext?: any) => ReactElement | null)
+            | keyof JSX.IntrinsicElements,
+    > =
+        // need to check first if `ref` is a valid prop for ts@3.0
+        // otherwise it will infer `{}` instead of `never`
+        "ref" extends keyof ComponentPropsWithRef<C>
+            ? NonNullable<ComponentPropsWithRef<C>["ref"]> extends RefAttributes<
+                infer Instance
+            >["ref"] ? Instance
+            : never
+            : never;
+
+    type ComponentState = any;
+
+    /**
+     * A value which uniquely identifies a node among items in an array.
+     *
+     * @see {@link https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key React Docs}
+     */
+    type Key = string | number | bigint;
+
+    /**
+     * @internal The props any component can receive.
+     * You don't have to add this type. All components automatically accept these props.
+     * ```tsx
+     * const Component = () => <div />;
+     * <Component key="one" />
+     * ```
+     *
+     * WARNING: The implementation of a component will never have access to these attributes.
+     * The following example would be incorrect usage because {@link Component} would never have access to `key`:
+     * ```tsx
+     * const Component = (props: React.Attributes) => props.key;
+     * ```
+     */
+    interface Attributes {
+        key?: Key | null | undefined;
+    }
+    /**
+     * The props any component accepting refs can receive.
+     * Class components, built-in browser components (e.g. `div`) and forwardRef components can receive refs and automatically accept these props.
+     * ```tsx
+     * const Component = forwardRef(() => <div />);
+     * <Component ref={(current) => console.log(current)} />
+     * ```
+     *
+     * You only need this type if you manually author the types of props that need to be compatible with legacy refs.
+     * ```tsx
+     * interface Props extends React.RefAttributes<HTMLDivElement> {}
+     * declare const Component: React.FunctionComponent<Props>;
+     * ```
+     *
+     * Otherwise it's simpler to directly use {@link Ref} since you can safely use the
+     * props type to describe to props that a consumer can pass to the component
+     * as well as describing the props the implementation of a component "sees".
+     * {@link RefAttributes} is generally not safe to describe both consumer and seen props.
+     *
+     * ```tsx
+     * interface Props extends {
+     *   ref?: React.Ref<HTMLDivElement> | undefined;
+     * }
+     * declare const Component: React.FunctionComponent<Props>;
+     * ```
+     *
+     * WARNING: The implementation of a component will not have access to the same type in versions of React supporting string refs.
+     * The following example would be incorrect usage because {@link Component} would never have access to a `ref` with type `string`
+     * ```tsx
+     * const Component = (props: React.RefAttributes) => props.ref;
+     * ```
+     */
+    interface RefAttributes<T> extends Attributes {
+        /**
+         * Allows getting a ref to the component instance.
+         * Once the component unmounts, React will set `ref.current` to `null`
+         * (or call the ref with `null` if you passed a callback ref).
+         *
+         * @see {@link https://react.dev/learn/referencing-values-with-refs#refs-and-the-dom React Docs}
+         */
+        ref?: LegacyRef<T> | undefined;
+    }
+
+    /**
+     * Represents the built-in attributes available to class components.
+     */
+    interface ClassAttributes<T> extends RefAttributes<T> {
+    }
+
+    /**
+     * Represents a JSX element.
+     *
+     * Where {@link ReactNode} represents everything that can be rendered, `ReactElement`
+     * only represents JSX.
+     *
+     * @template P The type of the props object
+     * @template T The type of the component or tag
+     *
+     * @example
+     *
+     * ```tsx
+     * const element: ReactElement = <div />;
+     * ```
+     */
+    interface ReactElement<
+        P = any,
+        T extends string | JSXElementConstructor<any> = string | JSXElementConstructor<any>,
+    > {
+        type: T;
+        props: P;
+        key: string | null;
+    }
+
+    /**
+     * @deprecated
+     */
+    interface ReactComponentElement<
+        T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>,
+        P = Pick<ComponentProps<T>, Exclude<keyof ComponentProps<T>, "key" | "ref">>,
+    > extends ReactElement<P, Exclude<T, number>> {}
+
+    interface FunctionComponentElement<P> extends ReactElement<P, FunctionComponent<P>> {
+        ref?: ("ref" extends keyof P ? P extends { ref?: infer R | undefined } ? R : never : never) | undefined;
+    }
+
+    type CElement<P, T extends Component<P, ComponentState>> = ComponentElement<P, T>;
+    interface ComponentElement<P, T extends Component<P, ComponentState>> extends ReactElement<P, ComponentClass<P>> {
+        ref?: LegacyRef<T> | undefined;
+    }
+
+    /**
+     * @deprecated Use {@link ComponentElement} instead.
+     */
+    type ClassicElement<P> = CElement<P, ClassicComponent<P, ComponentState>>;
+
+    // string fallback for custom web-components
+    interface DOMElement<P extends HTMLAttributes<T> | SVGAttributes<T>, T extends Element>
+        extends ReactElement<P, string>
+    {
+        ref: LegacyRef<T>;
+    }
+
+    // ReactHTML for ReactHTMLElement
+    interface ReactHTMLElement<T extends HTMLElement> extends DetailedReactHTMLElement<AllHTMLAttributes<T>, T> {}
+
+    interface DetailedReactHTMLElement<P extends HTMLAttributes<T>, T extends HTMLElement> extends DOMElement<P, T> {
+        type: keyof ReactHTML;
+    }
+
+    // ReactSVG for ReactSVGElement
+    interface ReactSVGElement extends DOMElement<SVGAttributes<SVGElement>, SVGElement> {
+        type: keyof ReactSVG;
+    }
+
+    interface ReactPortal extends ReactElement {
+        children: ReactNode;
+    }
+
+    //
+    // Factories
+    // ----------------------------------------------------------------------
+
+    type Factory<P> = (props?: Attributes & P, ...children: ReactNode[]) => ReactElement<P>;
+
+    /**
+     * @deprecated Please use `FunctionComponentFactory`
+     */
+    type SFCFactory<P> = FunctionComponentFactory<P>;
+
+    type FunctionComponentFactory<P> = (
+        props?: Attributes & P,
+        ...children: ReactNode[]
+    ) => FunctionComponentElement<P>;
+
+    type ComponentFactory<P, T extends Component<P, ComponentState>> = (
+        props?: ClassAttributes<T> & P,
+        ...children: ReactNode[]
+    ) => CElement<P, T>;
+
+    type CFactory<P, T extends Component<P, ComponentState>> = ComponentFactory<P, T>;
+    type ClassicFactory<P> = CFactory<P, ClassicComponent<P, ComponentState>>;
+
+    type DOMFactory<P extends DOMAttributes<T>, T extends Element> = (
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ) => DOMElement<P, T>;
+
+    interface HTMLFactory<T extends HTMLElement> extends DetailedHTMLFactory<AllHTMLAttributes<T>, T> {}
+
+    interface DetailedHTMLFactory<P extends HTMLAttributes<T>, T extends HTMLElement> extends DOMFactory<P, T> {
+        (props?: ClassAttributes<T> & P | null, ...children: ReactNode[]): DetailedReactHTMLElement<P, T>;
+    }
+
+    interface SVGFactory extends DOMFactory<SVGAttributes<SVGElement>, SVGElement> {
+        (
+            props?: ClassAttributes<SVGElement> & SVGAttributes<SVGElement> | null,
+            ...children: ReactNode[]
+        ): ReactSVGElement;
+    }
+
+    /**
+     * @deprecated - This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactText = string | number;
+    /**
+     * @deprecated - This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactChild = ReactElement | string | number;
+
+    /**
+     * @deprecated Use either `ReactNode[]` if you need an array or `Iterable<ReactNode>` if its passed to a host component.
+     */
+    interface ReactNodeArray extends ReadonlyArray<ReactNode> {}
+    /**
+     * WARNING: Not related to `React.Fragment`.
+     * @deprecated This type is not relevant when using React. Inline the type instead to make the intent clear.
+     */
+    type ReactFragment = Iterable<ReactNode>;
+
+    /**
+     * For internal usage only.
+     * Different release channels declare additional types of ReactNode this particular release channel accepts.
+     * App or library types should never augment this interface.
+     */
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES {}
+
+    /**
+     * Represents all of the things React can render.
+     *
+     * Where {@link ReactElement} only represents JSX, `ReactNode` represents everything that can be rendered.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/reactnode/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Typing children
+     * type Props = { children: ReactNode }
+     *
+     * const Component = ({ children }: Props) => <div>{children}</div>
+     *
+     * <Component>hello</Component>
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Typing a custom element
+     * type Props = { customElement: ReactNode }
+     *
+     * const Component = ({ customElement }: Props) => <div>{customElement}</div>
+     *
+     * <Component customElement={<div>hello</div>} />
+     * ```
+     */
+    // non-thenables need to be kept in sync with AwaitedReactNode
+    type ReactNode =
+        | ReactElement
+        | string
+        | number
+        | Iterable<ReactNode>
+        | ReactPortal
+        | boolean
+        | null
+        | undefined
+        | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES[
+            keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_REACT_NODES
+        ];
+
+    //
+    // Top Level API
+    // ----------------------------------------------------------------------
+
+    // DOM Elements
+    /** @deprecated */
+    function createFactory<T extends HTMLElement>(
+        type: keyof ReactHTML,
+    ): HTMLFactory<T>;
+    /** @deprecated */
+    function createFactory(
+        type: keyof ReactSVG,
+    ): SVGFactory;
+    /** @deprecated */
+    function createFactory<P extends DOMAttributes<T>, T extends Element>(
+        type: string,
+    ): DOMFactory<P, T>;
+
+    // Custom components
+    /** @deprecated */
+    function createFactory<P>(type: FunctionComponent<P>): FunctionComponentFactory<P>;
+    /** @deprecated */
+    function createFactory<P, T extends Component<P, ComponentState>, C extends ComponentClass<P>>(
+        type: ClassType<P, T, C>,
+    ): CFactory<P, T>;
+    /** @deprecated */
+    function createFactory<P>(type: ComponentClass<P>): Factory<P>;
+
+    // DOM Elements
+    // TODO: generalize this to everything in `keyof ReactHTML`, not just "input"
+    function createElement(
+        type: "input",
+        props?: InputHTMLAttributes<HTMLInputElement> & ClassAttributes<HTMLInputElement> | null,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+    function createElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        type: keyof ReactHTML,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<P, T>;
+    function createElement<P extends SVGAttributes<T>, T extends SVGElement>(
+        type: keyof ReactSVG,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): ReactSVGElement;
+    function createElement<P extends DOMAttributes<T>, T extends Element>(
+        type: string,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): DOMElement<P, T>;
+
+    // Custom components
+
+    function createElement<P extends {}>(
+        type: FunctionComponent<P>,
+        props?: Attributes & P | null,
+        ...children: ReactNode[]
+    ): FunctionComponentElement<P>;
+    function createElement<P extends {}, T extends Component<P, ComponentState>, C extends ComponentClass<P>>(
+        type: ClassType<P, T, C>,
+        props?: ClassAttributes<T> & P | null,
+        ...children: ReactNode[]
+    ): CElement<P, T>;
+    function createElement<P extends {}>(
+        type: FunctionComponent<P> | ComponentClass<P> | string,
+        props?: Attributes & P | null,
+        ...children: ReactNode[]
+    ): ReactElement<P>;
+
+    // DOM Elements
+    // ReactHTMLElement
+    function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        element: DetailedReactHTMLElement<P, T>,
+        props?: P,
+        ...children: ReactNode[]
+    ): DetailedReactHTMLElement<P, T>;
+    // ReactHTMLElement, less specific
+    function cloneElement<P extends HTMLAttributes<T>, T extends HTMLElement>(
+        element: ReactHTMLElement<T>,
+        props?: P,
+        ...children: ReactNode[]
+    ): ReactHTMLElement<T>;
+    // SVGElement
+    function cloneElement<P extends SVGAttributes<T>, T extends SVGElement>(
+        element: ReactSVGElement,
+        props?: P,
+        ...children: ReactNode[]
+    ): ReactSVGElement;
+    // DOM Element (has to be the last, because type checking stops at first overload that fits)
+    function cloneElement<P extends DOMAttributes<T>, T extends Element>(
+        element: DOMElement<P, T>,
+        props?: DOMAttributes<T> & P,
+        ...children: ReactNode[]
+    ): DOMElement<P, T>;
+
+    // Custom components
+    function cloneElement<P>(
+        element: FunctionComponentElement<P>,
+        props?: Partial<P> & Attributes,
+        ...children: ReactNode[]
+    ): FunctionComponentElement<P>;
+    function cloneElement<P, T extends Component<P, ComponentState>>(
+        element: CElement<P, T>,
+        props?: Partial<P> & ClassAttributes<T>,
+        ...children: ReactNode[]
+    ): CElement<P, T>;
+    function cloneElement<P>(
+        element: ReactElement<P>,
+        props?: Partial<P> & Attributes,
+        ...children: ReactNode[]
+    ): ReactElement<P>;
+
+    /**
+     * Describes the props accepted by a Context {@link Provider}.
+     *
+     * @template T The type of the value the context provides.
+     */
+    interface ProviderProps<T> {
+        value: T;
+        children?: ReactNode | undefined;
+    }
+
+    /**
+     * Describes the props accepted by a Context {@link Consumer}.
+     *
+     * @template T The type of the value the context provides.
+     */
+    interface ConsumerProps<T> {
+        children: (value: T) => ReactNode;
+    }
+
+    /**
+     * An object masquerading as a component. These are created by functions
+     * like {@link forwardRef}, {@link memo}, and {@link createContext}.
+     *
+     * In order to make TypeScript work, we pretend that they are normal
+     * components.
+     *
+     * But they are, in fact, not callable - instead, they are objects which
+     * are treated specially by the renderer.
+     *
+     * @template P The props the component accepts.
+     */
+    interface ExoticComponent<P = {}> {
+        (props: P): ReactElement | null;
+        readonly $$typeof: symbol;
+    }
+
+    /**
+     * An {@link ExoticComponent} with a `displayName` property applied to it.
+     *
+     * @template P The props the component accepts.
+     */
+    interface NamedExoticComponent<P = {}> extends ExoticComponent<P> {
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * An {@link ExoticComponent} with a `propTypes` property applied to it.
+     *
+     * @template P The props the component accepts.
+     */
+    interface ProviderExoticComponent<P> extends ExoticComponent<P> {
+        propTypes?: WeakValidationMap<P> | undefined;
+    }
+
+    /**
+     * Used to retrieve the type of a context object from a {@link Context}.
+     *
+     * @template C The context object.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const MyContext = createContext({ foo: 'bar' });
+     *
+     * type ContextType = ContextType<typeof MyContext>;
+     * // ContextType = { foo: string }
+     * ```
+     */
+    type ContextType<C extends Context<any>> = C extends Context<infer T> ? T : never;
+
+    /**
+     * Wraps your components to specify the value of this context for all components inside.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#provider React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     *
+     * function App() {
+     *   return (
+     *     <ThemeContext.Provider value="dark">
+     *       <Toolbar />
+     *     </ThemeContext.Provider>
+     *   );
+     * }
+     * ```
+     */
+    type Provider<T> = ProviderExoticComponent<ProviderProps<T>>;
+
+    /**
+     * The old way to read context, before {@link useContext} existed.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#consumer React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { UserContext } from './user-context';
+     *
+     * function Avatar() {
+     *   return (
+     *     <UserContext.Consumer>
+     *       {user => <img src={user.profileImage} alt={user.name} />}
+     *     </UserContext.Consumer>
+     *   );
+     * }
+     * ```
+     */
+    type Consumer<T> = ExoticComponent<ConsumerProps<T>>;
+
+    /**
+     * Context lets components pass information deep down without explicitly
+     * passing props.
+     *
+     * Created from {@link createContext}
+     *
+     * @see {@link https://react.dev/learn/passing-data-deeply-with-context React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/context/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     * ```
+     */
+    interface Context<T> {
+        Provider: Provider<T>;
+        Consumer: Consumer<T>;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * Lets you create a {@link Context} that components can provide or read.
+     *
+     * @param defaultValue The value you want the context to have when there is no matching
+     * {@link Provider} in the tree above the component reading the context. This is meant
+     * as a "last resort" fallback.
+     *
+     * @see {@link https://react.dev/reference/react/createContext#reference React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/context/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { createContext } from 'react';
+     *
+     * const ThemeContext = createContext('light');
+     * ```
+     */
+    function createContext<T>(
+        // If you thought this should be optional, see
+        // https://github.com/DefinitelyTyped/DefinitelyTyped/pull/24509#issuecomment-382213106
+        defaultValue: T,
+    ): Context<T>;
+
+    function isValidElement<P>(object: {} | null | undefined): object is ReactElement<P>;
+
+    /**
+     * Maintainer's note: Sync with {@link ReactChildren} until {@link ReactChildren} is removed.
+     */
+    const Children: {
+        map<T, C>(
+            children: C | readonly C[],
+            fn: (child: C, index: number) => T,
+        ): C extends null | undefined ? C : Array<Exclude<T, boolean | null | undefined>>;
+        forEach<C>(children: C | readonly C[], fn: (child: C, index: number) => void): void;
+        count(children: any): number;
+        only<C>(children: C): C extends any[] ? never : C;
+        toArray(children: ReactNode | ReactNode[]): Array<Exclude<ReactNode, boolean | null | undefined>>;
+    };
+    /**
+     * Lets you group elements without a wrapper node.
+     *
+     * @see {@link https://react.dev/reference/react/Fragment React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { Fragment } from 'react';
+     *
+     * <Fragment>
+     *   <td>Hello</td>
+     *   <td>World</td>
+     * </Fragment>
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Using the <></> shorthand syntax:
+     *
+     * <>
+     *   <td>Hello</td>
+     *   <td>World</td>
+     * </>
+     * ```
+     */
+    const Fragment: ExoticComponent<{ children?: ReactNode | undefined }>;
+
+    /**
+     * Lets you find common bugs in your components early during development.
+     *
+     * @see {@link https://react.dev/reference/react/StrictMode React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { StrictMode } from 'react';
+     *
+     * <StrictMode>
+     *   <App />
+     * </StrictMode>
+     * ```
+     */
+    const StrictMode: ExoticComponent<{ children?: ReactNode | undefined }>;
+
+    /**
+     * The props accepted by {@link Suspense}.
+     *
+     * @see {@link https://react.dev/reference/react/Suspense React Docs}
+     */
+    interface SuspenseProps {
+        children?: ReactNode | undefined;
+
+        /** A fallback react tree to show when a Suspense child (like React.lazy) suspends */
+        fallback?: ReactNode;
+
+        /**
+         * A name for this Suspense boundary for instrumentation purposes.
+         * The name will help identify this boundary in React DevTools.
+         */
+        name?: string | undefined;
+    }
+
+    /**
+     * Lets you display a fallback until its children have finished loading.
+     *
+     * @see {@link https://react.dev/reference/react/Suspense React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * import { Suspense } from 'react';
+     *
+     * <Suspense fallback={<Loading />}>
+     *   <ProfileDetails />
+     * </Suspense>
+     * ```
+     */
+    const Suspense: ExoticComponent<SuspenseProps>;
+    const version: string;
+
+    /**
+     * The callback passed to {@link ProfilerProps.onRender}.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+     */
+    type ProfilerOnRenderCallback = (
+        /**
+         * The string id prop of the {@link Profiler} tree that has just committed. This lets
+         * you identify which part of the tree was committed if you are using multiple
+         * profilers.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        id: string,
+        /**
+         * This lets you know whether the tree has just been mounted for the first time
+         * or re-rendered due to a change in props, state, or hooks.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        phase: "mount" | "update" | "nested-update",
+        /**
+         * The number of milliseconds spent rendering the {@link Profiler} and its descendants
+         * for the current update. This indicates how well the subtree makes use of
+         * memoization (e.g. {@link memo} and {@link useMemo}). Ideally this value should decrease
+         * significantly after the initial mount as many of the descendants will only need to
+         * re-render if their specific props change.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        actualDuration: number,
+        /**
+         * The number of milliseconds estimating how much time it would take to re-render the entire
+         * {@link Profiler} subtree without any optimizations. It is calculated by summing up the most
+         * recent render durations of each component in the tree. This value estimates a worst-case
+         * cost of rendering (e.g. the initial mount or a tree with no memoization). Compare
+         * {@link actualDuration} against it to see if memoization is working.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        baseDuration: number,
+        /**
+         * A numeric timestamp for when React began rendering the current update.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        startTime: number,
+        /**
+         * A numeric timestamp for when React committed the current update. This value is shared
+         * between all profilers in a commit, enabling them to be grouped if desirable.
+         *
+         * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+         */
+        commitTime: number,
+    ) => void;
+
+    /**
+     * The props accepted by {@link Profiler}.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler React Docs}
+     */
+    interface ProfilerProps {
+        children?: ReactNode | undefined;
+        id: string;
+        onRender: ProfilerOnRenderCallback;
+    }
+
+    /**
+     * Lets you measure rendering performance of a React tree programmatically.
+     *
+     * @see {@link https://react.dev/reference/react/Profiler#onrender-callback React Docs}
+     *
+     * @example
+     *
+     * ```tsx
+     * <Profiler id="App" onRender={onRender}>
+     *   <App />
+     * </Profiler>
+     * ```
+     */
+    const Profiler: ExoticComponent<ProfilerProps>;
+
+    //
+    // Component API
+    // ----------------------------------------------------------------------
+
+    type ReactInstance = Component<any> | Element;
+
+    // Base component for plain JS classes
+    interface Component<P = {}, S = {}, SS = any> extends ComponentLifecycle<P, S, SS> {}
+    class Component<P, S> {
+        /**
+         * If set, `this.context` will be set at runtime to the current value of the given Context.
+         *
+         * @example
+         *
+         * ```ts
+         * type MyContext = number
+         * const Ctx = React.createContext<MyContext>(0)
+         *
+         * class Foo extends React.Component {
+         *   static contextType = Ctx
+         *   context!: React.ContextType<typeof Ctx>
+         *   render () {
+         *     return <>My context's value: {this.context}</>;
+         *   }
+         * }
+         * ```
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-contexttype}
+         */
+        static contextType?: Context<any> | undefined;
+
+        /**
+         * If using the new style context, re-declare this in your class to be the
+         * `React.ContextType` of your `static contextType`.
+         * Should be used with type annotation or static contextType.
+         *
+         * @example
+         * ```ts
+         * static contextType = MyContext
+         * // For TS pre-3.7:
+         * context!: React.ContextType<typeof MyContext>
+         * // For TS 3.7 and above:
+         * declare context: React.ContextType<typeof MyContext>
+         * ```
+         *
+         * @see {@link https://react.dev/reference/react/Component#context React Docs}
+         */
+        context: unknown;
+
+        constructor(props: P);
+        /**
+         * @deprecated
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html React Docs}
+         */
+        constructor(props: P, context: any);
+
+        // We MUST keep setState() as a unified signature because it allows proper checking of the method return type.
+        // See: https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18365#issuecomment-351013257
+        // Also, the ` | S` allows intellisense to not be dumbisense
+        setState<K extends keyof S>(
+            state: ((prevState: Readonly<S>, props: Readonly<P>) => Pick<S, K> | S | null) | (Pick<S, K> | S | null),
+            callback?: () => void,
+        ): void;
+
+        forceUpdate(callback?: () => void): void;
+        render(): ReactNode;
+
+        readonly props: Readonly<P>;
+        state: Readonly<S>;
+        /**
+         * @deprecated
+         *
+         * @see {@link https://legacy.reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs Legacy React Docs}
+         */
+        refs: {
+            [key: string]: ReactInstance;
+        };
+    }
+
+    class PureComponent<P = {}, S = {}, SS = any> extends Component<P, S, SS> {}
+
+    /**
+     * @deprecated Use `ClassicComponent` from `create-react-class`
+     *
+     * @see {@link https://legacy.reactjs.org/docs/react-without-es6.html Legacy React Docs}
+     * @see {@link https://www.npmjs.com/package/create-react-class `create-react-class` on npm}
+     */
+    interface ClassicComponent<P = {}, S = {}> extends Component<P, S> {
+        replaceState(nextState: S, callback?: () => void): void;
+        isMounted(): boolean;
+        getInitialState?(): S;
+    }
+
+    interface ChildContextProvider<CC> {
+        getChildContext(): CC;
+    }
+
+    //
+    // Class Interfaces
+    // ----------------------------------------------------------------------
+
+    /**
+     * Represents the type of a function component. Can optionally
+     * receive a type argument that represents the props the component
+     * receives.
+     *
+     * @template P The props the component accepts.
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/function_components React TypeScript Cheatsheet}
+     * @alias for {@link FunctionComponent}
+     *
+     * @example
+     *
+     * ```tsx
+     * // With props:
+     * type Props = { name: string }
+     *
+     * const MyComponent: FC<Props> = (props) => {
+     *  return <div>{props.name}</div>
+     * }
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Without props:
+     * const MyComponentWithoutProps: FC = () => {
+     *   return <div>MyComponentWithoutProps</div>
+     * }
+     * ```
+     */
+    type FC<P = {}> = FunctionComponent<P>;
+
+    /**
+     * Represents the type of a function component. Can optionally
+     * receive a type argument that represents the props the component
+     * accepts.
+     *
+     * @template P The props the component accepts.
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/function_components React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // With props:
+     * type Props = { name: string }
+     *
+     * const MyComponent: FunctionComponent<Props> = (props) => {
+     *  return <div>{props.name}</div>
+     * }
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * // Without props:
+     * const MyComponentWithoutProps: FunctionComponent = () => {
+     *   return <div>MyComponentWithoutProps</div>
+     * }
+     * ```
+     */
+    interface FunctionComponent<P = {}> {
+        (
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): ReactElement<any, any> | null;
+        /**
+         * Used to declare the types of the props accepted by the
+         * component. These types will be checked during rendering
+         * and in development only.
+         *
+         * We recommend using TypeScript instead of checking prop
+         * types at runtime.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: WeakValidationMap<P> | undefined;
+        /**
+         * @deprecated
+         *
+         * Lets you specify which legacy context is consumed by
+         * this component.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html Legacy React Docs}
+         */
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * Used to define default values for the props accepted by
+         * the component.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         *
+         * @example
+         *
+         * ```tsx
+         * type Props = { name?: string }
+         *
+         * const MyComponent: FC<Props> = (props) => {
+         *   return <div>{props.name}</div>
+         * }
+         *
+         * MyComponent.defaultProps = {
+         *   name: 'John Doe'
+         * }
+         * ```
+         *
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         *
+         * @example
+         *
+         * ```tsx
+         *
+         * const MyComponent: FC = () => {
+         *   return <div>Hello!</div>
+         * }
+         *
+         * MyComponent.displayName = 'MyAwesomeComponent'
+         * ```
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * @deprecated - Equivalent to {@link React.FunctionComponent}.
+     *
+     * @see {@link React.FunctionComponent}
+     * @alias {@link VoidFunctionComponent}
+     */
+    type VFC<P = {}> = VoidFunctionComponent<P>;
+
+    /**
+     * @deprecated - Equivalent to {@link React.FunctionComponent}.
+     *
+     * @see {@link React.FunctionComponent}
+     */
+    interface VoidFunctionComponent<P = {}> {
+        (
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): ReactElement<any, any> | null;
+        propTypes?: WeakValidationMap<P> | undefined;
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        displayName?: string | undefined;
+    }
+
+    /**
+     * The type of the ref received by a {@link ForwardRefRenderFunction}.
+     *
+     * @see {@link ForwardRefRenderFunction}
+     */
+    type ForwardedRef<T> = ((instance: T | null) => void) | MutableRefObject<T | null> | null;
+
+    /**
+     * The type of the function passed to {@link forwardRef}. This is considered different
+     * to a normal {@link FunctionComponent} because it receives an additional argument,
+     *
+     * @param props Props passed to the component, if any.
+     * @param ref A ref forwarded to the component of type {@link ForwardedRef}.
+     *
+     * @template T The type of the forwarded ref.
+     * @template P The type of the props the component accepts.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forward_and_create_ref/ React TypeScript Cheatsheet}
+     * @see {@link forwardRef}
+     */
+    interface ForwardRefRenderFunction<T, P = {}> {
+        (props: P, ref: ForwardedRef<T>): ReactElement | null;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * Will show `ForwardRef(${Component.displayName || Component.name})`
+         * in devtools by default, but can be given its own specific name.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+        /**
+         * defaultProps are not supported on render functions passed to forwardRef.
+         *
+         * @see {@link https://github.com/microsoft/TypeScript/issues/36826 linked GitHub issue} for context
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         */
+        defaultProps?: never | undefined;
+        /**
+         * propTypes are not supported on render functions passed to forwardRef.
+         *
+         * @see {@link https://github.com/microsoft/TypeScript/issues/36826 linked GitHub issue} for context
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: never | undefined;
+    }
+
+    /**
+     * Represents a component class in React.
+     *
+     * @template P The props the component accepts.
+     * @template S The internal state of the component.
+     */
+    interface ComponentClass<P = {}, S = ComponentState> extends StaticLifecycle<P, S> {
+        new(
+            props: P,
+            /**
+             * @deprecated
+             *
+             * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#referencing-context-in-lifecycle-methods React Docs}
+             */
+            deprecatedLegacyContext?: any,
+        ): Component<P, S>;
+        /**
+         * Used to declare the types of the props accepted by the
+         * component. These types will be checked during rendering
+         * and in development only.
+         *
+         * We recommend using TypeScript instead of checking prop
+         * types at runtime.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-proptypes React Docs}
+         */
+        propTypes?: WeakValidationMap<P> | undefined;
+        contextType?: Context<any> | undefined;
+        /**
+         * @deprecated use {@link ComponentClass.contextType} instead
+         *
+         * Lets you specify which legacy context is consumed by
+         * this component.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html Legacy React Docs}
+         */
+        contextTypes?: ValidationMap<any> | undefined;
+        /**
+         * @deprecated
+         *
+         * @see {@link https://legacy.reactjs.org/docs/legacy-context.html#how-to-use-context Legacy React Docs}
+         */
+        childContextTypes?: ValidationMap<any> | undefined;
+        /**
+         * Used to define default values for the props accepted by
+         * the component.
+         *
+         * @see {@link https://react.dev/reference/react/Component#static-defaultprops React Docs}
+         */
+        defaultProps?: Partial<P> | undefined;
+        /**
+         * Used in debugging messages. You might want to set it
+         * explicitly if you want to display a different name for
+         * debugging purposes.
+         *
+         * @see {@link https://legacy.reactjs.org/docs/react-component.html#displayname Legacy React Docs}
+         */
+        displayName?: string | undefined;
+    }
+
+    /**
+     * @deprecated Use `ClassicComponentClass` from `create-react-class`
+     *
+     * @see {@link https://legacy.reactjs.org/docs/react-without-es6.html Legacy React Docs}
+     * @see {@link https://www.npmjs.com/package/create-react-class `create-react-class` on npm}
+     */
+    interface ClassicComponentClass<P = {}> extends ComponentClass<P> {
+        new(props: P, deprecatedLegacyContext?: any): ClassicComponent<P, ComponentState>;
+        getDefaultProps?(): P;
+    }
+
+    /**
+     * Used in {@link createElement} and {@link createFactory} to represent
+     * a class.
+     *
+     * An intersection type is used to infer multiple type parameters from
+     * a single argument, which is useful for many top-level API defs.
+     * See {@link https://github.com/Microsoft/TypeScript/issues/7234 this GitHub issue}
+     * for more info.
+     */
+    type ClassType<P, T extends Component<P, ComponentState>, C extends ComponentClass<P>> =
+        & C
+        & (new(props: P, deprecatedLegacyContext?: any) => T);
+
+    //
+    // Component Specs and Lifecycle
+    // ----------------------------------------------------------------------
+
+    // This should actually be something like `Lifecycle<P, S> | DeprecatedLifecycle<P, S>`,
+    // as React will _not_ call the deprecated lifecycle methods if any of the new lifecycle
+    // methods are present.
+    interface ComponentLifecycle<P, S, SS = any> extends NewLifecycle<P, S, SS>, DeprecatedLifecycle<P, S> {
+        /**
+         * Called immediately after a component is mounted. Setting state here will trigger re-rendering.
+         */
+        componentDidMount?(): void;
+        /**
+         * Called to determine whether the change in props and state should trigger a re-render.
+         *
+         * `Component` always returns true.
+         * `PureComponent` implements a shallow comparison on props and state and returns true if any
+         * props or states have changed.
+         *
+         * If false is returned, {@link Component.render}, `componentWillUpdate`
+         * and `componentDidUpdate` will not be called.
+         */
+        shouldComponentUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): boolean;
+        /**
+         * Called immediately before a component is destroyed. Perform any necessary cleanup in this method, such as
+         * cancelled network requests, or cleaning up any DOM elements created in `componentDidMount`.
+         */
+        componentWillUnmount?(): void;
+        /**
+         * Catches exceptions generated in descendant components. Unhandled exceptions will cause
+         * the entire component tree to unmount.
+         */
+        componentDidCatch?(error: Error, errorInfo: ErrorInfo): void;
+    }
+
+    // Unfortunately, we have no way of declaring that the component constructor must implement this
+    interface StaticLifecycle<P, S> {
+        getDerivedStateFromProps?: GetDerivedStateFromProps<P, S> | undefined;
+        getDerivedStateFromError?: GetDerivedStateFromError<P, S> | undefined;
+    }
+
+    type GetDerivedStateFromProps<P, S> =
+        /**
+         * Returns an update to a component's state based on its new props and old state.
+         *
+         * Note: its presence prevents any of the deprecated lifecycle methods from being invoked
+         */
+        (nextProps: Readonly<P>, prevState: S) => Partial<S> | null;
+
+    type GetDerivedStateFromError<P, S> =
+        /**
+         * This lifecycle is invoked after an error has been thrown by a descendant component.
+         * It receives the error that was thrown as a parameter and should return a value to update state.
+         *
+         * Note: its presence prevents any of the deprecated lifecycle methods from being invoked
+         */
+        (error: any) => Partial<S> | null;
+
+    // This should be "infer SS" but can't use it yet
+    interface NewLifecycle<P, S, SS> {
+        /**
+         * Runs before React applies the result of {@link Component.render render} to the document, and
+         * returns an object to be given to {@link componentDidUpdate}. Useful for saving
+         * things such as scroll position before {@link Component.render render} causes changes to it.
+         *
+         * Note: the presence of this method prevents any of the deprecated
+         * lifecycle events from running.
+         */
+        getSnapshotBeforeUpdate?(prevProps: Readonly<P>, prevState: Readonly<S>): SS | null;
+        /**
+         * Called immediately after updating occurs. Not called for the initial render.
+         *
+         * The snapshot is only present if {@link getSnapshotBeforeUpdate} is present and returns non-null.
+         */
+        componentDidUpdate?(prevProps: Readonly<P>, prevState: Readonly<S>, snapshot?: SS): void;
+    }
+
+    interface DeprecatedLifecycle<P, S> {
+        /**
+         * Called immediately before mounting occurs, and before {@link Component.render}.
+         * Avoid introducing any side-effects or subscriptions in this method.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use {@link ComponentLifecycle.componentDidMount componentDidMount} or the constructor instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillMount?(): void;
+        /**
+         * Called immediately before mounting occurs, and before {@link Component.render}.
+         * Avoid introducing any side-effects or subscriptions in this method.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use {@link ComponentLifecycle.componentDidMount componentDidMount} or the constructor instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillMount?(): void;
+        /**
+         * Called when the component may be receiving new props.
+         * React may call this even if props have not changed, so be sure to compare new and existing
+         * props if you only want to handle changes.
+         *
+         * Calling {@link Component.setState} generally does not trigger this method.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use static {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
+        /**
+         * Called when the component may be receiving new props.
+         * React may call this even if props have not changed, so be sure to compare new and existing
+         * props if you only want to handle changes.
+         *
+         * Calling {@link Component.setState} generally does not trigger this method.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use static {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillReceiveProps?(nextProps: Readonly<P>, nextContext: any): void;
+        /**
+         * Called immediately before rendering when new props or state is received. Not called for the initial render.
+         *
+         * Note: You cannot call {@link Component.setState} here.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use getSnapshotBeforeUpdate instead; will stop working in React 17
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): void;
+        /**
+         * Called immediately before rendering when new props or state is received. Not called for the initial render.
+         *
+         * Note: You cannot call {@link Component.setState} here.
+         *
+         * This method will not stop working in React 17.
+         *
+         * Note: the presence of {@link NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate}
+         * or {@link StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps} prevents
+         * this from being invoked.
+         *
+         * @deprecated 16.3, use getSnapshotBeforeUpdate instead
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update}
+         * @see {@link https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path}
+         */
+        UNSAFE_componentWillUpdate?(nextProps: Readonly<P>, nextState: Readonly<S>, nextContext: any): void;
+    }
+
+    /**
+     * @deprecated
+     *
+     * @see {@link https://legacy.reactjs.org/blog/2016/07/13/mixins-considered-harmful.html Mixins Considered Harmful}
+     */
+    interface Mixin<P, S> extends ComponentLifecycle<P, S> {
+        mixins?: Array<Mixin<P, S>> | undefined;
+        statics?: {
+            [key: string]: any;
+        } | undefined;
+
+        displayName?: string | undefined;
+        propTypes?: ValidationMap<any> | undefined;
+        contextTypes?: ValidationMap<any> | undefined;
+        childContextTypes?: ValidationMap<any> | undefined;
+
+        getDefaultProps?(): P;
+        getInitialState?(): S;
+    }
+
+    /**
+     * @deprecated
+     *
+     * @see {@link https://legacy.reactjs.org/blog/2016/07/13/mixins-considered-harmful.html Mixins Considered Harmful}
+     */
+    interface ComponentSpec<P, S> extends Mixin<P, S> {
+        render(): ReactNode;
+
+        [propertyName: string]: any;
+    }
+
+    function createRef<T>(): RefObject<T>;
+
+    /**
+     * The type of the component returned from {@link forwardRef}.
+     *
+     * @template P The props the component accepts, if any.
+     *
+     * @see {@link ExoticComponent}
+     */
+    interface ForwardRefExoticComponent<P> extends NamedExoticComponent<P> {
+        /**
+         * @deprecated Use {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#default_value|default values for destructuring assignments instead}.
+         */
+        defaultProps?: Partial<P> | undefined;
+        propTypes?: WeakValidationMap<P> | undefined;
+    }
+
+    /**
+     * Lets your component expose a DOM node to a parent component
+     * using a ref.
+     *
+     * @see {@link https://react.dev/reference/react/forwardRef React Docs}
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forward_and_create_ref/ React TypeScript Cheatsheet}
+     *
+     * @param render See the {@link ForwardRefRenderFunction}.
+     *
+     * @template T The type of the DOM node.
+     * @template P The props the component accepts, if any.
+     *
+     * @example
+     *
+     * ```tsx
+     * interface Props {
+     *   children?: ReactNode;
+     *   type: "submit" | "button";
+     * }
+     *
+     * export const FancyButton = forwardRef<HTMLButtonElement, Props>((props, ref) => (
+     *   <button ref={ref} className="MyClassName" type={props.type}>
+     *     {props.children}
+     *   </button>
+     * ));
+     * ```
+     */
+    function forwardRef<T, P = {}>(
+        render: ForwardRefRenderFunction<T, PropsWithoutRef<P>>,
+    ): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;
+
+    /**
+     * Omits the 'ref' attribute from the given props object.
+     *
+     * @template P The props object type.
+     */
+    type PropsWithoutRef<P> =
+        // Omit would not be sufficient for this. We'd like to avoid unnecessary mapping and need a distributive conditional to support unions.
+        // see: https://www.typescriptlang.org/docs/handbook/2/conditional-types.html#distributive-conditional-types
+        // https://github.com/Microsoft/TypeScript/issues/28339
+        P extends any ? ("ref" extends keyof P ? Omit<P, "ref"> : P) : P;
+    /** Ensures that the props do not include string ref, which cannot be forwarded */
+    type PropsWithRef<P> =
+        // Note: String refs can be forwarded. We can't fix this bug without breaking a bunch of libraries now though.
+        // Just "P extends { ref?: infer R }" looks sufficient, but R will infer as {} if P is {}.
+        "ref" extends keyof P
+            ? P extends { ref?: infer R | undefined }
+                ? string extends R ? PropsWithoutRef<P> & { ref?: Exclude<R, string> | undefined }
+                : P
+            : P
+            : P;
+
+    type PropsWithChildren<P = unknown> = P & { children?: ReactNode | undefined };
+
+    /**
+     * Used to retrieve the props a component accepts. Can either be passed a string,
+     * indicating a DOM element (e.g. 'div', 'span', etc.) or the type of a React
+     * component.
+     *
+     * It's usually better to use {@link ComponentPropsWithRef} or {@link ComponentPropsWithoutRef}
+     * instead of this type, as they let you be explicit about whether or not to include
+     * the `ref` prop.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentProps<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentProps = React.ComponentProps<typeof MyComponent>;
+     * ```
+     */
+    type ComponentProps<T extends keyof JSX.IntrinsicElements | JSXElementConstructor<any>> = T extends
+        JSXElementConstructor<infer P> ? P
+        : T extends keyof JSX.IntrinsicElements ? JSX.IntrinsicElements[T]
+        : {};
+
+    /**
+     * Used to retrieve the props a component accepts with its ref. Can either be
+     * passed a string, indicating a DOM element (e.g. 'div', 'span', etc.) or the
+     * type of a React component.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentPropsWithRef<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithRef = React.ComponentPropsWithRef<typeof MyComponent>;
+     * ```
+     */
+    type ComponentPropsWithRef<T extends ElementType> = T extends (new(props: infer P) => Component<any, any>)
+        ? PropsWithoutRef<P> & RefAttributes<InstanceType<T>>
+        : PropsWithRef<ComponentProps<T>>;
+    /**
+     * Used to retrieve the props a custom component accepts with its ref.
+     *
+     * Unlike {@link ComponentPropsWithRef}, this only works with custom
+     * components, i.e. components you define yourself. This is to improve
+     * type-checking performance.
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithRef = React.CustomComponentPropsWithRef<typeof MyComponent>;
+     * ```
+     */
+    type CustomComponentPropsWithRef<T extends ComponentType> = T extends (new(props: infer P) => Component<any, any>)
+        ? (PropsWithoutRef<P> & RefAttributes<InstanceType<T>>)
+        : T extends ((props: infer P, legacyContext?: any) => ReactNode) ? PropsWithRef<P>
+        : never;
+
+    /**
+     * Used to retrieve the props a component accepts without its ref. Can either be
+     * passed a string, indicating a DOM element (e.g. 'div', 'span', etc.) or the
+     * type of a React component.
+     *
+     * @see {@link https://react-typescript-cheatsheet.netlify.app/docs/react-types/componentprops/ React TypeScript Cheatsheet}
+     *
+     * @example
+     *
+     * ```tsx
+     * // Retrieves the props an 'input' element accepts
+     * type InputProps = React.ComponentPropsWithoutRef<'input'>;
+     * ```
+     *
+     * @example
+     *
+     * ```tsx
+     * const MyComponent = (props: { foo: number, bar: string }) => <div />;
+     *
+     * // Retrieves the props 'MyComponent' accepts
+     * type MyComponentPropsWithoutRef = React.ComponentPropsWithoutRef<typeof MyComponent>;
+     * ```
+     */
+    type ComponentPropsWithoutRef<T extends ElementType> = PropsWithoutRef<ComponentProps<T>>;
+
+    type ComponentRef<T extends ElementType> = T extends NamedExoticComponent<
+        ComponentPropsWithoutRef<T> & RefAttributes<infer Method>
+    > ? Method
+        : ComponentPropsWithRef<T> extends RefAttributes<infer Method> ? Method
+        : never;
+
+    // will show `Memo(${Component.displayName || Component.name})` in devtools by default,
+    // but can be given its own specific name
+    type MemoExoticComponent<T extends ComponentType<any>> = NamedExoticComponent<CustomComponentPropsWithRef<T>> & {
+        readonly type: T;
+    };
+
+    /**
+     * Lets you skip re-rendering a component when its props are unchanged.
+     *
+     * @see {@link https://react.dev/reference/react/memo React Docs}
+     *
+     * @param Component The component to memoize.
+     * @param propsAreEqual A function that will be used to determine if the props have changed.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { memo } from 'react';
+     *
+     * const SomeComponent = memo(function SomeComponent(props: { foo: string }) {
+     *   // ...
+     * });
+     * ```
+     */
+    function memo<P extends object>(
+        Component: FunctionComponent<P>,
+        propsAreEqual?: (prevProps: Readonly<P>, nextProps: Readonly<P>) => boolean,
+    ): NamedExoticComponent<P>;
+    function memo<T extends ComponentType<any>>(
+        Component: T,
+        propsAreEqual?: (prevProps: Readonly<ComponentProps<T>>, nextProps: Readonly<ComponentProps<T>>) => boolean,
+    ): MemoExoticComponent<T>;
+
+    interface LazyExoticComponent<T extends ComponentType<any>>
+        extends ExoticComponent<CustomComponentPropsWithRef<T>>
+    {
+        readonly _result: T;
+    }
+
+    /**
+     * Lets you defer loading a component’s code until it is rendered for the first time.
+     *
+     * @see {@link https://react.dev/reference/react/lazy React Docs}
+     *
+     * @param load A function that returns a `Promise` or another thenable (a `Promise`-like object with a
+     * then method). React will not call `load` until the first time you attempt to render the returned
+     * component. After React first calls load, it will wait for it to resolve, and then render the
+     * resolved value’s `.default` as a React component. Both the returned `Promise` and the `Promise`’s
+     * resolved value will be cached, so React will not call load more than once. If the `Promise` rejects,
+     * React will throw the rejection reason for the nearest Error Boundary to handle.
+     *
+     * @example
+     *
+     * ```tsx
+     * import { lazy } from 'react';
+     *
+     * const MarkdownPreview = lazy(() => import('./MarkdownPreview.js'));
+     * ```
+     */
+    function lazy<T extends ComponentType<any>>(
+        load: () => Promise<{ default: T }>,
+    ): LazyExoticComponent<T>;
+
+    //
+    // React Hooks
+    // ----------------------------------------------------------------------
+
+    /**
+     * The instruction passed to a {@link Dispatch} function in {@link useState}
+     * to tell React what the next value of the {@link useState} should be.
+     *
+     * Often found wrapped in {@link Dispatch}.
+     *
+     * @template S The type of the state.
+     *
+     * @example
+     *
+     * ```tsx
+     * // This return type correctly represents the type of
+     * // `setCount` in the example below.
+     * const useCustomState = (): Dispatch<SetStateAction<number>> => {
+     *   const [count, setCount] = useState(0);
+     *
+     *   return setCount;
+     * }
+     * ```
+     */
+    type SetStateAction<S> = S | ((prevState: S) => S);
+
+    /**
+     * A function that can be used to update the state of a {@link useState}
+     * or {@link useReducer} hook.
+     */
+    type Dispatch<A> = (value: A) => void;
+    /**
+     * A {@link Dispatch} function can sometimes be called without any arguments.
+     */
+    type DispatchWithoutAction = () => void;
+    // Unlike redux, the actions _can_ be anything
+    type Reducer<S, A> = (prevState: S, action: A) => S;
+    // If useReducer accepts a reducer without action, dispatch may be called without any parameters.
+    type ReducerWithoutAction<S> = (prevState: S) => S;
+    // types used to try and prevent the compiler from reducing S
+    // to a supertype common with the second argument to useReducer()
+    type ReducerState<R extends Reducer<any, any>> = R extends Reducer<infer S, any> ? S : never;
+    type ReducerAction<R extends Reducer<any, any>> = R extends Reducer<any, infer A> ? A : never;
+    // The identity check is done with the SameValue algorithm (Object.is), which is stricter than ===
+    type ReducerStateWithoutAction<R extends ReducerWithoutAction<any>> = R extends ReducerWithoutAction<infer S> ? S
+        : never;
+    type DependencyList = readonly unknown[];
+
+    // NOTE: callbacks are _only_ allowed to return either void, or a destructor.
+    type EffectCallback = () => void | Destructor;
+
+    interface MutableRefObject<T> {
+        current: T;
+    }
+
+    // This will technically work if you give a Consumer<T> or Provider<T> but it's deprecated and warns
+    /**
+     * Accepts a context object (the value returned from `React.createContext`) and returns the current
+     * context value, as given by the nearest context provider for the given context.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useContext}
+     */
+    function useContext<T>(context: Context<T> /*, (not public API) observedBits?: number|boolean */): T;
+    /**
+     * Returns a stateful value, and a function to update it.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useState}
+     */
+    function useState<S>(initialState: S | (() => S)): [S, Dispatch<SetStateAction<S>>];
+    // convenience overload when first argument is omitted
+    /**
+     * Returns a stateful value, and a function to update it.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useState}
+     */
+    function useState<S = undefined>(): [S | undefined, Dispatch<SetStateAction<S | undefined>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where dispatch could accept 0 arguments.
+    function useReducer<R extends ReducerWithoutAction<any>, I>(
+        reducer: R,
+        initializerArg: I,
+        initializer: (arg: I) => ReducerStateWithoutAction<R>,
+    ): [ReducerStateWithoutAction<R>, DispatchWithoutAction];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where dispatch could accept 0 arguments.
+    function useReducer<R extends ReducerWithoutAction<any>>(
+        reducer: R,
+        initializerArg: ReducerStateWithoutAction<R>,
+        initializer?: undefined,
+    ): [ReducerStateWithoutAction<R>, DispatchWithoutAction];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload where "I" may be a subset of ReducerState<R>; used to provide autocompletion.
+    // If "I" matches ReducerState<R> exactly then the last overload will allow initializer to be omitted.
+    // the last overload effectively behaves as if the identity function (x => x) is the initializer.
+    function useReducer<R extends Reducer<any, any>, I>(
+        reducer: R,
+        initializerArg: I & ReducerState<R>,
+        initializer: (arg: I & ReducerState<R>) => ReducerState<R>,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+    // overload for free "I"; all goes as long as initializer converts it into "ReducerState<R>".
+    function useReducer<R extends Reducer<any, any>, I>(
+        reducer: R,
+        initializerArg: I,
+        initializer: (arg: I) => ReducerState<R>,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * An alternative to `useState`.
+     *
+     * `useReducer` is usually preferable to `useState` when you have complex state logic that involves
+     * multiple sub-values. It also lets you optimize performance for components that trigger deep
+     * updates because you can pass `dispatch` down instead of callbacks.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useReducer}
+     */
+
+    // I'm not sure if I keep this 2-ary or if I make it (2,3)-ary; it's currently (2,3)-ary.
+    // The Flow types do have an overload for 3-ary invocation with undefined initializer.
+
+    // NOTE: without the ReducerState indirection, TypeScript would reduce S to be the most common
+    // supertype between the reducer's return type and the initialState (or the initializer's return type),
+    // which would prevent autocompletion from ever working.
+
+    // TODO: double-check if this weird overload logic is necessary. It is possible it's either a bug
+    // in older versions, or a regression in newer versions of the typescript completion service.
+    function useReducer<R extends Reducer<any, any>>(
+        reducer: R,
+        initialState: ReducerState<R>,
+        initializer?: undefined,
+    ): [ReducerState<R>, Dispatch<ReducerAction<R>>];
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T>(initialValue: T): MutableRefObject<T>;
+    // convenience overload for refs given as a ref prop as they typically start with a null value
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * Usage note: if you need the result of useRef to be directly mutable, include `| null` in the type
+     * of the generic argument.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T>(initialValue: T | null): RefObject<T>;
+    // convenience overload for potentially undefined initialValue / call with 0 arguments
+    // has a default to stop it from defaulting to {} instead
+    /**
+     * `useRef` returns a mutable ref object whose `.current` property is initialized to the passed argument
+     * (`initialValue`). The returned object will persist for the full lifetime of the component.
+     *
+     * Note that `useRef()` is useful for more than the `ref` attribute. It’s handy for keeping any mutable
+     * value around similar to how you’d use instance fields in classes.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useRef}
+     */
+    function useRef<T = undefined>(): MutableRefObject<T | undefined>;
+    /**
+     * The signature is identical to `useEffect`, but it fires synchronously after all DOM mutations.
+     * Use this to read layout from the DOM and synchronously re-render. Updates scheduled inside
+     * `useLayoutEffect` will be flushed synchronously, before the browser has a chance to paint.
+     *
+     * Prefer the standard `useEffect` when possible to avoid blocking visual updates.
+     *
+     * If you’re migrating code from a class component, `useLayoutEffect` fires in the same phase as
+     * `componentDidMount` and `componentDidUpdate`.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useLayoutEffect}
+     */
+    function useLayoutEffect(effect: EffectCallback, deps?: DependencyList): void;
+    /**
+     * Accepts a function that contains imperative, possibly effectful code.
+     *
+     * @param effect Imperative function that can return a cleanup function
+     * @param deps If present, effect will only activate if the values in the list change.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useEffect}
+     */
+    function useEffect(effect: EffectCallback, deps?: DependencyList): void;
+    // NOTE: this does not accept strings, but this will have to be fixed by removing strings from type Ref<T>
+    /**
+     * `useImperativeHandle` customizes the instance value that is exposed to parent components when using
+     * `ref`. As always, imperative code using refs should be avoided in most cases.
+     *
+     * `useImperativeHandle` should be used with `React.forwardRef`.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useImperativeHandle}
+     */
+    function useImperativeHandle<T, R extends T>(ref: Ref<T> | undefined, init: () => R, deps?: DependencyList): void;
+    // I made 'inputs' required here and in useMemo as there's no point to memoizing without the memoization key
+    // useCallback(X) is identical to just using X, useMemo(() => Y) is identical to just using Y.
+    /**
+     * `useCallback` will return a memoized version of the callback that only changes if one of the `inputs`
+     * has changed.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useCallback}
+     */
+    // A specific function type would not trigger implicit any.
+    // See https://github.com/DefinitelyTyped/DefinitelyTyped/issues/52873#issuecomment-845806435 for a comparison between `Function` and more specific types.
+    // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
+    function useCallback<T extends Function>(callback: T, deps: DependencyList): T;
+    /**
+     * `useMemo` will only recompute the memoized value when one of the `deps` has changed.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useMemo}
+     */
+    // allow undefined, but don't make it optional as that is very likely a mistake
+    function useMemo<T>(factory: () => T, deps: DependencyList): T;
+    /**
+     * `useDebugValue` can be used to display a label for custom hooks in React DevTools.
+     *
+     * NOTE: We don’t recommend adding debug values to every custom hook.
+     * It’s most valuable for custom hooks that are part of shared libraries.
+     *
+     * @version 16.8.0
+     * @see {@link https://react.dev/reference/react/useDebugValue}
+     */
+    // the name of the custom hook is itself derived from the function name at runtime:
+    // it's just the function name without the "use" prefix.
+    function useDebugValue<T>(value: T, format?: (value: T) => any): void;
+
+    // must be synchronous
+    export type TransitionFunction = () => VoidOrUndefinedOnly;
+    // strange definition to allow vscode to show documentation on the invocation
+    export interface TransitionStartFunction {
+        /**
+         * State updates caused inside the callback are allowed to be deferred.
+         *
+         * **If some state update causes a component to suspend, that state update should be wrapped in a transition.**
+         *
+         * @param callback A _synchronous_ function which causes state updates that can be deferred.
+         */
+        (callback: TransitionFunction): void;
+    }
+
+    /**
+     * Returns a deferred version of the value that may “lag behind” it.
+     *
+     * This is commonly used to keep the interface responsive when you have something that renders immediately
+     * based on user input and something that needs to wait for a data fetch.
+     *
+     * A good example of this is a text input.
+     *
+     * @param value The value that is going to be deferred
+     *
+     * @see {@link https://react.dev/reference/react/useDeferredValue}
+     */
+    export function useDeferredValue<T>(value: T): T;
+
+    /**
+     * Allows components to avoid undesirable loading states by waiting for content to load
+     * before transitioning to the next screen. It also allows components to defer slower,
+     * data fetching updates until subsequent renders so that more crucial updates can be
+     * rendered immediately.
+     *
+     * The `useTransition` hook returns two values in an array.
+     *
+     * The first is a boolean, React’s way of informing us whether we’re waiting for the transition to finish.
+     * The second is a function that takes a callback. We can use it to tell React which state we want to defer.
+     *
+     * **If some state update causes a component to suspend, that state update should be wrapped in a transition.**
+     *
+     * @see {@link https://react.dev/reference/react/useTransition}
+     */
+    export function useTransition(): [boolean, TransitionStartFunction];
+
+    /**
+     * Similar to `useTransition` but allows uses where hooks are not available.
+     *
+     * @param callback A _synchronous_ function which causes state updates that can be deferred.
+     */
+    export function startTransition(scope: TransitionFunction): void;
+
+    /**
+     * Wrap any code rendering and triggering updates to your components into `act()` calls.
+     *
+     * Ensures that the behavior in your tests matches what happens in the browser
+     * more closely by executing pending `useEffect`s before returning. This also
+     * reduces the amount of re-renders done.
+     *
+     * @param callback A synchronous, void callback that will execute as a single, complete React commit.
+     *
+     * @see https://reactjs.org/blog/2019/02/06/react-v16.8.0.html#testing-hooks
+     */
+    // While act does always return Thenable, if a void function is passed, we pretend the return value is also void to not trigger dangling Promise lint rules.
+    export function act(callback: () => VoidOrUndefinedOnly): void;
+    export function act<T>(callback: () => T | Promise<T>): Promise<T>;
+
+    export function useId(): string;
+
+    /**
+     * @param effect Imperative function that can return a cleanup function
+     * @param deps If present, effect will only activate if the values in the list change.
+     *
+     * @see {@link https://github.com/facebook/react/pull/21913}
+     */
+    export function useInsertionEffect(effect: EffectCallback, deps?: DependencyList): void;
+
+    /**
+     * @param subscribe
+     * @param getSnapshot
+     *
+     * @see {@link https://github.com/reactwg/react-18/discussions/86}
+     */
+    // keep in sync with `useSyncExternalStore` from `use-sync-external-store`
+    export function useSyncExternalStore<Snapshot>(
+        subscribe: (onStoreChange: () => void) => () => void,
+        getSnapshot: () => Snapshot,
+        getServerSnapshot?: () => Snapshot,
+    ): Snapshot;
+
+    //
+    // Event System
+    // ----------------------------------------------------------------------
+    // TODO: change any to unknown when moving to TS v3
+    interface BaseSyntheticEvent<E = object, C = any, T = any> {
+        nativeEvent: E;
+        currentTarget: C;
+        target: T;
+        bubbles: boolean;
+        cancelable: boolean;
+        defaultPrevented: boolean;
+        eventPhase: number;
+        isTrusted: boolean;
+        preventDefault(): void;
+        isDefaultPrevented(): boolean;
+        stopPropagation(): void;
+        isPropagationStopped(): boolean;
+        persist(): void;
+        timeStamp: number;
+        type: string;
+    }
+
+    /**
+     * currentTarget - a reference to the element on which the event listener is registered.
+     *
+     * target - a reference to the element from which the event was originally dispatched.
+     * This might be a child element to the element on which the event listener is registered.
+     * If you thought this should be `EventTarget & T`, see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11508#issuecomment-256045682
+     */
+    interface SyntheticEvent<T = Element, E = Event> extends BaseSyntheticEvent<E, EventTarget & T, EventTarget> {}
+
+    interface ClipboardEvent<T = Element> extends SyntheticEvent<T, NativeClipboardEvent> {
+        clipboardData: DataTransfer;
+    }
+
+    interface CompositionEvent<T = Element> extends SyntheticEvent<T, NativeCompositionEvent> {
+        data: string;
+    }
+
+    interface DragEvent<T = Element> extends MouseEvent<T, NativeDragEvent> {
+        dataTransfer: DataTransfer;
+    }
+
+    interface PointerEvent<T = Element> extends MouseEvent<T, NativePointerEvent> {
+        pointerId: number;
+        pressure: number;
+        tangentialPressure: number;
+        tiltX: number;
+        tiltY: number;
+        twist: number;
+        width: number;
+        height: number;
+        pointerType: "mouse" | "pen" | "touch";
+        isPrimary: boolean;
+    }
+
+    interface FocusEvent<Target = Element, RelatedTarget = Element> extends SyntheticEvent<Target, NativeFocusEvent> {
+        relatedTarget: (EventTarget & RelatedTarget) | null;
+        target: EventTarget & Target;
+    }
+
+    interface FormEvent<T = Element> extends SyntheticEvent<T> {
+    }
+
+    interface InvalidEvent<T = Element> extends SyntheticEvent<T> {
+        target: EventTarget & T;
+    }
+
+    interface ChangeEvent<T = Element> extends SyntheticEvent<T> {
+        target: EventTarget & T;
+    }
+
+    export type ModifierKey =
+        | "Alt"
+        | "AltGraph"
+        | "CapsLock"
+        | "Control"
+        | "Fn"
+        | "FnLock"
+        | "Hyper"
+        | "Meta"
+        | "NumLock"
+        | "ScrollLock"
+        | "Shift"
+        | "Super"
+        | "Symbol"
+        | "SymbolLock";
+
+    interface KeyboardEvent<T = Element> extends UIEvent<T, NativeKeyboardEvent> {
+        altKey: boolean;
+        /** @deprecated */
+        charCode: number;
+        ctrlKey: boolean;
+        code: string;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        /**
+         * See the [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#named-key-attribute-values). for possible values
+         */
+        key: string;
+        /** @deprecated */
+        keyCode: number;
+        locale: string;
+        location: number;
+        metaKey: boolean;
+        repeat: boolean;
+        shiftKey: boolean;
+        /** @deprecated */
+        which: number;
+    }
+
+    interface MouseEvent<T = Element, E = NativeMouseEvent> extends UIEvent<T, E> {
+        altKey: boolean;
+        button: number;
+        buttons: number;
+        clientX: number;
+        clientY: number;
+        ctrlKey: boolean;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        metaKey: boolean;
+        movementX: number;
+        movementY: number;
+        pageX: number;
+        pageY: number;
+        relatedTarget: EventTarget | null;
+        screenX: number;
+        screenY: number;
+        shiftKey: boolean;
+    }
+
+    interface TouchEvent<T = Element> extends UIEvent<T, NativeTouchEvent> {
+        altKey: boolean;
+        changedTouches: TouchList;
+        ctrlKey: boolean;
+        /**
+         * See [DOM Level 3 Events spec](https://www.w3.org/TR/uievents-key/#keys-modifier). for a list of valid (case-sensitive) arguments to this method.
+         */
+        getModifierState(key: ModifierKey): boolean;
+        metaKey: boolean;
+        shiftKey: boolean;
+        targetTouches: TouchList;
+        touches: TouchList;
+    }
+
+    interface UIEvent<T = Element, E = NativeUIEvent> extends SyntheticEvent<T, E> {
+        detail: number;
+        view: AbstractView;
+    }
+
+    interface WheelEvent<T = Element> extends MouseEvent<T, NativeWheelEvent> {
+        deltaMode: number;
+        deltaX: number;
+        deltaY: number;
+        deltaZ: number;
+    }
+
+    interface AnimationEvent<T = Element> extends SyntheticEvent<T, NativeAnimationEvent> {
+        animationName: string;
+        elapsedTime: number;
+        pseudoElement: string;
+    }
+
+    interface TransitionEvent<T = Element> extends SyntheticEvent<T, NativeTransitionEvent> {
+        elapsedTime: number;
+        propertyName: string;
+        pseudoElement: string;
+    }
+
+    //
+    // Event Handler Types
+    // ----------------------------------------------------------------------
+
+    type EventHandler<E extends SyntheticEvent<any>> = { bivarianceHack(event: E): void }["bivarianceHack"];
+
+    type ReactEventHandler<T = Element> = EventHandler<SyntheticEvent<T>>;
+
+    type ClipboardEventHandler<T = Element> = EventHandler<ClipboardEvent<T>>;
+    type CompositionEventHandler<T = Element> = EventHandler<CompositionEvent<T>>;
+    type DragEventHandler<T = Element> = EventHandler<DragEvent<T>>;
+    type FocusEventHandler<T = Element> = EventHandler<FocusEvent<T>>;
+    type FormEventHandler<T = Element> = EventHandler<FormEvent<T>>;
+    type ChangeEventHandler<T = Element> = EventHandler<ChangeEvent<T>>;
+    type KeyboardEventHandler<T = Element> = EventHandler<KeyboardEvent<T>>;
+    type MouseEventHandler<T = Element> = EventHandler<MouseEvent<T>>;
+    type TouchEventHandler<T = Element> = EventHandler<TouchEvent<T>>;
+    type PointerEventHandler<T = Element> = EventHandler<PointerEvent<T>>;
+    type UIEventHandler<T = Element> = EventHandler<UIEvent<T>>;
+    type WheelEventHandler<T = Element> = EventHandler<WheelEvent<T>>;
+    type AnimationEventHandler<T = Element> = EventHandler<AnimationEvent<T>>;
+    type TransitionEventHandler<T = Element> = EventHandler<TransitionEvent<T>>;
+
+    //
+    // Props / DOM Attributes
+    // ----------------------------------------------------------------------
+
+    interface HTMLProps<T> extends AllHTMLAttributes<T>, ClassAttributes<T> {
+    }
+
+    type DetailedHTMLProps<E extends HTMLAttributes<T>, T> = ClassAttributes<T> & E;
+
+    interface SVGProps<T> extends SVGAttributes<T>, ClassAttributes<T> {
+    }
+
+    interface SVGLineElementAttributes<T> extends SVGProps<T> {}
+    interface SVGTextElementAttributes<T> extends SVGProps<T> {}
+
+    interface DOMAttributes<T> {
+        children?: ReactNode | undefined;
+        dangerouslySetInnerHTML?: {
+            // Should be InnerHTML['innerHTML'].
+            // But unfortunately we're mixing renderer-specific type declarations.
+            __html: string | TrustedHTML;
+        } | undefined;
+
+        // Clipboard Events
+        onCopy?: ClipboardEventHandler<T> | undefined;
+        onCopyCapture?: ClipboardEventHandler<T> | undefined;
+        onCut?: ClipboardEventHandler<T> | undefined;
+        onCutCapture?: ClipboardEventHandler<T> | undefined;
+        onPaste?: ClipboardEventHandler<T> | undefined;
+        onPasteCapture?: ClipboardEventHandler<T> | undefined;
+
+        // Composition Events
+        onCompositionEnd?: CompositionEventHandler<T> | undefined;
+        onCompositionEndCapture?: CompositionEventHandler<T> | undefined;
+        onCompositionStart?: CompositionEventHandler<T> | undefined;
+        onCompositionStartCapture?: CompositionEventHandler<T> | undefined;
+        onCompositionUpdate?: CompositionEventHandler<T> | undefined;
+        onCompositionUpdateCapture?: CompositionEventHandler<T> | undefined;
+
+        // Focus Events
+        onFocus?: FocusEventHandler<T> | undefined;
+        onFocusCapture?: FocusEventHandler<T> | undefined;
+        onBlur?: FocusEventHandler<T> | undefined;
+        onBlurCapture?: FocusEventHandler<T> | undefined;
+
+        // Form Events
+        onChange?: FormEventHandler<T> | undefined;
+        onChangeCapture?: FormEventHandler<T> | undefined;
+        onBeforeInput?: FormEventHandler<T> | undefined;
+        onBeforeInputCapture?: FormEventHandler<T> | undefined;
+        onInput?: FormEventHandler<T> | undefined;
+        onInputCapture?: FormEventHandler<T> | undefined;
+        onReset?: FormEventHandler<T> | undefined;
+        onResetCapture?: FormEventHandler<T> | undefined;
+        onSubmit?: FormEventHandler<T> | undefined;
+        onSubmitCapture?: FormEventHandler<T> | undefined;
+        onInvalid?: FormEventHandler<T> | undefined;
+        onInvalidCapture?: FormEventHandler<T> | undefined;
+
+        // Image Events
+        onLoad?: ReactEventHandler<T> | undefined;
+        onLoadCapture?: ReactEventHandler<T> | undefined;
+        onError?: ReactEventHandler<T> | undefined; // also a Media Event
+        onErrorCapture?: ReactEventHandler<T> | undefined; // also a Media Event
+
+        // Keyboard Events
+        onKeyDown?: KeyboardEventHandler<T> | undefined;
+        onKeyDownCapture?: KeyboardEventHandler<T> | undefined;
+        /** @deprecated Use `onKeyUp` or `onKeyDown` instead */
+        onKeyPress?: KeyboardEventHandler<T> | undefined;
+        /** @deprecated Use `onKeyUpCapture` or `onKeyDownCapture` instead */
+        onKeyPressCapture?: KeyboardEventHandler<T> | undefined;
+        onKeyUp?: KeyboardEventHandler<T> | undefined;
+        onKeyUpCapture?: KeyboardEventHandler<T> | undefined;
+
+        // Media Events
+        onAbort?: ReactEventHandler<T> | undefined;
+        onAbortCapture?: ReactEventHandler<T> | undefined;
+        onCanPlay?: ReactEventHandler<T> | undefined;
+        onCanPlayCapture?: ReactEventHandler<T> | undefined;
+        onCanPlayThrough?: ReactEventHandler<T> | undefined;
+        onCanPlayThroughCapture?: ReactEventHandler<T> | undefined;
+        onDurationChange?: ReactEventHandler<T> | undefined;
+        onDurationChangeCapture?: ReactEventHandler<T> | undefined;
+        onEmptied?: ReactEventHandler<T> | undefined;
+        onEmptiedCapture?: ReactEventHandler<T> | undefined;
+        onEncrypted?: ReactEventHandler<T> | undefined;
+        onEncryptedCapture?: ReactEventHandler<T> | undefined;
+        onEnded?: ReactEventHandler<T> | undefined;
+        onEndedCapture?: ReactEventHandler<T> | undefined;
+        onLoadedData?: ReactEventHandler<T> | undefined;
+        onLoadedDataCapture?: ReactEventHandler<T> | undefined;
+        onLoadedMetadata?: ReactEventHandler<T> | undefined;
+        onLoadedMetadataCapture?: ReactEventHandler<T> | undefined;
+        onLoadStart?: ReactEventHandler<T> | undefined;
+        onLoadStartCapture?: ReactEventHandler<T> | undefined;
+        onPause?: ReactEventHandler<T> | undefined;
+        onPauseCapture?: ReactEventHandler<T> | undefined;
+        onPlay?: ReactEventHandler<T> | undefined;
+        onPlayCapture?: ReactEventHandler<T> | undefined;
+        onPlaying?: ReactEventHandler<T> | undefined;
+        onPlayingCapture?: ReactEventHandler<T> | undefined;
+        onProgress?: ReactEventHandler<T> | undefined;
+        onProgressCapture?: ReactEventHandler<T> | undefined;
+        onRateChange?: ReactEventHandler<T> | undefined;
+        onRateChangeCapture?: ReactEventHandler<T> | undefined;
+        onResize?: ReactEventHandler<T> | undefined;
+        onResizeCapture?: ReactEventHandler<T> | undefined;
+        onSeeked?: ReactEventHandler<T> | undefined;
+        onSeekedCapture?: ReactEventHandler<T> | undefined;
+        onSeeking?: ReactEventHandler<T> | undefined;
+        onSeekingCapture?: ReactEventHandler<T> | undefined;
+        onStalled?: ReactEventHandler<T> | undefined;
+        onStalledCapture?: ReactEventHandler<T> | undefined;
+        onSuspend?: ReactEventHandler<T> | undefined;
+        onSuspendCapture?: ReactEventHandler<T> | undefined;
+        onTimeUpdate?: ReactEventHandler<T> | undefined;
+        onTimeUpdateCapture?: ReactEventHandler<T> | undefined;
+        onVolumeChange?: ReactEventHandler<T> | undefined;
+        onVolumeChangeCapture?: ReactEventHandler<T> | undefined;
+        onWaiting?: ReactEventHandler<T> | undefined;
+        onWaitingCapture?: ReactEventHandler<T> | undefined;
+
+        // MouseEvents
+        onAuxClick?: MouseEventHandler<T> | undefined;
+        onAuxClickCapture?: MouseEventHandler<T> | undefined;
+        onClick?: MouseEventHandler<T> | undefined;
+        onClickCapture?: MouseEventHandler<T> | undefined;
+        onContextMenu?: MouseEventHandler<T> | undefined;
+        onContextMenuCapture?: MouseEventHandler<T> | undefined;
+        onDoubleClick?: MouseEventHandler<T> | undefined;
+        onDoubleClickCapture?: MouseEventHandler<T> | undefined;
+        onDrag?: DragEventHandler<T> | undefined;
+        onDragCapture?: DragEventHandler<T> | undefined;
+        onDragEnd?: DragEventHandler<T> | undefined;
+        onDragEndCapture?: DragEventHandler<T> | undefined;
+        onDragEnter?: DragEventHandler<T> | undefined;
+        onDragEnterCapture?: DragEventHandler<T> | undefined;
+        onDragExit?: DragEventHandler<T> | undefined;
+        onDragExitCapture?: DragEventHandler<T> | undefined;
+        onDragLeave?: DragEventHandler<T> | undefined;
+        onDragLeaveCapture?: DragEventHandler<T> | undefined;
+        onDragOver?: DragEventHandler<T> | undefined;
+        onDragOverCapture?: DragEventHandler<T> | undefined;
+        onDragStart?: DragEventHandler<T> | undefined;
+        onDragStartCapture?: DragEventHandler<T> | undefined;
+        onDrop?: DragEventHandler<T> | undefined;
+        onDropCapture?: DragEventHandler<T> | undefined;
+        onMouseDown?: MouseEventHandler<T> | undefined;
+        onMouseDownCapture?: MouseEventHandler<T> | undefined;
+        onMouseEnter?: MouseEventHandler<T> | undefined;
+        onMouseLeave?: MouseEventHandler<T> | undefined;
+        onMouseMove?: MouseEventHandler<T> | undefined;
+        onMouseMoveCapture?: MouseEventHandler<T> | undefined;
+        onMouseOut?: MouseEventHandler<T> | undefined;
+        onMouseOutCapture?: MouseEventHandler<T> | undefined;
+        onMouseOver?: MouseEventHandler<T> | undefined;
+        onMouseOverCapture?: MouseEventHandler<T> | undefined;
+        onMouseUp?: MouseEventHandler<T> | undefined;
+        onMouseUpCapture?: MouseEventHandler<T> | undefined;
+
+        // Selection Events
+        onSelect?: ReactEventHandler<T> | undefined;
+        onSelectCapture?: ReactEventHandler<T> | undefined;
+
+        // Touch Events
+        onTouchCancel?: TouchEventHandler<T> | undefined;
+        onTouchCancelCapture?: TouchEventHandler<T> | undefined;
+        onTouchEnd?: TouchEventHandler<T> | undefined;
+        onTouchEndCapture?: TouchEventHandler<T> | undefined;
+        onTouchMove?: TouchEventHandler<T> | undefined;
+        onTouchMoveCapture?: TouchEventHandler<T> | undefined;
+        onTouchStart?: TouchEventHandler<T> | undefined;
+        onTouchStartCapture?: TouchEventHandler<T> | undefined;
+
+        // Pointer Events
+        onPointerDown?: PointerEventHandler<T> | undefined;
+        onPointerDownCapture?: PointerEventHandler<T> | undefined;
+        onPointerMove?: PointerEventHandler<T> | undefined;
+        onPointerMoveCapture?: PointerEventHandler<T> | undefined;
+        onPointerUp?: PointerEventHandler<T> | undefined;
+        onPointerUpCapture?: PointerEventHandler<T> | undefined;
+        onPointerCancel?: PointerEventHandler<T> | undefined;
+        onPointerCancelCapture?: PointerEventHandler<T> | undefined;
+        onPointerEnter?: PointerEventHandler<T> | undefined;
+        onPointerLeave?: PointerEventHandler<T> | undefined;
+        onPointerOver?: PointerEventHandler<T> | undefined;
+        onPointerOverCapture?: PointerEventHandler<T> | undefined;
+        onPointerOut?: PointerEventHandler<T> | undefined;
+        onPointerOutCapture?: PointerEventHandler<T> | undefined;
+        onGotPointerCapture?: PointerEventHandler<T> | undefined;
+        onGotPointerCaptureCapture?: PointerEventHandler<T> | undefined;
+        onLostPointerCapture?: PointerEventHandler<T> | undefined;
+        onLostPointerCaptureCapture?: PointerEventHandler<T> | undefined;
+
+        // UI Events
+        onScroll?: UIEventHandler<T> | undefined;
+        onScrollCapture?: UIEventHandler<T> | undefined;
+
+        // Wheel Events
+        onWheel?: WheelEventHandler<T> | undefined;
+        onWheelCapture?: WheelEventHandler<T> | undefined;
+
+        // Animation Events
+        onAnimationStart?: AnimationEventHandler<T> | undefined;
+        onAnimationStartCapture?: AnimationEventHandler<T> | undefined;
+        onAnimationEnd?: AnimationEventHandler<T> | undefined;
+        onAnimationEndCapture?: AnimationEventHandler<T> | undefined;
+        onAnimationIteration?: AnimationEventHandler<T> | undefined;
+        onAnimationIterationCapture?: AnimationEventHandler<T> | undefined;
+
+        // Transition Events
+        onTransitionEnd?: TransitionEventHandler<T> | undefined;
+        onTransitionEndCapture?: TransitionEventHandler<T> | undefined;
+    }
+
+    export interface CSSProperties extends CSS.Properties<string | number> {
+        /**
+         * The index signature was removed to enable closed typing for style
+         * using CSSType. You're able to use type assertion or module augmentation
+         * to add properties or an index signature of your own.
+         *
+         * For examples and more information, visit:
+         * https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors
+         */
+    }
+
+    // All the WAI-ARIA 1.1 attributes from https://www.w3.org/TR/wai-aria-1.1/
+    interface AriaAttributes {
+        /** Identifies the currently active element when DOM focus is on a composite widget, textbox, group, or application. */
+        "aria-activedescendant"?: string | undefined;
+        /** Indicates whether assistive technologies will present all, or only parts of, the changed region based on the change notifications defined by the aria-relevant attribute. */
+        "aria-atomic"?: Booleanish | undefined;
+        /**
+         * Indicates whether inputting text could trigger display of one or more predictions of the user's intended value for an input and specifies how predictions would be
+         * presented if they are made.
+         */
+        "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
+        /** Indicates an element is being modified and that assistive technologies MAY want to wait until the modifications are complete before exposing them to the user. */
+        /**
+         * Defines a string value that labels the current element, which is intended to be converted into Braille.
+         * @see aria-label.
+         */
+        "aria-braillelabel"?: string | undefined;
+        /**
+         * Defines a human-readable, author-localized abbreviated description for the role of an element, which is intended to be converted into Braille.
+         * @see aria-roledescription.
+         */
+        "aria-brailleroledescription"?: string | undefined;
+        "aria-busy"?: Booleanish | undefined;
+        /**
+         * Indicates the current "checked" state of checkboxes, radio buttons, and other widgets.
+         * @see aria-pressed @see aria-selected.
+         */
+        "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
+        /**
+         * Defines the total number of columns in a table, grid, or treegrid.
+         * @see aria-colindex.
+         */
+        "aria-colcount"?: number | undefined;
+        /**
+         * Defines an element's column index or position with respect to the total number of columns within a table, grid, or treegrid.
+         * @see aria-colcount @see aria-colspan.
+         */
+        "aria-colindex"?: number | undefined;
+        /**
+         * Defines a human readable text alternative of aria-colindex.
+         * @see aria-rowindextext.
+         */
+        "aria-colindextext"?: string | undefined;
+        /**
+         * Defines the number of columns spanned by a cell or gridcell within a table, grid, or treegrid.
+         * @see aria-colindex @see aria-rowspan.
+         */
+        "aria-colspan"?: number | undefined;
+        /**
+         * Identifies the element (or elements) whose contents or presence are controlled by the current element.
+         * @see aria-owns.
+         */
+        "aria-controls"?: string | undefined;
+        /** Indicates the element that represents the current item within a container or set of related elements. */
+        "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
+        /**
+         * Identifies the element (or elements) that describes the object.
+         * @see aria-labelledby
+         */
+        "aria-describedby"?: string | undefined;
+        /**
+         * Defines a string value that describes or annotates the current element.
+         * @see related aria-describedby.
+         */
+        "aria-description"?: string | undefined;
+        /**
+         * Identifies the element that provides a detailed, extended description for the object.
+         * @see aria-describedby.
+         */
+        "aria-details"?: string | undefined;
+        /**
+         * Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.
+         * @see aria-hidden @see aria-readonly.
+         */
+        "aria-disabled"?: Booleanish | undefined;
+        /**
+         * Indicates what functions can be performed when a dragged object is released on the drop target.
+         * @deprecated in ARIA 1.1
+         */
+        "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
+        /**
+         * Identifies the element that provides an error message for the object.
+         * @see aria-invalid @see aria-describedby.
+         */
+        "aria-errormessage"?: string | undefined;
+        /** Indicates whether the element, or another grouping element it controls, is currently expanded or collapsed. */
+        "aria-expanded"?: Booleanish | undefined;
+        /**
+         * Identifies the next element (or elements) in an alternate reading order of content which, at the user's discretion,
+         * allows assistive technology to override the general default of reading in document source order.
+         */
+        "aria-flowto"?: string | undefined;
+        /**
+         * Indicates an element's "grabbed" state in a drag-and-drop operation.
+         * @deprecated in ARIA 1.1
+         */
+        "aria-grabbed"?: Booleanish | undefined;
+        /** Indicates the availability and type of interactive popup element, such as menu or dialog, that can be triggered by an element. */
+        "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
+        /**
+         * Indicates whether the element is exposed to an accessibility API.
+         * @see aria-disabled.
+         */
+        "aria-hidden"?: Booleanish | undefined;
+        /**
+         * Indicates the entered value does not conform to the format expected by the application.
+         * @see aria-errormessage.
+         */
+        "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
+        /** Indicates keyboard shortcuts that an author has implemented to activate or give focus to an element. */
+        "aria-keyshortcuts"?: string | undefined;
+        /**
+         * Defines a string value that labels the current element.
+         * @see aria-labelledby.
+         */
+        "aria-label"?: string | undefined;
+        /**
+         * Identifies the element (or elements) that labels the current element.
+         * @see aria-describedby.
+         */
+        "aria-labelledby"?: string | undefined;
+        /** Defines the hierarchical level of an element within a structure. */
+        "aria-level"?: number | undefined;
+        /** Indicates that an element will be updated, and describes the types of updates the user agents, assistive technologies, and user can expect from the live region. */
+        "aria-live"?: "off" | "assertive" | "polite" | undefined;
+        /** Indicates whether an element is modal when displayed. */
+        "aria-modal"?: Booleanish | undefined;
+        /** Indicates whether a text box accepts multiple lines of input or only a single line. */
+        "aria-multiline"?: Booleanish | undefined;
+        /** Indicates that the user may select more than one item from the current selectable descendants. */
+        "aria-multiselectable"?: Booleanish | undefined;
+        /** Indicates whether the element's orientation is horizontal, vertical, or unknown/ambiguous. */
+        "aria-orientation"?: "horizontal" | "vertical" | undefined;
+        /**
+         * Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship
+         * between DOM elements where the DOM hierarchy cannot be used to represent the relationship.
+         * @see aria-controls.
+         */
+        "aria-owns"?: string | undefined;
+        /**
+         * Defines a short hint (a word or short phrase) intended to aid the user with data entry when the control has no value.
+         * A hint could be a sample value or a brief description of the expected format.
+         */
+        "aria-placeholder"?: string | undefined;
+        /**
+         * Defines an element's number or position in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.
+         * @see aria-setsize.
+         */
+        "aria-posinset"?: number | undefined;
+        /**
+         * Indicates the current "pressed" state of toggle buttons.
+         * @see aria-checked @see aria-selected.
+         */
+        "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
+        /**
+         * Indicates that the element is not editable, but is otherwise operable.
+         * @see aria-disabled.
+         */
+        "aria-readonly"?: Booleanish | undefined;
+        /**
+         * Indicates what notifications the user agent will trigger when the accessibility tree within a live region is modified.
+         * @see aria-atomic.
+         */
+        "aria-relevant"?:
+            | "additions"
+            | "additions removals"
+            | "additions text"
+            | "all"
+            | "removals"
+            | "removals additions"
+            | "removals text"
+            | "text"
+            | "text additions"
+            | "text removals"
+            | undefined;
+        /** Indicates that user input is required on the element before a form may be submitted. */
+        "aria-required"?: Booleanish | undefined;
+        /** Defines a human-readable, author-localized description for the role of an element. */
+        "aria-roledescription"?: string | undefined;
+        /**
+         * Defines the total number of rows in a table, grid, or treegrid.
+         * @see aria-rowindex.
+         */
+        "aria-rowcount"?: number | undefined;
+        /**
+         * Defines an element's row index or position with respect to the total number of rows within a table, grid, or treegrid.
+         * @see aria-rowcount @see aria-rowspan.
+         */
+        "aria-rowindex"?: number | undefined;
+        /**
+         * Defines a human readable text alternative of aria-rowindex.
+         * @see aria-colindextext.
+         */
+        "aria-rowindextext"?: string | undefined;
+        /**
+         * Defines the number of rows spanned by a cell or gridcell within a table, grid, or treegrid.
+         * @see aria-rowindex @see aria-colspan.
+         */
+        "aria-rowspan"?: number | undefined;
+        /**
+         * Indicates the current "selected" state of various widgets.
+         * @see aria-checked @see aria-pressed.
+         */
+        "aria-selected"?: Booleanish | undefined;
+        /**
+         * Defines the number of items in the current set of listitems or treeitems. Not required if all elements in the set are present in the DOM.
+         * @see aria-posinset.
+         */
+        "aria-setsize"?: number | undefined;
+        /** Indicates if items in a table or grid are sorted in ascending or descending order. */
+        "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
+        /** Defines the maximum allowed value for a range widget. */
+        "aria-valuemax"?: number | undefined;
+        /** Defines the minimum allowed value for a range widget. */
+        "aria-valuemin"?: number | undefined;
+        /**
+         * Defines the current value for a range widget.
+         * @see aria-valuetext.
+         */
+        "aria-valuenow"?: number | undefined;
+        /** Defines the human readable text alternative of aria-valuenow for a range widget. */
+        "aria-valuetext"?: string | undefined;
+    }
+
+    // All the WAI-ARIA 1.1 role attribute values from https://www.w3.org/TR/wai-aria-1.1/#role_definitions
+    type AriaRole =
+        | "alert"
+        | "alertdialog"
+        | "application"
+        | "article"
+        | "banner"
+        | "button"
+        | "cell"
+        | "checkbox"
+        | "columnheader"
+        | "combobox"
+        | "complementary"
+        | "contentinfo"
+        | "definition"
+        | "dialog"
+        | "directory"
+        | "document"
+        | "feed"
+        | "figure"
+        | "form"
+        | "grid"
+        | "gridcell"
+        | "group"
+        | "heading"
+        | "img"
+        | "link"
+        | "list"
+        | "listbox"
+        | "listitem"
+        | "log"
+        | "main"
+        | "marquee"
+        | "math"
+        | "menu"
+        | "menubar"
+        | "menuitem"
+        | "menuitemcheckbox"
+        | "menuitemradio"
+        | "navigation"
+        | "none"
+        | "note"
+        | "option"
+        | "presentation"
+        | "progressbar"
+        | "radio"
+        | "radiogroup"
+        | "region"
+        | "row"
+        | "rowgroup"
+        | "rowheader"
+        | "scrollbar"
+        | "search"
+        | "searchbox"
+        | "separator"
+        | "slider"
+        | "spinbutton"
+        | "status"
+        | "switch"
+        | "tab"
+        | "table"
+        | "tablist"
+        | "tabpanel"
+        | "term"
+        | "textbox"
+        | "timer"
+        | "toolbar"
+        | "tooltip"
+        | "tree"
+        | "treegrid"
+        | "treeitem"
+        | (string & {});
+
+    interface HTMLAttributes<T> extends AriaAttributes, DOMAttributes<T> {
+        // React-specific Attributes
+        defaultChecked?: boolean | undefined;
+        defaultValue?: string | number | readonly string[] | undefined;
+        suppressContentEditableWarning?: boolean | undefined;
+        suppressHydrationWarning?: boolean | undefined;
+
+        // Standard HTML Attributes
+        accessKey?: string | undefined;
+        autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
+        autoFocus?: boolean | undefined;
+        className?: string | undefined;
+        contentEditable?: Booleanish | "inherit" | "plaintext-only" | undefined;
+        contextMenu?: string | undefined;
+        dir?: string | undefined;
+        draggable?: Booleanish | undefined;
+        enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
+        hidden?: boolean | undefined;
+        id?: string | undefined;
+        lang?: string | undefined;
+        nonce?: string | undefined;
+        slot?: string | undefined;
+        spellCheck?: Booleanish | undefined;
+        style?: CSSProperties | undefined;
+        tabIndex?: number | undefined;
+        title?: string | undefined;
+        translate?: "yes" | "no" | undefined;
+
+        // Unknown
+        radioGroup?: string | undefined; // <command>, <menuitem>
+
+        // WAI-ARIA
+        role?: AriaRole | undefined;
+
+        // RDFa Attributes
+        about?: string | undefined;
+        content?: string | undefined;
+        datatype?: string | undefined;
+        inlist?: any;
+        prefix?: string | undefined;
+        property?: string | undefined;
+        rel?: string | undefined;
+        resource?: string | undefined;
+        rev?: string | undefined;
+        typeof?: string | undefined;
+        vocab?: string | undefined;
+
+        // Non-standard Attributes
+        autoCorrect?: string | undefined;
+        autoSave?: string | undefined;
+        color?: string | undefined;
+        itemProp?: string | undefined;
+        itemScope?: boolean | undefined;
+        itemType?: string | undefined;
+        itemID?: string | undefined;
+        itemRef?: string | undefined;
+        results?: number | undefined;
+        security?: string | undefined;
+        unselectable?: "on" | "off" | undefined;
+
+        // Living Standard
+        /**
+         * Hints at the type of data that might be entered by the user while editing the element or its contents
+         * @see {@link https://html.spec.whatwg.org/multipage/interaction.html#input-modalities:-the-inputmode-attribute}
+         */
+        inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
+        /**
+         * Specify that a standard HTML element should behave like a defined custom built-in element
+         * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#attr-is}
+         */
+        is?: string | undefined;
+    }
+
+    /**
+     * For internal usage only.
+     * Different release channels declare additional types of ReactNode this particular release channel accepts.
+     * App or library types should never augment this interface.
+     */
+    interface DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS {}
+
+    interface AllHTMLAttributes<T> extends HTMLAttributes<T> {
+        // Standard HTML Attributes
+        accept?: string | undefined;
+        acceptCharset?: string | undefined;
+        action?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        allowFullScreen?: boolean | undefined;
+        allowTransparency?: boolean | undefined;
+        alt?: string | undefined;
+        as?: string | undefined;
+        async?: boolean | undefined;
+        autoComplete?: string | undefined;
+        autoPlay?: boolean | undefined;
+        capture?: boolean | "user" | "environment" | undefined;
+        cellPadding?: number | string | undefined;
+        cellSpacing?: number | string | undefined;
+        charSet?: string | undefined;
+        challenge?: string | undefined;
+        checked?: boolean | undefined;
+        cite?: string | undefined;
+        classID?: string | undefined;
+        cols?: number | undefined;
+        colSpan?: number | undefined;
+        controls?: boolean | undefined;
+        coords?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        data?: string | undefined;
+        dateTime?: string | undefined;
+        default?: boolean | undefined;
+        defer?: boolean | undefined;
+        disabled?: boolean | undefined;
+        download?: any;
+        encType?: string | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        frameBorder?: number | string | undefined;
+        headers?: string | undefined;
+        height?: number | string | undefined;
+        high?: number | undefined;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        htmlFor?: string | undefined;
+        httpEquiv?: string | undefined;
+        integrity?: string | undefined;
+        keyParams?: string | undefined;
+        keyType?: string | undefined;
+        kind?: string | undefined;
+        label?: string | undefined;
+        list?: string | undefined;
+        loop?: boolean | undefined;
+        low?: number | undefined;
+        manifest?: string | undefined;
+        marginHeight?: number | undefined;
+        marginWidth?: number | undefined;
+        max?: number | string | undefined;
+        maxLength?: number | undefined;
+        media?: string | undefined;
+        mediaGroup?: string | undefined;
+        method?: string | undefined;
+        min?: number | string | undefined;
+        minLength?: number | undefined;
+        multiple?: boolean | undefined;
+        muted?: boolean | undefined;
+        name?: string | undefined;
+        noValidate?: boolean | undefined;
+        open?: boolean | undefined;
+        optimum?: number | undefined;
+        pattern?: string | undefined;
+        placeholder?: string | undefined;
+        playsInline?: boolean | undefined;
+        poster?: string | undefined;
+        preload?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        reversed?: boolean | undefined;
+        rows?: number | undefined;
+        rowSpan?: number | undefined;
+        sandbox?: string | undefined;
+        scope?: string | undefined;
+        scoped?: boolean | undefined;
+        scrolling?: string | undefined;
+        seamless?: boolean | undefined;
+        selected?: boolean | undefined;
+        shape?: string | undefined;
+        size?: number | undefined;
+        sizes?: string | undefined;
+        span?: number | undefined;
+        src?: string | undefined;
+        srcDoc?: string | undefined;
+        srcLang?: string | undefined;
+        srcSet?: string | undefined;
+        start?: number | undefined;
+        step?: number | string | undefined;
+        summary?: string | undefined;
+        target?: string | undefined;
+        type?: string | undefined;
+        useMap?: string | undefined;
+        value?: string | readonly string[] | number | undefined;
+        width?: number | string | undefined;
+        wmode?: string | undefined;
+        wrap?: string | undefined;
+    }
+
+    type HTMLAttributeReferrerPolicy =
+        | ""
+        | "no-referrer"
+        | "no-referrer-when-downgrade"
+        | "origin"
+        | "origin-when-cross-origin"
+        | "same-origin"
+        | "strict-origin"
+        | "strict-origin-when-cross-origin"
+        | "unsafe-url";
+
+    type HTMLAttributeAnchorTarget =
+        | "_self"
+        | "_blank"
+        | "_parent"
+        | "_top"
+        | (string & {});
+
+    interface AnchorHTMLAttributes<T> extends HTMLAttributes<T> {
+        download?: any;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        media?: string | undefined;
+        ping?: string | undefined;
+        target?: HTMLAttributeAnchorTarget | undefined;
+        type?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+    }
+
+    interface AudioHTMLAttributes<T> extends MediaHTMLAttributes<T> {}
+
+    interface AreaHTMLAttributes<T> extends HTMLAttributes<T> {
+        alt?: string | undefined;
+        coords?: string | undefined;
+        download?: any;
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        media?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        shape?: string | undefined;
+        target?: string | undefined;
+    }
+
+    interface BaseHTMLAttributes<T> extends HTMLAttributes<T> {
+        href?: string | undefined;
+        target?: string | undefined;
+    }
+
+    interface BlockquoteHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+    }
+
+    interface ButtonHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ]
+            | undefined;
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        name?: string | undefined;
+        type?: "submit" | "reset" | "button" | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface CanvasHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ColHTMLAttributes<T> extends HTMLAttributes<T> {
+        span?: number | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ColgroupHTMLAttributes<T> extends HTMLAttributes<T> {
+        span?: number | undefined;
+    }
+
+    interface DataHTMLAttributes<T> extends HTMLAttributes<T> {
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface DetailsHTMLAttributes<T> extends HTMLAttributes<T> {
+        open?: boolean | undefined;
+        onToggle?: ReactEventHandler<T> | undefined;
+        name?: string | undefined;
+    }
+
+    interface DelHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+        dateTime?: string | undefined;
+    }
+
+    interface DialogHTMLAttributes<T> extends HTMLAttributes<T> {
+        onCancel?: ReactEventHandler<T> | undefined;
+        onClose?: ReactEventHandler<T> | undefined;
+        open?: boolean | undefined;
+    }
+
+    interface EmbedHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        src?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface FieldsetHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface FormHTMLAttributes<T> extends HTMLAttributes<T> {
+        acceptCharset?: string | undefined;
+        action?:
+            | string
+            | undefined
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ];
+        autoComplete?: string | undefined;
+        encType?: string | undefined;
+        method?: string | undefined;
+        name?: string | undefined;
+        noValidate?: boolean | undefined;
+        target?: string | undefined;
+    }
+
+    interface HtmlHTMLAttributes<T> extends HTMLAttributes<T> {
+        manifest?: string | undefined;
+    }
+
+    interface IframeHTMLAttributes<T> extends HTMLAttributes<T> {
+        allow?: string | undefined;
+        allowFullScreen?: boolean | undefined;
+        allowTransparency?: boolean | undefined;
+        /** @deprecated */
+        frameBorder?: number | string | undefined;
+        height?: number | string | undefined;
+        loading?: "eager" | "lazy" | undefined;
+        /** @deprecated */
+        marginHeight?: number | undefined;
+        /** @deprecated */
+        marginWidth?: number | undefined;
+        name?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sandbox?: string | undefined;
+        /** @deprecated */
+        scrolling?: string | undefined;
+        seamless?: boolean | undefined;
+        src?: string | undefined;
+        srcDoc?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface ImgHTMLAttributes<T> extends HTMLAttributes<T> {
+        alt?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        decoding?: "async" | "auto" | "sync" | undefined;
+        fetchPriority?: "high" | "low" | "auto";
+        height?: number | string | undefined;
+        loading?: "eager" | "lazy" | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sizes?: string | undefined;
+        src?: string | undefined;
+        srcSet?: string | undefined;
+        useMap?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface InsHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+        dateTime?: string | undefined;
+    }
+
+    type HTMLInputTypeAttribute =
+        | "button"
+        | "checkbox"
+        | "color"
+        | "date"
+        | "datetime-local"
+        | "email"
+        | "file"
+        | "hidden"
+        | "image"
+        | "month"
+        | "number"
+        | "password"
+        | "radio"
+        | "range"
+        | "reset"
+        | "search"
+        | "submit"
+        | "tel"
+        | "text"
+        | "time"
+        | "url"
+        | "week"
+        | (string & {});
+
+    type AutoFillAddressKind = "billing" | "shipping";
+    type AutoFillBase = "" | "off" | "on";
+    type AutoFillContactField =
+        | "email"
+        | "tel"
+        | "tel-area-code"
+        | "tel-country-code"
+        | "tel-extension"
+        | "tel-local"
+        | "tel-local-prefix"
+        | "tel-local-suffix"
+        | "tel-national";
+    type AutoFillContactKind = "home" | "mobile" | "work";
+    type AutoFillCredentialField = "webauthn";
+    type AutoFillNormalField =
+        | "additional-name"
+        | "address-level1"
+        | "address-level2"
+        | "address-level3"
+        | "address-level4"
+        | "address-line1"
+        | "address-line2"
+        | "address-line3"
+        | "bday-day"
+        | "bday-month"
+        | "bday-year"
+        | "cc-csc"
+        | "cc-exp"
+        | "cc-exp-month"
+        | "cc-exp-year"
+        | "cc-family-name"
+        | "cc-given-name"
+        | "cc-name"
+        | "cc-number"
+        | "cc-type"
+        | "country"
+        | "country-name"
+        | "current-password"
+        | "family-name"
+        | "given-name"
+        | "honorific-prefix"
+        | "honorific-suffix"
+        | "name"
+        | "new-password"
+        | "one-time-code"
+        | "organization"
+        | "postal-code"
+        | "street-address"
+        | "transaction-amount"
+        | "transaction-currency"
+        | "username";
+    type OptionalPrefixToken<T extends string> = `${T} ` | "";
+    type OptionalPostfixToken<T extends string> = ` ${T}` | "";
+    type AutoFillField = AutoFillNormalField | `${OptionalPrefixToken<AutoFillContactKind>}${AutoFillContactField}`;
+    type AutoFillSection = `section-${string}`;
+    type AutoFill =
+        | AutoFillBase
+        | `${OptionalPrefixToken<AutoFillSection>}${OptionalPrefixToken<
+            AutoFillAddressKind
+        >}${AutoFillField}${OptionalPostfixToken<AutoFillCredentialField>}`;
+    type HTMLInputAutoCompleteAttribute = AutoFill | (string & {});
+
+    interface InputHTMLAttributes<T> extends HTMLAttributes<T> {
+        accept?: string | undefined;
+        alt?: string | undefined;
+        autoComplete?: HTMLInputAutoCompleteAttribute | undefined;
+        capture?: boolean | "user" | "environment" | undefined; // https://www.w3.org/TR/html-media-capture/#the-capture-attribute
+        checked?: boolean | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        formAction?:
+            | string
+            | DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS[
+                keyof DO_NOT_USE_OR_YOU_WILL_BE_FIRED_EXPERIMENTAL_FORM_ACTIONS
+            ]
+            | undefined;
+        formEncType?: string | undefined;
+        formMethod?: string | undefined;
+        formNoValidate?: boolean | undefined;
+        formTarget?: string | undefined;
+        height?: number | string | undefined;
+        list?: string | undefined;
+        max?: number | string | undefined;
+        maxLength?: number | undefined;
+        min?: number | string | undefined;
+        minLength?: number | undefined;
+        multiple?: boolean | undefined;
+        name?: string | undefined;
+        pattern?: string | undefined;
+        placeholder?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        size?: number | undefined;
+        src?: string | undefined;
+        step?: number | string | undefined;
+        type?: HTMLInputTypeAttribute | undefined;
+        value?: string | readonly string[] | number | undefined;
+        width?: number | string | undefined;
+
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface KeygenHTMLAttributes<T> extends HTMLAttributes<T> {
+        challenge?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        keyType?: string | undefined;
+        keyParams?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface LabelHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        htmlFor?: string | undefined;
+    }
+
+    interface LiHTMLAttributes<T> extends HTMLAttributes<T> {
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface LinkHTMLAttributes<T> extends HTMLAttributes<T> {
+        as?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        fetchPriority?: "high" | "low" | "auto";
+        href?: string | undefined;
+        hrefLang?: string | undefined;
+        integrity?: string | undefined;
+        media?: string | undefined;
+        imageSrcSet?: string | undefined;
+        imageSizes?: string | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        sizes?: string | undefined;
+        type?: string | undefined;
+        charSet?: string | undefined;
+    }
+
+    interface MapHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+    }
+
+    interface MenuHTMLAttributes<T> extends HTMLAttributes<T> {
+        type?: string | undefined;
+    }
+
+    interface MediaHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoPlay?: boolean | undefined;
+        controls?: boolean | undefined;
+        controlsList?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        loop?: boolean | undefined;
+        mediaGroup?: string | undefined;
+        muted?: boolean | undefined;
+        playsInline?: boolean | undefined;
+        preload?: string | undefined;
+        src?: string | undefined;
+    }
+
+    interface MetaHTMLAttributes<T> extends HTMLAttributes<T> {
+        charSet?: string | undefined;
+        content?: string | undefined;
+        httpEquiv?: string | undefined;
+        media?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface MeterHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        high?: number | undefined;
+        low?: number | undefined;
+        max?: number | string | undefined;
+        min?: number | string | undefined;
+        optimum?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface QuoteHTMLAttributes<T> extends HTMLAttributes<T> {
+        cite?: string | undefined;
+    }
+
+    interface ObjectHTMLAttributes<T> extends HTMLAttributes<T> {
+        classID?: string | undefined;
+        data?: string | undefined;
+        form?: string | undefined;
+        height?: number | string | undefined;
+        name?: string | undefined;
+        type?: string | undefined;
+        useMap?: string | undefined;
+        width?: number | string | undefined;
+        wmode?: string | undefined;
+    }
+
+    interface OlHTMLAttributes<T> extends HTMLAttributes<T> {
+        reversed?: boolean | undefined;
+        start?: number | undefined;
+        type?: "1" | "a" | "A" | "i" | "I" | undefined;
+    }
+
+    interface OptgroupHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        label?: string | undefined;
+    }
+
+    interface OptionHTMLAttributes<T> extends HTMLAttributes<T> {
+        disabled?: boolean | undefined;
+        label?: string | undefined;
+        selected?: boolean | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface OutputHTMLAttributes<T> extends HTMLAttributes<T> {
+        form?: string | undefined;
+        htmlFor?: string | undefined;
+        name?: string | undefined;
+    }
+
+    interface ParamHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface ProgressHTMLAttributes<T> extends HTMLAttributes<T> {
+        max?: number | string | undefined;
+        value?: string | readonly string[] | number | undefined;
+    }
+
+    interface SlotHTMLAttributes<T> extends HTMLAttributes<T> {
+        name?: string | undefined;
+    }
+
+    interface ScriptHTMLAttributes<T> extends HTMLAttributes<T> {
+        async?: boolean | undefined;
+        /** @deprecated */
+        charSet?: string | undefined;
+        crossOrigin?: CrossOrigin;
+        defer?: boolean | undefined;
+        integrity?: string | undefined;
+        noModule?: boolean | undefined;
+        referrerPolicy?: HTMLAttributeReferrerPolicy | undefined;
+        src?: string | undefined;
+        type?: string | undefined;
+    }
+
+    interface SelectHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoComplete?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        multiple?: boolean | undefined;
+        name?: string | undefined;
+        required?: boolean | undefined;
+        size?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface SourceHTMLAttributes<T> extends HTMLAttributes<T> {
+        height?: number | string | undefined;
+        media?: string | undefined;
+        sizes?: string | undefined;
+        src?: string | undefined;
+        srcSet?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface StyleHTMLAttributes<T> extends HTMLAttributes<T> {
+        media?: string | undefined;
+        scoped?: boolean | undefined;
+        type?: string | undefined;
+    }
+
+    interface TableHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | undefined;
+        bgcolor?: string | undefined;
+        border?: number | undefined;
+        cellPadding?: number | string | undefined;
+        cellSpacing?: number | string | undefined;
+        frame?: boolean | undefined;
+        rules?: "none" | "groups" | "rows" | "columns" | "all" | undefined;
+        summary?: string | undefined;
+        width?: number | string | undefined;
+    }
+
+    interface TextareaHTMLAttributes<T> extends HTMLAttributes<T> {
+        autoComplete?: string | undefined;
+        cols?: number | undefined;
+        dirName?: string | undefined;
+        disabled?: boolean | undefined;
+        form?: string | undefined;
+        maxLength?: number | undefined;
+        minLength?: number | undefined;
+        name?: string | undefined;
+        placeholder?: string | undefined;
+        readOnly?: boolean | undefined;
+        required?: boolean | undefined;
+        rows?: number | undefined;
+        value?: string | readonly string[] | number | undefined;
+        wrap?: string | undefined;
+
+        onChange?: ChangeEventHandler<T> | undefined;
+    }
+
+    interface TdHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | "justify" | "char" | undefined;
+        colSpan?: number | undefined;
+        headers?: string | undefined;
+        rowSpan?: number | undefined;
+        scope?: string | undefined;
+        abbr?: string | undefined;
+        height?: number | string | undefined;
+        width?: number | string | undefined;
+        valign?: "top" | "middle" | "bottom" | "baseline" | undefined;
+    }
+
+    interface ThHTMLAttributes<T> extends HTMLAttributes<T> {
+        align?: "left" | "center" | "right" | "justify" | "char" | undefined;
+        colSpan?: number | undefined;
+        headers?: string | undefined;
+        rowSpan?: number | undefined;
+        scope?: string | undefined;
+        abbr?: string | undefined;
+    }
+
+    interface TimeHTMLAttributes<T> extends HTMLAttributes<T> {
+        dateTime?: string | undefined;
+    }
+
+    interface TrackHTMLAttributes<T> extends HTMLAttributes<T> {
+        default?: boolean | undefined;
+        kind?: string | undefined;
+        label?: string | undefined;
+        src?: string | undefined;
+        srcLang?: string | undefined;
+    }
+
+    interface VideoHTMLAttributes<T> extends MediaHTMLAttributes<T> {
+        height?: number | string | undefined;
+        playsInline?: boolean | undefined;
+        poster?: string | undefined;
+        width?: number | string | undefined;
+        disablePictureInPicture?: boolean | undefined;
+        disableRemotePlayback?: boolean | undefined;
+    }
+
+    // this list is "complete" in that it contains every SVG attribute
+    // that React supports, but the types can be improved.
+    // Full list here: https://facebook.github.io/react/docs/dom-elements.html
+    //
+    // The three broad type categories are (in order of restrictiveness):
+    //   - "number | string"
+    //   - "string"
+    //   - union of string literals
+    interface SVGAttributes<T> extends AriaAttributes, DOMAttributes<T> {
+        // React-specific Attributes
+        suppressHydrationWarning?: boolean | undefined;
+
+        // Attributes which also defined in HTMLAttributes
+        // See comment in SVGDOMPropertyConfig.js
+        className?: string | undefined;
+        color?: string | undefined;
+        height?: number | string | undefined;
+        id?: string | undefined;
+        lang?: string | undefined;
+        max?: number | string | undefined;
+        media?: string | undefined;
+        method?: string | undefined;
+        min?: number | string | undefined;
+        name?: string | undefined;
+        style?: CSSProperties | undefined;
+        target?: string | undefined;
+        type?: string | undefined;
+        width?: number | string | undefined;
+
+        // Other HTML properties supported by SVG elements in browsers
+        role?: AriaRole | undefined;
+        tabIndex?: number | undefined;
+        crossOrigin?: CrossOrigin;
+
+        // SVG Specific attributes
+        accentHeight?: number | string | undefined;
+        accumulate?: "none" | "sum" | undefined;
+        additive?: "replace" | "sum" | undefined;
+        alignmentBaseline?:
+            | "auto"
+            | "baseline"
+            | "before-edge"
+            | "text-before-edge"
+            | "middle"
+            | "central"
+            | "after-edge"
+            | "text-after-edge"
+            | "ideographic"
+            | "alphabetic"
+            | "hanging"
+            | "mathematical"
+            | "inherit"
+            | undefined;
+        allowReorder?: "no" | "yes" | undefined;
+        alphabetic?: number | string | undefined;
+        amplitude?: number | string | undefined;
+        arabicForm?: "initial" | "medial" | "terminal" | "isolated" | undefined;
+        ascent?: number | string | undefined;
+        attributeName?: string | undefined;
+        attributeType?: string | undefined;
+        autoReverse?: Booleanish | undefined;
+        azimuth?: number | string | undefined;
+        baseFrequency?: number | string | undefined;
+        baselineShift?: number | string | undefined;
+        baseProfile?: number | string | undefined;
+        bbox?: number | string | undefined;
+        begin?: number | string | undefined;
+        bias?: number | string | undefined;
+        by?: number | string | undefined;
+        calcMode?: number | string | undefined;
+        capHeight?: number | string | undefined;
+        clip?: number | string | undefined;
+        clipPath?: string | undefined;
+        clipPathUnits?: number | string | undefined;
+        clipRule?: number | string | undefined;
+        colorInterpolation?: number | string | undefined;
+        colorInterpolationFilters?: "auto" | "sRGB" | "linearRGB" | "inherit" | undefined;
+        colorProfile?: number | string | undefined;
+        colorRendering?: number | string | undefined;
+        contentScriptType?: number | string | undefined;
+        contentStyleType?: number | string | undefined;
+        cursor?: number | string | undefined;
+        cx?: number | string | undefined;
+        cy?: number | string | undefined;
+        d?: string | undefined;
+        decelerate?: number | string | undefined;
+        descent?: number | string | undefined;
+        diffuseConstant?: number | string | undefined;
+        direction?: number | string | undefined;
+        display?: number | string | undefined;
+        divisor?: number | string | undefined;
+        dominantBaseline?: number | string | undefined;
+        dur?: number | string | undefined;
+        dx?: number | string | undefined;
+        dy?: number | string | undefined;
+        edgeMode?: number | string | undefined;
+        elevation?: number | string | undefined;
+        enableBackground?: number | string | undefined;
+        end?: number | string | undefined;
+        exponent?: number | string | undefined;
+        externalResourcesRequired?: Booleanish | undefined;
+        fill?: string | undefined;
+        fillOpacity?: number | string | undefined;
+        fillRule?: "nonzero" | "evenodd" | "inherit" | undefined;
+        filter?: string | undefined;
+        filterRes?: number | string | undefined;
+        filterUnits?: number | string | undefined;
+        floodColor?: number | string | undefined;
+        floodOpacity?: number | string | undefined;
+        focusable?: Booleanish | "auto" | undefined;
+        fontFamily?: string | undefined;
+        fontSize?: number | string | undefined;
+        fontSizeAdjust?: number | string | undefined;
+        fontStretch?: number | string | undefined;
+        fontStyle?: number | string | undefined;
+        fontVariant?: number | string | undefined;
+        fontWeight?: number | string | undefined;
+        format?: number | string | undefined;
+        fr?: number | string | undefined;
+        from?: number | string | undefined;
+        fx?: number | string | undefined;
+        fy?: number | string | undefined;
+        g1?: number | string | undefined;
+        g2?: number | string | undefined;
+        glyphName?: number | string | undefined;
+        glyphOrientationHorizontal?: number | string | undefined;
+        glyphOrientationVertical?: number | string | undefined;
+        glyphRef?: number | string | undefined;
+        gradientTransform?: string | undefined;
+        gradientUnits?: string | undefined;
+        hanging?: number | string | undefined;
+        horizAdvX?: number | string | undefined;
+        horizOriginX?: number | string | undefined;
+        href?: string | undefined;
+        ideographic?: number | string | undefined;
+        imageRendering?: number | string | undefined;
+        in2?: number | string | undefined;
+        in?: string | undefined;
+        intercept?: number | string | undefined;
+        k1?: number | string | undefined;
+        k2?: number | string | undefined;
+        k3?: number | string | undefined;
+        k4?: number | string | undefined;
+        k?: number | string | undefined;
+        kernelMatrix?: number | string | undefined;
+        kernelUnitLength?: number | string | undefined;
+        kerning?: number | string | undefined;
+        keyPoints?: number | string | undefined;
+        keySplines?: number | string | undefined;
+        keyTimes?: number | string | undefined;
+        lengthAdjust?: number | string | undefined;
+        letterSpacing?: number | string | undefined;
+        lightingColor?: number | string | undefined;
+        limitingConeAngle?: number | string | undefined;
+        local?: number | string | undefined;
+        markerEnd?: string | undefined;
+        markerHeight?: number | string | undefined;
+        markerMid?: string | undefined;
+        markerStart?: string | undefined;
+        markerUnits?: number | string | undefined;
+        markerWidth?: number | string | undefined;
+        mask?: string | undefined;
+        maskContentUnits?: number | string | undefined;
+        maskUnits?: number | string | undefined;
+        mathematical?: number | string | undefined;
+        mode?: number | string | undefined;
+        numOctaves?: number | string | undefined;
+        offset?: number | string | undefined;
+        opacity?: number | string | undefined;
+        operator?: number | string | undefined;
+        order?: number | string | undefined;
+        orient?: number | string | undefined;
+        orientation?: number | string | undefined;
+        origin?: number | string | undefined;
+        overflow?: number | string | undefined;
+        overlinePosition?: number | string | undefined;
+        overlineThickness?: number | string | undefined;
+        paintOrder?: number | string | undefined;
+        panose1?: number | string | undefined;
+        path?: string | undefined;
+        pathLength?: number | string | undefined;
+        patternContentUnits?: string | undefined;
+        patternTransform?: number | string | undefined;
+        patternUnits?: string | undefined;
+        pointerEvents?: number | string | undefined;
+        points?: string | undefined;
+        pointsAtX?: number | string | undefined;
+        pointsAtY?: number | string | undefined;
+        pointsAtZ?: number | string | undefined;
+        preserveAlpha?: Booleanish | undefined;
+        preserveAspectRatio?: string | undefined;
+        primitiveUnits?: number | string | undefined;
+        r?: number | string | undefined;
+        radius?: number | string | undefined;
+        refX?: number | string | undefined;
+        refY?: number | string | undefined;
+        renderingIntent?: number | string | undefined;
+        repeatCount?: number | string | undefined;
+        repeatDur?: number | string | undefined;
+        requiredExtensions?: number | string | undefined;
+        requiredFeatures?: number | string | undefined;
+        restart?: number | string | undefined;
+        result?: string | undefined;
+        rotate?: number | string | undefined;
+        rx?: number | string | undefined;
+        ry?: number | string | undefined;
+        scale?: number | string | undefined;
+        seed?: number | string | undefined;
+        shapeRendering?: number | string | undefined;
+        slope?: number | string | undefined;
+        spacing?: number | string | undefined;
+        specularConstant?: number | string | undefined;
+        specularExponent?: number | string | undefined;
+        speed?: number | string | undefined;
+        spreadMethod?: string | undefined;
+        startOffset?: number | string | undefined;
+        stdDeviation?: number | string | undefined;
+        stemh?: number | string | undefined;
+        stemv?: number | string | undefined;
+        stitchTiles?: number | string | undefined;
+        stopColor?: string | undefined;
+        stopOpacity?: number | string | undefined;
+        strikethroughPosition?: number | string | undefined;
+        strikethroughThickness?: number | string | undefined;
+        string?: number | string | undefined;
+        stroke?: string | undefined;
+        strokeDasharray?: string | number | undefined;
+        strokeDashoffset?: string | number | undefined;
+        strokeLinecap?: "butt" | "round" | "square" | "inherit" | undefined;
+        strokeLinejoin?: "miter" | "round" | "bevel" | "inherit" | undefined;
+        strokeMiterlimit?: number | string | undefined;
+        strokeOpacity?: number | string | undefined;
+        strokeWidth?: number | string | undefined;
+        surfaceScale?: number | string | undefined;
+        systemLanguage?: number | string | undefined;
+        tableValues?: number | string | undefined;
+        targetX?: number | string | undefined;
+        targetY?: number | string | undefined;
+        textAnchor?: string | undefined;
+        textDecoration?: number | string | undefined;
+        textLength?: number | string | undefined;
+        textRendering?: number | string | undefined;
+        to?: number | string | undefined;
+        transform?: string | undefined;
+        u1?: number | string | undefined;
+        u2?: number | string | undefined;
+        underlinePosition?: number | string | undefined;
+        underlineThickness?: number | string | undefined;
+        unicode?: number | string | undefined;
+        unicodeBidi?: number | string | undefined;
+        unicodeRange?: number | string | undefined;
+        unitsPerEm?: number | string | undefined;
+        vAlphabetic?: number | string | undefined;
+        values?: string | undefined;
+        vectorEffect?: number | string | undefined;
+        version?: string | undefined;
+        vertAdvY?: number | string | undefined;
+        vertOriginX?: number | string | undefined;
+        vertOriginY?: number | string | undefined;
+        vHanging?: number | string | undefined;
+        vIdeographic?: number | string | undefined;
+        viewBox?: string | undefined;
+        viewTarget?: number | string | undefined;
+        visibility?: number | string | undefined;
+        vMathematical?: number | string | undefined;
+        widths?: number | string | undefined;
+        wordSpacing?: number | string | undefined;
+        writingMode?: number | string | undefined;
+        x1?: number | string | undefined;
+        x2?: number | string | undefined;
+        x?: number | string | undefined;
+        xChannelSelector?: string | undefined;
+        xHeight?: number | string | undefined;
+        xlinkActuate?: string | undefined;
+        xlinkArcrole?: string | undefined;
+        xlinkHref?: string | undefined;
+        xlinkRole?: string | undefined;
+        xlinkShow?: string | undefined;
+        xlinkTitle?: string | undefined;
+        xlinkType?: string | undefined;
+        xmlBase?: string | undefined;
+        xmlLang?: string | undefined;
+        xmlns?: string | undefined;
+        xmlnsXlink?: string | undefined;
+        xmlSpace?: string | undefined;
+        y1?: number | string | undefined;
+        y2?: number | string | undefined;
+        y?: number | string | undefined;
+        yChannelSelector?: string | undefined;
+        z?: number | string | undefined;
+        zoomAndPan?: string | undefined;
+    }
+
+    interface WebViewHTMLAttributes<T> extends HTMLAttributes<T> {
+        allowFullScreen?: boolean | undefined;
+        allowpopups?: boolean | undefined;
+        autosize?: boolean | undefined;
+        blinkfeatures?: string | undefined;
+        disableblinkfeatures?: string | undefined;
+        disableguestresize?: boolean | undefined;
+        disablewebsecurity?: boolean | undefined;
+        guestinstance?: string | undefined;
+        httpreferrer?: string | undefined;
+        nodeintegration?: boolean | undefined;
+        partition?: string | undefined;
+        plugins?: boolean | undefined;
+        preload?: string | undefined;
+        src?: string | undefined;
+        useragent?: string | undefined;
+        webpreferences?: string | undefined;
+    }
+
+    //
+    // React.DOM
+    // ----------------------------------------------------------------------
+
+    interface ReactHTML {
+        a: DetailedHTMLFactory<AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
+        abbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        address: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        area: DetailedHTMLFactory<AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>;
+        article: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        aside: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        audio: DetailedHTMLFactory<AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>;
+        b: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        base: DetailedHTMLFactory<BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>;
+        bdi: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        bdo: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        big: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        blockquote: DetailedHTMLFactory<BlockquoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+        body: DetailedHTMLFactory<HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>;
+        br: DetailedHTMLFactory<HTMLAttributes<HTMLBRElement>, HTMLBRElement>;
+        button: DetailedHTMLFactory<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
+        canvas: DetailedHTMLFactory<CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>;
+        caption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        center: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        cite: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        code: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        col: DetailedHTMLFactory<ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+        colgroup: DetailedHTMLFactory<ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+        data: DetailedHTMLFactory<DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>;
+        datalist: DetailedHTMLFactory<HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>;
+        dd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        del: DetailedHTMLFactory<DelHTMLAttributes<HTMLModElement>, HTMLModElement>;
+        details: DetailedHTMLFactory<DetailsHTMLAttributes<HTMLDetailsElement>, HTMLDetailsElement>;
+        dfn: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        dialog: DetailedHTMLFactory<DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>;
+        div: DetailedHTMLFactory<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
+        dl: DetailedHTMLFactory<HTMLAttributes<HTMLDListElement>, HTMLDListElement>;
+        dt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        em: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        embed: DetailedHTMLFactory<EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement>;
+        fieldset: DetailedHTMLFactory<FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>;
+        figcaption: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        figure: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        footer: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        form: DetailedHTMLFactory<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
+        h1: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h2: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h3: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h4: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h5: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        h6: DetailedHTMLFactory<HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+        head: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLHeadElement>;
+        header: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        hgroup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        hr: DetailedHTMLFactory<HTMLAttributes<HTMLHRElement>, HTMLHRElement>;
+        html: DetailedHTMLFactory<HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>;
+        i: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        iframe: DetailedHTMLFactory<IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>;
+        img: DetailedHTMLFactory<ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
+        input: DetailedHTMLFactory<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+        ins: DetailedHTMLFactory<InsHTMLAttributes<HTMLModElement>, HTMLModElement>;
+        kbd: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        keygen: DetailedHTMLFactory<KeygenHTMLAttributes<HTMLElement>, HTMLElement>;
+        label: DetailedHTMLFactory<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>;
+        legend: DetailedHTMLFactory<HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>;
+        li: DetailedHTMLFactory<LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
+        link: DetailedHTMLFactory<LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
+        main: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        map: DetailedHTMLFactory<MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>;
+        mark: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        menu: DetailedHTMLFactory<MenuHTMLAttributes<HTMLElement>, HTMLElement>;
+        menuitem: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        meta: DetailedHTMLFactory<MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
+        meter: DetailedHTMLFactory<MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>;
+        nav: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        noscript: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        object: DetailedHTMLFactory<ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement>;
+        ol: DetailedHTMLFactory<OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>;
+        optgroup: DetailedHTMLFactory<OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement>;
+        option: DetailedHTMLFactory<OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement>;
+        output: DetailedHTMLFactory<OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>;
+        p: DetailedHTMLFactory<HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>;
+        param: DetailedHTMLFactory<ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement>;
+        picture: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        pre: DetailedHTMLFactory<HTMLAttributes<HTMLPreElement>, HTMLPreElement>;
+        progress: DetailedHTMLFactory<ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>;
+        q: DetailedHTMLFactory<QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+        rp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        rt: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        ruby: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        s: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        samp: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        search: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        slot: DetailedHTMLFactory<SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>;
+        script: DetailedHTMLFactory<ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>;
+        section: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        select: DetailedHTMLFactory<SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>;
+        small: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        source: DetailedHTMLFactory<SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement>;
+        span: DetailedHTMLFactory<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
+        strong: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        style: DetailedHTMLFactory<StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>;
+        sub: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        summary: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        sup: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        table: DetailedHTMLFactory<TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>;
+        template: DetailedHTMLFactory<HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement>;
+        tbody: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        td: DetailedHTMLFactory<TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>;
+        textarea: DetailedHTMLFactory<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>;
+        tfoot: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        th: DetailedHTMLFactory<ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>;
+        thead: DetailedHTMLFactory<HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+        time: DetailedHTMLFactory<TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>;
+        title: DetailedHTMLFactory<HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
+        tr: DetailedHTMLFactory<HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>;
+        track: DetailedHTMLFactory<TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement>;
+        u: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        ul: DetailedHTMLFactory<HTMLAttributes<HTMLUListElement>, HTMLUListElement>;
+        "var": DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        video: DetailedHTMLFactory<VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>;
+        wbr: DetailedHTMLFactory<HTMLAttributes<HTMLElement>, HTMLElement>;
+        webview: DetailedHTMLFactory<WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement>;
+    }
+
+    interface ReactSVG {
+        animate: SVGFactory;
+        circle: SVGFactory;
+        clipPath: SVGFactory;
+        defs: SVGFactory;
+        desc: SVGFactory;
+        ellipse: SVGFactory;
+        feBlend: SVGFactory;
+        feColorMatrix: SVGFactory;
+        feComponentTransfer: SVGFactory;
+        feComposite: SVGFactory;
+        feConvolveMatrix: SVGFactory;
+        feDiffuseLighting: SVGFactory;
+        feDisplacementMap: SVGFactory;
+        feDistantLight: SVGFactory;
+        feDropShadow: SVGFactory;
+        feFlood: SVGFactory;
+        feFuncA: SVGFactory;
+        feFuncB: SVGFactory;
+        feFuncG: SVGFactory;
+        feFuncR: SVGFactory;
+        feGaussianBlur: SVGFactory;
+        feImage: SVGFactory;
+        feMerge: SVGFactory;
+        feMergeNode: SVGFactory;
+        feMorphology: SVGFactory;
+        feOffset: SVGFactory;
+        fePointLight: SVGFactory;
+        feSpecularLighting: SVGFactory;
+        feSpotLight: SVGFactory;
+        feTile: SVGFactory;
+        feTurbulence: SVGFactory;
+        filter: SVGFactory;
+        foreignObject: SVGFactory;
+        g: SVGFactory;
+        image: SVGFactory;
+        line: SVGFactory;
+        linearGradient: SVGFactory;
+        marker: SVGFactory;
+        mask: SVGFactory;
+        metadata: SVGFactory;
+        path: SVGFactory;
+        pattern: SVGFactory;
+        polygon: SVGFactory;
+        polyline: SVGFactory;
+        radialGradient: SVGFactory;
+        rect: SVGFactory;
+        stop: SVGFactory;
+        svg: SVGFactory;
+        switch: SVGFactory;
+        symbol: SVGFactory;
+        text: SVGFactory;
+        textPath: SVGFactory;
+        tspan: SVGFactory;
+        use: SVGFactory;
+        view: SVGFactory;
+    }
+
+    interface ReactDOM extends ReactHTML, ReactSVG {}
+
+    //
+    // React.PropTypes
+    // ----------------------------------------------------------------------
+
+    /**
+     * @deprecated Use `Validator` from the ´prop-types` instead.
+     */
+    type Validator<T> = PropTypes.Validator<T>;
+
+    /**
+     * @deprecated Use `Requireable` from the ´prop-types` instead.
+     */
+    type Requireable<T> = PropTypes.Requireable<T>;
+
+    /**
+     * @deprecated Use `ValidationMap` from the ´prop-types` instead.
+     */
+    type ValidationMap<T> = PropTypes.ValidationMap<T>;
+
+    /**
+     * @deprecated Use `WeakValidationMap` from the ´prop-types` instead.
+     */
+    type WeakValidationMap<T> = {
+        [K in keyof T]?: null extends T[K] ? Validator<T[K] | null | undefined>
+            : undefined extends T[K] ? Validator<T[K] | null | undefined>
+            : Validator<T[K]>;
+    };
+
+    /**
+     * @deprecated Use `PropTypes.*` where `PropTypes` comes from `import * as PropTypes from 'prop-types'` instead.
+     */
+    interface ReactPropTypes {
+        any: typeof PropTypes.any;
+        array: typeof PropTypes.array;
+        bool: typeof PropTypes.bool;
+        func: typeof PropTypes.func;
+        number: typeof PropTypes.number;
+        object: typeof PropTypes.object;
+        string: typeof PropTypes.string;
+        node: typeof PropTypes.node;
+        element: typeof PropTypes.element;
+        instanceOf: typeof PropTypes.instanceOf;
+        oneOf: typeof PropTypes.oneOf;
+        oneOfType: typeof PropTypes.oneOfType;
+        arrayOf: typeof PropTypes.arrayOf;
+        objectOf: typeof PropTypes.objectOf;
+        shape: typeof PropTypes.shape;
+        exact: typeof PropTypes.exact;
+    }
+
+    //
+    // React.Children
+    // ----------------------------------------------------------------------
+
+    /**
+     * @deprecated - Use `typeof React.Children` instead.
+     */
+    // Sync with type of `const Children`.
+    interface ReactChildren {
+        map<T, C>(
+            children: C | readonly C[],
+            fn: (child: C, index: number) => T,
+        ): C extends null | undefined ? C : Array<Exclude<T, boolean | null | undefined>>;
+        forEach<C>(children: C | readonly C[], fn: (child: C, index: number) => void): void;
+        count(children: any): number;
+        only<C>(children: C): C extends any[] ? never : C;
+        toArray(children: ReactNode | ReactNode[]): Array<Exclude<ReactNode, boolean | null | undefined>>;
+    }
+
+    //
+    // Browser Interfaces
+    // https://github.com/nikeee/2048-typescript/blob/master/2048/js/touch.d.ts
+    // ----------------------------------------------------------------------
+
+    interface AbstractView {
+        styleMedia: StyleMedia;
+        document: Document;
+    }
+
+    interface Touch {
+        identifier: number;
+        target: EventTarget;
+        screenX: number;
+        screenY: number;
+        clientX: number;
+        clientY: number;
+        pageX: number;
+        pageY: number;
+    }
+
+    interface TouchList {
+        [index: number]: Touch;
+        length: number;
+        item(index: number): Touch;
+        identifiedTouch(identifier: number): Touch;
+    }
+
+    //
+    // Error Interfaces
+    // ----------------------------------------------------------------------
+    interface ErrorInfo {
+        /**
+         * Captures which component contained the exception, and its ancestors.
+         */
+        componentStack?: string | null;
+        digest?: string | null;
+    }
+
+    // Keep in sync with JSX namespace in ./jsx-runtime.d.ts and ./jsx-dev-runtime.d.ts
+    namespace JSX {
+        interface Element extends GlobalJSXElement {}
+        interface ElementClass extends GlobalJSXElementClass {}
+        interface ElementAttributesProperty extends GlobalJSXElementAttributesProperty {}
+        interface ElementChildrenAttribute extends GlobalJSXElementChildrenAttribute {}
+
+        type LibraryManagedAttributes<C, P> = GlobalJSXLibraryManagedAttributes<C, P>;
+
+        interface IntrinsicAttributes extends GlobalJSXIntrinsicAttributes {}
+        interface IntrinsicClassAttributes<T> extends GlobalJSXIntrinsicClassAttributes<T> {}
+        interface IntrinsicElements extends GlobalJSXIntrinsicElements {}
+    }
+}
+
+// naked 'any' type in a conditional type will short circuit and union both the then/else branches
+// so boolean is only resolved for T = any
+type IsExactlyAny<T> = boolean extends (T extends never ? true : false) ? true : false;
+
+type ExactlyAnyPropertyKeys<T> = { [K in keyof T]: IsExactlyAny<T[K]> extends true ? K : never }[keyof T];
+type NotExactlyAnyPropertyKeys<T> = Exclude<keyof T, ExactlyAnyPropertyKeys<T>>;
+
+// Try to resolve ill-defined props like for JS users: props can be any, or sometimes objects with properties of type any
+type MergePropTypes<P, T> =
+    // Distribute over P in case it is a union type
+    P extends any
+        // If props is type any, use propTypes definitions
+        ? IsExactlyAny<P> extends true ? T
+            // If declared props have indexed properties, ignore inferred props entirely as keyof gets widened
+        : string extends keyof P ? P
+            // Prefer declared types which are not exactly any
+        :
+            & Pick<P, NotExactlyAnyPropertyKeys<P>>
+            // For props which are exactly any, use the type inferred from propTypes if present
+            & Pick<T, Exclude<keyof T, NotExactlyAnyPropertyKeys<P>>>
+            // Keep leftover props not specified in propTypes
+            & Pick<P, Exclude<keyof P, keyof T>>
+        : never;
+
+type InexactPartial<T> = { [K in keyof T]?: T[K] | undefined };
+
+// Any prop that has a default prop becomes optional, but its type is unchanged
+// Undeclared default props are augmented into the resulting allowable attributes
+// If declared props have indexed properties, ignore default props entirely as keyof gets widened
+// Wrap in an outer-level conditional type to allow distribution over props that are unions
+type Defaultize<P, D> = P extends any ? string extends keyof P ? P
+    :
+        & Pick<P, Exclude<keyof P, keyof D>>
+        & InexactPartial<Pick<P, Extract<keyof P, keyof D>>>
+        & InexactPartial<Pick<D, Exclude<keyof D, keyof P>>>
+    : never;
+
+type ReactManagedAttributes<C, P> = C extends { propTypes: infer T; defaultProps: infer D }
+    ? Defaultize<MergePropTypes<P, PropTypes.InferProps<T>>, D>
+    : C extends { propTypes: infer T } ? MergePropTypes<P, PropTypes.InferProps<T>>
+    : C extends { defaultProps: infer D } ? Defaultize<P, D>
+    : P;
+
+declare global {
+    /**
+     * @deprecated Use `React.JSX` instead of the global `JSX` namespace.
+     */
+    namespace JSX {
+        interface Element extends React.ReactElement<any, any> {}
+        interface ElementClass extends React.Component<any> {
+            render(): React.ReactNode;
+        }
+        interface ElementAttributesProperty {
+            props: {};
+        }
+        interface ElementChildrenAttribute {
+            children: {};
+        }
+
+        // We can't recurse forever because `type` can't be self-referential;
+        // let's assume it's reasonable to do a single React.lazy() around a single React.memo() / vice-versa
+        type LibraryManagedAttributes<C, P> = C extends
+            React.MemoExoticComponent<infer T> | React.LazyExoticComponent<infer T>
+            ? T extends React.MemoExoticComponent<infer U> | React.LazyExoticComponent<infer U>
+                ? ReactManagedAttributes<U, P>
+            : ReactManagedAttributes<T, P>
+            : ReactManagedAttributes<C, P>;
+
+        interface IntrinsicAttributes extends React.Attributes {}
+        interface IntrinsicClassAttributes<T> extends React.ClassAttributes<T> {}
+
+        interface IntrinsicElements {
+            // HTML
+            a: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
+            abbr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            address: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            area: React.DetailedHTMLProps<React.AreaHTMLAttributes<HTMLAreaElement>, HTMLAreaElement>;
+            article: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            aside: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            audio: React.DetailedHTMLProps<React.AudioHTMLAttributes<HTMLAudioElement>, HTMLAudioElement>;
+            b: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            base: React.DetailedHTMLProps<React.BaseHTMLAttributes<HTMLBaseElement>, HTMLBaseElement>;
+            bdi: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            bdo: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            big: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            blockquote: React.DetailedHTMLProps<React.BlockquoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+            body: React.DetailedHTMLProps<React.HTMLAttributes<HTMLBodyElement>, HTMLBodyElement>;
+            br: React.DetailedHTMLProps<React.HTMLAttributes<HTMLBRElement>, HTMLBRElement>;
+            button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
+            canvas: React.DetailedHTMLProps<React.CanvasHTMLAttributes<HTMLCanvasElement>, HTMLCanvasElement>;
+            caption: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            center: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            cite: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            code: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            col: React.DetailedHTMLProps<React.ColHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+            colgroup: React.DetailedHTMLProps<React.ColgroupHTMLAttributes<HTMLTableColElement>, HTMLTableColElement>;
+            data: React.DetailedHTMLProps<React.DataHTMLAttributes<HTMLDataElement>, HTMLDataElement>;
+            datalist: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDataListElement>, HTMLDataListElement>;
+            dd: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            del: React.DetailedHTMLProps<React.DelHTMLAttributes<HTMLModElement>, HTMLModElement>;
+            details: React.DetailedHTMLProps<React.DetailsHTMLAttributes<HTMLDetailsElement>, HTMLDetailsElement>;
+            dfn: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            dialog: React.DetailedHTMLProps<React.DialogHTMLAttributes<HTMLDialogElement>, HTMLDialogElement>;
+            div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
+            dl: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDListElement>, HTMLDListElement>;
+            dt: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            em: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            embed: React.DetailedHTMLProps<React.EmbedHTMLAttributes<HTMLEmbedElement>, HTMLEmbedElement>;
+            fieldset: React.DetailedHTMLProps<React.FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>;
+            figcaption: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            figure: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            footer: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            form: React.DetailedHTMLProps<React.FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;
+            h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h2: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h3: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h4: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h5: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            h6: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>;
+            head: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadElement>, HTMLHeadElement>;
+            header: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            hgroup: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            hr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHRElement>, HTMLHRElement>;
+            html: React.DetailedHTMLProps<React.HtmlHTMLAttributes<HTMLHtmlElement>, HTMLHtmlElement>;
+            i: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            iframe: React.DetailedHTMLProps<React.IframeHTMLAttributes<HTMLIFrameElement>, HTMLIFrameElement>;
+            img: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>;
+            input: React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;
+            ins: React.DetailedHTMLProps<React.InsHTMLAttributes<HTMLModElement>, HTMLModElement>;
+            kbd: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            keygen: React.DetailedHTMLProps<React.KeygenHTMLAttributes<HTMLElement>, HTMLElement>;
+            label: React.DetailedHTMLProps<React.LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>;
+            legend: React.DetailedHTMLProps<React.HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>;
+            li: React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
+            link: React.DetailedHTMLProps<React.LinkHTMLAttributes<HTMLLinkElement>, HTMLLinkElement>;
+            main: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            map: React.DetailedHTMLProps<React.MapHTMLAttributes<HTMLMapElement>, HTMLMapElement>;
+            mark: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            menu: React.DetailedHTMLProps<React.MenuHTMLAttributes<HTMLElement>, HTMLElement>;
+            menuitem: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            meta: React.DetailedHTMLProps<React.MetaHTMLAttributes<HTMLMetaElement>, HTMLMetaElement>;
+            meter: React.DetailedHTMLProps<React.MeterHTMLAttributes<HTMLMeterElement>, HTMLMeterElement>;
+            nav: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            noindex: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            noscript: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            object: React.DetailedHTMLProps<React.ObjectHTMLAttributes<HTMLObjectElement>, HTMLObjectElement>;
+            ol: React.DetailedHTMLProps<React.OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>;
+            optgroup: React.DetailedHTMLProps<React.OptgroupHTMLAttributes<HTMLOptGroupElement>, HTMLOptGroupElement>;
+            option: React.DetailedHTMLProps<React.OptionHTMLAttributes<HTMLOptionElement>, HTMLOptionElement>;
+            output: React.DetailedHTMLProps<React.OutputHTMLAttributes<HTMLOutputElement>, HTMLOutputElement>;
+            p: React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>;
+            param: React.DetailedHTMLProps<React.ParamHTMLAttributes<HTMLParamElement>, HTMLParamElement>;
+            picture: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            pre: React.DetailedHTMLProps<React.HTMLAttributes<HTMLPreElement>, HTMLPreElement>;
+            progress: React.DetailedHTMLProps<React.ProgressHTMLAttributes<HTMLProgressElement>, HTMLProgressElement>;
+            q: React.DetailedHTMLProps<React.QuoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>;
+            rp: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            rt: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            ruby: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            s: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            samp: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            search: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            slot: React.DetailedHTMLProps<React.SlotHTMLAttributes<HTMLSlotElement>, HTMLSlotElement>;
+            script: React.DetailedHTMLProps<React.ScriptHTMLAttributes<HTMLScriptElement>, HTMLScriptElement>;
+            section: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            select: React.DetailedHTMLProps<React.SelectHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>;
+            small: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            source: React.DetailedHTMLProps<React.SourceHTMLAttributes<HTMLSourceElement>, HTMLSourceElement>;
+            span: React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
+            strong: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            style: React.DetailedHTMLProps<React.StyleHTMLAttributes<HTMLStyleElement>, HTMLStyleElement>;
+            sub: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            summary: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            sup: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            table: React.DetailedHTMLProps<React.TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>;
+            template: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTemplateElement>, HTMLTemplateElement>;
+            tbody: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            td: React.DetailedHTMLProps<React.TdHTMLAttributes<HTMLTableDataCellElement>, HTMLTableDataCellElement>;
+            textarea: React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>;
+            tfoot: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            th: React.DetailedHTMLProps<React.ThHTMLAttributes<HTMLTableHeaderCellElement>, HTMLTableHeaderCellElement>;
+            thead: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableSectionElement>, HTMLTableSectionElement>;
+            time: React.DetailedHTMLProps<React.TimeHTMLAttributes<HTMLTimeElement>, HTMLTimeElement>;
+            title: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTitleElement>, HTMLTitleElement>;
+            tr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>;
+            track: React.DetailedHTMLProps<React.TrackHTMLAttributes<HTMLTrackElement>, HTMLTrackElement>;
+            u: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            ul: React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>;
+            "var": React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            video: React.DetailedHTMLProps<React.VideoHTMLAttributes<HTMLVideoElement>, HTMLVideoElement>;
+            wbr: React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>;
+            webview: React.DetailedHTMLProps<React.WebViewHTMLAttributes<HTMLWebViewElement>, HTMLWebViewElement>;
+
+            // SVG
+            svg: React.SVGProps<SVGSVGElement>;
+
+            animate: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateElement but is not in TypeScript's lib.dom.d.ts for now.
+            animateMotion: React.SVGProps<SVGElement>;
+            animateTransform: React.SVGProps<SVGElement>; // TODO: It is SVGAnimateTransformElement but is not in TypeScript's lib.dom.d.ts for now.
+            circle: React.SVGProps<SVGCircleElement>;
+            clipPath: React.SVGProps<SVGClipPathElement>;
+            defs: React.SVGProps<SVGDefsElement>;
+            desc: React.SVGProps<SVGDescElement>;
+            ellipse: React.SVGProps<SVGEllipseElement>;
+            feBlend: React.SVGProps<SVGFEBlendElement>;
+            feColorMatrix: React.SVGProps<SVGFEColorMatrixElement>;
+            feComponentTransfer: React.SVGProps<SVGFEComponentTransferElement>;
+            feComposite: React.SVGProps<SVGFECompositeElement>;
+            feConvolveMatrix: React.SVGProps<SVGFEConvolveMatrixElement>;
+            feDiffuseLighting: React.SVGProps<SVGFEDiffuseLightingElement>;
+            feDisplacementMap: React.SVGProps<SVGFEDisplacementMapElement>;
+            feDistantLight: React.SVGProps<SVGFEDistantLightElement>;
+            feDropShadow: React.SVGProps<SVGFEDropShadowElement>;
+            feFlood: React.SVGProps<SVGFEFloodElement>;
+            feFuncA: React.SVGProps<SVGFEFuncAElement>;
+            feFuncB: React.SVGProps<SVGFEFuncBElement>;
+            feFuncG: React.SVGProps<SVGFEFuncGElement>;
+            feFuncR: React.SVGProps<SVGFEFuncRElement>;
+            feGaussianBlur: React.SVGProps<SVGFEGaussianBlurElement>;
+            feImage: React.SVGProps<SVGFEImageElement>;
+            feMerge: React.SVGProps<SVGFEMergeElement>;
+            feMergeNode: React.SVGProps<SVGFEMergeNodeElement>;
+            feMorphology: React.SVGProps<SVGFEMorphologyElement>;
+            feOffset: React.SVGProps<SVGFEOffsetElement>;
+            fePointLight: React.SVGProps<SVGFEPointLightElement>;
+            feSpecularLighting: React.SVGProps<SVGFESpecularLightingElement>;
+            feSpotLight: React.SVGProps<SVGFESpotLightElement>;
+            feTile: React.SVGProps<SVGFETileElement>;
+            feTurbulence: React.SVGProps<SVGFETurbulenceElement>;
+            filter: React.SVGProps<SVGFilterElement>;
+            foreignObject: React.SVGProps<SVGForeignObjectElement>;
+            g: React.SVGProps<SVGGElement>;
+            image: React.SVGProps<SVGImageElement>;
+            line: React.SVGLineElementAttributes<SVGLineElement>;
+            linearGradient: React.SVGProps<SVGLinearGradientElement>;
+            marker: React.SVGProps<SVGMarkerElement>;
+            mask: React.SVGProps<SVGMaskElement>;
+            metadata: React.SVGProps<SVGMetadataElement>;
+            mpath: React.SVGProps<SVGElement>;
+            path: React.SVGProps<SVGPathElement>;
+            pattern: React.SVGProps<SVGPatternElement>;
+            polygon: React.SVGProps<SVGPolygonElement>;
+            polyline: React.SVGProps<SVGPolylineElement>;
+            radialGradient: React.SVGProps<SVGRadialGradientElement>;
+            rect: React.SVGProps<SVGRectElement>;
+            set: React.SVGProps<SVGSetElement>;
+            stop: React.SVGProps<SVGStopElement>;
+            switch: React.SVGProps<SVGSwitchElement>;
+            symbol: React.SVGProps<SVGSymbolElement>;
+            text: React.SVGTextElementAttributes<SVGTextElement>;
+            textPath: React.SVGProps<SVGTextPathElement>;
+            tspan: React.SVGProps<SVGTSpanElement>;
+            use: React.SVGProps<SVGUseElement>;
+            view: React.SVGProps<SVGViewElement>;
+        }
+    }
+}
+
+// React.JSX needs to point to global.JSX to keep global module augmentations intact.
+// But we can't access global.JSX so we need to create these aliases instead.
+// Once the global JSX namespace will be removed we replace React.JSX with the contents of global.JSX
+interface GlobalJSXElement extends JSX.Element {}
+interface GlobalJSXElementClass extends JSX.ElementClass {}
+interface GlobalJSXElementAttributesProperty extends JSX.ElementAttributesProperty {}
+interface GlobalJSXElementChildrenAttribute extends JSX.ElementChildrenAttribute {}
+
+type GlobalJSXLibraryManagedAttributes<C, P> = JSX.LibraryManagedAttributes<C, P>;
+
+interface GlobalJSXIntrinsicAttributes extends JSX.IntrinsicAttributes {}
+interface GlobalJSXIntrinsicClassAttributes<T> extends JSX.IntrinsicClassAttributes<T> {}
+
+interface GlobalJSXIntrinsicElements extends JSX.IntrinsicElements {}
diff --git a/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts b/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..87d1dfe383eb10beea8279d6f3c30a5881c81810
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts
@@ -0,0 +1,44 @@
+import * as React from "./";
+export { Fragment } from "./";
+
+export namespace JSX {
+    interface Element extends React.JSX.Element {}
+    interface ElementClass extends React.JSX.ElementClass {}
+    interface ElementAttributesProperty extends React.JSX.ElementAttributesProperty {}
+    interface ElementChildrenAttribute extends React.JSX.ElementChildrenAttribute {}
+    type LibraryManagedAttributes<C, P> = React.JSX.LibraryManagedAttributes<C, P>;
+    interface IntrinsicAttributes extends React.JSX.IntrinsicAttributes {}
+    interface IntrinsicClassAttributes<T> extends React.JSX.IntrinsicClassAttributes<T> {}
+    interface IntrinsicElements extends React.JSX.IntrinsicElements {}
+}
+
+export interface JSXSource {
+    /**
+     * The source file where the element originates from.
+     */
+    fileName?: string | undefined;
+
+    /**
+     * The line number where the element was created.
+     */
+    lineNumber?: number | undefined;
+
+    /**
+     * The column number where the element was created.
+     */
+    columnNumber?: number | undefined;
+}
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsxDEV(
+    type: React.ElementType,
+    props: unknown,
+    key: React.Key | undefined,
+    isStatic: boolean,
+    source?: JSXSource,
+    self?: unknown,
+): React.ReactElement;
diff --git a/node_modules/@types/react/ts5.0/jsx-runtime.d.ts b/node_modules/@types/react/ts5.0/jsx-runtime.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8cc3b9745287199949ceea96831a4786b176f6f6
--- /dev/null
+++ b/node_modules/@types/react/ts5.0/jsx-runtime.d.ts
@@ -0,0 +1,35 @@
+import * as React from "./";
+export { Fragment } from "./";
+
+export namespace JSX {
+    interface Element extends React.JSX.Element {}
+    interface ElementClass extends React.JSX.ElementClass {}
+    interface ElementAttributesProperty extends React.JSX.ElementAttributesProperty {}
+    interface ElementChildrenAttribute extends React.JSX.ElementChildrenAttribute {}
+    type LibraryManagedAttributes<C, P> = React.JSX.LibraryManagedAttributes<C, P>;
+    interface IntrinsicAttributes extends React.JSX.IntrinsicAttributes {}
+    interface IntrinsicClassAttributes<T> extends React.JSX.IntrinsicClassAttributes<T> {}
+    interface IntrinsicElements extends React.JSX.IntrinsicElements {}
+}
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsx(
+    type: React.ElementType,
+    props: unknown,
+    key?: React.Key,
+): React.ReactElement;
+
+/**
+ * Create a React element.
+ *
+ * You should not use this function directly. Use JSX and a transpiler instead.
+ */
+export function jsxs(
+    type: React.ElementType,
+    props: unknown,
+    key?: React.Key,
+): React.ReactElement;
diff --git a/node_modules/@types/warning/LICENSE b/node_modules/@types/warning/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..9e841e7a26e4eb057b24511e7b92d42b257a80e5
--- /dev/null
+++ b/node_modules/@types/warning/LICENSE
@@ -0,0 +1,21 @@
+    MIT License
+
+    Copyright (c) Microsoft Corporation.
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE
diff --git a/node_modules/@types/warning/README.md b/node_modules/@types/warning/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b0e2ee21fab366b20e5050f9efb3a1868698f37d
--- /dev/null
+++ b/node_modules/@types/warning/README.md
@@ -0,0 +1,21 @@
+# Installation
+> `npm install --save @types/warning`
+
+# Summary
+This package contains type definitions for warning (https://github.com/BerkeleyTrue/warning).
+
+# Details
+Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/warning.
+## [index.d.ts](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/warning/index.d.ts)
+````ts
+declare const warning: (condition: any, format?: string, ...extra: any[]) => void;
+export = warning;
+
+````
+
+### Additional Details
+ * Last updated: Tue, 07 Nov 2023 15:11:36 GMT
+ * Dependencies: none
+
+# Credits
+These definitions were written by [Chi Vinh Le](https://github.com/cvle).
diff --git a/node_modules/@types/warning/index.d.ts b/node_modules/@types/warning/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8ca4593c7c687679196cf440f77e734bfdb3030b
--- /dev/null
+++ b/node_modules/@types/warning/index.d.ts
@@ -0,0 +1,2 @@
+declare const warning: (condition: any, format?: string, ...extra: any[]) => void;
+export = warning;
diff --git a/node_modules/@types/warning/package.json b/node_modules/@types/warning/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c847525b2acc13d2f1da2836d35863c170dfff12
--- /dev/null
+++ b/node_modules/@types/warning/package.json
@@ -0,0 +1,53 @@
+{
+  "_from": "@types/warning@^3.0.0",
+  "_id": "@types/warning@3.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==",
+  "_location": "/@types/warning",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "@types/warning@^3.0.0",
+    "name": "@types/warning",
+    "escapedName": "@types%2fwarning",
+    "scope": "@types",
+    "rawSpec": "^3.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0"
+  },
+  "_requiredBy": [
+    "/@restart/ui"
+  ],
+  "_resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz",
+  "_shasum": "d1884c8cc4a426d1ac117ca2611bf333834c6798",
+  "_spec": "@types/warning@^3.0.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/@restart/ui",
+  "bugs": {
+    "url": "https://github.com/DefinitelyTyped/DefinitelyTyped/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Chi Vinh Le",
+      "url": "https://github.com/cvle"
+    }
+  ],
+  "dependencies": {},
+  "deprecated": false,
+  "description": "TypeScript definitions for warning",
+  "homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/warning",
+  "license": "MIT",
+  "main": "",
+  "name": "@types/warning",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/DefinitelyTyped/DefinitelyTyped.git",
+    "directory": "types/warning"
+  },
+  "scripts": {},
+  "typeScriptVersion": "4.5",
+  "types": "index.d.ts",
+  "typesPublisherContentHash": "31a2af9a6e16ffc50a5005c5fe2ed2791e3cd2529e9090eae49a34c0446b7a70",
+  "version": "3.0.3"
+}
diff --git a/node_modules/classnames/HISTORY.md b/node_modules/classnames/HISTORY.md
new file mode 100644
index 0000000000000000000000000000000000000000..7a7cef26b29a981d635dcb928d0d67fee9cda763
--- /dev/null
+++ b/node_modules/classnames/HISTORY.md
@@ -0,0 +1,120 @@
+# Changelog
+
+## v2.5.1 / 2023-12-29
+
+- Remove `workspaces` field from package ([#350](https://github.com/JedWatson/classnames/pull/350))
+
+## v2.5.0 / 2023-12-27
+
+- Restore ability to pass a TypeScript `interface` ([#341](https://github.com/JedWatson/classnames/pull/341))
+- Add `exports` field to package ([#342](https://github.com/JedWatson/classnames/pull/342))
+
+## v2.4.0 / 2023-12-26
+
+- Use string concatenation to increase performance thanks [Jon Koops](https://github.com/jonkoops) ([#336](https://github.com/JedWatson/classnames/pull/336))
+
+## v2.3.3 / 2023-12-21
+
+- Fix default export, thanks [Remco Haszing](https://github.com/remcohaszing) ([#301](https://github.com/JedWatson/classnames/pull/301))
+- Fix types for read-only arrays, thanks [Ben Thompson](https://github.com/BenGearset) ([#307](https://github.com/JedWatson/classnames/pull/307))
+- Replace README examples with functional-style components, thanks [JoeDGit](https://github.com/JoeDGit) ([#303](https://github.com/JedWatson/classnames/pull/303))
+
+## v2.3.2 / 2022-09-13
+
+- Fix TypeScript types when using require, thanks [Mark Dalgleish](https://github.com/markdalgleish) ([#276](https://github.com/JedWatson/classnames/pull/276))
+- Fix toString as `[Object object]` in a vm, thanks [Remco Haszing](https://github.com/remcohaszing) ([#281](https://github.com/JedWatson/classnames/pull/281))
+
+## v2.3.1 / 2021-04-03
+
+- Fix bind/dedupe TypeScript types exports
+- Fix mapping Value types, thanks [Remco Haszing](https://github.com/remcohaszing)
+- Removed non-existent named exports from types, thanks [Remco Haszing](https://github.com/remcohaszing)
+
+## v2.3.0 / 2021-04-01
+
+- Added TypeScript types
+- Added consistent support for custom `.toString()` methods on arguments, thanks [Stanislav Titenko](https://github.com/resetko)
+
+## v2.2.6 / 2018-06-08
+
+- Fixed compatibility issue with usage in an es module environment
+
+## v2.2.5 / 2016-05-02
+
+- Improved performance of `dedupe` variant even further, thanks [Andres Suarez](https://github.com/zertosh)
+
+## v2.2.4 / 2016-04-25
+
+- Improved performance of `dedupe` variant by about 2x, thanks [Bartosz Gościński](https://github.com/bgoscinski)
+
+## v2.2.3 / 2016-01-05
+
+- Updated `bind` variant to use `[].join(' ')` as per the main script in 2.2.2
+
+## v2.2.2 / 2016-01-04
+
+- Switched from string concatenation to `[].join(' ')` for a slight performance gain in the main function.
+
+## v2.2.1 / 2015-11-26
+
+- Add deps parameter to the AMD module, fixes an issue using the Dojo loader, thanks [Chris Jordan](https://github.com/flipperkid)
+
+## v2.2.0 / 2015-10-18
+
+- added a new `bind` variant for use with [css-modules](https://github.com/css-modules/css-modules) and similar abstractions, thanks to [Kirill Yakovenko](https://github.com/blia)
+
+## v2.1.5 / 2015-09-30
+
+- reverted a new usage of `Object.keys` in `dedupe.js` that slipped through in the last release
+
+## v2.1.4 / 2015-09-30
+
+- new case added to benchmarks
+- safer `hasOwnProperty` check
+- AMD module is now named, so you can do the following:
+
+```
+define(["classnames"], function (classNames) {
+  var style = classNames("foo", "bar");
+  // ...
+});
+```
+
+## v2.1.3 / 2015-07-02
+
+- updated UMD wrapper to support AMD and CommonJS on the same pacge
+
+## v2.1.2 / 2015-05-28
+
+- added a proper UMD wrapper
+
+## v2.1.1 / 2015-05-06
+
+- minor performance improvement thanks to type caching
+- improved benchmarking and results output
+
+## v2.1.0 / 2015-05-05
+
+- added alternate `dedupe` version of classNames, which is slower (10x) but ensures that if a class is added then overridden by a falsy value in a subsequent argument, it is excluded from the result.
+
+## v2.0.0 / 2015-05-03
+
+- performance improvement; switched to `Array.isArray` for type detection, which is much faster in modern browsers. A polyfill is now required for IE8 support, see the Readme for details.
+
+## v1.2.2 / 2015-04-28
+
+- license comment updates to simiplify certain build scenarios
+
+## v1.2.1 / 2015-04-22
+
+- added safe exporting for requireJS usage
+- clarified Bower usage and instructions
+
+## v1.2.0 / 2015-03-17
+
+- added comprehensive support for array arguments, including nested arrays
+- simplified code slightly
+
+## Previous
+
+Please see the git history for the details of previous versions.
diff --git a/node_modules/classnames/LICENSE b/node_modules/classnames/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4117bfae030934891591445c0728058790f6f8f4
--- /dev/null
+++ b/node_modules/classnames/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Jed Watson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/classnames/README.md b/node_modules/classnames/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..0d67b8a576fd22292178dcd9e49bf57ee8e645ad
--- /dev/null
+++ b/node_modules/classnames/README.md
@@ -0,0 +1,219 @@
+# Classnames
+
+> A simple JavaScript utility for conditionally joining classNames together.
+
+<p>
+  <a aria-label="NPM version" href="https://www.npmjs.com/package/classnames">
+    <img alt="" src="https://img.shields.io/npm/v/classnames.svg?style=for-the-badge&labelColor=0869B8">
+  </a>
+  <a aria-label="License" href="#">
+    <img alt="" src="https://img.shields.io/npm/l/classnames.svg?style=for-the-badge&labelColor=579805">
+  </a>
+  <a aria-label="Thinkmill Logo" href="https://www.thinkmill.com.au/open-source?utm_campaign=github-classnames">
+    <img src="https://img.shields.io/badge/Sponsored%20BY%20Thinkmill-ed0000.svg?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTg2IiBoZWlnaHQ9IjU4NiIgdmlld0JveD0iMCAwIDU4NiA1ODYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xOTk2XzQwNikiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTU4NiAyOTNDNTg2IDQ1NC44MTkgNDU0LjgxOSA1ODYgMjkzIDU4NkMxMzEuMTgxIDU4NiAwIDQ1NC44MTkgMCAyOTNDMCAxMzEuMTgxIDEzMS4xODEgMCAyOTMgMEM0NTQuODE5IDAgNTg2IDEzMS4xODEgNTg2IDI5M1pNMjA1Ljc3NiAzNTguOTQ0QzE5MS4zNzYgMzU4Ljk0NCAxODUuOTA0IDM1Mi4zMiAxODUuOTA0IDMzNS45MDRWMjYyLjc1MkgyMTQuNDE2VjIzNy42OTZIMTg1LjkwNFYyMDEuMTJIMTUzLjA3MlYyMzcuNjk2SDEyOC41OTJWMjYyLjc1MkgxNTMuMDcyVjM0MC44QzE1My4wNzIgMzcyLjc2OCAxNjYuNjA4IDM4NS43MjggMTk3LjQyNCAzODUuNzI4QzIwMy40NzIgMzg1LjcyOCAyMTAuOTYgMzg0LjU3NiAyMTUuODU2IDM4My4xMzZWMzU3LjUwNEMyMTMuNTUyIDM1OC4zNjggMjA5LjUyIDM1OC45NDQgMjA1Ljc3NiAzNTguOTQ0Wk00MDcuMzc2IDIzNC4yNEMzODUuMiAyMzQuMjQgMzcxLjA4OCAyNDQuMDMyIDM2MC40MzIgMjYwLjczNkMzNTIuOTQ0IDI0My40NTYgMzM3LjM5MiAyMzQuMjQgMzE3LjIzMiAyMzQuMjRDMjk5Ljk1MiAyMzQuMjQgMjg2Ljk5MiAyNDEuMTUyIDI3Ni42MjQgMjU1LjI2NEgyNzYuMDQ4VjIzNy42OTZIMjQ0LjY1NlYzODRIMjc3LjQ4OFYzMDUuNjY0QzI3Ny40ODggMjc3LjQ0IDI4OC43MiAyNjAuNzM2IDMwOC4zMDQgMjYwLjczNkMzMjUuMjk2IDI2MC43MzYgMzM0LjUxMiAyNzIuODMyIDMzNC41MTIgMjkzLjU2OFYzODRIMzY3LjM0NFYzMDUuMDg4QzM2Ny4zNDQgMjc3LjE1MiAzNzguODY0IDI2MC43MzYgMzk4LjE2IDI2MC43MzZDNDE0LjU3NiAyNjAuNzM2IDQyNC42NTYgMjcxLjEwNCA0MjQuNjU2IDI5Ny4wMjRWMzg0SDQ1Ny40ODhWMjkzLjg1NkM0NTcuNDg4IDI1NC40IDQzOC40OCAyMzQuMjQgNDA3LjM3NiAyMzQuMjRaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzE5OTZfNDA2Ij4KPHJlY3Qgd2lkdGg9IjU4NiIgaGVpZ2h0PSI1ODYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==&labelColor=C60200&locoColor=white&logoWidth=0">
+  </a>
+
+  </p>
+
+Install from the [npm registry](https://www.npmjs.com/) with your package manager:
+```bash
+npm install classnames
+```
+
+Use with [Node.js](https://nodejs.org/en/), [Browserify](https://browserify.org/), or [webpack](https://webpack.github.io/):
+
+```js
+const classNames = require('classnames');
+classNames('foo', 'bar'); // => 'foo bar'
+```
+
+Alternatively, you can simply include `index.js` on your page with a standalone `<script>` tag and it will export a global `classNames` method, or define the module if you are using RequireJS.
+
+### Project philosophy
+
+We take the stability and performance of this package seriously, because it is run millions of times a day in browsers all around the world. Updates are thoroughly reviewed for performance implications before being released, and we have a comprehensive test suite.
+
+Classnames follows the [SemVer](https://semver.org/) standard for versioning.
+
+There is also a [Changelog](https://github.com/JedWatson/classnames/blob/master/HISTORY.md).
+
+## Usage
+
+The `classNames` function takes any number of arguments which can be a string or object.
+The argument `'foo'` is short for `{ foo: true }`. If the value associated with a given key is falsy, that key won't be included in the output.
+
+```js
+classNames('foo', 'bar'); // => 'foo bar'
+classNames('foo', { bar: true }); // => 'foo bar'
+classNames({ 'foo-bar': true }); // => 'foo-bar'
+classNames({ 'foo-bar': false }); // => ''
+classNames({ foo: true }, { bar: true }); // => 'foo bar'
+classNames({ foo: true, bar: true }); // => 'foo bar'
+
+// lots of arguments of various types
+classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'
+
+// other falsy values are just ignored
+classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
+```
+
+Arrays will be recursively flattened as per the rules above:
+
+```js
+const arr = ['b', { c: true, d: false }];
+classNames('a', arr); // => 'a b c'
+```
+
+### Dynamic class names with ES2015
+
+If you're in an environment that supports [computed keys](https://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer) (available in ES2015 and Babel) you can use dynamic class names:
+
+```js
+let buttonType = 'primary';
+classNames({ [`btn-${buttonType}`]: true });
+```
+
+### Usage with React.js
+
+This package is the official replacement for `classSet`, which was originally shipped in the React.js Addons bundle.
+
+One of its primary use cases is to make dynamic and conditional `className` props simpler to work with (especially more so than conditional string manipulation). So where you may have the following code to generate a `className` prop for a `<button>` in React:
+
+```js
+import React, { useState } from 'react';
+
+export default function Button (props) {
+	const [isPressed, setIsPressed] = useState(false);
+	const [isHovered, setIsHovered] = useState(false);
+
+	let btnClass = 'btn';
+	if (isPressed) btnClass += ' btn-pressed';
+	else if (isHovered) btnClass += ' btn-over';
+
+	return (
+		<button
+			className={btnClass}
+			onMouseDown={() => setIsPressed(true)}
+			onMouseUp={() => setIsPressed(false)}
+			onMouseEnter={() => setIsHovered(true)}
+			onMouseLeave={() => setIsHovered(false)}
+		>
+			{props.label}
+		</button>
+	);
+}
+```
+
+You can express the conditional classes more simply as an object:
+
+```js
+import React, { useState } from 'react';
+import classNames from 'classnames';
+
+export default function Button (props) {
+	const [isPressed, setIsPressed] = useState(false);
+	const [isHovered, setIsHovered] = useState(false);
+
+	const btnClass = classNames({
+		btn: true,
+		'btn-pressed': isPressed,
+		'btn-over': !isPressed && isHovered,
+	});
+
+	return (
+		<button
+			className={btnClass}
+			onMouseDown={() => setIsPressed(true)}
+			onMouseUp={() => setIsPressed(false)}
+			onMouseEnter={() => setIsHovered(true)}
+			onMouseLeave={() => setIsHovered(false)}
+		>
+			{props.label}
+		</button>
+	);
+}
+```
+
+Because you can mix together object, array and string arguments, supporting optional `className` props is also simpler as only truthy arguments get included in the result:
+
+```js
+const btnClass = classNames('btn', this.props.className, {
+	'btn-pressed': isPressed,
+	'btn-over': !isPressed && isHovered,
+});
+```
+
+### Alternate `dedupe` version
+
+There is an alternate version of `classNames` available which correctly dedupes classes and ensures that falsy classes specified in later arguments are excluded from the result set.
+
+This version is slower (about 5x) so it is offered as an opt-in.
+
+To use the dedupe version with Node.js, Browserify, or webpack:
+
+```js
+const classNames = require('classnames/dedupe');
+
+classNames('foo', 'foo', 'bar'); // => 'foo bar'
+classNames('foo', { foo: false, bar: true }); // => 'bar'
+```
+
+For standalone (global / AMD) use, include `dedupe.js` in a `<script>` tag on your page.
+
+### Alternate `bind` version (for [css-modules](https://github.com/css-modules/css-modules))
+
+If you are using [css-modules](https://github.com/css-modules/css-modules), or a similar approach to abstract class 'names' and the real `className` values that are actually output to the DOM, you may want to use the `bind` variant.
+
+_Note that in ES2015 environments, it may be better to use the "dynamic class names" approach documented above._
+
+```js
+const classNames = require('classnames/bind');
+
+const styles = {
+	foo: 'abc',
+	bar: 'def',
+	baz: 'xyz',
+};
+
+const cx = classNames.bind(styles);
+
+const className = cx('foo', ['bar'], { baz: true }); // => 'abc def xyz'
+```
+
+Real-world example:
+
+```js
+/* components/submit-button.js */
+import { useState } from 'react';
+import classNames from 'classnames/bind';
+import styles from './submit-button.css';
+
+const cx = classNames.bind(styles);
+
+export default function SubmitButton ({ store, form }) {
+  const [submissionInProgress, setSubmissionInProgress] = useState(store.submissionInProgress);
+  const [errorOccurred, setErrorOccurred] = useState(store.errorOccurred);
+  const [valid, setValid] = useState(form.valid);
+
+  const text = submissionInProgress ? 'Processing...' : 'Submit';
+  const className = cx({
+    base: true,
+    inProgress: submissionInProgress,
+    error: errorOccurred,
+    disabled: valid,
+  });
+
+  return <button className={className}>{text}</button>;
+}
+```
+
+## Polyfills needed to support older browsers
+
+#### `classNames >=2.0.0`
+
+`Array.isArray`: see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray) for details about unsupported older browsers (e.g. <= IE8) and a simple polyfill.
+
+## LICENSE [MIT](LICENSE)
+
+Copyright (c) 2018 Jed Watson.
+Copyright of the Typescript bindings are respective of each contributor listed in the definition file.
diff --git a/node_modules/classnames/bind.d.ts b/node_modules/classnames/bind.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f89f787c58e414cae13e61597473cc1af4cc4dc0
--- /dev/null
+++ b/node_modules/classnames/bind.d.ts
@@ -0,0 +1,17 @@
+import { ArgumentArray } from './index.js';
+
+declare namespace classNames {
+	type Binding = Record<string, string>;
+}
+
+interface ClassNames {
+	(this: classNames.Binding | undefined, ...args: ArgumentArray): string;
+
+	default: ClassNames;
+}
+
+declare const classNames: ClassNames;
+
+export as namespace classNames;
+
+export = classNames;
diff --git a/node_modules/classnames/bind.js b/node_modules/classnames/bind.js
new file mode 100644
index 0000000000000000000000000000000000000000..3add1d685a6f84655d31889b0950eeb2deabfe98
--- /dev/null
+++ b/node_modules/classnames/bind.js
@@ -0,0 +1,77 @@
+/*!
+	Copyright (c) 2018 Jed Watson.
+	Licensed under the MIT License (MIT), see
+	http://jedwatson.github.io/classnames
+*/
+/* global define */
+
+(function () {
+	'use strict';
+
+	var hasOwn = {}.hasOwnProperty;
+
+	function classNames () {
+		var classes = '';
+
+		for (var i = 0; i < arguments.length; i++) {
+			var arg = arguments[i];
+			if (arg) {
+				classes = appendClass(classes, parseValue.call(this, arg));
+			}
+		}
+
+		return classes;
+	}
+
+	function parseValue (arg) {
+		if (typeof arg === 'string' || typeof arg === 'number') {
+			return this && this[arg] || arg;
+		}
+
+		if (typeof arg !== 'object') {
+			return '';
+		}
+
+		if (Array.isArray(arg)) {
+			return classNames.apply(this, arg);
+		}
+
+		if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
+			return arg.toString();
+		}
+
+		var classes = '';
+
+		for (var key in arg) {
+			if (hasOwn.call(arg, key) && arg[key]) {
+				classes = appendClass(classes, this && this[key] || key);
+			}
+		}
+
+		return classes;
+	}
+
+	function appendClass (value, newClass) {
+		if (!newClass) {
+			return value;
+		}
+	
+		if (value) {
+			return value + ' ' + newClass;
+		}
+	
+		return value + newClass;
+	}
+
+	if (typeof module !== 'undefined' && module.exports) {
+		classNames.default = classNames;
+		module.exports = classNames;
+	} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
+		// register as 'classnames', consistent with npm package name
+		define('classnames', [], function () {
+			return classNames;
+		});
+	} else {
+		window.classNames = classNames;
+	}
+}());
diff --git a/node_modules/classnames/dedupe.d.ts b/node_modules/classnames/dedupe.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..392248a827148beaa81d0a1cafbcf8592e2bb24a
--- /dev/null
+++ b/node_modules/classnames/dedupe.d.ts
@@ -0,0 +1,5 @@
+import classNames = require('./index.js');
+
+export as namespace classNames;
+
+export = classNames;
diff --git a/node_modules/classnames/dedupe.js b/node_modules/classnames/dedupe.js
new file mode 100644
index 0000000000000000000000000000000000000000..3a7264b71e0e15670a491bfe07d885669a0a1bc7
--- /dev/null
+++ b/node_modules/classnames/dedupe.js
@@ -0,0 +1,115 @@
+/*!
+	Copyright (c) 2018 Jed Watson.
+	Licensed under the MIT License (MIT), see
+	http://jedwatson.github.io/classnames
+*/
+/* global define */
+
+(function () {
+	'use strict';
+
+	var classNames = (function () {
+		// don't inherit from Object so we can skip hasOwnProperty check later
+		// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232
+		function StorageObject() {}
+		StorageObject.prototype = Object.create(null);
+
+		function _parseArray (resultSet, array) {
+			var length = array.length;
+
+			for (var i = 0; i < length; ++i) {
+				_parse(resultSet, array[i]);
+			}
+		}
+
+		var hasOwn = {}.hasOwnProperty;
+
+		function _parseNumber (resultSet, num) {
+			resultSet[num] = true;
+		}
+
+		function _parseObject (resultSet, object) {
+			if (object.toString !== Object.prototype.toString && !object.toString.toString().includes('[native code]')) {
+				resultSet[object.toString()] = true;
+				return;
+			}
+
+			for (var k in object) {
+				if (hasOwn.call(object, k)) {
+					// set value to false instead of deleting it to avoid changing object structure
+					// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions
+					resultSet[k] = !!object[k];
+				}
+			}
+		}
+
+		var SPACE = /\s+/;
+		function _parseString (resultSet, str) {
+			var array = str.split(SPACE);
+			var length = array.length;
+
+			for (var i = 0; i < length; ++i) {
+				resultSet[array[i]] = true;
+			}
+		}
+
+		function _parse (resultSet, arg) {
+			if (!arg) return;
+			var argType = typeof arg;
+
+			// 'foo bar'
+			if (argType === 'string') {
+				_parseString(resultSet, arg);
+
+			// ['foo', 'bar', ...]
+			} else if (Array.isArray(arg)) {
+				_parseArray(resultSet, arg);
+
+			// { 'foo': true, ... }
+			} else if (argType === 'object') {
+				_parseObject(resultSet, arg);
+
+			// '130'
+			} else if (argType === 'number') {
+				_parseNumber(resultSet, arg);
+			}
+		}
+
+		function _classNames () {
+			// don't leak arguments
+			// https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
+			var len = arguments.length;
+			var args = Array(len);
+			for (var i = 0; i < len; i++) {
+				args[i] = arguments[i];
+			}
+
+			var classSet = new StorageObject();
+			_parseArray(classSet, args);
+
+			var list = [];
+
+			for (var k in classSet) {
+				if (classSet[k]) {
+					list.push(k)
+				}
+			}
+
+			return list.join(' ');
+		}
+
+		return _classNames;
+	})();
+
+	if (typeof module !== 'undefined' && module.exports) {
+		classNames.default = classNames;
+		module.exports = classNames;
+	} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
+		// register as 'classnames', consistent with npm package name
+		define('classnames', [], function () {
+			return classNames;
+		});
+	} else {
+		window.classNames = classNames;
+	}
+}());
diff --git a/node_modules/classnames/index.d.ts b/node_modules/classnames/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..65efa7da1d3060d2d079c8aa6250d84880a7ab9d
--- /dev/null
+++ b/node_modules/classnames/index.d.ts
@@ -0,0 +1,32 @@
+// LICENSE is MIT
+//
+// Copyright (c) 2018
+//   Dave Keen <http://www.keendevelopment.ch>
+//   Adi Dahiya <https://github.com/adidahiya>
+//   Jason Killian <https://github.com/JKillian>
+//   Sean Kelley <https://github.com/seansfkelley>
+//   Michal Adamczyk <https://github.com/mradamczyk>
+//   Marvin Hagemeister <https://github.com/marvinhagemeister>
+
+declare namespace classNames {
+  type Value = string | number | boolean | undefined | null;
+  type Mapping = Record<string, any>;
+  interface ArgumentArray extends Array<Argument> {}
+  interface ReadonlyArgumentArray extends ReadonlyArray<Argument> {}
+  type Argument = Value | Mapping | ArgumentArray | ReadonlyArgumentArray;
+}
+
+interface ClassNames {
+	(...args: classNames.ArgumentArray): string;
+
+	default: ClassNames;
+}
+
+/**
+ * A simple JavaScript utility for conditionally joining classNames together.
+ */
+declare const classNames: ClassNames;
+
+export as namespace classNames;
+
+export = classNames;
diff --git a/node_modules/classnames/index.js b/node_modules/classnames/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..a42ea92720edc23928a5fe58253a417ce4d4bf66
--- /dev/null
+++ b/node_modules/classnames/index.js
@@ -0,0 +1,77 @@
+/*!
+	Copyright (c) 2018 Jed Watson.
+	Licensed under the MIT License (MIT), see
+	http://jedwatson.github.io/classnames
+*/
+/* global define */
+
+(function () {
+	'use strict';
+
+	var hasOwn = {}.hasOwnProperty;
+
+	function classNames () {
+		var classes = '';
+
+		for (var i = 0; i < arguments.length; i++) {
+			var arg = arguments[i];
+			if (arg) {
+				classes = appendClass(classes, parseValue(arg));
+			}
+		}
+
+		return classes;
+	}
+
+	function parseValue (arg) {
+		if (typeof arg === 'string' || typeof arg === 'number') {
+			return arg;
+		}
+
+		if (typeof arg !== 'object') {
+			return '';
+		}
+
+		if (Array.isArray(arg)) {
+			return classNames.apply(null, arg);
+		}
+
+		if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
+			return arg.toString();
+		}
+
+		var classes = '';
+
+		for (var key in arg) {
+			if (hasOwn.call(arg, key) && arg[key]) {
+				classes = appendClass(classes, key);
+			}
+		}
+
+		return classes;
+	}
+
+	function appendClass (value, newClass) {
+		if (!newClass) {
+			return value;
+		}
+	
+		if (value) {
+			return value + ' ' + newClass;
+		}
+	
+		return value + newClass;
+	}
+
+	if (typeof module !== 'undefined' && module.exports) {
+		classNames.default = classNames;
+		module.exports = classNames;
+	} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
+		// register as 'classnames', consistent with npm package name
+		define('classnames', [], function () {
+			return classNames;
+		});
+	} else {
+		window.classNames = classNames;
+	}
+}());
diff --git a/node_modules/classnames/package.json b/node_modules/classnames/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..54f75280fbed82e9d55a590780b970331a7657b3
--- /dev/null
+++ b/node_modules/classnames/package.json
@@ -0,0 +1,109 @@
+{
+  "_from": "classnames@^2.3.2",
+  "_id": "classnames@2.5.1",
+  "_inBundle": false,
+  "_integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
+  "_location": "/classnames",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "classnames@^2.3.2",
+    "name": "classnames",
+    "escapedName": "classnames",
+    "rawSpec": "^2.3.2",
+    "saveSpec": null,
+    "fetchSpec": "^2.3.2"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+  "_shasum": "ba774c614be0f016da105c858e7159eae8e7687b",
+  "_spec": "classnames@^2.3.2",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Jed Watson"
+  },
+  "bugs": {
+    "url": "https://github.com/JedWatson/classnames/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A simple utility for conditionally joining classNames together",
+  "devDependencies": {
+    "@rollup/plugin-commonjs": "^25.0.7",
+    "@rollup/plugin-json": "^6.1.0",
+    "@rollup/plugin-node-resolve": "^15.2.3",
+    "classnames-local": "file:.",
+    "classnames-npm": "npm:classnames@*",
+    "http-server": "^14.1.1",
+    "markdown-table": "^3.0.3",
+    "rollup": "^4.9.1",
+    "tinybench": "^2.5.1",
+    "tsd": "^0.30.1"
+  },
+  "exports": {
+    "./package.json": "./package.json",
+    ".": {
+      "types": "./index.d.ts",
+      "default": "./index.js"
+    },
+    "./index.js": {
+      "types": "./index.d.ts",
+      "default": "./index.js"
+    },
+    "./bind": {
+      "types": "./bind.d.ts",
+      "default": "./bind.js"
+    },
+    "./bind.js": {
+      "types": "./bind.d.ts",
+      "default": "./bind.js"
+    },
+    "./dedupe": {
+      "types": "./dedupe.d.ts",
+      "default": "./dedupe.js"
+    },
+    "./dedupe.js": {
+      "types": "./dedupe.d.ts",
+      "default": "./dedupe.js"
+    }
+  },
+  "files": [
+    "HISTORY.md",
+    "LICENSE",
+    "README.md",
+    "*.d.ts",
+    "*.js"
+  ],
+  "homepage": "https://github.com/JedWatson/classnames#readme",
+  "keywords": [
+    "react",
+    "css",
+    "classes",
+    "classname",
+    "classnames",
+    "util",
+    "utility"
+  ],
+  "license": "MIT",
+  "main": "./index.js",
+  "name": "classnames",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/JedWatson/classnames.git"
+  },
+  "scripts": {
+    "bench": "node ./benchmarks/run.js",
+    "bench-browser": "rollup --plugin commonjs,json,node-resolve ./benchmarks/runInBrowser.js --file ./benchmarks/runInBrowser.bundle.js && http-server -c-1 ./benchmarks",
+    "check-types": "tsd",
+    "test": "node --test ./tests/*.mjs"
+  },
+  "tsd": {
+    "directory": "./tests"
+  },
+  "type": "commonjs",
+  "types": "./index.d.ts",
+  "version": "2.5.1"
+}
diff --git a/node_modules/csstype/LICENSE b/node_modules/csstype/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..ac06f6224a2dc6037597897162af62d927f24f49
--- /dev/null
+++ b/node_modules/csstype/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2017-2018 Fredrik Nicol
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/csstype/README.md b/node_modules/csstype/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..75947e1b2e131c17135c62d0c850f9418658947d
--- /dev/null
+++ b/node_modules/csstype/README.md
@@ -0,0 +1,277 @@
+# CSSType
+
+[![npm](https://img.shields.io/npm/v/csstype.svg)](https://www.npmjs.com/package/csstype)
+
+TypeScript and Flow definitions for CSS, generated by [data from MDN](https://github.com/mdn/data). It provides autocompletion and type checking for CSS properties and values.
+
+**TypeScript**
+
+```ts
+import type * as CSS from 'csstype';
+
+const style: CSS.Properties = {
+  colour: 'white', // Type error on property
+  textAlign: 'middle', // Type error on value
+};
+```
+
+**Flow**
+
+```js
+// @flow strict
+import * as CSS from 'csstype';
+
+const style: CSS.Properties<> = {
+  colour: 'white', // Type error on property
+  textAlign: 'middle', // Type error on value
+};
+```
+
+_Further examples below will be in TypeScript!_
+
+## Getting started
+
+```sh
+$ npm install csstype
+```
+
+## Table of content
+
+- [Style types](#style-types)
+- [At-rule types](#at-rule-types)
+- [Pseudo types](#pseudo-types)
+- [Generics](#generics)
+- [Usage](#usage)
+- [What should I do when I get type errors?](#what-should-i-do-when-i-get-type-errors)
+- [Version 3.0](#version-30)
+- [Contributing](#contributing)
+
+## Style types
+
+Properties are categorized in different uses and in several technical variations to provide typings that suits as many as possible.
+
+|                | Default              | `Hyphen`                   | `Fallback`                   | `HyphenFallback`                   |
+| -------------- | -------------------- | -------------------------- | ---------------------------- | ---------------------------------- |
+| **All**        | `Properties`         | `PropertiesHyphen`         | `PropertiesFallback`         | `PropertiesHyphenFallback`         |
+| **`Standard`** | `StandardProperties` | `StandardPropertiesHyphen` | `StandardPropertiesFallback` | `StandardPropertiesHyphenFallback` |
+| **`Vendor`**   | `VendorProperties`   | `VendorPropertiesHyphen`   | `VendorPropertiesFallback`   | `VendorPropertiesHyphenFallback`   |
+| **`Obsolete`** | `ObsoleteProperties` | `ObsoletePropertiesHyphen` | `ObsoletePropertiesFallback` | `ObsoletePropertiesHyphenFallback` |
+| **`Svg`**      | `SvgProperties`      | `SvgPropertiesHyphen`      | `SvgPropertiesFallback`      | `SvgPropertiesHyphenFallback`      |
+
+Categories:
+
+- **All** - Includes `Standard`, `Vendor`, `Obsolete` and `Svg`
+- **`Standard`** - Current properties and extends subcategories `StandardLonghand` and `StandardShorthand` _(e.g. `StandardShorthandProperties`)_
+- **`Vendor`** - Vendor prefixed properties and extends subcategories `VendorLonghand` and `VendorShorthand` _(e.g. `VendorShorthandProperties`)_
+- **`Obsolete`** - Removed or deprecated properties
+- **`Svg`** - SVG-specific properties
+
+Variations:
+
+- **Default** - JavaScript (camel) cased property names
+- **`Hyphen`** - CSS (kebab) cased property names
+- **`Fallback`** - Also accepts array of values e.g. `string | string[]`
+
+## At-rule types
+
+At-rule interfaces with descriptors.
+
+**TypeScript**: These will be found in the `AtRule` namespace, e.g. `AtRule.Viewport`.  
+**Flow**: These will be prefixed with `AtRule$`, e.g. `AtRule$Viewport`.
+
+|                      | Default        | `Hyphen`             | `Fallback`             | `HyphenFallback`             |
+| -------------------- | -------------- | -------------------- | ---------------------- | ---------------------------- |
+| **`@counter-style`** | `CounterStyle` | `CounterStyleHyphen` | `CounterStyleFallback` | `CounterStyleHyphenFallback` |
+| **`@font-face`**     | `FontFace`     | `FontFaceHyphen`     | `FontFaceFallback`     | `FontFaceHyphenFallback`     |
+| **`@viewport`**      | `Viewport`     | `ViewportHyphen`     | `ViewportFallback`     | `ViewportHyphenFallback`     |
+
+## Pseudo types
+
+String literals of pseudo classes and pseudo elements
+
+- `Pseudos`
+
+  Extends:
+
+  - `AdvancedPseudos`
+
+    Function-like pseudos e.g. `:not(:first-child)`. The string literal contains the value excluding the parenthesis: `:not`. These are separated because they require an argument that results in infinite number of variations.
+
+  - `SimplePseudos`
+
+    Plain pseudos e.g. `:hover` that can only be **one** variation.
+
+## Generics
+
+All interfaces has two optional generic argument to define length and time: `CSS.Properties<TLength = string | 0, TTime = string>`
+
+- **Length** is the first generic parameter and defaults to `string | 0` because `0` is the only [length where the unit identifier is optional](https://drafts.csswg.org/css-values-3/#lengths). You can specify this, e.g. `string | number`, for platforms and libraries that accepts any numeric value as length with a specific unit.
+  ```tsx
+  const style: CSS.Properties<string | number> = {
+    width: 100,
+  };
+  ```
+- **Time** is the second generic argument and defaults to `string`. You can specify this, e.g. `string | number`, for platforms and libraries that accepts any numeric value as length with a specific unit.
+  ```tsx
+  const style: CSS.Properties<string | number, number> = {
+    transitionDuration: 1000,
+  };
+  ```
+
+## Usage
+
+```ts
+import type * as CSS from 'csstype';
+
+const style: CSS.Properties = {
+  width: '10px',
+  margin: '1em',
+};
+```
+
+In some cases, like for CSS-in-JS libraries, an array of values is a way to provide fallback values in CSS. Using `CSS.PropertiesFallback` instead of `CSS.Properties` will add the possibility to use any property value as an array of values.
+
+```ts
+import type * as CSS from 'csstype';
+
+const style: CSS.PropertiesFallback = {
+  display: ['-webkit-flex', 'flex'],
+  color: 'white',
+};
+```
+
+There's even string literals for pseudo selectors and elements.
+
+```ts
+import type * as CSS from 'csstype';
+
+const pseudos: { [P in CSS.SimplePseudos]?: CSS.Properties } = {
+  ':hover': {
+    display: 'flex',
+  },
+};
+```
+
+Hyphen cased (kebab cased) properties are provided in `CSS.PropertiesHyphen` and `CSS.PropertiesHyphenFallback`. It's not **not** added by default in `CSS.Properties`. To allow both of them, you can simply extend with `CSS.PropertiesHyphen` or/and `CSS.PropertiesHyphenFallback`.
+
+```ts
+import type * as CSS from 'csstype';
+
+interface Style extends CSS.Properties, CSS.PropertiesHyphen {}
+
+const style: Style = {
+  'flex-grow': 1,
+  'flex-shrink': 0,
+  'font-weight': 'normal',
+  backgroundColor: 'white',
+};
+```
+
+Adding type checked CSS properties to a `HTMLElement`.
+
+```ts
+import type * as CSS from 'csstype';
+
+const style: CSS.Properties = {
+  color: 'red',
+  margin: '1em',
+};
+
+let button = document.createElement('button');
+
+Object.assign(button.style, style);
+```
+
+## What should I do when I get type errors?
+
+The goal is to have as perfect types as possible and we're trying to do our best. But with CSS Custom Properties, the CSS specification changing frequently and vendors implementing their own specifications with new releases sometimes causes type errors even if it should work. Here's some steps you could take to get it fixed:
+
+_If you're using CSS Custom Properties you can step directly to step 3._
+
+1.  **First of all, make sure you're doing it right.** A type error could also indicate that you're not :wink:
+
+    - Some CSS specs that some vendors has implemented could have been officially rejected or haven't yet received any official acceptance and are therefor not included
+    - If you're using TypeScript, [type widening](https://blog.mariusschulz.com/2017/02/04/TypeScript-2-1-literal-type-widening) could be the reason you get `Type 'string' is not assignable to...` errors
+
+2.  **Have a look in [issues](https://github.com/frenic/csstype/issues) to see if an issue already has been filed. If not, create a new one.** To help us out, please refer to any information you have found.
+3.  Fix the issue locally with **TypeScript** (Flow further down):
+
+    - The recommended way is to use **module augmentation**. Here's a few examples:
+
+      ```ts
+      // My css.d.ts file
+      import type * as CSS from 'csstype';
+
+      declare module 'csstype' {
+        interface Properties {
+          // Add a missing property
+          WebkitRocketLauncher?: string;
+
+          // Add a CSS Custom Property
+          '--theme-color'?: 'black' | 'white';
+
+          // Allow namespaced CSS Custom Properties
+          [index: `--theme-${string}`]: any;
+          
+          // Allow any CSS Custom Properties
+          [index: `--${string}`]: any;
+
+          // ...or allow any other property
+          [index: string]: any;
+        }
+      }
+      ```
+
+    - The alternative way is to use **type assertion**. Here's a few examples:
+
+      ```ts
+      const style: CSS.Properties = {
+        // Add a missing property
+        ['WebkitRocketLauncher' as any]: 'launching',
+
+        // Add a CSS Custom Property
+        ['--theme-color' as any]: 'black',
+      };
+      ```
+
+    Fix the issue locally with **Flow**:
+
+    - Use **type assertion**. Here's a few examples:
+
+      ```js
+      const style: $Exact<CSS.Properties<*>> = {
+        // Add a missing property
+        [('WebkitRocketLauncher': any)]: 'launching',
+
+        // Add a CSS Custom Property
+        [('--theme-color': any)]: 'black',
+      };
+      ```
+
+## Version 3.0
+
+- **All property types are exposed with namespace**  
+  TypeScript: `Property.AlignContent` (was `AlignContentProperty` before)  
+  Flow: `Property$AlignContent`
+- **All at-rules are exposed with namespace**  
+  TypeScript: `AtRule.FontFace` (was `FontFace` before)  
+  Flow: `AtRule$FontFace`
+- **Data types are NOT exposed**  
+  E.g. `Color` and `Box`. Because the generation of data types may suddenly be removed or renamed.
+- **TypeScript hack for autocompletion**  
+  Uses `(string & {})` for literal string unions and `(number & {})` for literal number unions ([related issue](https://github.com/microsoft/TypeScript/issues/29729)). Utilize `PropertyValue<T>` to unpack types from e.g. `(string & {})` to `string`.
+- **New generic for time**  
+  Read more on the ["Generics"](#generics) section.
+- **Flow types improvements**  
+  Flow Strict enabled and exact types are used.
+
+## Contributing
+
+**Never modify `index.d.ts` and `index.js.flow` directly. They are generated automatically and committed so that we can easily follow any change it results in.** Therefor it's important that you run `$ git config merge.ours.driver true` after you've forked and cloned. That setting prevents merge conflicts when doing rebase.
+
+### Commands
+
+- `npm run build` Generates typings and type checks them
+- `npm run watch` Runs build on each save
+- `npm run test` Runs the tests
+- `npm run lazy` Type checks, lints and formats everything
diff --git a/node_modules/csstype/index.d.ts b/node_modules/csstype/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b466d21a217899260574073f9c45ea1e31457b43
--- /dev/null
+++ b/node_modules/csstype/index.d.ts
@@ -0,0 +1,21297 @@
+export {};
+
+export type PropertyValue<TValue> = TValue extends Array<infer AValue>
+  ? Array<AValue extends infer TUnpacked & {} ? TUnpacked : AValue>
+  : TValue extends infer TUnpacked & {}
+  ? TUnpacked
+  : TValue;
+
+export type Fallback<T> = { [P in keyof T]: T[P] | readonly NonNullable<T[P]>[] };
+
+export interface StandardLonghandProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`accent-color`** CSS property sets the accent color for user-interface controls generated by some elements.
+   *
+   * **Syntax**: `auto | <color>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **93** | **92**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/accent-color
+   */
+  accentColor?: Property.AccentColor | undefined;
+  /**
+   * The CSS **`align-content`** property sets the distribution of space between and around content items along a flexbox's cross-axis or a grid's block axis.
+   *
+   * **Syntax**: `normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-content
+   */
+  alignContent?: Property.AlignContent | undefined;
+  /**
+   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-items
+   */
+  alignItems?: Property.AlignItems | undefined;
+  /**
+   * The **`align-self`** CSS property overrides a grid or flex item's `align-items` value. In Grid, it aligns the item inside the grid area. In Flexbox, it aligns the item on the cross axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **10** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-self
+   */
+  alignSelf?: Property.AlignSelf | undefined;
+  /**
+   * The **`align-tracks`** CSS property sets the alignment in the masonry axis for grid containers that have masonry in their block axis.
+   *
+   * **Syntax**: `[ normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position> ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-tracks
+   */
+  alignTracks?: Property.AlignTracks | undefined;
+  /**
+   * The **`animation-composition`** CSS property specifies the composite operation to use when multiple animations affect the same property simultaneously.
+   *
+   * **Syntax**: `<single-animation-composition>#`
+   *
+   * **Initial value**: `replace`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **112** | **115** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-composition
+   */
+  animationComposition?: Property.AnimationComposition | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay
+   */
+  animationDelay?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction
+   */
+  animationDirection?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration
+   */
+  animationDuration?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode
+   */
+  animationFillMode?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count
+   */
+  animationIterationCount?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name
+   */
+  animationName?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state
+   */
+  animationPlayState?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-range-end`** CSS property is used to set the end of an animation's attachment range along its timeline, i.e. where along the timeline an animation will end.
+   *
+   * **Syntax**: `[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range-end
+   */
+  animationRangeEnd?: Property.AnimationRangeEnd<TLength> | undefined;
+  /**
+   * The **`animation-range-start`** CSS property is used to set the start of an animation's attachment range along its timeline, i.e. where along the timeline an animation will start.
+   *
+   * **Syntax**: `[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range-start
+   */
+  animationRangeStart?: Property.AnimationRangeStart<TLength> | undefined;
+  /**
+   * The **`animation-timeline`** CSS property specifies the timeline that is used to control the progress of an animation.
+   *
+   * **Syntax**: `<single-animation-timeline>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timeline
+   */
+  animationTimeline?: Property.AnimationTimeline | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function
+   */
+  animationTimingFunction?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | auto | textfield | menulist-button | <compat-auto>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  |   Edge   | IE  |
+   * | :-----: | :-----: | :------: | :------: | :-: |
+   * | **84**  | **80**  | **15.4** |  **84**  | No  |
+   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_  | 12 _-x-_ |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/appearance
+   */
+  appearance?: Property.Appearance | undefined;
+  /**
+   * The **`aspect-ratio`** CSS property sets a **preferred aspect ratio** for the box, which will be used in the calculation of auto sizes and some other layout functions.
+   *
+   * **Syntax**: `auto | <ratio>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **88** | **89**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio
+   */
+  aspectRatio?: Property.AspectRatio | undefined;
+  /**
+   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |   Safari    |  Edge  | IE  |
+   * | :----: | :-----: | :---------: | :----: | :-: |
+   * | **76** | **103** | **9** _-x-_ | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter
+   */
+  backdropFilter?: Property.BackdropFilter | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :------: | :-----: | :-------: | :----: | :----: |
+   * |  **36**  | **16**  | **15.4**  | **12** | **10** |
+   * | 12 _-x-_ |         | 5.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility
+   */
+  backfaceVisibility?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.
+   *
+   * **Syntax**: `<attachment>#`
+   *
+   * **Initial value**: `scroll`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment
+   */
+  backgroundAttachment?: Property.BackgroundAttachment | undefined;
+  /**
+   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.
+   *
+   * **Syntax**: `<blend-mode>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **35** | **30**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode
+   */
+  backgroundBlendMode?: Property.BackgroundBlendMode | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **4**  |  **5**  | **12** | **9** |
+   * |        |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip
+   */
+  backgroundClip?: Property.BackgroundClip | undefined;
+  /**
+   * The **`background-color`** CSS property sets the background color of an element.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `transparent`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-color
+   */
+  backgroundColor?: Property.BackgroundColor | undefined;
+  /**
+   * The **`background-image`** CSS property sets one or more background images on an element.
+   *
+   * **Syntax**: `<bg-image>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-image
+   */
+  backgroundImage?: Property.BackgroundImage | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **4**  | **3**  | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin
+   */
+  backgroundOrigin?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `[ center | [ [ left | right | x-start | x-end ]? <length-percentage>? ]! ]#`
+   *
+   * **Initial value**: `0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **49**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x
+   */
+  backgroundPositionX?: Property.BackgroundPositionX<TLength> | undefined;
+  /**
+   * The **`background-position-y`** CSS property sets the initial vertical position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `[ center | [ [ top | bottom | y-start | y-end ]? <length-percentage>? ]! ]#`
+   *
+   * **Initial value**: `0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **49**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y
+   */
+  backgroundPositionY?: Property.BackgroundPositionY<TLength> | undefined;
+  /**
+   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat
+   */
+  backgroundRepeat?: Property.BackgroundRepeat | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **3**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-size
+   */
+  backgroundSize?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * **Syntax**: `clip | ellipsis | <string>`
+   *
+   * **Initial value**: `clip`
+   */
+  blockOverflow?: Property.BlockOverflow | undefined;
+  /**
+   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/block-size
+   */
+  blockSize?: Property.BlockSize<TLength> | undefined;
+  /**
+   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>{1,2}`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color
+   */
+  borderBlockColor?: Property.BorderBlockColor | undefined;
+  /**
+   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color
+   */
+  borderBlockEndColor?: Property.BorderBlockEndColor | undefined;
+  /**
+   * The **`border-block-end-style`** CSS property defines the style of the logical block-end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style
+   */
+  borderBlockEndStyle?: Property.BorderBlockEndStyle | undefined;
+  /**
+   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width
+   */
+  borderBlockEndWidth?: Property.BorderBlockEndWidth<TLength> | undefined;
+  /**
+   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color
+   */
+  borderBlockStartColor?: Property.BorderBlockStartColor | undefined;
+  /**
+   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style
+   */
+  borderBlockStartStyle?: Property.BorderBlockStartStyle | undefined;
+  /**
+   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width
+   */
+  borderBlockStartWidth?: Property.BorderBlockStartWidth<TLength> | undefined;
+  /**
+   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style
+   */
+  borderBlockStyle?: Property.BorderBlockStyle | undefined;
+  /**
+   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width
+   */
+  borderBlockWidth?: Property.BorderBlockWidth<TLength> | undefined;
+  /**
+   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color
+   */
+  borderBottomColor?: Property.BorderBottomColor | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius
+   */
+  borderBottomLeftRadius?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius
+   */
+  borderBottomRightRadius?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style
+   */
+  borderBottomStyle?: Property.BorderBottomStyle | undefined;
+  /**
+   * The **`border-bottom-width`** CSS property sets the width of the bottom border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width
+   */
+  borderBottomWidth?: Property.BorderBottomWidth<TLength> | undefined;
+  /**
+   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.
+   *
+   * **Syntax**: `collapse | separate`
+   *
+   * **Initial value**: `separate`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse
+   */
+  borderCollapse?: Property.BorderCollapse | undefined;
+  /**
+   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius
+   */
+  borderEndEndRadius?: Property.BorderEndEndRadius<TLength> | undefined;
+  /**
+   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius
+   */
+  borderEndStartRadius?: Property.BorderEndStartRadius<TLength> | undefined;
+  /**
+   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset
+   */
+  borderImageOutset?: Property.BorderImageOutset<TLength> | undefined;
+  /**
+   * The **`border-image-repeat`** CSS property defines how the edge regions and middle region of a source image are adjusted to fit the dimensions of an element's border image. The middle region can be displayed by using the keyword "fill" in the border-image-slice property.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat
+   */
+  borderImageRepeat?: Property.BorderImageRepeat | undefined;
+  /**
+   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.
+   *
+   * **Syntax**: `<number-percentage>{1,4} && fill?`
+   *
+   * **Initial value**: `100%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice
+   */
+  borderImageSlice?: Property.BorderImageSlice | undefined;
+  /**
+   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source
+   */
+  borderImageSource?: Property.BorderImageSource | undefined;
+  /**
+   * The **`border-image-width`** CSS property sets the width of an element's border image.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **13**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width
+   */
+  borderImageWidth?: Property.BorderImageWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>{1,2}`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color
+   */
+  borderInlineColor?: Property.BorderInlineColor | undefined;
+  /**
+   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-color)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color
+   */
+  borderInlineEndColor?: Property.BorderInlineEndColor | undefined;
+  /**
+   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-style)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style
+   */
+  borderInlineEndStyle?: Property.BorderInlineEndStyle | undefined;
+  /**
+   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-width)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width
+   */
+  borderInlineEndWidth?: Property.BorderInlineEndWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome |            Firefox            |  Safari  | Edge | IE  |
+   * | :----: | :---------------------------: | :------: | :--: | :-: |
+   * | **69** |            **41**             | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-start-color)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color
+   */
+  borderInlineStartColor?: Property.BorderInlineStartColor | undefined;
+  /**
+   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome |            Firefox            |  Safari  | Edge | IE  |
+   * | :----: | :---------------------------: | :------: | :--: | :-: |
+   * | **69** |            **41**             | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-start-style)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style
+   */
+  borderInlineStartStyle?: Property.BorderInlineStartStyle | undefined;
+  /**
+   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width
+   */
+  borderInlineStartWidth?: Property.BorderInlineStartWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style
+   */
+  borderInlineStyle?: Property.BorderInlineStyle | undefined;
+  /**
+   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width
+   */
+  borderInlineWidth?: Property.BorderInlineWidth<TLength> | undefined;
+  /**
+   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color
+   */
+  borderLeftColor?: Property.BorderLeftColor | undefined;
+  /**
+   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style
+   */
+  borderLeftStyle?: Property.BorderLeftStyle | undefined;
+  /**
+   * The **`border-left-width`** CSS property sets the width of the left border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width
+   */
+  borderLeftWidth?: Property.BorderLeftWidth<TLength> | undefined;
+  /**
+   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color
+   */
+  borderRightColor?: Property.BorderRightColor | undefined;
+  /**
+   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style
+   */
+  borderRightStyle?: Property.BorderRightStyle | undefined;
+  /**
+   * The **`border-right-width`** CSS property sets the width of the right border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width
+   */
+  borderRightWidth?: Property.BorderRightWidth<TLength> | undefined;
+  /**
+   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent cells in a `<table>`. This property applies only when `border-collapse` is `separate`.
+   *
+   * **Syntax**: `<length> <length>?`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing
+   */
+  borderSpacing?: Property.BorderSpacing<TLength> | undefined;
+  /**
+   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius
+   */
+  borderStartEndRadius?: Property.BorderStartEndRadius<TLength> | undefined;
+  /**
+   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius
+   */
+  borderStartStartRadius?: Property.BorderStartStartRadius<TLength> | undefined;
+  /**
+   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color
+   */
+  borderTopColor?: Property.BorderTopColor | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius
+   */
+  borderTopLeftRadius?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius
+   */
+  borderTopRightRadius?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style
+   */
+  borderTopStyle?: Property.BorderTopStyle | undefined;
+  /**
+   * The **`border-top-width`** CSS property sets the width of the top border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width
+   */
+  borderTopWidth?: Property.BorderTopWidth<TLength> | undefined;
+  /**
+   * The **`bottom`** CSS property participates in setting the vertical position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/bottom
+   */
+  bottom?: Property.Bottom<TLength> | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   *
+   * |    Chrome    | Firefox |   Safari    | Edge | IE  |
+   * | :----------: | :-----: | :---------: | :--: | :-: |
+   * | **22** _-x-_ | **32**  | **7** _-x-_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break
+   */
+  boxDecorationBreak?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * | **10**  |  **4**  | **5.1** | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow
+   */
+  boxShadow?: Property.BoxShadow | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * | **10**  | **29**  | **5.1** | **12** | **8** |
+   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing
+   */
+  boxSizing?: Property.BoxSizing | undefined;
+  /**
+   * The **`break-after`** CSS property sets how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-after
+   */
+  breakAfter?: Property.BreakAfter | undefined;
+  /**
+   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-before
+   */
+  breakBefore?: Property.BreakBefore | undefined;
+  /**
+   * The **`break-inside`** CSS property sets how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | avoid-page | avoid-column | avoid-region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside
+   */
+  breakInside?: Property.BreakInside | undefined;
+  /**
+   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.
+   *
+   * **Syntax**: `top | bottom | block-start | block-end | inline-start | inline-end`
+   *
+   * **Initial value**: `top`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side
+   */
+  captionSide?: Property.CaptionSide | undefined;
+  /**
+   * The **`caret-color`** CSS property sets the color of the **insertion caret**, the visible marker where the next character typed will be inserted. This is sometimes referred to as the **text input cursor**. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.
+   *
+   * **Syntax**: `auto | <color>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **53**  | **11.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color
+   */
+  caretColor?: Property.CaretColor | undefined;
+  /**
+   * **Syntax**: `auto | bar | block | underscore`
+   *
+   * **Initial value**: `auto`
+   */
+  caretShape?: Property.CaretShape | undefined;
+  /**
+   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.
+   *
+   * **Syntax**: `none | left | right | both | inline-start | inline-end`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/clear
+   */
+  clear?: Property.Clear | undefined;
+  /**
+   * The **`clip-path`** CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.
+   *
+   * **Syntax**: `<clip-source> | [ <basic-shape> || <geometry-box> ] | none`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **55**  | **3.5** | **9.1** | **79** | **10** |
+   * | 23 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path
+   */
+  clipPath?: Property.ClipPath | undefined;
+  /**
+   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `canvastext`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/color
+   */
+  color?: Property.Color | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   *
+   * |    Chrome    |       Firefox       |  Safari  |     Edge     | IE  |
+   * | :----------: | :-----------------: | :------: | :----------: | :-: |
+   * | **17** _-x-_ |       **97**        | **15.4** | **79** _-x-_ | No  |
+   * |              | 48 _(color-adjust)_ | 6 _-x-_  |              |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/print-color-adjust
+   */
+  colorAdjust?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`color-scheme`** CSS property allows an element to indicate which color schemes it can comfortably be rendered in.
+   *
+   * **Syntax**: `normal | [ light | dark | <custom-ident> ]+ && only?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **81** | **96**  | **13** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/color-scheme
+   */
+  colorScheme?: Property.ColorScheme | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-count
+   */
+  columnCount?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **50** | **52**  |  **9**  | **12** | **10** |
+   * |        |         | 8 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill
+   */
+  columnFill?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.
+   *
+   * **Syntax**: `normal | <length-percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **1**  | **1.5** | **3**  | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap
+   */
+  columnGap?: Property.ColumnGap<TLength> | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color
+   */
+  columnRuleColor?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style
+   */
+  columnRuleStyle?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width
+   */
+  columnRuleWidth?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.
+   *
+   * **Syntax**: `none | all`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **50**  | **71**  |   **9**   | **12** | **10** |
+   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-span
+   */
+  columnSpan?: Property.ColumnSpan | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **50**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-width
+   */
+  columnWidth?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`contain`** CSS property indicates that an element and its contents are, as much as possible, independent from the rest of the document tree. Containment enables isolating a subsection of the DOM, providing performance benefits by limiting calculations of layout, style, paint, size, or any combination to a DOM subtree rather than the entire page. Containment can also be used to scope CSS counters and quotes.
+   *
+   * **Syntax**: `none | strict | content | [ [ size || inline-size ] || layout || style || paint ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **52** | **69**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain
+   */
+  contain?: Property.Contain | undefined;
+  /**
+   * The **`contain-intrinsic-block-size`** CSS logical property defines the block size of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-block-size
+   */
+  containIntrinsicBlockSize?: Property.ContainIntrinsicBlockSize<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-length`** CSS property sets the height of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-height
+   */
+  containIntrinsicHeight?: Property.ContainIntrinsicHeight<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-inline-size`** CSS logical property defines the inline-size of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-inline-size
+   */
+  containIntrinsicInlineSize?: Property.ContainIntrinsicInlineSize<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-width`** CSS property sets the width of an element that a browser will use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-width
+   */
+  containIntrinsicWidth?: Property.ContainIntrinsicWidth<TLength> | undefined;
+  /**
+   * The **container-name** CSS property specifies a list of query container names used by the @container at-rule in a container query. A container query will apply styles to elements based on the size of the nearest ancestor with a containment context. When a containment context is given a name, it can be specifically targeted using the `@container` at-rule instead of the nearest ancestor with containment.
+   *
+   * **Syntax**: `none | <custom-ident>+`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container-name
+   */
+  containerName?: Property.ContainerName | undefined;
+  /**
+   * The **container-type** CSS property is used to define the type of containment used in a container query.
+   *
+   * **Syntax**: `normal | size | inline-size`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container-type
+   */
+  containerType?: Property.ContainerType | undefined;
+  /**
+   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are **anonymous replaced elements**.
+   *
+   * **Syntax**: `normal | none | [ <content-replacement> | <content-list> ] [/ [ <string> | <counter> ]+ ]?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/content
+   */
+  content?: Property.Content | undefined;
+  /**
+   * The **`content-visibility`** CSS property controls whether or not an element renders its contents at all, along with forcing a strong set of containments, allowing user agents to potentially omit large swathes of layout and rendering work until it becomes needed. It enables the user agent to skip an element's rendering work (including layout and painting) until it is needed — which makes the initial page load much faster.
+   *
+   * **Syntax**: `visible | auto | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome |   Firefox   | Safari | Edge | IE  |
+   * | :----: | :---------: | :----: | :--: | :-: |
+   * | **85** | **preview** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/content-visibility
+   */
+  contentVisibility?: Property.ContentVisibility | undefined;
+  /**
+   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **3**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment
+   */
+  counterIncrement?: Property.CounterIncrement | undefined;
+  /**
+   * The **`counter-reset`** CSS property resets a CSS counter to a given value. This property will create a new counter or reversed counter with the given name on the specified element.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? | <reversed-counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **3**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset
+   */
+  counterReset?: Property.CounterReset | undefined;
+  /**
+   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **85** | **68**  | **17.2** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set
+   */
+  counterSet?: Property.CounterSet | undefined;
+  /**
+   * The **`cursor`** CSS property sets the mouse cursor, if any, to show when the mouse pointer is over an element.
+   *
+   * **Syntax**: `[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing ] ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/cursor
+   */
+  cursor?: Property.Cursor | undefined;
+  /**
+   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).
+   *
+   * **Syntax**: `ltr | rtl`
+   *
+   * **Initial value**: `ltr`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **2**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/direction
+   */
+  direction?: Property.Direction | undefined;
+  /**
+   * The **`display`** CSS property sets whether an element is treated as a block or inline element and the layout used for its children, such as flow layout, grid or flex.
+   *
+   * **Syntax**: `[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>`
+   *
+   * **Initial value**: `inline`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/display
+   */
+  display?: Property.Display | undefined;
+  /**
+   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.
+   *
+   * **Syntax**: `show | hide`
+   *
+   * **Initial value**: `show`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells
+   */
+  emptyCells?: Property.EmptyCells | undefined;
+  /**
+   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |
+   * | :------: | :-----: | :-----: | :----: | :-: |
+   * |  **53**  | **35**  | **9.1** | **12** | No  |
+   * | 18 _-x-_ |         | 6 _-x-_ |        |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/filter
+   */
+  filter?: Property.Filter | undefined;
+  /**
+   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.
+   *
+   * **Syntax**: `content | <'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **22**  |  **9**  | **12** | **11** |
+   * | 22 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis
+   */
+  flexBasis?: Property.FlexBasis<TLength> | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   *
+   * |  Chrome  | Firefox  | Safari  |  Edge  |    IE    |
+   * | :------: | :------: | :-----: | :----: | :------: |
+   * |  **29**  |  **81**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ | 49 _-x-_ | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction
+   */
+  flexDirection?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |            IE            |
+   * | :------: | :-----: | :-----: | :----: | :----------------------: |
+   * |  **29**  | **20**  |  **9**  | **12** |          **11**          |
+   * | 22 _-x-_ |         | 7 _-x-_ |        | 10 _(-ms-flex-positive)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow
+   */
+  flexGrow?: Property.FlexGrow | undefined;
+  /**
+   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `1`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **10** |
+   * | 22 _-x-_ |         | 8 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink
+   */
+  flexShrink?: Property.FlexShrink | undefined;
+  /**
+   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.
+   *
+   * **Syntax**: `nowrap | wrap | wrap-reverse`
+   *
+   * **Initial value**: `nowrap`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap
+   */
+  flexWrap?: Property.FlexWrap | undefined;
+  /**
+   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).
+   *
+   * **Syntax**: `left | right | none | inline-start | inline-end`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/float
+   */
+  float?: Property.Float | undefined;
+  /**
+   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.
+   *
+   * **Syntax**: `[ <family-name> | <generic-family> ]#`
+   *
+   * **Initial value**: depends on user agent
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-family
+   */
+  fontFamily?: Property.FontFamily | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |
+   * | :------: | :------: | :-----: | :----: | :----: |
+   * |  **48**  |  **34**  | **9.1** | **15** | **10** |
+   * | 16 _-x-_ | 15 _-x-_ |         |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings
+   */
+  fontFeatureSettings?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.
+   *
+   * **Syntax**: `auto | normal | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **33** | **32**  |  **9**  | n/a  | No  |
+   * |        |         | 6 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning
+   */
+  fontKerning?: Property.FontKerning | undefined;
+  /**
+   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.
+   *
+   * **Syntax**: `normal | <string>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **34**  |   No   | n/a  | No  |
+   * |        | 4 _-x-_ |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override
+   */
+  fontLanguageOverride?: Property.FontLanguageOverride | undefined;
+  /**
+   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **79** | **62**  | **11** | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing
+   */
+  fontOpticalSizing?: Property.FontOpticalSizing | undefined;
+  /**
+   * **Syntax**: `normal | light | dark | <palette-identifier>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **101** | **107** | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-palette
+   */
+  fontPalette?: Property.FontPalette | undefined;
+  /**
+   * The **`font-size`** CSS property sets the size of the font. Changing the font size also updates the sizes of the font size-relative `<length>` units, such as `em`, `ex`, and so forth.
+   *
+   * **Syntax**: `<absolute-size> | <relative-size> | <length-percentage>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-size
+   */
+  fontSize?: Property.FontSize<TLength> | undefined;
+  /**
+   * The **`font-size-adjust`** CSS property sets the size of lower-case letters relative to the current font size (which defines the size of upper-case letters).
+   *
+   * **Syntax**: `none | [ ex-height | cap-height | ch-width | ic-width | ic-height ]? [ from-font | <number> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * |   No   |  **3**  | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust
+   */
+  fontSizeAdjust?: Property.FontSizeAdjust | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |              Chrome              |              Firefox               |              Safari              | Edge | IE  |
+   * | :------------------------------: | :--------------------------------: | :------------------------------: | :--: | :-: |
+   * | **5** _(-webkit-font-smoothing)_ | **25** _(-moz-osx-font-smoothing)_ | **4** _(-webkit-font-smoothing)_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-smooth
+   */
+  fontSmooth?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.
+   *
+   * **Syntax**: `<font-stretch-absolute>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **60** |  **9**  | **11** | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch
+   */
+  fontStretch?: Property.FontStretch | undefined;
+  /**
+   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.
+   *
+   * **Syntax**: `normal | italic | oblique <angle>?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-style
+   */
+  fontStyle?: Property.FontStyle | undefined;
+  /**
+   * The **`font-synthesis`** CSS property controls which missing typefaces, bold, italic, or small-caps, may be synthesized by the browser.
+   *
+   * **Syntax**: `none | [ weight || style || small-caps || position]`
+   *
+   * **Initial value**: `weight style small-caps position `
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **97** | **34**  | **9**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis
+   */
+  fontSynthesis?: Property.FontSynthesis | undefined;
+  /**
+   * The **`font-synthesis-position`** CSS property lets you specify whether or not a browser may synthesize the subscript and superscript "position" typefaces when they are missing in a font family, while using `font-variant-position` to set the positions.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **118** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-position
+   */
+  fontSynthesisPosition?: Property.FontSynthesisPosition | undefined;
+  /**
+   * The **`font-synthesis-small-caps`** CSS property lets you specify whether or not the browser may synthesize small-caps typeface when it is missing in a font family. Small-caps glyphs typically use the form of uppercase letters but are reduced to the size of lowercase letters.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-small-caps
+   */
+  fontSynthesisSmallCaps?: Property.FontSynthesisSmallCaps | undefined;
+  /**
+   * The **`font-synthesis-style`** CSS property lets you specify whether or not the browser may synthesize the oblique typeface when it is missing in a font family.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-style
+   */
+  fontSynthesisStyle?: Property.FontSynthesisStyle | undefined;
+  /**
+   * The **`font-synthesis-weight`** CSS property lets you specify whether or not the browser may synthesize the bold typeface when it is missing in a font family.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-weight
+   */
+  fontSynthesisWeight?: Property.FontSynthesisWeight | undefined;
+  /**
+   * The **`font-variant`** CSS shorthand property allows you to set all the font variants for a font.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant
+   */
+  fontVariant?: Property.FontVariant | undefined;
+  /**
+   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.
+   *
+   * **Syntax**: `normal | [ stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :-----: | :-----: | :-----: | :--: | :-: |
+   * | **111** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-alternates
+   */
+  fontVariantAlternates?: Property.FontVariantAlternates | undefined;
+  /**
+   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.
+   *
+   * **Syntax**: `normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **52** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps
+   */
+  fontVariantCaps?: Property.FontVariantCaps | undefined;
+  /**
+   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.
+   *
+   * **Syntax**: `normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **63** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian
+   */
+  fontVariantEastAsian?: Property.FontVariantEastAsian | undefined;
+  /**
+   * **Syntax**: `normal | text | emoji | unicode`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-emoji
+   */
+  fontVariantEmoji?: Property.FontVariantEmoji | undefined;
+  /**
+   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :------: | :-----: | :-----: | :--: | :-: |
+   * |  **34**  | **34**  | **9.1** | n/a  | No  |
+   * | 31 _-x-_ |         | 7 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures
+   */
+  fontVariantLigatures?: Property.FontVariantLigatures | undefined;
+  /**
+   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.
+   *
+   * **Syntax**: `normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **52** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric
+   */
+  fontVariantNumeric?: Property.FontVariantNumeric | undefined;
+  /**
+   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.
+   *
+   * **Syntax**: `normal | sub | super`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :-----: | :-----: | :-----: | :--: | :-: |
+   * | **117** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position
+   */
+  fontVariantPosition?: Property.FontVariantPosition | undefined;
+  /**
+   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.
+   *
+   * **Syntax**: `normal | [ <string> <number> ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **62** | **62**  | **11** | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings
+   */
+  fontVariationSettings?: Property.FontVariationSettings | undefined;
+  /**
+   * The **`font-weight`** CSS property sets the weight (or boldness) of the font. The weights available depend on the `font-family` that is currently set.
+   *
+   * **Syntax**: `<font-weight-absolute> | bolder | lighter`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight
+   */
+  fontWeight?: Property.FontWeight | undefined;
+  /**
+   * The **`forced-color-adjust`** CSS property allows authors to opt certain elements out of forced colors mode. This then restores the control of those values to CSS.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |              Edge               |                 IE                  |
+   * | :----: | :-----: | :----: | :-----------------------------: | :---------------------------------: |
+   * | **89** | **113** |   No   |             **79**              | **10** _(-ms-high-contrast-adjust)_ |
+   * |        |         |        | 12 _(-ms-high-contrast-adjust)_ |                                     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/forced-color-adjust
+   */
+  forcedColorAdjust?: Property.ForcedColorAdjust | undefined;
+  /**
+   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track or pattern of tracks.
+   *
+   * **Syntax**: `<track-size>+`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |             IE              |
+   * | :----: | :-----: | :------: | :----: | :-------------------------: |
+   * | **57** | **70**  | **10.1** | **16** | **10** _(-ms-grid-columns)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns
+   */
+  gridAutoColumns?: Property.GridAutoColumns<TLength> | undefined;
+  /**
+   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.
+   *
+   * **Syntax**: `[ row | column ] || dense`
+   *
+   * **Initial value**: `row`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow
+   */
+  gridAutoFlow?: Property.GridAutoFlow | undefined;
+  /**
+   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track or pattern of tracks.
+   *
+   * **Syntax**: `<track-size>+`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |            IE            |
+   * | :----: | :-----: | :------: | :----: | :----------------------: |
+   * | **57** | **70**  | **10.1** | **16** | **10** _(-ms-grid-rows)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows
+   */
+  gridAutoRows?: Property.GridAutoRows<TLength> | undefined;
+  /**
+   * The **`grid-column-end`** CSS property specifies a grid item's end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end
+   */
+  gridColumnEnd?: Property.GridColumnEnd | undefined;
+  /**
+   * The **`grid-column-start`** CSS property specifies a grid item's start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start
+   */
+  gridColumnStart?: Property.GridColumnStart | undefined;
+  /**
+   * The **`grid-row-end`** CSS property specifies a grid item's end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end
+   */
+  gridRowEnd?: Property.GridRowEnd | undefined;
+  /**
+   * The **`grid-row-start`** CSS property specifies a grid item's start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start
+   */
+  gridRowStart?: Property.GridRowStart | undefined;
+  /**
+   * The **`grid-template-areas`** CSS property specifies named grid areas, establishing the cells in the grid and assigning them names.
+   *
+   * **Syntax**: `none | <string>+`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas
+   */
+  gridTemplateAreas?: Property.GridTemplateAreas | undefined;
+  /**
+   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list> | subgrid <line-name-list>?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |             IE              |
+   * | :----: | :-----: | :------: | :----: | :-------------------------: |
+   * | **57** | **52**  | **10.1** | **16** | **10** _(-ms-grid-columns)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns
+   */
+  gridTemplateColumns?: Property.GridTemplateColumns<TLength> | undefined;
+  /**
+   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list> | subgrid <line-name-list>?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |            IE            |
+   * | :----: | :-----: | :------: | :----: | :----------------------: |
+   * | **57** | **52**  | **10.1** | **16** | **10** _(-ms-grid-rows)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows
+   */
+  gridTemplateRows?: Property.GridTemplateRows<TLength> | undefined;
+  /**
+   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.
+   *
+   * **Syntax**: `none | [ first || [ force-end | allow-end ] || last ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   No    | **10** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation
+   */
+  hangingPunctuation?: Property.HangingPunctuation | undefined;
+  /**
+   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/height
+   */
+  height?: Property.Height<TLength> | undefined;
+  /**
+   * The **`hyphenate-character`** CSS property sets the character (or string) used at the end of a line before a hyphenation break.
+   *
+   * **Syntax**: `auto | <string>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge | IE  |
+   * | :-----: | :-----: | :-------: | :--: | :-: |
+   * | **106** | **98**  |  **17**   | n/a  | No  |
+   * | 6 _-x-_ |         | 5.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hyphenate-character
+   */
+  hyphenateCharacter?: Property.HyphenateCharacter | undefined;
+  /**
+   * The **`hyphenate-limit-chars`** CSS property specifies the minimum word length to allow hyphenation of words as well as the the minimum number of characters before and after the hyphen.
+   *
+   * **Syntax**: `[ auto | <integer> ]{1,3}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** |   No    |   No   | n/a  | No  |
+   */
+  hyphenateLimitChars?: Property.HyphenateLimitChars | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   *
+   * |  Chrome  | Firefox |  Safari   |  Edge  |      IE      |
+   * | :------: | :-----: | :-------: | :----: | :----------: |
+   * |  **55**  | **43**  |  **17**   | **79** | **10** _-x-_ |
+   * | 13 _-x-_ | 6 _-x-_ | 5.1 _-x-_ |        |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens
+   */
+  hyphens?: Property.Hyphens | undefined;
+  /**
+   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image.
+   *
+   * **Syntax**: `from-image | <angle> | [ <angle>? flip ]`
+   *
+   * **Initial value**: `from-image`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **81** | **26**  | **13.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation
+   */
+  imageOrientation?: Property.ImageOrientation | undefined;
+  /**
+   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.
+   *
+   * **Syntax**: `auto | crisp-edges | pixelated`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **13** | **3.6** | **6**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering
+   */
+  imageRendering?: Property.ImageRendering | undefined;
+  /**
+   * **Syntax**: `[ from-image || <resolution> ] && snap?`
+   *
+   * **Initial value**: `1dppx`
+   */
+  imageResolution?: Property.ImageResolution | undefined;
+  /**
+   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.
+   *
+   * **Syntax**: `normal | [ <number> <integer>? ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |   Safari    | Edge | IE  |
+   * | :-----: | :-----: | :---------: | :--: | :-: |
+   * | **110** |   No    | **9** _-x-_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter
+   */
+  initialLetter?: Property.InitialLetter | undefined;
+  /**
+   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size
+   */
+  inlineSize?: Property.InlineSize<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   */
+  inputSecurity?: Property.InputSecurity | undefined;
+  /**
+   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end
+   */
+  insetBlockEnd?: Property.InsetBlockEnd<TLength> | undefined;
+  /**
+   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start
+   */
+  insetBlockStart?: Property.InsetBlockStart<TLength> | undefined;
+  /**
+   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end
+   */
+  insetInlineEnd?: Property.InsetInlineEnd<TLength> | undefined;
+  /**
+   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start
+   */
+  insetInlineStart?: Property.InsetInlineStart<TLength> | undefined;
+  /**
+   * The **`isolation`** CSS property determines whether an element must create a new stacking context.
+   *
+   * **Syntax**: `auto | isolate`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **41** | **36**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/isolation
+   */
+  isolation?: Property.Isolation | undefined;
+  /**
+   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.
+   *
+   * **Syntax**: `normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content
+   */
+  justifyContent?: Property.JustifyContent | undefined;
+  /**
+   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]`
+   *
+   * **Initial value**: `legacy`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **52** | **20**  | **9**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items
+   */
+  justifyItems?: Property.JustifyItems | undefined;
+  /**
+   * The CSS **`justify-self`** property sets the way a box is justified inside its alignment container along the appropriate axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :------: | :----: | :----: |
+   * | **57** | **45**  | **10.1** | **16** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self
+   */
+  justifySelf?: Property.JustifySelf | undefined;
+  /**
+   * The **`justify-tracks`** CSS property sets the alignment in the masonry axis for grid containers that have masonry in their inline axis.
+   *
+   * **Syntax**: `[ normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-tracks
+   */
+  justifyTracks?: Property.JustifyTracks | undefined;
+  /**
+   * The **`left`** CSS property participates in specifying the horizontal position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/left
+   */
+  left?: Property.Left<TLength> | undefined;
+  /**
+   * The **`letter-spacing`** CSS property sets the horizontal spacing behavior between text characters. This value is added to the natural spacing between characters while rendering the text. Positive values of `letter-spacing` causes characters to spread farther apart, while negative values of `letter-spacing` bring characters closer together.
+   *
+   * **Syntax**: `normal | <length>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing
+   */
+  letterSpacing?: Property.LetterSpacing<TLength> | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE    |
+   * | :-----: | :-----: | :-----: | :----: | :-----: |
+   * | **58**  | **69**  | **11**  | **14** | **5.5** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |         |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-break
+   */
+  lineBreak?: Property.LineBreak | undefined;
+  /**
+   * The **`line-height`** CSS property sets the height of a line box. It's commonly used to set the distance between lines of text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.
+   *
+   * **Syntax**: `normal | <number> | <length> | <percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-height
+   */
+  lineHeight?: Property.LineHeight<TLength> | undefined;
+  /**
+   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |  n/a   |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step
+   */
+  lineHeightStep?: Property.LineHeightStep<TLength> | undefined;
+  /**
+   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.
+   *
+   * **Syntax**: `<image> | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image
+   */
+  listStyleImage?: Property.ListStyleImage | undefined;
+  /**
+   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.
+   *
+   * **Syntax**: `inside | outside`
+   *
+   * **Initial value**: `outside`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position
+   */
+  listStylePosition?: Property.ListStylePosition | undefined;
+  /**
+   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.
+   *
+   * **Syntax**: `<counter-style> | <string> | none`
+   *
+   * **Initial value**: `disc`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type
+   */
+  listStyleType?: Property.ListStyleType | undefined;
+  /**
+   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end
+   */
+  marginBlockEnd?: Property.MarginBlockEnd<TLength> | undefined;
+  /**
+   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start
+   */
+  marginBlockStart?: Property.MarginBlockStart<TLength> | undefined;
+  /**
+   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom
+   */
+  marginBottom?: Property.MarginBottom<TLength> | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |
+   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |
+   * |          **69**          |        **41**         |         **12.1**         | n/a  | No  |
+   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end
+   */
+  marginInlineEnd?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |
+   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |
+   * |           **69**           |         **41**          |          **12.1**          | n/a  | No  |
+   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start
+   */
+  marginInlineStart?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left
+   */
+  marginLeft?: Property.MarginLeft<TLength> | undefined;
+  /**
+   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right
+   */
+  marginRight?: Property.MarginRight<TLength> | undefined;
+  /**
+   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top
+   */
+  marginTop?: Property.MarginTop<TLength> | undefined;
+  /**
+   * The `margin-trim` property allows the container to trim the margins of its children where they adjoin the container's edges.
+   *
+   * **Syntax**: `none | in-flow | all`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * |   No   |   No    | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-trim
+   */
+  marginTrim?: Property.MarginTrim | undefined;
+  /**
+   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.
+   *
+   * **Syntax**: `luminance | alpha`
+   *
+   * **Initial value**: `alpha`
+   */
+  maskBorderMode?: Property.MaskBorderMode | undefined;
+  /**
+   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-outset)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-outset)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-outset
+   */
+  maskBorderOutset?: Property.MaskBorderOutset<TLength> | undefined;
+  /**
+   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-repeat)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-repeat)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-repeat
+   */
+  maskBorderRepeat?: Property.MaskBorderRepeat | undefined;
+  /**
+   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.
+   *
+   * **Syntax**: `<number-percentage>{1,4} fill?`
+   *
+   * **Initial value**: `0`
+   *
+   * |                 Chrome                 | Firefox |                Safari                | Edge | IE  |
+   * | :------------------------------------: | :-----: | :----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-slice)_ |   No    |               **17.2**               | n/a  | No  |
+   * |                                        |         | 3.1 _(-webkit-mask-box-image-slice)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-slice
+   */
+  maskBorderSlice?: Property.MaskBorderSlice | undefined;
+  /**
+   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-source)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-source)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-source
+   */
+  maskBorderSource?: Property.MaskBorderSource | undefined;
+  /**
+   * The **`mask-border-width`** CSS property sets the width of an element's mask border.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `auto`
+   *
+   * |                 Chrome                 | Firefox |                Safari                | Edge | IE  |
+   * | :------------------------------------: | :-----: | :----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-width)_ |   No    |               **17.2**               | n/a  | No  |
+   * |                                        |         | 3.1 _(-webkit-mask-box-image-width)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-width
+   */
+  maskBorderWidth?: Property.MaskBorderWidth<TLength> | undefined;
+  /**
+   * The **`mask-clip`** CSS property determines the area which is affected by a mask. The painted content of an element must be restricted to this area.
+   *
+   * **Syntax**: `[ <geometry-box> | no-clip ]#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip
+   */
+  maskClip?: Property.MaskClip | undefined;
+  /**
+   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.
+   *
+   * **Syntax**: `<compositing-operator>#`
+   *
+   * **Initial value**: `add`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 18-79 | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite
+   */
+  maskComposite?: Property.MaskComposite | undefined;
+  /**
+   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element. By default this means the alpha channel of the mask image will be multiplied with the alpha channel of the element. This can be controlled with the `mask-mode` property.
+   *
+   * **Syntax**: `<mask-reference>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 16-79 | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image
+   */
+  maskImage?: Property.MaskImage | undefined;
+  /**
+   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.
+   *
+   * **Syntax**: `<masking-mode>#`
+   *
+   * **Initial value**: `match-source`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode
+   */
+  maskMode?: Property.MaskMode | undefined;
+  /**
+   * The **`mask-origin`** CSS property sets the origin of a mask.
+   *
+   * **Syntax**: `<geometry-box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin
+   */
+  maskOrigin?: Property.MaskOrigin | undefined;
+  /**
+   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.
+   *
+   * **Syntax**: `<position>#`
+   *
+   * **Initial value**: `center`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge  | IE  |
+   * | :-----: | :-----: | :-------: | :---: | :-: |
+   * | **120** | **53**  | **15.4**  | 18-79 | No  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position
+   */
+  maskPosition?: Property.MaskPosition<TLength> | undefined;
+  /**
+   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge  | IE  |
+   * | :-----: | :-----: | :-------: | :---: | :-: |
+   * | **120** | **53**  | **15.4**  | 18-79 | No  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat
+   */
+  maskRepeat?: Property.MaskRepeat | undefined;
+  /**
+   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 18-79 | No  |
+   * | 4 _-x-_ |         | 4 _-x-_  |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size
+   */
+  maskSize?: Property.MaskSize<TLength> | undefined;
+  /**
+   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.
+   *
+   * **Syntax**: `luminance | alpha`
+   *
+   * **Initial value**: `luminance`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **24** | **35**  | **7**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type
+   */
+  maskType?: Property.MaskType | undefined;
+  /**
+   * This feature is not Baseline because it does not work in some of the most widely-used browsers.
+   *
+   * **Syntax**: `[ pack | next ] || [ definite-first | ordered ]`
+   *
+   * **Initial value**: `pack`
+   *
+   * | Chrome | Firefox |   Safari    | Edge | IE  |
+   * | :----: | :-----: | :---------: | :--: | :-: |
+   * |   No   |   No    | **preview** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/masonry-auto-flow
+   */
+  masonryAutoFlow?: Property.MasonryAutoFlow | undefined;
+  /**
+   * The **`math-depth`** property describes a notion of _depth_ for each element of a mathematical formula, with respect to the top-level container of that formula. Concretely, this is used to determine the computed value of the font-size property when its specified value is `math`.
+   *
+   * **Syntax**: `auto-add | add(<integer>) | <integer>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** | **117** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-depth
+   */
+  mathDepth?: Property.MathDepth | undefined;
+  /**
+   * The `math-shift` property indicates whether superscripts inside MathML formulas should be raised by a normal or compact shift.
+   *
+   * **Syntax**: `normal | compact`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-shift
+   */
+  mathShift?: Property.MathShift | undefined;
+  /**
+   * The `math-style` property indicates whether MathML equations should render with normal or compact height.
+   *
+   * **Syntax**: `normal | compact`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **109** | **117** | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-style
+   */
+  mathStyle?: Property.MathStyle | undefined;
+  /**
+   * The **`max-block-size`** CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size
+   */
+  maxBlockSize?: Property.MaxBlockSize<TLength> | undefined;
+  /**
+   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.
+   *
+   * **Syntax**: `none | <length-percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **18** |  **1**  | **1.3** | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-height
+   */
+  maxHeight?: Property.MaxHeight<TLength> | undefined;
+  /**
+   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block, depending on its writing mode. It corresponds to either the `max-width` or the `max-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |   Safari   | Edge | IE  |
+   * | :----: | :-----: | :--------: | :--: | :-: |
+   * | **57** | **41**  |  **12.1**  | n/a  | No  |
+   * |        |         | 10.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size
+   */
+  maxInlineSize?: Property.MaxInlineSize<TLength> | undefined;
+  /**
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  maxLines?: Property.MaxLines | undefined;
+  /**
+   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.
+   *
+   * **Syntax**: `none | <length-percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-width
+   */
+  maxWidth?: Property.MaxWidth<TLength> | undefined;
+  /**
+   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'min-width'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size
+   */
+  minBlockSize?: Property.MinBlockSize<TLength> | undefined;
+  /**
+   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **3**  | **1.3** | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-height
+   */
+  minHeight?: Property.MinHeight<TLength> | undefined;
+  /**
+   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'min-width'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size
+   */
+  minInlineSize?: Property.MinInlineSize<TLength> | undefined;
+  /**
+   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-width
+   */
+  minWidth?: Property.MinWidth<TLength> | undefined;
+  /**
+   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.
+   *
+   * **Syntax**: `<blend-mode> | plus-lighter`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **41** | **32**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode
+   */
+  mixBlendMode?: Property.MixBlendMode | undefined;
+  /**
+   * The **`offset-distance`** CSS property specifies a position along an `offset-path` for an element to be placed.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **55**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-distance)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance
+   */
+  motionDistance?: Property.OffsetDistance<TLength> | undefined;
+  /**
+   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.
+   *
+   * **Syntax**: `none | <offset-path> || <coord-box>`
+   *
+   * **Initial value**: `none`
+   *
+   * |       Chrome       | Firefox |  Safari  | Edge | IE  |
+   * | :----------------: | :-----: | :------: | :--: | :-: |
+   * |       **55**       | **72**  | **15.4** | n/a  | No  |
+   * | 46 _(motion-path)_ |         |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path
+   */
+  motionPath?: Property.OffsetPath | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  motionRotation?: Property.OffsetRotate | undefined;
+  /**
+   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.
+   *
+   * **Syntax**: `fill | contain | cover | none | scale-down`
+   *
+   * **Initial value**: `fill`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **32** | **36**  | **10** | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit
+   */
+  objectFit?: Property.ObjectFit | undefined;
+  /**
+   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **32** | **36**  | **10** | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/object-position
+   */
+  objectPosition?: Property.ObjectPosition<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | <position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** | **72**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor
+   */
+  offsetAnchor?: Property.OffsetAnchor<TLength> | undefined;
+  /**
+   * The **`offset-distance`** CSS property specifies a position along an `offset-path` for an element to be placed.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **55**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-distance)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance
+   */
+  offsetDistance?: Property.OffsetDistance<TLength> | undefined;
+  /**
+   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.
+   *
+   * **Syntax**: `none | <offset-path> || <coord-box>`
+   *
+   * **Initial value**: `none`
+   *
+   * |       Chrome       | Firefox |  Safari  | Edge | IE  |
+   * | :----------------: | :-----: | :------: | :--: | :-: |
+   * |       **55**       | **72**  | **15.4** | n/a  | No  |
+   * | 46 _(motion-path)_ |         |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path
+   */
+  offsetPath?: Property.OffsetPath | undefined;
+  /**
+   * **Syntax**: `normal | auto | <position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** |   n/a   | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-position
+   */
+  offsetPosition?: Property.OffsetPosition<TLength> | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  offsetRotate?: Property.OffsetRotate | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  offsetRotation?: Property.OffsetRotate | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **2**  | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/opacity
+   */
+  opacity?: Property.Opacity | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |
+   * | :------: | :-----: | :-----: | :----: | :------: |
+   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/order
+   */
+  order?: Property.Order | undefined;
+  /**
+   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `2`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **25** |   No    | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/orphans
+   */
+  orphans?: Property.Orphans | undefined;
+  /**
+   * The **`outline-color`** CSS property sets the color of an element's outline.
+   *
+   * **Syntax**: `<color> | invert`
+   *
+   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color
+   */
+  outlineColor?: Property.OutlineColor | undefined;
+  /**
+   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :-----: | :----: | :-: |
+   * | **1**  | **1.5** | **1.2** | **15** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset
+   */
+  outlineOffset?: Property.OutlineOffset<TLength> | undefined;
+  /**
+   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `auto | <'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style
+   */
+  outlineStyle?: Property.OutlineStyle | undefined;
+  /**
+   * The CSS **`outline-width`** property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width
+   */
+  outlineWidth?: Property.OutlineWidth<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **56** | **66**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor
+   */
+  overflowAnchor?: Property.OverflowAnchor | undefined;
+  /**
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **69**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block
+   */
+  overflowBlock?: Property.OverflowBlock | undefined;
+  /**
+   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.
+   *
+   * **Syntax**: `padding-box | content-box`
+   *
+   * **Initial value**: `padding-box`
+   */
+  overflowClipBox?: Property.OverflowClipBox | undefined;
+  /**
+   * **Syntax**: `<visual-box> || <length [0,∞]>`
+   *
+   * **Initial value**: `0px`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **90** | **102** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-clip-margin
+   */
+  overflowClipMargin?: Property.OverflowClipMargin<TLength> | undefined;
+  /**
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **69**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline
+   */
+  overflowInline?: Property.OverflowInline | undefined;
+  /**
+   * The **`overflow-wrap`** CSS property applies to inline elements, setting whether the browser should insert line breaks within an otherwise unbreakable string to prevent text from overflowing its line box.
+   *
+   * **Syntax**: `normal | break-word | anywhere`
+   *
+   * **Initial value**: `normal`
+   *
+   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |
+   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |
+   * |     **23**      |      **49**       |      **7**      |      **18**      | **5.5** _(word-wrap)_ |
+   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap
+   */
+  overflowWrap?: Property.OverflowWrap | undefined;
+  /**
+   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **3.5** | **3**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x
+   */
+  overflowX?: Property.OverflowX | undefined;
+  /**
+   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **3.5** | **3**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y
+   */
+  overflowY?: Property.OverflowY | undefined;
+  /**
+   * The **`overlay`** CSS property specifies whether an element appearing in the top layer (for example, a shown popover or modal `<dialog>` element) is actually rendered in the top layer. This property is only relevant within a list of `transition-property` values, and only if `allow-discrete` is set as the `transition-behavior`.
+   *
+   * **Syntax**: `none | auto`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **117** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overlay
+   */
+  overlay?: Property.Overlay | undefined;
+  /**
+   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **77** | **73**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block
+   */
+  overscrollBehaviorBlock?: Property.OverscrollBehaviorBlock | undefined;
+  /**
+   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **77** | **73**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline
+   */
+  overscrollBehaviorInline?: Property.OverscrollBehaviorInline | undefined;
+  /**
+   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x
+   */
+  overscrollBehaviorX?: Property.OverscrollBehaviorX | undefined;
+  /**
+   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y
+   */
+  overscrollBehaviorY?: Property.OverscrollBehaviorY | undefined;
+  /**
+   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end
+   */
+  paddingBlockEnd?: Property.PaddingBlockEnd<TLength> | undefined;
+  /**
+   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start
+   */
+  paddingBlockStart?: Property.PaddingBlockStart<TLength> | undefined;
+  /**
+   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom
+   */
+  paddingBottom?: Property.PaddingBottom<TLength> | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |
+   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |
+   * |          **69**           |         **41**         |         **12.1**          | n/a  | No  |
+   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end
+   */
+  paddingInlineEnd?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |
+   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |
+   * |           **69**            |          **41**          |          **12.1**           | n/a  | No  |
+   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start
+   */
+  paddingInlineStart?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * The **`padding-left`** CSS property sets the width of the padding area to the left of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left
+   */
+  paddingLeft?: Property.PaddingLeft<TLength> | undefined;
+  /**
+   * The **`padding-right`** CSS property sets the width of the padding area on the right of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right
+   */
+  paddingRight?: Property.PaddingRight<TLength> | undefined;
+  /**
+   * The **`padding-top`** CSS property sets the height of the padding area on the top of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top
+   */
+  paddingTop?: Property.PaddingTop<TLength> | undefined;
+  /**
+   * The **`page`** CSS property is used to specify the named page, a specific type of page defined by the `@page` at-rule.
+   *
+   * **Syntax**: `auto | <custom-ident>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari   | Edge | IE  |
+   * | :----: | :-----: | :-------: | :--: | :-: |
+   * | **85** | **110** | **≤13.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page
+   */
+  page?: Property.Page | undefined;
+  /**
+   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.
+   *
+   * **Syntax**: `auto | always | avoid | left | right | recto | verso`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after
+   */
+  pageBreakAfter?: Property.PageBreakAfter | undefined;
+  /**
+   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.
+   *
+   * **Syntax**: `auto | always | avoid | left | right | recto | verso`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before
+   */
+  pageBreakBefore?: Property.PageBreakBefore | undefined;
+  /**
+   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.
+   *
+   * **Syntax**: `auto | avoid`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **19**  | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside
+   */
+  pageBreakInside?: Property.PageBreakInside | undefined;
+  /**
+   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.
+   *
+   * **Syntax**: `normal | [ fill || stroke || markers ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **35** | **60**  | **8**  | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order
+   */
+  paintOrder?: Property.PaintOrder | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **36**  | **16**  |  **9**  | **12** | **10** |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/perspective
+   */
+  perspective?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **36**  | **16**  |  **9**  | **12** | **10** |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin
+   */
+  perspectiveOrigin?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of pointer events.
+   *
+   * **Syntax**: `auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **1**  | **1.5** | **4**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events
+   */
+  pointerEvents?: Property.PointerEvents | undefined;
+  /**
+   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.
+   *
+   * **Syntax**: `static | relative | absolute | sticky | fixed`
+   *
+   * **Initial value**: `static`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/position
+   */
+  position?: Property.Position | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   *
+   * |    Chrome    |       Firefox       |  Safari  |     Edge     | IE  |
+   * | :----------: | :-----------------: | :------: | :----------: | :-: |
+   * | **17** _-x-_ |       **97**        | **15.4** | **79** _-x-_ | No  |
+   * |              | 48 _(color-adjust)_ | 6 _-x-_  |              |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/print-color-adjust
+   */
+  printColorAdjust?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`quotes`** CSS property sets how the browser should render quotation marks that are added using the `open-quotes` or `close-quotes` values of the CSS `content` property.
+   *
+   * **Syntax**: `none | auto | [ <string> <string> ]+`
+   *
+   * **Initial value**: depends on user agent
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **11** | **1.5** | **9**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/quotes
+   */
+  quotes?: Property.Quotes | undefined;
+  /**
+   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.
+   *
+   * **Syntax**: `none | both | horizontal | vertical | block | inline`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **1**  |  **4**  | **3**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/resize
+   */
+  resize?: Property.Resize | undefined;
+  /**
+   * The **`right`** CSS property participates in specifying the horizontal position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/right
+   */
+  right?: Property.Right<TLength> | undefined;
+  /**
+   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` property.
+   *
+   * **Syntax**: `none | <angle> | [ x | y | z | <number>{3} ] && <angle>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/rotate
+   */
+  rotate?: Property.Rotate | undefined;
+  /**
+   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's rows.
+   *
+   * **Syntax**: `normal | <length-percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **47** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap
+   */
+  rowGap?: Property.RowGap<TLength> | undefined;
+  /**
+   * The **`ruby-align`** CSS property defines the distribution of the different ruby elements over the base.
+   *
+   * **Syntax**: `start | center | space-between | space-around`
+   *
+   * **Initial value**: `space-around`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **38**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align
+   */
+  rubyAlign?: Property.RubyAlign | undefined;
+  /**
+   * **Syntax**: `separate | collapse | auto`
+   *
+   * **Initial value**: `separate`
+   */
+  rubyMerge?: Property.RubyMerge | undefined;
+  /**
+   * The **`ruby-position`** CSS property defines the position of a ruby element relatives to its base element. It can be positioned over the element (`over`), under it (`under`), or between the characters on their right side (`inter-character`).
+   *
+   * **Syntax**: `[ alternate || [ over | under ] ] | inter-character`
+   *
+   * **Initial value**: `alternate`
+   *
+   * | Chrome  | Firefox |   Safari    | Edge  | IE  |
+   * | :-----: | :-----: | :---------: | :---: | :-: |
+   * | **84**  | **38**  | **7** _-x-_ | 12-79 | No  |
+   * | 1 _-x-_ |         |             |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position
+   */
+  rubyPosition?: Property.RubyPosition | undefined;
+  /**
+   * The **`scale`** CSS property allows you to specify scale transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.
+   *
+   * **Syntax**: `none | <number>{1,3}`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scale
+   */
+  scale?: Property.Scale | undefined;
+  /**
+   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.
+   *
+   * **Syntax**: `auto | smooth`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **61** | **36**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior
+   */
+  scrollBehavior?: Property.ScrollBehavior | undefined;
+  /**
+   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end
+   */
+  scrollMarginBlockEnd?: Property.ScrollMarginBlockEnd<TLength> | undefined;
+  /**
+   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start
+   */
+  scrollMarginBlockStart?: Property.ScrollMarginBlockStart<TLength> | undefined;
+  /**
+   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |              Safari              | Edge | IE  |
+   * | :----: | :-----: | :------------------------------: | :--: | :-: |
+   * | **69** | **68**  |             **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-bottom)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom
+   */
+  scrollMarginBottom?: Property.ScrollMarginBottom<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end
+   */
+  scrollMarginInlineEnd?: Property.ScrollMarginInlineEnd<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start
+   */
+  scrollMarginInlineStart?: Property.ScrollMarginInlineStart<TLength> | undefined;
+  /**
+   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari             | Edge | IE  |
+   * | :----: | :-----: | :----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-left)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left
+   */
+  scrollMarginLeft?: Property.ScrollMarginLeft<TLength> | undefined;
+  /**
+   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari              | Edge | IE  |
+   * | :----: | :-----: | :-----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-right)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right
+   */
+  scrollMarginRight?: Property.ScrollMarginRight<TLength> | undefined;
+  /**
+   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |            Safari             | Edge | IE  |
+   * | :----: | :-----: | :---------------------------: | :--: | :-: |
+   * | **69** | **68**  |           **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-top)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top
+   */
+  scrollMarginTop?: Property.ScrollMarginTop<TLength> | undefined;
+  /**
+   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end
+   */
+  scrollPaddingBlockEnd?: Property.ScrollPaddingBlockEnd<TLength> | undefined;
+  /**
+   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start
+   */
+  scrollPaddingBlockStart?: Property.ScrollPaddingBlockStart<TLength> | undefined;
+  /**
+   * The `scroll-padding-bottom` property defines offsets for the bottom of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom
+   */
+  scrollPaddingBottom?: Property.ScrollPaddingBottom<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end
+   */
+  scrollPaddingInlineEnd?: Property.ScrollPaddingInlineEnd<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start
+   */
+  scrollPaddingInlineStart?: Property.ScrollPaddingInlineStart<TLength> | undefined;
+  /**
+   * The `scroll-padding-left` property defines offsets for the left of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left
+   */
+  scrollPaddingLeft?: Property.ScrollPaddingLeft<TLength> | undefined;
+  /**
+   * The `scroll-padding-right` property defines offsets for the right of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right
+   */
+  scrollPaddingRight?: Property.ScrollPaddingRight<TLength> | undefined;
+  /**
+   * The **`scroll-padding-top`** property defines offsets for the top of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top
+   */
+  scrollPaddingTop?: Property.ScrollPaddingTop<TLength> | undefined;
+  /**
+   * The `scroll-snap-align` property specifies the box's snap position as an alignment of its snap area (as the alignment subject) within its snap container's snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.
+   *
+   * **Syntax**: `[ none | start | end | center ]{1,2}`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align
+   */
+  scrollSnapAlign?: Property.ScrollSnapAlign | undefined;
+  /**
+   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |              Safari              | Edge | IE  |
+   * | :----: | :-----: | :------------------------------: | :--: | :-: |
+   * | **69** | **68**  |             **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-bottom)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom
+   */
+  scrollSnapMarginBottom?: Property.ScrollMarginBottom<TLength> | undefined;
+  /**
+   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari             | Edge | IE  |
+   * | :----: | :-----: | :----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-left)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left
+   */
+  scrollSnapMarginLeft?: Property.ScrollMarginLeft<TLength> | undefined;
+  /**
+   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari              | Edge | IE  |
+   * | :----: | :-----: | :-----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-right)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right
+   */
+  scrollSnapMarginRight?: Property.ScrollMarginRight<TLength> | undefined;
+  /**
+   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |            Safari             | Edge | IE  |
+   * | :----: | :-----: | :---------------------------: | :--: | :-: |
+   * | **69** | **68**  |           **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-top)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top
+   */
+  scrollSnapMarginTop?: Property.ScrollMarginTop<TLength> | undefined;
+  /**
+   * The **`scroll-snap-stop`** CSS property defines whether or not the scroll container is allowed to "pass over" possible snap positions.
+   *
+   * **Syntax**: `normal | always`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **75** | **103** | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop
+   */
+  scrollSnapStop?: Property.ScrollSnapStop | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | [ x | y | block | inline | both ] [ mandatory | proximity ]?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |      IE      |
+   * | :----: | :-----: | :-----: | :----: | :----------: |
+   * | **69** |  39-68  | **11**  | **79** | **10** _-x-_ |
+   * |        |         | 9 _-x-_ |        |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type
+   */
+  scrollSnapType?: Property.ScrollSnapType | undefined;
+  /**
+   * The **`scroll-timeline-axis`** CSS property can be used to specify the scrollbar that will be used to provide the timeline for a scroll-timeline animation.
+   *
+   * **Syntax**: `[ block | inline | x | y ]#`
+   *
+   * **Initial value**: `block`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline-axis
+   */
+  scrollTimelineAxis?: Property.ScrollTimelineAxis | undefined;
+  /**
+   * The **`scroll-timeline-name`** CSS property defines a name that can be used to identify an element as the source of a scroll timeline for an animation.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline-name
+   */
+  scrollTimelineName?: Property.ScrollTimelineName | undefined;
+  /**
+   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.
+   *
+   * **Syntax**: `auto | <color>{2}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **121** | **64**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color
+   */
+  scrollbarColor?: Property.ScrollbarColor | undefined;
+  /**
+   * The **`scrollbar-gutter`** CSS property allows authors to reserve space for the scrollbar, preventing unwanted layout changes as the content grows while also avoiding unnecessary visuals when scrolling isn't needed.
+   *
+   * **Syntax**: `auto | stable && both-edges?`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **94** | **97**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-gutter
+   */
+  scrollbarGutter?: Property.ScrollbarGutter | undefined;
+  /**
+   * The **`scrollbar-width`** property allows the author to set the maximum thickness of an element's scrollbars when they are shown.
+   *
+   * **Syntax**: `auto | thin | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **121** | **64**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width
+   */
+  scrollbarWidth?: Property.ScrollbarWidth | undefined;
+  /**
+   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `0.0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold
+   */
+  shapeImageThreshold?: Property.ShapeImageThreshold | undefined;
+  /**
+   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin
+   */
+  shapeMargin?: Property.ShapeMargin<TLength> | undefined;
+  /**
+   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.
+   *
+   * **Syntax**: `none | [ <shape-box> || <basic-shape> ] | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside
+   */
+  shapeOutside?: Property.ShapeOutside | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **21** | **91**  | **7**  | n/a  | No  |
+   * |        | 4 _-x-_ |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size
+   */
+  tabSize?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.
+   *
+   * **Syntax**: `auto | fixed`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **14** |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout
+   */
+  tableLayout?: Property.TableLayout | undefined;
+  /**
+   * The **`text-align`** CSS property sets the horizontal alignment of the inline-level content inside a block element or table-cell box. This means it works like `vertical-align` but in the horizontal direction.
+   *
+   * **Syntax**: `start | end | left | right | center | justify | match-parent`
+   *
+   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-align
+   */
+  textAlign?: Property.TextAlign | undefined;
+  /**
+   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.
+   *
+   * **Syntax**: `auto | start | end | left | right | center | justify`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **47** | **49**  | **16** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last
+   */
+  textAlignLast?: Property.TextAlignLast | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   *
+   * |           Chrome           | Firefox |            Safari            |  Edge  |                   IE                   |
+   * | :------------------------: | :-----: | :--------------------------: | :----: | :------------------------------------: |
+   * |           **48**           | **48**  |           **15.4**           | **79** | **11** _(-ms-text-combine-horizontal)_ |
+   * | 9 _(-webkit-text-combine)_ |         | 5.1 _(-webkit-text-combine)_ |        |                                        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright
+   */
+  textCombineUpright?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color
+   */
+  textDecorationColor?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line
+   */
+  textDecorationLine?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-skip`** CSS property sets what parts of an element's content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.
+   *
+   * **Syntax**: `none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]`
+   *
+   * **Initial value**: `objects`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | 57-64  |   No    | **12.1** | n/a  | No  |
+   * |        |         | 7 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip
+   */
+  textDecorationSkip?: Property.TextDecorationSkip | undefined;
+  /**
+   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.
+   *
+   * **Syntax**: `auto | all | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **64** | **70**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink
+   */
+  textDecorationSkipInk?: Property.TextDecorationSkipInk | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style
+   */
+  textDecorationStyle?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`text-decoration-thickness`** CSS property sets the stroke thickness of the decoration line that is used on text in an element, such as a line-through, underline, or overline.
+   *
+   * **Syntax**: `auto | from-font | <length> | <percentage> `
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **89** | **70**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness
+   */
+  textDecorationThickness?: Property.TextDecorationThickness<TLength> | undefined;
+  /**
+   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color
+   */
+  textEmphasisColor?: Property.TextEmphasisColor | undefined;
+  /**
+   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.
+   *
+   * **Syntax**: `[ over | under ] && [ right | left ]`
+   *
+   * **Initial value**: `over right`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position
+   */
+  textEmphasisPosition?: Property.TextEmphasisPosition | undefined;
+  /**
+   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style
+   */
+  textEmphasisStyle?: Property.TextEmphasisStyle | undefined;
+  /**
+   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.
+   *
+   * **Syntax**: `<length-percentage> && hanging? && each-line?`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent
+   */
+  textIndent?: Property.TextIndent<TLength> | undefined;
+  /**
+   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.
+   *
+   * **Syntax**: `auto | inter-character | inter-word | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge  |   IE   |
+   * | :----: | :-----: | :----: | :---: | :----: |
+   * |  n/a   | **55**  |   No   | 12-79 | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify
+   */
+  textJustify?: Property.TextJustify | undefined;
+  /**
+   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.
+   *
+   * **Syntax**: `mixed | upright | sideways`
+   *
+   * **Initial value**: `mixed`
+   *
+   * |  Chrome  | Firefox |  Safari   | Edge | IE  |
+   * | :------: | :-----: | :-------: | :--: | :-: |
+   * |  **48**  | **41**  |  **14**   | n/a  | No  |
+   * | 11 _-x-_ |         | 5.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation
+   */
+  textOrientation?: Property.TextOrientation | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **7**  | **1.3** | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow
+   */
+  textOverflow?: Property.TextOverflow | undefined;
+  /**
+   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.
+   *
+   * **Syntax**: `auto | optimizeSpeed | optimizeLegibility | geometricPrecision`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **4**  |  **1**  | **5**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering
+   */
+  textRendering?: Property.TextRendering | undefined;
+  /**
+   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.
+   *
+   * **Syntax**: `none | <shadow-t>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **2**  | **3.5** | **1.1** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow
+   */
+  textShadow?: Property.TextShadow | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **54** |   No    |   No   | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust
+   */
+  textSizeAdjust?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby.
+   *
+   * **Syntax**: `none | capitalize | uppercase | lowercase | full-width | full-size-kana`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform
+   */
+  textTransform?: Property.TextTransform | undefined;
+  /**
+   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.
+   *
+   * **Syntax**: `auto | <length> | <percentage> `
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **70**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset
+   */
+  textUnderlineOffset?: Property.TextUnderlineOffset<TLength> | undefined;
+  /**
+   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.
+   *
+   * **Syntax**: `auto | from-font | [ under || [ left | right ] ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :------: | :----: | :---: |
+   * | **33** | **74**  | **12.1** | **12** | **6** |
+   * |        |         | 9 _-x-_  |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position
+   */
+  textUnderlinePosition?: Property.TextUnderlinePosition | undefined;
+  /**
+   * The **`text-wrap`** CSS property controls how text inside an element is wrapped. The different values provide:
+   *
+   * **Syntax**: `wrap | nowrap | balance | stable | pretty`
+   *
+   * **Initial value**: `wrap`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **114** | **121** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-wrap
+   */
+  textWrap?: Property.TextWrap | undefined;
+  /**
+   * The **`timeline-scope`** CSS property modifies the scope of a named animation timeline.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/timeline-scope
+   */
+  timelineScope?: Property.TimelineScope | undefined;
+  /**
+   * The **`top`** CSS property participates in specifying the vertical position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/top
+   */
+  top?: Property.Top<TLength> | undefined;
+  /**
+   * The **`touch-action`** CSS property sets how an element's region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).
+   *
+   * **Syntax**: `auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |    IE    |
+   * | :----: | :-----: | :----: | :----: | :------: |
+   * | **36** | **52**  | **13** | **12** |  **11**  |
+   * |        |         |        |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action
+   */
+  touchAction?: Property.TouchAction | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |
+   * | :-----: | :-----: | :-------: | :----: | :-----: |
+   * | **36**  | **16**  |   **9**   | **12** | **10**  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform
+   */
+  transform?: Property.Transform | undefined;
+  /**
+   * The **`transform-box`** CSS property defines the layout box to which the `transform`, individual transform properties `translate`,`scale`, and `rotate`, and `transform-origin` properties relate.
+   *
+   * **Syntax**: `content-box | border-box | fill-box | stroke-box | view-box`
+   *
+   * **Initial value**: `view-box`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **64** | **55**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box
+   */
+  transformBox?: Property.TransformBox | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE    |
+   * | :-----: | :-----: | :-----: | :----: | :-----: |
+   * | **36**  | **16**  |  **9**  | **12** | **10**  |
+   * | 1 _-x-_ |         | 2 _-x-_ |        | 9 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin
+   */
+  transformOrigin?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |
+   * | :------: | :-----: | :-----: | :----: | :-: |
+   * |  **36**  | **16**  |  **9**  | **12** | No  |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style
+   */
+  transformStyle?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition-behavior`** CSS property specifies whether transitions will be started for properties whose animation behavior is discrete.
+   *
+   * **Syntax**: `<transition-behavior-value>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **117** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-behavior
+   */
+  transitionBehavior?: Property.TransitionBehavior | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **26**  | **16**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay
+   */
+  transitionDelay?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration
+   */
+  transitionDuration?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property
+   */
+  transitionProperty?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function
+   */
+  transitionTimingFunction?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`translate`** CSS property allows you to specify translation transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.
+   *
+   * **Syntax**: `none | <length-percentage> [ <length-percentage> <length>? ]?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/translate
+   */
+  translate?: Property.Translate<TLength> | undefined;
+  /**
+   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.
+   *
+   * **Syntax**: `normal | embed | isolate | bidi-override | isolate-override | plaintext`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE    |
+   * | :----: | :-----: | :-----: | :----: | :-----: |
+   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi
+   */
+  unicodeBidi?: Property.UnicodeBidi | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |   Safari    |   Edge   |      IE      |
+   * | :-----: | :-----: | :---------: | :------: | :----------: |
+   * | **54**  | **69**  | **3** _-x-_ |  **79**  | **10** _-x-_ |
+   * | 1 _-x-_ | 1 _-x-_ |             | 12 _-x-_ |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/user-select
+   */
+  userSelect?: Property.UserSelect | undefined;
+  /**
+   * The **`vertical-align`** CSS property sets vertical alignment of an inline, inline-block or table-cell box.
+   *
+   * **Syntax**: `baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>`
+   *
+   * **Initial value**: `baseline`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align
+   */
+  verticalAlign?: Property.VerticalAlign<TLength> | undefined;
+  /**
+   * The **`view-timeline-axis`** CSS property is used to specify the scrollbar direction that will be used to provide the timeline for a _named view progress timeline_ animation, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline-axis` is set on the subject. See CSS scroll-driven animations for more details.
+   *
+   * **Syntax**: `[ block | inline | x | y ]#`
+   *
+   * **Initial value**: `block`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-axis
+   */
+  viewTimelineAxis?: Property.ViewTimelineAxis | undefined;
+  /**
+   * The **`view-timeline-inset`** CSS property is used to specify one or two values representing an adjustment to the position of the scrollport (see Scroll container for more details) in which the subject element of a _named view progress timeline_ animation is deemed to be visible. Put another way, this allows you to specify start and/or end inset (or outset) values that offset the position of the timeline.
+   *
+   * **Syntax**: `[ [ auto | <length-percentage> ]{1,2} ]#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-inset
+   */
+  viewTimelineInset?: Property.ViewTimelineInset<TLength> | undefined;
+  /**
+   * The **`view-timeline-name`** CSS property is used to define the name of a _named view progress timeline_, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline` is set on the subject.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-name
+   */
+  viewTimelineName?: Property.ViewTimelineName | undefined;
+  /**
+   * The **`view-transition-name`** CSS property provides the selected element with a distinct identifying name (a `<custom-ident>`) and causes it to participate in a separate view transition from the root view transition — or no view transition if the `none` value is specified.
+   *
+   * **Syntax**: `none | <custom-ident>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **111** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-transition-name
+   */
+  viewTransitionName?: Property.ViewTransitionName | undefined;
+  /**
+   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.
+   *
+   * **Syntax**: `visible | hidden | collapse`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/visibility
+   */
+  visibility?: Property.Visibility | undefined;
+  /**
+   * The **`white-space`** CSS property sets how white space inside an element is handled.
+   *
+   * **Syntax**: `normal | pre | nowrap | pre-wrap | pre-line | break-spaces | [ <'white-space-collapse'> || <'text-wrap'> || <'white-space-trim'> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/white-space
+   */
+  whiteSpace?: Property.WhiteSpace | undefined;
+  /**
+   * The **`white-space-collapse`** CSS property controls how white space inside an element is collapsed.
+   *
+   * **Syntax**: `collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces`
+   *
+   * **Initial value**: `collapse`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **114** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/white-space-collapse
+   */
+  whiteSpaceCollapse?: Property.WhiteSpaceCollapse | undefined;
+  /**
+   * **Syntax**: `none | discard-before || discard-after || discard-inner`
+   *
+   * **Initial value**: `none`
+   */
+  whiteSpaceTrim?: Property.WhiteSpaceTrim | undefined;
+  /**
+   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `2`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **25** |   No    | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/widows
+   */
+  widows?: Property.Widows | undefined;
+  /**
+   * The **`width`** CSS property sets an element's width. By default, it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/width
+   */
+  width?: Property.Width<TLength> | undefined;
+  /**
+   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.
+   *
+   * **Syntax**: `auto | <animateable-feature>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **36** | **36**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/will-change
+   */
+  willChange?: Property.WillChange | undefined;
+  /**
+   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.
+   *
+   * **Syntax**: `normal | break-all | keep-all | break-word`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  | **15**  | **3**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/word-break
+   */
+  wordBreak?: Property.WordBreak | undefined;
+  /**
+   * The **`word-spacing`** CSS property sets the length of space between words and between tags.
+   *
+   * **Syntax**: `normal | <length>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing
+   */
+  wordSpacing?: Property.WordSpacing<TLength> | undefined;
+  /**
+   * The **`overflow-wrap`** CSS property applies to inline elements, setting whether the browser should insert line breaks within an otherwise unbreakable string to prevent text from overflowing its line box.
+   *
+   * **Syntax**: `normal | break-word`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge   | IE  |
+   * | :-----: | :-----: | :-------: | :-----: | :-: |
+   * | **≤80** | **≤72** | **≤13.1** | **≤80** | No  |
+   */
+  wordWrap?: Property.WordWrap | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |  IE   |
+   * | :-----: | :-----: | :-------: | :----: | :---: |
+   * | **48**  | **41**  | **10.1**  | **12** | **9** |
+   * | 8 _-x-_ |         | 5.1 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode
+   */
+  writingMode?: Property.WritingMode | undefined;
+  /**
+   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.
+   *
+   * **Syntax**: `auto | <integer>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/z-index
+   */
+  zIndex?: Property.ZIndex | undefined;
+  /**
+   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.
+   *
+   * **Syntax**: `normal | reset | <number> | <percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE    |
+   * | :----: | :-----: | :-----: | :----: | :-----: |
+   * | **1**  |   n/a   | **3.1** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/zoom
+   */
+  zoom?: Property.Zoom | undefined;
+}
+
+export interface StandardShorthandProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`all`** shorthand CSS property resets all of an element's properties except `unicode-bidi`, `direction`, and CSS Custom Properties. It can set properties to their initial or inherited values, or to the values specified in another cascade layer or stylesheet origin.
+   *
+   * **Syntax**: `initial | inherit | unset | revert | revert-layer`
+   *
+   * **Initial value**: There is no practical initial value for it.
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **37** | **27**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/all
+   */
+  all?: Property.All | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation
+   */
+  animation?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`animation-range`** CSS shorthand property is used to set the start and end of an animation's attachment range along its timeline, i.e. where along the timeline an animation will start and end.
+   *
+   * **Syntax**: `[ <'animation-range-start'> <'animation-range-end'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range
+   */
+  animationRange?: Property.AnimationRange<TLength> | undefined;
+  /**
+   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.
+   *
+   * **Syntax**: `[ <bg-layer> , ]* <final-bg-layer>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background
+   */
+  background?: Property.Background<TLength> | undefined;
+  /**
+   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `<bg-position>#`
+   *
+   * **Initial value**: `0% 0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position
+   */
+  backgroundPosition?: Property.BackgroundPosition<TLength> | undefined;
+  /**
+   * The **`border`** shorthand CSS property sets an element's border. It sets the values of `border-width`, `border-style`, and `border-color`.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border
+   */
+  border?: Property.Border<TLength> | undefined;
+  /**
+   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block
+   */
+  borderBlock?: Property.BorderBlock<TLength> | undefined;
+  /**
+   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end
+   */
+  borderBlockEnd?: Property.BorderBlockEnd<TLength> | undefined;
+  /**
+   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start
+   */
+  borderBlockStart?: Property.BorderBlockStart<TLength> | undefined;
+  /**
+   * The **`border-bottom`** shorthand CSS property sets an element's bottom border. It sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom
+   */
+  borderBottom?: Property.BorderBottom<TLength> | undefined;
+  /**
+   * The **`border-color`** shorthand CSS property sets the color of an element's border.
+   *
+   * **Syntax**: `<color>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-color
+   */
+  borderColor?: Property.BorderColor | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   *
+   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |
+   * | :-----: | :-------: | :-----: | :----: | :----: |
+   * | **16**  |  **15**   |  **6**  | **12** | **11** |
+   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image
+   */
+  borderImage?: Property.BorderImage | undefined;
+  /**
+   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline
+   */
+  borderInline?: Property.BorderInline<TLength> | undefined;
+  /**
+   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end
+   */
+  borderInlineEnd?: Property.BorderInlineEnd<TLength> | undefined;
+  /**
+   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start
+   */
+  borderInlineStart?: Property.BorderInlineStart<TLength> | undefined;
+  /**
+   * The **`border-left`** shorthand CSS property sets all the properties of an element's left border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left
+   */
+  borderLeft?: Property.BorderLeft<TLength> | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius
+   */
+  borderRadius?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`border-right`** shorthand CSS property sets all the properties of an element's right border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right
+   */
+  borderRight?: Property.BorderRight<TLength> | undefined;
+  /**
+   * The **`border-style`** shorthand CSS property sets the line style for all four sides of an element's border.
+   *
+   * **Syntax**: `<line-style>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-style
+   */
+  borderStyle?: Property.BorderStyle | undefined;
+  /**
+   * The **`border-top`** shorthand CSS property sets all the properties of an element's top border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top
+   */
+  borderTop?: Property.BorderTop<TLength> | undefined;
+  /**
+   * The **`border-width`** shorthand CSS property sets the width of an element's border.
+   *
+   * **Syntax**: `<line-width>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-width
+   */
+  borderWidth?: Property.BorderWidth<TLength> | undefined;
+  /** **Syntax**: `<'caret-color'> || <'caret-shape'>` */
+  caret?: Property.Caret | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule
+   */
+  columnRule?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **50** | **52**  |  **9**  | **12** | **10** |
+   * |        |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/columns
+   */
+  columns?: Property.Columns<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-size`** CSS shorthand property sets the size of an element that a browser will use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `[ auto? [ none | <length> ] ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **83** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-size
+   */
+  containIntrinsicSize?: Property.ContainIntrinsicSize<TLength> | undefined;
+  /**
+   * The **container** shorthand CSS property establishes the element as a query container and specifies the name or name for the containment context used in a container query.
+   *
+   * **Syntax**: `<'container-name'> [ / <'container-type'> ]?`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container
+   */
+  container?: Property.Container | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |
+   * | :------: | :-----: | :-----: | :----: | :------: |
+   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex
+   */
+  flex?: Property.Flex<TLength> | undefined;
+  /**
+   * The **`flex-flow`** CSS shorthand property specifies the direction of a flex container, as well as its wrapping behavior.
+   *
+   * **Syntax**: `<'flex-direction'> || <'flex-wrap'>`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow
+   */
+  flexFlow?: Property.FlexFlow | undefined;
+  /**
+   * The **`font`** CSS shorthand property sets all the different properties of an element's font. Alternatively, it sets an element's font to a system font.
+   *
+   * **Syntax**: `[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font
+   */
+  font?: Property.Font | undefined;
+  /**
+   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.
+   *
+   * **Syntax**: `<'row-gap'> <'column-gap'>?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/gap
+   */
+  gap?: Property.Gap<TLength> | undefined;
+  /**
+   * The **`grid`** CSS property is a shorthand property that sets all of the explicit and implicit grid properties in a single declaration.
+   *
+   * **Syntax**: `<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid
+   */
+  grid?: Property.Grid | undefined;
+  /**
+   * The **`grid-area`** CSS shorthand property specifies a grid item's size and location within a grid by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]{0,3}`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area
+   */
+  gridArea?: Property.GridArea | undefined;
+  /**
+   * The **`grid-column`** CSS shorthand property specifies a grid item's size and location within a grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column
+   */
+  gridColumn?: Property.GridColumn | undefined;
+  /**
+   * The **`grid-row`** CSS shorthand property specifies a grid item's size and location within a grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row
+   */
+  gridRow?: Property.GridRow | undefined;
+  /**
+   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, grid rows, and grid areas.
+   *
+   * **Syntax**: `none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template
+   */
+  gridTemplate?: Property.GridTemplate | undefined;
+  /**
+   * The **`inset`** CSS property is a shorthand that corresponds to the `top`, `right`, `bottom`, and/or `left` properties. It has the same multi-value syntax of the `margin` shorthand.
+   *
+   * **Syntax**: `<'top'>{1,4}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset
+   */
+  inset?: Property.Inset<TLength> | undefined;
+  /**
+   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block
+   */
+  insetBlock?: Property.InsetBlock<TLength> | undefined;
+  /**
+   * The **`inset-inline`** CSS property defines the logical start and end offsets of an element in the inline direction, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline
+   */
+  insetInline?: Property.InsetInline<TLength> | undefined;
+  /**
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  lineClamp?: Property.LineClamp | undefined;
+  /**
+   * The **`list-style`** CSS shorthand property allows you to set all the list style properties at once.
+   *
+   * **Syntax**: `<'list-style-type'> || <'list-style-position'> || <'list-style-image'>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style
+   */
+  listStyle?: Property.ListStyle | undefined;
+  /**
+   * The **`margin`** CSS shorthand property sets the margin area on all four sides of an element.
+   *
+   * **Syntax**: `[ <length> | <percentage> | auto ]{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin
+   */
+  margin?: Property.Margin<TLength> | undefined;
+  /**
+   * The **`margin-block`** CSS shorthand property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block
+   */
+  marginBlock?: Property.MarginBlock<TLength> | undefined;
+  /**
+   * The **`margin-inline`** CSS shorthand property is a shorthand property that defines both the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline
+   */
+  marginInline?: Property.MarginInline<TLength> | undefined;
+  /**
+   * The **`mask`** CSS shorthand property hides an element (partially or fully) by masking or clipping the image at specific points.
+   *
+   * **Syntax**: `<mask-layer>#`
+   *
+   * | Chrome | Firefox |  Safari   | Edge  | IE  |
+   * | :----: | :-----: | :-------: | :---: | :-: |
+   * | **1**  | **53**  | **15.4**  | 12-79 | No  |
+   * |        |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask
+   */
+  mask?: Property.Mask<TLength> | undefined;
+  /**
+   * The **`mask-border`** CSS shorthand property lets you create a mask along the edge of an element's border.
+   *
+   * **Syntax**: `<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>`
+   *
+   * |              Chrome              | Firefox |             Safari             | Edge | IE  |
+   * | :------------------------------: | :-----: | :----------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image)_ |   No    |            **17.2**            | n/a  | No  |
+   * |                                  |         | 3.1 _(-webkit-mask-box-image)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border
+   */
+  maskBorder?: Property.MaskBorder | undefined;
+  /**
+   * The **`offset`** CSS shorthand property sets all the properties required for animating an element along a defined path.
+   *
+   * **Syntax**: `[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?`
+   *
+   * |    Chrome     | Firefox | Safari | Edge | IE  |
+   * | :-----------: | :-----: | :----: | :--: | :-: |
+   * |    **55**     | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset
+   */
+  motion?: Property.Offset<TLength> | undefined;
+  /**
+   * The **`offset`** CSS shorthand property sets all the properties required for animating an element along a defined path.
+   *
+   * **Syntax**: `[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?`
+   *
+   * |    Chrome     | Firefox | Safari | Edge | IE  |
+   * | :-----------: | :-----: | :----: | :--: | :-: |
+   * |    **55**     | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset
+   */
+  offset?: Property.Offset<TLength> | undefined;
+  /**
+   * The **`outline`** CSS shorthand property sets most of the outline properties in a single declaration.
+   *
+   * **Syntax**: `[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :------: | :----: | :---: |
+   * | **94** | **88**  | **16.4** | **94** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline
+   */
+  outline?: Property.Outline<TLength> | undefined;
+  /**
+   * The **`overflow`** CSS shorthand property sets the desired behavior for an element's overflow — i.e. when an element's content is too big to fit in its block formatting context — in both directions.
+   *
+   * **Syntax**: `[ visible | hidden | clip | scroll | auto ]{1,2}`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow
+   */
+  overflow?: Property.Overflow | undefined;
+  /**
+   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.
+   *
+   * **Syntax**: `[ contain | none | auto ]{1,2}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior
+   */
+  overscrollBehavior?: Property.OverscrollBehavior | undefined;
+  /**
+   * The **`padding`** CSS shorthand property sets the padding area on all four sides of an element at once.
+   *
+   * **Syntax**: `[ <length> | <percentage> ]{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding
+   */
+  padding?: Property.Padding<TLength> | undefined;
+  /**
+   * The **`padding-block`** CSS shorthand property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block
+   */
+  paddingBlock?: Property.PaddingBlock<TLength> | undefined;
+  /**
+   * The **`padding-inline`** CSS shorthand property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline
+   */
+  paddingInline?: Property.PaddingInline<TLength> | undefined;
+  /**
+   * The **`place-content`** CSS shorthand property allows you to align content along both the block and inline directions at once (i.e. the `align-content` and `justify-content` properties) in a relevant layout system such as Grid or Flexbox.
+   *
+   * **Syntax**: `<'align-content'> <'justify-content'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **9**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-content
+   */
+  placeContent?: Property.PlaceContent | undefined;
+  /**
+   * The CSS **`place-items`** shorthand property allows you to align items along both the block and inline directions at once (i.e. the `align-items` and `justify-items` properties) in a relevant layout system such as Grid or Flexbox. If the second value is not set, the first value is also used for it.
+   *
+   * **Syntax**: `<'align-items'> <'justify-items'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-items
+   */
+  placeItems?: Property.PlaceItems | undefined;
+  /**
+   * The **`place-self`** CSS shorthand property allows you to align an individual item in both the block and inline directions at once (i.e. the `align-self` and `justify-self` properties) in a relevant layout system such as Grid or Flexbox. If the second value is not present, the first value is also used for it.
+   *
+   * **Syntax**: `<'align-self'> <'justify-self'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-self
+   */
+  placeSelf?: Property.PlaceSelf | undefined;
+  /**
+   * The **`scroll-margin`** shorthand property sets all of the scroll margins of an element at once, assigning values much like the `margin` property does for margins of an element.
+   *
+   * **Syntax**: `<length>{1,4}`
+   *
+   * | Chrome | Firefox |          Safari           | Edge | IE  |
+   * | :----: | :-----: | :-----------------------: | :--: | :-: |
+   * | **69** | **90**  |         **14.1**          | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin
+   */
+  scrollMargin?: Property.ScrollMargin<TLength> | undefined;
+  /**
+   * The `scroll-margin-block` shorthand property sets the scroll margins of an element in the block dimension.
+   *
+   * **Syntax**: `<length>{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block
+   */
+  scrollMarginBlock?: Property.ScrollMarginBlock<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline` shorthand property sets the scroll margins of an element in the inline dimension.
+   *
+   * **Syntax**: `<length>{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline
+   */
+  scrollMarginInline?: Property.ScrollMarginInline<TLength> | undefined;
+  /**
+   * The **`scroll-padding`** shorthand property sets scroll padding on all sides of an element at once, much like the `padding` property does for padding on an element.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,4}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding
+   */
+  scrollPadding?: Property.ScrollPadding<TLength> | undefined;
+  /**
+   * The `scroll-padding-block` shorthand property sets the scroll padding of an element in the block dimension.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block
+   */
+  scrollPaddingBlock?: Property.ScrollPaddingBlock<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline` shorthand property sets the scroll padding of an element in the inline dimension.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline
+   */
+  scrollPaddingInline?: Property.ScrollPaddingInline<TLength> | undefined;
+  /**
+   * The **`scroll-margin`** shorthand property sets all of the scroll margins of an element at once, assigning values much like the `margin` property does for margins of an element.
+   *
+   * **Syntax**: `<length>{1,4}`
+   *
+   * | Chrome | Firefox |          Safari           | Edge | IE  |
+   * | :----: | :-----: | :-----------------------: | :--: | :-: |
+   * | **69** |  68-90  |         **14.1**          | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin
+   */
+  scrollSnapMargin?: Property.ScrollMargin<TLength> | undefined;
+  /**
+   * The **`scroll-timeline`** CSS shorthand property defines a name that can be used to identify the source element of a scroll timeline, along with the scrollbar axis that should provide the timeline.
+   *
+   * **Syntax**: `[ <'scroll-timeline-name'> <'scroll-timeline-axis'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline
+   */
+  scrollTimeline?: Property.ScrollTimeline | undefined;
+  /**
+   * The **`text-decoration`** shorthand CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, `text-decoration-style`, and the newer `text-decoration-thickness` property.
+   *
+   * **Syntax**: `<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'> || <'text-decoration-thickness'>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration
+   */
+  textDecoration?: Property.TextDecoration<TLength> | undefined;
+  /**
+   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.
+   *
+   * **Syntax**: `<'text-emphasis-style'> || <'text-emphasis-color'>`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis
+   */
+  textEmphasis?: Property.TextEmphasis | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition
+   */
+  transition?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`view-timeline`** CSS shorthand property is used to define a _named view progress timeline_, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline` is set on the subject.
+   *
+   * **Syntax**: `[ <'view-timeline-name'> <'view-timeline-axis'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline
+   */
+  viewTimeline?: Property.ViewTimeline | undefined;
+}
+
+export interface StandardProperties<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardLonghandProperties<TLength, TTime>,
+    StandardShorthandProperties<TLength, TTime> {}
+
+export interface VendorLonghandProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  MozAnimationDelay?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   */
+  MozAnimationDirection?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  MozAnimationDuration?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   */
+  MozAnimationFillMode?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   */
+  MozAnimationIterationCount?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  MozAnimationName?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   */
+  MozAnimationPlayState?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  MozAnimationTimingFunction?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized`
+   *
+   * **Initial value**: `none` (but this value is overridden in the user agent CSS)
+   */
+  MozAppearance?: Property.MozAppearance | undefined;
+  /**
+   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.
+   *
+   * **Syntax**: `<url> | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozBinding?: Property.MozBinding | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderBottomColors?: Property.MozBorderBottomColors | undefined;
+  /**
+   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  MozBorderEndColor?: Property.BorderInlineEndColor | undefined;
+  /**
+   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderEndStyle?: Property.BorderInlineEndStyle | undefined;
+  /**
+   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  MozBorderEndWidth?: Property.BorderInlineEndWidth<TLength> | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderLeftColors?: Property.MozBorderLeftColors | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderRightColors?: Property.MozBorderRightColors | undefined;
+  /**
+   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  MozBorderStartColor?: Property.BorderInlineStartColor | undefined;
+  /**
+   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderStartStyle?: Property.BorderInlineStartStyle | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozBorderTopColors?: Property.MozBorderTopColors | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   */
+  MozBoxSizing?: Property.BoxSizing | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  MozColumnCount?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   */
+  MozColumnFill?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  MozColumnRuleColor?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  MozColumnRuleStyle?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  MozColumnRuleWidth?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  MozColumnWidth?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`-moz-context-properties`** property can be used within privileged contexts in Firefox to share the values of specified properties of the element with a child SVG image.
+   *
+   * **Syntax**: `none | [ fill | fill-opacity | stroke | stroke-opacity ]#`
+   *
+   * **Initial value**: `none`
+   */
+  MozContextProperties?: Property.MozContextProperties | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   */
+  MozFontFeatureSettings?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.
+   *
+   * **Syntax**: `normal | <string>`
+   *
+   * **Initial value**: `normal`
+   */
+  MozFontLanguageOverride?: Property.FontLanguageOverride | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  MozHyphens?: Property.Hyphens | undefined;
+  /**
+   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.
+   *
+   * **Syntax**: `<shape> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  MozImageRegion?: Property.MozImageRegion | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  MozMarginEnd?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  MozMarginStart?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.
+   *
+   * **Syntax**: `inline | block | horizontal | vertical`
+   *
+   * **Initial value**: `inline`
+   */
+  MozOrient?: Property.MozOrient | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  MozOsxFontSmoothing?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  MozOutlineRadiusBottomleft?: Property.MozOutlineRadiusBottomleft<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  MozOutlineRadiusBottomright?: Property.MozOutlineRadiusBottomright<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  MozOutlineRadiusTopleft?: Property.MozOutlineRadiusTopleft<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  MozOutlineRadiusTopright?: Property.MozOutlineRadiusTopright<TLength> | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  MozPaddingEnd?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  MozPaddingStart?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `<xul:stack>` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.
+   *
+   * **Syntax**: `ignore | stretch-to-fit`
+   *
+   * **Initial value**: `stretch-to-fit`
+   */
+  MozStackSizing?: Property.MozStackSizing | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   */
+  MozTabSize?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.
+   *
+   * **Syntax**: `none | blink`
+   *
+   * **Initial value**: `none`
+   */
+  MozTextBlink?: Property.MozTextBlink | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   */
+  MozTextSizeAdjust?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.
+   *
+   * **Syntax**: `ignore | normal | select-after | select-before | select-menu | select-same | select-all | none`
+   *
+   * **Initial value**: `none`
+   */
+  MozUserFocus?: Property.MozUserFocus | undefined;
+  /**
+   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.
+   *
+   * **Syntax**: `read-only | read-write | write-only`
+   *
+   * **Initial value**: `read-only`
+   */
+  MozUserModify?: Property.MozUserModify | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   */
+  MozUserSelect?: Property.UserSelect | undefined;
+  /**
+   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.
+   *
+   * **Syntax**: `drag | no-drag`
+   *
+   * **Initial value**: `drag`
+   */
+  MozWindowDragging?: Property.MozWindowDragging | undefined;
+  /**
+   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.
+   *
+   * **Syntax**: `default | menu | tooltip | sheet | none`
+   *
+   * **Initial value**: `default`
+   */
+  MozWindowShadow?: Property.MozWindowShadow | undefined;
+  /**
+   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.
+   *
+   * **Syntax**: `false | true`
+   *
+   * **Initial value**: `false`
+   */
+  msAccelerator?: Property.MsAccelerator | undefined;
+  /**
+   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.
+   *
+   * **Syntax**: `tb | rl | bt | lr`
+   *
+   * **Initial value**: `tb`
+   */
+  msBlockProgression?: Property.MsBlockProgression | undefined;
+  /**
+   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.
+   *
+   * **Syntax**: `none | chained`
+   *
+   * **Initial value**: `none`
+   */
+  msContentZoomChaining?: Property.MsContentZoomChaining | undefined;
+  /**
+   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.
+   *
+   * **Syntax**: `<percentage>`
+   *
+   * **Initial value**: `400%`
+   */
+  msContentZoomLimitMax?: Property.MsContentZoomLimitMax | undefined;
+  /**
+   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.
+   *
+   * **Syntax**: `<percentage>`
+   *
+   * **Initial value**: `100%`
+   */
+  msContentZoomLimitMin?: Property.MsContentZoomLimitMin | undefined;
+  /**
+   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.
+   *
+   * **Syntax**: `snapInterval( <percentage>, <percentage> ) | snapList( <percentage># )`
+   *
+   * **Initial value**: `snapInterval(0%, 100%)`
+   */
+  msContentZoomSnapPoints?: Property.MsContentZoomSnapPoints | undefined;
+  /**
+   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.
+   *
+   * **Syntax**: `none | proximity | mandatory`
+   *
+   * **Initial value**: `none`
+   */
+  msContentZoomSnapType?: Property.MsContentZoomSnapType | undefined;
+  /**
+   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.
+   *
+   * **Syntax**: `none | zoom`
+   *
+   * **Initial value**: zoom for the top level element, none for all other elements
+   */
+  msContentZooming?: Property.MsContentZooming | undefined;
+  /**
+   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.
+   *
+   * **Syntax**: `<string>`
+   *
+   * **Initial value**: "" (the empty string)
+   */
+  msFilter?: Property.MsFilter | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   */
+  msFlexDirection?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   */
+  msFlexPositive?: Property.FlexGrow | undefined;
+  /**
+   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.
+   *
+   * **Syntax**: `[ none | <custom-ident> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  msFlowFrom?: Property.MsFlowFrom | undefined;
+  /**
+   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.
+   *
+   * **Syntax**: `[ none | <custom-ident> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  msFlowInto?: Property.MsFlowInto | undefined;
+  /**
+   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list>`
+   *
+   * **Initial value**: `none`
+   */
+  msGridColumns?: Property.MsGridColumns<TLength> | undefined;
+  /**
+   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list>`
+   *
+   * **Initial value**: `none`
+   */
+  msGridRows?: Property.MsGridRows<TLength> | undefined;
+  /**
+   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   */
+  msHighContrastAdjust?: Property.MsHighContrastAdjust | undefined;
+  /**
+   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.
+   *
+   * **Syntax**: `auto | <integer>{1,3}`
+   *
+   * **Initial value**: `auto`
+   */
+  msHyphenateLimitChars?: Property.MsHyphenateLimitChars | undefined;
+  /**
+   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.
+   *
+   * **Syntax**: `no-limit | <integer>`
+   *
+   * **Initial value**: `no-limit`
+   */
+  msHyphenateLimitLines?: Property.MsHyphenateLimitLines | undefined;
+  /**
+   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.
+   *
+   * **Syntax**: `<percentage> | <length>`
+   *
+   * **Initial value**: `0`
+   */
+  msHyphenateLimitZone?: Property.MsHyphenateLimitZone<TLength> | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  msHyphens?: Property.Hyphens | undefined;
+  /**
+   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.
+   *
+   * **Syntax**: `auto | after`
+   *
+   * **Initial value**: `auto`
+   */
+  msImeAlign?: Property.MsImeAlign | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   */
+  msLineBreak?: Property.LineBreak | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   */
+  msOrder?: Property.Order | undefined;
+  /**
+   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.
+   *
+   * **Syntax**: `auto | none | scrollbar | -ms-autohiding-scrollbar`
+   *
+   * **Initial value**: `auto`
+   */
+  msOverflowStyle?: Property.MsOverflowStyle | undefined;
+  /**
+   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   */
+  msOverflowX?: Property.OverflowX | undefined;
+  /**
+   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   */
+  msOverflowY?: Property.OverflowY | undefined;
+  /**
+   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.
+   *
+   * **Syntax**: `chained | none`
+   *
+   * **Initial value**: `chained`
+   */
+  msScrollChaining?: Property.MsScrollChaining | undefined;
+  /**
+   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.
+   *
+   * **Syntax**: `auto | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  msScrollLimitXMax?: Property.MsScrollLimitXMax<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  msScrollLimitXMin?: Property.MsScrollLimitXMin<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.
+   *
+   * **Syntax**: `auto | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  msScrollLimitYMax?: Property.MsScrollLimitYMax<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  msScrollLimitYMin?: Property.MsScrollLimitYMin<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.
+   *
+   * **Syntax**: `none | railed`
+   *
+   * **Initial value**: `railed`
+   */
+  msScrollRails?: Property.MsScrollRails | undefined;
+  /**
+   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.
+   *
+   * **Syntax**: `snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )`
+   *
+   * **Initial value**: `snapInterval(0px, 100%)`
+   */
+  msScrollSnapPointsX?: Property.MsScrollSnapPointsX | undefined;
+  /**
+   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.
+   *
+   * **Syntax**: `snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )`
+   *
+   * **Initial value**: `snapInterval(0px, 100%)`
+   */
+  msScrollSnapPointsY?: Property.MsScrollSnapPointsY | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | proximity | mandatory`
+   *
+   * **Initial value**: `none`
+   */
+  msScrollSnapType?: Property.MsScrollSnapType | undefined;
+  /**
+   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.
+   *
+   * **Syntax**: `none | vertical-to-horizontal`
+   *
+   * **Initial value**: `none`
+   */
+  msScrollTranslation?: Property.MsScrollTranslation | undefined;
+  /**
+   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: depends on user agent
+   */
+  msScrollbar3dlightColor?: Property.MsScrollbar3dlightColor | undefined;
+  /**
+   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ButtonText`
+   */
+  msScrollbarArrowColor?: Property.MsScrollbarArrowColor | undefined;
+  /**
+   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: depends on user agent
+   */
+  msScrollbarBaseColor?: Property.MsScrollbarBaseColor | undefined;
+  /**
+   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDDarkShadow`
+   */
+  msScrollbarDarkshadowColor?: Property.MsScrollbarDarkshadowColor | undefined;
+  /**
+   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDFace`
+   */
+  msScrollbarFaceColor?: Property.MsScrollbarFaceColor | undefined;
+  /**
+   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDHighlight`
+   */
+  msScrollbarHighlightColor?: Property.MsScrollbarHighlightColor | undefined;
+  /**
+   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDDarkShadow`
+   */
+  msScrollbarShadowColor?: Property.MsScrollbarShadowColor | undefined;
+  /**
+   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `Scrollbar`
+   */
+  msScrollbarTrackColor?: Property.MsScrollbarTrackColor | undefined;
+  /**
+   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.
+   *
+   * **Syntax**: `none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space`
+   *
+   * **Initial value**: `none`
+   */
+  msTextAutospace?: Property.MsTextAutospace | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   */
+  msTextCombineHorizontal?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   */
+  msTextOverflow?: Property.TextOverflow | undefined;
+  /**
+   * The **`touch-action`** CSS property sets how an element's region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).
+   *
+   * **Syntax**: `auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation`
+   *
+   * **Initial value**: `auto`
+   */
+  msTouchAction?: Property.TouchAction | undefined;
+  /**
+   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.
+   *
+   * **Syntax**: `grippers | none`
+   *
+   * **Initial value**: `grippers`
+   */
+  msTouchSelect?: Property.MsTouchSelect | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   */
+  msTransform?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   */
+  msTransformOrigin?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  msTransitionDelay?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  msTransitionDuration?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   */
+  msTransitionProperty?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  msTransitionTimingFunction?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `none | element | text`
+   *
+   * **Initial value**: `text`
+   */
+  msUserSelect?: Property.MsUserSelect | undefined;
+  /**
+   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.
+   *
+   * **Syntax**: `normal | break-all | keep-all | break-word`
+   *
+   * **Initial value**: `normal`
+   */
+  msWordBreak?: Property.WordBreak | undefined;
+  /**
+   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.
+   *
+   * **Syntax**: `auto | both | start | end | maximum | clear`
+   *
+   * **Initial value**: `auto`
+   */
+  msWrapFlow?: Property.MsWrapFlow | undefined;
+  /**
+   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  msWrapMargin?: Property.MsWrapMargin<TLength> | undefined;
+  /**
+   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.
+   *
+   * **Syntax**: `wrap | none`
+   *
+   * **Initial value**: `wrap`
+   */
+  msWrapThrough?: Property.MsWrapThrough | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   */
+  msWritingMode?: Property.WritingMode | undefined;
+  /**
+   * The CSS **`align-content`** property sets the distribution of space between and around content items along a flexbox's cross-axis or a grid's block axis.
+   *
+   * **Syntax**: `normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitAlignContent?: Property.AlignContent | undefined;
+  /**
+   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitAlignItems?: Property.AlignItems | undefined;
+  /**
+   * The **`align-self`** CSS property overrides a grid or flex item's `align-items` value. In Grid, it aligns the item inside the grid area. In Flexbox, it aligns the item on the cross axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitAlignSelf?: Property.AlignSelf | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  WebkitAnimationDelay?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitAnimationDirection?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  WebkitAnimationDuration?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitAnimationFillMode?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   */
+  WebkitAnimationIterationCount?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitAnimationName?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   */
+  WebkitAnimationPlayState?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  WebkitAnimationTimingFunction?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield | -apple-pay-button`
+   *
+   * **Initial value**: `none` (but this value is overridden in the user agent CSS)
+   */
+  WebkitAppearance?: Property.WebkitAppearance | undefined;
+  /**
+   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitBackdropFilter?: Property.BackdropFilter | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   */
+  WebkitBackfaceVisibility?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   */
+  WebkitBackgroundClip?: Property.BackgroundClip | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   */
+  WebkitBackgroundOrigin?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   */
+  WebkitBackgroundSize?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitBorderBeforeColor?: Property.WebkitBorderBeforeColor | undefined;
+  /**
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitBorderBeforeStyle?: Property.WebkitBorderBeforeStyle | undefined;
+  /**
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  WebkitBorderBeforeWidth?: Property.WebkitBorderBeforeWidth<TLength> | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitBorderBottomLeftRadius?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitBorderBottomRightRadius?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.
+   *
+   * **Syntax**: `<number-percentage>{1,4} && fill?`
+   *
+   * **Initial value**: `100%`
+   */
+  WebkitBorderImageSlice?: Property.BorderImageSlice | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitBorderTopLeftRadius?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitBorderTopRightRadius?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   */
+  WebkitBoxDecorationBreak?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.
+   *
+   * **Syntax**: `[ above | below | right | left ]? <length>? <image>?`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitBoxReflect?: Property.WebkitBoxReflect<TLength> | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitBoxShadow?: Property.BoxShadow | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   */
+  WebkitBoxSizing?: Property.BoxSizing | undefined;
+  /**
+   * The **`clip-path`** CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.
+   *
+   * **Syntax**: `<clip-source> | [ <basic-shape> || <geometry-box> ] | none`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitClipPath?: Property.ClipPath | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitColumnCount?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   */
+  WebkitColumnFill?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitColumnRuleColor?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitColumnRuleStyle?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  WebkitColumnRuleWidth?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.
+   *
+   * **Syntax**: `none | all`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitColumnSpan?: Property.ColumnSpan | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitColumnWidth?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitFilter?: Property.Filter | undefined;
+  /**
+   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.
+   *
+   * **Syntax**: `content | <'width'>`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitFlexBasis?: Property.FlexBasis<TLength> | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   */
+  WebkitFlexDirection?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitFlexGrow?: Property.FlexGrow | undefined;
+  /**
+   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `1`
+   */
+  WebkitFlexShrink?: Property.FlexShrink | undefined;
+  /**
+   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.
+   *
+   * **Syntax**: `nowrap | wrap | wrap-reverse`
+   *
+   * **Initial value**: `nowrap`
+   */
+  WebkitFlexWrap?: Property.FlexWrap | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitFontFeatureSettings?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.
+   *
+   * **Syntax**: `auto | normal | none`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitFontKerning?: Property.FontKerning | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitFontSmoothing?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitFontVariantLigatures?: Property.FontVariantLigatures | undefined;
+  /**
+   * The **`hyphenate-character`** CSS property sets the character (or string) used at the end of a line before a hyphenation break.
+   *
+   * **Syntax**: `auto | <string>`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitHyphenateCharacter?: Property.HyphenateCharacter | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  WebkitHyphens?: Property.Hyphens | undefined;
+  /**
+   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.
+   *
+   * **Syntax**: `normal | [ <number> <integer>? ]`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitInitialLetter?: Property.InitialLetter | undefined;
+  /**
+   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.
+   *
+   * **Syntax**: `normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]`
+   *
+   * **Initial value**: `normal`
+   */
+  WebkitJustifyContent?: Property.JustifyContent | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitLineBreak?: Property.LineBreak | undefined;
+  /**
+   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block to the specified number of lines.
+   *
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitLineClamp?: Property.WebkitLineClamp | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitMarginEnd?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitMarginStart?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * If a `mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.
+   *
+   * **Syntax**: `<attachment>#`
+   *
+   * **Initial value**: `scroll`
+   */
+  WebkitMaskAttachment?: Property.WebkitMaskAttachment | undefined;
+  /**
+   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitMaskBoxImageOutset?: Property.MaskBorderOutset<TLength> | undefined;
+  /**
+   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   */
+  WebkitMaskBoxImageRepeat?: Property.MaskBorderRepeat | undefined;
+  /**
+   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.
+   *
+   * **Syntax**: `<number-percentage>{1,4} fill?`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitMaskBoxImageSlice?: Property.MaskBorderSlice | undefined;
+  /**
+   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitMaskBoxImageSource?: Property.MaskBorderSource | undefined;
+  /**
+   * The **`mask-border-width`** CSS property sets the width of an element's mask border.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitMaskBoxImageWidth?: Property.MaskBorderWidth<TLength> | undefined;
+  /**
+   * The **`mask-clip`** CSS property determines the area which is affected by a mask. The painted content of an element must be restricted to this area.
+   *
+   * **Syntax**: `[ <box> | border | padding | content | text ]#`
+   *
+   * **Initial value**: `border`
+   */
+  WebkitMaskClip?: Property.WebkitMaskClip | undefined;
+  /**
+   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.
+   *
+   * **Syntax**: `<composite-style>#`
+   *
+   * **Initial value**: `source-over`
+   */
+  WebkitMaskComposite?: Property.WebkitMaskComposite | undefined;
+  /**
+   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element. By default this means the alpha channel of the mask image will be multiplied with the alpha channel of the element. This can be controlled with the `mask-mode` property.
+   *
+   * **Syntax**: `<mask-reference>#`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitMaskImage?: Property.WebkitMaskImage | undefined;
+  /**
+   * The **`mask-origin`** CSS property sets the origin of a mask.
+   *
+   * **Syntax**: `[ <box> | border | padding | content ]#`
+   *
+   * **Initial value**: `padding`
+   */
+  WebkitMaskOrigin?: Property.WebkitMaskOrigin | undefined;
+  /**
+   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.
+   *
+   * **Syntax**: `<position>#`
+   *
+   * **Initial value**: `0% 0%`
+   */
+  WebkitMaskPosition?: Property.WebkitMaskPosition<TLength> | undefined;
+  /**
+   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right ]#`
+   *
+   * **Initial value**: `0%`
+   */
+  WebkitMaskPositionX?: Property.WebkitMaskPositionX<TLength> | undefined;
+  /**
+   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.
+   *
+   * **Syntax**: `[ <length-percentage> | top | center | bottom ]#`
+   *
+   * **Initial value**: `0%`
+   */
+  WebkitMaskPositionY?: Property.WebkitMaskPositionY<TLength> | undefined;
+  /**
+   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   */
+  WebkitMaskRepeat?: Property.WebkitMaskRepeat | undefined;
+  /**
+   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.
+   *
+   * **Syntax**: `repeat | no-repeat | space | round`
+   *
+   * **Initial value**: `repeat`
+   */
+  WebkitMaskRepeatX?: Property.WebkitMaskRepeatX | undefined;
+  /**
+   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.
+   *
+   * **Syntax**: `repeat | no-repeat | space | round`
+   *
+   * **Initial value**: `repeat`
+   */
+  WebkitMaskRepeatY?: Property.WebkitMaskRepeatY | undefined;
+  /**
+   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   */
+  WebkitMaskSize?: Property.WebkitMaskSize<TLength> | undefined;
+  /**
+   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block, depending on its writing mode. It corresponds to either the `max-width` or the `max-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitMaxInlineSize?: Property.MaxInlineSize<TLength> | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitOrder?: Property.Order | undefined;
+  /**
+   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.
+   *
+   * **Syntax**: `auto | touch`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitOverflowScrolling?: Property.WebkitOverflowScrolling | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitPaddingEnd?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitPaddingStart?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitPerspective?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   */
+  WebkitPerspectiveOrigin?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   */
+  WebkitPrintColorAdjust?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`ruby-position`** CSS property defines the position of a ruby element relatives to its base element. It can be positioned over the element (`over`), under it (`under`), or between the characters on their right side (`inter-character`).
+   *
+   * **Syntax**: `[ alternate || [ over | under ] ] | inter-character`
+   *
+   * **Initial value**: `alternate`
+   */
+  WebkitRubyPosition?: Property.RubyPosition | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | [ x | y | block | inline | both ] [ mandatory | proximity ]?`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitScrollSnapType?: Property.ScrollSnapType | undefined;
+  /**
+   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitShapeMargin?: Property.ShapeMargin<TLength> | undefined;
+  /**
+   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `black`
+   */
+  WebkitTapHighlightColor?: Property.WebkitTapHighlightColor | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitTextCombine?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitTextDecorationColor?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitTextDecorationLine?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-skip`** CSS property sets what parts of an element's content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.
+   *
+   * **Syntax**: `none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]`
+   *
+   * **Initial value**: `objects`
+   */
+  WebkitTextDecorationSkip?: Property.TextDecorationSkip | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   */
+  WebkitTextDecorationStyle?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitTextEmphasisColor?: Property.TextEmphasisColor | undefined;
+  /**
+   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.
+   *
+   * **Syntax**: `[ over | under ] && [ right | left ]`
+   *
+   * **Initial value**: `over right`
+   */
+  WebkitTextEmphasisPosition?: Property.TextEmphasisPosition | undefined;
+  /**
+   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitTextEmphasisStyle?: Property.TextEmphasisStyle | undefined;
+  /**
+   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitTextFillColor?: Property.WebkitTextFillColor | undefined;
+  /**
+   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.
+   *
+   * **Syntax**: `mixed | upright | sideways`
+   *
+   * **Initial value**: `mixed`
+   */
+  WebkitTextOrientation?: Property.TextOrientation | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   */
+  WebkitTextSizeAdjust?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  WebkitTextStrokeColor?: Property.WebkitTextStrokeColor | undefined;
+  /**
+   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  WebkitTextStrokeWidth?: Property.WebkitTextStrokeWidth<TLength> | undefined;
+  /**
+   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.
+   *
+   * **Syntax**: `auto | from-font | [ under || [ left | right ] ]`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitTextUnderlinePosition?: Property.TextUnderlinePosition | undefined;
+  /**
+   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.
+   *
+   * **Syntax**: `default | none`
+   *
+   * **Initial value**: `default`
+   */
+  WebkitTouchCallout?: Property.WebkitTouchCallout | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   */
+  WebkitTransform?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   */
+  WebkitTransformOrigin?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   */
+  WebkitTransformStyle?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  WebkitTransitionDelay?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  WebkitTransitionDuration?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   */
+  WebkitTransitionProperty?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  WebkitTransitionTimingFunction?: Property.TransitionTimingFunction | undefined;
+  /**
+   * **Syntax**: `read-only | read-write | read-write-plaintext-only`
+   *
+   * **Initial value**: `read-only`
+   */
+  WebkitUserModify?: Property.WebkitUserModify | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   */
+  WebkitUserSelect?: Property.UserSelect | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   */
+  WebkitWritingMode?: Property.WritingMode | undefined;
+}
+
+export interface VendorShorthandProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   */
+  MozAnimation?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   */
+  MozBorderImage?: Property.BorderImage | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   */
+  MozColumnRule?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   */
+  MozColumns?: Property.Columns<TLength> | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS shorthand property can be used to give an element's `outline` rounded corners.
+   *
+   * **Syntax**: `<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?`
+   */
+  MozOutlineRadius?: Property.MozOutlineRadius<TLength> | undefined;
+  /**
+   * The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties.
+   *
+   * **Syntax**: `<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>`
+   */
+  msContentZoomLimit?: Property.MsContentZoomLimit | undefined;
+  /**
+   * The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties.
+   *
+   * **Syntax**: `<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>`
+   */
+  msContentZoomSnap?: Property.MsContentZoomSnap | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   */
+  msFlex?: Property.Flex<TLength> | undefined;
+  /**
+   * The **\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>`
+   */
+  msScrollLimit?: Property.MsScrollLimit | undefined;
+  /**
+   * The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>`
+   */
+  msScrollSnapX?: Property.MsScrollSnapX | undefined;
+  /**
+   * The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>`
+   */
+  msScrollSnapY?: Property.MsScrollSnapY | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   */
+  msTransition?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   */
+  WebkitAnimation?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-width'> || <'border-style'> || <color>`
+   */
+  WebkitBorderBefore?: Property.WebkitBorderBefore<TLength> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   */
+  WebkitBorderImage?: Property.BorderImage | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   */
+  WebkitBorderRadius?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   */
+  WebkitColumnRule?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   */
+  WebkitColumns?: Property.Columns<TLength> | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   */
+  WebkitFlex?: Property.Flex<TLength> | undefined;
+  /**
+   * The **`flex-flow`** CSS shorthand property specifies the direction of a flex container, as well as its wrapping behavior.
+   *
+   * **Syntax**: `<'flex-direction'> || <'flex-wrap'>`
+   */
+  WebkitFlexFlow?: Property.FlexFlow | undefined;
+  /**
+   * The **`mask`** CSS shorthand property hides an element (partially or fully) by masking or clipping the image at specific points.
+   *
+   * **Syntax**: `[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || [ <box> | border | padding | content | text ] || [ <box> | border | padding | content ] ]#`
+   */
+  WebkitMask?: Property.WebkitMask<TLength> | undefined;
+  /**
+   * The **`mask-border`** CSS shorthand property lets you create a mask along the edge of an element's border.
+   *
+   * **Syntax**: `<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>`
+   */
+  WebkitMaskBoxImage?: Property.MaskBorder | undefined;
+  /**
+   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.
+   *
+   * **Syntax**: `<'text-emphasis-style'> || <'text-emphasis-color'>`
+   */
+  WebkitTextEmphasis?: Property.TextEmphasis | undefined;
+  /**
+   * The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`.
+   *
+   * **Syntax**: `<length> || <color>`
+   */
+  WebkitTextStroke?: Property.WebkitTextStroke<TLength> | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   */
+  WebkitTransition?: Property.Transition<TTime> | undefined;
+}
+
+export interface VendorProperties<TLength = (string & {}) | 0, TTime = string & {}> extends VendorLonghandProperties<TLength, TTime>, VendorShorthandProperties<TLength, TTime> {}
+
+export interface ObsoleteProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * In combination with `elevation`, the **`azimuth`** CSS property enables different audio sources to be positioned spatially for aural presentation. This is important in that it provides a natural way to tell several voices apart, as each can be positioned to originate at a different location on the sound stage. Stereo output produce a lateral sound stage, while binaural headphones and multi-speaker setups allow for a fully three-dimensional stage.
+   *
+   * **Syntax**: `<angle> | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards`
+   *
+   * **Initial value**: `center`
+   *
+   * @deprecated
+   */
+  azimuth?: Property.Azimuth | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  boxAlign?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  boxDirection?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  boxFlex?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  boxFlexGroup?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  boxLines?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  boxOrdinalGroup?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  boxOrient?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  boxPack?: Property.BoxPack | undefined;
+  /**
+   * The **`clip`** CSS property defines a visible portion of an element. The `clip` property applies only to absolutely positioned elements — that is, elements with `position:absolute` or `position:fixed`.
+   *
+   * **Syntax**: `<shape> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  clip?: Property.Clip | undefined;
+  /**
+   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  gridColumnGap?: Property.GridColumnGap<TLength> | undefined;
+  /**
+   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.
+   *
+   * **Syntax**: `<'grid-row-gap'> <'grid-column-gap'>?`
+   *
+   * @deprecated
+   */
+  gridGap?: Property.GridGap<TLength> | undefined;
+  /**
+   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's rows.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  gridRowGap?: Property.GridRowGap<TLength> | undefined;
+  /**
+   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.
+   *
+   * **Syntax**: `auto | normal | active | inactive | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  imeMode?: Property.ImeMode | undefined;
+  /**
+   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * @deprecated
+   */
+  offsetBlock?: Property.InsetBlock<TLength> | undefined;
+  /**
+   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  offsetBlockEnd?: Property.InsetBlockEnd<TLength> | undefined;
+  /**
+   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  offsetBlockStart?: Property.InsetBlockStart<TLength> | undefined;
+  /**
+   * The **`inset-inline`** CSS property defines the logical start and end offsets of an element in the inline direction, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * @deprecated
+   */
+  offsetInline?: Property.InsetInline<TLength> | undefined;
+  /**
+   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  offsetInlineEnd?: Property.InsetInlineEnd<TLength> | undefined;
+  /**
+   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  offsetInlineStart?: Property.InsetInlineStart<TLength> | undefined;
+  /**
+   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.
+   *
+   * **Syntax**: `none | <position>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  scrollSnapCoordinate?: Property.ScrollSnapCoordinate<TLength> | undefined;
+  /**
+   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `0px 0px`
+   *
+   * @deprecated
+   */
+  scrollSnapDestination?: Property.ScrollSnapDestination<TLength> | undefined;
+  /**
+   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.
+   *
+   * **Syntax**: `none | repeat( <length-percentage> )`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  scrollSnapPointsX?: Property.ScrollSnapPointsX | undefined;
+  /**
+   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.
+   *
+   * **Syntax**: `none | repeat( <length-percentage> )`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  scrollSnapPointsY?: Property.ScrollSnapPointsY | undefined;
+  /**
+   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.
+   *
+   * **Syntax**: `none | mandatory | proximity`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  scrollSnapTypeX?: Property.ScrollSnapTypeX | undefined;
+  /**
+   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.
+   *
+   * **Syntax**: `none | mandatory | proximity`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  scrollSnapTypeY?: Property.ScrollSnapTypeY | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  KhtmlBoxAlign?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  KhtmlBoxDirection?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  KhtmlBoxFlex?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  KhtmlBoxFlexGroup?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  KhtmlBoxLines?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  KhtmlBoxOrdinalGroup?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  KhtmlBoxOrient?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  KhtmlBoxPack?: Property.BoxPack | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  KhtmlLineBreak?: Property.LineBreak | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  KhtmlOpacity?: Property.Opacity | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  KhtmlUserSelect?: Property.UserSelect | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * @deprecated
+   */
+  MozBackfaceVisibility?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * @deprecated
+   */
+  MozBackgroundClip?: Property.BackgroundClip | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   *
+   * @deprecated
+   */
+  MozBackgroundInlinePolicy?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   *
+   * @deprecated
+   */
+  MozBackgroundOrigin?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * @deprecated
+   */
+  MozBackgroundSize?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   *
+   * @deprecated
+   */
+  MozBorderRadius?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozBorderRadiusBottomleft?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozBorderRadiusBottomright?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozBorderRadiusTopleft?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozBorderRadiusTopright?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  MozBoxAlign?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  MozBoxDirection?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozBoxFlex?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  MozBoxOrdinalGroup?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  MozBoxOrient?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  MozBoxPack?: Property.BoxPack | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  MozBoxShadow?: Property.BoxShadow | undefined;
+  /**
+   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.
+   *
+   * **Syntax**: `border-box | content-box | margin-box | padding-box`
+   *
+   * **Initial value**: `content-box`
+   *
+   * @deprecated
+   */
+  MozFloatEdge?: Property.MozFloatEdge | undefined;
+  /**
+   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.
+   *
+   * **Syntax**: `0 | 1`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  MozForceBrokenImageIcon?: Property.MozForceBrokenImageIcon | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  MozOpacity?: Property.Opacity | undefined;
+  /**
+   * The **`outline`** CSS shorthand property sets most of the outline properties in a single declaration.
+   *
+   * **Syntax**: `[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]`
+   *
+   * @deprecated
+   */
+  MozOutline?: Property.Outline<TLength> | undefined;
+  /**
+   * The **`outline-color`** CSS property sets the color of an element's outline.
+   *
+   * **Syntax**: `<color> | invert`
+   *
+   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other
+   *
+   * @deprecated
+   */
+  MozOutlineColor?: Property.OutlineColor | undefined;
+  /**
+   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `auto | <'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  MozOutlineStyle?: Property.OutlineStyle | undefined;
+  /**
+   * The CSS **`outline-width`** property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * @deprecated
+   */
+  MozOutlineWidth?: Property.OutlineWidth<TLength> | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  MozPerspective?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * @deprecated
+   */
+  MozPerspectiveOrigin?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.
+   *
+   * **Syntax**: `auto | start | end | left | right | center | justify`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  MozTextAlignLast?: Property.TextAlignLast | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * @deprecated
+   */
+  MozTextDecorationColor?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  MozTextDecorationLine?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   *
+   * @deprecated
+   */
+  MozTextDecorationStyle?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  MozTransform?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * @deprecated
+   */
+  MozTransformOrigin?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   *
+   * @deprecated
+   */
+  MozTransformStyle?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * @deprecated
+   */
+  MozTransition?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  MozTransitionDelay?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  MozTransitionDuration?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * @deprecated
+   */
+  MozTransitionProperty?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  MozTransitionTimingFunction?: Property.TransitionTimingFunction | undefined;
+  /**
+   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.
+   *
+   * **Syntax**: `auto | none | enabled | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  MozUserInput?: Property.MozUserInput | undefined;
+  /**
+   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.
+   *
+   * **Syntax**: `auto | normal | active | inactive | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  msImeMode?: Property.ImeMode | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   *
+   * @deprecated
+   */
+  OAnimation?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  OAnimationDelay?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  OAnimationDirection?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  OAnimationDuration?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  OAnimationFillMode?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  OAnimationIterationCount?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  OAnimationName?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   *
+   * @deprecated
+   */
+  OAnimationPlayState?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  OAnimationTimingFunction?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * @deprecated
+   */
+  OBackgroundSize?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   *
+   * @deprecated
+   */
+  OBorderImage?: Property.BorderImage | undefined;
+  /**
+   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.
+   *
+   * **Syntax**: `fill | contain | cover | none | scale-down`
+   *
+   * **Initial value**: `fill`
+   *
+   * @deprecated
+   */
+  OObjectFit?: Property.ObjectFit | undefined;
+  /**
+   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * @deprecated
+   */
+  OObjectPosition?: Property.ObjectPosition<TLength> | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   *
+   * @deprecated
+   */
+  OTabSize?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   *
+   * @deprecated
+   */
+  OTextOverflow?: Property.TextOverflow | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  OTransform?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * @deprecated
+   */
+  OTransformOrigin?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * @deprecated
+   */
+  OTransition?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  OTransitionDelay?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  OTransitionDuration?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * @deprecated
+   */
+  OTransitionProperty?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  OTransitionTimingFunction?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  WebkitBoxAlign?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  WebkitBoxDirection?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  WebkitBoxFlex?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  WebkitBoxFlexGroup?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  WebkitBoxLines?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  WebkitBoxOrdinalGroup?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  WebkitBoxOrient?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  WebkitBoxPack?: Property.BoxPack | undefined;
+}
+
+export interface SvgProperties<TLength = (string & {}) | 0, TTime = string & {}> {
+  alignmentBaseline?: Property.AlignmentBaseline | undefined;
+  baselineShift?: Property.BaselineShift<TLength> | undefined;
+  clip?: Property.Clip | undefined;
+  clipPath?: Property.ClipPath | undefined;
+  clipRule?: Property.ClipRule | undefined;
+  color?: Property.Color | undefined;
+  colorInterpolation?: Property.ColorInterpolation | undefined;
+  colorRendering?: Property.ColorRendering | undefined;
+  cursor?: Property.Cursor | undefined;
+  direction?: Property.Direction | undefined;
+  display?: Property.Display | undefined;
+  dominantBaseline?: Property.DominantBaseline | undefined;
+  fill?: Property.Fill | undefined;
+  fillOpacity?: Property.FillOpacity | undefined;
+  fillRule?: Property.FillRule | undefined;
+  filter?: Property.Filter | undefined;
+  floodColor?: Property.FloodColor | undefined;
+  floodOpacity?: Property.FloodOpacity | undefined;
+  font?: Property.Font | undefined;
+  fontFamily?: Property.FontFamily | undefined;
+  fontSize?: Property.FontSize<TLength> | undefined;
+  fontSizeAdjust?: Property.FontSizeAdjust | undefined;
+  fontStretch?: Property.FontStretch | undefined;
+  fontStyle?: Property.FontStyle | undefined;
+  fontVariant?: Property.FontVariant | undefined;
+  fontWeight?: Property.FontWeight | undefined;
+  glyphOrientationVertical?: Property.GlyphOrientationVertical | undefined;
+  imageRendering?: Property.ImageRendering | undefined;
+  letterSpacing?: Property.LetterSpacing<TLength> | undefined;
+  lightingColor?: Property.LightingColor | undefined;
+  lineHeight?: Property.LineHeight<TLength> | undefined;
+  marker?: Property.Marker | undefined;
+  markerEnd?: Property.MarkerEnd | undefined;
+  markerMid?: Property.MarkerMid | undefined;
+  markerStart?: Property.MarkerStart | undefined;
+  mask?: Property.Mask<TLength> | undefined;
+  opacity?: Property.Opacity | undefined;
+  overflow?: Property.Overflow | undefined;
+  paintOrder?: Property.PaintOrder | undefined;
+  pointerEvents?: Property.PointerEvents | undefined;
+  shapeRendering?: Property.ShapeRendering | undefined;
+  stopColor?: Property.StopColor | undefined;
+  stopOpacity?: Property.StopOpacity | undefined;
+  stroke?: Property.Stroke | undefined;
+  strokeDasharray?: Property.StrokeDasharray<TLength> | undefined;
+  strokeDashoffset?: Property.StrokeDashoffset<TLength> | undefined;
+  strokeLinecap?: Property.StrokeLinecap | undefined;
+  strokeLinejoin?: Property.StrokeLinejoin | undefined;
+  strokeMiterlimit?: Property.StrokeMiterlimit | undefined;
+  strokeOpacity?: Property.StrokeOpacity | undefined;
+  strokeWidth?: Property.StrokeWidth<TLength> | undefined;
+  textAnchor?: Property.TextAnchor | undefined;
+  textDecoration?: Property.TextDecoration<TLength> | undefined;
+  textRendering?: Property.TextRendering | undefined;
+  unicodeBidi?: Property.UnicodeBidi | undefined;
+  vectorEffect?: Property.VectorEffect | undefined;
+  visibility?: Property.Visibility | undefined;
+  whiteSpace?: Property.WhiteSpace | undefined;
+  wordSpacing?: Property.WordSpacing<TLength> | undefined;
+  writingMode?: Property.WritingMode | undefined;
+}
+
+export interface Properties<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardProperties<TLength, TTime>,
+    VendorProperties<TLength, TTime>,
+    ObsoleteProperties<TLength, TTime>,
+    SvgProperties<TLength, TTime> {}
+
+export interface StandardLonghandPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`accent-color`** CSS property sets the accent color for user-interface controls generated by some elements.
+   *
+   * **Syntax**: `auto | <color>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **93** | **92**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/accent-color
+   */
+  "accent-color"?: Property.AccentColor | undefined;
+  /**
+   * The CSS **`align-content`** property sets the distribution of space between and around content items along a flexbox's cross-axis or a grid's block axis.
+   *
+   * **Syntax**: `normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-content
+   */
+  "align-content"?: Property.AlignContent | undefined;
+  /**
+   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-items
+   */
+  "align-items"?: Property.AlignItems | undefined;
+  /**
+   * The **`align-self`** CSS property overrides a grid or flex item's `align-items` value. In Grid, it aligns the item inside the grid area. In Flexbox, it aligns the item on the cross axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **10** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-self
+   */
+  "align-self"?: Property.AlignSelf | undefined;
+  /**
+   * The **`align-tracks`** CSS property sets the alignment in the masonry axis for grid containers that have masonry in their block axis.
+   *
+   * **Syntax**: `[ normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position> ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/align-tracks
+   */
+  "align-tracks"?: Property.AlignTracks | undefined;
+  /**
+   * The **`animation-composition`** CSS property specifies the composite operation to use when multiple animations affect the same property simultaneously.
+   *
+   * **Syntax**: `<single-animation-composition>#`
+   *
+   * **Initial value**: `replace`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **112** | **115** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-composition
+   */
+  "animation-composition"?: Property.AnimationComposition | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-delay
+   */
+  "animation-delay"?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-direction
+   */
+  "animation-direction"?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-duration
+   */
+  "animation-duration"?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 5 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-fill-mode
+   */
+  "animation-fill-mode"?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-iteration-count
+   */
+  "animation-iteration-count"?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-name
+   */
+  "animation-name"?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-play-state
+   */
+  "animation-play-state"?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-range-end`** CSS property is used to set the end of an animation's attachment range along its timeline, i.e. where along the timeline an animation will end.
+   *
+   * **Syntax**: `[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range-end
+   */
+  "animation-range-end"?: Property.AnimationRangeEnd<TLength> | undefined;
+  /**
+   * The **`animation-range-start`** CSS property is used to set the start of an animation's attachment range along its timeline, i.e. where along the timeline an animation will start.
+   *
+   * **Syntax**: `[ normal | <length-percentage> | <timeline-range-name> <length-percentage>? ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range-start
+   */
+  "animation-range-start"?: Property.AnimationRangeStart<TLength> | undefined;
+  /**
+   * The **`animation-timeline`** CSS property specifies the timeline that is used to control the progress of an animation.
+   *
+   * **Syntax**: `<single-animation-timeline>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timeline
+   */
+  "animation-timeline"?: Property.AnimationTimeline | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-timing-function
+   */
+  "animation-timing-function"?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | auto | textfield | menulist-button | <compat-auto>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  |   Edge   | IE  |
+   * | :-----: | :-----: | :------: | :------: | :-: |
+   * | **84**  | **80**  | **15.4** |  **84**  | No  |
+   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_  | 12 _-x-_ |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/appearance
+   */
+  appearance?: Property.Appearance | undefined;
+  /**
+   * The **`aspect-ratio`** CSS property sets a **preferred aspect ratio** for the box, which will be used in the calculation of auto sizes and some other layout functions.
+   *
+   * **Syntax**: `auto | <ratio>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **88** | **89**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/aspect-ratio
+   */
+  "aspect-ratio"?: Property.AspectRatio | undefined;
+  /**
+   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |   Safari    |  Edge  | IE  |
+   * | :----: | :-----: | :---------: | :----: | :-: |
+   * | **76** | **103** | **9** _-x-_ | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/backdrop-filter
+   */
+  "backdrop-filter"?: Property.BackdropFilter | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * |  Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :------: | :-----: | :-------: | :----: | :----: |
+   * |  **36**  | **16**  | **15.4**  | **12** | **10** |
+   * | 12 _-x-_ |         | 5.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/backface-visibility
+   */
+  "backface-visibility"?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-attachment`** CSS property sets whether a background image's position is fixed within the viewport, or scrolls with its containing block.
+   *
+   * **Syntax**: `<attachment>#`
+   *
+   * **Initial value**: `scroll`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-attachment
+   */
+  "background-attachment"?: Property.BackgroundAttachment | undefined;
+  /**
+   * The **`background-blend-mode`** CSS property sets how an element's background images should blend with each other and with the element's background color.
+   *
+   * **Syntax**: `<blend-mode>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **35** | **30**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-blend-mode
+   */
+  "background-blend-mode"?: Property.BackgroundBlendMode | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **4**  |  **5**  | **12** | **9** |
+   * |        |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-clip
+   */
+  "background-clip"?: Property.BackgroundClip | undefined;
+  /**
+   * The **`background-color`** CSS property sets the background color of an element.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `transparent`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-color
+   */
+  "background-color"?: Property.BackgroundColor | undefined;
+  /**
+   * The **`background-image`** CSS property sets one or more background images on an element.
+   *
+   * **Syntax**: `<bg-image>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-image
+   */
+  "background-image"?: Property.BackgroundImage | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **4**  | **3**  | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-origin
+   */
+  "background-origin"?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-position-x`** CSS property sets the initial horizontal position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `[ center | [ [ left | right | x-start | x-end ]? <length-percentage>? ]! ]#`
+   *
+   * **Initial value**: `0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **49**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-x
+   */
+  "background-position-x"?: Property.BackgroundPositionX<TLength> | undefined;
+  /**
+   * The **`background-position-y`** CSS property sets the initial vertical position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `[ center | [ [ top | bottom | y-start | y-end ]? <length-percentage>? ]! ]#`
+   *
+   * **Initial value**: `0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **49**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position-y
+   */
+  "background-position-y"?: Property.BackgroundPositionY<TLength> | undefined;
+  /**
+   * The **`background-repeat`** CSS property sets how background images are repeated. A background image can be repeated along the horizontal and vertical axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-repeat
+   */
+  "background-repeat"?: Property.BackgroundRepeat | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **3**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-size
+   */
+  "background-size"?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * **Syntax**: `clip | ellipsis | <string>`
+   *
+   * **Initial value**: `clip`
+   */
+  "block-overflow"?: Property.BlockOverflow | undefined;
+  /**
+   * The **`block-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/block-size
+   */
+  "block-size"?: Property.BlockSize<TLength> | undefined;
+  /**
+   * The **`border-block-color`** CSS property defines the color of the logical block borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>{1,2}`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-color
+   */
+  "border-block-color"?: Property.BorderBlockColor | undefined;
+  /**
+   * The **`border-block-end-color`** CSS property defines the color of the logical block-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-color
+   */
+  "border-block-end-color"?: Property.BorderBlockEndColor | undefined;
+  /**
+   * The **`border-block-end-style`** CSS property defines the style of the logical block-end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-style
+   */
+  "border-block-end-style"?: Property.BorderBlockEndStyle | undefined;
+  /**
+   * The **`border-block-end-width`** CSS property defines the width of the logical block-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end-width
+   */
+  "border-block-end-width"?: Property.BorderBlockEndWidth<TLength> | undefined;
+  /**
+   * The **`border-block-start-color`** CSS property defines the color of the logical block-start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-color
+   */
+  "border-block-start-color"?: Property.BorderBlockStartColor | undefined;
+  /**
+   * The **`border-block-start-style`** CSS property defines the style of the logical block start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-style
+   */
+  "border-block-start-style"?: Property.BorderBlockStartStyle | undefined;
+  /**
+   * The **`border-block-start-width`** CSS property defines the width of the logical block-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start-width
+   */
+  "border-block-start-width"?: Property.BorderBlockStartWidth<TLength> | undefined;
+  /**
+   * The **`border-block-style`** CSS property defines the style of the logical block borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-style
+   */
+  "border-block-style"?: Property.BorderBlockStyle | undefined;
+  /**
+   * The **`border-block-width`** CSS property defines the width of the logical block borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-width
+   */
+  "border-block-width"?: Property.BorderBlockWidth<TLength> | undefined;
+  /**
+   * The **`border-bottom-color`** CSS property sets the color of an element's bottom border. It can also be set with the shorthand CSS properties `border-color` or `border-bottom`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-color
+   */
+  "border-bottom-color"?: Property.BorderBottomColor | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-left-radius
+   */
+  "border-bottom-left-radius"?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-right-radius
+   */
+  "border-bottom-right-radius"?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-style`** CSS property sets the line style of an element's bottom `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-style
+   */
+  "border-bottom-style"?: Property.BorderBottomStyle | undefined;
+  /**
+   * The **`border-bottom-width`** CSS property sets the width of the bottom border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom-width
+   */
+  "border-bottom-width"?: Property.BorderBottomWidth<TLength> | undefined;
+  /**
+   * The **`border-collapse`** CSS property sets whether cells inside a `<table>` have shared or separate borders.
+   *
+   * **Syntax**: `collapse | separate`
+   *
+   * **Initial value**: `separate`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-collapse
+   */
+  "border-collapse"?: Property.BorderCollapse | undefined;
+  /**
+   * The **`border-end-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-end-radius
+   */
+  "border-end-end-radius"?: Property.BorderEndEndRadius<TLength> | undefined;
+  /**
+   * The **`border-end-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-end-start-radius
+   */
+  "border-end-start-radius"?: Property.BorderEndStartRadius<TLength> | undefined;
+  /**
+   * The **`border-image-outset`** CSS property sets the distance by which an element's border image is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-outset
+   */
+  "border-image-outset"?: Property.BorderImageOutset<TLength> | undefined;
+  /**
+   * The **`border-image-repeat`** CSS property defines how the edge regions and middle region of a source image are adjusted to fit the dimensions of an element's border image. The middle region can be displayed by using the keyword "fill" in the border-image-slice property.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-repeat
+   */
+  "border-image-repeat"?: Property.BorderImageRepeat | undefined;
+  /**
+   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.
+   *
+   * **Syntax**: `<number-percentage>{1,4} && fill?`
+   *
+   * **Initial value**: `100%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-slice
+   */
+  "border-image-slice"?: Property.BorderImageSlice | undefined;
+  /**
+   * The **`border-image-source`** CSS property sets the source image used to create an element's border image.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **15**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-source
+   */
+  "border-image-source"?: Property.BorderImageSource | undefined;
+  /**
+   * The **`border-image-width`** CSS property sets the width of an element's border image.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **15** | **13**  | **6**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image-width
+   */
+  "border-image-width"?: Property.BorderImageWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-color`** CSS property defines the color of the logical inline borders of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color` and `border-bottom-color`, or `border-right-color` and `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>{1,2}`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-color
+   */
+  "border-inline-color"?: Property.BorderInlineColor | undefined;
+  /**
+   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-color)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-color
+   */
+  "border-inline-end-color"?: Property.BorderInlineEndColor | undefined;
+  /**
+   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-style)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-style
+   */
+  "border-inline-end-style"?: Property.BorderInlineEndStyle | undefined;
+  /**
+   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome |           Firefox           |  Safari  | Edge | IE  |
+   * | :----: | :-------------------------: | :------: | :--: | :-: |
+   * | **69** |           **41**            | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-end-width)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end-width
+   */
+  "border-inline-end-width"?: Property.BorderInlineEndWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome |            Firefox            |  Safari  | Edge | IE  |
+   * | :----: | :---------------------------: | :------: | :--: | :-: |
+   * | **69** |            **41**             | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-start-color)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-color
+   */
+  "border-inline-start-color"?: Property.BorderInlineStartColor | undefined;
+  /**
+   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome |            Firefox            |  Safari  | Edge | IE  |
+   * | :----: | :---------------------------: | :------: | :--: | :-: |
+   * | **69** |            **41**             | **12.1** | n/a  | No  |
+   * |        | 3 _(-moz-border-start-style)_ |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-style
+   */
+  "border-inline-start-style"?: Property.BorderInlineStartStyle | undefined;
+  /**
+   * The **`border-inline-start-width`** CSS property defines the width of the logical inline-start border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start-width
+   */
+  "border-inline-start-width"?: Property.BorderInlineStartWidth<TLength> | undefined;
+  /**
+   * The **`border-inline-style`** CSS property defines the style of the logical inline borders of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style` and `border-bottom-style`, or `border-left-style` and `border-right-style` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-style
+   */
+  "border-inline-style"?: Property.BorderInlineStyle | undefined;
+  /**
+   * The **`border-inline-width`** CSS property defines the width of the logical inline borders of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width` and `border-bottom-width`, or `border-left-width`, and `border-right-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-width
+   */
+  "border-inline-width"?: Property.BorderInlineWidth<TLength> | undefined;
+  /**
+   * The **`border-left-color`** CSS property sets the color of an element's left border. It can also be set with the shorthand CSS properties `border-color` or `border-left`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-color
+   */
+  "border-left-color"?: Property.BorderLeftColor | undefined;
+  /**
+   * The **`border-left-style`** CSS property sets the line style of an element's left `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-style
+   */
+  "border-left-style"?: Property.BorderLeftStyle | undefined;
+  /**
+   * The **`border-left-width`** CSS property sets the width of the left border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left-width
+   */
+  "border-left-width"?: Property.BorderLeftWidth<TLength> | undefined;
+  /**
+   * The **`border-right-color`** CSS property sets the color of an element's right border. It can also be set with the shorthand CSS properties `border-color` or `border-right`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-color
+   */
+  "border-right-color"?: Property.BorderRightColor | undefined;
+  /**
+   * The **`border-right-style`** CSS property sets the line style of an element's right `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-style
+   */
+  "border-right-style"?: Property.BorderRightStyle | undefined;
+  /**
+   * The **`border-right-width`** CSS property sets the width of the right border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right-width
+   */
+  "border-right-width"?: Property.BorderRightWidth<TLength> | undefined;
+  /**
+   * The **`border-spacing`** CSS property sets the distance between the borders of adjacent cells in a `<table>`. This property applies only when `border-collapse` is `separate`.
+   *
+   * **Syntax**: `<length> <length>?`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-spacing
+   */
+  "border-spacing"?: Property.BorderSpacing<TLength> | undefined;
+  /**
+   * The **`border-start-end-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius depending on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-end-radius
+   */
+  "border-start-end-radius"?: Property.BorderStartEndRadius<TLength> | undefined;
+  /**
+   * The **`border-start-start-radius`** CSS property defines a logical border radius on an element, which maps to a physical border radius that depends on the element's `writing-mode`, `direction`, and `text-orientation`. This is useful when building styles to work regardless of the text orientation and writing mode.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **89** | **66**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-start-start-radius
+   */
+  "border-start-start-radius"?: Property.BorderStartStartRadius<TLength> | undefined;
+  /**
+   * The **`border-top-color`** CSS property sets the color of an element's top border. It can also be set with the shorthand CSS properties `border-color` or `border-top`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-color
+   */
+  "border-top-color"?: Property.BorderTopColor | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-left-radius
+   */
+  "border-top-left-radius"?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-right-radius
+   */
+  "border-top-right-radius"?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`border-top-style`** CSS property sets the line style of an element's top `border`.
+   *
+   * **Syntax**: `<line-style>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-style
+   */
+  "border-top-style"?: Property.BorderTopStyle | undefined;
+  /**
+   * The **`border-top-width`** CSS property sets the width of the top border of an element.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top-width
+   */
+  "border-top-width"?: Property.BorderTopWidth<TLength> | undefined;
+  /**
+   * The **`bottom`** CSS property participates in setting the vertical position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/bottom
+   */
+  bottom?: Property.Bottom<TLength> | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   *
+   * |    Chrome    | Firefox |   Safari    | Edge | IE  |
+   * | :----------: | :-----: | :---------: | :--: | :-: |
+   * | **22** _-x-_ | **32**  | **7** _-x-_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-decoration-break
+   */
+  "box-decoration-break"?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * | **10**  |  **4**  | **5.1** | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-shadow
+   */
+  "box-shadow"?: Property.BoxShadow | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * | **10**  | **29**  | **5.1** | **12** | **8** |
+   * | 1 _-x-_ | 1 _-x-_ | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/box-sizing
+   */
+  "box-sizing"?: Property.BoxSizing | undefined;
+  /**
+   * The **`break-after`** CSS property sets how page, column, or region breaks should behave after a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-after
+   */
+  "break-after"?: Property.BreakAfter | undefined;
+  /**
+   * The **`break-before`** CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-before
+   */
+  "break-before"?: Property.BreakBefore | undefined;
+  /**
+   * The **`break-inside`** CSS property sets how page, column, or region breaks should behave inside a generated box. If there is no generated box, the property is ignored.
+   *
+   * **Syntax**: `auto | avoid | avoid-page | avoid-column | avoid-region`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **50** | **65**  | **10** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/break-inside
+   */
+  "break-inside"?: Property.BreakInside | undefined;
+  /**
+   * The **`caption-side`** CSS property puts the content of a table's `<caption>` on the specified side. The values are relative to the `writing-mode` of the table.
+   *
+   * **Syntax**: `top | bottom | block-start | block-end | inline-start | inline-end`
+   *
+   * **Initial value**: `top`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/caption-side
+   */
+  "caption-side"?: Property.CaptionSide | undefined;
+  /**
+   * The **`caret-color`** CSS property sets the color of the **insertion caret**, the visible marker where the next character typed will be inserted. This is sometimes referred to as the **text input cursor**. The caret appears in elements such as `<input>` or those with the `contenteditable` attribute. The caret is typically a thin vertical line that flashes to help make it more noticeable. By default, it is black, but its color can be altered with this property.
+   *
+   * **Syntax**: `auto | <color>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **53**  | **11.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/caret-color
+   */
+  "caret-color"?: Property.CaretColor | undefined;
+  /**
+   * **Syntax**: `auto | bar | block | underscore`
+   *
+   * **Initial value**: `auto`
+   */
+  "caret-shape"?: Property.CaretShape | undefined;
+  /**
+   * The **`clear`** CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The `clear` property applies to floating and non-floating elements.
+   *
+   * **Syntax**: `none | left | right | both | inline-start | inline-end`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/clear
+   */
+  clear?: Property.Clear | undefined;
+  /**
+   * The **`clip-path`** CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.
+   *
+   * **Syntax**: `<clip-source> | [ <basic-shape> || <geometry-box> ] | none`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **55**  | **3.5** | **9.1** | **79** | **10** |
+   * | 23 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/clip-path
+   */
+  "clip-path"?: Property.ClipPath | undefined;
+  /**
+   * The **`color`** CSS property sets the foreground color value of an element's text and text decorations, and sets the `currentcolor` value. `currentcolor` may be used as an indirect value on _other_ properties and is the default for other color properties, such as `border-color`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `canvastext`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/color
+   */
+  color?: Property.Color | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   *
+   * |    Chrome    |       Firefox       |  Safari  |     Edge     | IE  |
+   * | :----------: | :-----------------: | :------: | :----------: | :-: |
+   * | **17** _-x-_ |       **97**        | **15.4** | **79** _-x-_ | No  |
+   * |              | 48 _(color-adjust)_ | 6 _-x-_  |              |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/print-color-adjust
+   */
+  "color-adjust"?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`color-scheme`** CSS property allows an element to indicate which color schemes it can comfortably be rendered in.
+   *
+   * **Syntax**: `normal | [ light | dark | <custom-ident> ]+ && only?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **81** | **96**  | **13** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/color-scheme
+   */
+  "color-scheme"?: Property.ColorScheme | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-count
+   */
+  "column-count"?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **50** | **52**  |  **9**  | **12** | **10** |
+   * |        |         | 8 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-fill
+   */
+  "column-fill"?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.
+   *
+   * **Syntax**: `normal | <length-percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **1**  | **1.5** | **3**  | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-gap
+   */
+  "column-gap"?: Property.ColumnGap<TLength> | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-color
+   */
+  "column-rule-color"?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-style
+   */
+  "column-rule-style"?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule-width
+   */
+  "column-rule-width"?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.
+   *
+   * **Syntax**: `none | all`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **50**  | **71**  |   **9**   | **12** | **10** |
+   * | 6 _-x-_ |         | 5.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-span
+   */
+  "column-span"?: Property.ColumnSpan | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **50**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-width
+   */
+  "column-width"?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`contain`** CSS property indicates that an element and its contents are, as much as possible, independent from the rest of the document tree. Containment enables isolating a subsection of the DOM, providing performance benefits by limiting calculations of layout, style, paint, size, or any combination to a DOM subtree rather than the entire page. Containment can also be used to scope CSS counters and quotes.
+   *
+   * **Syntax**: `none | strict | content | [ [ size || inline-size ] || layout || style || paint ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **52** | **69**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain
+   */
+  contain?: Property.Contain | undefined;
+  /**
+   * The **`contain-intrinsic-block-size`** CSS logical property defines the block size of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-block-size
+   */
+  "contain-intrinsic-block-size"?: Property.ContainIntrinsicBlockSize<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-length`** CSS property sets the height of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-height
+   */
+  "contain-intrinsic-height"?: Property.ContainIntrinsicHeight<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-inline-size`** CSS logical property defines the inline-size of an element that a browser can use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-contain-intrinsic-inline-size
+   */
+  "contain-intrinsic-inline-size"?: Property.ContainIntrinsicInlineSize<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-width`** CSS property sets the width of an element that a browser will use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `auto? [ none | <length> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **95** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-width
+   */
+  "contain-intrinsic-width"?: Property.ContainIntrinsicWidth<TLength> | undefined;
+  /**
+   * The **container-name** CSS property specifies a list of query container names used by the @container at-rule in a container query. A container query will apply styles to elements based on the size of the nearest ancestor with a containment context. When a containment context is given a name, it can be specifically targeted using the `@container` at-rule instead of the nearest ancestor with containment.
+   *
+   * **Syntax**: `none | <custom-ident>+`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container-name
+   */
+  "container-name"?: Property.ContainerName | undefined;
+  /**
+   * The **container-type** CSS property is used to define the type of containment used in a container query.
+   *
+   * **Syntax**: `normal | size | inline-size`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container-type
+   */
+  "container-type"?: Property.ContainerType | undefined;
+  /**
+   * The **`content`** CSS property replaces an element with a generated value. Objects inserted using the `content` property are **anonymous replaced elements**.
+   *
+   * **Syntax**: `normal | none | [ <content-replacement> | <content-list> ] [/ [ <string> | <counter> ]+ ]?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/content
+   */
+  content?: Property.Content | undefined;
+  /**
+   * The **`content-visibility`** CSS property controls whether or not an element renders its contents at all, along with forcing a strong set of containments, allowing user agents to potentially omit large swathes of layout and rendering work until it becomes needed. It enables the user agent to skip an element's rendering work (including layout and painting) until it is needed — which makes the initial page load much faster.
+   *
+   * **Syntax**: `visible | auto | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome |   Firefox   | Safari | Edge | IE  |
+   * | :----: | :---------: | :----: | :--: | :-: |
+   * | **85** | **preview** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/content-visibility
+   */
+  "content-visibility"?: Property.ContentVisibility | undefined;
+  /**
+   * The **`counter-increment`** CSS property increases or decreases the value of a CSS counter by a given value.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **3**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-increment
+   */
+  "counter-increment"?: Property.CounterIncrement | undefined;
+  /**
+   * The **`counter-reset`** CSS property resets a CSS counter to a given value. This property will create a new counter or reversed counter with the given name on the specified element.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? | <reversed-counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **3**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-reset
+   */
+  "counter-reset"?: Property.CounterReset | undefined;
+  /**
+   * The **`counter-set`** CSS property sets a CSS counter to a given value. It manipulates the value of existing counters, and will only create new counters if there isn't already a counter of the given name on the element.
+   *
+   * **Syntax**: `[ <counter-name> <integer>? ]+ | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **85** | **68**  | **17.2** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/counter-set
+   */
+  "counter-set"?: Property.CounterSet | undefined;
+  /**
+   * The **`cursor`** CSS property sets the mouse cursor, if any, to show when the mouse pointer is over an element.
+   *
+   * **Syntax**: `[ [ <url> [ <x> <y> ]? , ]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out | grab | grabbing ] ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/cursor
+   */
+  cursor?: Property.Cursor | undefined;
+  /**
+   * The **`direction`** CSS property sets the direction of text, table columns, and horizontal overflow. Use `rtl` for languages written from right to left (like Hebrew or Arabic), and `ltr` for those written from left to right (like English and most other languages).
+   *
+   * **Syntax**: `ltr | rtl`
+   *
+   * **Initial value**: `ltr`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **2**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/direction
+   */
+  direction?: Property.Direction | undefined;
+  /**
+   * The **`display`** CSS property sets whether an element is treated as a block or inline element and the layout used for its children, such as flow layout, grid or flex.
+   *
+   * **Syntax**: `[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>`
+   *
+   * **Initial value**: `inline`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/display
+   */
+  display?: Property.Display | undefined;
+  /**
+   * The **`empty-cells`** CSS property sets whether borders and backgrounds appear around `<table>` cells that have no visible content.
+   *
+   * **Syntax**: `show | hide`
+   *
+   * **Initial value**: `show`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/empty-cells
+   */
+  "empty-cells"?: Property.EmptyCells | undefined;
+  /**
+   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |
+   * | :------: | :-----: | :-----: | :----: | :-: |
+   * |  **53**  | **35**  | **9.1** | **12** | No  |
+   * | 18 _-x-_ |         | 6 _-x-_ |        |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/filter
+   */
+  filter?: Property.Filter | undefined;
+  /**
+   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.
+   *
+   * **Syntax**: `content | <'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **22**  |  **9**  | **12** | **11** |
+   * | 22 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-basis
+   */
+  "flex-basis"?: Property.FlexBasis<TLength> | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   *
+   * |  Chrome  | Firefox  | Safari  |  Edge  |    IE    |
+   * | :------: | :------: | :-----: | :----: | :------: |
+   * |  **29**  |  **81**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ | 49 _-x-_ | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-direction
+   */
+  "flex-direction"?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |            IE            |
+   * | :------: | :-----: | :-----: | :----: | :----------------------: |
+   * |  **29**  | **20**  |  **9**  | **12** |          **11**          |
+   * | 22 _-x-_ |         | 7 _-x-_ |        | 10 _(-ms-flex-positive)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-grow
+   */
+  "flex-grow"?: Property.FlexGrow | undefined;
+  /**
+   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `1`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **10** |
+   * | 22 _-x-_ |         | 8 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-shrink
+   */
+  "flex-shrink"?: Property.FlexShrink | undefined;
+  /**
+   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.
+   *
+   * **Syntax**: `nowrap | wrap | wrap-reverse`
+   *
+   * **Initial value**: `nowrap`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-wrap
+   */
+  "flex-wrap"?: Property.FlexWrap | undefined;
+  /**
+   * The **`float`** CSS property places an element on the left or right side of its container, allowing text and inline elements to wrap around it. The element is removed from the normal flow of the page, though still remaining a part of the flow (in contrast to absolute positioning).
+   *
+   * **Syntax**: `left | right | none | inline-start | inline-end`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/float
+   */
+  float?: Property.Float | undefined;
+  /**
+   * The **`font-family`** CSS property specifies a prioritized list of one or more font family names and/or generic family names for the selected element.
+   *
+   * **Syntax**: `[ <family-name> | <generic-family> ]#`
+   *
+   * **Initial value**: depends on user agent
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-family
+   */
+  "font-family"?: Property.FontFamily | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox  | Safari  |  Edge  |   IE   |
+   * | :------: | :------: | :-----: | :----: | :----: |
+   * |  **48**  |  **34**  | **9.1** | **15** | **10** |
+   * | 16 _-x-_ | 15 _-x-_ |         |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-feature-settings
+   */
+  "font-feature-settings"?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.
+   *
+   * **Syntax**: `auto | normal | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **33** | **32**  |  **9**  | n/a  | No  |
+   * |        |         | 6 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-kerning
+   */
+  "font-kerning"?: Property.FontKerning | undefined;
+  /**
+   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.
+   *
+   * **Syntax**: `normal | <string>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **34**  |   No   | n/a  | No  |
+   * |        | 4 _-x-_ |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-language-override
+   */
+  "font-language-override"?: Property.FontLanguageOverride | undefined;
+  /**
+   * The **`font-optical-sizing`** CSS property sets whether text rendering is optimized for viewing at different sizes.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **79** | **62**  | **11** | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-optical-sizing
+   */
+  "font-optical-sizing"?: Property.FontOpticalSizing | undefined;
+  /**
+   * **Syntax**: `normal | light | dark | <palette-identifier>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **101** | **107** | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-palette
+   */
+  "font-palette"?: Property.FontPalette | undefined;
+  /**
+   * The **`font-size`** CSS property sets the size of the font. Changing the font size also updates the sizes of the font size-relative `<length>` units, such as `em`, `ex`, and so forth.
+   *
+   * **Syntax**: `<absolute-size> | <relative-size> | <length-percentage>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-size
+   */
+  "font-size"?: Property.FontSize<TLength> | undefined;
+  /**
+   * The **`font-size-adjust`** CSS property sets the size of lower-case letters relative to the current font size (which defines the size of upper-case letters).
+   *
+   * **Syntax**: `none | [ ex-height | cap-height | ch-width | ic-width | ic-height ]? [ from-font | <number> ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * |   No   |  **3**  | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-size-adjust
+   */
+  "font-size-adjust"?: Property.FontSizeAdjust | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |              Chrome              |              Firefox               |              Safari              | Edge | IE  |
+   * | :------------------------------: | :--------------------------------: | :------------------------------: | :--: | :-: |
+   * | **5** _(-webkit-font-smoothing)_ | **25** _(-moz-osx-font-smoothing)_ | **4** _(-webkit-font-smoothing)_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-smooth
+   */
+  "font-smooth"?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * The **`font-stretch`** CSS property selects a normal, condensed, or expanded face from a font.
+   *
+   * **Syntax**: `<font-stretch-absolute>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **60** |  **9**  | **11** | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-stretch
+   */
+  "font-stretch"?: Property.FontStretch | undefined;
+  /**
+   * The **`font-style`** CSS property sets whether a font should be styled with a normal, italic, or oblique face from its `font-family`.
+   *
+   * **Syntax**: `normal | italic | oblique <angle>?`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-style
+   */
+  "font-style"?: Property.FontStyle | undefined;
+  /**
+   * The **`font-synthesis`** CSS property controls which missing typefaces, bold, italic, or small-caps, may be synthesized by the browser.
+   *
+   * **Syntax**: `none | [ weight || style || small-caps || position]`
+   *
+   * **Initial value**: `weight style small-caps position `
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **97** | **34**  | **9**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis
+   */
+  "font-synthesis"?: Property.FontSynthesis | undefined;
+  /**
+   * The **`font-synthesis-position`** CSS property lets you specify whether or not a browser may synthesize the subscript and superscript "position" typefaces when they are missing in a font family, while using `font-variant-position` to set the positions.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **118** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-position
+   */
+  "font-synthesis-position"?: Property.FontSynthesisPosition | undefined;
+  /**
+   * The **`font-synthesis-small-caps`** CSS property lets you specify whether or not the browser may synthesize small-caps typeface when it is missing in a font family. Small-caps glyphs typically use the form of uppercase letters but are reduced to the size of lowercase letters.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-small-caps
+   */
+  "font-synthesis-small-caps"?: Property.FontSynthesisSmallCaps | undefined;
+  /**
+   * The **`font-synthesis-style`** CSS property lets you specify whether or not the browser may synthesize the oblique typeface when it is missing in a font family.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-style
+   */
+  "font-synthesis-style"?: Property.FontSynthesisStyle | undefined;
+  /**
+   * The **`font-synthesis-weight`** CSS property lets you specify whether or not the browser may synthesize the bold typeface when it is missing in a font family.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **97** | **111** | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-synthesis-weight
+   */
+  "font-synthesis-weight"?: Property.FontSynthesisWeight | undefined;
+  /**
+   * The **`font-variant`** CSS shorthand property allows you to set all the font variants for a font.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> || stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) || [ small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps ] || <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero || <east-asian-variant-values> || <east-asian-width-values> || ruby ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant
+   */
+  "font-variant"?: Property.FontVariant | undefined;
+  /**
+   * The **`font-variant-alternates`** CSS property controls the usage of alternate glyphs. These alternate glyphs may be referenced by alternative names defined in `@font-feature-values`.
+   *
+   * **Syntax**: `normal | [ stylistic( <feature-value-name> ) || historical-forms || styleset( <feature-value-name># ) || character-variant( <feature-value-name># ) || swash( <feature-value-name> ) || ornaments( <feature-value-name> ) || annotation( <feature-value-name> ) ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :-----: | :-----: | :-----: | :--: | :-: |
+   * | **111** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-alternates
+   */
+  "font-variant-alternates"?: Property.FontVariantAlternates | undefined;
+  /**
+   * The **`font-variant-caps`** CSS property controls the use of alternate glyphs for capital letters.
+   *
+   * **Syntax**: `normal | small-caps | all-small-caps | petite-caps | all-petite-caps | unicase | titling-caps`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **52** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-caps
+   */
+  "font-variant-caps"?: Property.FontVariantCaps | undefined;
+  /**
+   * The **`font-variant-east-asian`** CSS property controls the use of alternate glyphs for East Asian scripts, like Japanese and Chinese.
+   *
+   * **Syntax**: `normal | [ <east-asian-variant-values> || <east-asian-width-values> || ruby ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **63** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-east-asian
+   */
+  "font-variant-east-asian"?: Property.FontVariantEastAsian | undefined;
+  /**
+   * **Syntax**: `normal | text | emoji | unicode`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-emoji
+   */
+  "font-variant-emoji"?: Property.FontVariantEmoji | undefined;
+  /**
+   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :------: | :-----: | :-----: | :--: | :-: |
+   * |  **34**  | **34**  | **9.1** | n/a  | No  |
+   * | 31 _-x-_ |         | 7 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-ligatures
+   */
+  "font-variant-ligatures"?: Property.FontVariantLigatures | undefined;
+  /**
+   * The **`font-variant-numeric`** CSS property controls the usage of alternate glyphs for numbers, fractions, and ordinal markers.
+   *
+   * **Syntax**: `normal | [ <numeric-figure-values> || <numeric-spacing-values> || <numeric-fraction-values> || ordinal || slashed-zero ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **52** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-numeric
+   */
+  "font-variant-numeric"?: Property.FontVariantNumeric | undefined;
+  /**
+   * The **`font-variant-position`** CSS property controls the use of alternate, smaller glyphs that are positioned as superscript or subscript.
+   *
+   * **Syntax**: `normal | sub | super`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari  | Edge | IE  |
+   * | :-----: | :-----: | :-----: | :--: | :-: |
+   * | **117** | **34**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variant-position
+   */
+  "font-variant-position"?: Property.FontVariantPosition | undefined;
+  /**
+   * The **`font-variation-settings`** CSS property provides low-level control over variable font characteristics, by specifying the four letter axis names of the characteristics you want to vary, along with their values.
+   *
+   * **Syntax**: `normal | [ <string> <number> ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **62** | **62**  | **11** | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-variation-settings
+   */
+  "font-variation-settings"?: Property.FontVariationSettings | undefined;
+  /**
+   * The **`font-weight`** CSS property sets the weight (or boldness) of the font. The weights available depend on the `font-family` that is currently set.
+   *
+   * **Syntax**: `<font-weight-absolute> | bolder | lighter`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **2**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font-weight
+   */
+  "font-weight"?: Property.FontWeight | undefined;
+  /**
+   * The **`forced-color-adjust`** CSS property allows authors to opt certain elements out of forced colors mode. This then restores the control of those values to CSS.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |              Edge               |                 IE                  |
+   * | :----: | :-----: | :----: | :-----------------------------: | :---------------------------------: |
+   * | **89** | **113** |   No   |             **79**              | **10** _(-ms-high-contrast-adjust)_ |
+   * |        |         |        | 12 _(-ms-high-contrast-adjust)_ |                                     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/forced-color-adjust
+   */
+  "forced-color-adjust"?: Property.ForcedColorAdjust | undefined;
+  /**
+   * The **`grid-auto-columns`** CSS property specifies the size of an implicitly-created grid column track or pattern of tracks.
+   *
+   * **Syntax**: `<track-size>+`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |             IE              |
+   * | :----: | :-----: | :------: | :----: | :-------------------------: |
+   * | **57** | **70**  | **10.1** | **16** | **10** _(-ms-grid-columns)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-columns
+   */
+  "grid-auto-columns"?: Property.GridAutoColumns<TLength> | undefined;
+  /**
+   * The **`grid-auto-flow`** CSS property controls how the auto-placement algorithm works, specifying exactly how auto-placed items get flowed into the grid.
+   *
+   * **Syntax**: `[ row | column ] || dense`
+   *
+   * **Initial value**: `row`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-flow
+   */
+  "grid-auto-flow"?: Property.GridAutoFlow | undefined;
+  /**
+   * The **`grid-auto-rows`** CSS property specifies the size of an implicitly-created grid row track or pattern of tracks.
+   *
+   * **Syntax**: `<track-size>+`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |            IE            |
+   * | :----: | :-----: | :------: | :----: | :----------------------: |
+   * | **57** | **70**  | **10.1** | **16** | **10** _(-ms-grid-rows)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-auto-rows
+   */
+  "grid-auto-rows"?: Property.GridAutoRows<TLength> | undefined;
+  /**
+   * The **`grid-column-end`** CSS property specifies a grid item's end position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the block-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-end
+   */
+  "grid-column-end"?: Property.GridColumnEnd | undefined;
+  /**
+   * The **`grid-column-start`** CSS property specifies a grid item's start position within the grid column by contributing a line, a span, or nothing (automatic) to its grid placement. This start position defines the block-start edge of the grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column-start
+   */
+  "grid-column-start"?: Property.GridColumnStart | undefined;
+  /**
+   * The **`grid-row-end`** CSS property specifies a grid item's end position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-end
+   */
+  "grid-row-end"?: Property.GridRowEnd | undefined;
+  /**
+   * The **`grid-row-start`** CSS property specifies a grid item's start position within the grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start edge of its grid area.
+   *
+   * **Syntax**: `<grid-line>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row-start
+   */
+  "grid-row-start"?: Property.GridRowStart | undefined;
+  /**
+   * The **`grid-template-areas`** CSS property specifies named grid areas, establishing the cells in the grid and assigning them names.
+   *
+   * **Syntax**: `none | <string>+`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-areas
+   */
+  "grid-template-areas"?: Property.GridTemplateAreas | undefined;
+  /**
+   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list> | subgrid <line-name-list>?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |             IE              |
+   * | :----: | :-----: | :------: | :----: | :-------------------------: |
+   * | **57** | **52**  | **10.1** | **16** | **10** _(-ms-grid-columns)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-columns
+   */
+  "grid-template-columns"?: Property.GridTemplateColumns<TLength> | undefined;
+  /**
+   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list> | subgrid <line-name-list>?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |            IE            |
+   * | :----: | :-----: | :------: | :----: | :----------------------: |
+   * | **57** | **52**  | **10.1** | **16** | **10** _(-ms-grid-rows)_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template-rows
+   */
+  "grid-template-rows"?: Property.GridTemplateRows<TLength> | undefined;
+  /**
+   * The **`hanging-punctuation`** CSS property specifies whether a punctuation mark should hang at the start or end of a line of text. Hanging punctuation may be placed outside the line box.
+   *
+   * **Syntax**: `none | [ first || [ force-end | allow-end ] || last ]`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   No    | **10** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hanging-punctuation
+   */
+  "hanging-punctuation"?: Property.HangingPunctuation | undefined;
+  /**
+   * The **`height`** CSS property specifies the height of an element. By default, the property defines the height of the content area. If `box-sizing` is set to `border-box`, however, it instead determines the height of the border area.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/height
+   */
+  height?: Property.Height<TLength> | undefined;
+  /**
+   * The **`hyphenate-character`** CSS property sets the character (or string) used at the end of a line before a hyphenation break.
+   *
+   * **Syntax**: `auto | <string>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge | IE  |
+   * | :-----: | :-----: | :-------: | :--: | :-: |
+   * | **106** | **98**  |  **17**   | n/a  | No  |
+   * | 6 _-x-_ |         | 5.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hyphenate-character
+   */
+  "hyphenate-character"?: Property.HyphenateCharacter | undefined;
+  /**
+   * The **`hyphenate-limit-chars`** CSS property specifies the minimum word length to allow hyphenation of words as well as the the minimum number of characters before and after the hyphen.
+   *
+   * **Syntax**: `[ auto | <integer> ]{1,3}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** |   No    |   No   | n/a  | No  |
+   */
+  "hyphenate-limit-chars"?: Property.HyphenateLimitChars | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   *
+   * |  Chrome  | Firefox |  Safari   |  Edge  |      IE      |
+   * | :------: | :-----: | :-------: | :----: | :----------: |
+   * |  **55**  | **43**  |  **17**   | **79** | **10** _-x-_ |
+   * | 13 _-x-_ | 6 _-x-_ | 5.1 _-x-_ |        |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/hyphens
+   */
+  hyphens?: Property.Hyphens | undefined;
+  /**
+   * The **`image-orientation`** CSS property specifies a layout-independent correction to the orientation of an image.
+   *
+   * **Syntax**: `from-image | <angle> | [ <angle>? flip ]`
+   *
+   * **Initial value**: `from-image`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **81** | **26**  | **13.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/image-orientation
+   */
+  "image-orientation"?: Property.ImageOrientation | undefined;
+  /**
+   * The **`image-rendering`** CSS property sets an image scaling algorithm. The property applies to an element itself, to any images set in its other properties, and to its descendants.
+   *
+   * **Syntax**: `auto | crisp-edges | pixelated`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **13** | **3.6** | **6**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/image-rendering
+   */
+  "image-rendering"?: Property.ImageRendering | undefined;
+  /**
+   * **Syntax**: `[ from-image || <resolution> ] && snap?`
+   *
+   * **Initial value**: `1dppx`
+   */
+  "image-resolution"?: Property.ImageResolution | undefined;
+  /**
+   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.
+   *
+   * **Syntax**: `normal | [ <number> <integer>? ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |   Safari    | Edge | IE  |
+   * | :-----: | :-----: | :---------: | :--: | :-: |
+   * | **110** |   No    | **9** _-x-_ | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/initial-letter
+   */
+  "initial-letter"?: Property.InitialLetter | undefined;
+  /**
+   * The **`inline-size`** CSS property defines the horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `width` or the `height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'width'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inline-size
+   */
+  "inline-size"?: Property.InlineSize<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   */
+  "input-security"?: Property.InputSecurity | undefined;
+  /**
+   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-end
+   */
+  "inset-block-end"?: Property.InsetBlockEnd<TLength> | undefined;
+  /**
+   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block-start
+   */
+  "inset-block-start"?: Property.InsetBlockStart<TLength> | undefined;
+  /**
+   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-end
+   */
+  "inset-inline-end"?: Property.InsetInlineEnd<TLength> | undefined;
+  /**
+   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline-start
+   */
+  "inset-inline-start"?: Property.InsetInlineStart<TLength> | undefined;
+  /**
+   * The **`isolation`** CSS property determines whether an element must create a new stacking context.
+   *
+   * **Syntax**: `auto | isolate`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **41** | **36**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/isolation
+   */
+  isolation?: Property.Isolation | undefined;
+  /**
+   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.
+   *
+   * **Syntax**: `normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **20**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-content
+   */
+  "justify-content"?: Property.JustifyContent | undefined;
+  /**
+   * The CSS **`justify-items`** property defines the default `justify-self` for all items of the box, giving them all a default way of justifying each box along the appropriate axis.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]`
+   *
+   * **Initial value**: `legacy`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **52** | **20**  | **9**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-items
+   */
+  "justify-items"?: Property.JustifyItems | undefined;
+  /**
+   * The CSS **`justify-self`** property sets the way a box is justified inside its alignment container along the appropriate axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :------: | :----: | :----: |
+   * | **57** | **45**  | **10.1** | **16** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-self
+   */
+  "justify-self"?: Property.JustifySelf | undefined;
+  /**
+   * The **`justify-tracks`** CSS property sets the alignment in the masonry axis for grid containers that have masonry in their inline axis.
+   *
+   * **Syntax**: `[ normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] ]#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/justify-tracks
+   */
+  "justify-tracks"?: Property.JustifyTracks | undefined;
+  /**
+   * The **`left`** CSS property participates in specifying the horizontal position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/left
+   */
+  left?: Property.Left<TLength> | undefined;
+  /**
+   * The **`letter-spacing`** CSS property sets the horizontal spacing behavior between text characters. This value is added to the natural spacing between characters while rendering the text. Positive values of `letter-spacing` causes characters to spread farther apart, while negative values of `letter-spacing` bring characters closer together.
+   *
+   * **Syntax**: `normal | <length>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/letter-spacing
+   */
+  "letter-spacing"?: Property.LetterSpacing<TLength> | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE    |
+   * | :-----: | :-----: | :-----: | :----: | :-----: |
+   * | **58**  | **69**  | **11**  | **14** | **5.5** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |         |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-break
+   */
+  "line-break"?: Property.LineBreak | undefined;
+  /**
+   * The **`line-height`** CSS property sets the height of a line box. It's commonly used to set the distance between lines of text. On block-level elements, it specifies the minimum height of line boxes within the element. On non-replaced inline elements, it specifies the height that is used to calculate line box height.
+   *
+   * **Syntax**: `normal | <number> | <length> | <percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-height
+   */
+  "line-height"?: Property.LineHeight<TLength> | undefined;
+  /**
+   * The **`line-height-step`** CSS property sets the step unit for line box heights. When the property is set, line box heights are rounded up to the closest multiple of the unit.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |  n/a   |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/line-height-step
+   */
+  "line-height-step"?: Property.LineHeightStep<TLength> | undefined;
+  /**
+   * The **`list-style-image`** CSS property sets an image to be used as the list item marker.
+   *
+   * **Syntax**: `<image> | none`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-image
+   */
+  "list-style-image"?: Property.ListStyleImage | undefined;
+  /**
+   * The **`list-style-position`** CSS property sets the position of the `::marker` relative to a list item.
+   *
+   * **Syntax**: `inside | outside`
+   *
+   * **Initial value**: `outside`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-position
+   */
+  "list-style-position"?: Property.ListStylePosition | undefined;
+  /**
+   * The **`list-style-type`** CSS property sets the marker (such as a disc, character, or custom counter style) of a list item element.
+   *
+   * **Syntax**: `<counter-style> | <string> | none`
+   *
+   * **Initial value**: `disc`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style-type
+   */
+  "list-style-type"?: Property.ListStyleType | undefined;
+  /**
+   * The **`margin-block-end`** CSS property defines the logical block end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-end
+   */
+  "margin-block-end"?: Property.MarginBlockEnd<TLength> | undefined;
+  /**
+   * The **`margin-block-start`** CSS property defines the logical block start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block-start
+   */
+  "margin-block-start"?: Property.MarginBlockStart<TLength> | undefined;
+  /**
+   * The **`margin-bottom`** CSS property sets the margin area on the bottom of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-bottom
+   */
+  "margin-bottom"?: Property.MarginBottom<TLength> | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |          Chrome          |        Firefox        |          Safari          | Edge | IE  |
+   * | :----------------------: | :-------------------: | :----------------------: | :--: | :-: |
+   * |          **69**          |        **41**         |         **12.1**         | n/a  | No  |
+   * | 2 _(-webkit-margin-end)_ | 3 _(-moz-margin-end)_ | 3 _(-webkit-margin-end)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-end
+   */
+  "margin-inline-end"?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |           Chrome           |         Firefox         |           Safari           | Edge | IE  |
+   * | :------------------------: | :---------------------: | :------------------------: | :--: | :-: |
+   * |           **69**           |         **41**          |          **12.1**          | n/a  | No  |
+   * | 2 _(-webkit-margin-start)_ | 3 _(-moz-margin-start)_ | 3 _(-webkit-margin-start)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline-start
+   */
+  "margin-inline-start"?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * The **`margin-left`** CSS property sets the margin area on the left side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-left
+   */
+  "margin-left"?: Property.MarginLeft<TLength> | undefined;
+  /**
+   * The **`margin-right`** CSS property sets the margin area on the right side of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-right
+   */
+  "margin-right"?: Property.MarginRight<TLength> | undefined;
+  /**
+   * The **`margin-top`** CSS property sets the margin area on the top of an element. A positive value places it farther from its neighbors, while a negative value places it closer.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-top
+   */
+  "margin-top"?: Property.MarginTop<TLength> | undefined;
+  /**
+   * The `margin-trim` property allows the container to trim the margins of its children where they adjoin the container's edges.
+   *
+   * **Syntax**: `none | in-flow | all`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * |   No   |   No    | **16.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-trim
+   */
+  "margin-trim"?: Property.MarginTrim | undefined;
+  /**
+   * The **`mask-border-mode`** CSS property specifies the blending mode used in a mask border.
+   *
+   * **Syntax**: `luminance | alpha`
+   *
+   * **Initial value**: `alpha`
+   */
+  "mask-border-mode"?: Property.MaskBorderMode | undefined;
+  /**
+   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-outset)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-outset)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-outset
+   */
+  "mask-border-outset"?: Property.MaskBorderOutset<TLength> | undefined;
+  /**
+   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-repeat)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-repeat)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-repeat
+   */
+  "mask-border-repeat"?: Property.MaskBorderRepeat | undefined;
+  /**
+   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.
+   *
+   * **Syntax**: `<number-percentage>{1,4} fill?`
+   *
+   * **Initial value**: `0`
+   *
+   * |                 Chrome                 | Firefox |                Safari                | Edge | IE  |
+   * | :------------------------------------: | :-----: | :----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-slice)_ |   No    |               **17.2**               | n/a  | No  |
+   * |                                        |         | 3.1 _(-webkit-mask-box-image-slice)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-slice
+   */
+  "mask-border-slice"?: Property.MaskBorderSlice | undefined;
+  /**
+   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * |                 Chrome                  | Firefox |                Safari                 | Edge | IE  |
+   * | :-------------------------------------: | :-----: | :-----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-source)_ |   No    |               **17.2**                | n/a  | No  |
+   * |                                         |         | 3.1 _(-webkit-mask-box-image-source)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-source
+   */
+  "mask-border-source"?: Property.MaskBorderSource | undefined;
+  /**
+   * The **`mask-border-width`** CSS property sets the width of an element's mask border.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `auto`
+   *
+   * |                 Chrome                 | Firefox |                Safari                | Edge | IE  |
+   * | :------------------------------------: | :-----: | :----------------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image-width)_ |   No    |               **17.2**               | n/a  | No  |
+   * |                                        |         | 3.1 _(-webkit-mask-box-image-width)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border-width
+   */
+  "mask-border-width"?: Property.MaskBorderWidth<TLength> | undefined;
+  /**
+   * The **`mask-clip`** CSS property determines the area which is affected by a mask. The painted content of an element must be restricted to this area.
+   *
+   * **Syntax**: `[ <geometry-box> | no-clip ]#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-clip
+   */
+  "mask-clip"?: Property.MaskClip | undefined;
+  /**
+   * The **`mask-composite`** CSS property represents a compositing operation used on the current mask layer with the mask layers below it.
+   *
+   * **Syntax**: `<compositing-operator>#`
+   *
+   * **Initial value**: `add`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 18-79 | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-composite
+   */
+  "mask-composite"?: Property.MaskComposite | undefined;
+  /**
+   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element. By default this means the alpha channel of the mask image will be multiplied with the alpha channel of the element. This can be controlled with the `mask-mode` property.
+   *
+   * **Syntax**: `<mask-reference>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 16-79 | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-image
+   */
+  "mask-image"?: Property.MaskImage | undefined;
+  /**
+   * The **`mask-mode`** CSS property sets whether the mask reference defined by `mask-image` is treated as a luminance or alpha mask.
+   *
+   * **Syntax**: `<masking-mode>#`
+   *
+   * **Initial value**: `match-source`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-mode
+   */
+  "mask-mode"?: Property.MaskMode | undefined;
+  /**
+   * The **`mask-origin`** CSS property sets the origin of a mask.
+   *
+   * **Syntax**: `<geometry-box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **120** | **53**  | **15.4** | n/a  | No  |
+   * | 1 _-x-_ |         | 4 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-origin
+   */
+  "mask-origin"?: Property.MaskOrigin | undefined;
+  /**
+   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.
+   *
+   * **Syntax**: `<position>#`
+   *
+   * **Initial value**: `center`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge  | IE  |
+   * | :-----: | :-----: | :-------: | :---: | :-: |
+   * | **120** | **53**  | **15.4**  | 18-79 | No  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-position
+   */
+  "mask-position"?: Property.MaskPosition<TLength> | undefined;
+  /**
+   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   *
+   * | Chrome  | Firefox |  Safari   | Edge  | IE  |
+   * | :-----: | :-----: | :-------: | :---: | :-: |
+   * | **120** | **53**  | **15.4**  | 18-79 | No  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-repeat
+   */
+  "mask-repeat"?: Property.MaskRepeat | undefined;
+  /**
+   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge  | IE  |
+   * | :-----: | :-----: | :------: | :---: | :-: |
+   * | **120** | **53**  | **15.4** | 18-79 | No  |
+   * | 4 _-x-_ |         | 4 _-x-_  |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-size
+   */
+  "mask-size"?: Property.MaskSize<TLength> | undefined;
+  /**
+   * The **`mask-type`** CSS property sets whether an SVG `<mask>` element is used as a _luminance_ or an _alpha_ mask. It applies to the `<mask>` element itself.
+   *
+   * **Syntax**: `luminance | alpha`
+   *
+   * **Initial value**: `luminance`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **24** | **35**  | **7**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-type
+   */
+  "mask-type"?: Property.MaskType | undefined;
+  /**
+   * This feature is not Baseline because it does not work in some of the most widely-used browsers.
+   *
+   * **Syntax**: `[ pack | next ] || [ definite-first | ordered ]`
+   *
+   * **Initial value**: `pack`
+   *
+   * | Chrome | Firefox |   Safari    | Edge | IE  |
+   * | :----: | :-----: | :---------: | :--: | :-: |
+   * |   No   |   No    | **preview** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/masonry-auto-flow
+   */
+  "masonry-auto-flow"?: Property.MasonryAutoFlow | undefined;
+  /**
+   * The **`math-depth`** property describes a notion of _depth_ for each element of a mathematical formula, with respect to the top-level container of that formula. Concretely, this is used to determine the computed value of the font-size property when its specified value is `math`.
+   *
+   * **Syntax**: `auto-add | add(<integer>) | <integer>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** | **117** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-depth
+   */
+  "math-depth"?: Property.MathDepth | undefined;
+  /**
+   * The `math-shift` property indicates whether superscripts inside MathML formulas should be raised by a normal or compact shift.
+   *
+   * **Syntax**: `normal | compact`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **109** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-shift
+   */
+  "math-shift"?: Property.MathShift | undefined;
+  /**
+   * The `math-style` property indicates whether MathML equations should render with normal or compact height.
+   *
+   * **Syntax**: `normal | compact`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **109** | **117** | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/math-style
+   */
+  "math-style"?: Property.MathStyle | undefined;
+  /**
+   * The **`max-block-size`** CSS property specifies the maximum size of an element in the direction opposite that of the writing direction as specified by `writing-mode`. That is, if the writing direction is horizontal, then `max-block-size` is equivalent to `max-height`; if the writing direction is vertical, `max-block-size` is the same as `max-width`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-block-size
+   */
+  "max-block-size"?: Property.MaxBlockSize<TLength> | undefined;
+  /**
+   * The **`max-height`** CSS property sets the maximum height of an element. It prevents the used value of the `height` property from becoming larger than the value specified for `max-height`.
+   *
+   * **Syntax**: `none | <length-percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **18** |  **1**  | **1.3** | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-height
+   */
+  "max-height"?: Property.MaxHeight<TLength> | undefined;
+  /**
+   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block, depending on its writing mode. It corresponds to either the `max-width` or the `max-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |   Safari   | Edge | IE  |
+   * | :----: | :-----: | :--------: | :--: | :-: |
+   * | **57** | **41**  |  **12.1**  | n/a  | No  |
+   * |        |         | 10.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-inline-size
+   */
+  "max-inline-size"?: Property.MaxInlineSize<TLength> | undefined;
+  /**
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  "max-lines"?: Property.MaxLines | undefined;
+  /**
+   * The **`max-width`** CSS property sets the maximum width of an element. It prevents the used value of the `width` property from becoming larger than the value specified by `max-width`.
+   *
+   * **Syntax**: `none | <length-percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/max-width
+   */
+  "max-width"?: Property.MaxWidth<TLength> | undefined;
+  /**
+   * The **`min-block-size`** CSS property defines the minimum horizontal or vertical size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'min-width'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-block-size
+   */
+  "min-block-size"?: Property.MinBlockSize<TLength> | undefined;
+  /**
+   * The **`min-height`** CSS property sets the minimum height of an element. It prevents the used value of the `height` property from becoming smaller than the value specified for `min-height`.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **3**  | **1.3** | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-height
+   */
+  "min-height"?: Property.MinHeight<TLength> | undefined;
+  /**
+   * The **`min-inline-size`** CSS property defines the horizontal or vertical minimal size of an element's block, depending on its writing mode. It corresponds to either the `min-width` or the `min-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'min-width'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-inline-size
+   */
+  "min-inline-size"?: Property.MinInlineSize<TLength> | undefined;
+  /**
+   * The **`min-width`** CSS property sets the minimum width of an element. It prevents the used value of the `width` property from becoming smaller than the value specified for `min-width`.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **7** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/min-width
+   */
+  "min-width"?: Property.MinWidth<TLength> | undefined;
+  /**
+   * The **`mix-blend-mode`** CSS property sets how an element's content should blend with the content of the element's parent and the element's background.
+   *
+   * **Syntax**: `<blend-mode> | plus-lighter`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **41** | **32**  | **8**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mix-blend-mode
+   */
+  "mix-blend-mode"?: Property.MixBlendMode | undefined;
+  /**
+   * The **`offset-distance`** CSS property specifies a position along an `offset-path` for an element to be placed.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **55**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-distance)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance
+   */
+  "motion-distance"?: Property.OffsetDistance<TLength> | undefined;
+  /**
+   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.
+   *
+   * **Syntax**: `none | <offset-path> || <coord-box>`
+   *
+   * **Initial value**: `none`
+   *
+   * |       Chrome       | Firefox |  Safari  | Edge | IE  |
+   * | :----------------: | :-----: | :------: | :--: | :-: |
+   * |       **55**       | **72**  | **15.4** | n/a  | No  |
+   * | 46 _(motion-path)_ |         |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path
+   */
+  "motion-path"?: Property.OffsetPath | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  "motion-rotation"?: Property.OffsetRotate | undefined;
+  /**
+   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.
+   *
+   * **Syntax**: `fill | contain | cover | none | scale-down`
+   *
+   * **Initial value**: `fill`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **32** | **36**  | **10** | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/object-fit
+   */
+  "object-fit"?: Property.ObjectFit | undefined;
+  /**
+   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **32** | **36**  | **10** | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/object-position
+   */
+  "object-position"?: Property.ObjectPosition<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | <position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** | **72**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-anchor
+   */
+  "offset-anchor"?: Property.OffsetAnchor<TLength> | undefined;
+  /**
+   * The **`offset-distance`** CSS property specifies a position along an `offset-path` for an element to be placed.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **55**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-distance)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-distance
+   */
+  "offset-distance"?: Property.OffsetDistance<TLength> | undefined;
+  /**
+   * The **`offset-path`** CSS property specifies a motion path for an element to follow and defines the element's positioning within the parent container or SVG coordinate system.
+   *
+   * **Syntax**: `none | <offset-path> || <coord-box>`
+   *
+   * **Initial value**: `none`
+   *
+   * |       Chrome       | Firefox |  Safari  | Edge | IE  |
+   * | :----------------: | :-----: | :------: | :--: | :-: |
+   * |       **55**       | **72**  | **15.4** | n/a  | No  |
+   * | 46 _(motion-path)_ |         |          |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-path
+   */
+  "offset-path"?: Property.OffsetPath | undefined;
+  /**
+   * **Syntax**: `normal | auto | <position>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** |   n/a   | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-position
+   */
+  "offset-position"?: Property.OffsetPosition<TLength> | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  "offset-rotate"?: Property.OffsetRotate | undefined;
+  /**
+   * The **`offset-rotate`** CSS property defines the orientation/direction of the element as it is positioned along the `offset-path`.
+   *
+   * **Syntax**: `[ auto | reverse ] || <angle>`
+   *
+   * **Initial value**: `auto`
+   *
+   * |         Chrome         | Firefox | Safari | Edge | IE  |
+   * | :--------------------: | :-----: | :----: | :--: | :-: |
+   * |         **56**         | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion-rotation)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset-rotate
+   */
+  "offset-rotation"?: Property.OffsetRotate | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **2**  | **12** | **9** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/opacity
+   */
+  opacity?: Property.Opacity | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |
+   * | :------: | :-----: | :-----: | :----: | :------: |
+   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/order
+   */
+  order?: Property.Order | undefined;
+  /**
+   * The **`orphans`** CSS property sets the minimum number of lines in a block container that must be shown at the _bottom_ of a page, region, or column.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `2`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **25** |   No    | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/orphans
+   */
+  orphans?: Property.Orphans | undefined;
+  /**
+   * The **`outline-color`** CSS property sets the color of an element's outline.
+   *
+   * **Syntax**: `<color> | invert`
+   *
+   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-color
+   */
+  "outline-color"?: Property.OutlineColor | undefined;
+  /**
+   * The **`outline-offset`** CSS property sets the amount of space between an outline and the edge or border of an element.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :-----: | :----: | :-: |
+   * | **1**  | **1.5** | **1.2** | **15** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-offset
+   */
+  "outline-offset"?: Property.OutlineOffset<TLength> | undefined;
+  /**
+   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `auto | <'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-style
+   */
+  "outline-style"?: Property.OutlineStyle | undefined;
+  /**
+   * The CSS **`outline-width`** property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **1.5** | **1.2** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline-width
+   */
+  "outline-width"?: Property.OutlineWidth<TLength> | undefined;
+  /**
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **56** | **66**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-anchor
+   */
+  "overflow-anchor"?: Property.OverflowAnchor | undefined;
+  /**
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **69**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-block
+   */
+  "overflow-block"?: Property.OverflowBlock | undefined;
+  /**
+   * The **`overflow-clip-box`** CSS property specifies relative to which box the clipping happens when there is an overflow. It is short hand for the `overflow-clip-box-inline` and `overflow-clip-box-block` properties.
+   *
+   * **Syntax**: `padding-box | content-box`
+   *
+   * **Initial value**: `padding-box`
+   */
+  "overflow-clip-box"?: Property.OverflowClipBox | undefined;
+  /**
+   * **Syntax**: `<visual-box> || <length [0,∞]>`
+   *
+   * **Initial value**: `0px`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **90** | **102** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-clip-margin
+   */
+  "overflow-clip-margin"?: Property.OverflowClipMargin<TLength> | undefined;
+  /**
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **69**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-inline
+   */
+  "overflow-inline"?: Property.OverflowInline | undefined;
+  /**
+   * The **`overflow-wrap`** CSS property applies to inline elements, setting whether the browser should insert line breaks within an otherwise unbreakable string to prevent text from overflowing its line box.
+   *
+   * **Syntax**: `normal | break-word | anywhere`
+   *
+   * **Initial value**: `normal`
+   *
+   * |     Chrome      |      Firefox      |     Safari      |       Edge       |          IE           |
+   * | :-------------: | :---------------: | :-------------: | :--------------: | :-------------------: |
+   * |     **23**      |      **49**       |      **7**      |      **18**      | **5.5** _(word-wrap)_ |
+   * | 1 _(word-wrap)_ | 3.5 _(word-wrap)_ | 1 _(word-wrap)_ | 12 _(word-wrap)_ |                       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-wrap
+   */
+  "overflow-wrap"?: Property.OverflowWrap | undefined;
+  /**
+   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **3.5** | **3**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-x
+   */
+  "overflow-x"?: Property.OverflowX | undefined;
+  /**
+   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  | **3.5** | **3**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow-y
+   */
+  "overflow-y"?: Property.OverflowY | undefined;
+  /**
+   * The **`overlay`** CSS property specifies whether an element appearing in the top layer (for example, a shown popover or modal `<dialog>` element) is actually rendered in the top layer. This property is only relevant within a list of `transition-property` values, and only if `allow-discrete` is set as the `transition-behavior`.
+   *
+   * **Syntax**: `none | auto`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **117** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overlay
+   */
+  overlay?: Property.Overlay | undefined;
+  /**
+   * The **`overscroll-behavior-block`** CSS property sets the browser's behavior when the block direction boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **77** | **73**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-block
+   */
+  "overscroll-behavior-block"?: Property.OverscrollBehaviorBlock | undefined;
+  /**
+   * The **`overscroll-behavior-inline`** CSS property sets the browser's behavior when the inline direction boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **77** | **73**  | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-inline
+   */
+  "overscroll-behavior-inline"?: Property.OverscrollBehaviorInline | undefined;
+  /**
+   * The **`overscroll-behavior-x`** CSS property sets the browser's behavior when the horizontal boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-x
+   */
+  "overscroll-behavior-x"?: Property.OverscrollBehaviorX | undefined;
+  /**
+   * The **`overscroll-behavior-y`** CSS property sets the browser's behavior when the vertical boundary of a scrolling area is reached.
+   *
+   * **Syntax**: `contain | none | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior-y
+   */
+  "overscroll-behavior-y"?: Property.OverscrollBehaviorY | undefined;
+  /**
+   * The **`padding-block-end`** CSS property defines the logical block end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-end
+   */
+  "padding-block-end"?: Property.PaddingBlockEnd<TLength> | undefined;
+  /**
+   * The **`padding-block-start`** CSS property defines the logical block start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block-start
+   */
+  "padding-block-start"?: Property.PaddingBlockStart<TLength> | undefined;
+  /**
+   * The **`padding-bottom`** CSS property sets the height of the padding area on the bottom of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-bottom
+   */
+  "padding-bottom"?: Property.PaddingBottom<TLength> | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |          Chrome           |        Firefox         |          Safari           | Edge | IE  |
+   * | :-----------------------: | :--------------------: | :-----------------------: | :--: | :-: |
+   * |          **69**           |         **41**         |         **12.1**          | n/a  | No  |
+   * | 2 _(-webkit-padding-end)_ | 3 _(-moz-padding-end)_ | 3 _(-webkit-padding-end)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-end
+   */
+  "padding-inline-end"?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   *
+   * |           Chrome            |         Firefox          |           Safari            | Edge | IE  |
+   * | :-------------------------: | :----------------------: | :-------------------------: | :--: | :-: |
+   * |           **69**            |          **41**          |          **12.1**           | n/a  | No  |
+   * | 2 _(-webkit-padding-start)_ | 3 _(-moz-padding-start)_ | 3 _(-webkit-padding-start)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline-start
+   */
+  "padding-inline-start"?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * The **`padding-left`** CSS property sets the width of the padding area to the left of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-left
+   */
+  "padding-left"?: Property.PaddingLeft<TLength> | undefined;
+  /**
+   * The **`padding-right`** CSS property sets the width of the padding area on the right of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-right
+   */
+  "padding-right"?: Property.PaddingRight<TLength> | undefined;
+  /**
+   * The **`padding-top`** CSS property sets the height of the padding area on the top of an element.
+   *
+   * **Syntax**: `<length> | <percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-top
+   */
+  "padding-top"?: Property.PaddingTop<TLength> | undefined;
+  /**
+   * The **`page`** CSS property is used to specify the named page, a specific type of page defined by the `@page` at-rule.
+   *
+   * **Syntax**: `auto | <custom-ident>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari   | Edge | IE  |
+   * | :----: | :-----: | :-------: | :--: | :-: |
+   * | **85** | **110** | **≤13.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page
+   */
+  page?: Property.Page | undefined;
+  /**
+   * The **`page-break-after`** CSS property adjusts page breaks _after_ the current element.
+   *
+   * **Syntax**: `auto | always | avoid | left | right | recto | verso`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-after
+   */
+  "page-break-after"?: Property.PageBreakAfter | undefined;
+  /**
+   * The **`page-break-before`** CSS property adjusts page breaks _before_ the current element.
+   *
+   * **Syntax**: `auto | always | avoid | left | right | recto | verso`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **1**  | **1.2** | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-before
+   */
+  "page-break-before"?: Property.PageBreakBefore | undefined;
+  /**
+   * The **`page-break-inside`** CSS property adjusts page breaks _inside_ the current element.
+   *
+   * **Syntax**: `auto | avoid`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  | **19**  | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/page-break-inside
+   */
+  "page-break-inside"?: Property.PageBreakInside | undefined;
+  /**
+   * The **`paint-order`** CSS property lets you control the order in which the fill and stroke (and painting markers) of text content and shapes are drawn.
+   *
+   * **Syntax**: `normal | [ fill || stroke || markers ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **35** | **60**  | **8**  | **17** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/paint-order
+   */
+  "paint-order"?: Property.PaintOrder | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **36**  | **16**  |  **9**  | **12** | **10** |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/perspective
+   */
+  perspective?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **36**  | **16**  |  **9**  | **12** | **10** |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/perspective-origin
+   */
+  "perspective-origin"?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`pointer-events`** CSS property sets under what circumstances (if any) a particular graphic element can become the target of pointer events.
+   *
+   * **Syntax**: `auto | none | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | inherit`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE   |
+   * | :----: | :-----: | :----: | :----: | :----: |
+   * | **1**  | **1.5** | **4**  | **12** | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/pointer-events
+   */
+  "pointer-events"?: Property.PointerEvents | undefined;
+  /**
+   * The **`position`** CSS property sets how an element is positioned in a document. The `top`, `right`, `bottom`, and `left` properties determine the final location of positioned elements.
+   *
+   * **Syntax**: `static | relative | absolute | sticky | fixed`
+   *
+   * **Initial value**: `static`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/position
+   */
+  position?: Property.Position | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   *
+   * |    Chrome    |       Firefox       |  Safari  |     Edge     | IE  |
+   * | :----------: | :-----------------: | :------: | :----------: | :-: |
+   * | **17** _-x-_ |       **97**        | **15.4** | **79** _-x-_ | No  |
+   * |              | 48 _(color-adjust)_ | 6 _-x-_  |              |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/print-color-adjust
+   */
+  "print-color-adjust"?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`quotes`** CSS property sets how the browser should render quotation marks that are added using the `open-quotes` or `close-quotes` values of the CSS `content` property.
+   *
+   * **Syntax**: `none | auto | [ <string> <string> ]+`
+   *
+   * **Initial value**: depends on user agent
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **11** | **1.5** | **9**  | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/quotes
+   */
+  quotes?: Property.Quotes | undefined;
+  /**
+   * The **`resize`** CSS property sets whether an element is resizable, and if so, in which directions.
+   *
+   * **Syntax**: `none | both | horizontal | vertical | block | inline`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **1**  |  **4**  | **3**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/resize
+   */
+  resize?: Property.Resize | undefined;
+  /**
+   * The **`right`** CSS property participates in specifying the horizontal position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/right
+   */
+  right?: Property.Right<TLength> | undefined;
+  /**
+   * The **`rotate`** CSS property allows you to specify rotation transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` property.
+   *
+   * **Syntax**: `none | <angle> | [ x | y | z | <number>{3} ] && <angle>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/rotate
+   */
+  rotate?: Property.Rotate | undefined;
+  /**
+   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's rows.
+   *
+   * **Syntax**: `normal | <length-percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **47** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/row-gap
+   */
+  "row-gap"?: Property.RowGap<TLength> | undefined;
+  /**
+   * The **`ruby-align`** CSS property defines the distribution of the different ruby elements over the base.
+   *
+   * **Syntax**: `start | center | space-between | space-around`
+   *
+   * **Initial value**: `space-around`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * |   No   | **38**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-align
+   */
+  "ruby-align"?: Property.RubyAlign | undefined;
+  /**
+   * **Syntax**: `separate | collapse | auto`
+   *
+   * **Initial value**: `separate`
+   */
+  "ruby-merge"?: Property.RubyMerge | undefined;
+  /**
+   * The **`ruby-position`** CSS property defines the position of a ruby element relatives to its base element. It can be positioned over the element (`over`), under it (`under`), or between the characters on their right side (`inter-character`).
+   *
+   * **Syntax**: `[ alternate || [ over | under ] ] | inter-character`
+   *
+   * **Initial value**: `alternate`
+   *
+   * | Chrome  | Firefox |   Safari    | Edge  | IE  |
+   * | :-----: | :-----: | :---------: | :---: | :-: |
+   * | **84**  | **38**  | **7** _-x-_ | 12-79 | No  |
+   * | 1 _-x-_ |         |             |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/ruby-position
+   */
+  "ruby-position"?: Property.RubyPosition | undefined;
+  /**
+   * The **`scale`** CSS property allows you to specify scale transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.
+   *
+   * **Syntax**: `none | <number>{1,3}`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scale
+   */
+  scale?: Property.Scale | undefined;
+  /**
+   * The **`scroll-behavior`** CSS property sets the behavior for a scrolling box when scrolling is triggered by the navigation or CSSOM scrolling APIs.
+   *
+   * **Syntax**: `auto | smooth`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **61** | **36**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-behavior
+   */
+  "scroll-behavior"?: Property.ScrollBehavior | undefined;
+  /**
+   * The `scroll-margin-block-end` property defines the margin of the scroll snap area at the end of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-end
+   */
+  "scroll-margin-block-end"?: Property.ScrollMarginBlockEnd<TLength> | undefined;
+  /**
+   * The `scroll-margin-block-start` property defines the margin of the scroll snap area at the start of the block dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block-start
+   */
+  "scroll-margin-block-start"?: Property.ScrollMarginBlockStart<TLength> | undefined;
+  /**
+   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |              Safari              | Edge | IE  |
+   * | :----: | :-----: | :------------------------------: | :--: | :-: |
+   * | **69** | **68**  |             **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-bottom)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom
+   */
+  "scroll-margin-bottom"?: Property.ScrollMarginBottom<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline-end` property defines the margin of the scroll snap area at the end of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-end
+   */
+  "scroll-margin-inline-end"?: Property.ScrollMarginInlineEnd<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline-start` property defines the margin of the scroll snap area at the start of the inline dimension that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline-start
+   */
+  "scroll-margin-inline-start"?: Property.ScrollMarginInlineStart<TLength> | undefined;
+  /**
+   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari             | Edge | IE  |
+   * | :----: | :-----: | :----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-left)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left
+   */
+  "scroll-margin-left"?: Property.ScrollMarginLeft<TLength> | undefined;
+  /**
+   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari              | Edge | IE  |
+   * | :----: | :-----: | :-----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-right)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right
+   */
+  "scroll-margin-right"?: Property.ScrollMarginRight<TLength> | undefined;
+  /**
+   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |            Safari             | Edge | IE  |
+   * | :----: | :-----: | :---------------------------: | :--: | :-: |
+   * | **69** | **68**  |           **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-top)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top
+   */
+  "scroll-margin-top"?: Property.ScrollMarginTop<TLength> | undefined;
+  /**
+   * The `scroll-padding-block-end` property defines offsets for the end edge in the block dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-end
+   */
+  "scroll-padding-block-end"?: Property.ScrollPaddingBlockEnd<TLength> | undefined;
+  /**
+   * The `scroll-padding-block-start` property defines offsets for the start edge in the block dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block-start
+   */
+  "scroll-padding-block-start"?: Property.ScrollPaddingBlockStart<TLength> | undefined;
+  /**
+   * The `scroll-padding-bottom` property defines offsets for the bottom of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-bottom
+   */
+  "scroll-padding-bottom"?: Property.ScrollPaddingBottom<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline-end` property defines offsets for the end edge in the inline dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-end
+   */
+  "scroll-padding-inline-end"?: Property.ScrollPaddingInlineEnd<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline-start` property defines offsets for the start edge in the inline dimension of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline-start
+   */
+  "scroll-padding-inline-start"?: Property.ScrollPaddingInlineStart<TLength> | undefined;
+  /**
+   * The `scroll-padding-left` property defines offsets for the left of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-left
+   */
+  "scroll-padding-left"?: Property.ScrollPaddingLeft<TLength> | undefined;
+  /**
+   * The `scroll-padding-right` property defines offsets for the right of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-right
+   */
+  "scroll-padding-right"?: Property.ScrollPaddingRight<TLength> | undefined;
+  /**
+   * The **`scroll-padding-top`** property defines offsets for the top of the _optimal viewing region_ of the scrollport: the region used as the target region for placing things in view of the user. This allows the author to exclude regions of the scrollport that are obscured by other content (such as fixed-positioned toolbars or sidebars) or to put more breathing room between a targeted element and the edges of the scrollport.
+   *
+   * **Syntax**: `auto | <length-percentage>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-top
+   */
+  "scroll-padding-top"?: Property.ScrollPaddingTop<TLength> | undefined;
+  /**
+   * The `scroll-snap-align` property specifies the box's snap position as an alignment of its snap area (as the alignment subject) within its snap container's snapport (as the alignment container). The two values specify the snapping alignment in the block axis and inline axis, respectively. If only one value is specified, the second value defaults to the same value.
+   *
+   * **Syntax**: `[ none | start | end | center ]{1,2}`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-align
+   */
+  "scroll-snap-align"?: Property.ScrollSnapAlign | undefined;
+  /**
+   * The `scroll-margin-bottom` property defines the bottom margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |              Safari              | Edge | IE  |
+   * | :----: | :-----: | :------------------------------: | :--: | :-: |
+   * | **69** | **68**  |             **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-bottom)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-bottom
+   */
+  "scroll-snap-margin-bottom"?: Property.ScrollMarginBottom<TLength> | undefined;
+  /**
+   * The `scroll-margin-left` property defines the left margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari             | Edge | IE  |
+   * | :----: | :-----: | :----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-left)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-left
+   */
+  "scroll-snap-margin-left"?: Property.ScrollMarginLeft<TLength> | undefined;
+  /**
+   * The `scroll-margin-right` property defines the right margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |             Safari              | Edge | IE  |
+   * | :----: | :-----: | :-----------------------------: | :--: | :-: |
+   * | **69** | **68**  |            **14.1**             | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-right)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-right
+   */
+  "scroll-snap-margin-right"?: Property.ScrollMarginRight<TLength> | undefined;
+  /**
+   * The `scroll-margin-top` property defines the top margin of the scroll snap area that is used for snapping this box to the snapport. The scroll snap area is determined by taking the transformed border box, finding its rectangular bounding box (axis-aligned in the scroll container's coordinate space), then adding the specified outsets.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |            Safari             | Edge | IE  |
+   * | :----: | :-----: | :---------------------------: | :--: | :-: |
+   * | **69** | **68**  |           **14.1**            | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin-top)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-top
+   */
+  "scroll-snap-margin-top"?: Property.ScrollMarginTop<TLength> | undefined;
+  /**
+   * The **`scroll-snap-stop`** CSS property defines whether or not the scroll container is allowed to "pass over" possible snap positions.
+   *
+   * **Syntax**: `normal | always`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **75** | **103** | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-stop
+   */
+  "scroll-snap-stop"?: Property.ScrollSnapStop | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | [ x | y | block | inline | both ] [ mandatory | proximity ]?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |      IE      |
+   * | :----: | :-----: | :-----: | :----: | :----------: |
+   * | **69** |  39-68  | **11**  | **79** | **10** _-x-_ |
+   * |        |         | 9 _-x-_ |        |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-snap-type
+   */
+  "scroll-snap-type"?: Property.ScrollSnapType | undefined;
+  /**
+   * The **`scroll-timeline-axis`** CSS property can be used to specify the scrollbar that will be used to provide the timeline for a scroll-timeline animation.
+   *
+   * **Syntax**: `[ block | inline | x | y ]#`
+   *
+   * **Initial value**: `block`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline-axis
+   */
+  "scroll-timeline-axis"?: Property.ScrollTimelineAxis | undefined;
+  /**
+   * The **`scroll-timeline-name`** CSS property defines a name that can be used to identify an element as the source of a scroll timeline for an animation.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline-name
+   */
+  "scroll-timeline-name"?: Property.ScrollTimelineName | undefined;
+  /**
+   * The **`scrollbar-color`** CSS property sets the color of the scrollbar track and thumb.
+   *
+   * **Syntax**: `auto | <color>{2}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **121** | **64**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-color
+   */
+  "scrollbar-color"?: Property.ScrollbarColor | undefined;
+  /**
+   * The **`scrollbar-gutter`** CSS property allows authors to reserve space for the scrollbar, preventing unwanted layout changes as the content grows while also avoiding unnecessary visuals when scrolling isn't needed.
+   *
+   * **Syntax**: `auto | stable && both-edges?`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **94** | **97**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-gutter
+   */
+  "scrollbar-gutter"?: Property.ScrollbarGutter | undefined;
+  /**
+   * The **`scrollbar-width`** property allows the author to set the maximum thickness of an element's scrollbars when they are shown.
+   *
+   * **Syntax**: `auto | thin | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **121** | **64**  |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scrollbar-width
+   */
+  "scrollbar-width"?: Property.ScrollbarWidth | undefined;
+  /**
+   * The **`shape-image-threshold`** CSS property sets the alpha channel threshold used to extract the shape using an image as the value for `shape-outside`.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `0.0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-image-threshold
+   */
+  "shape-image-threshold"?: Property.ShapeImageThreshold | undefined;
+  /**
+   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-margin
+   */
+  "shape-margin"?: Property.ShapeMargin<TLength> | undefined;
+  /**
+   * The **`shape-outside`** CSS property defines a shape—which may be non-rectangular—around which adjacent inline content should wrap. By default, inline content wraps around its margin box; `shape-outside` provides a way to customize this wrapping, making it possible to wrap text around complex objects rather than simple boxes.
+   *
+   * **Syntax**: `none | [ <shape-box> || <basic-shape> ] | <image>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **37** | **62**  | **10.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/shape-outside
+   */
+  "shape-outside"?: Property.ShapeOutside | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **21** | **91**  | **7**  | n/a  | No  |
+   * |        | 4 _-x-_ |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/tab-size
+   */
+  "tab-size"?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`table-layout`** CSS property sets the algorithm used to lay out `<table>` cells, rows, and columns.
+   *
+   * **Syntax**: `auto | fixed`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **14** |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/table-layout
+   */
+  "table-layout"?: Property.TableLayout | undefined;
+  /**
+   * The **`text-align`** CSS property sets the horizontal alignment of the inline-level content inside a block element or table-cell box. This means it works like `vertical-align` but in the horizontal direction.
+   *
+   * **Syntax**: `start | end | left | right | center | justify | match-parent`
+   *
+   * **Initial value**: `start`, or a nameless value that acts as `left` if _direction_ is `ltr`, `right` if _direction_ is `rtl` if `start` is not supported by the browser.
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-align
+   */
+  "text-align"?: Property.TextAlign | undefined;
+  /**
+   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.
+   *
+   * **Syntax**: `auto | start | end | left | right | center | justify`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **47** | **49**  | **16** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-align-last
+   */
+  "text-align-last"?: Property.TextAlignLast | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   *
+   * |           Chrome           | Firefox |            Safari            |  Edge  |                   IE                   |
+   * | :------------------------: | :-----: | :--------------------------: | :----: | :------------------------------------: |
+   * |           **48**           | **48**  |           **15.4**           | **79** | **11** _(-ms-text-combine-horizontal)_ |
+   * | 9 _(-webkit-text-combine)_ |         | 5.1 _(-webkit-text-combine)_ |        |                                        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-combine-upright
+   */
+  "text-combine-upright"?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-color
+   */
+  "text-decoration-color"?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-line
+   */
+  "text-decoration-line"?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-skip`** CSS property sets what parts of an element's content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.
+   *
+   * **Syntax**: `none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]`
+   *
+   * **Initial value**: `objects`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | 57-64  |   No    | **12.1** | n/a  | No  |
+   * |        |         | 7 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip
+   */
+  "text-decoration-skip"?: Property.TextDecorationSkip | undefined;
+  /**
+   * The **`text-decoration-skip-ink`** CSS property specifies how overlines and underlines are drawn when they pass over glyph ascenders and descenders.
+   *
+   * **Syntax**: `auto | all | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **64** | **70**  | **15.4** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-skip-ink
+   */
+  "text-decoration-skip-ink"?: Property.TextDecorationSkipInk | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **57** | **36**  | **12.1** | n/a  | No  |
+   * |        |         | 8 _-x-_  |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-style
+   */
+  "text-decoration-style"?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`text-decoration-thickness`** CSS property sets the stroke thickness of the decoration line that is used on text in an element, such as a line-through, underline, or overline.
+   *
+   * **Syntax**: `auto | from-font | <length> | <percentage> `
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **89** | **70**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration-thickness
+   */
+  "text-decoration-thickness"?: Property.TextDecorationThickness<TLength> | undefined;
+  /**
+   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-color
+   */
+  "text-emphasis-color"?: Property.TextEmphasisColor | undefined;
+  /**
+   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.
+   *
+   * **Syntax**: `[ over | under ] && [ right | left ]`
+   *
+   * **Initial value**: `over right`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-position
+   */
+  "text-emphasis-position"?: Property.TextEmphasisPosition | undefined;
+  /**
+   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>`
+   *
+   * **Initial value**: `none`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis-style
+   */
+  "text-emphasis-style"?: Property.TextEmphasisStyle | undefined;
+  /**
+   * The **`text-indent`** CSS property sets the length of empty space (indentation) that is put before lines of text in a block.
+   *
+   * **Syntax**: `<length-percentage> && hanging? && each-line?`
+   *
+   * **Initial value**: `0`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-indent
+   */
+  "text-indent"?: Property.TextIndent<TLength> | undefined;
+  /**
+   * The **`text-justify`** CSS property sets what type of justification should be applied to text when `text-align``: justify;` is set on an element.
+   *
+   * **Syntax**: `auto | inter-character | inter-word | none`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge  |   IE   |
+   * | :----: | :-----: | :----: | :---: | :----: |
+   * |  n/a   | **55**  |   No   | 12-79 | **11** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-justify
+   */
+  "text-justify"?: Property.TextJustify | undefined;
+  /**
+   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.
+   *
+   * **Syntax**: `mixed | upright | sideways`
+   *
+   * **Initial value**: `mixed`
+   *
+   * |  Chrome  | Firefox |  Safari   | Edge | IE  |
+   * | :------: | :-----: | :-------: | :--: | :-: |
+   * |  **48**  | **41**  |  **14**   | n/a  | No  |
+   * | 11 _-x-_ |         | 5.1 _-x-_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-orientation
+   */
+  "text-orientation"?: Property.TextOrientation | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **1**  |  **7**  | **1.3** | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-overflow
+   */
+  "text-overflow"?: Property.TextOverflow | undefined;
+  /**
+   * The **`text-rendering`** CSS property provides information to the rendering engine about what to optimize for when rendering text.
+   *
+   * **Syntax**: `auto | optimizeSpeed | optimizeLegibility | geometricPrecision`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **4**  |  **1**  | **5**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-rendering
+   */
+  "text-rendering"?: Property.TextRendering | undefined;
+  /**
+   * The **`text-shadow`** CSS property adds shadows to text. It accepts a comma-separated list of shadows to be applied to the text and any of its `decorations`. Each shadow is described by some combination of X and Y offsets from the element, blur radius, and color.
+   *
+   * **Syntax**: `none | <shadow-t>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **2**  | **3.5** | **1.1** | **12** | **10** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-shadow
+   */
+  "text-shadow"?: Property.TextShadow | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **54** |   No    |   No   | **79** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-size-adjust
+   */
+  "text-size-adjust"?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`text-transform`** CSS property specifies how to capitalize an element's text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized. It also can help improve legibility for ruby.
+   *
+   * **Syntax**: `none | capitalize | uppercase | lowercase | full-width | full-size-kana`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-transform
+   */
+  "text-transform"?: Property.TextTransform | undefined;
+  /**
+   * The **`text-underline-offset`** CSS property sets the offset distance of an underline text decoration line (applied using `text-decoration`) from its original position.
+   *
+   * **Syntax**: `auto | <length> | <percentage> `
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **70**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-offset
+   */
+  "text-underline-offset"?: Property.TextUnderlineOffset<TLength> | undefined;
+  /**
+   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.
+   *
+   * **Syntax**: `auto | from-font | [ under || [ left | right ] ]`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :------: | :----: | :---: |
+   * | **33** | **74**  | **12.1** | **12** | **6** |
+   * |        |         | 9 _-x-_  |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-underline-position
+   */
+  "text-underline-position"?: Property.TextUnderlinePosition | undefined;
+  /**
+   * The **`text-wrap`** CSS property controls how text inside an element is wrapped. The different values provide:
+   *
+   * **Syntax**: `wrap | nowrap | balance | stable | pretty`
+   *
+   * **Initial value**: `wrap`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **114** | **121** |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-wrap
+   */
+  "text-wrap"?: Property.TextWrap | undefined;
+  /**
+   * The **`timeline-scope`** CSS property modifies the scope of a named animation timeline.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **116** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/timeline-scope
+   */
+  "timeline-scope"?: Property.TimelineScope | undefined;
+  /**
+   * The **`top`** CSS property participates in specifying the vertical position of a positioned element. It has no effect on non-positioned elements.
+   *
+   * **Syntax**: `<length> | <percentage> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/top
+   */
+  top?: Property.Top<TLength> | undefined;
+  /**
+   * The **`touch-action`** CSS property sets how an element's region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).
+   *
+   * **Syntax**: `auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |    IE    |
+   * | :----: | :-----: | :----: | :----: | :------: |
+   * | **36** | **52**  | **13** | **12** |  **11**  |
+   * |        |         |        |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/touch-action
+   */
+  "touch-action"?: Property.TouchAction | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE    |
+   * | :-----: | :-----: | :-------: | :----: | :-----: |
+   * | **36**  | **16**  |   **9**   | **12** | **10**  |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        | 9 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform
+   */
+  transform?: Property.Transform | undefined;
+  /**
+   * The **`transform-box`** CSS property defines the layout box to which the `transform`, individual transform properties `translate`,`scale`, and `rotate`, and `transform-origin` properties relate.
+   *
+   * **Syntax**: `content-box | border-box | fill-box | stroke-box | view-box`
+   *
+   * **Initial value**: `view-box`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **64** | **55**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-box
+   */
+  "transform-box"?: Property.TransformBox | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE    |
+   * | :-----: | :-----: | :-----: | :----: | :-----: |
+   * | **36**  | **16**  |  **9**  | **12** | **10**  |
+   * | 1 _-x-_ |         | 2 _-x-_ |        | 9 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-origin
+   */
+  "transform-origin"?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  | IE  |
+   * | :------: | :-----: | :-----: | :----: | :-: |
+   * |  **36**  | **16**  |  **9**  | **12** | No  |
+   * | 12 _-x-_ |         | 4 _-x-_ |        |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transform-style
+   */
+  "transform-style"?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition-behavior`** CSS property specifies whether transitions will be started for properties whose animation behavior is discrete.
+   *
+   * **Syntax**: `<transition-behavior-value>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **117** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-behavior
+   */
+  "transition-behavior"?: Property.TransitionBehavior | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **26**  | **16**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-delay
+   */
+  "transition-delay"?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-duration
+   */
+  "transition-duration"?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-property
+   */
+  "transition-property"?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition-timing-function
+   */
+  "transition-timing-function"?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`translate`** CSS property allows you to specify translation transforms individually and independently of the `transform` property. This maps better to typical user interface usage, and saves having to remember the exact order of transform functions to specify in the `transform` value.
+   *
+   * **Syntax**: `none | <length-percentage> [ <length-percentage> <length>? ]?`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox |  Safari  | Edge | IE  |
+   * | :-----: | :-----: | :------: | :--: | :-: |
+   * | **104** | **72**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/translate
+   */
+  translate?: Property.Translate<TLength> | undefined;
+  /**
+   * The **`unicode-bidi`** CSS property, together with the `direction` property, determines how bidirectional text in a document is handled. For example, if a block of content contains both left-to-right and right-to-left text, the user-agent uses a complex Unicode algorithm to decide how to display the text. The `unicode-bidi` property overrides this algorithm and allows the developer to control the text embedding.
+   *
+   * **Syntax**: `normal | embed | isolate | bidi-override | isolate-override | plaintext`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE    |
+   * | :----: | :-----: | :-----: | :----: | :-----: |
+   * | **2**  |  **1**  | **1.3** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/unicode-bidi
+   */
+  "unicode-bidi"?: Property.UnicodeBidi | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox |   Safari    |   Edge   |      IE      |
+   * | :-----: | :-----: | :---------: | :------: | :----------: |
+   * | **54**  | **69**  | **3** _-x-_ |  **79**  | **10** _-x-_ |
+   * | 1 _-x-_ | 1 _-x-_ |             | 12 _-x-_ |              |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/user-select
+   */
+  "user-select"?: Property.UserSelect | undefined;
+  /**
+   * The **`vertical-align`** CSS property sets vertical alignment of an inline, inline-block or table-cell box.
+   *
+   * **Syntax**: `baseline | sub | super | text-top | text-bottom | middle | top | bottom | <percentage> | <length>`
+   *
+   * **Initial value**: `baseline`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/vertical-align
+   */
+  "vertical-align"?: Property.VerticalAlign<TLength> | undefined;
+  /**
+   * The **`view-timeline-axis`** CSS property is used to specify the scrollbar direction that will be used to provide the timeline for a _named view progress timeline_ animation, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline-axis` is set on the subject. See CSS scroll-driven animations for more details.
+   *
+   * **Syntax**: `[ block | inline | x | y ]#`
+   *
+   * **Initial value**: `block`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-axis
+   */
+  "view-timeline-axis"?: Property.ViewTimelineAxis | undefined;
+  /**
+   * The **`view-timeline-inset`** CSS property is used to specify one or two values representing an adjustment to the position of the scrollport (see Scroll container for more details) in which the subject element of a _named view progress timeline_ animation is deemed to be visible. Put another way, this allows you to specify start and/or end inset (or outset) values that offset the position of the timeline.
+   *
+   * **Syntax**: `[ [ auto | <length-percentage> ]{1,2} ]#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-inset
+   */
+  "view-timeline-inset"?: Property.ViewTimelineInset<TLength> | undefined;
+  /**
+   * The **`view-timeline-name`** CSS property is used to define the name of a _named view progress timeline_, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline` is set on the subject.
+   *
+   * **Syntax**: `none | <dashed-ident>#`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline-name
+   */
+  "view-timeline-name"?: Property.ViewTimelineName | undefined;
+  /**
+   * The **`view-transition-name`** CSS property provides the selected element with a distinct identifying name (a `<custom-ident>`) and causes it to participate in a separate view transition from the root view transition — or no view transition if the `none` value is specified.
+   *
+   * **Syntax**: `none | <custom-ident>`
+   *
+   * **Initial value**: `none`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **111** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-transition-name
+   */
+  "view-transition-name"?: Property.ViewTransitionName | undefined;
+  /**
+   * The **`visibility`** CSS property shows or hides an element without changing the layout of a document. The property can also hide rows or columns in a `<table>`.
+   *
+   * **Syntax**: `visible | hidden | collapse`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/visibility
+   */
+  visibility?: Property.Visibility | undefined;
+  /**
+   * The **`white-space`** CSS property sets how white space inside an element is handled.
+   *
+   * **Syntax**: `normal | pre | nowrap | pre-wrap | pre-line | break-spaces | [ <'white-space-collapse'> || <'text-wrap'> || <'white-space-trim'> ]`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/white-space
+   */
+  "white-space"?: Property.WhiteSpace | undefined;
+  /**
+   * The **`white-space-collapse`** CSS property controls how white space inside an element is collapsed.
+   *
+   * **Syntax**: `collapse | discard | preserve | preserve-breaks | preserve-spaces | break-spaces`
+   *
+   * **Initial value**: `collapse`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **114** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/white-space-collapse
+   */
+  "white-space-collapse"?: Property.WhiteSpaceCollapse | undefined;
+  /**
+   * **Syntax**: `none | discard-before || discard-after || discard-inner`
+   *
+   * **Initial value**: `none`
+   */
+  "white-space-trim"?: Property.WhiteSpaceTrim | undefined;
+  /**
+   * The **`widows`** CSS property sets the minimum number of lines in a block container that must be shown at the _top_ of a page, region, or column.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `2`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :-----: | :----: | :---: |
+   * | **25** |   No    | **1.3** | **12** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/widows
+   */
+  widows?: Property.Widows | undefined;
+  /**
+   * The **`width`** CSS property sets an element's width. By default, it sets the width of the content area, but if `box-sizing` is set to `border-box`, it sets the width of the border area.
+   *
+   * **Syntax**: `auto | <length> | <percentage> | min-content | max-content | fit-content | fit-content(<length-percentage>)`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/width
+   */
+  width?: Property.Width<TLength> | undefined;
+  /**
+   * The **`will-change`** CSS property hints to browsers how an element is expected to change. Browsers may set up optimizations before an element is actually changed. These kinds of optimizations can increase the responsiveness of a page by doing potentially expensive work before they are actually required.
+   *
+   * **Syntax**: `auto | <animateable-feature>#`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **36** | **36**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/will-change
+   */
+  "will-change"?: Property.WillChange | undefined;
+  /**
+   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.
+   *
+   * **Syntax**: `normal | break-all | keep-all | break-word`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  | **15**  | **3**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/word-break
+   */
+  "word-break"?: Property.WordBreak | undefined;
+  /**
+   * The **`word-spacing`** CSS property sets the length of space between words and between tags.
+   *
+   * **Syntax**: `normal | <length>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **6** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/word-spacing
+   */
+  "word-spacing"?: Property.WordSpacing<TLength> | undefined;
+  /**
+   * The **`overflow-wrap`** CSS property applies to inline elements, setting whether the browser should insert line breaks within an otherwise unbreakable string to prevent text from overflowing its line box.
+   *
+   * **Syntax**: `normal | break-word`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge   | IE  |
+   * | :-----: | :-----: | :-------: | :-----: | :-: |
+   * | **≤80** | **≤72** | **≤13.1** | **≤80** | No  |
+   */
+  "word-wrap"?: Property.WordWrap | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |  IE   |
+   * | :-----: | :-----: | :-------: | :----: | :---: |
+   * | **48**  | **41**  | **10.1**  | **12** | **9** |
+   * | 8 _-x-_ |         | 5.1 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/writing-mode
+   */
+  "writing-mode"?: Property.WritingMode | undefined;
+  /**
+   * The **`z-index`** CSS property sets the z-order of a positioned element and its descendants or flex items. Overlapping elements with a larger z-index cover those with a smaller one.
+   *
+   * **Syntax**: `auto | <integer>`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/z-index
+   */
+  "z-index"?: Property.ZIndex | undefined;
+  /**
+   * The non-standard **`zoom`** CSS property can be used to control the magnification level of an element. `transform: scale()` should be used instead of this property, if possible. However, unlike CSS Transforms, `zoom` affects the layout size of the element.
+   *
+   * **Syntax**: `normal | reset | <number> | <percentage>`
+   *
+   * **Initial value**: `normal`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE    |
+   * | :----: | :-----: | :-----: | :----: | :-----: |
+   * | **1**  |   n/a   | **3.1** | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/zoom
+   */
+  zoom?: Property.Zoom | undefined;
+}
+
+export interface StandardShorthandPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`all`** shorthand CSS property resets all of an element's properties except `unicode-bidi`, `direction`, and CSS Custom Properties. It can set properties to their initial or inherited values, or to the values specified in another cascade layer or stylesheet origin.
+   *
+   * **Syntax**: `initial | inherit | unset | revert | revert-layer`
+   *
+   * **Initial value**: There is no practical initial value for it.
+   *
+   * | Chrome | Firefox | Safari  | Edge | IE  |
+   * | :----: | :-----: | :-----: | :--: | :-: |
+   * | **37** | **27**  | **9.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/all
+   */
+  all?: Property.All | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **43**  | **16**  |  **9**  | **12** | **10** |
+   * | 3 _-x-_ | 5 _-x-_ | 4 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation
+   */
+  animation?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`animation-range`** CSS shorthand property is used to set the start and end of an animation's attachment range along its timeline, i.e. where along the timeline an animation will start and end.
+   *
+   * **Syntax**: `[ <'animation-range-start'> <'animation-range-end'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   No    |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/animation-range
+   */
+  "animation-range"?: Property.AnimationRange<TLength> | undefined;
+  /**
+   * The **`background`** shorthand CSS property sets all background style properties at once, such as color, image, origin and size, or repeat method.
+   *
+   * **Syntax**: `[ <bg-layer> , ]* <final-bg-layer>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background
+   */
+  background?: Property.Background<TLength> | undefined;
+  /**
+   * The **`background-position`** CSS property sets the initial position for each background image. The position is relative to the position layer set by `background-origin`.
+   *
+   * **Syntax**: `<bg-position>#`
+   *
+   * **Initial value**: `0% 0%`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/background-position
+   */
+  "background-position"?: Property.BackgroundPosition<TLength> | undefined;
+  /**
+   * The **`border`** shorthand CSS property sets an element's border. It sets the values of `border-width`, `border-style`, and `border-color`.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border
+   */
+  border?: Property.Border<TLength> | undefined;
+  /**
+   * The **`border-block`** CSS property is a shorthand property for setting the individual logical block border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block
+   */
+  "border-block"?: Property.BorderBlock<TLength> | undefined;
+  /**
+   * The **`border-block-end`** CSS property is a shorthand property for setting the individual logical block-end border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-end
+   */
+  "border-block-end"?: Property.BorderBlockEnd<TLength> | undefined;
+  /**
+   * The **`border-block-start`** CSS property is a shorthand property for setting the individual logical block-start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-block-start
+   */
+  "border-block-start"?: Property.BorderBlockStart<TLength> | undefined;
+  /**
+   * The **`border-bottom`** shorthand CSS property sets an element's bottom border. It sets the values of `border-bottom-width`, `border-bottom-style` and `border-bottom-color`.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-bottom
+   */
+  "border-bottom"?: Property.BorderBottom<TLength> | undefined;
+  /**
+   * The **`border-color`** shorthand CSS property sets the color of an element's border.
+   *
+   * **Syntax**: `<color>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-color
+   */
+  "border-color"?: Property.BorderColor | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   *
+   * | Chrome  |  Firefox  | Safari  |  Edge  |   IE   |
+   * | :-----: | :-------: | :-----: | :----: | :----: |
+   * | **16**  |  **15**   |  **6**  | **12** | **11** |
+   * | 7 _-x-_ | 3.5 _-x-_ | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-image
+   */
+  "border-image"?: Property.BorderImage | undefined;
+  /**
+   * The **`border-inline`** CSS property is a shorthand property for setting the individual logical inline border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline
+   */
+  "border-inline"?: Property.BorderInline<TLength> | undefined;
+  /**
+   * The **`border-inline-end`** CSS property is a shorthand property for setting the individual logical inline-end border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-end
+   */
+  "border-inline-end"?: Property.BorderInlineEnd<TLength> | undefined;
+  /**
+   * The **`border-inline-start`** CSS property is a shorthand property for setting the individual logical inline-start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-top-width'> || <'border-top-style'> || <color>`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **41**  | **12.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-inline-start
+   */
+  "border-inline-start"?: Property.BorderInlineStart<TLength> | undefined;
+  /**
+   * The **`border-left`** shorthand CSS property sets all the properties of an element's left border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-left
+   */
+  "border-left"?: Property.BorderLeft<TLength> | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |  IE   |
+   * | :-----: | :-----: | :-----: | :----: | :---: |
+   * |  **4**  |  **4**  |  **5**  | **12** | **9** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |       |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-radius
+   */
+  "border-radius"?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`border-right`** shorthand CSS property sets all the properties of an element's right border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |   IE    |
+   * | :----: | :-----: | :----: | :----: | :-----: |
+   * | **1**  |  **1**  | **1**  | **12** | **5.5** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-right
+   */
+  "border-right"?: Property.BorderRight<TLength> | undefined;
+  /**
+   * The **`border-style`** shorthand CSS property sets the line style for all four sides of an element's border.
+   *
+   * **Syntax**: `<line-style>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-style
+   */
+  "border-style"?: Property.BorderStyle | undefined;
+  /**
+   * The **`border-top`** shorthand CSS property sets all the properties of an element's top border.
+   *
+   * **Syntax**: `<line-width> || <line-style> || <color>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-top
+   */
+  "border-top"?: Property.BorderTop<TLength> | undefined;
+  /**
+   * The **`border-width`** shorthand CSS property sets the width of an element's border.
+   *
+   * **Syntax**: `<line-width>{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/border-width
+   */
+  "border-width"?: Property.BorderWidth<TLength> | undefined;
+  /** **Syntax**: `<'caret-color'> || <'caret-shape'>` */
+  caret?: Property.Caret | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   *
+   * | Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :-----: | :-----: | :-----: | :----: | :----: |
+   * | **50**  | **52**  |  **9**  | **12** | **10** |
+   * | 1 _-x-_ |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/column-rule
+   */
+  "column-rule"?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   *
+   * | Chrome | Firefox | Safari  |  Edge  |   IE   |
+   * | :----: | :-----: | :-----: | :----: | :----: |
+   * | **50** | **52**  |  **9**  | **12** | **10** |
+   * |        |         | 3 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/columns
+   */
+  columns?: Property.Columns<TLength> | undefined;
+  /**
+   * The **`contain-intrinsic-size`** CSS shorthand property sets the size of an element that a browser will use for layout when the element is subject to size containment.
+   *
+   * **Syntax**: `[ auto? [ none | <length> ] ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **83** | **107** | **17** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/contain-intrinsic-size
+   */
+  "contain-intrinsic-size"?: Property.ContainIntrinsicSize<TLength> | undefined;
+  /**
+   * The **container** shorthand CSS property establishes the element as a query container and specifies the name or name for the containment context used in a container query.
+   *
+   * **Syntax**: `<'container-name'> [ / <'container-type'> ]?`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **105** | **110** | **16** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/container
+   */
+  container?: Property.Container | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |    IE    |
+   * | :------: | :-----: | :-----: | :----: | :------: |
+   * |  **29**  | **20**  |  **9**  | **12** |  **11**  |
+   * | 21 _-x-_ |         | 7 _-x-_ |        | 10 _-x-_ |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex
+   */
+  flex?: Property.Flex<TLength> | undefined;
+  /**
+   * The **`flex-flow`** CSS shorthand property specifies the direction of a flex container, as well as its wrapping behavior.
+   *
+   * **Syntax**: `<'flex-direction'> || <'flex-wrap'>`
+   *
+   * |  Chrome  | Firefox | Safari  |  Edge  |   IE   |
+   * | :------: | :-----: | :-----: | :----: | :----: |
+   * |  **29**  | **28**  |  **9**  | **12** | **11** |
+   * | 21 _-x-_ |         | 7 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/flex-flow
+   */
+  "flex-flow"?: Property.FlexFlow | undefined;
+  /**
+   * The **`font`** CSS shorthand property sets all the different properties of an element's font. Alternatively, it sets an element's font to a system font.
+   *
+   * **Syntax**: `[ [ <'font-style'> || <font-variant-css21> || <'font-weight'> || <'font-stretch'> ]? <'font-size'> [ / <'line-height'> ]? <'font-family'> ] | caption | icon | menu | message-box | small-caption | status-bar`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/font
+   */
+  font?: Property.Font | undefined;
+  /**
+   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.
+   *
+   * **Syntax**: `<'row-gap'> <'column-gap'>?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/gap
+   */
+  gap?: Property.Gap<TLength> | undefined;
+  /**
+   * The **`grid`** CSS property is a shorthand property that sets all of the explicit and implicit grid properties in a single declaration.
+   *
+   * **Syntax**: `<'grid-template'> | <'grid-template-rows'> / [ auto-flow && dense? ] <'grid-auto-columns'>? | [ auto-flow && dense? ] <'grid-auto-rows'>? / <'grid-template-columns'>`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid
+   */
+  grid?: Property.Grid | undefined;
+  /**
+   * The **`grid-area`** CSS shorthand property specifies a grid item's size and location within a grid by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the edges of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]{0,3}`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-area
+   */
+  "grid-area"?: Property.GridArea | undefined;
+  /**
+   * The **`grid-column`** CSS shorthand property specifies a grid item's size and location within a grid column by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-column
+   */
+  "grid-column"?: Property.GridColumn | undefined;
+  /**
+   * The **`grid-row`** CSS shorthand property specifies a grid item's size and location within a grid row by contributing a line, a span, or nothing (automatic) to its grid placement, thereby specifying the inline-start and inline-end edge of its grid area.
+   *
+   * **Syntax**: `<grid-line> [ / <grid-line> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-row
+   */
+  "grid-row"?: Property.GridRow | undefined;
+  /**
+   * The **`grid-template`** CSS property is a shorthand property for defining grid columns, grid rows, and grid areas.
+   *
+   * **Syntax**: `none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]?`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  | IE  |
+   * | :----: | :-----: | :------: | :----: | :-: |
+   * | **57** | **52**  | **10.1** | **16** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/grid-template
+   */
+  "grid-template"?: Property.GridTemplate | undefined;
+  /**
+   * The **`inset`** CSS property is a shorthand that corresponds to the `top`, `right`, `bottom`, and/or `left` properties. It has the same multi-value syntax of the `margin` shorthand.
+   *
+   * **Syntax**: `<'top'>{1,4}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset
+   */
+  inset?: Property.Inset<TLength> | undefined;
+  /**
+   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-block
+   */
+  "inset-block"?: Property.InsetBlock<TLength> | undefined;
+  /**
+   * The **`inset-inline`** CSS property defines the logical start and end offsets of an element in the inline direction, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **63**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/inset-inline
+   */
+  "inset-inline"?: Property.InsetInline<TLength> | undefined;
+  /**
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  "line-clamp"?: Property.LineClamp | undefined;
+  /**
+   * The **`list-style`** CSS shorthand property allows you to set all the list style properties at once.
+   *
+   * **Syntax**: `<'list-style-type'> || <'list-style-position'> || <'list-style-image'>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/list-style
+   */
+  "list-style"?: Property.ListStyle | undefined;
+  /**
+   * The **`margin`** CSS shorthand property sets the margin area on all four sides of an element.
+   *
+   * **Syntax**: `[ <length> | <percentage> | auto ]{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin
+   */
+  margin?: Property.Margin<TLength> | undefined;
+  /**
+   * The **`margin-block`** CSS shorthand property defines the logical block start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-block
+   */
+  "margin-block"?: Property.MarginBlock<TLength> | undefined;
+  /**
+   * The **`margin-inline`** CSS shorthand property is a shorthand property that defines both the logical inline start and end margins of an element, which maps to physical margins depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'margin-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/margin-inline
+   */
+  "margin-inline"?: Property.MarginInline<TLength> | undefined;
+  /**
+   * The **`mask`** CSS shorthand property hides an element (partially or fully) by masking or clipping the image at specific points.
+   *
+   * **Syntax**: `<mask-layer>#`
+   *
+   * | Chrome | Firefox |  Safari   | Edge  | IE  |
+   * | :----: | :-----: | :-------: | :---: | :-: |
+   * | **1**  | **53**  | **15.4**  | 12-79 | No  |
+   * |        |         | 3.1 _-x-_ |       |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask
+   */
+  mask?: Property.Mask<TLength> | undefined;
+  /**
+   * The **`mask-border`** CSS shorthand property lets you create a mask along the edge of an element's border.
+   *
+   * **Syntax**: `<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>`
+   *
+   * |              Chrome              | Firefox |             Safari             | Edge | IE  |
+   * | :------------------------------: | :-----: | :----------------------------: | :--: | :-: |
+   * | **1** _(-webkit-mask-box-image)_ |   No    |            **17.2**            | n/a  | No  |
+   * |                                  |         | 3.1 _(-webkit-mask-box-image)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/mask-border
+   */
+  "mask-border"?: Property.MaskBorder | undefined;
+  /**
+   * The **`offset`** CSS shorthand property sets all the properties required for animating an element along a defined path.
+   *
+   * **Syntax**: `[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?`
+   *
+   * |    Chrome     | Firefox | Safari | Edge | IE  |
+   * | :-----------: | :-----: | :----: | :--: | :-: |
+   * |    **55**     | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset
+   */
+  motion?: Property.Offset<TLength> | undefined;
+  /**
+   * The **`offset`** CSS shorthand property sets all the properties required for animating an element along a defined path.
+   *
+   * **Syntax**: `[ <'offset-position'>? [ <'offset-path'> [ <'offset-distance'> || <'offset-rotate'> ]? ]? ]! [ / <'offset-anchor'> ]?`
+   *
+   * |    Chrome     | Firefox | Safari | Edge | IE  |
+   * | :-----------: | :-----: | :----: | :--: | :-: |
+   * |    **55**     | **72**  | **16** | n/a  | No  |
+   * | 46 _(motion)_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/offset
+   */
+  offset?: Property.Offset<TLength> | undefined;
+  /**
+   * The **`outline`** CSS shorthand property sets most of the outline properties in a single declaration.
+   *
+   * **Syntax**: `[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]`
+   *
+   * | Chrome | Firefox |  Safari  |  Edge  |  IE   |
+   * | :----: | :-----: | :------: | :----: | :---: |
+   * | **94** | **88**  | **16.4** | **94** | **8** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/outline
+   */
+  outline?: Property.Outline<TLength> | undefined;
+  /**
+   * The **`overflow`** CSS shorthand property sets the desired behavior for an element's overflow — i.e. when an element's content is too big to fit in its block formatting context — in both directions.
+   *
+   * **Syntax**: `[ visible | hidden | clip | scroll | auto ]{1,2}`
+   *
+   * **Initial value**: `visible`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overflow
+   */
+  overflow?: Property.Overflow | undefined;
+  /**
+   * The **`overscroll-behavior`** CSS property sets what a browser does when reaching the boundary of a scrolling area. It's a shorthand for `overscroll-behavior-x` and `overscroll-behavior-y`.
+   *
+   * **Syntax**: `[ contain | none | auto ]{1,2}`
+   *
+   * **Initial value**: `auto`
+   *
+   * | Chrome | Firefox | Safari |  Edge  | IE  |
+   * | :----: | :-----: | :----: | :----: | :-: |
+   * | **63** | **59**  | **16** | **18** | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/overscroll-behavior
+   */
+  "overscroll-behavior"?: Property.OverscrollBehavior | undefined;
+  /**
+   * The **`padding`** CSS shorthand property sets the padding area on all four sides of an element at once.
+   *
+   * **Syntax**: `[ <length> | <percentage> ]{1,4}`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **4** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding
+   */
+  padding?: Property.Padding<TLength> | undefined;
+  /**
+   * The **`padding-block`** CSS shorthand property defines the logical block start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-block
+   */
+  "padding-block"?: Property.PaddingBlock<TLength> | undefined;
+  /**
+   * The **`padding-inline`** CSS shorthand property defines the logical inline start and end padding of an element, which maps to physical padding properties depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>{1,2}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **87** | **66**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/padding-inline
+   */
+  "padding-inline"?: Property.PaddingInline<TLength> | undefined;
+  /**
+   * The **`place-content`** CSS shorthand property allows you to align content along both the block and inline directions at once (i.e. the `align-content` and `justify-content` properties) in a relevant layout system such as Grid or Flexbox.
+   *
+   * **Syntax**: `<'align-content'> <'justify-content'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **9**  | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-content
+   */
+  "place-content"?: Property.PlaceContent | undefined;
+  /**
+   * The CSS **`place-items`** shorthand property allows you to align items along both the block and inline directions at once (i.e. the `align-items` and `justify-items` properties) in a relevant layout system such as Grid or Flexbox. If the second value is not set, the first value is also used for it.
+   *
+   * **Syntax**: `<'align-items'> <'justify-items'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-items
+   */
+  "place-items"?: Property.PlaceItems | undefined;
+  /**
+   * The **`place-self`** CSS shorthand property allows you to align an individual item in both the block and inline directions at once (i.e. the `align-self` and `justify-self` properties) in a relevant layout system such as Grid or Flexbox. If the second value is not present, the first value is also used for it.
+   *
+   * **Syntax**: `<'align-self'> <'justify-self'>?`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **59** | **45**  | **11** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/place-self
+   */
+  "place-self"?: Property.PlaceSelf | undefined;
+  /**
+   * The **`scroll-margin`** shorthand property sets all of the scroll margins of an element at once, assigning values much like the `margin` property does for margins of an element.
+   *
+   * **Syntax**: `<length>{1,4}`
+   *
+   * | Chrome | Firefox |          Safari           | Edge | IE  |
+   * | :----: | :-----: | :-----------------------: | :--: | :-: |
+   * | **69** | **90**  |         **14.1**          | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin
+   */
+  "scroll-margin"?: Property.ScrollMargin<TLength> | undefined;
+  /**
+   * The `scroll-margin-block` shorthand property sets the scroll margins of an element in the block dimension.
+   *
+   * **Syntax**: `<length>{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-block
+   */
+  "scroll-margin-block"?: Property.ScrollMarginBlock<TLength> | undefined;
+  /**
+   * The `scroll-margin-inline` shorthand property sets the scroll margins of an element in the inline dimension.
+   *
+   * **Syntax**: `<length>{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin-inline
+   */
+  "scroll-margin-inline"?: Property.ScrollMarginInline<TLength> | undefined;
+  /**
+   * The **`scroll-padding`** shorthand property sets scroll padding on all sides of an element at once, much like the `padding` property does for padding on an element.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,4}`
+   *
+   * | Chrome | Firefox |  Safari  | Edge | IE  |
+   * | :----: | :-----: | :------: | :--: | :-: |
+   * | **69** | **68**  | **14.1** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding
+   */
+  "scroll-padding"?: Property.ScrollPadding<TLength> | undefined;
+  /**
+   * The `scroll-padding-block` shorthand property sets the scroll padding of an element in the block dimension.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-block
+   */
+  "scroll-padding-block"?: Property.ScrollPaddingBlock<TLength> | undefined;
+  /**
+   * The `scroll-padding-inline` shorthand property sets the scroll padding of an element in the inline dimension.
+   *
+   * **Syntax**: `[ auto | <length-percentage> ]{1,2}`
+   *
+   * | Chrome | Firefox | Safari | Edge | IE  |
+   * | :----: | :-----: | :----: | :--: | :-: |
+   * | **69** | **68**  | **15** | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-padding-inline
+   */
+  "scroll-padding-inline"?: Property.ScrollPaddingInline<TLength> | undefined;
+  /**
+   * The **`scroll-margin`** shorthand property sets all of the scroll margins of an element at once, assigning values much like the `margin` property does for margins of an element.
+   *
+   * **Syntax**: `<length>{1,4}`
+   *
+   * | Chrome | Firefox |          Safari           | Edge | IE  |
+   * | :----: | :-----: | :-----------------------: | :--: | :-: |
+   * | **69** |  68-90  |         **14.1**          | n/a  | No  |
+   * |        |         | 11 _(scroll-snap-margin)_ |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-margin
+   */
+  "scroll-snap-margin"?: Property.ScrollMargin<TLength> | undefined;
+  /**
+   * The **`scroll-timeline`** CSS shorthand property defines a name that can be used to identify the source element of a scroll timeline, along with the scrollbar axis that should provide the timeline.
+   *
+   * **Syntax**: `[ <'scroll-timeline-name'> <'scroll-timeline-axis'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/scroll-timeline
+   */
+  "scroll-timeline"?: Property.ScrollTimeline | undefined;
+  /**
+   * The **`text-decoration`** shorthand CSS property sets the appearance of decorative lines on text. It is a shorthand for `text-decoration-line`, `text-decoration-color`, `text-decoration-style`, and the newer `text-decoration-thickness` property.
+   *
+   * **Syntax**: `<'text-decoration-line'> || <'text-decoration-style'> || <'text-decoration-color'> || <'text-decoration-thickness'>`
+   *
+   * | Chrome | Firefox | Safari |  Edge  |  IE   |
+   * | :----: | :-----: | :----: | :----: | :---: |
+   * | **1**  |  **1**  | **1**  | **12** | **3** |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-decoration
+   */
+  "text-decoration"?: Property.TextDecoration<TLength> | undefined;
+  /**
+   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.
+   *
+   * **Syntax**: `<'text-emphasis-style'> || <'text-emphasis-color'>`
+   *
+   * |  Chrome  | Firefox | Safari | Edge | IE  |
+   * | :------: | :-----: | :----: | :--: | :-: |
+   * |  **99**  | **46**  | **7**  | n/a  | No  |
+   * | 25 _-x-_ |         |        |      |     |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/text-emphasis
+   */
+  "text-emphasis"?: Property.TextEmphasis | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * | Chrome  | Firefox |  Safari   |  Edge  |   IE   |
+   * | :-----: | :-----: | :-------: | :----: | :----: |
+   * | **26**  | **16**  |   **9**   | **12** | **10** |
+   * | 1 _-x-_ |         | 3.1 _-x-_ |        |        |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/transition
+   */
+  transition?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`view-timeline`** CSS shorthand property is used to define a _named view progress timeline_, which is progressed through based on the change in visibility of an element (known as the _subject_) inside a scrollable element (_scroller_). `view-timeline` is set on the subject.
+   *
+   * **Syntax**: `[ <'view-timeline-name'> <'view-timeline-axis'>? ]#`
+   *
+   * | Chrome  | Firefox | Safari | Edge | IE  |
+   * | :-----: | :-----: | :----: | :--: | :-: |
+   * | **115** |   n/a   |   No   | n/a  | No  |
+   *
+   * @see https://developer.mozilla.org/docs/Web/CSS/view-timeline
+   */
+  "view-timeline"?: Property.ViewTimeline | undefined;
+}
+
+export interface StandardPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardLonghandPropertiesHyphen<TLength, TTime>,
+    StandardShorthandPropertiesHyphen<TLength, TTime> {}
+
+export interface VendorLonghandPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-moz-animation-delay"?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   */
+  "-moz-animation-direction"?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-moz-animation-duration"?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-animation-fill-mode"?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   */
+  "-moz-animation-iteration-count"?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-animation-name"?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   */
+  "-moz-animation-play-state"?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  "-moz-animation-timing-function"?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | button | button-arrow-down | button-arrow-next | button-arrow-previous | button-arrow-up | button-bevel | button-focus | caret | checkbox | checkbox-container | checkbox-label | checkmenuitem | dualbutton | groupbox | listbox | listitem | menuarrow | menubar | menucheckbox | menuimage | menuitem | menuitemtext | menulist | menulist-button | menulist-text | menulist-textfield | menupopup | menuradio | menuseparator | meterbar | meterchunk | progressbar | progressbar-vertical | progresschunk | progresschunk-vertical | radio | radio-container | radio-label | radiomenuitem | range | range-thumb | resizer | resizerpanel | scale-horizontal | scalethumbend | scalethumb-horizontal | scalethumbstart | scalethumbtick | scalethumb-vertical | scale-vertical | scrollbarbutton-down | scrollbarbutton-left | scrollbarbutton-right | scrollbarbutton-up | scrollbarthumb-horizontal | scrollbarthumb-vertical | scrollbartrack-horizontal | scrollbartrack-vertical | searchfield | separator | sheet | spinner | spinner-downbutton | spinner-textfield | spinner-upbutton | splitter | statusbar | statusbarpanel | tab | tabpanel | tabpanels | tab-scroll-arrow-back | tab-scroll-arrow-forward | textfield | textfield-multiline | toolbar | toolbarbutton | toolbarbutton-dropdown | toolbargripper | toolbox | tooltip | treeheader | treeheadercell | treeheadersortarrow | treeitem | treeline | treetwisty | treetwistyopen | treeview | -moz-mac-unified-toolbar | -moz-win-borderless-glass | -moz-win-browsertabbar-toolbox | -moz-win-communicationstext | -moz-win-communications-toolbox | -moz-win-exclude-glass | -moz-win-glass | -moz-win-mediatext | -moz-win-media-toolbox | -moz-window-button-box | -moz-window-button-box-maximized | -moz-window-button-close | -moz-window-button-maximize | -moz-window-button-minimize | -moz-window-button-restore | -moz-window-frame-bottom | -moz-window-frame-left | -moz-window-frame-right | -moz-window-titlebar | -moz-window-titlebar-maximized`
+   *
+   * **Initial value**: `none` (but this value is overridden in the user agent CSS)
+   */
+  "-moz-appearance"?: Property.MozAppearance | undefined;
+  /**
+   * The **`-moz-binding`** CSS property is used by Mozilla-based applications to attach an XBL binding to a DOM element.
+   *
+   * **Syntax**: `<url> | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-binding"?: Property.MozBinding | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-bottom-colors`** CSS property sets a list of colors for the bottom border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-bottom-colors"?: Property.MozBorderBottomColors | undefined;
+  /**
+   * The **`border-inline-end-color`** CSS property defines the color of the logical inline-end border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-moz-border-end-color"?: Property.BorderInlineEndColor | undefined;
+  /**
+   * The **`border-inline-end-style`** CSS property defines the style of the logical inline end border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-end-style"?: Property.BorderInlineEndStyle | undefined;
+  /**
+   * The **`border-inline-end-width`** CSS property defines the width of the logical inline-end border of an element, which maps to a physical border width depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-width`, `border-right-width`, `border-bottom-width`, or `border-left-width` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  "-moz-border-end-width"?: Property.BorderInlineEndWidth<TLength> | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-left-colors`** CSS property sets a list of colors for the left border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-left-colors"?: Property.MozBorderLeftColors | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-right-colors`** CSS property sets a list of colors for the right border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-right-colors"?: Property.MozBorderRightColors | undefined;
+  /**
+   * The **`border-inline-start-color`** CSS property defines the color of the logical inline start border of an element, which maps to a physical border color depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-color`, `border-right-color`, `border-bottom-color`, or `border-left-color` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-color'>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-moz-border-start-color"?: Property.BorderInlineStartColor | undefined;
+  /**
+   * The **`border-inline-start-style`** CSS property defines the style of the logical inline start border of an element, which maps to a physical border style depending on the element's writing mode, directionality, and text orientation. It corresponds to the `border-top-style`, `border-right-style`, `border-bottom-style`, or `border-left-style` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'border-top-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-start-style"?: Property.BorderInlineStartStyle | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-border-top-colors`** CSS property sets a list of colors for the top border.
+   *
+   * **Syntax**: `<color>+ | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-border-top-colors"?: Property.MozBorderTopColors | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   */
+  "-moz-box-sizing"?: Property.BoxSizing | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  "-moz-column-count"?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   */
+  "-moz-column-fill"?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-moz-column-rule-color"?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-column-rule-style"?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  "-moz-column-rule-width"?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  "-moz-column-width"?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`-moz-context-properties`** property can be used within privileged contexts in Firefox to share the values of specified properties of the element with a child SVG image.
+   *
+   * **Syntax**: `none | [ fill | fill-opacity | stroke | stroke-opacity ]#`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-context-properties"?: Property.MozContextProperties | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   */
+  "-moz-font-feature-settings"?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-language-override`** CSS property controls the use of language-specific glyphs in a typeface.
+   *
+   * **Syntax**: `normal | <string>`
+   *
+   * **Initial value**: `normal`
+   */
+  "-moz-font-language-override"?: Property.FontLanguageOverride | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  "-moz-hyphens"?: Property.Hyphens | undefined;
+  /**
+   * For certain XUL elements and pseudo-elements that use an image from the `list-style-image` property, this property specifies a region of the image that is used in place of the whole image. This allows elements to use different pieces of the same image to improve performance.
+   *
+   * **Syntax**: `<shape> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  "-moz-image-region"?: Property.MozImageRegion | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-margin-end"?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-margin-start"?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * The **`-moz-orient`** CSS property specifies the orientation of the element to which it's applied.
+   *
+   * **Syntax**: `inline | block | horizontal | vertical`
+   *
+   * **Initial value**: `inline`
+   */
+  "-moz-orient"?: Property.MozOrient | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-moz-osx-font-smoothing"?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-bottomleft`** CSS property can be used to round the bottom-left corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-outline-radius-bottomleft"?: Property.MozOutlineRadiusBottomleft<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-bottomright`** CSS property can be used to round the bottom-right corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-outline-radius-bottomright"?: Property.MozOutlineRadiusBottomright<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-topleft`** CSS property can be used to round the top-left corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-outline-radius-topleft"?: Property.MozOutlineRadiusTopleft<TLength> | undefined;
+  /**
+   * In Mozilla applications, the **`-moz-outline-radius-topright`** CSS property can be used to round the top-right corner of an element's `outline`.
+   *
+   * **Syntax**: `<outline-radius>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-outline-radius-topright"?: Property.MozOutlineRadiusTopright<TLength> | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-padding-end"?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-moz-padding-start"?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * **`-moz-stack-sizing`** is an extended CSS property. Normally, a `<xul:stack>` will change its size so that all of its child elements are completely visible. For example, moving a child of the stack far to the right will widen the stack so the child remains visible.
+   *
+   * **Syntax**: `ignore | stretch-to-fit`
+   *
+   * **Initial value**: `stretch-to-fit`
+   */
+  "-moz-stack-sizing"?: Property.MozStackSizing | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   */
+  "-moz-tab-size"?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`-moz-text-blink`** non-standard Mozilla CSS extension specifies the blink mode.
+   *
+   * **Syntax**: `none | blink`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-text-blink"?: Property.MozTextBlink | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   */
+  "-moz-text-size-adjust"?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`-moz-user-focus`** CSS property is used to indicate whether an element can have the focus.
+   *
+   * **Syntax**: `ignore | normal | select-after | select-before | select-menu | select-same | select-all | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-moz-user-focus"?: Property.MozUserFocus | undefined;
+  /**
+   * The **`user-modify`** property has no effect in Firefox. It was originally planned to determine whether or not the content of an element can be edited by a user.
+   *
+   * **Syntax**: `read-only | read-write | write-only`
+   *
+   * **Initial value**: `read-only`
+   */
+  "-moz-user-modify"?: Property.MozUserModify | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   */
+  "-moz-user-select"?: Property.UserSelect | undefined;
+  /**
+   * The **`-moz-window-dragging`** CSS property specifies whether a window is draggable or not. It only works in Chrome code, and only on Mac OS X.
+   *
+   * **Syntax**: `drag | no-drag`
+   *
+   * **Initial value**: `drag`
+   */
+  "-moz-window-dragging"?: Property.MozWindowDragging | undefined;
+  /**
+   * The **`-moz-window-shadow`** CSS property specifies whether a window will have a shadow. It only works on Mac OS X.
+   *
+   * **Syntax**: `default | menu | tooltip | sheet | none`
+   *
+   * **Initial value**: `default`
+   */
+  "-moz-window-shadow"?: Property.MozWindowShadow | undefined;
+  /**
+   * The **`-ms-accelerator`** CSS property is a Microsoft extension that sets or retrieves a string indicating whether the object represents a keyboard shortcut.
+   *
+   * **Syntax**: `false | true`
+   *
+   * **Initial value**: `false`
+   */
+  "-ms-accelerator"?: Property.MsAccelerator | undefined;
+  /**
+   * The **`-ms-block-progression`** CSS property is a Microsoft extension that specifies the block progression and layout orientation.
+   *
+   * **Syntax**: `tb | rl | bt | lr`
+   *
+   * **Initial value**: `tb`
+   */
+  "-ms-block-progression"?: Property.MsBlockProgression | undefined;
+  /**
+   * The **`-ms-content-zoom-chaining`** CSS property is a Microsoft extension specifying the zoom behavior that occurs when a user hits the zoom limit during page manipulation.
+   *
+   * **Syntax**: `none | chained`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-content-zoom-chaining"?: Property.MsContentZoomChaining | undefined;
+  /**
+   * The **`-ms-content-zoom-limit-max`** CSS property is a Microsoft extension that specifies the selected elements' maximum zoom factor.
+   *
+   * **Syntax**: `<percentage>`
+   *
+   * **Initial value**: `400%`
+   */
+  "-ms-content-zoom-limit-max"?: Property.MsContentZoomLimitMax | undefined;
+  /**
+   * The **`-ms-content-zoom-limit-min`** CSS property is a Microsoft extension that specifies the minimum zoom factor.
+   *
+   * **Syntax**: `<percentage>`
+   *
+   * **Initial value**: `100%`
+   */
+  "-ms-content-zoom-limit-min"?: Property.MsContentZoomLimitMin | undefined;
+  /**
+   * The **`-ms-content-zoom-snap-points`** CSS property is a Microsoft extension that specifies where zoom snap-points are located.
+   *
+   * **Syntax**: `snapInterval( <percentage>, <percentage> ) | snapList( <percentage># )`
+   *
+   * **Initial value**: `snapInterval(0%, 100%)`
+   */
+  "-ms-content-zoom-snap-points"?: Property.MsContentZoomSnapPoints | undefined;
+  /**
+   * The **`-ms-content-zoom-snap-type`** CSS property is a Microsoft extension that specifies how zooming is affected by defined snap-points.
+   *
+   * **Syntax**: `none | proximity | mandatory`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-content-zoom-snap-type"?: Property.MsContentZoomSnapType | undefined;
+  /**
+   * The **`-ms-content-zooming`** CSS property is a Microsoft extension that specifies whether zooming is enabled.
+   *
+   * **Syntax**: `none | zoom`
+   *
+   * **Initial value**: zoom for the top level element, none for all other elements
+   */
+  "-ms-content-zooming"?: Property.MsContentZooming | undefined;
+  /**
+   * The `-ms-filter` CSS property is a Microsoft extension that sets or retrieves the filter or collection of filters applied to an object.
+   *
+   * **Syntax**: `<string>`
+   *
+   * **Initial value**: "" (the empty string)
+   */
+  "-ms-filter"?: Property.MsFilter | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   */
+  "-ms-flex-direction"?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-flex-positive"?: Property.FlexGrow | undefined;
+  /**
+   * The **`-ms-flow-from`** CSS property is a Microsoft extension that gets or sets a value identifying a region container in the document that accepts the content flow from the data source.
+   *
+   * **Syntax**: `[ none | <custom-ident> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-flow-from"?: Property.MsFlowFrom | undefined;
+  /**
+   * The **`-ms-flow-into`** CSS property is a Microsoft extension that gets or sets a value identifying an iframe container in the document that serves as the region's data source.
+   *
+   * **Syntax**: `[ none | <custom-ident> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-flow-into"?: Property.MsFlowInto | undefined;
+  /**
+   * The **`grid-template-columns`** CSS property defines the line names and track sizing functions of the grid columns.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-grid-columns"?: Property.MsGridColumns<TLength> | undefined;
+  /**
+   * The **`grid-template-rows`** CSS property defines the line names and track sizing functions of the grid rows.
+   *
+   * **Syntax**: `none | <track-list> | <auto-track-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-grid-rows"?: Property.MsGridRows<TLength> | undefined;
+  /**
+   * The **`-ms-high-contrast-adjust`** CSS property is a Microsoft extension that gets or sets a value indicating whether to override any CSS properties that would have been set in high contrast mode.
+   *
+   * **Syntax**: `auto | none`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-high-contrast-adjust"?: Property.MsHighContrastAdjust | undefined;
+  /**
+   * The **`-ms-hyphenate-limit-chars`** CSS property is a Microsoft extension that specifies one to three values indicating the minimum number of characters in a hyphenated word. If the word does not meet the required minimum number of characters in the word, before the hyphen, or after the hyphen, then the word is not hyphenated.
+   *
+   * **Syntax**: `auto | <integer>{1,3}`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-hyphenate-limit-chars"?: Property.MsHyphenateLimitChars | undefined;
+  /**
+   * The **`-ms-hyphenate-limit-lines`** CSS property is a Microsoft extension specifying the maximum number of consecutive lines in an element that may be ended with a hyphenated word.
+   *
+   * **Syntax**: `no-limit | <integer>`
+   *
+   * **Initial value**: `no-limit`
+   */
+  "-ms-hyphenate-limit-lines"?: Property.MsHyphenateLimitLines | undefined;
+  /**
+   * The `**-ms-hyphenate-limit-zone**` CSS property is a Microsoft extension specifying the width of the hyphenation zone.
+   *
+   * **Syntax**: `<percentage> | <length>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-hyphenate-limit-zone"?: Property.MsHyphenateLimitZone<TLength> | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  "-ms-hyphens"?: Property.Hyphens | undefined;
+  /**
+   * The **`-ms-ime-align`** CSS property is a Microsoft extension aligning the Input Method Editor (IME) candidate window box relative to the element on which the IME composition is active. The extension is implemented in Microsoft Edge and Internet Explorer 11.
+   *
+   * **Syntax**: `auto | after`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-ime-align"?: Property.MsImeAlign | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-line-break"?: Property.LineBreak | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-order"?: Property.Order | undefined;
+  /**
+   * The **`-ms-overflow-style`** CSS property is a Microsoft extension controlling the behavior of scrollbars when the content of an element overflows.
+   *
+   * **Syntax**: `auto | none | scrollbar | -ms-autohiding-scrollbar`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-overflow-style"?: Property.MsOverflowStyle | undefined;
+  /**
+   * The **`overflow-x`** CSS property sets what shows when content overflows a block-level element's left and right edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   */
+  "-ms-overflow-x"?: Property.OverflowX | undefined;
+  /**
+   * The **`overflow-y`** CSS property sets what shows when content overflows a block-level element's top and bottom edges. This may be nothing, a scroll bar, or the overflow content.
+   *
+   * **Syntax**: `visible | hidden | clip | scroll | auto`
+   *
+   * **Initial value**: `visible`
+   */
+  "-ms-overflow-y"?: Property.OverflowY | undefined;
+  /**
+   * The `**-ms-scroll-chaining**` CSS property is a Microsoft extension that specifies the scrolling behavior that occurs when a user hits the scroll limit during a manipulation.
+   *
+   * **Syntax**: `chained | none`
+   *
+   * **Initial value**: `chained`
+   */
+  "-ms-scroll-chaining"?: Property.MsScrollChaining | undefined;
+  /**
+   * The `**-ms-scroll-limit-x-max**` CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollLeft` property.
+   *
+   * **Syntax**: `auto | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-scroll-limit-x-max"?: Property.MsScrollLimitXMax<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-x-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollLeft` property.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-scroll-limit-x-min"?: Property.MsScrollLimitXMin<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-y-max`** CSS property is a Microsoft extension that specifies the maximum value for the `Element.scrollTop` property.
+   *
+   * **Syntax**: `auto | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-scroll-limit-y-max"?: Property.MsScrollLimitYMax<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-limit-y-min`** CSS property is a Microsoft extension that specifies the minimum value for the `Element.scrollTop` property.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-scroll-limit-y-min"?: Property.MsScrollLimitYMin<TLength> | undefined;
+  /**
+   * The **`-ms-scroll-rails`** CSS property is a Microsoft extension that specifies whether scrolling locks to the primary axis of motion.
+   *
+   * **Syntax**: `none | railed`
+   *
+   * **Initial value**: `railed`
+   */
+  "-ms-scroll-rails"?: Property.MsScrollRails | undefined;
+  /**
+   * The **`-ms-scroll-snap-points-x`** CSS property is a Microsoft extension that specifies where snap-points will be located along the x-axis.
+   *
+   * **Syntax**: `snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )`
+   *
+   * **Initial value**: `snapInterval(0px, 100%)`
+   */
+  "-ms-scroll-snap-points-x"?: Property.MsScrollSnapPointsX | undefined;
+  /**
+   * The **`-ms-scroll-snap-points-y`** CSS property is a Microsoft extension that specifies where snap-points will be located along the y-axis.
+   *
+   * **Syntax**: `snapInterval( <length-percentage>, <length-percentage> ) | snapList( <length-percentage># )`
+   *
+   * **Initial value**: `snapInterval(0px, 100%)`
+   */
+  "-ms-scroll-snap-points-y"?: Property.MsScrollSnapPointsY | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | proximity | mandatory`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-scroll-snap-type"?: Property.MsScrollSnapType | undefined;
+  /**
+   * The **`-ms-scroll-translation`** CSS property is a Microsoft extension that specifies whether vertical-to-horizontal scroll wheel translation occurs on the specified element.
+   *
+   * **Syntax**: `none | vertical-to-horizontal`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-scroll-translation"?: Property.MsScrollTranslation | undefined;
+  /**
+   * The **`-ms-scrollbar-3dlight-color`** CSS property is a Microsoft extension specifying the color of the top and left edges of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: depends on user agent
+   */
+  "-ms-scrollbar-3dlight-color"?: Property.MsScrollbar3dlightColor | undefined;
+  /**
+   * The **`-ms-scrollbar-arrow-color`** CSS property is a Microsoft extension that specifies the color of the arrow elements of a scroll arrow.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ButtonText`
+   */
+  "-ms-scrollbar-arrow-color"?: Property.MsScrollbarArrowColor | undefined;
+  /**
+   * The `**-ms-scrollbar-base-color**` CSS property is a Microsoft extension that specifies the base color of the main elements of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: depends on user agent
+   */
+  "-ms-scrollbar-base-color"?: Property.MsScrollbarBaseColor | undefined;
+  /**
+   * The **`-ms-scrollbar-darkshadow-color`** CSS property is a Microsoft extension that specifies the color of a scroll bar's gutter.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDDarkShadow`
+   */
+  "-ms-scrollbar-darkshadow-color"?: Property.MsScrollbarDarkshadowColor | undefined;
+  /**
+   * The `**-ms-scrollbar-face-color**` CSS property is a Microsoft extension that specifies the color of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDFace`
+   */
+  "-ms-scrollbar-face-color"?: Property.MsScrollbarFaceColor | undefined;
+  /**
+   * The `**-ms-scrollbar-highlight-color**` CSS property is a Microsoft extension that specifies the color of the slider tray, the top and left edges of the scroll box, and the scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDHighlight`
+   */
+  "-ms-scrollbar-highlight-color"?: Property.MsScrollbarHighlightColor | undefined;
+  /**
+   * The **`-ms-scrollbar-shadow-color`** CSS property is a Microsoft extension that specifies the color of the bottom and right edges of the scroll box and scroll arrows of a scroll bar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `ThreeDDarkShadow`
+   */
+  "-ms-scrollbar-shadow-color"?: Property.MsScrollbarShadowColor | undefined;
+  /**
+   * The **`-ms-scrollbar-track-color`** CSS property is a Microsoft extension that specifies the color of the track element of a scrollbar.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `Scrollbar`
+   */
+  "-ms-scrollbar-track-color"?: Property.MsScrollbarTrackColor | undefined;
+  /**
+   * The **`-ms-text-autospace`** CSS property is a Microsoft extension that specifies the autospacing and narrow space width adjustment of text.
+   *
+   * **Syntax**: `none | ideograph-alpha | ideograph-numeric | ideograph-parenthesis | ideograph-space`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-text-autospace"?: Property.MsTextAutospace | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-text-combine-horizontal"?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   */
+  "-ms-text-overflow"?: Property.TextOverflow | undefined;
+  /**
+   * The **`touch-action`** CSS property sets how an element's region can be manipulated by a touchscreen user (for example, by zooming features built into the browser).
+   *
+   * **Syntax**: `auto | none | [ [ pan-x | pan-left | pan-right ] || [ pan-y | pan-up | pan-down ] || pinch-zoom ] | manipulation`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-touch-action"?: Property.TouchAction | undefined;
+  /**
+   * The **`-ms-touch-select`** CSS property is a Microsoft extension that toggles the gripper visual elements that enable touch text selection.
+   *
+   * **Syntax**: `grippers | none`
+   *
+   * **Initial value**: `grippers`
+   */
+  "-ms-touch-select"?: Property.MsTouchSelect | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-ms-transform"?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   */
+  "-ms-transform-origin"?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-ms-transition-delay"?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-ms-transition-duration"?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   */
+  "-ms-transition-property"?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  "-ms-transition-timing-function"?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `none | element | text`
+   *
+   * **Initial value**: `text`
+   */
+  "-ms-user-select"?: Property.MsUserSelect | undefined;
+  /**
+   * The **`word-break`** CSS property sets whether line breaks appear wherever the text would otherwise overflow its content box.
+   *
+   * **Syntax**: `normal | break-all | keep-all | break-word`
+   *
+   * **Initial value**: `normal`
+   */
+  "-ms-word-break"?: Property.WordBreak | undefined;
+  /**
+   * The **`-ms-wrap-flow`** CSS property is a Microsoft extension that specifies how exclusions impact inline content within block-level elements.
+   *
+   * **Syntax**: `auto | both | start | end | maximum | clear`
+   *
+   * **Initial value**: `auto`
+   */
+  "-ms-wrap-flow"?: Property.MsWrapFlow | undefined;
+  /**
+   * The **`-ms-wrap-margin`** CSS property is a Microsoft extension that specifies a margin that offsets the inner wrap shape from other shapes.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  "-ms-wrap-margin"?: Property.MsWrapMargin<TLength> | undefined;
+  /**
+   * The **`-ms-wrap-through`** CSS property is a Microsoft extension that specifies how content should wrap around an exclusion element.
+   *
+   * **Syntax**: `wrap | none`
+   *
+   * **Initial value**: `wrap`
+   */
+  "-ms-wrap-through"?: Property.MsWrapThrough | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   */
+  "-ms-writing-mode"?: Property.WritingMode | undefined;
+  /**
+   * The CSS **`align-content`** property sets the distribution of space between and around content items along a flexbox's cross-axis or a grid's block axis.
+   *
+   * **Syntax**: `normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-align-content"?: Property.AlignContent | undefined;
+  /**
+   * The CSS **`align-items`** property sets the `align-self` value on all direct children as a group. In Flexbox, it controls the alignment of items on the Cross Axis. In Grid Layout, it controls the alignment of items on the Block Axis within their grid area.
+   *
+   * **Syntax**: `normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-align-items"?: Property.AlignItems | undefined;
+  /**
+   * The **`align-self`** CSS property overrides a grid or flex item's `align-items` value. In Grid, it aligns the item inside the grid area. In Flexbox, it aligns the item on the cross axis.
+   *
+   * **Syntax**: `auto | normal | stretch | <baseline-position> | <overflow-position>? <self-position>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-align-self"?: Property.AlignSelf | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-webkit-animation-delay"?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-animation-direction"?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-webkit-animation-duration"?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-animation-fill-mode"?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   */
+  "-webkit-animation-iteration-count"?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-animation-name"?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   */
+  "-webkit-animation-play-state"?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  "-webkit-animation-timing-function"?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`appearance`** CSS property is used to control native appearance of UI controls, that are based on operating system's theme.
+   *
+   * **Syntax**: `none | button | button-bevel | caret | checkbox | default-button | inner-spin-button | listbox | listitem | media-controls-background | media-controls-fullscreen-background | media-current-time-display | media-enter-fullscreen-button | media-exit-fullscreen-button | media-fullscreen-button | media-mute-button | media-overlay-play-button | media-play-button | media-seek-back-button | media-seek-forward-button | media-slider | media-sliderthumb | media-time-remaining-display | media-toggle-closed-captions-button | media-volume-slider | media-volume-slider-container | media-volume-sliderthumb | menulist | menulist-button | menulist-text | menulist-textfield | meter | progress-bar | progress-bar-value | push-button | radio | searchfield | searchfield-cancel-button | searchfield-decoration | searchfield-results-button | searchfield-results-decoration | slider-horizontal | slider-vertical | sliderthumb-horizontal | sliderthumb-vertical | square-button | textarea | textfield | -apple-pay-button`
+   *
+   * **Initial value**: `none` (but this value is overridden in the user agent CSS)
+   */
+  "-webkit-appearance"?: Property.WebkitAppearance | undefined;
+  /**
+   * The **`backdrop-filter`** CSS property lets you apply graphical effects such as blurring or color shifting to the area behind an element. Because it applies to everything _behind_ the element, to see the effect you must make the element or its background at least partially transparent.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-backdrop-filter"?: Property.BackdropFilter | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   */
+  "-webkit-backface-visibility"?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   */
+  "-webkit-background-clip"?: Property.BackgroundClip | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   */
+  "-webkit-background-origin"?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   */
+  "-webkit-background-size"?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-border-before-color"?: Property.WebkitBorderBeforeColor | undefined;
+  /**
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-border-before-style"?: Property.WebkitBorderBeforeStyle | undefined;
+  /**
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  "-webkit-border-before-width"?: Property.WebkitBorderBeforeWidth<TLength> | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-border-bottom-left-radius"?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-border-bottom-right-radius"?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-image-slice`** CSS property divides the image specified by `border-image-source` into regions. These regions form the components of an element's border image.
+   *
+   * **Syntax**: `<number-percentage>{1,4} && fill?`
+   *
+   * **Initial value**: `100%`
+   */
+  "-webkit-border-image-slice"?: Property.BorderImageSlice | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-border-top-left-radius"?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-border-top-right-radius"?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   */
+  "-webkit-box-decoration-break"?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`-webkit-box-reflect`** CSS property lets you reflect the content of an element in one specific direction.
+   *
+   * **Syntax**: `[ above | below | right | left ]? <length>? <image>?`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-box-reflect"?: Property.WebkitBoxReflect<TLength> | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-box-shadow"?: Property.BoxShadow | undefined;
+  /**
+   * The **`box-sizing`** CSS property sets how the total width and height of an element is calculated.
+   *
+   * **Syntax**: `content-box | border-box`
+   *
+   * **Initial value**: `content-box`
+   */
+  "-webkit-box-sizing"?: Property.BoxSizing | undefined;
+  /**
+   * The **`clip-path`** CSS property creates a clipping region that sets what part of an element should be shown. Parts that are inside the region are shown, while those outside are hidden.
+   *
+   * **Syntax**: `<clip-source> | [ <basic-shape> || <geometry-box> ] | none`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-clip-path"?: Property.ClipPath | undefined;
+  /**
+   * The **`column-count`** CSS property breaks an element's content into the specified number of columns.
+   *
+   * **Syntax**: `<integer> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-column-count"?: Property.ColumnCount | undefined;
+  /**
+   * The **`column-fill`** CSS property controls how an element's contents are balanced when broken into columns.
+   *
+   * **Syntax**: `auto | balance | balance-all`
+   *
+   * **Initial value**: `balance`
+   */
+  "-webkit-column-fill"?: Property.ColumnFill | undefined;
+  /**
+   * The **`column-rule-color`** CSS property sets the color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-column-rule-color"?: Property.ColumnRuleColor | undefined;
+  /**
+   * The **`column-rule-style`** CSS property sets the style of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-style'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-column-rule-style"?: Property.ColumnRuleStyle | undefined;
+  /**
+   * The **`column-rule-width`** CSS property sets the width of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'border-width'>`
+   *
+   * **Initial value**: `medium`
+   */
+  "-webkit-column-rule-width"?: Property.ColumnRuleWidth<TLength> | undefined;
+  /**
+   * The **`column-span`** CSS property makes it possible for an element to span across all columns when its value is set to `all`.
+   *
+   * **Syntax**: `none | all`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-column-span"?: Property.ColumnSpan | undefined;
+  /**
+   * The **`column-width`** CSS property sets the ideal column width in a multi-column layout. The container will have as many columns as can fit without any of them having a width less than the `column-width` value. If the width of the container is narrower than the specified value, the single column's width will be smaller than the declared column width.
+   *
+   * **Syntax**: `<length> | auto`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-column-width"?: Property.ColumnWidth<TLength> | undefined;
+  /**
+   * The **`filter`** CSS property applies graphical effects like blur or color shift to an element. Filters are commonly used to adjust the rendering of images, backgrounds, and borders.
+   *
+   * **Syntax**: `none | <filter-function-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-filter"?: Property.Filter | undefined;
+  /**
+   * The **`flex-basis`** CSS property sets the initial main size of a flex item. It sets the size of the content box unless otherwise set with `box-sizing`.
+   *
+   * **Syntax**: `content | <'width'>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-flex-basis"?: Property.FlexBasis<TLength> | undefined;
+  /**
+   * The **`flex-direction`** CSS property sets how flex items are placed in the flex container defining the main axis and the direction (normal or reversed).
+   *
+   * **Syntax**: `row | row-reverse | column | column-reverse`
+   *
+   * **Initial value**: `row`
+   */
+  "-webkit-flex-direction"?: Property.FlexDirection | undefined;
+  /**
+   * The **`flex-grow`** CSS property sets the flex grow factor of a flex item's main size.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-flex-grow"?: Property.FlexGrow | undefined;
+  /**
+   * The **`flex-shrink`** CSS property sets the flex shrink factor of a flex item. If the size of all flex items is larger than the flex container, items shrink to fit according to `flex-shrink`.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `1`
+   */
+  "-webkit-flex-shrink"?: Property.FlexShrink | undefined;
+  /**
+   * The **`flex-wrap`** CSS property sets whether flex items are forced onto one line or can wrap onto multiple lines. If wrapping is allowed, it sets the direction that lines are stacked.
+   *
+   * **Syntax**: `nowrap | wrap | wrap-reverse`
+   *
+   * **Initial value**: `nowrap`
+   */
+  "-webkit-flex-wrap"?: Property.FlexWrap | undefined;
+  /**
+   * The **`font-feature-settings`** CSS property controls advanced typographic features in OpenType fonts.
+   *
+   * **Syntax**: `normal | <feature-tag-value>#`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-font-feature-settings"?: Property.FontFeatureSettings | undefined;
+  /**
+   * The **`font-kerning`** CSS property sets the use of the kerning information stored in a font.
+   *
+   * **Syntax**: `auto | normal | none`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-font-kerning"?: Property.FontKerning | undefined;
+  /**
+   * The **`font-smooth`** CSS property controls the application of anti-aliasing when fonts are rendered.
+   *
+   * **Syntax**: `auto | never | always | <absolute-size> | <length>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-font-smoothing"?: Property.FontSmooth<TLength> | undefined;
+  /**
+   * The **`font-variant-ligatures`** CSS property controls which ligatures and contextual forms are used in textual content of the elements it applies to. This leads to more harmonized forms in the resulting text.
+   *
+   * **Syntax**: `normal | none | [ <common-lig-values> || <discretionary-lig-values> || <historical-lig-values> || <contextual-alt-values> ]`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-font-variant-ligatures"?: Property.FontVariantLigatures | undefined;
+  /**
+   * The **`hyphenate-character`** CSS property sets the character (or string) used at the end of a line before a hyphenation break.
+   *
+   * **Syntax**: `auto | <string>`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-hyphenate-character"?: Property.HyphenateCharacter | undefined;
+  /**
+   * The **`hyphens`** CSS property specifies how words should be hyphenated when text wraps across multiple lines. It can prevent hyphenation entirely, hyphenate at manually-specified points within the text, or let the browser automatically insert hyphens where appropriate.
+   *
+   * **Syntax**: `none | manual | auto`
+   *
+   * **Initial value**: `manual`
+   */
+  "-webkit-hyphens"?: Property.Hyphens | undefined;
+  /**
+   * The `initial-letter` CSS property sets styling for dropped, raised, and sunken initial letters.
+   *
+   * **Syntax**: `normal | [ <number> <integer>? ]`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-initial-letter"?: Property.InitialLetter | undefined;
+  /**
+   * The CSS **`justify-content`** property defines how the browser distributes space between and around content items along the main-axis of a flex container, and the inline axis of a grid container.
+   *
+   * **Syntax**: `normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]`
+   *
+   * **Initial value**: `normal`
+   */
+  "-webkit-justify-content"?: Property.JustifyContent | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-line-break"?: Property.LineBreak | undefined;
+  /**
+   * The **`-webkit-line-clamp`** CSS property allows limiting of the contents of a block to the specified number of lines.
+   *
+   * **Syntax**: `none | <integer>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-line-clamp"?: Property.WebkitLineClamp | undefined;
+  /**
+   * The **`margin-inline-end`** CSS property defines the logical inline end margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. In other words, it corresponds to the `margin-top`, `margin-right`, `margin-bottom` or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-margin-end"?: Property.MarginInlineEnd<TLength> | undefined;
+  /**
+   * The **`margin-inline-start`** CSS property defines the logical inline start margin of an element, which maps to a physical margin depending on the element's writing mode, directionality, and text orientation. It corresponds to the `margin-top`, `margin-right`, `margin-bottom`, or `margin-left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'margin-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-margin-start"?: Property.MarginInlineStart<TLength> | undefined;
+  /**
+   * If a `mask-image` is specified, `-webkit-mask-attachment` determines whether the mask image's position is fixed within the viewport, or scrolls along with its containing block.
+   *
+   * **Syntax**: `<attachment>#`
+   *
+   * **Initial value**: `scroll`
+   */
+  "-webkit-mask-attachment"?: Property.WebkitMaskAttachment | undefined;
+  /**
+   * The **`mask-border-outset`** CSS property specifies the distance by which an element's mask border is set out from its border box.
+   *
+   * **Syntax**: `[ <length> | <number> ]{1,4}`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-mask-box-image-outset"?: Property.MaskBorderOutset<TLength> | undefined;
+  /**
+   * The **`mask-border-repeat`** CSS property sets how the edge regions of a source image are adjusted to fit the dimensions of an element's mask border.
+   *
+   * **Syntax**: `[ stretch | repeat | round | space ]{1,2}`
+   *
+   * **Initial value**: `stretch`
+   */
+  "-webkit-mask-box-image-repeat"?: Property.MaskBorderRepeat | undefined;
+  /**
+   * The **`mask-border-slice`** CSS property divides the image set by `mask-border-source` into regions. These regions are used to form the components of an element's mask border.
+   *
+   * **Syntax**: `<number-percentage>{1,4} fill?`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-mask-box-image-slice"?: Property.MaskBorderSlice | undefined;
+  /**
+   * The **`mask-border-source`** CSS property sets the source image used to create an element's mask border.
+   *
+   * **Syntax**: `none | <image>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-mask-box-image-source"?: Property.MaskBorderSource | undefined;
+  /**
+   * The **`mask-border-width`** CSS property sets the width of an element's mask border.
+   *
+   * **Syntax**: `[ <length-percentage> | <number> | auto ]{1,4}`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-mask-box-image-width"?: Property.MaskBorderWidth<TLength> | undefined;
+  /**
+   * The **`mask-clip`** CSS property determines the area which is affected by a mask. The painted content of an element must be restricted to this area.
+   *
+   * **Syntax**: `[ <box> | border | padding | content | text ]#`
+   *
+   * **Initial value**: `border`
+   */
+  "-webkit-mask-clip"?: Property.WebkitMaskClip | undefined;
+  /**
+   * The **`-webkit-mask-composite`** property specifies the manner in which multiple mask images applied to the same element are composited with one another. Mask images are composited in the opposite order that they are declared with the `-webkit-mask-image` property.
+   *
+   * **Syntax**: `<composite-style>#`
+   *
+   * **Initial value**: `source-over`
+   */
+  "-webkit-mask-composite"?: Property.WebkitMaskComposite | undefined;
+  /**
+   * The **`mask-image`** CSS property sets the image that is used as mask layer for an element. By default this means the alpha channel of the mask image will be multiplied with the alpha channel of the element. This can be controlled with the `mask-mode` property.
+   *
+   * **Syntax**: `<mask-reference>#`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-mask-image"?: Property.WebkitMaskImage | undefined;
+  /**
+   * The **`mask-origin`** CSS property sets the origin of a mask.
+   *
+   * **Syntax**: `[ <box> | border | padding | content ]#`
+   *
+   * **Initial value**: `padding`
+   */
+  "-webkit-mask-origin"?: Property.WebkitMaskOrigin | undefined;
+  /**
+   * The **`mask-position`** CSS property sets the initial position, relative to the mask position layer set by `mask-origin`, for each defined mask image.
+   *
+   * **Syntax**: `<position>#`
+   *
+   * **Initial value**: `0% 0%`
+   */
+  "-webkit-mask-position"?: Property.WebkitMaskPosition<TLength> | undefined;
+  /**
+   * The `-webkit-mask-position-x` CSS property sets the initial horizontal position of a mask image.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right ]#`
+   *
+   * **Initial value**: `0%`
+   */
+  "-webkit-mask-position-x"?: Property.WebkitMaskPositionX<TLength> | undefined;
+  /**
+   * The `-webkit-mask-position-y` CSS property sets the initial vertical position of a mask image.
+   *
+   * **Syntax**: `[ <length-percentage> | top | center | bottom ]#`
+   *
+   * **Initial value**: `0%`
+   */
+  "-webkit-mask-position-y"?: Property.WebkitMaskPositionY<TLength> | undefined;
+  /**
+   * The **`mask-repeat`** CSS property sets how mask images are repeated. A mask image can be repeated along the horizontal axis, the vertical axis, both axes, or not repeated at all.
+   *
+   * **Syntax**: `<repeat-style>#`
+   *
+   * **Initial value**: `repeat`
+   */
+  "-webkit-mask-repeat"?: Property.WebkitMaskRepeat | undefined;
+  /**
+   * The `-webkit-mask-repeat-x` property specifies whether and how a mask image is repeated (tiled) horizontally.
+   *
+   * **Syntax**: `repeat | no-repeat | space | round`
+   *
+   * **Initial value**: `repeat`
+   */
+  "-webkit-mask-repeat-x"?: Property.WebkitMaskRepeatX | undefined;
+  /**
+   * The `-webkit-mask-repeat-y` property sets whether and how a mask image is repeated (tiled) vertically.
+   *
+   * **Syntax**: `repeat | no-repeat | space | round`
+   *
+   * **Initial value**: `repeat`
+   */
+  "-webkit-mask-repeat-y"?: Property.WebkitMaskRepeatY | undefined;
+  /**
+   * The **`mask-size`** CSS property specifies the sizes of the mask images. The size of the image can be fully or partially constrained in order to preserve its intrinsic ratio.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   */
+  "-webkit-mask-size"?: Property.WebkitMaskSize<TLength> | undefined;
+  /**
+   * The **`max-inline-size`** CSS property defines the horizontal or vertical maximum size of an element's block, depending on its writing mode. It corresponds to either the `max-width` or the `max-height` property, depending on the value of `writing-mode`.
+   *
+   * **Syntax**: `<'max-width'>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-max-inline-size"?: Property.MaxInlineSize<TLength> | undefined;
+  /**
+   * The **`order`** CSS property sets the order to lay out an item in a flex or grid container. Items in a container are sorted by ascending `order` value and then by their source code order.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-order"?: Property.Order | undefined;
+  /**
+   * The `-webkit-overflow-scrolling` CSS property controls whether or not touch devices use momentum-based scrolling for a given element.
+   *
+   * **Syntax**: `auto | touch`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-overflow-scrolling"?: Property.WebkitOverflowScrolling | undefined;
+  /**
+   * The **`padding-inline-end`** CSS property defines the logical inline end padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-padding-end"?: Property.PaddingInlineEnd<TLength> | undefined;
+  /**
+   * The **`padding-inline-start`** CSS property defines the logical inline start padding of an element, which maps to a physical padding depending on the element's writing mode, directionality, and text orientation.
+   *
+   * **Syntax**: `<'padding-left'>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-padding-start"?: Property.PaddingInlineStart<TLength> | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-perspective"?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   */
+  "-webkit-perspective-origin"?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`print-color-adjust`** CSS property sets what, if anything, the user agent may do to optimize the appearance of the element on the output device. By default, the browser is allowed to make any adjustments to the element's appearance it determines to be necessary and prudent given the type and capabilities of the output device.
+   *
+   * **Syntax**: `economy | exact`
+   *
+   * **Initial value**: `economy`
+   */
+  "-webkit-print-color-adjust"?: Property.PrintColorAdjust | undefined;
+  /**
+   * The **`ruby-position`** CSS property defines the position of a ruby element relatives to its base element. It can be positioned over the element (`over`), under it (`under`), or between the characters on their right side (`inter-character`).
+   *
+   * **Syntax**: `[ alternate || [ over | under ] ] | inter-character`
+   *
+   * **Initial value**: `alternate`
+   */
+  "-webkit-ruby-position"?: Property.RubyPosition | undefined;
+  /**
+   * The **`scroll-snap-type`** CSS property sets how strictly snap points are enforced on the scroll container in case there is one.
+   *
+   * **Syntax**: `none | [ x | y | block | inline | both ] [ mandatory | proximity ]?`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-scroll-snap-type"?: Property.ScrollSnapType | undefined;
+  /**
+   * The **`shape-margin`** CSS property sets a margin for a CSS shape created using `shape-outside`.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-shape-margin"?: Property.ShapeMargin<TLength> | undefined;
+  /**
+   * **`-webkit-tap-highlight-color`** is a non-standard CSS property that sets the color of the highlight that appears over a link while it's being tapped. The highlighting indicates to the user that their tap is being successfully recognized, and indicates which element they're tapping on.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `black`
+   */
+  "-webkit-tap-highlight-color"?: Property.WebkitTapHighlightColor | undefined;
+  /**
+   * The **`text-combine-upright`** CSS property sets the combination of characters into the space of a single character. If the combined text is wider than 1em, the user agent must fit the contents within 1em. The resulting composition is treated as a single upright glyph for layout and decoration. This property only has an effect in vertical writing modes.
+   *
+   * **Syntax**: `none | all | [ digits <integer>? ]`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-text-combine"?: Property.TextCombineUpright | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-text-decoration-color"?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-text-decoration-line"?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-skip`** CSS property sets what parts of an element's content any text decoration affecting the element must skip over. It controls all text decoration lines drawn by the element and also any text decoration lines drawn by its ancestors.
+   *
+   * **Syntax**: `none | [ objects || [ spaces | [ leading-spaces || trailing-spaces ] ] || edges || box-decoration ]`
+   *
+   * **Initial value**: `objects`
+   */
+  "-webkit-text-decoration-skip"?: Property.TextDecorationSkip | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   */
+  "-webkit-text-decoration-style"?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`text-emphasis-color`** CSS property sets the color of emphasis marks. This value can also be set using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-text-emphasis-color"?: Property.TextEmphasisColor | undefined;
+  /**
+   * The **`text-emphasis-position`** CSS property sets where emphasis marks are drawn. Like ruby text, if there isn't enough room for emphasis marks, the line height is increased.
+   *
+   * **Syntax**: `[ over | under ] && [ right | left ]`
+   *
+   * **Initial value**: `over right`
+   */
+  "-webkit-text-emphasis-position"?: Property.TextEmphasisPosition | undefined;
+  /**
+   * The **`text-emphasis-style`** CSS property sets the appearance of emphasis marks. It can also be set, and reset, using the `text-emphasis` shorthand.
+   *
+   * **Syntax**: `none | [ [ filled | open ] || [ dot | circle | double-circle | triangle | sesame ] ] | <string>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-text-emphasis-style"?: Property.TextEmphasisStyle | undefined;
+  /**
+   * The **`-webkit-text-fill-color`** CSS property specifies the fill color of characters of text. If this property is not set, the value of the `color` property is used.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-text-fill-color"?: Property.WebkitTextFillColor | undefined;
+  /**
+   * The **`text-orientation`** CSS property sets the orientation of the text characters in a line. It only affects text in vertical mode (when `writing-mode` is not `horizontal-tb`). It is useful for controlling the display of languages that use vertical script, and also for making vertical table headers.
+   *
+   * **Syntax**: `mixed | upright | sideways`
+   *
+   * **Initial value**: `mixed`
+   */
+  "-webkit-text-orientation"?: Property.TextOrientation | undefined;
+  /**
+   * The **`text-size-adjust`** CSS property controls the text inflation algorithm used on some smartphones and tablets. Other browsers will ignore this property.
+   *
+   * **Syntax**: `none | auto | <percentage>`
+   *
+   * **Initial value**: `auto` for smartphone browsers supporting inflation, `none` in other cases (and then not modifiable).
+   */
+  "-webkit-text-size-adjust"?: Property.TextSizeAdjust | undefined;
+  /**
+   * The **`-webkit-text-stroke-color`** CSS property specifies the stroke color of characters of text. If this property is not set, the value of the `color` property is used.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   */
+  "-webkit-text-stroke-color"?: Property.WebkitTextStrokeColor | undefined;
+  /**
+   * The **`-webkit-text-stroke-width`** CSS property specifies the width of the stroke for text.
+   *
+   * **Syntax**: `<length>`
+   *
+   * **Initial value**: `0`
+   */
+  "-webkit-text-stroke-width"?: Property.WebkitTextStrokeWidth<TLength> | undefined;
+  /**
+   * The **`text-underline-position`** CSS property specifies the position of the underline which is set using the `text-decoration` property's `underline` value.
+   *
+   * **Syntax**: `auto | from-font | [ under || [ left | right ] ]`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-text-underline-position"?: Property.TextUnderlinePosition | undefined;
+  /**
+   * The `-webkit-touch-callout` CSS property controls the display of the default callout shown when you touch and hold a touch target.
+   *
+   * **Syntax**: `default | none`
+   *
+   * **Initial value**: `default`
+   */
+  "-webkit-touch-callout"?: Property.WebkitTouchCallout | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   */
+  "-webkit-transform"?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   */
+  "-webkit-transform-origin"?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   */
+  "-webkit-transform-style"?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-webkit-transition-delay"?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   */
+  "-webkit-transition-duration"?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   */
+  "-webkit-transition-property"?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   */
+  "-webkit-transition-timing-function"?: Property.TransitionTimingFunction | undefined;
+  /**
+   * **Syntax**: `read-only | read-write | read-write-plaintext-only`
+   *
+   * **Initial value**: `read-only`
+   */
+  "-webkit-user-modify"?: Property.WebkitUserModify | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   */
+  "-webkit-user-select"?: Property.UserSelect | undefined;
+  /**
+   * The **`writing-mode`** CSS property sets whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress. When set for an entire document, it should be set on the root element (`html` element for HTML documents).
+   *
+   * **Syntax**: `horizontal-tb | vertical-rl | vertical-lr | sideways-rl | sideways-lr`
+   *
+   * **Initial value**: `horizontal-tb`
+   */
+  "-webkit-writing-mode"?: Property.WritingMode | undefined;
+}
+
+export interface VendorShorthandPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   */
+  "-moz-animation"?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   */
+  "-moz-border-image"?: Property.BorderImage | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   */
+  "-moz-column-rule"?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   */
+  "-moz-columns"?: Property.Columns<TLength> | undefined;
+  /**
+   * In Mozilla applications like Firefox, the **`-moz-outline-radius`** CSS shorthand property can be used to give an element's `outline` rounded corners.
+   *
+   * **Syntax**: `<outline-radius>{1,4} [ / <outline-radius>{1,4} ]?`
+   */
+  "-moz-outline-radius"?: Property.MozOutlineRadius<TLength> | undefined;
+  /**
+   * The **`-ms-content-zoom-limit`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-limit-min` and `-ms-content-zoom-limit-max` properties.
+   *
+   * **Syntax**: `<'-ms-content-zoom-limit-min'> <'-ms-content-zoom-limit-max'>`
+   */
+  "-ms-content-zoom-limit"?: Property.MsContentZoomLimit | undefined;
+  /**
+   * The **`-ms-content-zoom-snap`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-content-zoom-snap-type` and `-ms-content-zoom-snap-points` properties.
+   *
+   * **Syntax**: `<'-ms-content-zoom-snap-type'> || <'-ms-content-zoom-snap-points'>`
+   */
+  "-ms-content-zoom-snap"?: Property.MsContentZoomSnap | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   */
+  "-ms-flex"?: Property.Flex<TLength> | undefined;
+  /**
+   * The **\-ms-scroll-limit** CSS property is a Microsoft extension that specifies values for the `-ms-scroll-limit-x-min`, `-ms-scroll-limit-y-min`, `-ms-scroll-limit-x-max`, and `-ms-scroll-limit-y-max` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-limit-x-min'> <'-ms-scroll-limit-y-min'> <'-ms-scroll-limit-x-max'> <'-ms-scroll-limit-y-max'>`
+   */
+  "-ms-scroll-limit"?: Property.MsScrollLimit | undefined;
+  /**
+   * The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-x` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-x'>`
+   */
+  "-ms-scroll-snap-x"?: Property.MsScrollSnapX | undefined;
+  /**
+   * The **`-ms-scroll-snap-x`** CSS shorthand property is a Microsoft extension that specifies values for the `-ms-scroll-snap-type` and `-ms-scroll-snap-points-y` properties.
+   *
+   * **Syntax**: `<'-ms-scroll-snap-type'> <'-ms-scroll-snap-points-y'>`
+   */
+  "-ms-scroll-snap-y"?: Property.MsScrollSnapY | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   */
+  "-ms-transition"?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   */
+  "-webkit-animation"?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`-webkit-border-before`** CSS property is a shorthand property for setting the individual logical block start border property values in a single place in the style sheet.
+   *
+   * **Syntax**: `<'border-width'> || <'border-style'> || <color>`
+   */
+  "-webkit-border-before"?: Property.WebkitBorderBefore<TLength> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   */
+  "-webkit-border-image"?: Property.BorderImage | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   */
+  "-webkit-border-radius"?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`column-rule`** shorthand CSS property sets the width, style, and color of the line drawn between columns in a multi-column layout.
+   *
+   * **Syntax**: `<'column-rule-width'> || <'column-rule-style'> || <'column-rule-color'>`
+   */
+  "-webkit-column-rule"?: Property.ColumnRule<TLength> | undefined;
+  /**
+   * The **`columns`** CSS shorthand property sets the number of columns to use when drawing an element's contents, as well as those columns' widths.
+   *
+   * **Syntax**: `<'column-width'> || <'column-count'>`
+   */
+  "-webkit-columns"?: Property.Columns<TLength> | undefined;
+  /**
+   * The **`flex`** CSS shorthand property sets how a flex _item_ will grow or shrink to fit the space available in its flex container.
+   *
+   * **Syntax**: `none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
+   */
+  "-webkit-flex"?: Property.Flex<TLength> | undefined;
+  /**
+   * The **`flex-flow`** CSS shorthand property specifies the direction of a flex container, as well as its wrapping behavior.
+   *
+   * **Syntax**: `<'flex-direction'> || <'flex-wrap'>`
+   */
+  "-webkit-flex-flow"?: Property.FlexFlow | undefined;
+  /**
+   * The **`mask`** CSS shorthand property hides an element (partially or fully) by masking or clipping the image at specific points.
+   *
+   * **Syntax**: `[ <mask-reference> || <position> [ / <bg-size> ]? || <repeat-style> || [ <box> | border | padding | content | text ] || [ <box> | border | padding | content ] ]#`
+   */
+  "-webkit-mask"?: Property.WebkitMask<TLength> | undefined;
+  /**
+   * The **`mask-border`** CSS shorthand property lets you create a mask along the edge of an element's border.
+   *
+   * **Syntax**: `<'mask-border-source'> || <'mask-border-slice'> [ / <'mask-border-width'>? [ / <'mask-border-outset'> ]? ]? || <'mask-border-repeat'> || <'mask-border-mode'>`
+   */
+  "-webkit-mask-box-image"?: Property.MaskBorder | undefined;
+  /**
+   * The **`text-emphasis`** CSS property applies emphasis marks to text (except spaces and control characters). It is a shorthand for `text-emphasis-style` and `text-emphasis-color`.
+   *
+   * **Syntax**: `<'text-emphasis-style'> || <'text-emphasis-color'>`
+   */
+  "-webkit-text-emphasis"?: Property.TextEmphasis | undefined;
+  /**
+   * The **`-webkit-text-stroke`** CSS property specifies the width and color of strokes for text characters. This is a shorthand property for the longhand properties `-webkit-text-stroke-width` and `-webkit-text-stroke-color`.
+   *
+   * **Syntax**: `<length> || <color>`
+   */
+  "-webkit-text-stroke"?: Property.WebkitTextStroke<TLength> | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   */
+  "-webkit-transition"?: Property.Transition<TTime> | undefined;
+}
+
+export interface VendorPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}>
+  extends VendorLonghandPropertiesHyphen<TLength, TTime>,
+    VendorShorthandPropertiesHyphen<TLength, TTime> {}
+
+export interface ObsoletePropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  /**
+   * In combination with `elevation`, the **`azimuth`** CSS property enables different audio sources to be positioned spatially for aural presentation. This is important in that it provides a natural way to tell several voices apart, as each can be positioned to originate at a different location on the sound stage. Stereo output produce a lateral sound stage, while binaural headphones and multi-speaker setups allow for a fully three-dimensional stage.
+   *
+   * **Syntax**: `<angle> | [ [ left-side | far-left | left | center-left | center | center-right | right | far-right | right-side ] || behind ] | leftwards | rightwards`
+   *
+   * **Initial value**: `center`
+   *
+   * @deprecated
+   */
+  azimuth?: Property.Azimuth | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  "box-align"?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  "box-direction"?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "box-flex"?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "box-flex-group"?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  "box-lines"?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "box-ordinal-group"?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  "box-orient"?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  "box-pack"?: Property.BoxPack | undefined;
+  /**
+   * The **`clip`** CSS property defines a visible portion of an element. The `clip` property applies only to absolutely positioned elements — that is, elements with `position:absolute` or `position:fixed`.
+   *
+   * **Syntax**: `<shape> | auto`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  clip?: Property.Clip | undefined;
+  /**
+   * The **`column-gap`** CSS property sets the size of the gap (gutter) between an element's columns.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "grid-column-gap"?: Property.GridColumnGap<TLength> | undefined;
+  /**
+   * The **`gap`** CSS property sets the gaps (gutters) between rows and columns. It is a shorthand for `row-gap` and `column-gap`.
+   *
+   * **Syntax**: `<'grid-row-gap'> <'grid-column-gap'>?`
+   *
+   * @deprecated
+   */
+  "grid-gap"?: Property.GridGap<TLength> | undefined;
+  /**
+   * The **`row-gap`** CSS property sets the size of the gap (gutter) between an element's rows.
+   *
+   * **Syntax**: `<length-percentage>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "grid-row-gap"?: Property.GridRowGap<TLength> | undefined;
+  /**
+   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.
+   *
+   * **Syntax**: `auto | normal | active | inactive | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "ime-mode"?: Property.ImeMode | undefined;
+  /**
+   * The **`inset-block`** CSS property defines the logical block start and end offsets of an element, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * @deprecated
+   */
+  "offset-block"?: Property.InsetBlock<TLength> | undefined;
+  /**
+   * The **`inset-block-end`** CSS property defines the logical block end offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "offset-block-end"?: Property.InsetBlockEnd<TLength> | undefined;
+  /**
+   * The **`inset-block-start`** CSS property defines the logical block start offset of an element, which maps to a physical inset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "offset-block-start"?: Property.InsetBlockStart<TLength> | undefined;
+  /**
+   * The **`inset-inline`** CSS property defines the logical start and end offsets of an element in the inline direction, which maps to physical offsets depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top` and `bottom`, or `right` and `left` properties depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>{1,2}`
+   *
+   * @deprecated
+   */
+  "offset-inline"?: Property.InsetInline<TLength> | undefined;
+  /**
+   * The **`inset-inline-end`** CSS property defines the logical inline end inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "offset-inline-end"?: Property.InsetInlineEnd<TLength> | undefined;
+  /**
+   * The **`inset-inline-start`** CSS property defines the logical inline start inset of an element, which maps to a physical offset depending on the element's writing mode, directionality, and text orientation. It corresponds to the `top`, `right`, `bottom`, or `left` property depending on the values defined for `writing-mode`, `direction`, and `text-orientation`.
+   *
+   * **Syntax**: `<'top'>`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "offset-inline-start"?: Property.InsetInlineStart<TLength> | undefined;
+  /**
+   * The **`scroll-snap-coordinate`** CSS property defines the x and y coordinate positions within an element that will align with its nearest ancestor scroll container's `scroll-snap-destination` for each respective axis.
+   *
+   * **Syntax**: `none | <position>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "scroll-snap-coordinate"?: Property.ScrollSnapCoordinate<TLength> | undefined;
+  /**
+   * The **`scroll-snap-destination`** CSS property defines the position in x and y coordinates within the scroll container's visual viewport which element snap points align with.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `0px 0px`
+   *
+   * @deprecated
+   */
+  "scroll-snap-destination"?: Property.ScrollSnapDestination<TLength> | undefined;
+  /**
+   * The **`scroll-snap-points-x`** CSS property defines the horizontal positioning of snap points within the content of the scroll container they are applied to.
+   *
+   * **Syntax**: `none | repeat( <length-percentage> )`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "scroll-snap-points-x"?: Property.ScrollSnapPointsX | undefined;
+  /**
+   * The **`scroll-snap-points-y`** CSS property defines the vertical positioning of snap points within the content of the scroll container they are applied to.
+   *
+   * **Syntax**: `none | repeat( <length-percentage> )`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "scroll-snap-points-y"?: Property.ScrollSnapPointsY | undefined;
+  /**
+   * The **`scroll-snap-type-x`** CSS property defines how strictly snap points are enforced on the horizontal axis of the scroll container in case there is one.
+   *
+   * **Syntax**: `none | mandatory | proximity`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "scroll-snap-type-x"?: Property.ScrollSnapTypeX | undefined;
+  /**
+   * The **`scroll-snap-type-y`** CSS property defines how strictly snap points are enforced on the vertical axis of the scroll container in case there is one.
+   *
+   * **Syntax**: `none | mandatory | proximity`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "scroll-snap-type-y"?: Property.ScrollSnapTypeY | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  "-khtml-box-align"?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  "-khtml-box-direction"?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-khtml-box-flex"?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-khtml-box-flex-group"?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  "-khtml-box-lines"?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-khtml-box-ordinal-group"?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  "-khtml-box-orient"?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  "-khtml-box-pack"?: Property.BoxPack | undefined;
+  /**
+   * The **`line-break`** CSS property sets how to break lines of Chinese, Japanese, or Korean (CJK) text when working with punctuation and symbols.
+   *
+   * **Syntax**: `auto | loose | normal | strict | anywhere`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "-khtml-line-break"?: Property.LineBreak | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-khtml-opacity"?: Property.Opacity | undefined;
+  /**
+   * The **`user-select`** CSS property controls whether the user can select text. This doesn't have any effect on content loaded as part of a browser's user interface (its chrome), except in textboxes.
+   *
+   * **Syntax**: `auto | text | none | contain | all`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "-khtml-user-select"?: Property.UserSelect | undefined;
+  /**
+   * The **`backface-visibility`** CSS property sets whether the back face of an element is visible when turned towards the user.
+   *
+   * **Syntax**: `visible | hidden`
+   *
+   * **Initial value**: `visible`
+   *
+   * @deprecated
+   */
+  "-moz-backface-visibility"?: Property.BackfaceVisibility | undefined;
+  /**
+   * The **`background-clip`** CSS property sets whether an element's background extends underneath its border box, padding box, or content box.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `border-box`
+   *
+   * @deprecated
+   */
+  "-moz-background-clip"?: Property.BackgroundClip | undefined;
+  /**
+   * The **`box-decoration-break`** CSS property specifies how an element's fragments should be rendered when broken across multiple lines, columns, or pages.
+   *
+   * **Syntax**: `slice | clone`
+   *
+   * **Initial value**: `slice`
+   *
+   * @deprecated
+   */
+  "-moz-background-inline-policy"?: Property.BoxDecorationBreak | undefined;
+  /**
+   * The **`background-origin`** CSS property sets the background's origin: from the border start, inside the border, or inside the padding.
+   *
+   * **Syntax**: `<box>#`
+   *
+   * **Initial value**: `padding-box`
+   *
+   * @deprecated
+   */
+  "-moz-background-origin"?: Property.BackgroundOrigin | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * @deprecated
+   */
+  "-moz-background-size"?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * The **`border-radius`** CSS property rounds the corners of an element's outer border edge. You can set a single radius to make circular corners, or two radii to make elliptical corners.
+   *
+   * **Syntax**: `<length-percentage>{1,4} [ / <length-percentage>{1,4} ]?`
+   *
+   * @deprecated
+   */
+  "-moz-border-radius"?: Property.BorderRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-left-radius`** CSS property rounds the bottom-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-border-radius-bottomleft"?: Property.BorderBottomLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-bottom-right-radius`** CSS property rounds the bottom-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-border-radius-bottomright"?: Property.BorderBottomRightRadius<TLength> | undefined;
+  /**
+   * The **`border-top-left-radius`** CSS property rounds the top-left corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-border-radius-topleft"?: Property.BorderTopLeftRadius<TLength> | undefined;
+  /**
+   * The **`border-top-right-radius`** CSS property rounds the top-right corner of an element by specifying the radius (or the radius of the semi-major and semi-minor axes) of the ellipse defining the curvature of the corner.
+   *
+   * **Syntax**: `<length-percentage>{1,2}`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-border-radius-topright"?: Property.BorderTopRightRadius<TLength> | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  "-moz-box-align"?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  "-moz-box-direction"?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-box-flex"?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-moz-box-ordinal-group"?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  "-moz-box-orient"?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  "-moz-box-pack"?: Property.BoxPack | undefined;
+  /**
+   * The **`box-shadow`** CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.
+   *
+   * **Syntax**: `none | <shadow>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-moz-box-shadow"?: Property.BoxShadow | undefined;
+  /**
+   * The non-standard **`-moz-float-edge`** CSS property specifies whether the height and width properties of the element include the margin, border, or padding thickness.
+   *
+   * **Syntax**: `border-box | content-box | margin-box | padding-box`
+   *
+   * **Initial value**: `content-box`
+   *
+   * @deprecated
+   */
+  "-moz-float-edge"?: Property.MozFloatEdge | undefined;
+  /**
+   * The **`-moz-force-broken-image-icon`** extended CSS property can be used to force the broken image icon to be shown even when a broken image has an `alt` attribute.
+   *
+   * **Syntax**: `0 | 1`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-moz-force-broken-image-icon"?: Property.MozForceBrokenImageIcon | undefined;
+  /**
+   * The **`opacity`** CSS property sets the opacity of an element. Opacity is the degree to which content behind an element is hidden, and is the opposite of transparency.
+   *
+   * **Syntax**: `<alpha-value>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-moz-opacity"?: Property.Opacity | undefined;
+  /**
+   * The **`outline`** CSS shorthand property sets most of the outline properties in a single declaration.
+   *
+   * **Syntax**: `[ <'outline-color'> || <'outline-style'> || <'outline-width'> ]`
+   *
+   * @deprecated
+   */
+  "-moz-outline"?: Property.Outline<TLength> | undefined;
+  /**
+   * The **`outline-color`** CSS property sets the color of an element's outline.
+   *
+   * **Syntax**: `<color> | invert`
+   *
+   * **Initial value**: `invert`, for browsers supporting it, `currentColor` for the other
+   *
+   * @deprecated
+   */
+  "-moz-outline-color"?: Property.OutlineColor | undefined;
+  /**
+   * The **`outline-style`** CSS property sets the style of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `auto | <'border-style'>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-moz-outline-style"?: Property.OutlineStyle | undefined;
+  /**
+   * The CSS **`outline-width`** property sets the thickness of an element's outline. An outline is a line that is drawn around an element, outside the `border`.
+   *
+   * **Syntax**: `<line-width>`
+   *
+   * **Initial value**: `medium`
+   *
+   * @deprecated
+   */
+  "-moz-outline-width"?: Property.OutlineWidth<TLength> | undefined;
+  /**
+   * The **`perspective`** CSS property determines the distance between the z=0 plane and the user in order to give a 3D-positioned element some perspective.
+   *
+   * **Syntax**: `none | <length>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-moz-perspective"?: Property.Perspective<TLength> | undefined;
+  /**
+   * The **`perspective-origin`** CSS property determines the position at which the viewer is looking. It is used as the _vanishing point_ by the `perspective` property.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * @deprecated
+   */
+  "-moz-perspective-origin"?: Property.PerspectiveOrigin<TLength> | undefined;
+  /**
+   * The **`text-align-last`** CSS property sets how the last line of a block or a line, right before a forced line break, is aligned.
+   *
+   * **Syntax**: `auto | start | end | left | right | center | justify`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "-moz-text-align-last"?: Property.TextAlignLast | undefined;
+  /**
+   * The **`text-decoration-color`** CSS property sets the color of decorations added to text by `text-decoration-line`.
+   *
+   * **Syntax**: `<color>`
+   *
+   * **Initial value**: `currentcolor`
+   *
+   * @deprecated
+   */
+  "-moz-text-decoration-color"?: Property.TextDecorationColor | undefined;
+  /**
+   * The **`text-decoration-line`** CSS property sets the kind of decoration that is used on text in an element, such as an underline or overline.
+   *
+   * **Syntax**: `none | [ underline || overline || line-through || blink ] | spelling-error | grammar-error`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-moz-text-decoration-line"?: Property.TextDecorationLine | undefined;
+  /**
+   * The **`text-decoration-style`** CSS property sets the style of the lines specified by `text-decoration-line`. The style applies to all lines that are set with `text-decoration-line`.
+   *
+   * **Syntax**: `solid | double | dotted | dashed | wavy`
+   *
+   * **Initial value**: `solid`
+   *
+   * @deprecated
+   */
+  "-moz-text-decoration-style"?: Property.TextDecorationStyle | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-moz-transform"?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * @deprecated
+   */
+  "-moz-transform-origin"?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transform-style`** CSS property sets whether children of an element are positioned in the 3D space or are flattened in the plane of the element.
+   *
+   * **Syntax**: `flat | preserve-3d`
+   *
+   * **Initial value**: `flat`
+   *
+   * @deprecated
+   */
+  "-moz-transform-style"?: Property.TransformStyle | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * @deprecated
+   */
+  "-moz-transition"?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-moz-transition-delay"?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-moz-transition-duration"?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * @deprecated
+   */
+  "-moz-transition-property"?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  "-moz-transition-timing-function"?: Property.TransitionTimingFunction | undefined;
+  /**
+   * In Mozilla applications, **`-moz-user-input`** determines if an element will accept user input.
+   *
+   * **Syntax**: `auto | none | enabled | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "-moz-user-input"?: Property.MozUserInput | undefined;
+  /**
+   * The **`ime-mode`** CSS property controls the state of the input method editor (IME) for text fields. This property is obsolete.
+   *
+   * **Syntax**: `auto | normal | active | inactive | disabled`
+   *
+   * **Initial value**: `auto`
+   *
+   * @deprecated
+   */
+  "-ms-ime-mode"?: Property.ImeMode | undefined;
+  /**
+   * The **`animation`** shorthand CSS property applies an animation between styles. It is a shorthand for `animation-name`, `animation-duration`, `animation-timing-function`, `animation-delay`, `animation-iteration-count`, `animation-direction`, `animation-fill-mode`, and `animation-play-state`.
+   *
+   * **Syntax**: `<single-animation>#`
+   *
+   * @deprecated
+   */
+  "-o-animation"?: Property.Animation<TTime> | undefined;
+  /**
+   * The **`animation-delay`** CSS property specifies the amount of time to wait from applying the animation to an element before beginning to perform the animation. The animation can start later, immediately from its beginning, or immediately and partway through the animation.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-o-animation-delay"?: Property.AnimationDelay<TTime> | undefined;
+  /**
+   * The **`animation-direction`** CSS property sets whether an animation should play forward, backward, or alternate back and forth between playing the sequence forward and backward.
+   *
+   * **Syntax**: `<single-animation-direction>#`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  "-o-animation-direction"?: Property.AnimationDirection | undefined;
+  /**
+   * The **`animation-duration`** CSS property sets the length of time that an animation takes to complete one cycle.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-o-animation-duration"?: Property.AnimationDuration<TTime> | undefined;
+  /**
+   * The **`animation-fill-mode`** CSS property sets how a CSS animation applies styles to its target before and after its execution.
+   *
+   * **Syntax**: `<single-animation-fill-mode>#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-o-animation-fill-mode"?: Property.AnimationFillMode | undefined;
+  /**
+   * The **`animation-iteration-count`** CSS property sets the number of times an animation sequence should be played before stopping.
+   *
+   * **Syntax**: `<single-animation-iteration-count>#`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-o-animation-iteration-count"?: Property.AnimationIterationCount | undefined;
+  /**
+   * The **`animation-name`** CSS property specifies the names of one or more `@keyframes` at-rules that describe the animation to apply to an element. Multiple `@keyframe` at-rules are specified as a comma-separated list of names. If the specified name does not match any `@keyframe` at-rule, no properties are animated.
+   *
+   * **Syntax**: `[ none | <keyframes-name> ]#`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-o-animation-name"?: Property.AnimationName | undefined;
+  /**
+   * The **`animation-play-state`** CSS property sets whether an animation is running or paused.
+   *
+   * **Syntax**: `<single-animation-play-state>#`
+   *
+   * **Initial value**: `running`
+   *
+   * @deprecated
+   */
+  "-o-animation-play-state"?: Property.AnimationPlayState | undefined;
+  /**
+   * The **`animation-timing-function`** CSS property sets how an animation progresses through the duration of each cycle.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  "-o-animation-timing-function"?: Property.AnimationTimingFunction | undefined;
+  /**
+   * The **`background-size`** CSS property sets the size of the element's background image. The image can be left to its natural size, stretched, or constrained to fit the available space.
+   *
+   * **Syntax**: `<bg-size>#`
+   *
+   * **Initial value**: `auto auto`
+   *
+   * @deprecated
+   */
+  "-o-background-size"?: Property.BackgroundSize<TLength> | undefined;
+  /**
+   * The **`border-image`** CSS property draws an image around a given element. It replaces the element's regular border.
+   *
+   * **Syntax**: `<'border-image-source'> || <'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? || <'border-image-repeat'>`
+   *
+   * @deprecated
+   */
+  "-o-border-image"?: Property.BorderImage | undefined;
+  /**
+   * The **`object-fit`** CSS property sets how the content of a replaced element, such as an `<img>` or `<video>`, should be resized to fit its container.
+   *
+   * **Syntax**: `fill | contain | cover | none | scale-down`
+   *
+   * **Initial value**: `fill`
+   *
+   * @deprecated
+   */
+  "-o-object-fit"?: Property.ObjectFit | undefined;
+  /**
+   * The **`object-position`** CSS property specifies the alignment of the selected replaced element's contents within the element's box. Areas of the box which aren't covered by the replaced element's object will show the element's background.
+   *
+   * **Syntax**: `<position>`
+   *
+   * **Initial value**: `50% 50%`
+   *
+   * @deprecated
+   */
+  "-o-object-position"?: Property.ObjectPosition<TLength> | undefined;
+  /**
+   * The **`tab-size`** CSS property is used to customize the width of tab characters (U+0009).
+   *
+   * **Syntax**: `<integer> | <length>`
+   *
+   * **Initial value**: `8`
+   *
+   * @deprecated
+   */
+  "-o-tab-size"?: Property.TabSize<TLength> | undefined;
+  /**
+   * The **`text-overflow`** CSS property sets how hidden overflow content is signaled to users. It can be clipped, display an ellipsis ('`…`'), or display a custom string.
+   *
+   * **Syntax**: `[ clip | ellipsis | <string> ]{1,2}`
+   *
+   * **Initial value**: `clip`
+   *
+   * @deprecated
+   */
+  "-o-text-overflow"?: Property.TextOverflow | undefined;
+  /**
+   * The **`transform`** CSS property lets you rotate, scale, skew, or translate an element. It modifies the coordinate space of the CSS visual formatting model.
+   *
+   * **Syntax**: `none | <transform-list>`
+   *
+   * **Initial value**: `none`
+   *
+   * @deprecated
+   */
+  "-o-transform"?: Property.Transform | undefined;
+  /**
+   * The **`transform-origin`** CSS property sets the origin for an element's transformations.
+   *
+   * **Syntax**: `[ <length-percentage> | left | center | right | top | bottom ] | [ [ <length-percentage> | left | center | right ] && [ <length-percentage> | top | center | bottom ] ] <length>?`
+   *
+   * **Initial value**: `50% 50% 0`
+   *
+   * @deprecated
+   */
+  "-o-transform-origin"?: Property.TransformOrigin<TLength> | undefined;
+  /**
+   * The **`transition`** CSS property is a shorthand property for `transition-property`, `transition-duration`, `transition-timing-function`, and `transition-delay`.
+   *
+   * **Syntax**: `<single-transition>#`
+   *
+   * @deprecated
+   */
+  "-o-transition"?: Property.Transition<TTime> | undefined;
+  /**
+   * The **`transition-delay`** CSS property specifies the duration to wait before starting a property's transition effect when its value changes.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-o-transition-delay"?: Property.TransitionDelay<TTime> | undefined;
+  /**
+   * The **`transition-duration`** CSS property sets the length of time a transition animation should take to complete. By default, the value is `0s`, meaning that no animation will occur.
+   *
+   * **Syntax**: `<time>#`
+   *
+   * **Initial value**: `0s`
+   *
+   * @deprecated
+   */
+  "-o-transition-duration"?: Property.TransitionDuration<TTime> | undefined;
+  /**
+   * The **`transition-property`** CSS property sets the CSS properties to which a transition effect should be applied.
+   *
+   * **Syntax**: `none | <single-transition-property>#`
+   *
+   * **Initial value**: all
+   *
+   * @deprecated
+   */
+  "-o-transition-property"?: Property.TransitionProperty | undefined;
+  /**
+   * The **`transition-timing-function`** CSS property sets how intermediate values are calculated for CSS properties being affected by a transition effect.
+   *
+   * **Syntax**: `<easing-function>#`
+   *
+   * **Initial value**: `ease`
+   *
+   * @deprecated
+   */
+  "-o-transition-timing-function"?: Property.TransitionTimingFunction | undefined;
+  /**
+   * The **`box-align`** CSS property specifies how an element aligns its contents across its layout in a perpendicular direction. The effect of the property is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | baseline | stretch`
+   *
+   * **Initial value**: `stretch`
+   *
+   * @deprecated
+   */
+  "-webkit-box-align"?: Property.BoxAlign | undefined;
+  /**
+   * The **`box-direction`** CSS property specifies whether a box lays out its contents normally (from the top or left edge), or in reverse (from the bottom or right edge).
+   *
+   * **Syntax**: `normal | reverse | inherit`
+   *
+   * **Initial value**: `normal`
+   *
+   * @deprecated
+   */
+  "-webkit-box-direction"?: Property.BoxDirection | undefined;
+  /**
+   * The **`-moz-box-flex`** and **`-webkit-box-flex`** CSS properties specify how a `-moz-box` or `-webkit-box` grows to fill the box that contains it, in the direction of the containing box's layout.
+   *
+   * **Syntax**: `<number>`
+   *
+   * **Initial value**: `0`
+   *
+   * @deprecated
+   */
+  "-webkit-box-flex"?: Property.BoxFlex | undefined;
+  /**
+   * The **`box-flex-group`** CSS property assigns the flexbox's child elements to a flex group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-webkit-box-flex-group"?: Property.BoxFlexGroup | undefined;
+  /**
+   * The **`box-lines`** CSS property determines whether the box may have a single or multiple lines (rows for horizontally oriented boxes, columns for vertically oriented boxes).
+   *
+   * **Syntax**: `single | multiple`
+   *
+   * **Initial value**: `single`
+   *
+   * @deprecated
+   */
+  "-webkit-box-lines"?: Property.BoxLines | undefined;
+  /**
+   * The **`box-ordinal-group`** CSS property assigns the flexbox's child elements to an ordinal group.
+   *
+   * **Syntax**: `<integer>`
+   *
+   * **Initial value**: `1`
+   *
+   * @deprecated
+   */
+  "-webkit-box-ordinal-group"?: Property.BoxOrdinalGroup | undefined;
+  /**
+   * The **`box-orient`** CSS property sets whether an element lays out its contents horizontally or vertically.
+   *
+   * **Syntax**: `horizontal | vertical | inline-axis | block-axis | inherit`
+   *
+   * **Initial value**: `inline-axis` (`horizontal` in XUL)
+   *
+   * @deprecated
+   */
+  "-webkit-box-orient"?: Property.BoxOrient | undefined;
+  /**
+   * The **`-moz-box-pack`** and **`-webkit-box-pack`** CSS properties specify how a `-moz-box` or `-webkit-box` packs its contents in the direction of its layout. The effect of this is only visible if there is extra space in the box.
+   *
+   * **Syntax**: `start | center | end | justify`
+   *
+   * **Initial value**: `start`
+   *
+   * @deprecated
+   */
+  "-webkit-box-pack"?: Property.BoxPack | undefined;
+}
+
+export interface SvgPropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+  "alignment-baseline"?: Property.AlignmentBaseline | undefined;
+  "baseline-shift"?: Property.BaselineShift<TLength> | undefined;
+  clip?: Property.Clip | undefined;
+  "clip-path"?: Property.ClipPath | undefined;
+  "clip-rule"?: Property.ClipRule | undefined;
+  color?: Property.Color | undefined;
+  "color-interpolation"?: Property.ColorInterpolation | undefined;
+  "color-rendering"?: Property.ColorRendering | undefined;
+  cursor?: Property.Cursor | undefined;
+  direction?: Property.Direction | undefined;
+  display?: Property.Display | undefined;
+  "dominant-baseline"?: Property.DominantBaseline | undefined;
+  fill?: Property.Fill | undefined;
+  "fill-opacity"?: Property.FillOpacity | undefined;
+  "fill-rule"?: Property.FillRule | undefined;
+  filter?: Property.Filter | undefined;
+  "flood-color"?: Property.FloodColor | undefined;
+  "flood-opacity"?: Property.FloodOpacity | undefined;
+  font?: Property.Font | undefined;
+  "font-family"?: Property.FontFamily | undefined;
+  "font-size"?: Property.FontSize<TLength> | undefined;
+  "font-size-adjust"?: Property.FontSizeAdjust | undefined;
+  "font-stretch"?: Property.FontStretch | undefined;
+  "font-style"?: Property.FontStyle | undefined;
+  "font-variant"?: Property.FontVariant | undefined;
+  "font-weight"?: Property.FontWeight | undefined;
+  "glyph-orientation-vertical"?: Property.GlyphOrientationVertical | undefined;
+  "image-rendering"?: Property.ImageRendering | undefined;
+  "letter-spacing"?: Property.LetterSpacing<TLength> | undefined;
+  "lighting-color"?: Property.LightingColor | undefined;
+  "line-height"?: Property.LineHeight<TLength> | undefined;
+  marker?: Property.Marker | undefined;
+  "marker-end"?: Property.MarkerEnd | undefined;
+  "marker-mid"?: Property.MarkerMid | undefined;
+  "marker-start"?: Property.MarkerStart | undefined;
+  mask?: Property.Mask<TLength> | undefined;
+  opacity?: Property.Opacity | undefined;
+  overflow?: Property.Overflow | undefined;
+  "paint-order"?: Property.PaintOrder | undefined;
+  "pointer-events"?: Property.PointerEvents | undefined;
+  "shape-rendering"?: Property.ShapeRendering | undefined;
+  "stop-color"?: Property.StopColor | undefined;
+  "stop-opacity"?: Property.StopOpacity | undefined;
+  stroke?: Property.Stroke | undefined;
+  "stroke-dasharray"?: Property.StrokeDasharray<TLength> | undefined;
+  "stroke-dashoffset"?: Property.StrokeDashoffset<TLength> | undefined;
+  "stroke-linecap"?: Property.StrokeLinecap | undefined;
+  "stroke-linejoin"?: Property.StrokeLinejoin | undefined;
+  "stroke-miterlimit"?: Property.StrokeMiterlimit | undefined;
+  "stroke-opacity"?: Property.StrokeOpacity | undefined;
+  "stroke-width"?: Property.StrokeWidth<TLength> | undefined;
+  "text-anchor"?: Property.TextAnchor | undefined;
+  "text-decoration"?: Property.TextDecoration<TLength> | undefined;
+  "text-rendering"?: Property.TextRendering | undefined;
+  "unicode-bidi"?: Property.UnicodeBidi | undefined;
+  "vector-effect"?: Property.VectorEffect | undefined;
+  visibility?: Property.Visibility | undefined;
+  "white-space"?: Property.WhiteSpace | undefined;
+  "word-spacing"?: Property.WordSpacing<TLength> | undefined;
+  "writing-mode"?: Property.WritingMode | undefined;
+}
+
+export interface PropertiesHyphen<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardPropertiesHyphen<TLength, TTime>,
+    VendorPropertiesHyphen<TLength, TTime>,
+    ObsoletePropertiesHyphen<TLength, TTime>,
+    SvgPropertiesHyphen<TLength, TTime> {}
+
+export type StandardLonghandPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<StandardLonghandProperties<TLength, TTime>>;
+
+export type StandardShorthandPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<StandardShorthandProperties<TLength, TTime>>;
+
+export interface StandardPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardLonghandPropertiesFallback<TLength, TTime>,
+    StandardShorthandPropertiesFallback<TLength, TTime> {}
+
+export type VendorLonghandPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<VendorLonghandProperties<TLength, TTime>>;
+
+export type VendorShorthandPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<VendorShorthandProperties<TLength, TTime>>;
+
+export interface VendorPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends VendorLonghandPropertiesFallback<TLength, TTime>,
+    VendorShorthandPropertiesFallback<TLength, TTime> {}
+
+export type ObsoletePropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<ObsoleteProperties<TLength, TTime>>;
+
+export type SvgPropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<SvgProperties<TLength, TTime>>;
+
+export interface PropertiesFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardPropertiesFallback<TLength, TTime>,
+    VendorPropertiesFallback<TLength, TTime>,
+    ObsoletePropertiesFallback<TLength, TTime>,
+    SvgPropertiesFallback<TLength, TTime> {}
+
+export type StandardLonghandPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<StandardLonghandPropertiesHyphen<TLength, TTime>>;
+
+export type StandardShorthandPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<StandardShorthandPropertiesHyphen<TLength, TTime>>;
+
+export interface StandardPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardLonghandPropertiesHyphenFallback<TLength, TTime>,
+    StandardShorthandPropertiesHyphenFallback<TLength, TTime> {}
+
+export type VendorLonghandPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<VendorLonghandPropertiesHyphen<TLength, TTime>>;
+
+export type VendorShorthandPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<VendorShorthandPropertiesHyphen<TLength, TTime>>;
+
+export interface VendorPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends VendorLonghandPropertiesHyphenFallback<TLength, TTime>,
+    VendorShorthandPropertiesHyphenFallback<TLength, TTime> {}
+
+export type ObsoletePropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<ObsoletePropertiesHyphen<TLength, TTime>>;
+
+export type SvgPropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<SvgPropertiesHyphen<TLength, TTime>>;
+
+export interface PropertiesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}>
+  extends StandardPropertiesHyphenFallback<TLength, TTime>,
+    VendorPropertiesHyphenFallback<TLength, TTime>,
+    ObsoletePropertiesHyphenFallback<TLength, TTime>,
+    SvgPropertiesHyphenFallback<TLength, TTime> {}
+
+export type AtRules =
+  | "@charset"
+  | "@counter-style"
+  | "@document"
+  | "@font-face"
+  | "@font-feature-values"
+  | "@font-palette-values"
+  | "@import"
+  | "@keyframes"
+  | "@layer"
+  | "@media"
+  | "@namespace"
+  | "@page"
+  | "@property"
+  | "@scope"
+  | "@scroll-timeline"
+  | "@starting-style"
+  | "@supports"
+  | "@viewport";
+
+export type AdvancedPseudos =
+  | ":-moz-any()"
+  | ":-moz-dir"
+  | ":-webkit-any()"
+  | "::cue"
+  | "::cue-region"
+  | "::part"
+  | "::slotted"
+  | "::view-transition-group"
+  | "::view-transition-image-pair"
+  | "::view-transition-new"
+  | "::view-transition-old"
+  | ":dir"
+  | ":has"
+  | ":host"
+  | ":host-context"
+  | ":is"
+  | ":lang"
+  | ":matches()"
+  | ":not"
+  | ":nth-child"
+  | ":nth-last-child"
+  | ":nth-last-of-type"
+  | ":nth-of-type"
+  | ":where";
+
+export type SimplePseudos =
+  | ":-khtml-any-link"
+  | ":-moz-any-link"
+  | ":-moz-focusring"
+  | ":-moz-full-screen"
+  | ":-moz-placeholder"
+  | ":-moz-read-only"
+  | ":-moz-read-write"
+  | ":-moz-ui-invalid"
+  | ":-moz-ui-valid"
+  | ":-ms-fullscreen"
+  | ":-ms-input-placeholder"
+  | ":-webkit-any-link"
+  | ":-webkit-full-screen"
+  | "::-moz-placeholder"
+  | "::-moz-progress-bar"
+  | "::-moz-range-progress"
+  | "::-moz-range-thumb"
+  | "::-moz-range-track"
+  | "::-moz-selection"
+  | "::-ms-backdrop"
+  | "::-ms-browse"
+  | "::-ms-check"
+  | "::-ms-clear"
+  | "::-ms-expand"
+  | "::-ms-fill"
+  | "::-ms-fill-lower"
+  | "::-ms-fill-upper"
+  | "::-ms-input-placeholder"
+  | "::-ms-reveal"
+  | "::-ms-thumb"
+  | "::-ms-ticks-after"
+  | "::-ms-ticks-before"
+  | "::-ms-tooltip"
+  | "::-ms-track"
+  | "::-ms-value"
+  | "::-webkit-backdrop"
+  | "::-webkit-input-placeholder"
+  | "::-webkit-progress-bar"
+  | "::-webkit-progress-inner-value"
+  | "::-webkit-progress-value"
+  | "::-webkit-slider-runnable-track"
+  | "::-webkit-slider-thumb"
+  | "::after"
+  | "::backdrop"
+  | "::before"
+  | "::cue"
+  | "::cue-region"
+  | "::first-letter"
+  | "::first-line"
+  | "::grammar-error"
+  | "::marker"
+  | "::placeholder"
+  | "::selection"
+  | "::spelling-error"
+  | "::target-text"
+  | "::view-transition"
+  | ":active"
+  | ":after"
+  | ":any-link"
+  | ":before"
+  | ":blank"
+  | ":checked"
+  | ":current"
+  | ":default"
+  | ":defined"
+  | ":disabled"
+  | ":empty"
+  | ":enabled"
+  | ":first"
+  | ":first-child"
+  | ":first-letter"
+  | ":first-line"
+  | ":first-of-type"
+  | ":focus"
+  | ":focus-visible"
+  | ":focus-within"
+  | ":fullscreen"
+  | ":future"
+  | ":hover"
+  | ":in-range"
+  | ":indeterminate"
+  | ":invalid"
+  | ":last-child"
+  | ":last-of-type"
+  | ":left"
+  | ":link"
+  | ":local-link"
+  | ":nth-col"
+  | ":nth-last-col"
+  | ":only-child"
+  | ":only-of-type"
+  | ":optional"
+  | ":out-of-range"
+  | ":past"
+  | ":paused"
+  | ":picture-in-picture"
+  | ":placeholder-shown"
+  | ":playing"
+  | ":read-only"
+  | ":read-write"
+  | ":required"
+  | ":right"
+  | ":root"
+  | ":scope"
+  | ":target"
+  | ":target-within"
+  | ":user-invalid"
+  | ":user-valid"
+  | ":valid"
+  | ":visited";
+
+export type Pseudos = AdvancedPseudos | SimplePseudos;
+
+export type HtmlAttributes =
+  | "[abbr]"
+  | "[accept-charset]"
+  | "[accept]"
+  | "[accesskey]"
+  | "[action]"
+  | "[align]"
+  | "[alink]"
+  | "[allow]"
+  | "[allowfullscreen]"
+  | "[allowpaymentrequest]"
+  | "[alt]"
+  | "[archive]"
+  | "[async]"
+  | "[attributionsrc]"
+  | "[autobuffer]"
+  | "[autocapitalize]"
+  | "[autocomplete]"
+  | "[autofocus]"
+  | "[autoplay]"
+  | "[axis]"
+  | "[background]"
+  | "[behavior]"
+  | "[bgcolor]"
+  | "[blocking]"
+  | "[border]"
+  | "[bottommargin]"
+  | "[browsingtopics]"
+  | "[capture]"
+  | "[cellpadding]"
+  | "[cellspacing]"
+  | "[char]"
+  | "[charoff]"
+  | "[charset]"
+  | "[checked]"
+  | "[cite]"
+  | "[class]"
+  | "[classid]"
+  | "[clear]"
+  | "[codebase]"
+  | "[codetype]"
+  | "[color]"
+  | "[cols]"
+  | "[colspan]"
+  | "[compact]"
+  | "[content]"
+  | "[contenteditable]"
+  | "[contextmenu]"
+  | "[controls]"
+  | "[coords]"
+  | "[credentialless]"
+  | "[crossorigin]"
+  | "[data]"
+  | "[datetime]"
+  | "[declare]"
+  | "[decoding]"
+  | "[default]"
+  | "[defer]"
+  | "[dir]"
+  | "[direction]"
+  | "[dirname]"
+  | "[disabled]"
+  | "[download]"
+  | "[draggable]"
+  | "[enctype]"
+  | "[enterkeyhint]"
+  | "[exportparts]"
+  | "[face]"
+  | "[fetchpriority]"
+  | "[for]"
+  | "[form]"
+  | "[formaction]"
+  | "[formenctype]"
+  | "[formmethod]"
+  | "[formnovalidate]"
+  | "[formtarget]"
+  | "[frame]"
+  | "[frameborder]"
+  | "[headers]"
+  | "[height]"
+  | "[hidden]"
+  | "[high]"
+  | "[href]"
+  | "[hreflang]"
+  | "[hspace]"
+  | "[http-equiv]"
+  | "[id]"
+  | "[imagesizes]"
+  | "[imagesrcset]"
+  | "[inert]"
+  | "[inputmode]"
+  | "[integrity]"
+  | "[is]"
+  | "[ismap]"
+  | "[itemid]"
+  | "[itemprop]"
+  | "[itemref]"
+  | "[itemscope]"
+  | "[itemtype]"
+  | "[kind]"
+  | "[label]"
+  | "[lang]"
+  | "[language]"
+  | "[leftmargin]"
+  | "[link]"
+  | "[list]"
+  | "[loading]"
+  | "[longdesc]"
+  | "[loop]"
+  | "[low]"
+  | "[manifest]"
+  | "[marginheight]"
+  | "[marginwidth]"
+  | "[max]"
+  | "[maxlength]"
+  | "[media]"
+  | "[method]"
+  | "[methods]"
+  | "[min]"
+  | "[minlength]"
+  | "[moz-opaque]"
+  | "[mozactionhint]"
+  | "[mozallowfullscreen]"
+  | "[msallowfullscreen]"
+  | "[multiple]"
+  | "[muted]"
+  | "[name]"
+  | "[nohref]"
+  | "[nomodule]"
+  | "[nonce]"
+  | "[noresize]"
+  | "[noshade]"
+  | "[novalidate]"
+  | "[nowrap]"
+  | "[onerror]"
+  | "[open]"
+  | "[optimum]"
+  | "[part]"
+  | "[pattern]"
+  | "[ping]"
+  | "[placeholder]"
+  | "[popover]"
+  | "[popovertarget]"
+  | "[popovertargetaction]"
+  | "[poster]"
+  | "[preload]"
+  | "[profile]"
+  | "[readonly]"
+  | "[referrerpolicy]"
+  | "[rel]"
+  | "[required]"
+  | "[rev]"
+  | "[reversed]"
+  | "[rightmargin]"
+  | "[rows]"
+  | "[rowspan]"
+  | "[rules]"
+  | "[sandbox]"
+  | "[scope]"
+  | "[scrollamount]"
+  | "[scrolldelay]"
+  | "[scrolling]"
+  | "[selected]"
+  | "[shadowroot]"
+  | "[shadowrootmode]"
+  | "[shape]"
+  | "[size]"
+  | "[sizes]"
+  | "[slot]"
+  | "[span]"
+  | "[spellcheck]"
+  | "[src]"
+  | "[srcdoc]"
+  | "[srclang]"
+  | "[srcset]"
+  | "[standby]"
+  | "[start]"
+  | "[step]"
+  | "[style]"
+  | "[summary]"
+  | "[tabindex]"
+  | "[target]"
+  | "[text]"
+  | "[title]"
+  | "[topmargin]"
+  | "[translate]"
+  | "[truespeed]"
+  | "[type]"
+  | "[usemap]"
+  | "[valign]"
+  | "[value]"
+  | "[valuetype]"
+  | "[version]"
+  | "[virtualkeyboardpolicy]"
+  | "[vlink]"
+  | "[vspace]"
+  | "[webkitallowfullscreen]"
+  | "[width]"
+  | "[wrap]"
+  | "[x-moz-errormessage]"
+  | "[xmlns]";
+
+export type SvgAttributes =
+  | "[accent-height]"
+  | "[alignment-baseline]"
+  | "[allowReorder]"
+  | "[alphabetic]"
+  | "[animation]"
+  | "[arabic-form]"
+  | "[ascent]"
+  | "[async]"
+  | "[attributeName]"
+  | "[attributeType]"
+  | "[azimuth]"
+  | "[baseFrequency]"
+  | "[baseProfile]"
+  | "[baseline-shift]"
+  | "[bbox]"
+  | "[bias]"
+  | "[by]"
+  | "[calcMode]"
+  | "[cap-height]"
+  | "[class]"
+  | "[clip-path]"
+  | "[clip-rule]"
+  | "[clipPathUnits]"
+  | "[clip]"
+  | "[color-interpolation-filters]"
+  | "[color-interpolation]"
+  | "[color-profile]"
+  | "[color]"
+  | "[contentScriptType]"
+  | "[contentStyleType]"
+  | "[crossorigin]"
+  | "[cursor]"
+  | "[cx]"
+  | "[cy]"
+  | "[d]"
+  | "[decoding]"
+  | "[defer]"
+  | "[descent]"
+  | "[diffuseConstant]"
+  | "[direction]"
+  | "[display]"
+  | "[divisor]"
+  | "[document]"
+  | "[dominant-baseline]"
+  | "[download]"
+  | "[dur]"
+  | "[dx]"
+  | "[dy]"
+  | "[edgeMode]"
+  | "[elevation]"
+  | "[enable-background]"
+  | "[fill-opacity]"
+  | "[fill-rule]"
+  | "[fill]"
+  | "[filterRes]"
+  | "[filterUnits]"
+  | "[filter]"
+  | "[flood-color]"
+  | "[flood-opacity]"
+  | "[font-family]"
+  | "[font-size-adjust]"
+  | "[font-size]"
+  | "[font-stretch]"
+  | "[font-style]"
+  | "[font-variant]"
+  | "[font-weight]"
+  | "[format]"
+  | "[fr]"
+  | "[from]"
+  | "[fx]"
+  | "[fy]"
+  | "[g1]"
+  | "[g2]"
+  | "[global]"
+  | "[glyph-name]"
+  | "[glyph-orientation-horizontal]"
+  | "[glyph-orientation-vertical]"
+  | "[glyphRef]"
+  | "[gradientTransform]"
+  | "[gradientUnits]"
+  | "[graphical]"
+  | "[hanging]"
+  | "[height]"
+  | "[horiz-adv-x]"
+  | "[horiz-origin-x]"
+  | "[horiz-origin-y]"
+  | "[href]"
+  | "[hreflang]"
+  | "[id]"
+  | "[ideographic]"
+  | "[image-rendering]"
+  | "[in2]"
+  | "[in]"
+  | "[k1]"
+  | "[k2]"
+  | "[k3]"
+  | "[k4]"
+  | "[k]"
+  | "[kernelMatrix]"
+  | "[kernelUnitLength]"
+  | "[kerning]"
+  | "[keyPoints]"
+  | "[lang]"
+  | "[lengthAdjust]"
+  | "[letter-spacing]"
+  | "[lighting-color]"
+  | "[limitingConeAngle]"
+  | "[marker-end]"
+  | "[marker-mid]"
+  | "[marker-start]"
+  | "[markerHeight]"
+  | "[markerUnits]"
+  | "[markerWidth]"
+  | "[maskContentUnits]"
+  | "[maskUnits]"
+  | "[mask]"
+  | "[mathematical]"
+  | "[media]"
+  | "[mode]"
+  | "[name]"
+  | "[numOctaves]"
+  | "[offset]"
+  | "[opacity]"
+  | "[operator]"
+  | "[order]"
+  | "[orient]"
+  | "[orientation]"
+  | "[origin]"
+  | "[overflow]"
+  | "[overline-position]"
+  | "[overline-thickness]"
+  | "[paint-order]"
+  | "[panose-1]"
+  | "[path]"
+  | "[patternContentUnits]"
+  | "[patternTransform]"
+  | "[patternUnits]"
+  | "[ping]"
+  | "[pointer-events]"
+  | "[pointsAtX]"
+  | "[pointsAtY]"
+  | "[pointsAtZ]"
+  | "[points]"
+  | "[preserveAlpha]"
+  | "[preserveAspectRatio]"
+  | "[primitiveUnits]"
+  | "[r]"
+  | "[radius]"
+  | "[refX]"
+  | "[refY]"
+  | "[referrerpolicy]"
+  | "[rel]"
+  | "[repeatCount]"
+  | "[requiredExtensions]"
+  | "[requiredFeatures]"
+  | "[rotate]"
+  | "[rx]"
+  | "[ry]"
+  | "[scale]"
+  | "[seed]"
+  | "[shape-rendering]"
+  | "[side]"
+  | "[slope]"
+  | "[solid-color]"
+  | "[solid-opacity]"
+  | "[spacing]"
+  | "[specularConstant]"
+  | "[specularExponent]"
+  | "[spreadMethod]"
+  | "[startOffset]"
+  | "[stdDeviation]"
+  | "[stemh]"
+  | "[stemv]"
+  | "[stitchTiles]"
+  | "[stop-color]"
+  | "[stop-opacity]"
+  | "[strikethrough-position]"
+  | "[strikethrough-thickness]"
+  | "[string]"
+  | "[stroke-dasharray]"
+  | "[stroke-dashoffset]"
+  | "[stroke-linecap]"
+  | "[stroke-linejoin]"
+  | "[stroke-miterlimit]"
+  | "[stroke-opacity]"
+  | "[stroke-width]"
+  | "[stroke]"
+  | "[style]"
+  | "[surfaceScale]"
+  | "[systemLanguage]"
+  | "[tabindex]"
+  | "[targetX]"
+  | "[targetY]"
+  | "[target]"
+  | "[text-anchor]"
+  | "[text-decoration]"
+  | "[text-overflow]"
+  | "[text-rendering]"
+  | "[textLength]"
+  | "[title]"
+  | "[to]"
+  | "[transform-origin]"
+  | "[transform]"
+  | "[type]"
+  | "[u1]"
+  | "[u2]"
+  | "[underline-position]"
+  | "[underline-thickness]"
+  | "[unicode-bidi]"
+  | "[unicode-range]"
+  | "[unicode]"
+  | "[units-per-em]"
+  | "[v-alphabetic]"
+  | "[v-hanging]"
+  | "[v-ideographic]"
+  | "[v-mathematical]"
+  | "[values]"
+  | "[vector-effect]"
+  | "[version]"
+  | "[vert-adv-y]"
+  | "[vert-origin-x]"
+  | "[vert-origin-y]"
+  | "[viewBox]"
+  | "[viewTarget]"
+  | "[visibility]"
+  | "[white-space]"
+  | "[width]"
+  | "[widths]"
+  | "[word-spacing]"
+  | "[writing-mode]"
+  | "[x-height]"
+  | "[x1]"
+  | "[x2]"
+  | "[xChannelSelector]"
+  | "[x]"
+  | "[y1]"
+  | "[y2]"
+  | "[yChannelSelector]"
+  | "[y]"
+  | "[z]"
+  | "[zoomAndPan]";
+
+export type Globals = "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset";
+
+export namespace Property {
+  export type AccentColor = Globals | DataType.Color | "auto";
+
+  export type AlignContent = Globals | DataType.ContentDistribution | DataType.ContentPosition | "baseline" | "normal" | (string & {});
+
+  export type AlignItems = Globals | DataType.SelfPosition | "baseline" | "normal" | "stretch" | (string & {});
+
+  export type AlignSelf = Globals | DataType.SelfPosition | "auto" | "baseline" | "normal" | "stretch" | (string & {});
+
+  export type AlignTracks = Globals | DataType.ContentDistribution | DataType.ContentPosition | "baseline" | "normal" | (string & {});
+
+  export type All = Globals;
+
+  export type Animation<TTime = string & {}> = Globals | DataType.SingleAnimation<TTime> | (string & {});
+
+  export type AnimationComposition = Globals | DataType.SingleAnimationComposition | (string & {});
+
+  export type AnimationDelay<TTime = string & {}> = Globals | TTime | (string & {});
+
+  export type AnimationDirection = Globals | DataType.SingleAnimationDirection | (string & {});
+
+  export type AnimationDuration<TTime = string & {}> = Globals | TTime | (string & {});
+
+  export type AnimationFillMode = Globals | DataType.SingleAnimationFillMode | (string & {});
+
+  export type AnimationIterationCount = Globals | "infinite" | (string & {}) | (number & {});
+
+  export type AnimationName = Globals | "none" | (string & {});
+
+  export type AnimationPlayState = Globals | "paused" | "running" | (string & {});
+
+  export type AnimationRange<TLength = (string & {}) | 0> = Globals | DataType.TimelineRangeName | TLength | "normal" | (string & {});
+
+  export type AnimationRangeEnd<TLength = (string & {}) | 0> = Globals | DataType.TimelineRangeName | TLength | "normal" | (string & {});
+
+  export type AnimationRangeStart<TLength = (string & {}) | 0> = Globals | DataType.TimelineRangeName | TLength | "normal" | (string & {});
+
+  export type AnimationTimeline = Globals | DataType.SingleAnimationTimeline | (string & {});
+
+  export type AnimationTimingFunction = Globals | DataType.EasingFunction | (string & {});
+
+  export type Appearance = Globals | DataType.CompatAuto | "auto" | "menulist-button" | "none" | "textfield";
+
+  export type AspectRatio = Globals | "auto" | (string & {}) | (number & {});
+
+  export type Azimuth =
+    | Globals
+    | "behind"
+    | "center"
+    | "center-left"
+    | "center-right"
+    | "far-left"
+    | "far-right"
+    | "left"
+    | "left-side"
+    | "leftwards"
+    | "right"
+    | "right-side"
+    | "rightwards"
+    | (string & {});
+
+  export type BackdropFilter = Globals | "none" | (string & {});
+
+  export type BackfaceVisibility = Globals | "hidden" | "visible";
+
+  export type Background<TLength = (string & {}) | 0> = Globals | DataType.FinalBgLayer<TLength> | (string & {});
+
+  export type BackgroundAttachment = Globals | DataType.Attachment | (string & {});
+
+  export type BackgroundBlendMode = Globals | DataType.BlendMode | (string & {});
+
+  export type BackgroundClip = Globals | DataType.Box | (string & {});
+
+  export type BackgroundColor = Globals | DataType.Color;
+
+  export type BackgroundImage = Globals | "none" | (string & {});
+
+  export type BackgroundOrigin = Globals | DataType.Box | (string & {});
+
+  export type BackgroundPosition<TLength = (string & {}) | 0> = Globals | DataType.BgPosition<TLength> | (string & {});
+
+  export type BackgroundPositionX<TLength = (string & {}) | 0> = Globals | TLength | "center" | "left" | "right" | "x-end" | "x-start" | (string & {});
+
+  export type BackgroundPositionY<TLength = (string & {}) | 0> = Globals | TLength | "bottom" | "center" | "top" | "y-end" | "y-start" | (string & {});
+
+  export type BackgroundRepeat = Globals | DataType.RepeatStyle | (string & {});
+
+  export type BackgroundSize<TLength = (string & {}) | 0> = Globals | DataType.BgSize<TLength> | (string & {});
+
+  export type BlockOverflow = Globals | "clip" | "ellipsis" | (string & {});
+
+  export type BlockSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "auto"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type Border<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderBlock<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderBlockColor = Globals | DataType.Color | (string & {});
+
+  export type BorderBlockEnd<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderBlockEndColor = Globals | DataType.Color;
+
+  export type BorderBlockEndStyle = Globals | DataType.LineStyle;
+
+  export type BorderBlockEndWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderBlockStart<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderBlockStartColor = Globals | DataType.Color;
+
+  export type BorderBlockStartStyle = Globals | DataType.LineStyle;
+
+  export type BorderBlockStartWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderBlockStyle = Globals | DataType.LineStyle;
+
+  export type BorderBlockWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderBottom<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderBottomColor = Globals | DataType.Color;
+
+  export type BorderBottomLeftRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderBottomRightRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderBottomStyle = Globals | DataType.LineStyle;
+
+  export type BorderBottomWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderCollapse = Globals | "collapse" | "separate";
+
+  export type BorderColor = Globals | DataType.Color | (string & {});
+
+  export type BorderEndEndRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderEndStartRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderImage = Globals | "none" | "repeat" | "round" | "space" | "stretch" | (string & {}) | (number & {});
+
+  export type BorderImageOutset<TLength = (string & {}) | 0> = Globals | TLength | (string & {}) | (number & {});
+
+  export type BorderImageRepeat = Globals | "repeat" | "round" | "space" | "stretch" | (string & {});
+
+  export type BorderImageSlice = Globals | (string & {}) | (number & {});
+
+  export type BorderImageSource = Globals | "none" | (string & {});
+
+  export type BorderImageWidth<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {}) | (number & {});
+
+  export type BorderInline<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderInlineColor = Globals | DataType.Color | (string & {});
+
+  export type BorderInlineEnd<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderInlineEndColor = Globals | DataType.Color;
+
+  export type BorderInlineEndStyle = Globals | DataType.LineStyle;
+
+  export type BorderInlineEndWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderInlineStart<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderInlineStartColor = Globals | DataType.Color;
+
+  export type BorderInlineStartStyle = Globals | DataType.LineStyle;
+
+  export type BorderInlineStartWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderInlineStyle = Globals | DataType.LineStyle;
+
+  export type BorderInlineWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderLeft<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderLeftColor = Globals | DataType.Color;
+
+  export type BorderLeftStyle = Globals | DataType.LineStyle;
+
+  export type BorderLeftWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderRight<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderRightColor = Globals | DataType.Color;
+
+  export type BorderRightStyle = Globals | DataType.LineStyle;
+
+  export type BorderRightWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderSpacing<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderStartEndRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderStartStartRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderStyle = Globals | DataType.LineStyle | (string & {});
+
+  export type BorderTop<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type BorderTopColor = Globals | DataType.Color;
+
+  export type BorderTopLeftRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderTopRightRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type BorderTopStyle = Globals | DataType.LineStyle;
+
+  export type BorderTopWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type BorderWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | (string & {});
+
+  export type Bottom<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type BoxAlign = Globals | "baseline" | "center" | "end" | "start" | "stretch";
+
+  export type BoxDecorationBreak = Globals | "clone" | "slice";
+
+  export type BoxDirection = Globals | "inherit" | "normal" | "reverse";
+
+  export type BoxFlex = Globals | (number & {}) | (string & {});
+
+  export type BoxFlexGroup = Globals | (number & {}) | (string & {});
+
+  export type BoxLines = Globals | "multiple" | "single";
+
+  export type BoxOrdinalGroup = Globals | (number & {}) | (string & {});
+
+  export type BoxOrient = Globals | "block-axis" | "horizontal" | "inherit" | "inline-axis" | "vertical";
+
+  export type BoxPack = Globals | "center" | "end" | "justify" | "start";
+
+  export type BoxShadow = Globals | "none" | (string & {});
+
+  export type BoxSizing = Globals | "border-box" | "content-box";
+
+  export type BreakAfter =
+    | Globals
+    | "all"
+    | "always"
+    | "auto"
+    | "avoid"
+    | "avoid-column"
+    | "avoid-page"
+    | "avoid-region"
+    | "column"
+    | "left"
+    | "page"
+    | "recto"
+    | "region"
+    | "right"
+    | "verso";
+
+  export type BreakBefore =
+    | Globals
+    | "all"
+    | "always"
+    | "auto"
+    | "avoid"
+    | "avoid-column"
+    | "avoid-page"
+    | "avoid-region"
+    | "column"
+    | "left"
+    | "page"
+    | "recto"
+    | "region"
+    | "right"
+    | "verso";
+
+  export type BreakInside = Globals | "auto" | "avoid" | "avoid-column" | "avoid-page" | "avoid-region";
+
+  export type CaptionSide = Globals | "block-end" | "block-start" | "bottom" | "inline-end" | "inline-start" | "top";
+
+  export type Caret = Globals | DataType.Color | "auto" | "bar" | "block" | "underscore" | (string & {});
+
+  export type CaretColor = Globals | DataType.Color | "auto";
+
+  export type CaretShape = Globals | "auto" | "bar" | "block" | "underscore";
+
+  export type Clear = Globals | "both" | "inline-end" | "inline-start" | "left" | "none" | "right";
+
+  export type Clip = Globals | "auto" | (string & {});
+
+  export type ClipPath = Globals | DataType.GeometryBox | "none" | (string & {});
+
+  export type Color = Globals | DataType.Color;
+
+  export type PrintColorAdjust = Globals | "economy" | "exact";
+
+  export type ColorScheme = Globals | "dark" | "light" | "normal" | (string & {});
+
+  export type ColumnCount = Globals | "auto" | (number & {}) | (string & {});
+
+  export type ColumnFill = Globals | "auto" | "balance" | "balance-all";
+
+  export type ColumnGap<TLength = (string & {}) | 0> = Globals | TLength | "normal" | (string & {});
+
+  export type ColumnRule<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type ColumnRuleColor = Globals | DataType.Color;
+
+  export type ColumnRuleStyle = Globals | DataType.LineStyle | (string & {});
+
+  export type ColumnRuleWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | (string & {});
+
+  export type ColumnSpan = Globals | "all" | "none";
+
+  export type ColumnWidth<TLength = (string & {}) | 0> = Globals | TLength | "auto";
+
+  export type Columns<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {}) | (number & {});
+
+  export type Contain = Globals | "content" | "inline-size" | "layout" | "none" | "paint" | "size" | "strict" | "style" | (string & {});
+
+  export type ContainIntrinsicBlockSize<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type ContainIntrinsicHeight<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type ContainIntrinsicInlineSize<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type ContainIntrinsicSize<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type ContainIntrinsicWidth<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type Container = Globals | "none" | (string & {});
+
+  export type ContainerName = Globals | "none" | (string & {});
+
+  export type ContainerType = Globals | "inline-size" | "normal" | "size";
+
+  export type Content = Globals | DataType.ContentList | "none" | "normal" | (string & {});
+
+  export type ContentVisibility = Globals | "auto" | "hidden" | "visible";
+
+  export type CounterIncrement = Globals | "none" | (string & {});
+
+  export type CounterReset = Globals | "none" | (string & {});
+
+  export type CounterSet = Globals | "none" | (string & {});
+
+  export type Cursor =
+    | Globals
+    | "-moz-grab"
+    | "-webkit-grab"
+    | "alias"
+    | "all-scroll"
+    | "auto"
+    | "cell"
+    | "col-resize"
+    | "context-menu"
+    | "copy"
+    | "crosshair"
+    | "default"
+    | "e-resize"
+    | "ew-resize"
+    | "grab"
+    | "grabbing"
+    | "help"
+    | "move"
+    | "n-resize"
+    | "ne-resize"
+    | "nesw-resize"
+    | "no-drop"
+    | "none"
+    | "not-allowed"
+    | "ns-resize"
+    | "nw-resize"
+    | "nwse-resize"
+    | "pointer"
+    | "progress"
+    | "row-resize"
+    | "s-resize"
+    | "se-resize"
+    | "sw-resize"
+    | "text"
+    | "vertical-text"
+    | "w-resize"
+    | "wait"
+    | "zoom-in"
+    | "zoom-out"
+    | (string & {});
+
+  export type Direction = Globals | "ltr" | "rtl";
+
+  export type Display =
+    | Globals
+    | DataType.DisplayOutside
+    | DataType.DisplayInside
+    | DataType.DisplayInternal
+    | DataType.DisplayLegacy
+    | "contents"
+    | "list-item"
+    | "none"
+    | (string & {});
+
+  export type EmptyCells = Globals | "hide" | "show";
+
+  export type Filter = Globals | "none" | (string & {});
+
+  export type Flex<TLength = (string & {}) | 0> = Globals | TLength | "auto" | "content" | "fit-content" | "max-content" | "min-content" | "none" | (string & {}) | (number & {});
+
+  export type FlexBasis<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-auto"
+    | "auto"
+    | "content"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type FlexDirection = Globals | "column" | "column-reverse" | "row" | "row-reverse";
+
+  export type FlexFlow = Globals | "column" | "column-reverse" | "nowrap" | "row" | "row-reverse" | "wrap" | "wrap-reverse" | (string & {});
+
+  export type FlexGrow = Globals | (number & {}) | (string & {});
+
+  export type FlexShrink = Globals | (number & {}) | (string & {});
+
+  export type FlexWrap = Globals | "nowrap" | "wrap" | "wrap-reverse";
+
+  export type Float = Globals | "inline-end" | "inline-start" | "left" | "none" | "right";
+
+  export type Font = Globals | "caption" | "icon" | "menu" | "message-box" | "small-caption" | "status-bar" | (string & {});
+
+  export type FontFamily = Globals | DataType.GenericFamily | (string & {});
+
+  export type FontFeatureSettings = Globals | "normal" | (string & {});
+
+  export type FontKerning = Globals | "auto" | "none" | "normal";
+
+  export type FontLanguageOverride = Globals | "normal" | (string & {});
+
+  export type FontOpticalSizing = Globals | "auto" | "none";
+
+  export type FontPalette = Globals | "dark" | "light" | "normal" | (string & {});
+
+  export type FontSize<TLength = (string & {}) | 0> = Globals | DataType.AbsoluteSize | TLength | "larger" | "smaller" | (string & {});
+
+  export type FontSizeAdjust = Globals | "from-font" | "none" | (string & {}) | (number & {});
+
+  export type FontSmooth<TLength = (string & {}) | 0> = Globals | DataType.AbsoluteSize | TLength | "always" | "auto" | "never";
+
+  export type FontStretch = Globals | DataType.FontStretchAbsolute;
+
+  export type FontStyle = Globals | "italic" | "normal" | "oblique" | (string & {});
+
+  export type FontSynthesis = Globals | "none" | "position" | "small-caps" | "style" | "weight" | (string & {});
+
+  export type FontSynthesisPosition = Globals | "auto" | "none";
+
+  export type FontSynthesisSmallCaps = Globals | "auto" | "none";
+
+  export type FontSynthesisStyle = Globals | "auto" | "none";
+
+  export type FontSynthesisWeight = Globals | "auto" | "none";
+
+  export type FontVariant =
+    | Globals
+    | DataType.EastAsianVariantValues
+    | "all-petite-caps"
+    | "all-small-caps"
+    | "common-ligatures"
+    | "contextual"
+    | "diagonal-fractions"
+    | "discretionary-ligatures"
+    | "full-width"
+    | "historical-forms"
+    | "historical-ligatures"
+    | "lining-nums"
+    | "no-common-ligatures"
+    | "no-contextual"
+    | "no-discretionary-ligatures"
+    | "no-historical-ligatures"
+    | "none"
+    | "normal"
+    | "oldstyle-nums"
+    | "ordinal"
+    | "petite-caps"
+    | "proportional-nums"
+    | "proportional-width"
+    | "ruby"
+    | "slashed-zero"
+    | "small-caps"
+    | "stacked-fractions"
+    | "tabular-nums"
+    | "titling-caps"
+    | "unicase"
+    | (string & {});
+
+  export type FontVariantAlternates = Globals | "historical-forms" | "normal" | (string & {});
+
+  export type FontVariantCaps = Globals | "all-petite-caps" | "all-small-caps" | "normal" | "petite-caps" | "small-caps" | "titling-caps" | "unicase";
+
+  export type FontVariantEastAsian = Globals | DataType.EastAsianVariantValues | "full-width" | "normal" | "proportional-width" | "ruby" | (string & {});
+
+  export type FontVariantEmoji = Globals | "emoji" | "normal" | "text" | "unicode";
+
+  export type FontVariantLigatures =
+    | Globals
+    | "common-ligatures"
+    | "contextual"
+    | "discretionary-ligatures"
+    | "historical-ligatures"
+    | "no-common-ligatures"
+    | "no-contextual"
+    | "no-discretionary-ligatures"
+    | "no-historical-ligatures"
+    | "none"
+    | "normal"
+    | (string & {});
+
+  export type FontVariantNumeric =
+    | Globals
+    | "diagonal-fractions"
+    | "lining-nums"
+    | "normal"
+    | "oldstyle-nums"
+    | "ordinal"
+    | "proportional-nums"
+    | "slashed-zero"
+    | "stacked-fractions"
+    | "tabular-nums"
+    | (string & {});
+
+  export type FontVariantPosition = Globals | "normal" | "sub" | "super";
+
+  export type FontVariationSettings = Globals | "normal" | (string & {});
+
+  export type FontWeight = Globals | DataType.FontWeightAbsolute | "bolder" | "lighter";
+
+  export type ForcedColorAdjust = Globals | "auto" | "none";
+
+  export type Gap<TLength = (string & {}) | 0> = Globals | TLength | "normal" | (string & {});
+
+  export type Grid = Globals | "none" | (string & {});
+
+  export type GridArea = Globals | DataType.GridLine | (string & {});
+
+  export type GridAutoColumns<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | (string & {});
+
+  export type GridAutoFlow = Globals | "column" | "dense" | "row" | (string & {});
+
+  export type GridAutoRows<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | (string & {});
+
+  export type GridColumn = Globals | DataType.GridLine | (string & {});
+
+  export type GridColumnEnd = Globals | DataType.GridLine;
+
+  export type GridColumnGap<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type GridColumnStart = Globals | DataType.GridLine;
+
+  export type GridGap<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type GridRow = Globals | DataType.GridLine | (string & {});
+
+  export type GridRowEnd = Globals | DataType.GridLine;
+
+  export type GridRowGap<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type GridRowStart = Globals | DataType.GridLine;
+
+  export type GridTemplate = Globals | "none" | (string & {});
+
+  export type GridTemplateAreas = Globals | "none" | (string & {});
+
+  export type GridTemplateColumns<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | "none" | "subgrid" | (string & {});
+
+  export type GridTemplateRows<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | "none" | "subgrid" | (string & {});
+
+  export type HangingPunctuation = Globals | "allow-end" | "first" | "force-end" | "last" | "none" | (string & {});
+
+  export type Height<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fit-content"
+    | "auto"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type HyphenateCharacter = Globals | "auto" | (string & {});
+
+  export type HyphenateLimitChars = Globals | "auto" | (string & {}) | (number & {});
+
+  export type Hyphens = Globals | "auto" | "manual" | "none";
+
+  export type ImageOrientation = Globals | "flip" | "from-image" | (string & {});
+
+  export type ImageRendering = Globals | "-moz-crisp-edges" | "-webkit-optimize-contrast" | "auto" | "crisp-edges" | "pixelated";
+
+  export type ImageResolution = Globals | "from-image" | (string & {});
+
+  export type ImeMode = Globals | "active" | "auto" | "disabled" | "inactive" | "normal";
+
+  export type InitialLetter = Globals | "normal" | (string & {}) | (number & {});
+
+  export type InlineSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "auto"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type InputSecurity = Globals | "auto" | "none";
+
+  export type Inset<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetBlock<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetBlockEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetBlockStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetInline<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetInlineEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type InsetInlineStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type Isolation = Globals | "auto" | "isolate";
+
+  export type JustifyContent = Globals | DataType.ContentDistribution | DataType.ContentPosition | "left" | "normal" | "right" | (string & {});
+
+  export type JustifyItems = Globals | DataType.SelfPosition | "baseline" | "left" | "legacy" | "normal" | "right" | "stretch" | (string & {});
+
+  export type JustifySelf = Globals | DataType.SelfPosition | "auto" | "baseline" | "left" | "normal" | "right" | "stretch" | (string & {});
+
+  export type JustifyTracks = Globals | DataType.ContentDistribution | DataType.ContentPosition | "left" | "normal" | "right" | (string & {});
+
+  export type Left<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type LetterSpacing<TLength = (string & {}) | 0> = Globals | TLength | "normal";
+
+  export type LineBreak = Globals | "anywhere" | "auto" | "loose" | "normal" | "strict";
+
+  export type LineClamp = Globals | "none" | (number & {}) | (string & {});
+
+  export type LineHeight<TLength = (string & {}) | 0> = Globals | TLength | "normal" | (string & {}) | (number & {});
+
+  export type LineHeightStep<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ListStyle = Globals | "inside" | "none" | "outside" | (string & {});
+
+  export type ListStyleImage = Globals | "none" | (string & {});
+
+  export type ListStylePosition = Globals | "inside" | "outside";
+
+  export type ListStyleType = Globals | "none" | (string & {});
+
+  export type Margin<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginBlock<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginBlockEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginBlockStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginBottom<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginInline<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginInlineEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginInlineStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginLeft<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginRight<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginTop<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type MarginTrim = Globals | "all" | "in-flow" | "none";
+
+  export type Mask<TLength = (string & {}) | 0> = Globals | DataType.MaskLayer<TLength> | (string & {});
+
+  export type MaskBorder = Globals | "alpha" | "luminance" | "none" | "repeat" | "round" | "space" | "stretch" | (string & {}) | (number & {});
+
+  export type MaskBorderMode = Globals | "alpha" | "luminance";
+
+  export type MaskBorderOutset<TLength = (string & {}) | 0> = Globals | TLength | (string & {}) | (number & {});
+
+  export type MaskBorderRepeat = Globals | "repeat" | "round" | "space" | "stretch" | (string & {});
+
+  export type MaskBorderSlice = Globals | (string & {}) | (number & {});
+
+  export type MaskBorderSource = Globals | "none" | (string & {});
+
+  export type MaskBorderWidth<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {}) | (number & {});
+
+  export type MaskClip = Globals | DataType.GeometryBox | "no-clip" | (string & {});
+
+  export type MaskComposite = Globals | DataType.CompositingOperator | (string & {});
+
+  export type MaskImage = Globals | "none" | (string & {});
+
+  export type MaskMode = Globals | DataType.MaskingMode | (string & {});
+
+  export type MaskOrigin = Globals | DataType.GeometryBox | (string & {});
+
+  export type MaskPosition<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | (string & {});
+
+  export type MaskRepeat = Globals | DataType.RepeatStyle | (string & {});
+
+  export type MaskSize<TLength = (string & {}) | 0> = Globals | DataType.BgSize<TLength> | (string & {});
+
+  export type MaskType = Globals | "alpha" | "luminance";
+
+  export type MasonryAutoFlow = Globals | "definite-first" | "next" | "ordered" | "pack" | (string & {});
+
+  export type MathDepth = Globals | "auto-add" | (string & {}) | (number & {});
+
+  export type MathShift = Globals | "compact" | "normal";
+
+  export type MathStyle = Globals | "compact" | "normal";
+
+  export type MaxBlockSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | "none"
+    | (string & {});
+
+  export type MaxHeight<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fit-content"
+    | "-webkit-max-content"
+    | "-webkit-min-content"
+    | "fit-content"
+    | "intrinsic"
+    | "max-content"
+    | "min-content"
+    | "none"
+    | (string & {});
+
+  export type MaxInlineSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | "none"
+    | (string & {});
+
+  export type MaxLines = Globals | "none" | (number & {}) | (string & {});
+
+  export type MaxWidth<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fit-content"
+    | "-webkit-max-content"
+    | "-webkit-min-content"
+    | "fit-content"
+    | "intrinsic"
+    | "max-content"
+    | "min-content"
+    | "none"
+    | (string & {});
+
+  export type MinBlockSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "auto"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type MinHeight<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fit-content"
+    | "-webkit-max-content"
+    | "-webkit-min-content"
+    | "auto"
+    | "fit-content"
+    | "intrinsic"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type MinInlineSize<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "auto"
+    | "fit-content"
+    | "max-content"
+    | "min-content"
+    | (string & {});
+
+  export type MinWidth<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fill-available"
+    | "-webkit-fit-content"
+    | "-webkit-max-content"
+    | "-webkit-min-content"
+    | "auto"
+    | "fit-content"
+    | "intrinsic"
+    | "max-content"
+    | "min-content"
+    | "min-intrinsic"
+    | (string & {});
+
+  export type MixBlendMode = Globals | DataType.BlendMode | "plus-lighter";
+
+  export type Offset<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | "auto" | "none" | "normal" | (string & {});
+
+  export type OffsetDistance<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type OffsetPath = Globals | "none" | (string & {});
+
+  export type OffsetRotate = Globals | "auto" | "reverse" | (string & {});
+
+  export type ObjectFit = Globals | "contain" | "cover" | "fill" | "none" | "scale-down";
+
+  export type ObjectPosition<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength>;
+
+  export type OffsetAnchor<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | "auto";
+
+  export type OffsetPosition<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | "auto" | "normal";
+
+  export type Opacity = Globals | (string & {}) | (number & {});
+
+  export type Order = Globals | (number & {}) | (string & {});
+
+  export type Orphans = Globals | (number & {}) | (string & {});
+
+  export type Outline<TLength = (string & {}) | 0> = Globals | DataType.Color | DataType.LineStyle | DataType.LineWidth<TLength> | "auto" | "invert" | (string & {});
+
+  export type OutlineColor = Globals | DataType.Color | "invert";
+
+  export type OutlineOffset<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type OutlineStyle = Globals | DataType.LineStyle | "auto" | (string & {});
+
+  export type OutlineWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength>;
+
+  export type Overflow = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible" | (string & {});
+
+  export type OverflowAnchor = Globals | "auto" | "none";
+
+  export type OverflowBlock = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+  export type OverflowClipBox = Globals | "content-box" | "padding-box";
+
+  export type OverflowClipMargin<TLength = (string & {}) | 0> = Globals | DataType.VisualBox | TLength | (string & {});
+
+  export type OverflowInline = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+  export type OverflowWrap = Globals | "anywhere" | "break-word" | "normal";
+
+  export type OverflowX = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+  export type OverflowY = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+  export type Overlay = Globals | "auto" | "none";
+
+  export type OverscrollBehavior = Globals | "auto" | "contain" | "none" | (string & {});
+
+  export type OverscrollBehaviorBlock = Globals | "auto" | "contain" | "none";
+
+  export type OverscrollBehaviorInline = Globals | "auto" | "contain" | "none";
+
+  export type OverscrollBehaviorX = Globals | "auto" | "contain" | "none";
+
+  export type OverscrollBehaviorY = Globals | "auto" | "contain" | "none";
+
+  export type Padding<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingBlock<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingBlockEnd<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingBlockStart<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingBottom<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingInline<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingInlineEnd<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingInlineStart<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingLeft<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingRight<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type PaddingTop<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type Page = Globals | "auto" | (string & {});
+
+  export type PageBreakAfter = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";
+
+  export type PageBreakBefore = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";
+
+  export type PageBreakInside = Globals | "auto" | "avoid";
+
+  export type PaintOrder = Globals | "fill" | "markers" | "normal" | "stroke" | (string & {});
+
+  export type Perspective<TLength = (string & {}) | 0> = Globals | TLength | "none";
+
+  export type PerspectiveOrigin<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength>;
+
+  export type PlaceContent = Globals | DataType.ContentDistribution | DataType.ContentPosition | "baseline" | "normal" | (string & {});
+
+  export type PlaceItems = Globals | DataType.SelfPosition | "baseline" | "normal" | "stretch" | (string & {});
+
+  export type PlaceSelf = Globals | DataType.SelfPosition | "auto" | "baseline" | "normal" | "stretch" | (string & {});
+
+  export type PointerEvents = Globals | "all" | "auto" | "fill" | "inherit" | "none" | "painted" | "stroke" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke";
+
+  export type Position = Globals | "-webkit-sticky" | "absolute" | "fixed" | "relative" | "static" | "sticky";
+
+  export type Quotes = Globals | "auto" | "none" | (string & {});
+
+  export type Resize = Globals | "block" | "both" | "horizontal" | "inline" | "none" | "vertical";
+
+  export type Right<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type Rotate = Globals | "none" | (string & {});
+
+  export type RowGap<TLength = (string & {}) | 0> = Globals | TLength | "normal" | (string & {});
+
+  export type RubyAlign = Globals | "center" | "space-around" | "space-between" | "start";
+
+  export type RubyMerge = Globals | "auto" | "collapse" | "separate";
+
+  export type RubyPosition = Globals | "alternate" | "inter-character" | "over" | "under" | (string & {});
+
+  export type Scale = Globals | "none" | (string & {}) | (number & {});
+
+  export type ScrollBehavior = Globals | "auto" | "smooth";
+
+  export type ScrollMargin<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type ScrollMarginBlock<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type ScrollMarginBlockEnd<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginBlockStart<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginBottom<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginInline<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type ScrollMarginInlineEnd<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginInlineStart<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginLeft<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginRight<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollMarginTop<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type ScrollPadding<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingBlock<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingBlockEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingBlockStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingBottom<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingInline<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingInlineEnd<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingInlineStart<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingLeft<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingRight<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollPaddingTop<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ScrollSnapAlign = Globals | "center" | "end" | "none" | "start" | (string & {});
+
+  export type ScrollSnapCoordinate<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | "none" | (string & {});
+
+  export type ScrollSnapDestination<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength>;
+
+  export type ScrollSnapPointsX = Globals | "none" | (string & {});
+
+  export type ScrollSnapPointsY = Globals | "none" | (string & {});
+
+  export type ScrollSnapStop = Globals | "always" | "normal";
+
+  export type ScrollSnapType = Globals | "block" | "both" | "inline" | "none" | "x" | "y" | (string & {});
+
+  export type ScrollSnapTypeX = Globals | "mandatory" | "none" | "proximity";
+
+  export type ScrollSnapTypeY = Globals | "mandatory" | "none" | "proximity";
+
+  export type ScrollTimeline = Globals | "none" | (string & {});
+
+  export type ScrollTimelineAxis = Globals | "block" | "inline" | "x" | "y" | (string & {});
+
+  export type ScrollTimelineName = Globals | "none" | (string & {});
+
+  export type ScrollbarColor = Globals | "auto" | (string & {});
+
+  export type ScrollbarGutter = Globals | "auto" | "stable" | (string & {});
+
+  export type ScrollbarWidth = Globals | "auto" | "none" | "thin";
+
+  export type ShapeImageThreshold = Globals | (string & {}) | (number & {});
+
+  export type ShapeMargin<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type ShapeOutside = Globals | DataType.Box | "margin-box" | "none" | (string & {});
+
+  export type TabSize<TLength = (string & {}) | 0> = Globals | TLength | (number & {}) | (string & {});
+
+  export type TableLayout = Globals | "auto" | "fixed";
+
+  export type TextAlign = Globals | "-webkit-match-parent" | "center" | "end" | "justify" | "left" | "match-parent" | "right" | "start";
+
+  export type TextAlignLast = Globals | "auto" | "center" | "end" | "justify" | "left" | "right" | "start";
+
+  export type TextCombineUpright = Globals | "all" | "none" | (string & {});
+
+  export type TextDecoration<TLength = (string & {}) | 0> =
+    | Globals
+    | DataType.Color
+    | TLength
+    | "auto"
+    | "blink"
+    | "dashed"
+    | "dotted"
+    | "double"
+    | "from-font"
+    | "grammar-error"
+    | "line-through"
+    | "none"
+    | "overline"
+    | "solid"
+    | "spelling-error"
+    | "underline"
+    | "wavy"
+    | (string & {});
+
+  export type TextDecorationColor = Globals | DataType.Color;
+
+  export type TextDecorationLine = Globals | "blink" | "grammar-error" | "line-through" | "none" | "overline" | "spelling-error" | "underline" | (string & {});
+
+  export type TextDecorationSkip = Globals | "box-decoration" | "edges" | "leading-spaces" | "none" | "objects" | "spaces" | "trailing-spaces" | (string & {});
+
+  export type TextDecorationSkipInk = Globals | "all" | "auto" | "none";
+
+  export type TextDecorationStyle = Globals | "dashed" | "dotted" | "double" | "solid" | "wavy";
+
+  export type TextDecorationThickness<TLength = (string & {}) | 0> = Globals | TLength | "auto" | "from-font" | (string & {});
+
+  export type TextEmphasis = Globals | DataType.Color | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | (string & {});
+
+  export type TextEmphasisColor = Globals | DataType.Color;
+
+  export type TextEmphasisPosition = Globals | (string & {});
+
+  export type TextEmphasisStyle = Globals | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | (string & {});
+
+  export type TextIndent<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type TextJustify = Globals | "auto" | "inter-character" | "inter-word" | "none";
+
+  export type TextOrientation = Globals | "mixed" | "sideways" | "upright";
+
+  export type TextOverflow = Globals | "clip" | "ellipsis" | (string & {});
+
+  export type TextRendering = Globals | "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed";
+
+  export type TextShadow = Globals | "none" | (string & {});
+
+  export type TextSizeAdjust = Globals | "auto" | "none" | (string & {});
+
+  export type TextTransform = Globals | "capitalize" | "full-size-kana" | "full-width" | "lowercase" | "none" | "uppercase";
+
+  export type TextUnderlineOffset<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type TextUnderlinePosition = Globals | "auto" | "from-font" | "left" | "right" | "under" | (string & {});
+
+  export type TextWrap = Globals | "balance" | "nowrap" | "pretty" | "stable" | "wrap";
+
+  export type TimelineScope = Globals | "none" | (string & {});
+
+  export type Top<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type TouchAction =
+    | Globals
+    | "-ms-manipulation"
+    | "-ms-none"
+    | "-ms-pinch-zoom"
+    | "auto"
+    | "manipulation"
+    | "none"
+    | "pan-down"
+    | "pan-left"
+    | "pan-right"
+    | "pan-up"
+    | "pan-x"
+    | "pan-y"
+    | "pinch-zoom"
+    | (string & {});
+
+  export type Transform = Globals | "none" | (string & {});
+
+  export type TransformBox = Globals | "border-box" | "content-box" | "fill-box" | "stroke-box" | "view-box";
+
+  export type TransformOrigin<TLength = (string & {}) | 0> = Globals | TLength | "bottom" | "center" | "left" | "right" | "top" | (string & {});
+
+  export type TransformStyle = Globals | "flat" | "preserve-3d";
+
+  export type Transition<TTime = string & {}> = Globals | DataType.SingleTransition<TTime> | (string & {});
+
+  export type TransitionBehavior = Globals | "allow-discrete" | "normal" | (string & {});
+
+  export type TransitionDelay<TTime = string & {}> = Globals | TTime | (string & {});
+
+  export type TransitionDuration<TTime = string & {}> = Globals | TTime | (string & {});
+
+  export type TransitionProperty = Globals | "all" | "none" | (string & {});
+
+  export type TransitionTimingFunction = Globals | DataType.EasingFunction | (string & {});
+
+  export type Translate<TLength = (string & {}) | 0> = Globals | TLength | "none" | (string & {});
+
+  export type UnicodeBidi =
+    | Globals
+    | "-moz-isolate"
+    | "-moz-isolate-override"
+    | "-moz-plaintext"
+    | "-webkit-isolate"
+    | "-webkit-isolate-override"
+    | "-webkit-plaintext"
+    | "bidi-override"
+    | "embed"
+    | "isolate"
+    | "isolate-override"
+    | "normal"
+    | "plaintext";
+
+  export type UserSelect = Globals | "-moz-none" | "all" | "auto" | "contain" | "element" | "none" | "text";
+
+  export type VerticalAlign<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "baseline"
+    | "bottom"
+    | "middle"
+    | "sub"
+    | "super"
+    | "text-bottom"
+    | "text-top"
+    | "top"
+    | (string & {});
+
+  export type ViewTimeline = Globals | "none" | (string & {});
+
+  export type ViewTimelineAxis = Globals | "block" | "inline" | "x" | "y" | (string & {});
+
+  export type ViewTimelineInset<TLength = (string & {}) | 0> = Globals | TLength | "auto" | (string & {});
+
+  export type ViewTimelineName = Globals | "none" | (string & {});
+
+  export type ViewTransitionName = Globals | "none" | (string & {});
+
+  export type Visibility = Globals | "collapse" | "hidden" | "visible";
+
+  export type WhiteSpace =
+    | Globals
+    | "-moz-pre-wrap"
+    | "balance"
+    | "break-spaces"
+    | "collapse"
+    | "discard"
+    | "discard-after"
+    | "discard-before"
+    | "discard-inner"
+    | "none"
+    | "normal"
+    | "nowrap"
+    | "pre"
+    | "pre-line"
+    | "pre-wrap"
+    | "preserve"
+    | "preserve-breaks"
+    | "preserve-spaces"
+    | "pretty"
+    | "stable"
+    | "wrap"
+    | (string & {});
+
+  export type WhiteSpaceCollapse = Globals | "break-spaces" | "collapse" | "discard" | "preserve" | "preserve-breaks" | "preserve-spaces";
+
+  export type WhiteSpaceTrim = Globals | "discard-after" | "discard-before" | "discard-inner" | "none" | (string & {});
+
+  export type Widows = Globals | (number & {}) | (string & {});
+
+  export type Width<TLength = (string & {}) | 0> =
+    | Globals
+    | TLength
+    | "-moz-fit-content"
+    | "-moz-max-content"
+    | "-moz-min-content"
+    | "-webkit-fit-content"
+    | "-webkit-max-content"
+    | "auto"
+    | "fit-content"
+    | "intrinsic"
+    | "max-content"
+    | "min-content"
+    | "min-intrinsic"
+    | (string & {});
+
+  export type WillChange = Globals | DataType.AnimateableFeature | "auto" | (string & {});
+
+  export type WordBreak = Globals | "break-all" | "break-word" | "keep-all" | "normal";
+
+  export type WordSpacing<TLength = (string & {}) | 0> = Globals | TLength | "normal";
+
+  export type WordWrap = Globals | "break-word" | "normal";
+
+  export type WritingMode = Globals | "horizontal-tb" | "sideways-lr" | "sideways-rl" | "vertical-lr" | "vertical-rl";
+
+  export type ZIndex = Globals | "auto" | (number & {}) | (string & {});
+
+  export type Zoom = Globals | "normal" | "reset" | (string & {}) | (number & {});
+
+  export type MozAppearance =
+    | Globals
+    | "-moz-mac-unified-toolbar"
+    | "-moz-win-borderless-glass"
+    | "-moz-win-browsertabbar-toolbox"
+    | "-moz-win-communications-toolbox"
+    | "-moz-win-communicationstext"
+    | "-moz-win-exclude-glass"
+    | "-moz-win-glass"
+    | "-moz-win-media-toolbox"
+    | "-moz-win-mediatext"
+    | "-moz-window-button-box"
+    | "-moz-window-button-box-maximized"
+    | "-moz-window-button-close"
+    | "-moz-window-button-maximize"
+    | "-moz-window-button-minimize"
+    | "-moz-window-button-restore"
+    | "-moz-window-frame-bottom"
+    | "-moz-window-frame-left"
+    | "-moz-window-frame-right"
+    | "-moz-window-titlebar"
+    | "-moz-window-titlebar-maximized"
+    | "button"
+    | "button-arrow-down"
+    | "button-arrow-next"
+    | "button-arrow-previous"
+    | "button-arrow-up"
+    | "button-bevel"
+    | "button-focus"
+    | "caret"
+    | "checkbox"
+    | "checkbox-container"
+    | "checkbox-label"
+    | "checkmenuitem"
+    | "dualbutton"
+    | "groupbox"
+    | "listbox"
+    | "listitem"
+    | "menuarrow"
+    | "menubar"
+    | "menucheckbox"
+    | "menuimage"
+    | "menuitem"
+    | "menuitemtext"
+    | "menulist"
+    | "menulist-button"
+    | "menulist-text"
+    | "menulist-textfield"
+    | "menupopup"
+    | "menuradio"
+    | "menuseparator"
+    | "meterbar"
+    | "meterchunk"
+    | "none"
+    | "progressbar"
+    | "progressbar-vertical"
+    | "progresschunk"
+    | "progresschunk-vertical"
+    | "radio"
+    | "radio-container"
+    | "radio-label"
+    | "radiomenuitem"
+    | "range"
+    | "range-thumb"
+    | "resizer"
+    | "resizerpanel"
+    | "scale-horizontal"
+    | "scale-vertical"
+    | "scalethumb-horizontal"
+    | "scalethumb-vertical"
+    | "scalethumbend"
+    | "scalethumbstart"
+    | "scalethumbtick"
+    | "scrollbarbutton-down"
+    | "scrollbarbutton-left"
+    | "scrollbarbutton-right"
+    | "scrollbarbutton-up"
+    | "scrollbarthumb-horizontal"
+    | "scrollbarthumb-vertical"
+    | "scrollbartrack-horizontal"
+    | "scrollbartrack-vertical"
+    | "searchfield"
+    | "separator"
+    | "sheet"
+    | "spinner"
+    | "spinner-downbutton"
+    | "spinner-textfield"
+    | "spinner-upbutton"
+    | "splitter"
+    | "statusbar"
+    | "statusbarpanel"
+    | "tab"
+    | "tab-scroll-arrow-back"
+    | "tab-scroll-arrow-forward"
+    | "tabpanel"
+    | "tabpanels"
+    | "textfield"
+    | "textfield-multiline"
+    | "toolbar"
+    | "toolbarbutton"
+    | "toolbarbutton-dropdown"
+    | "toolbargripper"
+    | "toolbox"
+    | "tooltip"
+    | "treeheader"
+    | "treeheadercell"
+    | "treeheadersortarrow"
+    | "treeitem"
+    | "treeline"
+    | "treetwisty"
+    | "treetwistyopen"
+    | "treeview";
+
+  export type MozBinding = Globals | "none" | (string & {});
+
+  export type MozBorderBottomColors = Globals | DataType.Color | "none" | (string & {});
+
+  export type MozBorderLeftColors = Globals | DataType.Color | "none" | (string & {});
+
+  export type MozBorderRightColors = Globals | DataType.Color | "none" | (string & {});
+
+  export type MozBorderTopColors = Globals | DataType.Color | "none" | (string & {});
+
+  export type MozContextProperties = Globals | "fill" | "fill-opacity" | "none" | "stroke" | "stroke-opacity" | (string & {});
+
+  export type MozFloatEdge = Globals | "border-box" | "content-box" | "margin-box" | "padding-box";
+
+  export type MozForceBrokenImageIcon = Globals | 0 | (string & {}) | 1;
+
+  export type MozImageRegion = Globals | "auto" | (string & {});
+
+  export type MozOrient = Globals | "block" | "horizontal" | "inline" | "vertical";
+
+  export type MozOutlineRadius<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MozOutlineRadiusBottomleft<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MozOutlineRadiusBottomright<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MozOutlineRadiusTopleft<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MozOutlineRadiusTopright<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MozStackSizing = Globals | "ignore" | "stretch-to-fit";
+
+  export type MozTextBlink = Globals | "blink" | "none";
+
+  export type MozUserFocus = Globals | "ignore" | "none" | "normal" | "select-after" | "select-all" | "select-before" | "select-menu" | "select-same";
+
+  export type MozUserInput = Globals | "auto" | "disabled" | "enabled" | "none";
+
+  export type MozUserModify = Globals | "read-only" | "read-write" | "write-only";
+
+  export type MozWindowDragging = Globals | "drag" | "no-drag";
+
+  export type MozWindowShadow = Globals | "default" | "menu" | "none" | "sheet" | "tooltip";
+
+  export type MsAccelerator = Globals | "false" | "true";
+
+  export type MsBlockProgression = Globals | "bt" | "lr" | "rl" | "tb";
+
+  export type MsContentZoomChaining = Globals | "chained" | "none";
+
+  export type MsContentZoomLimit = Globals | (string & {});
+
+  export type MsContentZoomLimitMax = Globals | (string & {});
+
+  export type MsContentZoomLimitMin = Globals | (string & {});
+
+  export type MsContentZoomSnap = Globals | "mandatory" | "none" | "proximity" | (string & {});
+
+  export type MsContentZoomSnapPoints = Globals | (string & {});
+
+  export type MsContentZoomSnapType = Globals | "mandatory" | "none" | "proximity";
+
+  export type MsContentZooming = Globals | "none" | "zoom";
+
+  export type MsFilter = Globals | (string & {});
+
+  export type MsFlowFrom = Globals | "none" | (string & {});
+
+  export type MsFlowInto = Globals | "none" | (string & {});
+
+  export type MsGridColumns<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | "none" | (string & {});
+
+  export type MsGridRows<TLength = (string & {}) | 0> = Globals | DataType.TrackBreadth<TLength> | "none" | (string & {});
+
+  export type MsHighContrastAdjust = Globals | "auto" | "none";
+
+  export type MsHyphenateLimitChars = Globals | "auto" | (string & {}) | (number & {});
+
+  export type MsHyphenateLimitLines = Globals | "no-limit" | (number & {}) | (string & {});
+
+  export type MsHyphenateLimitZone<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type MsImeAlign = Globals | "after" | "auto";
+
+  export type MsOverflowStyle = Globals | "-ms-autohiding-scrollbar" | "auto" | "none" | "scrollbar";
+
+  export type MsScrollChaining = Globals | "chained" | "none";
+
+  export type MsScrollLimit = Globals | (string & {});
+
+  export type MsScrollLimitXMax<TLength = (string & {}) | 0> = Globals | TLength | "auto";
+
+  export type MsScrollLimitXMin<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type MsScrollLimitYMax<TLength = (string & {}) | 0> = Globals | TLength | "auto";
+
+  export type MsScrollLimitYMin<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type MsScrollRails = Globals | "none" | "railed";
+
+  export type MsScrollSnapPointsX = Globals | (string & {});
+
+  export type MsScrollSnapPointsY = Globals | (string & {});
+
+  export type MsScrollSnapType = Globals | "mandatory" | "none" | "proximity";
+
+  export type MsScrollSnapX = Globals | (string & {});
+
+  export type MsScrollSnapY = Globals | (string & {});
+
+  export type MsScrollTranslation = Globals | "none" | "vertical-to-horizontal";
+
+  export type MsScrollbar3dlightColor = Globals | DataType.Color;
+
+  export type MsScrollbarArrowColor = Globals | DataType.Color;
+
+  export type MsScrollbarBaseColor = Globals | DataType.Color;
+
+  export type MsScrollbarDarkshadowColor = Globals | DataType.Color;
+
+  export type MsScrollbarFaceColor = Globals | DataType.Color;
+
+  export type MsScrollbarHighlightColor = Globals | DataType.Color;
+
+  export type MsScrollbarShadowColor = Globals | DataType.Color;
+
+  export type MsScrollbarTrackColor = Globals | DataType.Color;
+
+  export type MsTextAutospace = Globals | "ideograph-alpha" | "ideograph-numeric" | "ideograph-parenthesis" | "ideograph-space" | "none";
+
+  export type MsTouchSelect = Globals | "grippers" | "none";
+
+  export type MsUserSelect = Globals | "element" | "none" | "text";
+
+  export type MsWrapFlow = Globals | "auto" | "both" | "clear" | "end" | "maximum" | "start";
+
+  export type MsWrapMargin<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type MsWrapThrough = Globals | "none" | "wrap";
+
+  export type WebkitAppearance =
+    | Globals
+    | "-apple-pay-button"
+    | "button"
+    | "button-bevel"
+    | "caret"
+    | "checkbox"
+    | "default-button"
+    | "inner-spin-button"
+    | "listbox"
+    | "listitem"
+    | "media-controls-background"
+    | "media-controls-fullscreen-background"
+    | "media-current-time-display"
+    | "media-enter-fullscreen-button"
+    | "media-exit-fullscreen-button"
+    | "media-fullscreen-button"
+    | "media-mute-button"
+    | "media-overlay-play-button"
+    | "media-play-button"
+    | "media-seek-back-button"
+    | "media-seek-forward-button"
+    | "media-slider"
+    | "media-sliderthumb"
+    | "media-time-remaining-display"
+    | "media-toggle-closed-captions-button"
+    | "media-volume-slider"
+    | "media-volume-slider-container"
+    | "media-volume-sliderthumb"
+    | "menulist"
+    | "menulist-button"
+    | "menulist-text"
+    | "menulist-textfield"
+    | "meter"
+    | "none"
+    | "progress-bar"
+    | "progress-bar-value"
+    | "push-button"
+    | "radio"
+    | "searchfield"
+    | "searchfield-cancel-button"
+    | "searchfield-decoration"
+    | "searchfield-results-button"
+    | "searchfield-results-decoration"
+    | "slider-horizontal"
+    | "slider-vertical"
+    | "sliderthumb-horizontal"
+    | "sliderthumb-vertical"
+    | "square-button"
+    | "textarea"
+    | "textfield";
+
+  export type WebkitBorderBefore<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | DataType.LineStyle | DataType.Color | (string & {});
+
+  export type WebkitBorderBeforeColor = Globals | DataType.Color;
+
+  export type WebkitBorderBeforeStyle = Globals | DataType.LineStyle | (string & {});
+
+  export type WebkitBorderBeforeWidth<TLength = (string & {}) | 0> = Globals | DataType.LineWidth<TLength> | (string & {});
+
+  export type WebkitBoxReflect<TLength = (string & {}) | 0> = Globals | TLength | "above" | "below" | "left" | "right" | (string & {});
+
+  export type WebkitLineClamp = Globals | "none" | (number & {}) | (string & {});
+
+  export type WebkitMask<TLength = (string & {}) | 0> =
+    | Globals
+    | DataType.Position<TLength>
+    | DataType.RepeatStyle
+    | DataType.Box
+    | "border"
+    | "content"
+    | "none"
+    | "padding"
+    | "text"
+    | (string & {});
+
+  export type WebkitMaskAttachment = Globals | DataType.Attachment | (string & {});
+
+  export type WebkitMaskClip = Globals | DataType.Box | "border" | "content" | "padding" | "text" | (string & {});
+
+  export type WebkitMaskComposite = Globals | DataType.CompositeStyle | (string & {});
+
+  export type WebkitMaskImage = Globals | "none" | (string & {});
+
+  export type WebkitMaskOrigin = Globals | DataType.Box | "border" | "content" | "padding" | (string & {});
+
+  export type WebkitMaskPosition<TLength = (string & {}) | 0> = Globals | DataType.Position<TLength> | (string & {});
+
+  export type WebkitMaskPositionX<TLength = (string & {}) | 0> = Globals | TLength | "center" | "left" | "right" | (string & {});
+
+  export type WebkitMaskPositionY<TLength = (string & {}) | 0> = Globals | TLength | "bottom" | "center" | "top" | (string & {});
+
+  export type WebkitMaskRepeat = Globals | DataType.RepeatStyle | (string & {});
+
+  export type WebkitMaskRepeatX = Globals | "no-repeat" | "repeat" | "round" | "space";
+
+  export type WebkitMaskRepeatY = Globals | "no-repeat" | "repeat" | "round" | "space";
+
+  export type WebkitMaskSize<TLength = (string & {}) | 0> = Globals | DataType.BgSize<TLength> | (string & {});
+
+  export type WebkitOverflowScrolling = Globals | "auto" | "touch";
+
+  export type WebkitTapHighlightColor = Globals | DataType.Color;
+
+  export type WebkitTextFillColor = Globals | DataType.Color;
+
+  export type WebkitTextStroke<TLength = (string & {}) | 0> = Globals | DataType.Color | TLength | (string & {});
+
+  export type WebkitTextStrokeColor = Globals | DataType.Color;
+
+  export type WebkitTextStrokeWidth<TLength = (string & {}) | 0> = Globals | TLength;
+
+  export type WebkitTouchCallout = Globals | "default" | "none";
+
+  export type WebkitUserModify = Globals | "read-only" | "read-write" | "read-write-plaintext-only";
+
+  export type AlignmentBaseline =
+    | Globals
+    | "after-edge"
+    | "alphabetic"
+    | "auto"
+    | "baseline"
+    | "before-edge"
+    | "central"
+    | "hanging"
+    | "ideographic"
+    | "mathematical"
+    | "middle"
+    | "text-after-edge"
+    | "text-before-edge";
+
+  export type BaselineShift<TLength = (string & {}) | 0> = Globals | TLength | "baseline" | "sub" | "super" | (string & {});
+
+  export type ClipRule = Globals | "evenodd" | "nonzero";
+
+  export type ColorInterpolation = Globals | "auto" | "linearRGB" | "sRGB";
+
+  export type ColorRendering = Globals | "auto" | "optimizeQuality" | "optimizeSpeed";
+
+  export type DominantBaseline =
+    | Globals
+    | "alphabetic"
+    | "auto"
+    | "central"
+    | "hanging"
+    | "ideographic"
+    | "mathematical"
+    | "middle"
+    | "no-change"
+    | "reset-size"
+    | "text-after-edge"
+    | "text-before-edge"
+    | "use-script";
+
+  export type Fill = Globals | DataType.Paint;
+
+  export type FillOpacity = Globals | (number & {}) | (string & {});
+
+  export type FillRule = Globals | "evenodd" | "nonzero";
+
+  export type FloodColor = Globals | DataType.Color | "currentColor";
+
+  export type FloodOpacity = Globals | (number & {}) | (string & {});
+
+  export type GlyphOrientationVertical = Globals | "auto" | (string & {}) | (number & {});
+
+  export type LightingColor = Globals | DataType.Color | "currentColor";
+
+  export type Marker = Globals | "none" | (string & {});
+
+  export type MarkerEnd = Globals | "none" | (string & {});
+
+  export type MarkerMid = Globals | "none" | (string & {});
+
+  export type MarkerStart = Globals | "none" | (string & {});
+
+  export type ShapeRendering = Globals | "auto" | "crispEdges" | "geometricPrecision" | "optimizeSpeed";
+
+  export type StopColor = Globals | DataType.Color | "currentColor";
+
+  export type StopOpacity = Globals | (number & {}) | (string & {});
+
+  export type Stroke = Globals | DataType.Paint;
+
+  export type StrokeDasharray<TLength = (string & {}) | 0> = Globals | DataType.Dasharray<TLength> | "none";
+
+  export type StrokeDashoffset<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type StrokeLinecap = Globals | "butt" | "round" | "square";
+
+  export type StrokeLinejoin = Globals | "bevel" | "miter" | "round";
+
+  export type StrokeMiterlimit = Globals | (number & {}) | (string & {});
+
+  export type StrokeOpacity = Globals | (number & {}) | (string & {});
+
+  export type StrokeWidth<TLength = (string & {}) | 0> = Globals | TLength | (string & {});
+
+  export type TextAnchor = Globals | "end" | "middle" | "start";
+
+  export type VectorEffect = Globals | "non-scaling-stroke" | "none";
+}
+
+export namespace AtRule {
+  export interface CounterStyle<TLength = (string & {}) | 0, TTime = string & {}> {
+    additiveSymbols?: string | undefined;
+    fallback?: string | undefined;
+    negative?: string | undefined;
+    pad?: string | undefined;
+    prefix?: string | undefined;
+    range?: Range | undefined;
+    speakAs?: SpeakAs | undefined;
+    suffix?: string | undefined;
+    symbols?: string | undefined;
+    system?: System | undefined;
+  }
+
+  export interface CounterStyleHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    "additive-symbols"?: string | undefined;
+    fallback?: string | undefined;
+    negative?: string | undefined;
+    pad?: string | undefined;
+    prefix?: string | undefined;
+    range?: Range | undefined;
+    "speak-as"?: SpeakAs | undefined;
+    suffix?: string | undefined;
+    symbols?: string | undefined;
+    system?: System | undefined;
+  }
+
+  export type CounterStyleFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<CounterStyle<TLength, TTime>>;
+
+  export type CounterStyleHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<CounterStyleHyphen<TLength, TTime>>;
+
+  export interface FontFace<TLength = (string & {}) | 0, TTime = string & {}> {
+    MozFontFeatureSettings?: FontFeatureSettings | undefined;
+    ascentOverride?: AscentOverride | undefined;
+    descentOverride?: DescentOverride | undefined;
+    fontDisplay?: FontDisplay | undefined;
+    fontFamily?: string | undefined;
+    fontFeatureSettings?: FontFeatureSettings | undefined;
+    fontStretch?: FontStretch | undefined;
+    fontStyle?: FontStyle | undefined;
+    fontVariant?: FontVariant | undefined;
+    fontVariationSettings?: FontVariationSettings | undefined;
+    fontWeight?: FontWeight | undefined;
+    lineGapOverride?: LineGapOverride | undefined;
+    sizeAdjust?: string | undefined;
+    src?: string | undefined;
+    unicodeRange?: string | undefined;
+  }
+
+  export interface FontFaceHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    "-moz-font-feature-settings"?: FontFeatureSettings | undefined;
+    "ascent-override"?: AscentOverride | undefined;
+    "descent-override"?: DescentOverride | undefined;
+    "font-display"?: FontDisplay | undefined;
+    "font-family"?: string | undefined;
+    "font-feature-settings"?: FontFeatureSettings | undefined;
+    "font-stretch"?: FontStretch | undefined;
+    "font-style"?: FontStyle | undefined;
+    "font-variant"?: FontVariant | undefined;
+    "font-variation-settings"?: FontVariationSettings | undefined;
+    "font-weight"?: FontWeight | undefined;
+    "line-gap-override"?: LineGapOverride | undefined;
+    "size-adjust"?: string | undefined;
+    src?: string | undefined;
+    "unicode-range"?: string | undefined;
+  }
+
+  export type FontFaceFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<FontFace<TLength, TTime>>;
+
+  export type FontFaceHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<FontFaceHyphen<TLength, TTime>>;
+
+  export interface FontPaletteValues<TLength = (string & {}) | 0, TTime = string & {}> {
+    basePalette?: BasePalette | undefined;
+    fontFamily?: string | undefined;
+    overrideColors?: string | undefined;
+  }
+
+  export interface FontPaletteValuesHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    "base-palette"?: BasePalette | undefined;
+    "font-family"?: string | undefined;
+    "override-colors"?: string | undefined;
+  }
+
+  export type FontPaletteValuesFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<FontPaletteValues<TLength, TTime>>;
+
+  export type FontPaletteValuesHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<FontPaletteValuesHyphen<TLength, TTime>>;
+
+  export interface Page<TLength = (string & {}) | 0, TTime = string & {}> {
+    bleed?: Bleed<TLength> | undefined;
+    marks?: Marks | undefined;
+    pageOrientation?: PageOrientation | undefined;
+    size?: Size<TLength> | undefined;
+  }
+
+  export interface PageHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    bleed?: Bleed<TLength> | undefined;
+    marks?: Marks | undefined;
+    "page-orientation"?: PageOrientation | undefined;
+    size?: Size<TLength> | undefined;
+  }
+
+  export type PageFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<Page<TLength, TTime>>;
+
+  export type PageHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<PageHyphen<TLength, TTime>>;
+
+  export interface Property<TLength = (string & {}) | 0, TTime = string & {}> {
+    inherits?: Inherits | undefined;
+    initialValue?: string | undefined;
+    syntax?: string | undefined;
+  }
+
+  export interface PropertyHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    inherits?: Inherits | undefined;
+    "initial-value"?: string | undefined;
+    syntax?: string | undefined;
+  }
+
+  export type PropertyFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<Property<TLength, TTime>>;
+
+  export type PropertyHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<PropertyHyphen<TLength, TTime>>;
+
+  export interface Viewport<TLength = (string & {}) | 0, TTime = string & {}> {
+    height?: Height<TLength> | undefined;
+    maxHeight?: MaxHeight<TLength> | undefined;
+    maxWidth?: MaxWidth<TLength> | undefined;
+    maxZoom?: MaxZoom | undefined;
+    minHeight?: MinHeight<TLength> | undefined;
+    minWidth?: MinWidth<TLength> | undefined;
+    minZoom?: MinZoom | undefined;
+    orientation?: Orientation | undefined;
+    userZoom?: UserZoom | undefined;
+    viewportFit?: ViewportFit | undefined;
+    width?: Width<TLength> | undefined;
+    zoom?: Zoom | undefined;
+  }
+
+  export interface ViewportHyphen<TLength = (string & {}) | 0, TTime = string & {}> {
+    height?: Height<TLength> | undefined;
+    "max-height"?: MaxHeight<TLength> | undefined;
+    "max-width"?: MaxWidth<TLength> | undefined;
+    "max-zoom"?: MaxZoom | undefined;
+    "min-height"?: MinHeight<TLength> | undefined;
+    "min-width"?: MinWidth<TLength> | undefined;
+    "min-zoom"?: MinZoom | undefined;
+    orientation?: Orientation | undefined;
+    "user-zoom"?: UserZoom | undefined;
+    "viewport-fit"?: ViewportFit | undefined;
+    width?: Width<TLength> | undefined;
+    zoom?: Zoom | undefined;
+  }
+
+  export type ViewportFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<Viewport<TLength, TTime>>;
+
+  export type ViewportHyphenFallback<TLength = (string & {}) | 0, TTime = string & {}> = Fallback<ViewportHyphen<TLength, TTime>>;
+
+  type Range = "auto" | (string & {});
+
+  type SpeakAs = "auto" | "bullets" | "numbers" | "spell-out" | "words" | (string & {});
+
+  type System = "additive" | "alphabetic" | "cyclic" | "fixed" | "numeric" | "symbolic" | (string & {});
+
+  type FontFeatureSettings = "normal" | (string & {});
+
+  type AscentOverride = "normal" | (string & {});
+
+  type DescentOverride = "normal" | (string & {});
+
+  type FontDisplay = "auto" | "block" | "fallback" | "optional" | "swap";
+
+  type FontStretch = DataType.FontStretchAbsolute | (string & {});
+
+  type FontStyle = "italic" | "normal" | "oblique" | (string & {});
+
+  type FontVariant =
+    | DataType.EastAsianVariantValues
+    | "all-petite-caps"
+    | "all-small-caps"
+    | "common-ligatures"
+    | "contextual"
+    | "diagonal-fractions"
+    | "discretionary-ligatures"
+    | "full-width"
+    | "historical-forms"
+    | "historical-ligatures"
+    | "lining-nums"
+    | "no-common-ligatures"
+    | "no-contextual"
+    | "no-discretionary-ligatures"
+    | "no-historical-ligatures"
+    | "none"
+    | "normal"
+    | "oldstyle-nums"
+    | "ordinal"
+    | "petite-caps"
+    | "proportional-nums"
+    | "proportional-width"
+    | "ruby"
+    | "slashed-zero"
+    | "small-caps"
+    | "stacked-fractions"
+    | "tabular-nums"
+    | "titling-caps"
+    | "unicase"
+    | (string & {});
+
+  type FontVariationSettings = "normal" | (string & {});
+
+  type FontWeight = DataType.FontWeightAbsolute | (string & {});
+
+  type LineGapOverride = "normal" | (string & {});
+
+  type BasePalette = "dark" | "light" | (number & {}) | (string & {});
+
+  type Bleed<TLength> = TLength | "auto";
+
+  type Marks = "crop" | "cross" | "none" | (string & {});
+
+  type PageOrientation = "rotate-left" | "rotate-right" | "upright";
+
+  type Size<TLength> = DataType.PageSize | TLength | "auto" | "landscape" | "portrait" | (string & {});
+
+  type Inherits = "false" | "true";
+
+  type Height<TLength> = DataType.ViewportLength<TLength> | (string & {});
+
+  type MaxHeight<TLength> = DataType.ViewportLength<TLength>;
+
+  type MaxWidth<TLength> = DataType.ViewportLength<TLength>;
+
+  type MaxZoom = "auto" | (string & {}) | (number & {});
+
+  type MinHeight<TLength> = DataType.ViewportLength<TLength>;
+
+  type MinWidth<TLength> = DataType.ViewportLength<TLength>;
+
+  type MinZoom = "auto" | (string & {}) | (number & {});
+
+  type Orientation = "auto" | "landscape" | "portrait";
+
+  type UserZoom = "fixed" | "zoom";
+
+  type ViewportFit = "auto" | "contain" | "cover";
+
+  type Width<TLength> = DataType.ViewportLength<TLength> | (string & {});
+
+  type Zoom = "auto" | (string & {}) | (number & {});
+}
+
+/**
+ * **Attention!** Data types receives its name from the spec. E.g. `<color>` becomes `DataType.Color` and
+ * `<content-distribution>` becomes `DataType.ContentDistribution`. It happens quite frequent that these data types
+ * are split into several data types or/and name changes as the spec develops. So there's a risk that a minor/patch
+ * update from `csstype` can break your typing if you're using the `DataType` namespace.
+ */
+export namespace DataType {
+  type AbsoluteSize = "large" | "medium" | "small" | "x-large" | "x-small" | "xx-large" | "xx-small" | "xxx-large";
+
+  type AnimateableFeature = "contents" | "scroll-position" | (string & {});
+
+  type Attachment = "fixed" | "local" | "scroll";
+
+  type BgPosition<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | (string & {});
+
+  type BgSize<TLength> = TLength | "auto" | "contain" | "cover" | (string & {});
+
+  type BlendMode =
+    | "color"
+    | "color-burn"
+    | "color-dodge"
+    | "darken"
+    | "difference"
+    | "exclusion"
+    | "hard-light"
+    | "hue"
+    | "lighten"
+    | "luminosity"
+    | "multiply"
+    | "normal"
+    | "overlay"
+    | "saturation"
+    | "screen"
+    | "soft-light";
+
+  type Box = "border-box" | "content-box" | "padding-box";
+
+  type Color = NamedColor | DeprecatedSystemColor | "currentcolor" | (string & {});
+
+  type CompatAuto =
+    | "button"
+    | "checkbox"
+    | "listbox"
+    | "menulist"
+    | "meter"
+    | "progress-bar"
+    | "push-button"
+    | "radio"
+    | "searchfield"
+    | "slider-horizontal"
+    | "square-button"
+    | "textarea";
+
+  type CompositeStyle =
+    | "clear"
+    | "copy"
+    | "destination-atop"
+    | "destination-in"
+    | "destination-out"
+    | "destination-over"
+    | "source-atop"
+    | "source-in"
+    | "source-out"
+    | "source-over"
+    | "xor";
+
+  type CompositingOperator = "add" | "exclude" | "intersect" | "subtract";
+
+  type ContentDistribution = "space-around" | "space-between" | "space-evenly" | "stretch";
+
+  type ContentList = Quote | "contents" | (string & {});
+
+  type ContentPosition = "center" | "end" | "flex-end" | "flex-start" | "start";
+
+  type CubicBezierTimingFunction = "ease" | "ease-in" | "ease-in-out" | "ease-out" | (string & {});
+
+  type Dasharray<TLength> = TLength | (string & {}) | (number & {});
+
+  type DeprecatedSystemColor =
+    | "ActiveBorder"
+    | "ActiveCaption"
+    | "AppWorkspace"
+    | "Background"
+    | "ButtonFace"
+    | "ButtonHighlight"
+    | "ButtonShadow"
+    | "ButtonText"
+    | "CaptionText"
+    | "GrayText"
+    | "Highlight"
+    | "HighlightText"
+    | "InactiveBorder"
+    | "InactiveCaption"
+    | "InactiveCaptionText"
+    | "InfoBackground"
+    | "InfoText"
+    | "Menu"
+    | "MenuText"
+    | "Scrollbar"
+    | "ThreeDDarkShadow"
+    | "ThreeDFace"
+    | "ThreeDHighlight"
+    | "ThreeDLightShadow"
+    | "ThreeDShadow"
+    | "Window"
+    | "WindowFrame"
+    | "WindowText";
+
+  type DisplayInside = "-ms-flexbox" | "-ms-grid" | "-webkit-flex" | "flex" | "flow" | "flow-root" | "grid" | "ruby" | "table";
+
+  type DisplayInternal =
+    | "ruby-base"
+    | "ruby-base-container"
+    | "ruby-text"
+    | "ruby-text-container"
+    | "table-caption"
+    | "table-cell"
+    | "table-column"
+    | "table-column-group"
+    | "table-footer-group"
+    | "table-header-group"
+    | "table-row"
+    | "table-row-group";
+
+  type DisplayLegacy = "-ms-inline-flexbox" | "-ms-inline-grid" | "-webkit-inline-flex" | "inline-block" | "inline-flex" | "inline-grid" | "inline-list-item" | "inline-table";
+
+  type DisplayOutside = "block" | "inline" | "run-in";
+
+  type EasingFunction = CubicBezierTimingFunction | StepTimingFunction | "linear";
+
+  type EastAsianVariantValues = "jis04" | "jis78" | "jis83" | "jis90" | "simplified" | "traditional";
+
+  type FinalBgLayer<TLength> = Color | BgPosition<TLength> | RepeatStyle | Attachment | Box | "none" | (string & {});
+
+  type FontStretchAbsolute =
+    | "condensed"
+    | "expanded"
+    | "extra-condensed"
+    | "extra-expanded"
+    | "normal"
+    | "semi-condensed"
+    | "semi-expanded"
+    | "ultra-condensed"
+    | "ultra-expanded"
+    | (string & {});
+
+  type FontWeightAbsolute = "bold" | "normal" | (number & {}) | (string & {});
+
+  type GenericFamily = "cursive" | "fantasy" | "monospace" | "sans-serif" | "serif";
+
+  type GeometryBox = Box | "fill-box" | "margin-box" | "stroke-box" | "view-box";
+
+  type GridLine = "auto" | (string & {}) | (number & {});
+
+  type LineStyle = "dashed" | "dotted" | "double" | "groove" | "hidden" | "inset" | "none" | "outset" | "ridge" | "solid";
+
+  type LineWidth<TLength> = TLength | "medium" | "thick" | "thin";
+
+  type MaskLayer<TLength> = Position<TLength> | RepeatStyle | GeometryBox | CompositingOperator | MaskingMode | "no-clip" | "none" | (string & {});
+
+  type MaskingMode = "alpha" | "luminance" | "match-source";
+
+  type NamedColor =
+    | "aliceblue"
+    | "antiquewhite"
+    | "aqua"
+    | "aquamarine"
+    | "azure"
+    | "beige"
+    | "bisque"
+    | "black"
+    | "blanchedalmond"
+    | "blue"
+    | "blueviolet"
+    | "brown"
+    | "burlywood"
+    | "cadetblue"
+    | "chartreuse"
+    | "chocolate"
+    | "coral"
+    | "cornflowerblue"
+    | "cornsilk"
+    | "crimson"
+    | "cyan"
+    | "darkblue"
+    | "darkcyan"
+    | "darkgoldenrod"
+    | "darkgray"
+    | "darkgreen"
+    | "darkgrey"
+    | "darkkhaki"
+    | "darkmagenta"
+    | "darkolivegreen"
+    | "darkorange"
+    | "darkorchid"
+    | "darkred"
+    | "darksalmon"
+    | "darkseagreen"
+    | "darkslateblue"
+    | "darkslategray"
+    | "darkslategrey"
+    | "darkturquoise"
+    | "darkviolet"
+    | "deeppink"
+    | "deepskyblue"
+    | "dimgray"
+    | "dimgrey"
+    | "dodgerblue"
+    | "firebrick"
+    | "floralwhite"
+    | "forestgreen"
+    | "fuchsia"
+    | "gainsboro"
+    | "ghostwhite"
+    | "gold"
+    | "goldenrod"
+    | "gray"
+    | "green"
+    | "greenyellow"
+    | "grey"
+    | "honeydew"
+    | "hotpink"
+    | "indianred"
+    | "indigo"
+    | "ivory"
+    | "khaki"
+    | "lavender"
+    | "lavenderblush"
+    | "lawngreen"
+    | "lemonchiffon"
+    | "lightblue"
+    | "lightcoral"
+    | "lightcyan"
+    | "lightgoldenrodyellow"
+    | "lightgray"
+    | "lightgreen"
+    | "lightgrey"
+    | "lightpink"
+    | "lightsalmon"
+    | "lightseagreen"
+    | "lightskyblue"
+    | "lightslategray"
+    | "lightslategrey"
+    | "lightsteelblue"
+    | "lightyellow"
+    | "lime"
+    | "limegreen"
+    | "linen"
+    | "magenta"
+    | "maroon"
+    | "mediumaquamarine"
+    | "mediumblue"
+    | "mediumorchid"
+    | "mediumpurple"
+    | "mediumseagreen"
+    | "mediumslateblue"
+    | "mediumspringgreen"
+    | "mediumturquoise"
+    | "mediumvioletred"
+    | "midnightblue"
+    | "mintcream"
+    | "mistyrose"
+    | "moccasin"
+    | "navajowhite"
+    | "navy"
+    | "oldlace"
+    | "olive"
+    | "olivedrab"
+    | "orange"
+    | "orangered"
+    | "orchid"
+    | "palegoldenrod"
+    | "palegreen"
+    | "paleturquoise"
+    | "palevioletred"
+    | "papayawhip"
+    | "peachpuff"
+    | "peru"
+    | "pink"
+    | "plum"
+    | "powderblue"
+    | "purple"
+    | "rebeccapurple"
+    | "red"
+    | "rosybrown"
+    | "royalblue"
+    | "saddlebrown"
+    | "salmon"
+    | "sandybrown"
+    | "seagreen"
+    | "seashell"
+    | "sienna"
+    | "silver"
+    | "skyblue"
+    | "slateblue"
+    | "slategray"
+    | "slategrey"
+    | "snow"
+    | "springgreen"
+    | "steelblue"
+    | "tan"
+    | "teal"
+    | "thistle"
+    | "tomato"
+    | "transparent"
+    | "turquoise"
+    | "violet"
+    | "wheat"
+    | "white"
+    | "whitesmoke"
+    | "yellow"
+    | "yellowgreen";
+
+  type PageSize = "A3" | "A4" | "A5" | "B4" | "B5" | "JIS-B4" | "JIS-B5" | "ledger" | "legal" | "letter";
+
+  type Paint = Color | "child" | "context-fill" | "context-stroke" | "none" | (string & {});
+
+  type Position<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | (string & {});
+
+  type Quote = "close-quote" | "no-close-quote" | "no-open-quote" | "open-quote";
+
+  type RepeatStyle = "no-repeat" | "repeat" | "repeat-x" | "repeat-y" | "round" | "space" | (string & {});
+
+  type SelfPosition = "center" | "end" | "flex-end" | "flex-start" | "self-end" | "self-start" | "start";
+
+  type SingleAnimation<TTime> =
+    | EasingFunction
+    | SingleAnimationDirection
+    | SingleAnimationFillMode
+    | SingleAnimationTimeline
+    | TTime
+    | "infinite"
+    | "none"
+    | "paused"
+    | "running"
+    | (string & {})
+    | (number & {});
+
+  type SingleAnimationComposition = "accumulate" | "add" | "replace";
+
+  type SingleAnimationDirection = "alternate" | "alternate-reverse" | "normal" | "reverse";
+
+  type SingleAnimationFillMode = "backwards" | "both" | "forwards" | "none";
+
+  type SingleAnimationTimeline = "auto" | "none" | (string & {});
+
+  type SingleTransition<TTime> = EasingFunction | TTime | "all" | "allow-discrete" | "none" | "normal" | (string & {});
+
+  type StepTimingFunction = "step-end" | "step-start" | (string & {});
+
+  type TimelineRangeName = "contain" | "cover" | "entry" | "entry-crossing" | "exit" | "exit-crossing";
+
+  type TrackBreadth<TLength> = TLength | "auto" | "max-content" | "min-content" | (string & {});
+
+  type ViewportLength<TLength> = TLength | "auto" | (string & {});
+
+  type VisualBox = "border-box" | "content-box" | "padding-box";
+}
diff --git a/node_modules/csstype/index.js.flow b/node_modules/csstype/index.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..0b45a3201774e8448600f7336f9a13de3e4cab11
--- /dev/null
+++ b/node_modules/csstype/index.js.flow
@@ -0,0 +1,6612 @@
+// @flow strict
+
+export type StandardLonghandProperties<TLength = string | 0, TTime = string> = {|
+  accentColor?: Property$AccentColor,
+  alignContent?: Property$AlignContent,
+  alignItems?: Property$AlignItems,
+  alignSelf?: Property$AlignSelf,
+  alignTracks?: Property$AlignTracks,
+  animationComposition?: Property$AnimationComposition,
+  animationDelay?: Property$AnimationDelay<TTime>,
+  animationDirection?: Property$AnimationDirection,
+  animationDuration?: Property$AnimationDuration<TTime>,
+  animationFillMode?: Property$AnimationFillMode,
+  animationIterationCount?: Property$AnimationIterationCount,
+  animationName?: Property$AnimationName,
+  animationPlayState?: Property$AnimationPlayState,
+  animationRangeEnd?: Property$AnimationRangeEnd<TLength>,
+  animationRangeStart?: Property$AnimationRangeStart<TLength>,
+  animationTimeline?: Property$AnimationTimeline,
+  animationTimingFunction?: Property$AnimationTimingFunction,
+  appearance?: Property$Appearance,
+  aspectRatio?: Property$AspectRatio,
+  backdropFilter?: Property$BackdropFilter,
+  backfaceVisibility?: Property$BackfaceVisibility,
+  backgroundAttachment?: Property$BackgroundAttachment,
+  backgroundBlendMode?: Property$BackgroundBlendMode,
+  backgroundClip?: Property$BackgroundClip,
+  backgroundColor?: Property$BackgroundColor,
+  backgroundImage?: Property$BackgroundImage,
+  backgroundOrigin?: Property$BackgroundOrigin,
+  backgroundPositionX?: Property$BackgroundPositionX<TLength>,
+  backgroundPositionY?: Property$BackgroundPositionY<TLength>,
+  backgroundRepeat?: Property$BackgroundRepeat,
+  backgroundSize?: Property$BackgroundSize<TLength>,
+  blockOverflow?: Property$BlockOverflow,
+  blockSize?: Property$BlockSize<TLength>,
+  borderBlockColor?: Property$BorderBlockColor,
+  borderBlockEndColor?: Property$BorderBlockEndColor,
+  borderBlockEndStyle?: Property$BorderBlockEndStyle,
+  borderBlockEndWidth?: Property$BorderBlockEndWidth<TLength>,
+  borderBlockStartColor?: Property$BorderBlockStartColor,
+  borderBlockStartStyle?: Property$BorderBlockStartStyle,
+  borderBlockStartWidth?: Property$BorderBlockStartWidth<TLength>,
+  borderBlockStyle?: Property$BorderBlockStyle,
+  borderBlockWidth?: Property$BorderBlockWidth<TLength>,
+  borderBottomColor?: Property$BorderBottomColor,
+  borderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength>,
+  borderBottomRightRadius?: Property$BorderBottomRightRadius<TLength>,
+  borderBottomStyle?: Property$BorderBottomStyle,
+  borderBottomWidth?: Property$BorderBottomWidth<TLength>,
+  borderCollapse?: Property$BorderCollapse,
+  borderEndEndRadius?: Property$BorderEndEndRadius<TLength>,
+  borderEndStartRadius?: Property$BorderEndStartRadius<TLength>,
+  borderImageOutset?: Property$BorderImageOutset<TLength>,
+  borderImageRepeat?: Property$BorderImageRepeat,
+  borderImageSlice?: Property$BorderImageSlice,
+  borderImageSource?: Property$BorderImageSource,
+  borderImageWidth?: Property$BorderImageWidth<TLength>,
+  borderInlineColor?: Property$BorderInlineColor,
+  borderInlineEndColor?: Property$BorderInlineEndColor,
+  borderInlineEndStyle?: Property$BorderInlineEndStyle,
+  borderInlineEndWidth?: Property$BorderInlineEndWidth<TLength>,
+  borderInlineStartColor?: Property$BorderInlineStartColor,
+  borderInlineStartStyle?: Property$BorderInlineStartStyle,
+  borderInlineStartWidth?: Property$BorderInlineStartWidth<TLength>,
+  borderInlineStyle?: Property$BorderInlineStyle,
+  borderInlineWidth?: Property$BorderInlineWidth<TLength>,
+  borderLeftColor?: Property$BorderLeftColor,
+  borderLeftStyle?: Property$BorderLeftStyle,
+  borderLeftWidth?: Property$BorderLeftWidth<TLength>,
+  borderRightColor?: Property$BorderRightColor,
+  borderRightStyle?: Property$BorderRightStyle,
+  borderRightWidth?: Property$BorderRightWidth<TLength>,
+  borderSpacing?: Property$BorderSpacing<TLength>,
+  borderStartEndRadius?: Property$BorderStartEndRadius<TLength>,
+  borderStartStartRadius?: Property$BorderStartStartRadius<TLength>,
+  borderTopColor?: Property$BorderTopColor,
+  borderTopLeftRadius?: Property$BorderTopLeftRadius<TLength>,
+  borderTopRightRadius?: Property$BorderTopRightRadius<TLength>,
+  borderTopStyle?: Property$BorderTopStyle,
+  borderTopWidth?: Property$BorderTopWidth<TLength>,
+  bottom?: Property$Bottom<TLength>,
+  boxDecorationBreak?: Property$BoxDecorationBreak,
+  boxShadow?: Property$BoxShadow,
+  boxSizing?: Property$BoxSizing,
+  breakAfter?: Property$BreakAfter,
+  breakBefore?: Property$BreakBefore,
+  breakInside?: Property$BreakInside,
+  captionSide?: Property$CaptionSide,
+  caretColor?: Property$CaretColor,
+  caretShape?: Property$CaretShape,
+  clear?: Property$Clear,
+  clipPath?: Property$ClipPath,
+  color?: Property$Color,
+  colorAdjust?: Property$PrintColorAdjust,
+  colorScheme?: Property$ColorScheme,
+  columnCount?: Property$ColumnCount,
+  columnFill?: Property$ColumnFill,
+  columnGap?: Property$ColumnGap<TLength>,
+  columnRuleColor?: Property$ColumnRuleColor,
+  columnRuleStyle?: Property$ColumnRuleStyle,
+  columnRuleWidth?: Property$ColumnRuleWidth<TLength>,
+  columnSpan?: Property$ColumnSpan,
+  columnWidth?: Property$ColumnWidth<TLength>,
+  contain?: Property$Contain,
+  containIntrinsicBlockSize?: Property$ContainIntrinsicBlockSize<TLength>,
+  containIntrinsicHeight?: Property$ContainIntrinsicHeight<TLength>,
+  containIntrinsicInlineSize?: Property$ContainIntrinsicInlineSize<TLength>,
+  containIntrinsicWidth?: Property$ContainIntrinsicWidth<TLength>,
+  containerName?: Property$ContainerName,
+  containerType?: Property$ContainerType,
+  content?: Property$Content,
+  contentVisibility?: Property$ContentVisibility,
+  counterIncrement?: Property$CounterIncrement,
+  counterReset?: Property$CounterReset,
+  counterSet?: Property$CounterSet,
+  cursor?: Property$Cursor,
+  direction?: Property$Direction,
+  display?: Property$Display,
+  emptyCells?: Property$EmptyCells,
+  filter?: Property$Filter,
+  flexBasis?: Property$FlexBasis<TLength>,
+  flexDirection?: Property$FlexDirection,
+  flexGrow?: Property$FlexGrow,
+  flexShrink?: Property$FlexShrink,
+  flexWrap?: Property$FlexWrap,
+  float?: Property$Float,
+  fontFamily?: Property$FontFamily,
+  fontFeatureSettings?: Property$FontFeatureSettings,
+  fontKerning?: Property$FontKerning,
+  fontLanguageOverride?: Property$FontLanguageOverride,
+  fontOpticalSizing?: Property$FontOpticalSizing,
+  fontPalette?: Property$FontPalette,
+  fontSize?: Property$FontSize<TLength>,
+  fontSizeAdjust?: Property$FontSizeAdjust,
+  fontSmooth?: Property$FontSmooth<TLength>,
+  fontStretch?: Property$FontStretch,
+  fontStyle?: Property$FontStyle,
+  fontSynthesis?: Property$FontSynthesis,
+  fontSynthesisPosition?: Property$FontSynthesisPosition,
+  fontSynthesisSmallCaps?: Property$FontSynthesisSmallCaps,
+  fontSynthesisStyle?: Property$FontSynthesisStyle,
+  fontSynthesisWeight?: Property$FontSynthesisWeight,
+  fontVariant?: Property$FontVariant,
+  fontVariantAlternates?: Property$FontVariantAlternates,
+  fontVariantCaps?: Property$FontVariantCaps,
+  fontVariantEastAsian?: Property$FontVariantEastAsian,
+  fontVariantEmoji?: Property$FontVariantEmoji,
+  fontVariantLigatures?: Property$FontVariantLigatures,
+  fontVariantNumeric?: Property$FontVariantNumeric,
+  fontVariantPosition?: Property$FontVariantPosition,
+  fontVariationSettings?: Property$FontVariationSettings,
+  fontWeight?: Property$FontWeight,
+  forcedColorAdjust?: Property$ForcedColorAdjust,
+  gridAutoColumns?: Property$GridAutoColumns<TLength>,
+  gridAutoFlow?: Property$GridAutoFlow,
+  gridAutoRows?: Property$GridAutoRows<TLength>,
+  gridColumnEnd?: Property$GridColumnEnd,
+  gridColumnStart?: Property$GridColumnStart,
+  gridRowEnd?: Property$GridRowEnd,
+  gridRowStart?: Property$GridRowStart,
+  gridTemplateAreas?: Property$GridTemplateAreas,
+  gridTemplateColumns?: Property$GridTemplateColumns<TLength>,
+  gridTemplateRows?: Property$GridTemplateRows<TLength>,
+  hangingPunctuation?: Property$HangingPunctuation,
+  height?: Property$Height<TLength>,
+  hyphenateCharacter?: Property$HyphenateCharacter,
+  hyphenateLimitChars?: Property$HyphenateLimitChars,
+  hyphens?: Property$Hyphens,
+  imageOrientation?: Property$ImageOrientation,
+  imageRendering?: Property$ImageRendering,
+  imageResolution?: Property$ImageResolution,
+  initialLetter?: Property$InitialLetter,
+  inlineSize?: Property$InlineSize<TLength>,
+  inputSecurity?: Property$InputSecurity,
+  insetBlockEnd?: Property$InsetBlockEnd<TLength>,
+  insetBlockStart?: Property$InsetBlockStart<TLength>,
+  insetInlineEnd?: Property$InsetInlineEnd<TLength>,
+  insetInlineStart?: Property$InsetInlineStart<TLength>,
+  isolation?: Property$Isolation,
+  justifyContent?: Property$JustifyContent,
+  justifyItems?: Property$JustifyItems,
+  justifySelf?: Property$JustifySelf,
+  justifyTracks?: Property$JustifyTracks,
+  left?: Property$Left<TLength>,
+  letterSpacing?: Property$LetterSpacing<TLength>,
+  lineBreak?: Property$LineBreak,
+  lineHeight?: Property$LineHeight<TLength>,
+  lineHeightStep?: Property$LineHeightStep<TLength>,
+  listStyleImage?: Property$ListStyleImage,
+  listStylePosition?: Property$ListStylePosition,
+  listStyleType?: Property$ListStyleType,
+  marginBlockEnd?: Property$MarginBlockEnd<TLength>,
+  marginBlockStart?: Property$MarginBlockStart<TLength>,
+  marginBottom?: Property$MarginBottom<TLength>,
+  marginInlineEnd?: Property$MarginInlineEnd<TLength>,
+  marginInlineStart?: Property$MarginInlineStart<TLength>,
+  marginLeft?: Property$MarginLeft<TLength>,
+  marginRight?: Property$MarginRight<TLength>,
+  marginTop?: Property$MarginTop<TLength>,
+  marginTrim?: Property$MarginTrim,
+  maskBorderMode?: Property$MaskBorderMode,
+  maskBorderOutset?: Property$MaskBorderOutset<TLength>,
+  maskBorderRepeat?: Property$MaskBorderRepeat,
+  maskBorderSlice?: Property$MaskBorderSlice,
+  maskBorderSource?: Property$MaskBorderSource,
+  maskBorderWidth?: Property$MaskBorderWidth<TLength>,
+  maskClip?: Property$MaskClip,
+  maskComposite?: Property$MaskComposite,
+  maskImage?: Property$MaskImage,
+  maskMode?: Property$MaskMode,
+  maskOrigin?: Property$MaskOrigin,
+  maskPosition?: Property$MaskPosition<TLength>,
+  maskRepeat?: Property$MaskRepeat,
+  maskSize?: Property$MaskSize<TLength>,
+  maskType?: Property$MaskType,
+  masonryAutoFlow?: Property$MasonryAutoFlow,
+  mathDepth?: Property$MathDepth,
+  mathShift?: Property$MathShift,
+  mathStyle?: Property$MathStyle,
+  maxBlockSize?: Property$MaxBlockSize<TLength>,
+  maxHeight?: Property$MaxHeight<TLength>,
+  maxInlineSize?: Property$MaxInlineSize<TLength>,
+  maxLines?: Property$MaxLines,
+  maxWidth?: Property$MaxWidth<TLength>,
+  minBlockSize?: Property$MinBlockSize<TLength>,
+  minHeight?: Property$MinHeight<TLength>,
+  minInlineSize?: Property$MinInlineSize<TLength>,
+  minWidth?: Property$MinWidth<TLength>,
+  mixBlendMode?: Property$MixBlendMode,
+  motionDistance?: Property$OffsetDistance<TLength>,
+  motionPath?: Property$OffsetPath,
+  motionRotation?: Property$OffsetRotate,
+  objectFit?: Property$ObjectFit,
+  objectPosition?: Property$ObjectPosition<TLength>,
+  offsetAnchor?: Property$OffsetAnchor<TLength>,
+  offsetDistance?: Property$OffsetDistance<TLength>,
+  offsetPath?: Property$OffsetPath,
+  offsetPosition?: Property$OffsetPosition<TLength>,
+  offsetRotate?: Property$OffsetRotate,
+  offsetRotation?: Property$OffsetRotate,
+  opacity?: Property$Opacity,
+  order?: Property$Order,
+  orphans?: Property$Orphans,
+  outlineColor?: Property$OutlineColor,
+  outlineOffset?: Property$OutlineOffset<TLength>,
+  outlineStyle?: Property$OutlineStyle,
+  outlineWidth?: Property$OutlineWidth<TLength>,
+  overflowAnchor?: Property$OverflowAnchor,
+  overflowBlock?: Property$OverflowBlock,
+  overflowClipBox?: Property$OverflowClipBox,
+  overflowClipMargin?: Property$OverflowClipMargin<TLength>,
+  overflowInline?: Property$OverflowInline,
+  overflowWrap?: Property$OverflowWrap,
+  overflowX?: Property$OverflowX,
+  overflowY?: Property$OverflowY,
+  overlay?: Property$Overlay,
+  overscrollBehaviorBlock?: Property$OverscrollBehaviorBlock,
+  overscrollBehaviorInline?: Property$OverscrollBehaviorInline,
+  overscrollBehaviorX?: Property$OverscrollBehaviorX,
+  overscrollBehaviorY?: Property$OverscrollBehaviorY,
+  paddingBlockEnd?: Property$PaddingBlockEnd<TLength>,
+  paddingBlockStart?: Property$PaddingBlockStart<TLength>,
+  paddingBottom?: Property$PaddingBottom<TLength>,
+  paddingInlineEnd?: Property$PaddingInlineEnd<TLength>,
+  paddingInlineStart?: Property$PaddingInlineStart<TLength>,
+  paddingLeft?: Property$PaddingLeft<TLength>,
+  paddingRight?: Property$PaddingRight<TLength>,
+  paddingTop?: Property$PaddingTop<TLength>,
+  page?: Property$Page,
+  pageBreakAfter?: Property$PageBreakAfter,
+  pageBreakBefore?: Property$PageBreakBefore,
+  pageBreakInside?: Property$PageBreakInside,
+  paintOrder?: Property$PaintOrder,
+  perspective?: Property$Perspective<TLength>,
+  perspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
+  pointerEvents?: Property$PointerEvents,
+  position?: Property$Position,
+  printColorAdjust?: Property$PrintColorAdjust,
+  quotes?: Property$Quotes,
+  resize?: Property$Resize,
+  right?: Property$Right<TLength>,
+  rotate?: Property$Rotate,
+  rowGap?: Property$RowGap<TLength>,
+  rubyAlign?: Property$RubyAlign,
+  rubyMerge?: Property$RubyMerge,
+  rubyPosition?: Property$RubyPosition,
+  scale?: Property$Scale,
+  scrollBehavior?: Property$ScrollBehavior,
+  scrollMarginBlockEnd?: Property$ScrollMarginBlockEnd<TLength>,
+  scrollMarginBlockStart?: Property$ScrollMarginBlockStart<TLength>,
+  scrollMarginBottom?: Property$ScrollMarginBottom<TLength>,
+  scrollMarginInlineEnd?: Property$ScrollMarginInlineEnd<TLength>,
+  scrollMarginInlineStart?: Property$ScrollMarginInlineStart<TLength>,
+  scrollMarginLeft?: Property$ScrollMarginLeft<TLength>,
+  scrollMarginRight?: Property$ScrollMarginRight<TLength>,
+  scrollMarginTop?: Property$ScrollMarginTop<TLength>,
+  scrollPaddingBlockEnd?: Property$ScrollPaddingBlockEnd<TLength>,
+  scrollPaddingBlockStart?: Property$ScrollPaddingBlockStart<TLength>,
+  scrollPaddingBottom?: Property$ScrollPaddingBottom<TLength>,
+  scrollPaddingInlineEnd?: Property$ScrollPaddingInlineEnd<TLength>,
+  scrollPaddingInlineStart?: Property$ScrollPaddingInlineStart<TLength>,
+  scrollPaddingLeft?: Property$ScrollPaddingLeft<TLength>,
+  scrollPaddingRight?: Property$ScrollPaddingRight<TLength>,
+  scrollPaddingTop?: Property$ScrollPaddingTop<TLength>,
+  scrollSnapAlign?: Property$ScrollSnapAlign,
+  scrollSnapMarginBottom?: Property$ScrollMarginBottom<TLength>,
+  scrollSnapMarginLeft?: Property$ScrollMarginLeft<TLength>,
+  scrollSnapMarginRight?: Property$ScrollMarginRight<TLength>,
+  scrollSnapMarginTop?: Property$ScrollMarginTop<TLength>,
+  scrollSnapStop?: Property$ScrollSnapStop,
+  scrollSnapType?: Property$ScrollSnapType,
+  scrollTimelineAxis?: Property$ScrollTimelineAxis,
+  scrollTimelineName?: Property$ScrollTimelineName,
+  scrollbarColor?: Property$ScrollbarColor,
+  scrollbarGutter?: Property$ScrollbarGutter,
+  scrollbarWidth?: Property$ScrollbarWidth,
+  shapeImageThreshold?: Property$ShapeImageThreshold,
+  shapeMargin?: Property$ShapeMargin<TLength>,
+  shapeOutside?: Property$ShapeOutside,
+  tabSize?: Property$TabSize<TLength>,
+  tableLayout?: Property$TableLayout,
+  textAlign?: Property$TextAlign,
+  textAlignLast?: Property$TextAlignLast,
+  textCombineUpright?: Property$TextCombineUpright,
+  textDecorationColor?: Property$TextDecorationColor,
+  textDecorationLine?: Property$TextDecorationLine,
+  textDecorationSkip?: Property$TextDecorationSkip,
+  textDecorationSkipInk?: Property$TextDecorationSkipInk,
+  textDecorationStyle?: Property$TextDecorationStyle,
+  textDecorationThickness?: Property$TextDecorationThickness<TLength>,
+  textEmphasisColor?: Property$TextEmphasisColor,
+  textEmphasisPosition?: Property$TextEmphasisPosition,
+  textEmphasisStyle?: Property$TextEmphasisStyle,
+  textIndent?: Property$TextIndent<TLength>,
+  textJustify?: Property$TextJustify,
+  textOrientation?: Property$TextOrientation,
+  textOverflow?: Property$TextOverflow,
+  textRendering?: Property$TextRendering,
+  textShadow?: Property$TextShadow,
+  textSizeAdjust?: Property$TextSizeAdjust,
+  textTransform?: Property$TextTransform,
+  textUnderlineOffset?: Property$TextUnderlineOffset<TLength>,
+  textUnderlinePosition?: Property$TextUnderlinePosition,
+  textWrap?: Property$TextWrap,
+  timelineScope?: Property$TimelineScope,
+  top?: Property$Top<TLength>,
+  touchAction?: Property$TouchAction,
+  transform?: Property$Transform,
+  transformBox?: Property$TransformBox,
+  transformOrigin?: Property$TransformOrigin<TLength>,
+  transformStyle?: Property$TransformStyle,
+  transitionBehavior?: Property$TransitionBehavior,
+  transitionDelay?: Property$TransitionDelay<TTime>,
+  transitionDuration?: Property$TransitionDuration<TTime>,
+  transitionProperty?: Property$TransitionProperty,
+  transitionTimingFunction?: Property$TransitionTimingFunction,
+  translate?: Property$Translate<TLength>,
+  unicodeBidi?: Property$UnicodeBidi,
+  userSelect?: Property$UserSelect,
+  verticalAlign?: Property$VerticalAlign<TLength>,
+  viewTimelineAxis?: Property$ViewTimelineAxis,
+  viewTimelineInset?: Property$ViewTimelineInset<TLength>,
+  viewTimelineName?: Property$ViewTimelineName,
+  viewTransitionName?: Property$ViewTransitionName,
+  visibility?: Property$Visibility,
+  whiteSpace?: Property$WhiteSpace,
+  whiteSpaceCollapse?: Property$WhiteSpaceCollapse,
+  whiteSpaceTrim?: Property$WhiteSpaceTrim,
+  widows?: Property$Widows,
+  width?: Property$Width<TLength>,
+  willChange?: Property$WillChange,
+  wordBreak?: Property$WordBreak,
+  wordSpacing?: Property$WordSpacing<TLength>,
+  wordWrap?: Property$WordWrap,
+  writingMode?: Property$WritingMode,
+  zIndex?: Property$ZIndex,
+  zoom?: Property$Zoom,
+|};
+
+export type StandardShorthandProperties<TLength = string | 0, TTime = string> = {|
+  all?: Property$All,
+  animation?: Property$Animation<TTime>,
+  animationRange?: Property$AnimationRange<TLength>,
+  background?: Property$Background<TLength>,
+  backgroundPosition?: Property$BackgroundPosition<TLength>,
+  border?: Property$Border<TLength>,
+  borderBlock?: Property$BorderBlock<TLength>,
+  borderBlockEnd?: Property$BorderBlockEnd<TLength>,
+  borderBlockStart?: Property$BorderBlockStart<TLength>,
+  borderBottom?: Property$BorderBottom<TLength>,
+  borderColor?: Property$BorderColor,
+  borderImage?: Property$BorderImage,
+  borderInline?: Property$BorderInline<TLength>,
+  borderInlineEnd?: Property$BorderInlineEnd<TLength>,
+  borderInlineStart?: Property$BorderInlineStart<TLength>,
+  borderLeft?: Property$BorderLeft<TLength>,
+  borderRadius?: Property$BorderRadius<TLength>,
+  borderRight?: Property$BorderRight<TLength>,
+  borderStyle?: Property$BorderStyle,
+  borderTop?: Property$BorderTop<TLength>,
+  borderWidth?: Property$BorderWidth<TLength>,
+  caret?: Property$Caret,
+  columnRule?: Property$ColumnRule<TLength>,
+  columns?: Property$Columns<TLength>,
+  containIntrinsicSize?: Property$ContainIntrinsicSize<TLength>,
+  container?: Property$Container,
+  flex?: Property$Flex<TLength>,
+  flexFlow?: Property$FlexFlow,
+  font?: Property$Font,
+  gap?: Property$Gap<TLength>,
+  grid?: Property$Grid,
+  gridArea?: Property$GridArea,
+  gridColumn?: Property$GridColumn,
+  gridRow?: Property$GridRow,
+  gridTemplate?: Property$GridTemplate,
+  inset?: Property$Inset<TLength>,
+  insetBlock?: Property$InsetBlock<TLength>,
+  insetInline?: Property$InsetInline<TLength>,
+  lineClamp?: Property$LineClamp,
+  listStyle?: Property$ListStyle,
+  margin?: Property$Margin<TLength>,
+  marginBlock?: Property$MarginBlock<TLength>,
+  marginInline?: Property$MarginInline<TLength>,
+  mask?: Property$Mask<TLength>,
+  maskBorder?: Property$MaskBorder,
+  motion?: Property$Offset<TLength>,
+  offset?: Property$Offset<TLength>,
+  outline?: Property$Outline<TLength>,
+  overflow?: Property$Overflow,
+  overscrollBehavior?: Property$OverscrollBehavior,
+  padding?: Property$Padding<TLength>,
+  paddingBlock?: Property$PaddingBlock<TLength>,
+  paddingInline?: Property$PaddingInline<TLength>,
+  placeContent?: Property$PlaceContent,
+  placeItems?: Property$PlaceItems,
+  placeSelf?: Property$PlaceSelf,
+  scrollMargin?: Property$ScrollMargin<TLength>,
+  scrollMarginBlock?: Property$ScrollMarginBlock<TLength>,
+  scrollMarginInline?: Property$ScrollMarginInline<TLength>,
+  scrollPadding?: Property$ScrollPadding<TLength>,
+  scrollPaddingBlock?: Property$ScrollPaddingBlock<TLength>,
+  scrollPaddingInline?: Property$ScrollPaddingInline<TLength>,
+  scrollSnapMargin?: Property$ScrollMargin<TLength>,
+  scrollTimeline?: Property$ScrollTimeline,
+  textDecoration?: Property$TextDecoration<TLength>,
+  textEmphasis?: Property$TextEmphasis,
+  transition?: Property$Transition<TTime>,
+  viewTimeline?: Property$ViewTimeline,
+|};
+
+export type StandardProperties<TLength = string | 0, TTime = string> = {| ...StandardLonghandProperties<TLength, TTime>, ...StandardShorthandProperties<TLength, TTime> |};
+
+export type VendorLonghandProperties<TLength = string | 0, TTime = string> = {|
+  MozAnimationDelay?: Property$AnimationDelay<TTime>,
+  MozAnimationDirection?: Property$AnimationDirection,
+  MozAnimationDuration?: Property$AnimationDuration<TTime>,
+  MozAnimationFillMode?: Property$AnimationFillMode,
+  MozAnimationIterationCount?: Property$AnimationIterationCount,
+  MozAnimationName?: Property$AnimationName,
+  MozAnimationPlayState?: Property$AnimationPlayState,
+  MozAnimationTimingFunction?: Property$AnimationTimingFunction,
+  MozAppearance?: Property$MozAppearance,
+  MozBinding?: Property$MozBinding,
+  MozBorderBottomColors?: Property$MozBorderBottomColors,
+  MozBorderEndColor?: Property$BorderInlineEndColor,
+  MozBorderEndStyle?: Property$BorderInlineEndStyle,
+  MozBorderEndWidth?: Property$BorderInlineEndWidth<TLength>,
+  MozBorderLeftColors?: Property$MozBorderLeftColors,
+  MozBorderRightColors?: Property$MozBorderRightColors,
+  MozBorderStartColor?: Property$BorderInlineStartColor,
+  MozBorderStartStyle?: Property$BorderInlineStartStyle,
+  MozBorderTopColors?: Property$MozBorderTopColors,
+  MozBoxSizing?: Property$BoxSizing,
+  MozColumnCount?: Property$ColumnCount,
+  MozColumnFill?: Property$ColumnFill,
+  MozColumnRuleColor?: Property$ColumnRuleColor,
+  MozColumnRuleStyle?: Property$ColumnRuleStyle,
+  MozColumnRuleWidth?: Property$ColumnRuleWidth<TLength>,
+  MozColumnWidth?: Property$ColumnWidth<TLength>,
+  MozContextProperties?: Property$MozContextProperties,
+  MozFontFeatureSettings?: Property$FontFeatureSettings,
+  MozFontLanguageOverride?: Property$FontLanguageOverride,
+  MozHyphens?: Property$Hyphens,
+  MozImageRegion?: Property$MozImageRegion,
+  MozMarginEnd?: Property$MarginInlineEnd<TLength>,
+  MozMarginStart?: Property$MarginInlineStart<TLength>,
+  MozOrient?: Property$MozOrient,
+  MozOsxFontSmoothing?: Property$FontSmooth<TLength>,
+  MozOutlineRadiusBottomleft?: Property$MozOutlineRadiusBottomleft<TLength>,
+  MozOutlineRadiusBottomright?: Property$MozOutlineRadiusBottomright<TLength>,
+  MozOutlineRadiusTopleft?: Property$MozOutlineRadiusTopleft<TLength>,
+  MozOutlineRadiusTopright?: Property$MozOutlineRadiusTopright<TLength>,
+  MozPaddingEnd?: Property$PaddingInlineEnd<TLength>,
+  MozPaddingStart?: Property$PaddingInlineStart<TLength>,
+  MozStackSizing?: Property$MozStackSizing,
+  MozTabSize?: Property$TabSize<TLength>,
+  MozTextBlink?: Property$MozTextBlink,
+  MozTextSizeAdjust?: Property$TextSizeAdjust,
+  MozUserFocus?: Property$MozUserFocus,
+  MozUserModify?: Property$MozUserModify,
+  MozUserSelect?: Property$UserSelect,
+  MozWindowDragging?: Property$MozWindowDragging,
+  MozWindowShadow?: Property$MozWindowShadow,
+  msAccelerator?: Property$MsAccelerator,
+  msBlockProgression?: Property$MsBlockProgression,
+  msContentZoomChaining?: Property$MsContentZoomChaining,
+  msContentZoomLimitMax?: Property$MsContentZoomLimitMax,
+  msContentZoomLimitMin?: Property$MsContentZoomLimitMin,
+  msContentZoomSnapPoints?: Property$MsContentZoomSnapPoints,
+  msContentZoomSnapType?: Property$MsContentZoomSnapType,
+  msContentZooming?: Property$MsContentZooming,
+  msFilter?: Property$MsFilter,
+  msFlexDirection?: Property$FlexDirection,
+  msFlexPositive?: Property$FlexGrow,
+  msFlowFrom?: Property$MsFlowFrom,
+  msFlowInto?: Property$MsFlowInto,
+  msGridColumns?: Property$MsGridColumns<TLength>,
+  msGridRows?: Property$MsGridRows<TLength>,
+  msHighContrastAdjust?: Property$MsHighContrastAdjust,
+  msHyphenateLimitChars?: Property$MsHyphenateLimitChars,
+  msHyphenateLimitLines?: Property$MsHyphenateLimitLines,
+  msHyphenateLimitZone?: Property$MsHyphenateLimitZone<TLength>,
+  msHyphens?: Property$Hyphens,
+  msImeAlign?: Property$MsImeAlign,
+  msLineBreak?: Property$LineBreak,
+  msOrder?: Property$Order,
+  msOverflowStyle?: Property$MsOverflowStyle,
+  msOverflowX?: Property$OverflowX,
+  msOverflowY?: Property$OverflowY,
+  msScrollChaining?: Property$MsScrollChaining,
+  msScrollLimitXMax?: Property$MsScrollLimitXMax<TLength>,
+  msScrollLimitXMin?: Property$MsScrollLimitXMin<TLength>,
+  msScrollLimitYMax?: Property$MsScrollLimitYMax<TLength>,
+  msScrollLimitYMin?: Property$MsScrollLimitYMin<TLength>,
+  msScrollRails?: Property$MsScrollRails,
+  msScrollSnapPointsX?: Property$MsScrollSnapPointsX,
+  msScrollSnapPointsY?: Property$MsScrollSnapPointsY,
+  msScrollSnapType?: Property$MsScrollSnapType,
+  msScrollTranslation?: Property$MsScrollTranslation,
+  msScrollbar3dlightColor?: Property$MsScrollbar3dlightColor,
+  msScrollbarArrowColor?: Property$MsScrollbarArrowColor,
+  msScrollbarBaseColor?: Property$MsScrollbarBaseColor,
+  msScrollbarDarkshadowColor?: Property$MsScrollbarDarkshadowColor,
+  msScrollbarFaceColor?: Property$MsScrollbarFaceColor,
+  msScrollbarHighlightColor?: Property$MsScrollbarHighlightColor,
+  msScrollbarShadowColor?: Property$MsScrollbarShadowColor,
+  msScrollbarTrackColor?: Property$MsScrollbarTrackColor,
+  msTextAutospace?: Property$MsTextAutospace,
+  msTextCombineHorizontal?: Property$TextCombineUpright,
+  msTextOverflow?: Property$TextOverflow,
+  msTouchAction?: Property$TouchAction,
+  msTouchSelect?: Property$MsTouchSelect,
+  msTransform?: Property$Transform,
+  msTransformOrigin?: Property$TransformOrigin<TLength>,
+  msTransitionDelay?: Property$TransitionDelay<TTime>,
+  msTransitionDuration?: Property$TransitionDuration<TTime>,
+  msTransitionProperty?: Property$TransitionProperty,
+  msTransitionTimingFunction?: Property$TransitionTimingFunction,
+  msUserSelect?: Property$MsUserSelect,
+  msWordBreak?: Property$WordBreak,
+  msWrapFlow?: Property$MsWrapFlow,
+  msWrapMargin?: Property$MsWrapMargin<TLength>,
+  msWrapThrough?: Property$MsWrapThrough,
+  msWritingMode?: Property$WritingMode,
+  WebkitAlignContent?: Property$AlignContent,
+  WebkitAlignItems?: Property$AlignItems,
+  WebkitAlignSelf?: Property$AlignSelf,
+  WebkitAnimationDelay?: Property$AnimationDelay<TTime>,
+  WebkitAnimationDirection?: Property$AnimationDirection,
+  WebkitAnimationDuration?: Property$AnimationDuration<TTime>,
+  WebkitAnimationFillMode?: Property$AnimationFillMode,
+  WebkitAnimationIterationCount?: Property$AnimationIterationCount,
+  WebkitAnimationName?: Property$AnimationName,
+  WebkitAnimationPlayState?: Property$AnimationPlayState,
+  WebkitAnimationTimingFunction?: Property$AnimationTimingFunction,
+  WebkitAppearance?: Property$WebkitAppearance,
+  WebkitBackdropFilter?: Property$BackdropFilter,
+  WebkitBackfaceVisibility?: Property$BackfaceVisibility,
+  WebkitBackgroundClip?: Property$BackgroundClip,
+  WebkitBackgroundOrigin?: Property$BackgroundOrigin,
+  WebkitBackgroundSize?: Property$BackgroundSize<TLength>,
+  WebkitBorderBeforeColor?: Property$WebkitBorderBeforeColor,
+  WebkitBorderBeforeStyle?: Property$WebkitBorderBeforeStyle,
+  WebkitBorderBeforeWidth?: Property$WebkitBorderBeforeWidth<TLength>,
+  WebkitBorderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength>,
+  WebkitBorderBottomRightRadius?: Property$BorderBottomRightRadius<TLength>,
+  WebkitBorderImageSlice?: Property$BorderImageSlice,
+  WebkitBorderTopLeftRadius?: Property$BorderTopLeftRadius<TLength>,
+  WebkitBorderTopRightRadius?: Property$BorderTopRightRadius<TLength>,
+  WebkitBoxDecorationBreak?: Property$BoxDecorationBreak,
+  WebkitBoxReflect?: Property$WebkitBoxReflect<TLength>,
+  WebkitBoxShadow?: Property$BoxShadow,
+  WebkitBoxSizing?: Property$BoxSizing,
+  WebkitClipPath?: Property$ClipPath,
+  WebkitColumnCount?: Property$ColumnCount,
+  WebkitColumnFill?: Property$ColumnFill,
+  WebkitColumnRuleColor?: Property$ColumnRuleColor,
+  WebkitColumnRuleStyle?: Property$ColumnRuleStyle,
+  WebkitColumnRuleWidth?: Property$ColumnRuleWidth<TLength>,
+  WebkitColumnSpan?: Property$ColumnSpan,
+  WebkitColumnWidth?: Property$ColumnWidth<TLength>,
+  WebkitFilter?: Property$Filter,
+  WebkitFlexBasis?: Property$FlexBasis<TLength>,
+  WebkitFlexDirection?: Property$FlexDirection,
+  WebkitFlexGrow?: Property$FlexGrow,
+  WebkitFlexShrink?: Property$FlexShrink,
+  WebkitFlexWrap?: Property$FlexWrap,
+  WebkitFontFeatureSettings?: Property$FontFeatureSettings,
+  WebkitFontKerning?: Property$FontKerning,
+  WebkitFontSmoothing?: Property$FontSmooth<TLength>,
+  WebkitFontVariantLigatures?: Property$FontVariantLigatures,
+  WebkitHyphenateCharacter?: Property$HyphenateCharacter,
+  WebkitHyphens?: Property$Hyphens,
+  WebkitInitialLetter?: Property$InitialLetter,
+  WebkitJustifyContent?: Property$JustifyContent,
+  WebkitLineBreak?: Property$LineBreak,
+  WebkitLineClamp?: Property$WebkitLineClamp,
+  WebkitMarginEnd?: Property$MarginInlineEnd<TLength>,
+  WebkitMarginStart?: Property$MarginInlineStart<TLength>,
+  WebkitMaskAttachment?: Property$WebkitMaskAttachment,
+  WebkitMaskBoxImageOutset?: Property$MaskBorderOutset<TLength>,
+  WebkitMaskBoxImageRepeat?: Property$MaskBorderRepeat,
+  WebkitMaskBoxImageSlice?: Property$MaskBorderSlice,
+  WebkitMaskBoxImageSource?: Property$MaskBorderSource,
+  WebkitMaskBoxImageWidth?: Property$MaskBorderWidth<TLength>,
+  WebkitMaskClip?: Property$WebkitMaskClip,
+  WebkitMaskComposite?: Property$WebkitMaskComposite,
+  WebkitMaskImage?: Property$WebkitMaskImage,
+  WebkitMaskOrigin?: Property$WebkitMaskOrigin,
+  WebkitMaskPosition?: Property$WebkitMaskPosition<TLength>,
+  WebkitMaskPositionX?: Property$WebkitMaskPositionX<TLength>,
+  WebkitMaskPositionY?: Property$WebkitMaskPositionY<TLength>,
+  WebkitMaskRepeat?: Property$WebkitMaskRepeat,
+  WebkitMaskRepeatX?: Property$WebkitMaskRepeatX,
+  WebkitMaskRepeatY?: Property$WebkitMaskRepeatY,
+  WebkitMaskSize?: Property$WebkitMaskSize<TLength>,
+  WebkitMaxInlineSize?: Property$MaxInlineSize<TLength>,
+  WebkitOrder?: Property$Order,
+  WebkitOverflowScrolling?: Property$WebkitOverflowScrolling,
+  WebkitPaddingEnd?: Property$PaddingInlineEnd<TLength>,
+  WebkitPaddingStart?: Property$PaddingInlineStart<TLength>,
+  WebkitPerspective?: Property$Perspective<TLength>,
+  WebkitPerspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
+  WebkitPrintColorAdjust?: Property$PrintColorAdjust,
+  WebkitRubyPosition?: Property$RubyPosition,
+  WebkitScrollSnapType?: Property$ScrollSnapType,
+  WebkitShapeMargin?: Property$ShapeMargin<TLength>,
+  WebkitTapHighlightColor?: Property$WebkitTapHighlightColor,
+  WebkitTextCombine?: Property$TextCombineUpright,
+  WebkitTextDecorationColor?: Property$TextDecorationColor,
+  WebkitTextDecorationLine?: Property$TextDecorationLine,
+  WebkitTextDecorationSkip?: Property$TextDecorationSkip,
+  WebkitTextDecorationStyle?: Property$TextDecorationStyle,
+  WebkitTextEmphasisColor?: Property$TextEmphasisColor,
+  WebkitTextEmphasisPosition?: Property$TextEmphasisPosition,
+  WebkitTextEmphasisStyle?: Property$TextEmphasisStyle,
+  WebkitTextFillColor?: Property$WebkitTextFillColor,
+  WebkitTextOrientation?: Property$TextOrientation,
+  WebkitTextSizeAdjust?: Property$TextSizeAdjust,
+  WebkitTextStrokeColor?: Property$WebkitTextStrokeColor,
+  WebkitTextStrokeWidth?: Property$WebkitTextStrokeWidth<TLength>,
+  WebkitTextUnderlinePosition?: Property$TextUnderlinePosition,
+  WebkitTouchCallout?: Property$WebkitTouchCallout,
+  WebkitTransform?: Property$Transform,
+  WebkitTransformOrigin?: Property$TransformOrigin<TLength>,
+  WebkitTransformStyle?: Property$TransformStyle,
+  WebkitTransitionDelay?: Property$TransitionDelay<TTime>,
+  WebkitTransitionDuration?: Property$TransitionDuration<TTime>,
+  WebkitTransitionProperty?: Property$TransitionProperty,
+  WebkitTransitionTimingFunction?: Property$TransitionTimingFunction,
+  WebkitUserModify?: Property$WebkitUserModify,
+  WebkitUserSelect?: Property$UserSelect,
+  WebkitWritingMode?: Property$WritingMode,
+|};
+
+export type VendorShorthandProperties<TLength = string | 0, TTime = string> = {|
+  MozAnimation?: Property$Animation<TTime>,
+  MozBorderImage?: Property$BorderImage,
+  MozColumnRule?: Property$ColumnRule<TLength>,
+  MozColumns?: Property$Columns<TLength>,
+  MozOutlineRadius?: Property$MozOutlineRadius<TLength>,
+  msContentZoomLimit?: Property$MsContentZoomLimit,
+  msContentZoomSnap?: Property$MsContentZoomSnap,
+  msFlex?: Property$Flex<TLength>,
+  msScrollLimit?: Property$MsScrollLimit,
+  msScrollSnapX?: Property$MsScrollSnapX,
+  msScrollSnapY?: Property$MsScrollSnapY,
+  msTransition?: Property$Transition<TTime>,
+  WebkitAnimation?: Property$Animation<TTime>,
+  WebkitBorderBefore?: Property$WebkitBorderBefore<TLength>,
+  WebkitBorderImage?: Property$BorderImage,
+  WebkitBorderRadius?: Property$BorderRadius<TLength>,
+  WebkitColumnRule?: Property$ColumnRule<TLength>,
+  WebkitColumns?: Property$Columns<TLength>,
+  WebkitFlex?: Property$Flex<TLength>,
+  WebkitFlexFlow?: Property$FlexFlow,
+  WebkitMask?: Property$WebkitMask<TLength>,
+  WebkitMaskBoxImage?: Property$MaskBorder,
+  WebkitTextEmphasis?: Property$TextEmphasis,
+  WebkitTextStroke?: Property$WebkitTextStroke<TLength>,
+  WebkitTransition?: Property$Transition<TTime>,
+|};
+
+export type VendorProperties<TLength = string | 0, TTime = string> = {| ...VendorLonghandProperties<TLength, TTime>, ...VendorShorthandProperties<TLength, TTime> |};
+
+export type ObsoleteProperties<TLength = string | 0, TTime = string> = {|
+  azimuth?: Property$Azimuth,
+  boxAlign?: Property$BoxAlign,
+  boxDirection?: Property$BoxDirection,
+  boxFlex?: Property$BoxFlex,
+  boxFlexGroup?: Property$BoxFlexGroup,
+  boxLines?: Property$BoxLines,
+  boxOrdinalGroup?: Property$BoxOrdinalGroup,
+  boxOrient?: Property$BoxOrient,
+  boxPack?: Property$BoxPack,
+  clip?: Property$Clip,
+  gridColumnGap?: Property$GridColumnGap<TLength>,
+  gridGap?: Property$GridGap<TLength>,
+  gridRowGap?: Property$GridRowGap<TLength>,
+  imeMode?: Property$ImeMode,
+  offsetBlock?: Property$InsetBlock<TLength>,
+  offsetBlockEnd?: Property$InsetBlockEnd<TLength>,
+  offsetBlockStart?: Property$InsetBlockStart<TLength>,
+  offsetInline?: Property$InsetInline<TLength>,
+  offsetInlineEnd?: Property$InsetInlineEnd<TLength>,
+  offsetInlineStart?: Property$InsetInlineStart<TLength>,
+  scrollSnapCoordinate?: Property$ScrollSnapCoordinate<TLength>,
+  scrollSnapDestination?: Property$ScrollSnapDestination<TLength>,
+  scrollSnapPointsX?: Property$ScrollSnapPointsX,
+  scrollSnapPointsY?: Property$ScrollSnapPointsY,
+  scrollSnapTypeX?: Property$ScrollSnapTypeX,
+  scrollSnapTypeY?: Property$ScrollSnapTypeY,
+  KhtmlBoxAlign?: Property$BoxAlign,
+  KhtmlBoxDirection?: Property$BoxDirection,
+  KhtmlBoxFlex?: Property$BoxFlex,
+  KhtmlBoxFlexGroup?: Property$BoxFlexGroup,
+  KhtmlBoxLines?: Property$BoxLines,
+  KhtmlBoxOrdinalGroup?: Property$BoxOrdinalGroup,
+  KhtmlBoxOrient?: Property$BoxOrient,
+  KhtmlBoxPack?: Property$BoxPack,
+  KhtmlLineBreak?: Property$LineBreak,
+  KhtmlOpacity?: Property$Opacity,
+  KhtmlUserSelect?: Property$UserSelect,
+  MozBackfaceVisibility?: Property$BackfaceVisibility,
+  MozBackgroundClip?: Property$BackgroundClip,
+  MozBackgroundInlinePolicy?: Property$BoxDecorationBreak,
+  MozBackgroundOrigin?: Property$BackgroundOrigin,
+  MozBackgroundSize?: Property$BackgroundSize<TLength>,
+  MozBorderRadius?: Property$BorderRadius<TLength>,
+  MozBorderRadiusBottomleft?: Property$BorderBottomLeftRadius<TLength>,
+  MozBorderRadiusBottomright?: Property$BorderBottomRightRadius<TLength>,
+  MozBorderRadiusTopleft?: Property$BorderTopLeftRadius<TLength>,
+  MozBorderRadiusTopright?: Property$BorderTopRightRadius<TLength>,
+  MozBoxAlign?: Property$BoxAlign,
+  MozBoxDirection?: Property$BoxDirection,
+  MozBoxFlex?: Property$BoxFlex,
+  MozBoxOrdinalGroup?: Property$BoxOrdinalGroup,
+  MozBoxOrient?: Property$BoxOrient,
+  MozBoxPack?: Property$BoxPack,
+  MozBoxShadow?: Property$BoxShadow,
+  MozFloatEdge?: Property$MozFloatEdge,
+  MozForceBrokenImageIcon?: Property$MozForceBrokenImageIcon,
+  MozOpacity?: Property$Opacity,
+  MozOutline?: Property$Outline<TLength>,
+  MozOutlineColor?: Property$OutlineColor,
+  MozOutlineStyle?: Property$OutlineStyle,
+  MozOutlineWidth?: Property$OutlineWidth<TLength>,
+  MozPerspective?: Property$Perspective<TLength>,
+  MozPerspectiveOrigin?: Property$PerspectiveOrigin<TLength>,
+  MozTextAlignLast?: Property$TextAlignLast,
+  MozTextDecorationColor?: Property$TextDecorationColor,
+  MozTextDecorationLine?: Property$TextDecorationLine,
+  MozTextDecorationStyle?: Property$TextDecorationStyle,
+  MozTransform?: Property$Transform,
+  MozTransformOrigin?: Property$TransformOrigin<TLength>,
+  MozTransformStyle?: Property$TransformStyle,
+  MozTransition?: Property$Transition<TTime>,
+  MozTransitionDelay?: Property$TransitionDelay<TTime>,
+  MozTransitionDuration?: Property$TransitionDuration<TTime>,
+  MozTransitionProperty?: Property$TransitionProperty,
+  MozTransitionTimingFunction?: Property$TransitionTimingFunction,
+  MozUserInput?: Property$MozUserInput,
+  msImeMode?: Property$ImeMode,
+  OAnimation?: Property$Animation<TTime>,
+  OAnimationDelay?: Property$AnimationDelay<TTime>,
+  OAnimationDirection?: Property$AnimationDirection,
+  OAnimationDuration?: Property$AnimationDuration<TTime>,
+  OAnimationFillMode?: Property$AnimationFillMode,
+  OAnimationIterationCount?: Property$AnimationIterationCount,
+  OAnimationName?: Property$AnimationName,
+  OAnimationPlayState?: Property$AnimationPlayState,
+  OAnimationTimingFunction?: Property$AnimationTimingFunction,
+  OBackgroundSize?: Property$BackgroundSize<TLength>,
+  OBorderImage?: Property$BorderImage,
+  OObjectFit?: Property$ObjectFit,
+  OObjectPosition?: Property$ObjectPosition<TLength>,
+  OTabSize?: Property$TabSize<TLength>,
+  OTextOverflow?: Property$TextOverflow,
+  OTransform?: Property$Transform,
+  OTransformOrigin?: Property$TransformOrigin<TLength>,
+  OTransition?: Property$Transition<TTime>,
+  OTransitionDelay?: Property$TransitionDelay<TTime>,
+  OTransitionDuration?: Property$TransitionDuration<TTime>,
+  OTransitionProperty?: Property$TransitionProperty,
+  OTransitionTimingFunction?: Property$TransitionTimingFunction,
+  WebkitBoxAlign?: Property$BoxAlign,
+  WebkitBoxDirection?: Property$BoxDirection,
+  WebkitBoxFlex?: Property$BoxFlex,
+  WebkitBoxFlexGroup?: Property$BoxFlexGroup,
+  WebkitBoxLines?: Property$BoxLines,
+  WebkitBoxOrdinalGroup?: Property$BoxOrdinalGroup,
+  WebkitBoxOrient?: Property$BoxOrient,
+  WebkitBoxPack?: Property$BoxPack,
+|};
+
+export type SvgProperties<TLength = string | 0, TTime = string> = {|
+  alignmentBaseline?: Property$AlignmentBaseline,
+  baselineShift?: Property$BaselineShift<TLength>,
+  clip?: Property$Clip,
+  clipPath?: Property$ClipPath,
+  clipRule?: Property$ClipRule,
+  color?: Property$Color,
+  colorInterpolation?: Property$ColorInterpolation,
+  colorRendering?: Property$ColorRendering,
+  cursor?: Property$Cursor,
+  direction?: Property$Direction,
+  display?: Property$Display,
+  dominantBaseline?: Property$DominantBaseline,
+  fill?: Property$Fill,
+  fillOpacity?: Property$FillOpacity,
+  fillRule?: Property$FillRule,
+  filter?: Property$Filter,
+  floodColor?: Property$FloodColor,
+  floodOpacity?: Property$FloodOpacity,
+  font?: Property$Font,
+  fontFamily?: Property$FontFamily,
+  fontSize?: Property$FontSize<TLength>,
+  fontSizeAdjust?: Property$FontSizeAdjust,
+  fontStretch?: Property$FontStretch,
+  fontStyle?: Property$FontStyle,
+  fontVariant?: Property$FontVariant,
+  fontWeight?: Property$FontWeight,
+  glyphOrientationVertical?: Property$GlyphOrientationVertical,
+  imageRendering?: Property$ImageRendering,
+  letterSpacing?: Property$LetterSpacing<TLength>,
+  lightingColor?: Property$LightingColor,
+  lineHeight?: Property$LineHeight<TLength>,
+  marker?: Property$Marker,
+  markerEnd?: Property$MarkerEnd,
+  markerMid?: Property$MarkerMid,
+  markerStart?: Property$MarkerStart,
+  mask?: Property$Mask<TLength>,
+  opacity?: Property$Opacity,
+  overflow?: Property$Overflow,
+  paintOrder?: Property$PaintOrder,
+  pointerEvents?: Property$PointerEvents,
+  shapeRendering?: Property$ShapeRendering,
+  stopColor?: Property$StopColor,
+  stopOpacity?: Property$StopOpacity,
+  stroke?: Property$Stroke,
+  strokeDasharray?: Property$StrokeDasharray<TLength>,
+  strokeDashoffset?: Property$StrokeDashoffset<TLength>,
+  strokeLinecap?: Property$StrokeLinecap,
+  strokeLinejoin?: Property$StrokeLinejoin,
+  strokeMiterlimit?: Property$StrokeMiterlimit,
+  strokeOpacity?: Property$StrokeOpacity,
+  strokeWidth?: Property$StrokeWidth<TLength>,
+  textAnchor?: Property$TextAnchor,
+  textDecoration?: Property$TextDecoration<TLength>,
+  textRendering?: Property$TextRendering,
+  unicodeBidi?: Property$UnicodeBidi,
+  vectorEffect?: Property$VectorEffect,
+  visibility?: Property$Visibility,
+  whiteSpace?: Property$WhiteSpace,
+  wordSpacing?: Property$WordSpacing<TLength>,
+  writingMode?: Property$WritingMode,
+|};
+
+export type Properties<TLength = string | 0, TTime = string> = {|
+  ...StandardProperties<TLength, TTime>,
+  ...VendorProperties<TLength, TTime>,
+  ...ObsoleteProperties<TLength, TTime>,
+  ...SvgProperties<TLength, TTime>,
+|};
+
+export type StandardLonghandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  "accent-color"?: Property$AccentColor,
+  "align-content"?: Property$AlignContent,
+  "align-items"?: Property$AlignItems,
+  "align-self"?: Property$AlignSelf,
+  "align-tracks"?: Property$AlignTracks,
+  "animation-composition"?: Property$AnimationComposition,
+  "animation-delay"?: Property$AnimationDelay<TTime>,
+  "animation-direction"?: Property$AnimationDirection,
+  "animation-duration"?: Property$AnimationDuration<TTime>,
+  "animation-fill-mode"?: Property$AnimationFillMode,
+  "animation-iteration-count"?: Property$AnimationIterationCount,
+  "animation-name"?: Property$AnimationName,
+  "animation-play-state"?: Property$AnimationPlayState,
+  "animation-range-end"?: Property$AnimationRangeEnd<TLength>,
+  "animation-range-start"?: Property$AnimationRangeStart<TLength>,
+  "animation-timeline"?: Property$AnimationTimeline,
+  "animation-timing-function"?: Property$AnimationTimingFunction,
+  appearance?: Property$Appearance,
+  "aspect-ratio"?: Property$AspectRatio,
+  "backdrop-filter"?: Property$BackdropFilter,
+  "backface-visibility"?: Property$BackfaceVisibility,
+  "background-attachment"?: Property$BackgroundAttachment,
+  "background-blend-mode"?: Property$BackgroundBlendMode,
+  "background-clip"?: Property$BackgroundClip,
+  "background-color"?: Property$BackgroundColor,
+  "background-image"?: Property$BackgroundImage,
+  "background-origin"?: Property$BackgroundOrigin,
+  "background-position-x"?: Property$BackgroundPositionX<TLength>,
+  "background-position-y"?: Property$BackgroundPositionY<TLength>,
+  "background-repeat"?: Property$BackgroundRepeat,
+  "background-size"?: Property$BackgroundSize<TLength>,
+  "block-overflow"?: Property$BlockOverflow,
+  "block-size"?: Property$BlockSize<TLength>,
+  "border-block-color"?: Property$BorderBlockColor,
+  "border-block-end-color"?: Property$BorderBlockEndColor,
+  "border-block-end-style"?: Property$BorderBlockEndStyle,
+  "border-block-end-width"?: Property$BorderBlockEndWidth<TLength>,
+  "border-block-start-color"?: Property$BorderBlockStartColor,
+  "border-block-start-style"?: Property$BorderBlockStartStyle,
+  "border-block-start-width"?: Property$BorderBlockStartWidth<TLength>,
+  "border-block-style"?: Property$BorderBlockStyle,
+  "border-block-width"?: Property$BorderBlockWidth<TLength>,
+  "border-bottom-color"?: Property$BorderBottomColor,
+  "border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength>,
+  "border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength>,
+  "border-bottom-style"?: Property$BorderBottomStyle,
+  "border-bottom-width"?: Property$BorderBottomWidth<TLength>,
+  "border-collapse"?: Property$BorderCollapse,
+  "border-end-end-radius"?: Property$BorderEndEndRadius<TLength>,
+  "border-end-start-radius"?: Property$BorderEndStartRadius<TLength>,
+  "border-image-outset"?: Property$BorderImageOutset<TLength>,
+  "border-image-repeat"?: Property$BorderImageRepeat,
+  "border-image-slice"?: Property$BorderImageSlice,
+  "border-image-source"?: Property$BorderImageSource,
+  "border-image-width"?: Property$BorderImageWidth<TLength>,
+  "border-inline-color"?: Property$BorderInlineColor,
+  "border-inline-end-color"?: Property$BorderInlineEndColor,
+  "border-inline-end-style"?: Property$BorderInlineEndStyle,
+  "border-inline-end-width"?: Property$BorderInlineEndWidth<TLength>,
+  "border-inline-start-color"?: Property$BorderInlineStartColor,
+  "border-inline-start-style"?: Property$BorderInlineStartStyle,
+  "border-inline-start-width"?: Property$BorderInlineStartWidth<TLength>,
+  "border-inline-style"?: Property$BorderInlineStyle,
+  "border-inline-width"?: Property$BorderInlineWidth<TLength>,
+  "border-left-color"?: Property$BorderLeftColor,
+  "border-left-style"?: Property$BorderLeftStyle,
+  "border-left-width"?: Property$BorderLeftWidth<TLength>,
+  "border-right-color"?: Property$BorderRightColor,
+  "border-right-style"?: Property$BorderRightStyle,
+  "border-right-width"?: Property$BorderRightWidth<TLength>,
+  "border-spacing"?: Property$BorderSpacing<TLength>,
+  "border-start-end-radius"?: Property$BorderStartEndRadius<TLength>,
+  "border-start-start-radius"?: Property$BorderStartStartRadius<TLength>,
+  "border-top-color"?: Property$BorderTopColor,
+  "border-top-left-radius"?: Property$BorderTopLeftRadius<TLength>,
+  "border-top-right-radius"?: Property$BorderTopRightRadius<TLength>,
+  "border-top-style"?: Property$BorderTopStyle,
+  "border-top-width"?: Property$BorderTopWidth<TLength>,
+  bottom?: Property$Bottom<TLength>,
+  "box-decoration-break"?: Property$BoxDecorationBreak,
+  "box-shadow"?: Property$BoxShadow,
+  "box-sizing"?: Property$BoxSizing,
+  "break-after"?: Property$BreakAfter,
+  "break-before"?: Property$BreakBefore,
+  "break-inside"?: Property$BreakInside,
+  "caption-side"?: Property$CaptionSide,
+  "caret-color"?: Property$CaretColor,
+  "caret-shape"?: Property$CaretShape,
+  clear?: Property$Clear,
+  "clip-path"?: Property$ClipPath,
+  color?: Property$Color,
+  "color-adjust"?: Property$PrintColorAdjust,
+  "color-scheme"?: Property$ColorScheme,
+  "column-count"?: Property$ColumnCount,
+  "column-fill"?: Property$ColumnFill,
+  "column-gap"?: Property$ColumnGap<TLength>,
+  "column-rule-color"?: Property$ColumnRuleColor,
+  "column-rule-style"?: Property$ColumnRuleStyle,
+  "column-rule-width"?: Property$ColumnRuleWidth<TLength>,
+  "column-span"?: Property$ColumnSpan,
+  "column-width"?: Property$ColumnWidth<TLength>,
+  contain?: Property$Contain,
+  "contain-intrinsic-block-size"?: Property$ContainIntrinsicBlockSize<TLength>,
+  "contain-intrinsic-height"?: Property$ContainIntrinsicHeight<TLength>,
+  "contain-intrinsic-inline-size"?: Property$ContainIntrinsicInlineSize<TLength>,
+  "contain-intrinsic-width"?: Property$ContainIntrinsicWidth<TLength>,
+  "container-name"?: Property$ContainerName,
+  "container-type"?: Property$ContainerType,
+  content?: Property$Content,
+  "content-visibility"?: Property$ContentVisibility,
+  "counter-increment"?: Property$CounterIncrement,
+  "counter-reset"?: Property$CounterReset,
+  "counter-set"?: Property$CounterSet,
+  cursor?: Property$Cursor,
+  direction?: Property$Direction,
+  display?: Property$Display,
+  "empty-cells"?: Property$EmptyCells,
+  filter?: Property$Filter,
+  "flex-basis"?: Property$FlexBasis<TLength>,
+  "flex-direction"?: Property$FlexDirection,
+  "flex-grow"?: Property$FlexGrow,
+  "flex-shrink"?: Property$FlexShrink,
+  "flex-wrap"?: Property$FlexWrap,
+  float?: Property$Float,
+  "font-family"?: Property$FontFamily,
+  "font-feature-settings"?: Property$FontFeatureSettings,
+  "font-kerning"?: Property$FontKerning,
+  "font-language-override"?: Property$FontLanguageOverride,
+  "font-optical-sizing"?: Property$FontOpticalSizing,
+  "font-palette"?: Property$FontPalette,
+  "font-size"?: Property$FontSize<TLength>,
+  "font-size-adjust"?: Property$FontSizeAdjust,
+  "font-smooth"?: Property$FontSmooth<TLength>,
+  "font-stretch"?: Property$FontStretch,
+  "font-style"?: Property$FontStyle,
+  "font-synthesis"?: Property$FontSynthesis,
+  "font-synthesis-position"?: Property$FontSynthesisPosition,
+  "font-synthesis-small-caps"?: Property$FontSynthesisSmallCaps,
+  "font-synthesis-style"?: Property$FontSynthesisStyle,
+  "font-synthesis-weight"?: Property$FontSynthesisWeight,
+  "font-variant"?: Property$FontVariant,
+  "font-variant-alternates"?: Property$FontVariantAlternates,
+  "font-variant-caps"?: Property$FontVariantCaps,
+  "font-variant-east-asian"?: Property$FontVariantEastAsian,
+  "font-variant-emoji"?: Property$FontVariantEmoji,
+  "font-variant-ligatures"?: Property$FontVariantLigatures,
+  "font-variant-numeric"?: Property$FontVariantNumeric,
+  "font-variant-position"?: Property$FontVariantPosition,
+  "font-variation-settings"?: Property$FontVariationSettings,
+  "font-weight"?: Property$FontWeight,
+  "forced-color-adjust"?: Property$ForcedColorAdjust,
+  "grid-auto-columns"?: Property$GridAutoColumns<TLength>,
+  "grid-auto-flow"?: Property$GridAutoFlow,
+  "grid-auto-rows"?: Property$GridAutoRows<TLength>,
+  "grid-column-end"?: Property$GridColumnEnd,
+  "grid-column-start"?: Property$GridColumnStart,
+  "grid-row-end"?: Property$GridRowEnd,
+  "grid-row-start"?: Property$GridRowStart,
+  "grid-template-areas"?: Property$GridTemplateAreas,
+  "grid-template-columns"?: Property$GridTemplateColumns<TLength>,
+  "grid-template-rows"?: Property$GridTemplateRows<TLength>,
+  "hanging-punctuation"?: Property$HangingPunctuation,
+  height?: Property$Height<TLength>,
+  "hyphenate-character"?: Property$HyphenateCharacter,
+  "hyphenate-limit-chars"?: Property$HyphenateLimitChars,
+  hyphens?: Property$Hyphens,
+  "image-orientation"?: Property$ImageOrientation,
+  "image-rendering"?: Property$ImageRendering,
+  "image-resolution"?: Property$ImageResolution,
+  "initial-letter"?: Property$InitialLetter,
+  "inline-size"?: Property$InlineSize<TLength>,
+  "input-security"?: Property$InputSecurity,
+  "inset-block-end"?: Property$InsetBlockEnd<TLength>,
+  "inset-block-start"?: Property$InsetBlockStart<TLength>,
+  "inset-inline-end"?: Property$InsetInlineEnd<TLength>,
+  "inset-inline-start"?: Property$InsetInlineStart<TLength>,
+  isolation?: Property$Isolation,
+  "justify-content"?: Property$JustifyContent,
+  "justify-items"?: Property$JustifyItems,
+  "justify-self"?: Property$JustifySelf,
+  "justify-tracks"?: Property$JustifyTracks,
+  left?: Property$Left<TLength>,
+  "letter-spacing"?: Property$LetterSpacing<TLength>,
+  "line-break"?: Property$LineBreak,
+  "line-height"?: Property$LineHeight<TLength>,
+  "line-height-step"?: Property$LineHeightStep<TLength>,
+  "list-style-image"?: Property$ListStyleImage,
+  "list-style-position"?: Property$ListStylePosition,
+  "list-style-type"?: Property$ListStyleType,
+  "margin-block-end"?: Property$MarginBlockEnd<TLength>,
+  "margin-block-start"?: Property$MarginBlockStart<TLength>,
+  "margin-bottom"?: Property$MarginBottom<TLength>,
+  "margin-inline-end"?: Property$MarginInlineEnd<TLength>,
+  "margin-inline-start"?: Property$MarginInlineStart<TLength>,
+  "margin-left"?: Property$MarginLeft<TLength>,
+  "margin-right"?: Property$MarginRight<TLength>,
+  "margin-top"?: Property$MarginTop<TLength>,
+  "margin-trim"?: Property$MarginTrim,
+  "mask-border-mode"?: Property$MaskBorderMode,
+  "mask-border-outset"?: Property$MaskBorderOutset<TLength>,
+  "mask-border-repeat"?: Property$MaskBorderRepeat,
+  "mask-border-slice"?: Property$MaskBorderSlice,
+  "mask-border-source"?: Property$MaskBorderSource,
+  "mask-border-width"?: Property$MaskBorderWidth<TLength>,
+  "mask-clip"?: Property$MaskClip,
+  "mask-composite"?: Property$MaskComposite,
+  "mask-image"?: Property$MaskImage,
+  "mask-mode"?: Property$MaskMode,
+  "mask-origin"?: Property$MaskOrigin,
+  "mask-position"?: Property$MaskPosition<TLength>,
+  "mask-repeat"?: Property$MaskRepeat,
+  "mask-size"?: Property$MaskSize<TLength>,
+  "mask-type"?: Property$MaskType,
+  "masonry-auto-flow"?: Property$MasonryAutoFlow,
+  "math-depth"?: Property$MathDepth,
+  "math-shift"?: Property$MathShift,
+  "math-style"?: Property$MathStyle,
+  "max-block-size"?: Property$MaxBlockSize<TLength>,
+  "max-height"?: Property$MaxHeight<TLength>,
+  "max-inline-size"?: Property$MaxInlineSize<TLength>,
+  "max-lines"?: Property$MaxLines,
+  "max-width"?: Property$MaxWidth<TLength>,
+  "min-block-size"?: Property$MinBlockSize<TLength>,
+  "min-height"?: Property$MinHeight<TLength>,
+  "min-inline-size"?: Property$MinInlineSize<TLength>,
+  "min-width"?: Property$MinWidth<TLength>,
+  "mix-blend-mode"?: Property$MixBlendMode,
+  "motion-distance"?: Property$OffsetDistance<TLength>,
+  "motion-path"?: Property$OffsetPath,
+  "motion-rotation"?: Property$OffsetRotate,
+  "object-fit"?: Property$ObjectFit,
+  "object-position"?: Property$ObjectPosition<TLength>,
+  "offset-anchor"?: Property$OffsetAnchor<TLength>,
+  "offset-distance"?: Property$OffsetDistance<TLength>,
+  "offset-path"?: Property$OffsetPath,
+  "offset-position"?: Property$OffsetPosition<TLength>,
+  "offset-rotate"?: Property$OffsetRotate,
+  "offset-rotation"?: Property$OffsetRotate,
+  opacity?: Property$Opacity,
+  order?: Property$Order,
+  orphans?: Property$Orphans,
+  "outline-color"?: Property$OutlineColor,
+  "outline-offset"?: Property$OutlineOffset<TLength>,
+  "outline-style"?: Property$OutlineStyle,
+  "outline-width"?: Property$OutlineWidth<TLength>,
+  "overflow-anchor"?: Property$OverflowAnchor,
+  "overflow-block"?: Property$OverflowBlock,
+  "overflow-clip-box"?: Property$OverflowClipBox,
+  "overflow-clip-margin"?: Property$OverflowClipMargin<TLength>,
+  "overflow-inline"?: Property$OverflowInline,
+  "overflow-wrap"?: Property$OverflowWrap,
+  "overflow-x"?: Property$OverflowX,
+  "overflow-y"?: Property$OverflowY,
+  overlay?: Property$Overlay,
+  "overscroll-behavior-block"?: Property$OverscrollBehaviorBlock,
+  "overscroll-behavior-inline"?: Property$OverscrollBehaviorInline,
+  "overscroll-behavior-x"?: Property$OverscrollBehaviorX,
+  "overscroll-behavior-y"?: Property$OverscrollBehaviorY,
+  "padding-block-end"?: Property$PaddingBlockEnd<TLength>,
+  "padding-block-start"?: Property$PaddingBlockStart<TLength>,
+  "padding-bottom"?: Property$PaddingBottom<TLength>,
+  "padding-inline-end"?: Property$PaddingInlineEnd<TLength>,
+  "padding-inline-start"?: Property$PaddingInlineStart<TLength>,
+  "padding-left"?: Property$PaddingLeft<TLength>,
+  "padding-right"?: Property$PaddingRight<TLength>,
+  "padding-top"?: Property$PaddingTop<TLength>,
+  page?: Property$Page,
+  "page-break-after"?: Property$PageBreakAfter,
+  "page-break-before"?: Property$PageBreakBefore,
+  "page-break-inside"?: Property$PageBreakInside,
+  "paint-order"?: Property$PaintOrder,
+  perspective?: Property$Perspective<TLength>,
+  "perspective-origin"?: Property$PerspectiveOrigin<TLength>,
+  "pointer-events"?: Property$PointerEvents,
+  position?: Property$Position,
+  "print-color-adjust"?: Property$PrintColorAdjust,
+  quotes?: Property$Quotes,
+  resize?: Property$Resize,
+  right?: Property$Right<TLength>,
+  rotate?: Property$Rotate,
+  "row-gap"?: Property$RowGap<TLength>,
+  "ruby-align"?: Property$RubyAlign,
+  "ruby-merge"?: Property$RubyMerge,
+  "ruby-position"?: Property$RubyPosition,
+  scale?: Property$Scale,
+  "scroll-behavior"?: Property$ScrollBehavior,
+  "scroll-margin-block-end"?: Property$ScrollMarginBlockEnd<TLength>,
+  "scroll-margin-block-start"?: Property$ScrollMarginBlockStart<TLength>,
+  "scroll-margin-bottom"?: Property$ScrollMarginBottom<TLength>,
+  "scroll-margin-inline-end"?: Property$ScrollMarginInlineEnd<TLength>,
+  "scroll-margin-inline-start"?: Property$ScrollMarginInlineStart<TLength>,
+  "scroll-margin-left"?: Property$ScrollMarginLeft<TLength>,
+  "scroll-margin-right"?: Property$ScrollMarginRight<TLength>,
+  "scroll-margin-top"?: Property$ScrollMarginTop<TLength>,
+  "scroll-padding-block-end"?: Property$ScrollPaddingBlockEnd<TLength>,
+  "scroll-padding-block-start"?: Property$ScrollPaddingBlockStart<TLength>,
+  "scroll-padding-bottom"?: Property$ScrollPaddingBottom<TLength>,
+  "scroll-padding-inline-end"?: Property$ScrollPaddingInlineEnd<TLength>,
+  "scroll-padding-inline-start"?: Property$ScrollPaddingInlineStart<TLength>,
+  "scroll-padding-left"?: Property$ScrollPaddingLeft<TLength>,
+  "scroll-padding-right"?: Property$ScrollPaddingRight<TLength>,
+  "scroll-padding-top"?: Property$ScrollPaddingTop<TLength>,
+  "scroll-snap-align"?: Property$ScrollSnapAlign,
+  "scroll-snap-margin-bottom"?: Property$ScrollMarginBottom<TLength>,
+  "scroll-snap-margin-left"?: Property$ScrollMarginLeft<TLength>,
+  "scroll-snap-margin-right"?: Property$ScrollMarginRight<TLength>,
+  "scroll-snap-margin-top"?: Property$ScrollMarginTop<TLength>,
+  "scroll-snap-stop"?: Property$ScrollSnapStop,
+  "scroll-snap-type"?: Property$ScrollSnapType,
+  "scroll-timeline-axis"?: Property$ScrollTimelineAxis,
+  "scroll-timeline-name"?: Property$ScrollTimelineName,
+  "scrollbar-color"?: Property$ScrollbarColor,
+  "scrollbar-gutter"?: Property$ScrollbarGutter,
+  "scrollbar-width"?: Property$ScrollbarWidth,
+  "shape-image-threshold"?: Property$ShapeImageThreshold,
+  "shape-margin"?: Property$ShapeMargin<TLength>,
+  "shape-outside"?: Property$ShapeOutside,
+  "tab-size"?: Property$TabSize<TLength>,
+  "table-layout"?: Property$TableLayout,
+  "text-align"?: Property$TextAlign,
+  "text-align-last"?: Property$TextAlignLast,
+  "text-combine-upright"?: Property$TextCombineUpright,
+  "text-decoration-color"?: Property$TextDecorationColor,
+  "text-decoration-line"?: Property$TextDecorationLine,
+  "text-decoration-skip"?: Property$TextDecorationSkip,
+  "text-decoration-skip-ink"?: Property$TextDecorationSkipInk,
+  "text-decoration-style"?: Property$TextDecorationStyle,
+  "text-decoration-thickness"?: Property$TextDecorationThickness<TLength>,
+  "text-emphasis-color"?: Property$TextEmphasisColor,
+  "text-emphasis-position"?: Property$TextEmphasisPosition,
+  "text-emphasis-style"?: Property$TextEmphasisStyle,
+  "text-indent"?: Property$TextIndent<TLength>,
+  "text-justify"?: Property$TextJustify,
+  "text-orientation"?: Property$TextOrientation,
+  "text-overflow"?: Property$TextOverflow,
+  "text-rendering"?: Property$TextRendering,
+  "text-shadow"?: Property$TextShadow,
+  "text-size-adjust"?: Property$TextSizeAdjust,
+  "text-transform"?: Property$TextTransform,
+  "text-underline-offset"?: Property$TextUnderlineOffset<TLength>,
+  "text-underline-position"?: Property$TextUnderlinePosition,
+  "text-wrap"?: Property$TextWrap,
+  "timeline-scope"?: Property$TimelineScope,
+  top?: Property$Top<TLength>,
+  "touch-action"?: Property$TouchAction,
+  transform?: Property$Transform,
+  "transform-box"?: Property$TransformBox,
+  "transform-origin"?: Property$TransformOrigin<TLength>,
+  "transform-style"?: Property$TransformStyle,
+  "transition-behavior"?: Property$TransitionBehavior,
+  "transition-delay"?: Property$TransitionDelay<TTime>,
+  "transition-duration"?: Property$TransitionDuration<TTime>,
+  "transition-property"?: Property$TransitionProperty,
+  "transition-timing-function"?: Property$TransitionTimingFunction,
+  translate?: Property$Translate<TLength>,
+  "unicode-bidi"?: Property$UnicodeBidi,
+  "user-select"?: Property$UserSelect,
+  "vertical-align"?: Property$VerticalAlign<TLength>,
+  "view-timeline-axis"?: Property$ViewTimelineAxis,
+  "view-timeline-inset"?: Property$ViewTimelineInset<TLength>,
+  "view-timeline-name"?: Property$ViewTimelineName,
+  "view-transition-name"?: Property$ViewTransitionName,
+  visibility?: Property$Visibility,
+  "white-space"?: Property$WhiteSpace,
+  "white-space-collapse"?: Property$WhiteSpaceCollapse,
+  "white-space-trim"?: Property$WhiteSpaceTrim,
+  widows?: Property$Widows,
+  width?: Property$Width<TLength>,
+  "will-change"?: Property$WillChange,
+  "word-break"?: Property$WordBreak,
+  "word-spacing"?: Property$WordSpacing<TLength>,
+  "word-wrap"?: Property$WordWrap,
+  "writing-mode"?: Property$WritingMode,
+  "z-index"?: Property$ZIndex,
+  zoom?: Property$Zoom,
+|};
+
+export type StandardShorthandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  all?: Property$All,
+  animation?: Property$Animation<TTime>,
+  "animation-range"?: Property$AnimationRange<TLength>,
+  background?: Property$Background<TLength>,
+  "background-position"?: Property$BackgroundPosition<TLength>,
+  border?: Property$Border<TLength>,
+  "border-block"?: Property$BorderBlock<TLength>,
+  "border-block-end"?: Property$BorderBlockEnd<TLength>,
+  "border-block-start"?: Property$BorderBlockStart<TLength>,
+  "border-bottom"?: Property$BorderBottom<TLength>,
+  "border-color"?: Property$BorderColor,
+  "border-image"?: Property$BorderImage,
+  "border-inline"?: Property$BorderInline<TLength>,
+  "border-inline-end"?: Property$BorderInlineEnd<TLength>,
+  "border-inline-start"?: Property$BorderInlineStart<TLength>,
+  "border-left"?: Property$BorderLeft<TLength>,
+  "border-radius"?: Property$BorderRadius<TLength>,
+  "border-right"?: Property$BorderRight<TLength>,
+  "border-style"?: Property$BorderStyle,
+  "border-top"?: Property$BorderTop<TLength>,
+  "border-width"?: Property$BorderWidth<TLength>,
+  caret?: Property$Caret,
+  "column-rule"?: Property$ColumnRule<TLength>,
+  columns?: Property$Columns<TLength>,
+  "contain-intrinsic-size"?: Property$ContainIntrinsicSize<TLength>,
+  container?: Property$Container,
+  flex?: Property$Flex<TLength>,
+  "flex-flow"?: Property$FlexFlow,
+  font?: Property$Font,
+  gap?: Property$Gap<TLength>,
+  grid?: Property$Grid,
+  "grid-area"?: Property$GridArea,
+  "grid-column"?: Property$GridColumn,
+  "grid-row"?: Property$GridRow,
+  "grid-template"?: Property$GridTemplate,
+  inset?: Property$Inset<TLength>,
+  "inset-block"?: Property$InsetBlock<TLength>,
+  "inset-inline"?: Property$InsetInline<TLength>,
+  "line-clamp"?: Property$LineClamp,
+  "list-style"?: Property$ListStyle,
+  margin?: Property$Margin<TLength>,
+  "margin-block"?: Property$MarginBlock<TLength>,
+  "margin-inline"?: Property$MarginInline<TLength>,
+  mask?: Property$Mask<TLength>,
+  "mask-border"?: Property$MaskBorder,
+  motion?: Property$Offset<TLength>,
+  offset?: Property$Offset<TLength>,
+  outline?: Property$Outline<TLength>,
+  overflow?: Property$Overflow,
+  "overscroll-behavior"?: Property$OverscrollBehavior,
+  padding?: Property$Padding<TLength>,
+  "padding-block"?: Property$PaddingBlock<TLength>,
+  "padding-inline"?: Property$PaddingInline<TLength>,
+  "place-content"?: Property$PlaceContent,
+  "place-items"?: Property$PlaceItems,
+  "place-self"?: Property$PlaceSelf,
+  "scroll-margin"?: Property$ScrollMargin<TLength>,
+  "scroll-margin-block"?: Property$ScrollMarginBlock<TLength>,
+  "scroll-margin-inline"?: Property$ScrollMarginInline<TLength>,
+  "scroll-padding"?: Property$ScrollPadding<TLength>,
+  "scroll-padding-block"?: Property$ScrollPaddingBlock<TLength>,
+  "scroll-padding-inline"?: Property$ScrollPaddingInline<TLength>,
+  "scroll-snap-margin"?: Property$ScrollMargin<TLength>,
+  "scroll-timeline"?: Property$ScrollTimeline,
+  "text-decoration"?: Property$TextDecoration<TLength>,
+  "text-emphasis"?: Property$TextEmphasis,
+  transition?: Property$Transition<TTime>,
+  "view-timeline"?: Property$ViewTimeline,
+|};
+
+export type StandardPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  ...StandardLonghandPropertiesHyphen<TLength, TTime>,
+  ...StandardShorthandPropertiesHyphen<TLength, TTime>,
+|};
+
+export type VendorLonghandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  "-moz-animation-delay"?: Property$AnimationDelay<TTime>,
+  "-moz-animation-direction"?: Property$AnimationDirection,
+  "-moz-animation-duration"?: Property$AnimationDuration<TTime>,
+  "-moz-animation-fill-mode"?: Property$AnimationFillMode,
+  "-moz-animation-iteration-count"?: Property$AnimationIterationCount,
+  "-moz-animation-name"?: Property$AnimationName,
+  "-moz-animation-play-state"?: Property$AnimationPlayState,
+  "-moz-animation-timing-function"?: Property$AnimationTimingFunction,
+  "-moz-appearance"?: Property$MozAppearance,
+  "-moz-binding"?: Property$MozBinding,
+  "-moz-border-bottom-colors"?: Property$MozBorderBottomColors,
+  "-moz-border-end-color"?: Property$BorderInlineEndColor,
+  "-moz-border-end-style"?: Property$BorderInlineEndStyle,
+  "-moz-border-end-width"?: Property$BorderInlineEndWidth<TLength>,
+  "-moz-border-left-colors"?: Property$MozBorderLeftColors,
+  "-moz-border-right-colors"?: Property$MozBorderRightColors,
+  "-moz-border-start-color"?: Property$BorderInlineStartColor,
+  "-moz-border-start-style"?: Property$BorderInlineStartStyle,
+  "-moz-border-top-colors"?: Property$MozBorderTopColors,
+  "-moz-box-sizing"?: Property$BoxSizing,
+  "-moz-column-count"?: Property$ColumnCount,
+  "-moz-column-fill"?: Property$ColumnFill,
+  "-moz-column-rule-color"?: Property$ColumnRuleColor,
+  "-moz-column-rule-style"?: Property$ColumnRuleStyle,
+  "-moz-column-rule-width"?: Property$ColumnRuleWidth<TLength>,
+  "-moz-column-width"?: Property$ColumnWidth<TLength>,
+  "-moz-context-properties"?: Property$MozContextProperties,
+  "-moz-font-feature-settings"?: Property$FontFeatureSettings,
+  "-moz-font-language-override"?: Property$FontLanguageOverride,
+  "-moz-hyphens"?: Property$Hyphens,
+  "-moz-image-region"?: Property$MozImageRegion,
+  "-moz-margin-end"?: Property$MarginInlineEnd<TLength>,
+  "-moz-margin-start"?: Property$MarginInlineStart<TLength>,
+  "-moz-orient"?: Property$MozOrient,
+  "-moz-osx-font-smoothing"?: Property$FontSmooth<TLength>,
+  "-moz-outline-radius-bottomleft"?: Property$MozOutlineRadiusBottomleft<TLength>,
+  "-moz-outline-radius-bottomright"?: Property$MozOutlineRadiusBottomright<TLength>,
+  "-moz-outline-radius-topleft"?: Property$MozOutlineRadiusTopleft<TLength>,
+  "-moz-outline-radius-topright"?: Property$MozOutlineRadiusTopright<TLength>,
+  "-moz-padding-end"?: Property$PaddingInlineEnd<TLength>,
+  "-moz-padding-start"?: Property$PaddingInlineStart<TLength>,
+  "-moz-stack-sizing"?: Property$MozStackSizing,
+  "-moz-tab-size"?: Property$TabSize<TLength>,
+  "-moz-text-blink"?: Property$MozTextBlink,
+  "-moz-text-size-adjust"?: Property$TextSizeAdjust,
+  "-moz-user-focus"?: Property$MozUserFocus,
+  "-moz-user-modify"?: Property$MozUserModify,
+  "-moz-user-select"?: Property$UserSelect,
+  "-moz-window-dragging"?: Property$MozWindowDragging,
+  "-moz-window-shadow"?: Property$MozWindowShadow,
+  "-ms-accelerator"?: Property$MsAccelerator,
+  "-ms-block-progression"?: Property$MsBlockProgression,
+  "-ms-content-zoom-chaining"?: Property$MsContentZoomChaining,
+  "-ms-content-zoom-limit-max"?: Property$MsContentZoomLimitMax,
+  "-ms-content-zoom-limit-min"?: Property$MsContentZoomLimitMin,
+  "-ms-content-zoom-snap-points"?: Property$MsContentZoomSnapPoints,
+  "-ms-content-zoom-snap-type"?: Property$MsContentZoomSnapType,
+  "-ms-content-zooming"?: Property$MsContentZooming,
+  "-ms-filter"?: Property$MsFilter,
+  "-ms-flex-direction"?: Property$FlexDirection,
+  "-ms-flex-positive"?: Property$FlexGrow,
+  "-ms-flow-from"?: Property$MsFlowFrom,
+  "-ms-flow-into"?: Property$MsFlowInto,
+  "-ms-grid-columns"?: Property$MsGridColumns<TLength>,
+  "-ms-grid-rows"?: Property$MsGridRows<TLength>,
+  "-ms-high-contrast-adjust"?: Property$MsHighContrastAdjust,
+  "-ms-hyphenate-limit-chars"?: Property$MsHyphenateLimitChars,
+  "-ms-hyphenate-limit-lines"?: Property$MsHyphenateLimitLines,
+  "-ms-hyphenate-limit-zone"?: Property$MsHyphenateLimitZone<TLength>,
+  "-ms-hyphens"?: Property$Hyphens,
+  "-ms-ime-align"?: Property$MsImeAlign,
+  "-ms-line-break"?: Property$LineBreak,
+  "-ms-order"?: Property$Order,
+  "-ms-overflow-style"?: Property$MsOverflowStyle,
+  "-ms-overflow-x"?: Property$OverflowX,
+  "-ms-overflow-y"?: Property$OverflowY,
+  "-ms-scroll-chaining"?: Property$MsScrollChaining,
+  "-ms-scroll-limit-x-max"?: Property$MsScrollLimitXMax<TLength>,
+  "-ms-scroll-limit-x-min"?: Property$MsScrollLimitXMin<TLength>,
+  "-ms-scroll-limit-y-max"?: Property$MsScrollLimitYMax<TLength>,
+  "-ms-scroll-limit-y-min"?: Property$MsScrollLimitYMin<TLength>,
+  "-ms-scroll-rails"?: Property$MsScrollRails,
+  "-ms-scroll-snap-points-x"?: Property$MsScrollSnapPointsX,
+  "-ms-scroll-snap-points-y"?: Property$MsScrollSnapPointsY,
+  "-ms-scroll-snap-type"?: Property$MsScrollSnapType,
+  "-ms-scroll-translation"?: Property$MsScrollTranslation,
+  "-ms-scrollbar-3dlight-color"?: Property$MsScrollbar3dlightColor,
+  "-ms-scrollbar-arrow-color"?: Property$MsScrollbarArrowColor,
+  "-ms-scrollbar-base-color"?: Property$MsScrollbarBaseColor,
+  "-ms-scrollbar-darkshadow-color"?: Property$MsScrollbarDarkshadowColor,
+  "-ms-scrollbar-face-color"?: Property$MsScrollbarFaceColor,
+  "-ms-scrollbar-highlight-color"?: Property$MsScrollbarHighlightColor,
+  "-ms-scrollbar-shadow-color"?: Property$MsScrollbarShadowColor,
+  "-ms-scrollbar-track-color"?: Property$MsScrollbarTrackColor,
+  "-ms-text-autospace"?: Property$MsTextAutospace,
+  "-ms-text-combine-horizontal"?: Property$TextCombineUpright,
+  "-ms-text-overflow"?: Property$TextOverflow,
+  "-ms-touch-action"?: Property$TouchAction,
+  "-ms-touch-select"?: Property$MsTouchSelect,
+  "-ms-transform"?: Property$Transform,
+  "-ms-transform-origin"?: Property$TransformOrigin<TLength>,
+  "-ms-transition-delay"?: Property$TransitionDelay<TTime>,
+  "-ms-transition-duration"?: Property$TransitionDuration<TTime>,
+  "-ms-transition-property"?: Property$TransitionProperty,
+  "-ms-transition-timing-function"?: Property$TransitionTimingFunction,
+  "-ms-user-select"?: Property$MsUserSelect,
+  "-ms-word-break"?: Property$WordBreak,
+  "-ms-wrap-flow"?: Property$MsWrapFlow,
+  "-ms-wrap-margin"?: Property$MsWrapMargin<TLength>,
+  "-ms-wrap-through"?: Property$MsWrapThrough,
+  "-ms-writing-mode"?: Property$WritingMode,
+  "-webkit-align-content"?: Property$AlignContent,
+  "-webkit-align-items"?: Property$AlignItems,
+  "-webkit-align-self"?: Property$AlignSelf,
+  "-webkit-animation-delay"?: Property$AnimationDelay<TTime>,
+  "-webkit-animation-direction"?: Property$AnimationDirection,
+  "-webkit-animation-duration"?: Property$AnimationDuration<TTime>,
+  "-webkit-animation-fill-mode"?: Property$AnimationFillMode,
+  "-webkit-animation-iteration-count"?: Property$AnimationIterationCount,
+  "-webkit-animation-name"?: Property$AnimationName,
+  "-webkit-animation-play-state"?: Property$AnimationPlayState,
+  "-webkit-animation-timing-function"?: Property$AnimationTimingFunction,
+  "-webkit-appearance"?: Property$WebkitAppearance,
+  "-webkit-backdrop-filter"?: Property$BackdropFilter,
+  "-webkit-backface-visibility"?: Property$BackfaceVisibility,
+  "-webkit-background-clip"?: Property$BackgroundClip,
+  "-webkit-background-origin"?: Property$BackgroundOrigin,
+  "-webkit-background-size"?: Property$BackgroundSize<TLength>,
+  "-webkit-border-before-color"?: Property$WebkitBorderBeforeColor,
+  "-webkit-border-before-style"?: Property$WebkitBorderBeforeStyle,
+  "-webkit-border-before-width"?: Property$WebkitBorderBeforeWidth<TLength>,
+  "-webkit-border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength>,
+  "-webkit-border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength>,
+  "-webkit-border-image-slice"?: Property$BorderImageSlice,
+  "-webkit-border-top-left-radius"?: Property$BorderTopLeftRadius<TLength>,
+  "-webkit-border-top-right-radius"?: Property$BorderTopRightRadius<TLength>,
+  "-webkit-box-decoration-break"?: Property$BoxDecorationBreak,
+  "-webkit-box-reflect"?: Property$WebkitBoxReflect<TLength>,
+  "-webkit-box-shadow"?: Property$BoxShadow,
+  "-webkit-box-sizing"?: Property$BoxSizing,
+  "-webkit-clip-path"?: Property$ClipPath,
+  "-webkit-column-count"?: Property$ColumnCount,
+  "-webkit-column-fill"?: Property$ColumnFill,
+  "-webkit-column-rule-color"?: Property$ColumnRuleColor,
+  "-webkit-column-rule-style"?: Property$ColumnRuleStyle,
+  "-webkit-column-rule-width"?: Property$ColumnRuleWidth<TLength>,
+  "-webkit-column-span"?: Property$ColumnSpan,
+  "-webkit-column-width"?: Property$ColumnWidth<TLength>,
+  "-webkit-filter"?: Property$Filter,
+  "-webkit-flex-basis"?: Property$FlexBasis<TLength>,
+  "-webkit-flex-direction"?: Property$FlexDirection,
+  "-webkit-flex-grow"?: Property$FlexGrow,
+  "-webkit-flex-shrink"?: Property$FlexShrink,
+  "-webkit-flex-wrap"?: Property$FlexWrap,
+  "-webkit-font-feature-settings"?: Property$FontFeatureSettings,
+  "-webkit-font-kerning"?: Property$FontKerning,
+  "-webkit-font-smoothing"?: Property$FontSmooth<TLength>,
+  "-webkit-font-variant-ligatures"?: Property$FontVariantLigatures,
+  "-webkit-hyphenate-character"?: Property$HyphenateCharacter,
+  "-webkit-hyphens"?: Property$Hyphens,
+  "-webkit-initial-letter"?: Property$InitialLetter,
+  "-webkit-justify-content"?: Property$JustifyContent,
+  "-webkit-line-break"?: Property$LineBreak,
+  "-webkit-line-clamp"?: Property$WebkitLineClamp,
+  "-webkit-margin-end"?: Property$MarginInlineEnd<TLength>,
+  "-webkit-margin-start"?: Property$MarginInlineStart<TLength>,
+  "-webkit-mask-attachment"?: Property$WebkitMaskAttachment,
+  "-webkit-mask-box-image-outset"?: Property$MaskBorderOutset<TLength>,
+  "-webkit-mask-box-image-repeat"?: Property$MaskBorderRepeat,
+  "-webkit-mask-box-image-slice"?: Property$MaskBorderSlice,
+  "-webkit-mask-box-image-source"?: Property$MaskBorderSource,
+  "-webkit-mask-box-image-width"?: Property$MaskBorderWidth<TLength>,
+  "-webkit-mask-clip"?: Property$WebkitMaskClip,
+  "-webkit-mask-composite"?: Property$WebkitMaskComposite,
+  "-webkit-mask-image"?: Property$WebkitMaskImage,
+  "-webkit-mask-origin"?: Property$WebkitMaskOrigin,
+  "-webkit-mask-position"?: Property$WebkitMaskPosition<TLength>,
+  "-webkit-mask-position-x"?: Property$WebkitMaskPositionX<TLength>,
+  "-webkit-mask-position-y"?: Property$WebkitMaskPositionY<TLength>,
+  "-webkit-mask-repeat"?: Property$WebkitMaskRepeat,
+  "-webkit-mask-repeat-x"?: Property$WebkitMaskRepeatX,
+  "-webkit-mask-repeat-y"?: Property$WebkitMaskRepeatY,
+  "-webkit-mask-size"?: Property$WebkitMaskSize<TLength>,
+  "-webkit-max-inline-size"?: Property$MaxInlineSize<TLength>,
+  "-webkit-order"?: Property$Order,
+  "-webkit-overflow-scrolling"?: Property$WebkitOverflowScrolling,
+  "-webkit-padding-end"?: Property$PaddingInlineEnd<TLength>,
+  "-webkit-padding-start"?: Property$PaddingInlineStart<TLength>,
+  "-webkit-perspective"?: Property$Perspective<TLength>,
+  "-webkit-perspective-origin"?: Property$PerspectiveOrigin<TLength>,
+  "-webkit-print-color-adjust"?: Property$PrintColorAdjust,
+  "-webkit-ruby-position"?: Property$RubyPosition,
+  "-webkit-scroll-snap-type"?: Property$ScrollSnapType,
+  "-webkit-shape-margin"?: Property$ShapeMargin<TLength>,
+  "-webkit-tap-highlight-color"?: Property$WebkitTapHighlightColor,
+  "-webkit-text-combine"?: Property$TextCombineUpright,
+  "-webkit-text-decoration-color"?: Property$TextDecorationColor,
+  "-webkit-text-decoration-line"?: Property$TextDecorationLine,
+  "-webkit-text-decoration-skip"?: Property$TextDecorationSkip,
+  "-webkit-text-decoration-style"?: Property$TextDecorationStyle,
+  "-webkit-text-emphasis-color"?: Property$TextEmphasisColor,
+  "-webkit-text-emphasis-position"?: Property$TextEmphasisPosition,
+  "-webkit-text-emphasis-style"?: Property$TextEmphasisStyle,
+  "-webkit-text-fill-color"?: Property$WebkitTextFillColor,
+  "-webkit-text-orientation"?: Property$TextOrientation,
+  "-webkit-text-size-adjust"?: Property$TextSizeAdjust,
+  "-webkit-text-stroke-color"?: Property$WebkitTextStrokeColor,
+  "-webkit-text-stroke-width"?: Property$WebkitTextStrokeWidth<TLength>,
+  "-webkit-text-underline-position"?: Property$TextUnderlinePosition,
+  "-webkit-touch-callout"?: Property$WebkitTouchCallout,
+  "-webkit-transform"?: Property$Transform,
+  "-webkit-transform-origin"?: Property$TransformOrigin<TLength>,
+  "-webkit-transform-style"?: Property$TransformStyle,
+  "-webkit-transition-delay"?: Property$TransitionDelay<TTime>,
+  "-webkit-transition-duration"?: Property$TransitionDuration<TTime>,
+  "-webkit-transition-property"?: Property$TransitionProperty,
+  "-webkit-transition-timing-function"?: Property$TransitionTimingFunction,
+  "-webkit-user-modify"?: Property$WebkitUserModify,
+  "-webkit-user-select"?: Property$UserSelect,
+  "-webkit-writing-mode"?: Property$WritingMode,
+|};
+
+export type VendorShorthandPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  "-moz-animation"?: Property$Animation<TTime>,
+  "-moz-border-image"?: Property$BorderImage,
+  "-moz-column-rule"?: Property$ColumnRule<TLength>,
+  "-moz-columns"?: Property$Columns<TLength>,
+  "-moz-outline-radius"?: Property$MozOutlineRadius<TLength>,
+  "-ms-content-zoom-limit"?: Property$MsContentZoomLimit,
+  "-ms-content-zoom-snap"?: Property$MsContentZoomSnap,
+  "-ms-flex"?: Property$Flex<TLength>,
+  "-ms-scroll-limit"?: Property$MsScrollLimit,
+  "-ms-scroll-snap-x"?: Property$MsScrollSnapX,
+  "-ms-scroll-snap-y"?: Property$MsScrollSnapY,
+  "-ms-transition"?: Property$Transition<TTime>,
+  "-webkit-animation"?: Property$Animation<TTime>,
+  "-webkit-border-before"?: Property$WebkitBorderBefore<TLength>,
+  "-webkit-border-image"?: Property$BorderImage,
+  "-webkit-border-radius"?: Property$BorderRadius<TLength>,
+  "-webkit-column-rule"?: Property$ColumnRule<TLength>,
+  "-webkit-columns"?: Property$Columns<TLength>,
+  "-webkit-flex"?: Property$Flex<TLength>,
+  "-webkit-flex-flow"?: Property$FlexFlow,
+  "-webkit-mask"?: Property$WebkitMask<TLength>,
+  "-webkit-mask-box-image"?: Property$MaskBorder,
+  "-webkit-text-emphasis"?: Property$TextEmphasis,
+  "-webkit-text-stroke"?: Property$WebkitTextStroke<TLength>,
+  "-webkit-transition"?: Property$Transition<TTime>,
+|};
+
+export type VendorPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  ...VendorLonghandPropertiesHyphen<TLength, TTime>,
+  ...VendorShorthandPropertiesHyphen<TLength, TTime>,
+|};
+
+export type ObsoletePropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  azimuth?: Property$Azimuth,
+  "box-align"?: Property$BoxAlign,
+  "box-direction"?: Property$BoxDirection,
+  "box-flex"?: Property$BoxFlex,
+  "box-flex-group"?: Property$BoxFlexGroup,
+  "box-lines"?: Property$BoxLines,
+  "box-ordinal-group"?: Property$BoxOrdinalGroup,
+  "box-orient"?: Property$BoxOrient,
+  "box-pack"?: Property$BoxPack,
+  clip?: Property$Clip,
+  "grid-column-gap"?: Property$GridColumnGap<TLength>,
+  "grid-gap"?: Property$GridGap<TLength>,
+  "grid-row-gap"?: Property$GridRowGap<TLength>,
+  "ime-mode"?: Property$ImeMode,
+  "offset-block"?: Property$InsetBlock<TLength>,
+  "offset-block-end"?: Property$InsetBlockEnd<TLength>,
+  "offset-block-start"?: Property$InsetBlockStart<TLength>,
+  "offset-inline"?: Property$InsetInline<TLength>,
+  "offset-inline-end"?: Property$InsetInlineEnd<TLength>,
+  "offset-inline-start"?: Property$InsetInlineStart<TLength>,
+  "scroll-snap-coordinate"?: Property$ScrollSnapCoordinate<TLength>,
+  "scroll-snap-destination"?: Property$ScrollSnapDestination<TLength>,
+  "scroll-snap-points-x"?: Property$ScrollSnapPointsX,
+  "scroll-snap-points-y"?: Property$ScrollSnapPointsY,
+  "scroll-snap-type-x"?: Property$ScrollSnapTypeX,
+  "scroll-snap-type-y"?: Property$ScrollSnapTypeY,
+  "-khtml-box-align"?: Property$BoxAlign,
+  "-khtml-box-direction"?: Property$BoxDirection,
+  "-khtml-box-flex"?: Property$BoxFlex,
+  "-khtml-box-flex-group"?: Property$BoxFlexGroup,
+  "-khtml-box-lines"?: Property$BoxLines,
+  "-khtml-box-ordinal-group"?: Property$BoxOrdinalGroup,
+  "-khtml-box-orient"?: Property$BoxOrient,
+  "-khtml-box-pack"?: Property$BoxPack,
+  "-khtml-line-break"?: Property$LineBreak,
+  "-khtml-opacity"?: Property$Opacity,
+  "-khtml-user-select"?: Property$UserSelect,
+  "-moz-backface-visibility"?: Property$BackfaceVisibility,
+  "-moz-background-clip"?: Property$BackgroundClip,
+  "-moz-background-inline-policy"?: Property$BoxDecorationBreak,
+  "-moz-background-origin"?: Property$BackgroundOrigin,
+  "-moz-background-size"?: Property$BackgroundSize<TLength>,
+  "-moz-border-radius"?: Property$BorderRadius<TLength>,
+  "-moz-border-radius-bottomleft"?: Property$BorderBottomLeftRadius<TLength>,
+  "-moz-border-radius-bottomright"?: Property$BorderBottomRightRadius<TLength>,
+  "-moz-border-radius-topleft"?: Property$BorderTopLeftRadius<TLength>,
+  "-moz-border-radius-topright"?: Property$BorderTopRightRadius<TLength>,
+  "-moz-box-align"?: Property$BoxAlign,
+  "-moz-box-direction"?: Property$BoxDirection,
+  "-moz-box-flex"?: Property$BoxFlex,
+  "-moz-box-ordinal-group"?: Property$BoxOrdinalGroup,
+  "-moz-box-orient"?: Property$BoxOrient,
+  "-moz-box-pack"?: Property$BoxPack,
+  "-moz-box-shadow"?: Property$BoxShadow,
+  "-moz-float-edge"?: Property$MozFloatEdge,
+  "-moz-force-broken-image-icon"?: Property$MozForceBrokenImageIcon,
+  "-moz-opacity"?: Property$Opacity,
+  "-moz-outline"?: Property$Outline<TLength>,
+  "-moz-outline-color"?: Property$OutlineColor,
+  "-moz-outline-style"?: Property$OutlineStyle,
+  "-moz-outline-width"?: Property$OutlineWidth<TLength>,
+  "-moz-perspective"?: Property$Perspective<TLength>,
+  "-moz-perspective-origin"?: Property$PerspectiveOrigin<TLength>,
+  "-moz-text-align-last"?: Property$TextAlignLast,
+  "-moz-text-decoration-color"?: Property$TextDecorationColor,
+  "-moz-text-decoration-line"?: Property$TextDecorationLine,
+  "-moz-text-decoration-style"?: Property$TextDecorationStyle,
+  "-moz-transform"?: Property$Transform,
+  "-moz-transform-origin"?: Property$TransformOrigin<TLength>,
+  "-moz-transform-style"?: Property$TransformStyle,
+  "-moz-transition"?: Property$Transition<TTime>,
+  "-moz-transition-delay"?: Property$TransitionDelay<TTime>,
+  "-moz-transition-duration"?: Property$TransitionDuration<TTime>,
+  "-moz-transition-property"?: Property$TransitionProperty,
+  "-moz-transition-timing-function"?: Property$TransitionTimingFunction,
+  "-moz-user-input"?: Property$MozUserInput,
+  "-ms-ime-mode"?: Property$ImeMode,
+  "-o-animation"?: Property$Animation<TTime>,
+  "-o-animation-delay"?: Property$AnimationDelay<TTime>,
+  "-o-animation-direction"?: Property$AnimationDirection,
+  "-o-animation-duration"?: Property$AnimationDuration<TTime>,
+  "-o-animation-fill-mode"?: Property$AnimationFillMode,
+  "-o-animation-iteration-count"?: Property$AnimationIterationCount,
+  "-o-animation-name"?: Property$AnimationName,
+  "-o-animation-play-state"?: Property$AnimationPlayState,
+  "-o-animation-timing-function"?: Property$AnimationTimingFunction,
+  "-o-background-size"?: Property$BackgroundSize<TLength>,
+  "-o-border-image"?: Property$BorderImage,
+  "-o-object-fit"?: Property$ObjectFit,
+  "-o-object-position"?: Property$ObjectPosition<TLength>,
+  "-o-tab-size"?: Property$TabSize<TLength>,
+  "-o-text-overflow"?: Property$TextOverflow,
+  "-o-transform"?: Property$Transform,
+  "-o-transform-origin"?: Property$TransformOrigin<TLength>,
+  "-o-transition"?: Property$Transition<TTime>,
+  "-o-transition-delay"?: Property$TransitionDelay<TTime>,
+  "-o-transition-duration"?: Property$TransitionDuration<TTime>,
+  "-o-transition-property"?: Property$TransitionProperty,
+  "-o-transition-timing-function"?: Property$TransitionTimingFunction,
+  "-webkit-box-align"?: Property$BoxAlign,
+  "-webkit-box-direction"?: Property$BoxDirection,
+  "-webkit-box-flex"?: Property$BoxFlex,
+  "-webkit-box-flex-group"?: Property$BoxFlexGroup,
+  "-webkit-box-lines"?: Property$BoxLines,
+  "-webkit-box-ordinal-group"?: Property$BoxOrdinalGroup,
+  "-webkit-box-orient"?: Property$BoxOrient,
+  "-webkit-box-pack"?: Property$BoxPack,
+|};
+
+export type SvgPropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  "alignment-baseline"?: Property$AlignmentBaseline,
+  "baseline-shift"?: Property$BaselineShift<TLength>,
+  clip?: Property$Clip,
+  "clip-path"?: Property$ClipPath,
+  "clip-rule"?: Property$ClipRule,
+  color?: Property$Color,
+  "color-interpolation"?: Property$ColorInterpolation,
+  "color-rendering"?: Property$ColorRendering,
+  cursor?: Property$Cursor,
+  direction?: Property$Direction,
+  display?: Property$Display,
+  "dominant-baseline"?: Property$DominantBaseline,
+  fill?: Property$Fill,
+  "fill-opacity"?: Property$FillOpacity,
+  "fill-rule"?: Property$FillRule,
+  filter?: Property$Filter,
+  "flood-color"?: Property$FloodColor,
+  "flood-opacity"?: Property$FloodOpacity,
+  font?: Property$Font,
+  "font-family"?: Property$FontFamily,
+  "font-size"?: Property$FontSize<TLength>,
+  "font-size-adjust"?: Property$FontSizeAdjust,
+  "font-stretch"?: Property$FontStretch,
+  "font-style"?: Property$FontStyle,
+  "font-variant"?: Property$FontVariant,
+  "font-weight"?: Property$FontWeight,
+  "glyph-orientation-vertical"?: Property$GlyphOrientationVertical,
+  "image-rendering"?: Property$ImageRendering,
+  "letter-spacing"?: Property$LetterSpacing<TLength>,
+  "lighting-color"?: Property$LightingColor,
+  "line-height"?: Property$LineHeight<TLength>,
+  marker?: Property$Marker,
+  "marker-end"?: Property$MarkerEnd,
+  "marker-mid"?: Property$MarkerMid,
+  "marker-start"?: Property$MarkerStart,
+  mask?: Property$Mask<TLength>,
+  opacity?: Property$Opacity,
+  overflow?: Property$Overflow,
+  "paint-order"?: Property$PaintOrder,
+  "pointer-events"?: Property$PointerEvents,
+  "shape-rendering"?: Property$ShapeRendering,
+  "stop-color"?: Property$StopColor,
+  "stop-opacity"?: Property$StopOpacity,
+  stroke?: Property$Stroke,
+  "stroke-dasharray"?: Property$StrokeDasharray<TLength>,
+  "stroke-dashoffset"?: Property$StrokeDashoffset<TLength>,
+  "stroke-linecap"?: Property$StrokeLinecap,
+  "stroke-linejoin"?: Property$StrokeLinejoin,
+  "stroke-miterlimit"?: Property$StrokeMiterlimit,
+  "stroke-opacity"?: Property$StrokeOpacity,
+  "stroke-width"?: Property$StrokeWidth<TLength>,
+  "text-anchor"?: Property$TextAnchor,
+  "text-decoration"?: Property$TextDecoration<TLength>,
+  "text-rendering"?: Property$TextRendering,
+  "unicode-bidi"?: Property$UnicodeBidi,
+  "vector-effect"?: Property$VectorEffect,
+  visibility?: Property$Visibility,
+  "white-space"?: Property$WhiteSpace,
+  "word-spacing"?: Property$WordSpacing<TLength>,
+  "writing-mode"?: Property$WritingMode,
+|};
+
+export type PropertiesHyphen<TLength = string | 0, TTime = string> = {|
+  ...StandardPropertiesHyphen<TLength, TTime>,
+  ...VendorPropertiesHyphen<TLength, TTime>,
+  ...ObsoletePropertiesHyphen<TLength, TTime>,
+  ...SvgPropertiesHyphen<TLength, TTime>,
+|};
+
+export type StandardLonghandPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  accentColor?: Property$AccentColor | Array<Property$AccentColor>,
+  alignContent?: Property$AlignContent | Array<Property$AlignContent>,
+  alignItems?: Property$AlignItems | Array<Property$AlignItems>,
+  alignSelf?: Property$AlignSelf | Array<Property$AlignSelf>,
+  alignTracks?: Property$AlignTracks | Array<Property$AlignTracks>,
+  animationComposition?: Property$AnimationComposition | Array<Property$AnimationComposition>,
+  animationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  animationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  animationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  animationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  animationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  animationName?: Property$AnimationName | Array<Property$AnimationName>,
+  animationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  animationRangeEnd?: Property$AnimationRangeEnd<TLength> | Array<Property$AnimationRangeEnd<TLength>>,
+  animationRangeStart?: Property$AnimationRangeStart<TLength> | Array<Property$AnimationRangeStart<TLength>>,
+  animationTimeline?: Property$AnimationTimeline | Array<Property$AnimationTimeline>,
+  animationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  appearance?: Property$Appearance | Array<Property$Appearance>,
+  aspectRatio?: Property$AspectRatio | Array<Property$AspectRatio>,
+  backdropFilter?: Property$BackdropFilter | Array<Property$BackdropFilter>,
+  backfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  backgroundAttachment?: Property$BackgroundAttachment | Array<Property$BackgroundAttachment>,
+  backgroundBlendMode?: Property$BackgroundBlendMode | Array<Property$BackgroundBlendMode>,
+  backgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  backgroundColor?: Property$BackgroundColor | Array<Property$BackgroundColor>,
+  backgroundImage?: Property$BackgroundImage | Array<Property$BackgroundImage>,
+  backgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  backgroundPositionX?: Property$BackgroundPositionX<TLength> | Array<Property$BackgroundPositionX<TLength>>,
+  backgroundPositionY?: Property$BackgroundPositionY<TLength> | Array<Property$BackgroundPositionY<TLength>>,
+  backgroundRepeat?: Property$BackgroundRepeat | Array<Property$BackgroundRepeat>,
+  backgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  blockOverflow?: Property$BlockOverflow | Array<Property$BlockOverflow>,
+  blockSize?: Property$BlockSize<TLength> | Array<Property$BlockSize<TLength>>,
+  borderBlockColor?: Property$BorderBlockColor | Array<Property$BorderBlockColor>,
+  borderBlockEndColor?: Property$BorderBlockEndColor | Array<Property$BorderBlockEndColor>,
+  borderBlockEndStyle?: Property$BorderBlockEndStyle | Array<Property$BorderBlockEndStyle>,
+  borderBlockEndWidth?: Property$BorderBlockEndWidth<TLength> | Array<Property$BorderBlockEndWidth<TLength>>,
+  borderBlockStartColor?: Property$BorderBlockStartColor | Array<Property$BorderBlockStartColor>,
+  borderBlockStartStyle?: Property$BorderBlockStartStyle | Array<Property$BorderBlockStartStyle>,
+  borderBlockStartWidth?: Property$BorderBlockStartWidth<TLength> | Array<Property$BorderBlockStartWidth<TLength>>,
+  borderBlockStyle?: Property$BorderBlockStyle | Array<Property$BorderBlockStyle>,
+  borderBlockWidth?: Property$BorderBlockWidth<TLength> | Array<Property$BorderBlockWidth<TLength>>,
+  borderBottomColor?: Property$BorderBottomColor | Array<Property$BorderBottomColor>,
+  borderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  borderBottomRightRadius?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  borderBottomStyle?: Property$BorderBottomStyle | Array<Property$BorderBottomStyle>,
+  borderBottomWidth?: Property$BorderBottomWidth<TLength> | Array<Property$BorderBottomWidth<TLength>>,
+  borderCollapse?: Property$BorderCollapse | Array<Property$BorderCollapse>,
+  borderEndEndRadius?: Property$BorderEndEndRadius<TLength> | Array<Property$BorderEndEndRadius<TLength>>,
+  borderEndStartRadius?: Property$BorderEndStartRadius<TLength> | Array<Property$BorderEndStartRadius<TLength>>,
+  borderImageOutset?: Property$BorderImageOutset<TLength> | Array<Property$BorderImageOutset<TLength>>,
+  borderImageRepeat?: Property$BorderImageRepeat | Array<Property$BorderImageRepeat>,
+  borderImageSlice?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
+  borderImageSource?: Property$BorderImageSource | Array<Property$BorderImageSource>,
+  borderImageWidth?: Property$BorderImageWidth<TLength> | Array<Property$BorderImageWidth<TLength>>,
+  borderInlineColor?: Property$BorderInlineColor | Array<Property$BorderInlineColor>,
+  borderInlineEndColor?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
+  borderInlineEndStyle?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
+  borderInlineEndWidth?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
+  borderInlineStartColor?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
+  borderInlineStartStyle?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
+  borderInlineStartWidth?: Property$BorderInlineStartWidth<TLength> | Array<Property$BorderInlineStartWidth<TLength>>,
+  borderInlineStyle?: Property$BorderInlineStyle | Array<Property$BorderInlineStyle>,
+  borderInlineWidth?: Property$BorderInlineWidth<TLength> | Array<Property$BorderInlineWidth<TLength>>,
+  borderLeftColor?: Property$BorderLeftColor | Array<Property$BorderLeftColor>,
+  borderLeftStyle?: Property$BorderLeftStyle | Array<Property$BorderLeftStyle>,
+  borderLeftWidth?: Property$BorderLeftWidth<TLength> | Array<Property$BorderLeftWidth<TLength>>,
+  borderRightColor?: Property$BorderRightColor | Array<Property$BorderRightColor>,
+  borderRightStyle?: Property$BorderRightStyle | Array<Property$BorderRightStyle>,
+  borderRightWidth?: Property$BorderRightWidth<TLength> | Array<Property$BorderRightWidth<TLength>>,
+  borderSpacing?: Property$BorderSpacing<TLength> | Array<Property$BorderSpacing<TLength>>,
+  borderStartEndRadius?: Property$BorderStartEndRadius<TLength> | Array<Property$BorderStartEndRadius<TLength>>,
+  borderStartStartRadius?: Property$BorderStartStartRadius<TLength> | Array<Property$BorderStartStartRadius<TLength>>,
+  borderTopColor?: Property$BorderTopColor | Array<Property$BorderTopColor>,
+  borderTopLeftRadius?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  borderTopRightRadius?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  borderTopStyle?: Property$BorderTopStyle | Array<Property$BorderTopStyle>,
+  borderTopWidth?: Property$BorderTopWidth<TLength> | Array<Property$BorderTopWidth<TLength>>,
+  bottom?: Property$Bottom<TLength> | Array<Property$Bottom<TLength>>,
+  boxDecorationBreak?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  boxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
+  boxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
+  breakAfter?: Property$BreakAfter | Array<Property$BreakAfter>,
+  breakBefore?: Property$BreakBefore | Array<Property$BreakBefore>,
+  breakInside?: Property$BreakInside | Array<Property$BreakInside>,
+  captionSide?: Property$CaptionSide | Array<Property$CaptionSide>,
+  caretColor?: Property$CaretColor | Array<Property$CaretColor>,
+  caretShape?: Property$CaretShape | Array<Property$CaretShape>,
+  clear?: Property$Clear | Array<Property$Clear>,
+  clipPath?: Property$ClipPath | Array<Property$ClipPath>,
+  color?: Property$Color | Array<Property$Color>,
+  colorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  colorScheme?: Property$ColorScheme | Array<Property$ColorScheme>,
+  columnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
+  columnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
+  columnGap?: Property$ColumnGap<TLength> | Array<Property$ColumnGap<TLength>>,
+  columnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  columnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  columnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  columnSpan?: Property$ColumnSpan | Array<Property$ColumnSpan>,
+  columnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  contain?: Property$Contain | Array<Property$Contain>,
+  containIntrinsicBlockSize?: Property$ContainIntrinsicBlockSize<TLength> | Array<Property$ContainIntrinsicBlockSize<TLength>>,
+  containIntrinsicHeight?: Property$ContainIntrinsicHeight<TLength> | Array<Property$ContainIntrinsicHeight<TLength>>,
+  containIntrinsicInlineSize?: Property$ContainIntrinsicInlineSize<TLength> | Array<Property$ContainIntrinsicInlineSize<TLength>>,
+  containIntrinsicWidth?: Property$ContainIntrinsicWidth<TLength> | Array<Property$ContainIntrinsicWidth<TLength>>,
+  containerName?: Property$ContainerName | Array<Property$ContainerName>,
+  containerType?: Property$ContainerType | Array<Property$ContainerType>,
+  content?: Property$Content | Array<Property$Content>,
+  contentVisibility?: Property$ContentVisibility | Array<Property$ContentVisibility>,
+  counterIncrement?: Property$CounterIncrement | Array<Property$CounterIncrement>,
+  counterReset?: Property$CounterReset | Array<Property$CounterReset>,
+  counterSet?: Property$CounterSet | Array<Property$CounterSet>,
+  cursor?: Property$Cursor | Array<Property$Cursor>,
+  direction?: Property$Direction | Array<Property$Direction>,
+  display?: Property$Display | Array<Property$Display>,
+  emptyCells?: Property$EmptyCells | Array<Property$EmptyCells>,
+  filter?: Property$Filter | Array<Property$Filter>,
+  flexBasis?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
+  flexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
+  flexGrow?: Property$FlexGrow | Array<Property$FlexGrow>,
+  flexShrink?: Property$FlexShrink | Array<Property$FlexShrink>,
+  flexWrap?: Property$FlexWrap | Array<Property$FlexWrap>,
+  float?: Property$Float | Array<Property$Float>,
+  fontFamily?: Property$FontFamily | Array<Property$FontFamily>,
+  fontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  fontKerning?: Property$FontKerning | Array<Property$FontKerning>,
+  fontLanguageOverride?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
+  fontOpticalSizing?: Property$FontOpticalSizing | Array<Property$FontOpticalSizing>,
+  fontPalette?: Property$FontPalette | Array<Property$FontPalette>,
+  fontSize?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
+  fontSizeAdjust?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
+  fontSmooth?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  fontStretch?: Property$FontStretch | Array<Property$FontStretch>,
+  fontStyle?: Property$FontStyle | Array<Property$FontStyle>,
+  fontSynthesis?: Property$FontSynthesis | Array<Property$FontSynthesis>,
+  fontSynthesisPosition?: Property$FontSynthesisPosition | Array<Property$FontSynthesisPosition>,
+  fontSynthesisSmallCaps?: Property$FontSynthesisSmallCaps | Array<Property$FontSynthesisSmallCaps>,
+  fontSynthesisStyle?: Property$FontSynthesisStyle | Array<Property$FontSynthesisStyle>,
+  fontSynthesisWeight?: Property$FontSynthesisWeight | Array<Property$FontSynthesisWeight>,
+  fontVariant?: Property$FontVariant | Array<Property$FontVariant>,
+  fontVariantAlternates?: Property$FontVariantAlternates | Array<Property$FontVariantAlternates>,
+  fontVariantCaps?: Property$FontVariantCaps | Array<Property$FontVariantCaps>,
+  fontVariantEastAsian?: Property$FontVariantEastAsian | Array<Property$FontVariantEastAsian>,
+  fontVariantEmoji?: Property$FontVariantEmoji | Array<Property$FontVariantEmoji>,
+  fontVariantLigatures?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
+  fontVariantNumeric?: Property$FontVariantNumeric | Array<Property$FontVariantNumeric>,
+  fontVariantPosition?: Property$FontVariantPosition | Array<Property$FontVariantPosition>,
+  fontVariationSettings?: Property$FontVariationSettings | Array<Property$FontVariationSettings>,
+  fontWeight?: Property$FontWeight | Array<Property$FontWeight>,
+  forcedColorAdjust?: Property$ForcedColorAdjust | Array<Property$ForcedColorAdjust>,
+  gridAutoColumns?: Property$GridAutoColumns<TLength> | Array<Property$GridAutoColumns<TLength>>,
+  gridAutoFlow?: Property$GridAutoFlow | Array<Property$GridAutoFlow>,
+  gridAutoRows?: Property$GridAutoRows<TLength> | Array<Property$GridAutoRows<TLength>>,
+  gridColumnEnd?: Property$GridColumnEnd | Array<Property$GridColumnEnd>,
+  gridColumnStart?: Property$GridColumnStart | Array<Property$GridColumnStart>,
+  gridRowEnd?: Property$GridRowEnd | Array<Property$GridRowEnd>,
+  gridRowStart?: Property$GridRowStart | Array<Property$GridRowStart>,
+  gridTemplateAreas?: Property$GridTemplateAreas | Array<Property$GridTemplateAreas>,
+  gridTemplateColumns?: Property$GridTemplateColumns<TLength> | Array<Property$GridTemplateColumns<TLength>>,
+  gridTemplateRows?: Property$GridTemplateRows<TLength> | Array<Property$GridTemplateRows<TLength>>,
+  hangingPunctuation?: Property$HangingPunctuation | Array<Property$HangingPunctuation>,
+  height?: Property$Height<TLength> | Array<Property$Height<TLength>>,
+  hyphenateCharacter?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
+  hyphenateLimitChars?: Property$HyphenateLimitChars | Array<Property$HyphenateLimitChars>,
+  hyphens?: Property$Hyphens | Array<Property$Hyphens>,
+  imageOrientation?: Property$ImageOrientation | Array<Property$ImageOrientation>,
+  imageRendering?: Property$ImageRendering | Array<Property$ImageRendering>,
+  imageResolution?: Property$ImageResolution | Array<Property$ImageResolution>,
+  initialLetter?: Property$InitialLetter | Array<Property$InitialLetter>,
+  inlineSize?: Property$InlineSize<TLength> | Array<Property$InlineSize<TLength>>,
+  inputSecurity?: Property$InputSecurity | Array<Property$InputSecurity>,
+  insetBlockEnd?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
+  insetBlockStart?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
+  insetInlineEnd?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
+  insetInlineStart?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
+  isolation?: Property$Isolation | Array<Property$Isolation>,
+  justifyContent?: Property$JustifyContent | Array<Property$JustifyContent>,
+  justifyItems?: Property$JustifyItems | Array<Property$JustifyItems>,
+  justifySelf?: Property$JustifySelf | Array<Property$JustifySelf>,
+  justifyTracks?: Property$JustifyTracks | Array<Property$JustifyTracks>,
+  left?: Property$Left<TLength> | Array<Property$Left<TLength>>,
+  letterSpacing?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
+  lineBreak?: Property$LineBreak | Array<Property$LineBreak>,
+  lineHeight?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
+  lineHeightStep?: Property$LineHeightStep<TLength> | Array<Property$LineHeightStep<TLength>>,
+  listStyleImage?: Property$ListStyleImage | Array<Property$ListStyleImage>,
+  listStylePosition?: Property$ListStylePosition | Array<Property$ListStylePosition>,
+  listStyleType?: Property$ListStyleType | Array<Property$ListStyleType>,
+  marginBlockEnd?: Property$MarginBlockEnd<TLength> | Array<Property$MarginBlockEnd<TLength>>,
+  marginBlockStart?: Property$MarginBlockStart<TLength> | Array<Property$MarginBlockStart<TLength>>,
+  marginBottom?: Property$MarginBottom<TLength> | Array<Property$MarginBottom<TLength>>,
+  marginInlineEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  marginInlineStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  marginLeft?: Property$MarginLeft<TLength> | Array<Property$MarginLeft<TLength>>,
+  marginRight?: Property$MarginRight<TLength> | Array<Property$MarginRight<TLength>>,
+  marginTop?: Property$MarginTop<TLength> | Array<Property$MarginTop<TLength>>,
+  marginTrim?: Property$MarginTrim | Array<Property$MarginTrim>,
+  maskBorderMode?: Property$MaskBorderMode | Array<Property$MaskBorderMode>,
+  maskBorderOutset?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
+  maskBorderRepeat?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
+  maskBorderSlice?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
+  maskBorderSource?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
+  maskBorderWidth?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
+  maskClip?: Property$MaskClip | Array<Property$MaskClip>,
+  maskComposite?: Property$MaskComposite | Array<Property$MaskComposite>,
+  maskImage?: Property$MaskImage | Array<Property$MaskImage>,
+  maskMode?: Property$MaskMode | Array<Property$MaskMode>,
+  maskOrigin?: Property$MaskOrigin | Array<Property$MaskOrigin>,
+  maskPosition?: Property$MaskPosition<TLength> | Array<Property$MaskPosition<TLength>>,
+  maskRepeat?: Property$MaskRepeat | Array<Property$MaskRepeat>,
+  maskSize?: Property$MaskSize<TLength> | Array<Property$MaskSize<TLength>>,
+  maskType?: Property$MaskType | Array<Property$MaskType>,
+  masonryAutoFlow?: Property$MasonryAutoFlow | Array<Property$MasonryAutoFlow>,
+  mathDepth?: Property$MathDepth | Array<Property$MathDepth>,
+  mathShift?: Property$MathShift | Array<Property$MathShift>,
+  mathStyle?: Property$MathStyle | Array<Property$MathStyle>,
+  maxBlockSize?: Property$MaxBlockSize<TLength> | Array<Property$MaxBlockSize<TLength>>,
+  maxHeight?: Property$MaxHeight<TLength> | Array<Property$MaxHeight<TLength>>,
+  maxInlineSize?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
+  maxLines?: Property$MaxLines | Array<Property$MaxLines>,
+  maxWidth?: Property$MaxWidth<TLength> | Array<Property$MaxWidth<TLength>>,
+  minBlockSize?: Property$MinBlockSize<TLength> | Array<Property$MinBlockSize<TLength>>,
+  minHeight?: Property$MinHeight<TLength> | Array<Property$MinHeight<TLength>>,
+  minInlineSize?: Property$MinInlineSize<TLength> | Array<Property$MinInlineSize<TLength>>,
+  minWidth?: Property$MinWidth<TLength> | Array<Property$MinWidth<TLength>>,
+  mixBlendMode?: Property$MixBlendMode | Array<Property$MixBlendMode>,
+  motionDistance?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
+  motionPath?: Property$OffsetPath | Array<Property$OffsetPath>,
+  motionRotation?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  objectFit?: Property$ObjectFit | Array<Property$ObjectFit>,
+  objectPosition?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
+  offsetAnchor?: Property$OffsetAnchor<TLength> | Array<Property$OffsetAnchor<TLength>>,
+  offsetDistance?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
+  offsetPath?: Property$OffsetPath | Array<Property$OffsetPath>,
+  offsetPosition?: Property$OffsetPosition<TLength> | Array<Property$OffsetPosition<TLength>>,
+  offsetRotate?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  offsetRotation?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  opacity?: Property$Opacity | Array<Property$Opacity>,
+  order?: Property$Order | Array<Property$Order>,
+  orphans?: Property$Orphans | Array<Property$Orphans>,
+  outlineColor?: Property$OutlineColor | Array<Property$OutlineColor>,
+  outlineOffset?: Property$OutlineOffset<TLength> | Array<Property$OutlineOffset<TLength>>,
+  outlineStyle?: Property$OutlineStyle | Array<Property$OutlineStyle>,
+  outlineWidth?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
+  overflowAnchor?: Property$OverflowAnchor | Array<Property$OverflowAnchor>,
+  overflowBlock?: Property$OverflowBlock | Array<Property$OverflowBlock>,
+  overflowClipBox?: Property$OverflowClipBox | Array<Property$OverflowClipBox>,
+  overflowClipMargin?: Property$OverflowClipMargin<TLength> | Array<Property$OverflowClipMargin<TLength>>,
+  overflowInline?: Property$OverflowInline | Array<Property$OverflowInline>,
+  overflowWrap?: Property$OverflowWrap | Array<Property$OverflowWrap>,
+  overflowX?: Property$OverflowX | Array<Property$OverflowX>,
+  overflowY?: Property$OverflowY | Array<Property$OverflowY>,
+  overlay?: Property$Overlay | Array<Property$Overlay>,
+  overscrollBehaviorBlock?: Property$OverscrollBehaviorBlock | Array<Property$OverscrollBehaviorBlock>,
+  overscrollBehaviorInline?: Property$OverscrollBehaviorInline | Array<Property$OverscrollBehaviorInline>,
+  overscrollBehaviorX?: Property$OverscrollBehaviorX | Array<Property$OverscrollBehaviorX>,
+  overscrollBehaviorY?: Property$OverscrollBehaviorY | Array<Property$OverscrollBehaviorY>,
+  paddingBlockEnd?: Property$PaddingBlockEnd<TLength> | Array<Property$PaddingBlockEnd<TLength>>,
+  paddingBlockStart?: Property$PaddingBlockStart<TLength> | Array<Property$PaddingBlockStart<TLength>>,
+  paddingBottom?: Property$PaddingBottom<TLength> | Array<Property$PaddingBottom<TLength>>,
+  paddingInlineEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  paddingInlineStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  paddingLeft?: Property$PaddingLeft<TLength> | Array<Property$PaddingLeft<TLength>>,
+  paddingRight?: Property$PaddingRight<TLength> | Array<Property$PaddingRight<TLength>>,
+  paddingTop?: Property$PaddingTop<TLength> | Array<Property$PaddingTop<TLength>>,
+  page?: Property$Page | Array<Property$Page>,
+  pageBreakAfter?: Property$PageBreakAfter | Array<Property$PageBreakAfter>,
+  pageBreakBefore?: Property$PageBreakBefore | Array<Property$PageBreakBefore>,
+  pageBreakInside?: Property$PageBreakInside | Array<Property$PageBreakInside>,
+  paintOrder?: Property$PaintOrder | Array<Property$PaintOrder>,
+  perspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  perspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  pointerEvents?: Property$PointerEvents | Array<Property$PointerEvents>,
+  position?: Property$Position | Array<Property$Position>,
+  printColorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  quotes?: Property$Quotes | Array<Property$Quotes>,
+  resize?: Property$Resize | Array<Property$Resize>,
+  right?: Property$Right<TLength> | Array<Property$Right<TLength>>,
+  rotate?: Property$Rotate | Array<Property$Rotate>,
+  rowGap?: Property$RowGap<TLength> | Array<Property$RowGap<TLength>>,
+  rubyAlign?: Property$RubyAlign | Array<Property$RubyAlign>,
+  rubyMerge?: Property$RubyMerge | Array<Property$RubyMerge>,
+  rubyPosition?: Property$RubyPosition | Array<Property$RubyPosition>,
+  scale?: Property$Scale | Array<Property$Scale>,
+  scrollBehavior?: Property$ScrollBehavior | Array<Property$ScrollBehavior>,
+  scrollMarginBlockEnd?: Property$ScrollMarginBlockEnd<TLength> | Array<Property$ScrollMarginBlockEnd<TLength>>,
+  scrollMarginBlockStart?: Property$ScrollMarginBlockStart<TLength> | Array<Property$ScrollMarginBlockStart<TLength>>,
+  scrollMarginBottom?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
+  scrollMarginInlineEnd?: Property$ScrollMarginInlineEnd<TLength> | Array<Property$ScrollMarginInlineEnd<TLength>>,
+  scrollMarginInlineStart?: Property$ScrollMarginInlineStart<TLength> | Array<Property$ScrollMarginInlineStart<TLength>>,
+  scrollMarginLeft?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
+  scrollMarginRight?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
+  scrollMarginTop?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
+  scrollPaddingBlockEnd?: Property$ScrollPaddingBlockEnd<TLength> | Array<Property$ScrollPaddingBlockEnd<TLength>>,
+  scrollPaddingBlockStart?: Property$ScrollPaddingBlockStart<TLength> | Array<Property$ScrollPaddingBlockStart<TLength>>,
+  scrollPaddingBottom?: Property$ScrollPaddingBottom<TLength> | Array<Property$ScrollPaddingBottom<TLength>>,
+  scrollPaddingInlineEnd?: Property$ScrollPaddingInlineEnd<TLength> | Array<Property$ScrollPaddingInlineEnd<TLength>>,
+  scrollPaddingInlineStart?: Property$ScrollPaddingInlineStart<TLength> | Array<Property$ScrollPaddingInlineStart<TLength>>,
+  scrollPaddingLeft?: Property$ScrollPaddingLeft<TLength> | Array<Property$ScrollPaddingLeft<TLength>>,
+  scrollPaddingRight?: Property$ScrollPaddingRight<TLength> | Array<Property$ScrollPaddingRight<TLength>>,
+  scrollPaddingTop?: Property$ScrollPaddingTop<TLength> | Array<Property$ScrollPaddingTop<TLength>>,
+  scrollSnapAlign?: Property$ScrollSnapAlign | Array<Property$ScrollSnapAlign>,
+  scrollSnapMarginBottom?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
+  scrollSnapMarginLeft?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
+  scrollSnapMarginRight?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
+  scrollSnapMarginTop?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
+  scrollSnapStop?: Property$ScrollSnapStop | Array<Property$ScrollSnapStop>,
+  scrollSnapType?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
+  scrollTimelineAxis?: Property$ScrollTimelineAxis | Array<Property$ScrollTimelineAxis>,
+  scrollTimelineName?: Property$ScrollTimelineName | Array<Property$ScrollTimelineName>,
+  scrollbarColor?: Property$ScrollbarColor | Array<Property$ScrollbarColor>,
+  scrollbarGutter?: Property$ScrollbarGutter | Array<Property$ScrollbarGutter>,
+  scrollbarWidth?: Property$ScrollbarWidth | Array<Property$ScrollbarWidth>,
+  shapeImageThreshold?: Property$ShapeImageThreshold | Array<Property$ShapeImageThreshold>,
+  shapeMargin?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
+  shapeOutside?: Property$ShapeOutside | Array<Property$ShapeOutside>,
+  tabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  tableLayout?: Property$TableLayout | Array<Property$TableLayout>,
+  textAlign?: Property$TextAlign | Array<Property$TextAlign>,
+  textAlignLast?: Property$TextAlignLast | Array<Property$TextAlignLast>,
+  textCombineUpright?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  textDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  textDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  textDecorationSkip?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
+  textDecorationSkipInk?: Property$TextDecorationSkipInk | Array<Property$TextDecorationSkipInk>,
+  textDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  textDecorationThickness?: Property$TextDecorationThickness<TLength> | Array<Property$TextDecorationThickness<TLength>>,
+  textEmphasisColor?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
+  textEmphasisPosition?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
+  textEmphasisStyle?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
+  textIndent?: Property$TextIndent<TLength> | Array<Property$TextIndent<TLength>>,
+  textJustify?: Property$TextJustify | Array<Property$TextJustify>,
+  textOrientation?: Property$TextOrientation | Array<Property$TextOrientation>,
+  textOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
+  textRendering?: Property$TextRendering | Array<Property$TextRendering>,
+  textShadow?: Property$TextShadow | Array<Property$TextShadow>,
+  textSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  textTransform?: Property$TextTransform | Array<Property$TextTransform>,
+  textUnderlineOffset?: Property$TextUnderlineOffset<TLength> | Array<Property$TextUnderlineOffset<TLength>>,
+  textUnderlinePosition?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
+  textWrap?: Property$TextWrap | Array<Property$TextWrap>,
+  timelineScope?: Property$TimelineScope | Array<Property$TimelineScope>,
+  top?: Property$Top<TLength> | Array<Property$Top<TLength>>,
+  touchAction?: Property$TouchAction | Array<Property$TouchAction>,
+  transform?: Property$Transform | Array<Property$Transform>,
+  transformBox?: Property$TransformBox | Array<Property$TransformBox>,
+  transformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  transformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
+  transitionBehavior?: Property$TransitionBehavior | Array<Property$TransitionBehavior>,
+  transitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  transitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  transitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  transitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  translate?: Property$Translate<TLength> | Array<Property$Translate<TLength>>,
+  unicodeBidi?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
+  userSelect?: Property$UserSelect | Array<Property$UserSelect>,
+  verticalAlign?: Property$VerticalAlign<TLength> | Array<Property$VerticalAlign<TLength>>,
+  viewTimelineAxis?: Property$ViewTimelineAxis | Array<Property$ViewTimelineAxis>,
+  viewTimelineInset?: Property$ViewTimelineInset<TLength> | Array<Property$ViewTimelineInset<TLength>>,
+  viewTimelineName?: Property$ViewTimelineName | Array<Property$ViewTimelineName>,
+  viewTransitionName?: Property$ViewTransitionName | Array<Property$ViewTransitionName>,
+  visibility?: Property$Visibility | Array<Property$Visibility>,
+  whiteSpace?: Property$WhiteSpace | Array<Property$WhiteSpace>,
+  whiteSpaceCollapse?: Property$WhiteSpaceCollapse | Array<Property$WhiteSpaceCollapse>,
+  whiteSpaceTrim?: Property$WhiteSpaceTrim | Array<Property$WhiteSpaceTrim>,
+  widows?: Property$Widows | Array<Property$Widows>,
+  width?: Property$Width<TLength> | Array<Property$Width<TLength>>,
+  willChange?: Property$WillChange | Array<Property$WillChange>,
+  wordBreak?: Property$WordBreak | Array<Property$WordBreak>,
+  wordSpacing?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
+  wordWrap?: Property$WordWrap | Array<Property$WordWrap>,
+  writingMode?: Property$WritingMode | Array<Property$WritingMode>,
+  zIndex?: Property$ZIndex | Array<Property$ZIndex>,
+  zoom?: Property$Zoom | Array<Property$Zoom>,
+|};
+
+export type StandardShorthandPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  all?: Property$All | Array<Property$All>,
+  animation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  animationRange?: Property$AnimationRange<TLength> | Array<Property$AnimationRange<TLength>>,
+  background?: Property$Background<TLength> | Array<Property$Background<TLength>>,
+  backgroundPosition?: Property$BackgroundPosition<TLength> | Array<Property$BackgroundPosition<TLength>>,
+  border?: Property$Border<TLength> | Array<Property$Border<TLength>>,
+  borderBlock?: Property$BorderBlock<TLength> | Array<Property$BorderBlock<TLength>>,
+  borderBlockEnd?: Property$BorderBlockEnd<TLength> | Array<Property$BorderBlockEnd<TLength>>,
+  borderBlockStart?: Property$BorderBlockStart<TLength> | Array<Property$BorderBlockStart<TLength>>,
+  borderBottom?: Property$BorderBottom<TLength> | Array<Property$BorderBottom<TLength>>,
+  borderColor?: Property$BorderColor | Array<Property$BorderColor>,
+  borderImage?: Property$BorderImage | Array<Property$BorderImage>,
+  borderInline?: Property$BorderInline<TLength> | Array<Property$BorderInline<TLength>>,
+  borderInlineEnd?: Property$BorderInlineEnd<TLength> | Array<Property$BorderInlineEnd<TLength>>,
+  borderInlineStart?: Property$BorderInlineStart<TLength> | Array<Property$BorderInlineStart<TLength>>,
+  borderLeft?: Property$BorderLeft<TLength> | Array<Property$BorderLeft<TLength>>,
+  borderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  borderRight?: Property$BorderRight<TLength> | Array<Property$BorderRight<TLength>>,
+  borderStyle?: Property$BorderStyle | Array<Property$BorderStyle>,
+  borderTop?: Property$BorderTop<TLength> | Array<Property$BorderTop<TLength>>,
+  borderWidth?: Property$BorderWidth<TLength> | Array<Property$BorderWidth<TLength>>,
+  caret?: Property$Caret | Array<Property$Caret>,
+  columnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  columns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  containIntrinsicSize?: Property$ContainIntrinsicSize<TLength> | Array<Property$ContainIntrinsicSize<TLength>>,
+  container?: Property$Container | Array<Property$Container>,
+  flex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  flexFlow?: Property$FlexFlow | Array<Property$FlexFlow>,
+  font?: Property$Font | Array<Property$Font>,
+  gap?: Property$Gap<TLength> | Array<Property$Gap<TLength>>,
+  grid?: Property$Grid | Array<Property$Grid>,
+  gridArea?: Property$GridArea | Array<Property$GridArea>,
+  gridColumn?: Property$GridColumn | Array<Property$GridColumn>,
+  gridRow?: Property$GridRow | Array<Property$GridRow>,
+  gridTemplate?: Property$GridTemplate | Array<Property$GridTemplate>,
+  inset?: Property$Inset<TLength> | Array<Property$Inset<TLength>>,
+  insetBlock?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
+  insetInline?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
+  lineClamp?: Property$LineClamp | Array<Property$LineClamp>,
+  listStyle?: Property$ListStyle | Array<Property$ListStyle>,
+  margin?: Property$Margin<TLength> | Array<Property$Margin<TLength>>,
+  marginBlock?: Property$MarginBlock<TLength> | Array<Property$MarginBlock<TLength>>,
+  marginInline?: Property$MarginInline<TLength> | Array<Property$MarginInline<TLength>>,
+  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
+  maskBorder?: Property$MaskBorder | Array<Property$MaskBorder>,
+  motion?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
+  offset?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
+  outline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
+  overflow?: Property$Overflow | Array<Property$Overflow>,
+  overscrollBehavior?: Property$OverscrollBehavior | Array<Property$OverscrollBehavior>,
+  padding?: Property$Padding<TLength> | Array<Property$Padding<TLength>>,
+  paddingBlock?: Property$PaddingBlock<TLength> | Array<Property$PaddingBlock<TLength>>,
+  paddingInline?: Property$PaddingInline<TLength> | Array<Property$PaddingInline<TLength>>,
+  placeContent?: Property$PlaceContent | Array<Property$PlaceContent>,
+  placeItems?: Property$PlaceItems | Array<Property$PlaceItems>,
+  placeSelf?: Property$PlaceSelf | Array<Property$PlaceSelf>,
+  scrollMargin?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
+  scrollMarginBlock?: Property$ScrollMarginBlock<TLength> | Array<Property$ScrollMarginBlock<TLength>>,
+  scrollMarginInline?: Property$ScrollMarginInline<TLength> | Array<Property$ScrollMarginInline<TLength>>,
+  scrollPadding?: Property$ScrollPadding<TLength> | Array<Property$ScrollPadding<TLength>>,
+  scrollPaddingBlock?: Property$ScrollPaddingBlock<TLength> | Array<Property$ScrollPaddingBlock<TLength>>,
+  scrollPaddingInline?: Property$ScrollPaddingInline<TLength> | Array<Property$ScrollPaddingInline<TLength>>,
+  scrollSnapMargin?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
+  scrollTimeline?: Property$ScrollTimeline | Array<Property$ScrollTimeline>,
+  textDecoration?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
+  textEmphasis?: Property$TextEmphasis | Array<Property$TextEmphasis>,
+  transition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  viewTimeline?: Property$ViewTimeline | Array<Property$ViewTimeline>,
+|};
+
+export type StandardPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  ...StandardLonghandPropertiesFallback<TLength, TTime>,
+  ...StandardShorthandPropertiesFallback<TLength, TTime>,
+|};
+
+export type VendorLonghandPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  MozAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  MozAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  MozAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  MozAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  MozAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  MozAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
+  MozAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  MozAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  MozAppearance?: Property$MozAppearance | Array<Property$MozAppearance>,
+  MozBinding?: Property$MozBinding | Array<Property$MozBinding>,
+  MozBorderBottomColors?: Property$MozBorderBottomColors | Array<Property$MozBorderBottomColors>,
+  MozBorderEndColor?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
+  MozBorderEndStyle?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
+  MozBorderEndWidth?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
+  MozBorderLeftColors?: Property$MozBorderLeftColors | Array<Property$MozBorderLeftColors>,
+  MozBorderRightColors?: Property$MozBorderRightColors | Array<Property$MozBorderRightColors>,
+  MozBorderStartColor?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
+  MozBorderStartStyle?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
+  MozBorderTopColors?: Property$MozBorderTopColors | Array<Property$MozBorderTopColors>,
+  MozBoxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
+  MozColumnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
+  MozColumnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
+  MozColumnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  MozColumnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  MozColumnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  MozColumnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  MozContextProperties?: Property$MozContextProperties | Array<Property$MozContextProperties>,
+  MozFontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  MozFontLanguageOverride?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
+  MozHyphens?: Property$Hyphens | Array<Property$Hyphens>,
+  MozImageRegion?: Property$MozImageRegion | Array<Property$MozImageRegion>,
+  MozMarginEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  MozMarginStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  MozOrient?: Property$MozOrient | Array<Property$MozOrient>,
+  MozOsxFontSmoothing?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  MozOutlineRadiusBottomleft?: Property$MozOutlineRadiusBottomleft<TLength> | Array<Property$MozOutlineRadiusBottomleft<TLength>>,
+  MozOutlineRadiusBottomright?: Property$MozOutlineRadiusBottomright<TLength> | Array<Property$MozOutlineRadiusBottomright<TLength>>,
+  MozOutlineRadiusTopleft?: Property$MozOutlineRadiusTopleft<TLength> | Array<Property$MozOutlineRadiusTopleft<TLength>>,
+  MozOutlineRadiusTopright?: Property$MozOutlineRadiusTopright<TLength> | Array<Property$MozOutlineRadiusTopright<TLength>>,
+  MozPaddingEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  MozPaddingStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  MozStackSizing?: Property$MozStackSizing | Array<Property$MozStackSizing>,
+  MozTabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  MozTextBlink?: Property$MozTextBlink | Array<Property$MozTextBlink>,
+  MozTextSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  MozUserFocus?: Property$MozUserFocus | Array<Property$MozUserFocus>,
+  MozUserModify?: Property$MozUserModify | Array<Property$MozUserModify>,
+  MozUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
+  MozWindowDragging?: Property$MozWindowDragging | Array<Property$MozWindowDragging>,
+  MozWindowShadow?: Property$MozWindowShadow | Array<Property$MozWindowShadow>,
+  msAccelerator?: Property$MsAccelerator | Array<Property$MsAccelerator>,
+  msBlockProgression?: Property$MsBlockProgression | Array<Property$MsBlockProgression>,
+  msContentZoomChaining?: Property$MsContentZoomChaining | Array<Property$MsContentZoomChaining>,
+  msContentZoomLimitMax?: Property$MsContentZoomLimitMax | Array<Property$MsContentZoomLimitMax>,
+  msContentZoomLimitMin?: Property$MsContentZoomLimitMin | Array<Property$MsContentZoomLimitMin>,
+  msContentZoomSnapPoints?: Property$MsContentZoomSnapPoints | Array<Property$MsContentZoomSnapPoints>,
+  msContentZoomSnapType?: Property$MsContentZoomSnapType | Array<Property$MsContentZoomSnapType>,
+  msContentZooming?: Property$MsContentZooming | Array<Property$MsContentZooming>,
+  msFilter?: Property$MsFilter | Array<Property$MsFilter>,
+  msFlexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
+  msFlexPositive?: Property$FlexGrow | Array<Property$FlexGrow>,
+  msFlowFrom?: Property$MsFlowFrom | Array<Property$MsFlowFrom>,
+  msFlowInto?: Property$MsFlowInto | Array<Property$MsFlowInto>,
+  msGridColumns?: Property$MsGridColumns<TLength> | Array<Property$MsGridColumns<TLength>>,
+  msGridRows?: Property$MsGridRows<TLength> | Array<Property$MsGridRows<TLength>>,
+  msHighContrastAdjust?: Property$MsHighContrastAdjust | Array<Property$MsHighContrastAdjust>,
+  msHyphenateLimitChars?: Property$MsHyphenateLimitChars | Array<Property$MsHyphenateLimitChars>,
+  msHyphenateLimitLines?: Property$MsHyphenateLimitLines | Array<Property$MsHyphenateLimitLines>,
+  msHyphenateLimitZone?: Property$MsHyphenateLimitZone<TLength> | Array<Property$MsHyphenateLimitZone<TLength>>,
+  msHyphens?: Property$Hyphens | Array<Property$Hyphens>,
+  msImeAlign?: Property$MsImeAlign | Array<Property$MsImeAlign>,
+  msLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
+  msOrder?: Property$Order | Array<Property$Order>,
+  msOverflowStyle?: Property$MsOverflowStyle | Array<Property$MsOverflowStyle>,
+  msOverflowX?: Property$OverflowX | Array<Property$OverflowX>,
+  msOverflowY?: Property$OverflowY | Array<Property$OverflowY>,
+  msScrollChaining?: Property$MsScrollChaining | Array<Property$MsScrollChaining>,
+  msScrollLimitXMax?: Property$MsScrollLimitXMax<TLength> | Array<Property$MsScrollLimitXMax<TLength>>,
+  msScrollLimitXMin?: Property$MsScrollLimitXMin<TLength> | Array<Property$MsScrollLimitXMin<TLength>>,
+  msScrollLimitYMax?: Property$MsScrollLimitYMax<TLength> | Array<Property$MsScrollLimitYMax<TLength>>,
+  msScrollLimitYMin?: Property$MsScrollLimitYMin<TLength> | Array<Property$MsScrollLimitYMin<TLength>>,
+  msScrollRails?: Property$MsScrollRails | Array<Property$MsScrollRails>,
+  msScrollSnapPointsX?: Property$MsScrollSnapPointsX | Array<Property$MsScrollSnapPointsX>,
+  msScrollSnapPointsY?: Property$MsScrollSnapPointsY | Array<Property$MsScrollSnapPointsY>,
+  msScrollSnapType?: Property$MsScrollSnapType | Array<Property$MsScrollSnapType>,
+  msScrollTranslation?: Property$MsScrollTranslation | Array<Property$MsScrollTranslation>,
+  msScrollbar3dlightColor?: Property$MsScrollbar3dlightColor | Array<Property$MsScrollbar3dlightColor>,
+  msScrollbarArrowColor?: Property$MsScrollbarArrowColor | Array<Property$MsScrollbarArrowColor>,
+  msScrollbarBaseColor?: Property$MsScrollbarBaseColor | Array<Property$MsScrollbarBaseColor>,
+  msScrollbarDarkshadowColor?: Property$MsScrollbarDarkshadowColor | Array<Property$MsScrollbarDarkshadowColor>,
+  msScrollbarFaceColor?: Property$MsScrollbarFaceColor | Array<Property$MsScrollbarFaceColor>,
+  msScrollbarHighlightColor?: Property$MsScrollbarHighlightColor | Array<Property$MsScrollbarHighlightColor>,
+  msScrollbarShadowColor?: Property$MsScrollbarShadowColor | Array<Property$MsScrollbarShadowColor>,
+  msScrollbarTrackColor?: Property$MsScrollbarTrackColor | Array<Property$MsScrollbarTrackColor>,
+  msTextAutospace?: Property$MsTextAutospace | Array<Property$MsTextAutospace>,
+  msTextCombineHorizontal?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  msTextOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
+  msTouchAction?: Property$TouchAction | Array<Property$TouchAction>,
+  msTouchSelect?: Property$MsTouchSelect | Array<Property$MsTouchSelect>,
+  msTransform?: Property$Transform | Array<Property$Transform>,
+  msTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  msTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  msTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  msTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  msTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  msUserSelect?: Property$MsUserSelect | Array<Property$MsUserSelect>,
+  msWordBreak?: Property$WordBreak | Array<Property$WordBreak>,
+  msWrapFlow?: Property$MsWrapFlow | Array<Property$MsWrapFlow>,
+  msWrapMargin?: Property$MsWrapMargin<TLength> | Array<Property$MsWrapMargin<TLength>>,
+  msWrapThrough?: Property$MsWrapThrough | Array<Property$MsWrapThrough>,
+  msWritingMode?: Property$WritingMode | Array<Property$WritingMode>,
+  WebkitAlignContent?: Property$AlignContent | Array<Property$AlignContent>,
+  WebkitAlignItems?: Property$AlignItems | Array<Property$AlignItems>,
+  WebkitAlignSelf?: Property$AlignSelf | Array<Property$AlignSelf>,
+  WebkitAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  WebkitAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  WebkitAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  WebkitAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  WebkitAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  WebkitAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
+  WebkitAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  WebkitAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  WebkitAppearance?: Property$WebkitAppearance | Array<Property$WebkitAppearance>,
+  WebkitBackdropFilter?: Property$BackdropFilter | Array<Property$BackdropFilter>,
+  WebkitBackfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  WebkitBackgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  WebkitBackgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  WebkitBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  WebkitBorderBeforeColor?: Property$WebkitBorderBeforeColor | Array<Property$WebkitBorderBeforeColor>,
+  WebkitBorderBeforeStyle?: Property$WebkitBorderBeforeStyle | Array<Property$WebkitBorderBeforeStyle>,
+  WebkitBorderBeforeWidth?: Property$WebkitBorderBeforeWidth<TLength> | Array<Property$WebkitBorderBeforeWidth<TLength>>,
+  WebkitBorderBottomLeftRadius?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  WebkitBorderBottomRightRadius?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  WebkitBorderImageSlice?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
+  WebkitBorderTopLeftRadius?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  WebkitBorderTopRightRadius?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  WebkitBoxDecorationBreak?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  WebkitBoxReflect?: Property$WebkitBoxReflect<TLength> | Array<Property$WebkitBoxReflect<TLength>>,
+  WebkitBoxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
+  WebkitBoxSizing?: Property$BoxSizing | Array<Property$BoxSizing>,
+  WebkitClipPath?: Property$ClipPath | Array<Property$ClipPath>,
+  WebkitColumnCount?: Property$ColumnCount | Array<Property$ColumnCount>,
+  WebkitColumnFill?: Property$ColumnFill | Array<Property$ColumnFill>,
+  WebkitColumnRuleColor?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  WebkitColumnRuleStyle?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  WebkitColumnRuleWidth?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  WebkitColumnSpan?: Property$ColumnSpan | Array<Property$ColumnSpan>,
+  WebkitColumnWidth?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  WebkitFilter?: Property$Filter | Array<Property$Filter>,
+  WebkitFlexBasis?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
+  WebkitFlexDirection?: Property$FlexDirection | Array<Property$FlexDirection>,
+  WebkitFlexGrow?: Property$FlexGrow | Array<Property$FlexGrow>,
+  WebkitFlexShrink?: Property$FlexShrink | Array<Property$FlexShrink>,
+  WebkitFlexWrap?: Property$FlexWrap | Array<Property$FlexWrap>,
+  WebkitFontFeatureSettings?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  WebkitFontKerning?: Property$FontKerning | Array<Property$FontKerning>,
+  WebkitFontSmoothing?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  WebkitFontVariantLigatures?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
+  WebkitHyphenateCharacter?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
+  WebkitHyphens?: Property$Hyphens | Array<Property$Hyphens>,
+  WebkitInitialLetter?: Property$InitialLetter | Array<Property$InitialLetter>,
+  WebkitJustifyContent?: Property$JustifyContent | Array<Property$JustifyContent>,
+  WebkitLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
+  WebkitLineClamp?: Property$WebkitLineClamp | Array<Property$WebkitLineClamp>,
+  WebkitMarginEnd?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  WebkitMarginStart?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  WebkitMaskAttachment?: Property$WebkitMaskAttachment | Array<Property$WebkitMaskAttachment>,
+  WebkitMaskBoxImageOutset?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
+  WebkitMaskBoxImageRepeat?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
+  WebkitMaskBoxImageSlice?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
+  WebkitMaskBoxImageSource?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
+  WebkitMaskBoxImageWidth?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
+  WebkitMaskClip?: Property$WebkitMaskClip | Array<Property$WebkitMaskClip>,
+  WebkitMaskComposite?: Property$WebkitMaskComposite | Array<Property$WebkitMaskComposite>,
+  WebkitMaskImage?: Property$WebkitMaskImage | Array<Property$WebkitMaskImage>,
+  WebkitMaskOrigin?: Property$WebkitMaskOrigin | Array<Property$WebkitMaskOrigin>,
+  WebkitMaskPosition?: Property$WebkitMaskPosition<TLength> | Array<Property$WebkitMaskPosition<TLength>>,
+  WebkitMaskPositionX?: Property$WebkitMaskPositionX<TLength> | Array<Property$WebkitMaskPositionX<TLength>>,
+  WebkitMaskPositionY?: Property$WebkitMaskPositionY<TLength> | Array<Property$WebkitMaskPositionY<TLength>>,
+  WebkitMaskRepeat?: Property$WebkitMaskRepeat | Array<Property$WebkitMaskRepeat>,
+  WebkitMaskRepeatX?: Property$WebkitMaskRepeatX | Array<Property$WebkitMaskRepeatX>,
+  WebkitMaskRepeatY?: Property$WebkitMaskRepeatY | Array<Property$WebkitMaskRepeatY>,
+  WebkitMaskSize?: Property$WebkitMaskSize<TLength> | Array<Property$WebkitMaskSize<TLength>>,
+  WebkitMaxInlineSize?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
+  WebkitOrder?: Property$Order | Array<Property$Order>,
+  WebkitOverflowScrolling?: Property$WebkitOverflowScrolling | Array<Property$WebkitOverflowScrolling>,
+  WebkitPaddingEnd?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  WebkitPaddingStart?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  WebkitPerspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  WebkitPerspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  WebkitPrintColorAdjust?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  WebkitRubyPosition?: Property$RubyPosition | Array<Property$RubyPosition>,
+  WebkitScrollSnapType?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
+  WebkitShapeMargin?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
+  WebkitTapHighlightColor?: Property$WebkitTapHighlightColor | Array<Property$WebkitTapHighlightColor>,
+  WebkitTextCombine?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  WebkitTextDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  WebkitTextDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  WebkitTextDecorationSkip?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
+  WebkitTextDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  WebkitTextEmphasisColor?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
+  WebkitTextEmphasisPosition?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
+  WebkitTextEmphasisStyle?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
+  WebkitTextFillColor?: Property$WebkitTextFillColor | Array<Property$WebkitTextFillColor>,
+  WebkitTextOrientation?: Property$TextOrientation | Array<Property$TextOrientation>,
+  WebkitTextSizeAdjust?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  WebkitTextStrokeColor?: Property$WebkitTextStrokeColor | Array<Property$WebkitTextStrokeColor>,
+  WebkitTextStrokeWidth?: Property$WebkitTextStrokeWidth<TLength> | Array<Property$WebkitTextStrokeWidth<TLength>>,
+  WebkitTextUnderlinePosition?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
+  WebkitTouchCallout?: Property$WebkitTouchCallout | Array<Property$WebkitTouchCallout>,
+  WebkitTransform?: Property$Transform | Array<Property$Transform>,
+  WebkitTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  WebkitTransformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
+  WebkitTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  WebkitTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  WebkitTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  WebkitTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  WebkitUserModify?: Property$WebkitUserModify | Array<Property$WebkitUserModify>,
+  WebkitUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
+  WebkitWritingMode?: Property$WritingMode | Array<Property$WritingMode>,
+|};
+
+export type VendorShorthandPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  MozAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  MozBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
+  MozColumnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  MozColumns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  MozOutlineRadius?: Property$MozOutlineRadius<TLength> | Array<Property$MozOutlineRadius<TLength>>,
+  msContentZoomLimit?: Property$MsContentZoomLimit | Array<Property$MsContentZoomLimit>,
+  msContentZoomSnap?: Property$MsContentZoomSnap | Array<Property$MsContentZoomSnap>,
+  msFlex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  msScrollLimit?: Property$MsScrollLimit | Array<Property$MsScrollLimit>,
+  msScrollSnapX?: Property$MsScrollSnapX | Array<Property$MsScrollSnapX>,
+  msScrollSnapY?: Property$MsScrollSnapY | Array<Property$MsScrollSnapY>,
+  msTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  WebkitAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  WebkitBorderBefore?: Property$WebkitBorderBefore<TLength> | Array<Property$WebkitBorderBefore<TLength>>,
+  WebkitBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
+  WebkitBorderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  WebkitColumnRule?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  WebkitColumns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  WebkitFlex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  WebkitFlexFlow?: Property$FlexFlow | Array<Property$FlexFlow>,
+  WebkitMask?: Property$WebkitMask<TLength> | Array<Property$WebkitMask<TLength>>,
+  WebkitMaskBoxImage?: Property$MaskBorder | Array<Property$MaskBorder>,
+  WebkitTextEmphasis?: Property$TextEmphasis | Array<Property$TextEmphasis>,
+  WebkitTextStroke?: Property$WebkitTextStroke<TLength> | Array<Property$WebkitTextStroke<TLength>>,
+  WebkitTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+|};
+
+export type VendorPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  ...VendorLonghandPropertiesFallback<TLength, TTime>,
+  ...VendorShorthandPropertiesFallback<TLength, TTime>,
+|};
+
+export type ObsoletePropertiesFallback<TLength = string | 0, TTime = string> = {|
+  azimuth?: Property$Azimuth | Array<Property$Azimuth>,
+  boxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
+  boxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
+  boxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
+  boxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  boxLines?: Property$BoxLines | Array<Property$BoxLines>,
+  boxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  boxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
+  boxPack?: Property$BoxPack | Array<Property$BoxPack>,
+  clip?: Property$Clip | Array<Property$Clip>,
+  gridColumnGap?: Property$GridColumnGap<TLength> | Array<Property$GridColumnGap<TLength>>,
+  gridGap?: Property$GridGap<TLength> | Array<Property$GridGap<TLength>>,
+  gridRowGap?: Property$GridRowGap<TLength> | Array<Property$GridRowGap<TLength>>,
+  imeMode?: Property$ImeMode | Array<Property$ImeMode>,
+  offsetBlock?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
+  offsetBlockEnd?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
+  offsetBlockStart?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
+  offsetInline?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
+  offsetInlineEnd?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
+  offsetInlineStart?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
+  scrollSnapCoordinate?: Property$ScrollSnapCoordinate<TLength> | Array<Property$ScrollSnapCoordinate<TLength>>,
+  scrollSnapDestination?: Property$ScrollSnapDestination<TLength> | Array<Property$ScrollSnapDestination<TLength>>,
+  scrollSnapPointsX?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
+  scrollSnapPointsY?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
+  scrollSnapTypeX?: Property$ScrollSnapTypeX | Array<Property$ScrollSnapTypeX>,
+  scrollSnapTypeY?: Property$ScrollSnapTypeY | Array<Property$ScrollSnapTypeY>,
+  KhtmlBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
+  KhtmlBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
+  KhtmlBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
+  KhtmlBoxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  KhtmlBoxLines?: Property$BoxLines | Array<Property$BoxLines>,
+  KhtmlBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  KhtmlBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
+  KhtmlBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
+  KhtmlLineBreak?: Property$LineBreak | Array<Property$LineBreak>,
+  KhtmlOpacity?: Property$Opacity | Array<Property$Opacity>,
+  KhtmlUserSelect?: Property$UserSelect | Array<Property$UserSelect>,
+  MozBackfaceVisibility?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  MozBackgroundClip?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  MozBackgroundInlinePolicy?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  MozBackgroundOrigin?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  MozBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  MozBorderRadius?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  MozBorderRadiusBottomleft?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  MozBorderRadiusBottomright?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  MozBorderRadiusTopleft?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  MozBorderRadiusTopright?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  MozBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
+  MozBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
+  MozBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
+  MozBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  MozBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
+  MozBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
+  MozBoxShadow?: Property$BoxShadow | Array<Property$BoxShadow>,
+  MozFloatEdge?: Property$MozFloatEdge | Array<Property$MozFloatEdge>,
+  MozForceBrokenImageIcon?: Property$MozForceBrokenImageIcon | Array<Property$MozForceBrokenImageIcon>,
+  MozOpacity?: Property$Opacity | Array<Property$Opacity>,
+  MozOutline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
+  MozOutlineColor?: Property$OutlineColor | Array<Property$OutlineColor>,
+  MozOutlineStyle?: Property$OutlineStyle | Array<Property$OutlineStyle>,
+  MozOutlineWidth?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
+  MozPerspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  MozPerspectiveOrigin?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  MozTextAlignLast?: Property$TextAlignLast | Array<Property$TextAlignLast>,
+  MozTextDecorationColor?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  MozTextDecorationLine?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  MozTextDecorationStyle?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  MozTransform?: Property$Transform | Array<Property$Transform>,
+  MozTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  MozTransformStyle?: Property$TransformStyle | Array<Property$TransformStyle>,
+  MozTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  MozTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  MozTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  MozTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  MozTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  MozUserInput?: Property$MozUserInput | Array<Property$MozUserInput>,
+  msImeMode?: Property$ImeMode | Array<Property$ImeMode>,
+  OAnimation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  OAnimationDelay?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  OAnimationDirection?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  OAnimationDuration?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  OAnimationFillMode?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  OAnimationIterationCount?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  OAnimationName?: Property$AnimationName | Array<Property$AnimationName>,
+  OAnimationPlayState?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  OAnimationTimingFunction?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  OBackgroundSize?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  OBorderImage?: Property$BorderImage | Array<Property$BorderImage>,
+  OObjectFit?: Property$ObjectFit | Array<Property$ObjectFit>,
+  OObjectPosition?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
+  OTabSize?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  OTextOverflow?: Property$TextOverflow | Array<Property$TextOverflow>,
+  OTransform?: Property$Transform | Array<Property$Transform>,
+  OTransformOrigin?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  OTransition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  OTransitionDelay?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  OTransitionDuration?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  OTransitionProperty?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  OTransitionTimingFunction?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  WebkitBoxAlign?: Property$BoxAlign | Array<Property$BoxAlign>,
+  WebkitBoxDirection?: Property$BoxDirection | Array<Property$BoxDirection>,
+  WebkitBoxFlex?: Property$BoxFlex | Array<Property$BoxFlex>,
+  WebkitBoxFlexGroup?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  WebkitBoxLines?: Property$BoxLines | Array<Property$BoxLines>,
+  WebkitBoxOrdinalGroup?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  WebkitBoxOrient?: Property$BoxOrient | Array<Property$BoxOrient>,
+  WebkitBoxPack?: Property$BoxPack | Array<Property$BoxPack>,
+|};
+
+export type SvgPropertiesFallback<TLength = string | 0, TTime = string> = {|
+  alignmentBaseline?: Property$AlignmentBaseline | Array<Property$AlignmentBaseline>,
+  baselineShift?: Property$BaselineShift<TLength> | Array<Property$BaselineShift<TLength>>,
+  clip?: Property$Clip | Array<Property$Clip>,
+  clipPath?: Property$ClipPath | Array<Property$ClipPath>,
+  clipRule?: Property$ClipRule | Array<Property$ClipRule>,
+  color?: Property$Color | Array<Property$Color>,
+  colorInterpolation?: Property$ColorInterpolation | Array<Property$ColorInterpolation>,
+  colorRendering?: Property$ColorRendering | Array<Property$ColorRendering>,
+  cursor?: Property$Cursor | Array<Property$Cursor>,
+  direction?: Property$Direction | Array<Property$Direction>,
+  display?: Property$Display | Array<Property$Display>,
+  dominantBaseline?: Property$DominantBaseline | Array<Property$DominantBaseline>,
+  fill?: Property$Fill | Array<Property$Fill>,
+  fillOpacity?: Property$FillOpacity | Array<Property$FillOpacity>,
+  fillRule?: Property$FillRule | Array<Property$FillRule>,
+  filter?: Property$Filter | Array<Property$Filter>,
+  floodColor?: Property$FloodColor | Array<Property$FloodColor>,
+  floodOpacity?: Property$FloodOpacity | Array<Property$FloodOpacity>,
+  font?: Property$Font | Array<Property$Font>,
+  fontFamily?: Property$FontFamily | Array<Property$FontFamily>,
+  fontSize?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
+  fontSizeAdjust?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
+  fontStretch?: Property$FontStretch | Array<Property$FontStretch>,
+  fontStyle?: Property$FontStyle | Array<Property$FontStyle>,
+  fontVariant?: Property$FontVariant | Array<Property$FontVariant>,
+  fontWeight?: Property$FontWeight | Array<Property$FontWeight>,
+  glyphOrientationVertical?: Property$GlyphOrientationVertical | Array<Property$GlyphOrientationVertical>,
+  imageRendering?: Property$ImageRendering | Array<Property$ImageRendering>,
+  letterSpacing?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
+  lightingColor?: Property$LightingColor | Array<Property$LightingColor>,
+  lineHeight?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
+  marker?: Property$Marker | Array<Property$Marker>,
+  markerEnd?: Property$MarkerEnd | Array<Property$MarkerEnd>,
+  markerMid?: Property$MarkerMid | Array<Property$MarkerMid>,
+  markerStart?: Property$MarkerStart | Array<Property$MarkerStart>,
+  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
+  opacity?: Property$Opacity | Array<Property$Opacity>,
+  overflow?: Property$Overflow | Array<Property$Overflow>,
+  paintOrder?: Property$PaintOrder | Array<Property$PaintOrder>,
+  pointerEvents?: Property$PointerEvents | Array<Property$PointerEvents>,
+  shapeRendering?: Property$ShapeRendering | Array<Property$ShapeRendering>,
+  stopColor?: Property$StopColor | Array<Property$StopColor>,
+  stopOpacity?: Property$StopOpacity | Array<Property$StopOpacity>,
+  stroke?: Property$Stroke | Array<Property$Stroke>,
+  strokeDasharray?: Property$StrokeDasharray<TLength> | Array<Property$StrokeDasharray<TLength>>,
+  strokeDashoffset?: Property$StrokeDashoffset<TLength> | Array<Property$StrokeDashoffset<TLength>>,
+  strokeLinecap?: Property$StrokeLinecap | Array<Property$StrokeLinecap>,
+  strokeLinejoin?: Property$StrokeLinejoin | Array<Property$StrokeLinejoin>,
+  strokeMiterlimit?: Property$StrokeMiterlimit | Array<Property$StrokeMiterlimit>,
+  strokeOpacity?: Property$StrokeOpacity | Array<Property$StrokeOpacity>,
+  strokeWidth?: Property$StrokeWidth<TLength> | Array<Property$StrokeWidth<TLength>>,
+  textAnchor?: Property$TextAnchor | Array<Property$TextAnchor>,
+  textDecoration?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
+  textRendering?: Property$TextRendering | Array<Property$TextRendering>,
+  unicodeBidi?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
+  vectorEffect?: Property$VectorEffect | Array<Property$VectorEffect>,
+  visibility?: Property$Visibility | Array<Property$Visibility>,
+  whiteSpace?: Property$WhiteSpace | Array<Property$WhiteSpace>,
+  wordSpacing?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
+  writingMode?: Property$WritingMode | Array<Property$WritingMode>,
+|};
+
+export type PropertiesFallback<TLength = string | 0, TTime = string> = {|
+  ...StandardPropertiesFallback<TLength, TTime>,
+  ...VendorPropertiesFallback<TLength, TTime>,
+  ...ObsoletePropertiesFallback<TLength, TTime>,
+  ...SvgPropertiesFallback<TLength, TTime>,
+|};
+
+export type StandardLonghandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "accent-color"?: Property$AccentColor | Array<Property$AccentColor>,
+  "align-content"?: Property$AlignContent | Array<Property$AlignContent>,
+  "align-items"?: Property$AlignItems | Array<Property$AlignItems>,
+  "align-self"?: Property$AlignSelf | Array<Property$AlignSelf>,
+  "align-tracks"?: Property$AlignTracks | Array<Property$AlignTracks>,
+  "animation-composition"?: Property$AnimationComposition | Array<Property$AnimationComposition>,
+  "animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  "animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  "animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  "animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  "animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  "animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
+  "animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  "animation-range-end"?: Property$AnimationRangeEnd<TLength> | Array<Property$AnimationRangeEnd<TLength>>,
+  "animation-range-start"?: Property$AnimationRangeStart<TLength> | Array<Property$AnimationRangeStart<TLength>>,
+  "animation-timeline"?: Property$AnimationTimeline | Array<Property$AnimationTimeline>,
+  "animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  appearance?: Property$Appearance | Array<Property$Appearance>,
+  "aspect-ratio"?: Property$AspectRatio | Array<Property$AspectRatio>,
+  "backdrop-filter"?: Property$BackdropFilter | Array<Property$BackdropFilter>,
+  "backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  "background-attachment"?: Property$BackgroundAttachment | Array<Property$BackgroundAttachment>,
+  "background-blend-mode"?: Property$BackgroundBlendMode | Array<Property$BackgroundBlendMode>,
+  "background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  "background-color"?: Property$BackgroundColor | Array<Property$BackgroundColor>,
+  "background-image"?: Property$BackgroundImage | Array<Property$BackgroundImage>,
+  "background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  "background-position-x"?: Property$BackgroundPositionX<TLength> | Array<Property$BackgroundPositionX<TLength>>,
+  "background-position-y"?: Property$BackgroundPositionY<TLength> | Array<Property$BackgroundPositionY<TLength>>,
+  "background-repeat"?: Property$BackgroundRepeat | Array<Property$BackgroundRepeat>,
+  "background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  "block-overflow"?: Property$BlockOverflow | Array<Property$BlockOverflow>,
+  "block-size"?: Property$BlockSize<TLength> | Array<Property$BlockSize<TLength>>,
+  "border-block-color"?: Property$BorderBlockColor | Array<Property$BorderBlockColor>,
+  "border-block-end-color"?: Property$BorderBlockEndColor | Array<Property$BorderBlockEndColor>,
+  "border-block-end-style"?: Property$BorderBlockEndStyle | Array<Property$BorderBlockEndStyle>,
+  "border-block-end-width"?: Property$BorderBlockEndWidth<TLength> | Array<Property$BorderBlockEndWidth<TLength>>,
+  "border-block-start-color"?: Property$BorderBlockStartColor | Array<Property$BorderBlockStartColor>,
+  "border-block-start-style"?: Property$BorderBlockStartStyle | Array<Property$BorderBlockStartStyle>,
+  "border-block-start-width"?: Property$BorderBlockStartWidth<TLength> | Array<Property$BorderBlockStartWidth<TLength>>,
+  "border-block-style"?: Property$BorderBlockStyle | Array<Property$BorderBlockStyle>,
+  "border-block-width"?: Property$BorderBlockWidth<TLength> | Array<Property$BorderBlockWidth<TLength>>,
+  "border-bottom-color"?: Property$BorderBottomColor | Array<Property$BorderBottomColor>,
+  "border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  "border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  "border-bottom-style"?: Property$BorderBottomStyle | Array<Property$BorderBottomStyle>,
+  "border-bottom-width"?: Property$BorderBottomWidth<TLength> | Array<Property$BorderBottomWidth<TLength>>,
+  "border-collapse"?: Property$BorderCollapse | Array<Property$BorderCollapse>,
+  "border-end-end-radius"?: Property$BorderEndEndRadius<TLength> | Array<Property$BorderEndEndRadius<TLength>>,
+  "border-end-start-radius"?: Property$BorderEndStartRadius<TLength> | Array<Property$BorderEndStartRadius<TLength>>,
+  "border-image-outset"?: Property$BorderImageOutset<TLength> | Array<Property$BorderImageOutset<TLength>>,
+  "border-image-repeat"?: Property$BorderImageRepeat | Array<Property$BorderImageRepeat>,
+  "border-image-slice"?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
+  "border-image-source"?: Property$BorderImageSource | Array<Property$BorderImageSource>,
+  "border-image-width"?: Property$BorderImageWidth<TLength> | Array<Property$BorderImageWidth<TLength>>,
+  "border-inline-color"?: Property$BorderInlineColor | Array<Property$BorderInlineColor>,
+  "border-inline-end-color"?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
+  "border-inline-end-style"?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
+  "border-inline-end-width"?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
+  "border-inline-start-color"?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
+  "border-inline-start-style"?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
+  "border-inline-start-width"?: Property$BorderInlineStartWidth<TLength> | Array<Property$BorderInlineStartWidth<TLength>>,
+  "border-inline-style"?: Property$BorderInlineStyle | Array<Property$BorderInlineStyle>,
+  "border-inline-width"?: Property$BorderInlineWidth<TLength> | Array<Property$BorderInlineWidth<TLength>>,
+  "border-left-color"?: Property$BorderLeftColor | Array<Property$BorderLeftColor>,
+  "border-left-style"?: Property$BorderLeftStyle | Array<Property$BorderLeftStyle>,
+  "border-left-width"?: Property$BorderLeftWidth<TLength> | Array<Property$BorderLeftWidth<TLength>>,
+  "border-right-color"?: Property$BorderRightColor | Array<Property$BorderRightColor>,
+  "border-right-style"?: Property$BorderRightStyle | Array<Property$BorderRightStyle>,
+  "border-right-width"?: Property$BorderRightWidth<TLength> | Array<Property$BorderRightWidth<TLength>>,
+  "border-spacing"?: Property$BorderSpacing<TLength> | Array<Property$BorderSpacing<TLength>>,
+  "border-start-end-radius"?: Property$BorderStartEndRadius<TLength> | Array<Property$BorderStartEndRadius<TLength>>,
+  "border-start-start-radius"?: Property$BorderStartStartRadius<TLength> | Array<Property$BorderStartStartRadius<TLength>>,
+  "border-top-color"?: Property$BorderTopColor | Array<Property$BorderTopColor>,
+  "border-top-left-radius"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  "border-top-right-radius"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  "border-top-style"?: Property$BorderTopStyle | Array<Property$BorderTopStyle>,
+  "border-top-width"?: Property$BorderTopWidth<TLength> | Array<Property$BorderTopWidth<TLength>>,
+  bottom?: Property$Bottom<TLength> | Array<Property$Bottom<TLength>>,
+  "box-decoration-break"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  "box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
+  "box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
+  "break-after"?: Property$BreakAfter | Array<Property$BreakAfter>,
+  "break-before"?: Property$BreakBefore | Array<Property$BreakBefore>,
+  "break-inside"?: Property$BreakInside | Array<Property$BreakInside>,
+  "caption-side"?: Property$CaptionSide | Array<Property$CaptionSide>,
+  "caret-color"?: Property$CaretColor | Array<Property$CaretColor>,
+  "caret-shape"?: Property$CaretShape | Array<Property$CaretShape>,
+  clear?: Property$Clear | Array<Property$Clear>,
+  "clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
+  color?: Property$Color | Array<Property$Color>,
+  "color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  "color-scheme"?: Property$ColorScheme | Array<Property$ColorScheme>,
+  "column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
+  "column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
+  "column-gap"?: Property$ColumnGap<TLength> | Array<Property$ColumnGap<TLength>>,
+  "column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  "column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  "column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  "column-span"?: Property$ColumnSpan | Array<Property$ColumnSpan>,
+  "column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  contain?: Property$Contain | Array<Property$Contain>,
+  "contain-intrinsic-block-size"?: Property$ContainIntrinsicBlockSize<TLength> | Array<Property$ContainIntrinsicBlockSize<TLength>>,
+  "contain-intrinsic-height"?: Property$ContainIntrinsicHeight<TLength> | Array<Property$ContainIntrinsicHeight<TLength>>,
+  "contain-intrinsic-inline-size"?: Property$ContainIntrinsicInlineSize<TLength> | Array<Property$ContainIntrinsicInlineSize<TLength>>,
+  "contain-intrinsic-width"?: Property$ContainIntrinsicWidth<TLength> | Array<Property$ContainIntrinsicWidth<TLength>>,
+  "container-name"?: Property$ContainerName | Array<Property$ContainerName>,
+  "container-type"?: Property$ContainerType | Array<Property$ContainerType>,
+  content?: Property$Content | Array<Property$Content>,
+  "content-visibility"?: Property$ContentVisibility | Array<Property$ContentVisibility>,
+  "counter-increment"?: Property$CounterIncrement | Array<Property$CounterIncrement>,
+  "counter-reset"?: Property$CounterReset | Array<Property$CounterReset>,
+  "counter-set"?: Property$CounterSet | Array<Property$CounterSet>,
+  cursor?: Property$Cursor | Array<Property$Cursor>,
+  direction?: Property$Direction | Array<Property$Direction>,
+  display?: Property$Display | Array<Property$Display>,
+  "empty-cells"?: Property$EmptyCells | Array<Property$EmptyCells>,
+  filter?: Property$Filter | Array<Property$Filter>,
+  "flex-basis"?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
+  "flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
+  "flex-grow"?: Property$FlexGrow | Array<Property$FlexGrow>,
+  "flex-shrink"?: Property$FlexShrink | Array<Property$FlexShrink>,
+  "flex-wrap"?: Property$FlexWrap | Array<Property$FlexWrap>,
+  float?: Property$Float | Array<Property$Float>,
+  "font-family"?: Property$FontFamily | Array<Property$FontFamily>,
+  "font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  "font-kerning"?: Property$FontKerning | Array<Property$FontKerning>,
+  "font-language-override"?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
+  "font-optical-sizing"?: Property$FontOpticalSizing | Array<Property$FontOpticalSizing>,
+  "font-palette"?: Property$FontPalette | Array<Property$FontPalette>,
+  "font-size"?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
+  "font-size-adjust"?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
+  "font-smooth"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  "font-stretch"?: Property$FontStretch | Array<Property$FontStretch>,
+  "font-style"?: Property$FontStyle | Array<Property$FontStyle>,
+  "font-synthesis"?: Property$FontSynthesis | Array<Property$FontSynthesis>,
+  "font-synthesis-position"?: Property$FontSynthesisPosition | Array<Property$FontSynthesisPosition>,
+  "font-synthesis-small-caps"?: Property$FontSynthesisSmallCaps | Array<Property$FontSynthesisSmallCaps>,
+  "font-synthesis-style"?: Property$FontSynthesisStyle | Array<Property$FontSynthesisStyle>,
+  "font-synthesis-weight"?: Property$FontSynthesisWeight | Array<Property$FontSynthesisWeight>,
+  "font-variant"?: Property$FontVariant | Array<Property$FontVariant>,
+  "font-variant-alternates"?: Property$FontVariantAlternates | Array<Property$FontVariantAlternates>,
+  "font-variant-caps"?: Property$FontVariantCaps | Array<Property$FontVariantCaps>,
+  "font-variant-east-asian"?: Property$FontVariantEastAsian | Array<Property$FontVariantEastAsian>,
+  "font-variant-emoji"?: Property$FontVariantEmoji | Array<Property$FontVariantEmoji>,
+  "font-variant-ligatures"?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
+  "font-variant-numeric"?: Property$FontVariantNumeric | Array<Property$FontVariantNumeric>,
+  "font-variant-position"?: Property$FontVariantPosition | Array<Property$FontVariantPosition>,
+  "font-variation-settings"?: Property$FontVariationSettings | Array<Property$FontVariationSettings>,
+  "font-weight"?: Property$FontWeight | Array<Property$FontWeight>,
+  "forced-color-adjust"?: Property$ForcedColorAdjust | Array<Property$ForcedColorAdjust>,
+  "grid-auto-columns"?: Property$GridAutoColumns<TLength> | Array<Property$GridAutoColumns<TLength>>,
+  "grid-auto-flow"?: Property$GridAutoFlow | Array<Property$GridAutoFlow>,
+  "grid-auto-rows"?: Property$GridAutoRows<TLength> | Array<Property$GridAutoRows<TLength>>,
+  "grid-column-end"?: Property$GridColumnEnd | Array<Property$GridColumnEnd>,
+  "grid-column-start"?: Property$GridColumnStart | Array<Property$GridColumnStart>,
+  "grid-row-end"?: Property$GridRowEnd | Array<Property$GridRowEnd>,
+  "grid-row-start"?: Property$GridRowStart | Array<Property$GridRowStart>,
+  "grid-template-areas"?: Property$GridTemplateAreas | Array<Property$GridTemplateAreas>,
+  "grid-template-columns"?: Property$GridTemplateColumns<TLength> | Array<Property$GridTemplateColumns<TLength>>,
+  "grid-template-rows"?: Property$GridTemplateRows<TLength> | Array<Property$GridTemplateRows<TLength>>,
+  "hanging-punctuation"?: Property$HangingPunctuation | Array<Property$HangingPunctuation>,
+  height?: Property$Height<TLength> | Array<Property$Height<TLength>>,
+  "hyphenate-character"?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
+  "hyphenate-limit-chars"?: Property$HyphenateLimitChars | Array<Property$HyphenateLimitChars>,
+  hyphens?: Property$Hyphens | Array<Property$Hyphens>,
+  "image-orientation"?: Property$ImageOrientation | Array<Property$ImageOrientation>,
+  "image-rendering"?: Property$ImageRendering | Array<Property$ImageRendering>,
+  "image-resolution"?: Property$ImageResolution | Array<Property$ImageResolution>,
+  "initial-letter"?: Property$InitialLetter | Array<Property$InitialLetter>,
+  "inline-size"?: Property$InlineSize<TLength> | Array<Property$InlineSize<TLength>>,
+  "input-security"?: Property$InputSecurity | Array<Property$InputSecurity>,
+  "inset-block-end"?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
+  "inset-block-start"?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
+  "inset-inline-end"?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
+  "inset-inline-start"?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
+  isolation?: Property$Isolation | Array<Property$Isolation>,
+  "justify-content"?: Property$JustifyContent | Array<Property$JustifyContent>,
+  "justify-items"?: Property$JustifyItems | Array<Property$JustifyItems>,
+  "justify-self"?: Property$JustifySelf | Array<Property$JustifySelf>,
+  "justify-tracks"?: Property$JustifyTracks | Array<Property$JustifyTracks>,
+  left?: Property$Left<TLength> | Array<Property$Left<TLength>>,
+  "letter-spacing"?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
+  "line-break"?: Property$LineBreak | Array<Property$LineBreak>,
+  "line-height"?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
+  "line-height-step"?: Property$LineHeightStep<TLength> | Array<Property$LineHeightStep<TLength>>,
+  "list-style-image"?: Property$ListStyleImage | Array<Property$ListStyleImage>,
+  "list-style-position"?: Property$ListStylePosition | Array<Property$ListStylePosition>,
+  "list-style-type"?: Property$ListStyleType | Array<Property$ListStyleType>,
+  "margin-block-end"?: Property$MarginBlockEnd<TLength> | Array<Property$MarginBlockEnd<TLength>>,
+  "margin-block-start"?: Property$MarginBlockStart<TLength> | Array<Property$MarginBlockStart<TLength>>,
+  "margin-bottom"?: Property$MarginBottom<TLength> | Array<Property$MarginBottom<TLength>>,
+  "margin-inline-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  "margin-inline-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  "margin-left"?: Property$MarginLeft<TLength> | Array<Property$MarginLeft<TLength>>,
+  "margin-right"?: Property$MarginRight<TLength> | Array<Property$MarginRight<TLength>>,
+  "margin-top"?: Property$MarginTop<TLength> | Array<Property$MarginTop<TLength>>,
+  "margin-trim"?: Property$MarginTrim | Array<Property$MarginTrim>,
+  "mask-border-mode"?: Property$MaskBorderMode | Array<Property$MaskBorderMode>,
+  "mask-border-outset"?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
+  "mask-border-repeat"?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
+  "mask-border-slice"?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
+  "mask-border-source"?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
+  "mask-border-width"?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
+  "mask-clip"?: Property$MaskClip | Array<Property$MaskClip>,
+  "mask-composite"?: Property$MaskComposite | Array<Property$MaskComposite>,
+  "mask-image"?: Property$MaskImage | Array<Property$MaskImage>,
+  "mask-mode"?: Property$MaskMode | Array<Property$MaskMode>,
+  "mask-origin"?: Property$MaskOrigin | Array<Property$MaskOrigin>,
+  "mask-position"?: Property$MaskPosition<TLength> | Array<Property$MaskPosition<TLength>>,
+  "mask-repeat"?: Property$MaskRepeat | Array<Property$MaskRepeat>,
+  "mask-size"?: Property$MaskSize<TLength> | Array<Property$MaskSize<TLength>>,
+  "mask-type"?: Property$MaskType | Array<Property$MaskType>,
+  "masonry-auto-flow"?: Property$MasonryAutoFlow | Array<Property$MasonryAutoFlow>,
+  "math-depth"?: Property$MathDepth | Array<Property$MathDepth>,
+  "math-shift"?: Property$MathShift | Array<Property$MathShift>,
+  "math-style"?: Property$MathStyle | Array<Property$MathStyle>,
+  "max-block-size"?: Property$MaxBlockSize<TLength> | Array<Property$MaxBlockSize<TLength>>,
+  "max-height"?: Property$MaxHeight<TLength> | Array<Property$MaxHeight<TLength>>,
+  "max-inline-size"?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
+  "max-lines"?: Property$MaxLines | Array<Property$MaxLines>,
+  "max-width"?: Property$MaxWidth<TLength> | Array<Property$MaxWidth<TLength>>,
+  "min-block-size"?: Property$MinBlockSize<TLength> | Array<Property$MinBlockSize<TLength>>,
+  "min-height"?: Property$MinHeight<TLength> | Array<Property$MinHeight<TLength>>,
+  "min-inline-size"?: Property$MinInlineSize<TLength> | Array<Property$MinInlineSize<TLength>>,
+  "min-width"?: Property$MinWidth<TLength> | Array<Property$MinWidth<TLength>>,
+  "mix-blend-mode"?: Property$MixBlendMode | Array<Property$MixBlendMode>,
+  "motion-distance"?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
+  "motion-path"?: Property$OffsetPath | Array<Property$OffsetPath>,
+  "motion-rotation"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  "object-fit"?: Property$ObjectFit | Array<Property$ObjectFit>,
+  "object-position"?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
+  "offset-anchor"?: Property$OffsetAnchor<TLength> | Array<Property$OffsetAnchor<TLength>>,
+  "offset-distance"?: Property$OffsetDistance<TLength> | Array<Property$OffsetDistance<TLength>>,
+  "offset-path"?: Property$OffsetPath | Array<Property$OffsetPath>,
+  "offset-position"?: Property$OffsetPosition<TLength> | Array<Property$OffsetPosition<TLength>>,
+  "offset-rotate"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  "offset-rotation"?: Property$OffsetRotate | Array<Property$OffsetRotate>,
+  opacity?: Property$Opacity | Array<Property$Opacity>,
+  order?: Property$Order | Array<Property$Order>,
+  orphans?: Property$Orphans | Array<Property$Orphans>,
+  "outline-color"?: Property$OutlineColor | Array<Property$OutlineColor>,
+  "outline-offset"?: Property$OutlineOffset<TLength> | Array<Property$OutlineOffset<TLength>>,
+  "outline-style"?: Property$OutlineStyle | Array<Property$OutlineStyle>,
+  "outline-width"?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
+  "overflow-anchor"?: Property$OverflowAnchor | Array<Property$OverflowAnchor>,
+  "overflow-block"?: Property$OverflowBlock | Array<Property$OverflowBlock>,
+  "overflow-clip-box"?: Property$OverflowClipBox | Array<Property$OverflowClipBox>,
+  "overflow-clip-margin"?: Property$OverflowClipMargin<TLength> | Array<Property$OverflowClipMargin<TLength>>,
+  "overflow-inline"?: Property$OverflowInline | Array<Property$OverflowInline>,
+  "overflow-wrap"?: Property$OverflowWrap | Array<Property$OverflowWrap>,
+  "overflow-x"?: Property$OverflowX | Array<Property$OverflowX>,
+  "overflow-y"?: Property$OverflowY | Array<Property$OverflowY>,
+  overlay?: Property$Overlay | Array<Property$Overlay>,
+  "overscroll-behavior-block"?: Property$OverscrollBehaviorBlock | Array<Property$OverscrollBehaviorBlock>,
+  "overscroll-behavior-inline"?: Property$OverscrollBehaviorInline | Array<Property$OverscrollBehaviorInline>,
+  "overscroll-behavior-x"?: Property$OverscrollBehaviorX | Array<Property$OverscrollBehaviorX>,
+  "overscroll-behavior-y"?: Property$OverscrollBehaviorY | Array<Property$OverscrollBehaviorY>,
+  "padding-block-end"?: Property$PaddingBlockEnd<TLength> | Array<Property$PaddingBlockEnd<TLength>>,
+  "padding-block-start"?: Property$PaddingBlockStart<TLength> | Array<Property$PaddingBlockStart<TLength>>,
+  "padding-bottom"?: Property$PaddingBottom<TLength> | Array<Property$PaddingBottom<TLength>>,
+  "padding-inline-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  "padding-inline-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  "padding-left"?: Property$PaddingLeft<TLength> | Array<Property$PaddingLeft<TLength>>,
+  "padding-right"?: Property$PaddingRight<TLength> | Array<Property$PaddingRight<TLength>>,
+  "padding-top"?: Property$PaddingTop<TLength> | Array<Property$PaddingTop<TLength>>,
+  page?: Property$Page | Array<Property$Page>,
+  "page-break-after"?: Property$PageBreakAfter | Array<Property$PageBreakAfter>,
+  "page-break-before"?: Property$PageBreakBefore | Array<Property$PageBreakBefore>,
+  "page-break-inside"?: Property$PageBreakInside | Array<Property$PageBreakInside>,
+  "paint-order"?: Property$PaintOrder | Array<Property$PaintOrder>,
+  perspective?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  "perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  "pointer-events"?: Property$PointerEvents | Array<Property$PointerEvents>,
+  position?: Property$Position | Array<Property$Position>,
+  "print-color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  quotes?: Property$Quotes | Array<Property$Quotes>,
+  resize?: Property$Resize | Array<Property$Resize>,
+  right?: Property$Right<TLength> | Array<Property$Right<TLength>>,
+  rotate?: Property$Rotate | Array<Property$Rotate>,
+  "row-gap"?: Property$RowGap<TLength> | Array<Property$RowGap<TLength>>,
+  "ruby-align"?: Property$RubyAlign | Array<Property$RubyAlign>,
+  "ruby-merge"?: Property$RubyMerge | Array<Property$RubyMerge>,
+  "ruby-position"?: Property$RubyPosition | Array<Property$RubyPosition>,
+  scale?: Property$Scale | Array<Property$Scale>,
+  "scroll-behavior"?: Property$ScrollBehavior | Array<Property$ScrollBehavior>,
+  "scroll-margin-block-end"?: Property$ScrollMarginBlockEnd<TLength> | Array<Property$ScrollMarginBlockEnd<TLength>>,
+  "scroll-margin-block-start"?: Property$ScrollMarginBlockStart<TLength> | Array<Property$ScrollMarginBlockStart<TLength>>,
+  "scroll-margin-bottom"?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
+  "scroll-margin-inline-end"?: Property$ScrollMarginInlineEnd<TLength> | Array<Property$ScrollMarginInlineEnd<TLength>>,
+  "scroll-margin-inline-start"?: Property$ScrollMarginInlineStart<TLength> | Array<Property$ScrollMarginInlineStart<TLength>>,
+  "scroll-margin-left"?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
+  "scroll-margin-right"?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
+  "scroll-margin-top"?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
+  "scroll-padding-block-end"?: Property$ScrollPaddingBlockEnd<TLength> | Array<Property$ScrollPaddingBlockEnd<TLength>>,
+  "scroll-padding-block-start"?: Property$ScrollPaddingBlockStart<TLength> | Array<Property$ScrollPaddingBlockStart<TLength>>,
+  "scroll-padding-bottom"?: Property$ScrollPaddingBottom<TLength> | Array<Property$ScrollPaddingBottom<TLength>>,
+  "scroll-padding-inline-end"?: Property$ScrollPaddingInlineEnd<TLength> | Array<Property$ScrollPaddingInlineEnd<TLength>>,
+  "scroll-padding-inline-start"?: Property$ScrollPaddingInlineStart<TLength> | Array<Property$ScrollPaddingInlineStart<TLength>>,
+  "scroll-padding-left"?: Property$ScrollPaddingLeft<TLength> | Array<Property$ScrollPaddingLeft<TLength>>,
+  "scroll-padding-right"?: Property$ScrollPaddingRight<TLength> | Array<Property$ScrollPaddingRight<TLength>>,
+  "scroll-padding-top"?: Property$ScrollPaddingTop<TLength> | Array<Property$ScrollPaddingTop<TLength>>,
+  "scroll-snap-align"?: Property$ScrollSnapAlign | Array<Property$ScrollSnapAlign>,
+  "scroll-snap-margin-bottom"?: Property$ScrollMarginBottom<TLength> | Array<Property$ScrollMarginBottom<TLength>>,
+  "scroll-snap-margin-left"?: Property$ScrollMarginLeft<TLength> | Array<Property$ScrollMarginLeft<TLength>>,
+  "scroll-snap-margin-right"?: Property$ScrollMarginRight<TLength> | Array<Property$ScrollMarginRight<TLength>>,
+  "scroll-snap-margin-top"?: Property$ScrollMarginTop<TLength> | Array<Property$ScrollMarginTop<TLength>>,
+  "scroll-snap-stop"?: Property$ScrollSnapStop | Array<Property$ScrollSnapStop>,
+  "scroll-snap-type"?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
+  "scroll-timeline-axis"?: Property$ScrollTimelineAxis | Array<Property$ScrollTimelineAxis>,
+  "scroll-timeline-name"?: Property$ScrollTimelineName | Array<Property$ScrollTimelineName>,
+  "scrollbar-color"?: Property$ScrollbarColor | Array<Property$ScrollbarColor>,
+  "scrollbar-gutter"?: Property$ScrollbarGutter | Array<Property$ScrollbarGutter>,
+  "scrollbar-width"?: Property$ScrollbarWidth | Array<Property$ScrollbarWidth>,
+  "shape-image-threshold"?: Property$ShapeImageThreshold | Array<Property$ShapeImageThreshold>,
+  "shape-margin"?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
+  "shape-outside"?: Property$ShapeOutside | Array<Property$ShapeOutside>,
+  "tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  "table-layout"?: Property$TableLayout | Array<Property$TableLayout>,
+  "text-align"?: Property$TextAlign | Array<Property$TextAlign>,
+  "text-align-last"?: Property$TextAlignLast | Array<Property$TextAlignLast>,
+  "text-combine-upright"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  "text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  "text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  "text-decoration-skip"?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
+  "text-decoration-skip-ink"?: Property$TextDecorationSkipInk | Array<Property$TextDecorationSkipInk>,
+  "text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  "text-decoration-thickness"?: Property$TextDecorationThickness<TLength> | Array<Property$TextDecorationThickness<TLength>>,
+  "text-emphasis-color"?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
+  "text-emphasis-position"?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
+  "text-emphasis-style"?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
+  "text-indent"?: Property$TextIndent<TLength> | Array<Property$TextIndent<TLength>>,
+  "text-justify"?: Property$TextJustify | Array<Property$TextJustify>,
+  "text-orientation"?: Property$TextOrientation | Array<Property$TextOrientation>,
+  "text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
+  "text-rendering"?: Property$TextRendering | Array<Property$TextRendering>,
+  "text-shadow"?: Property$TextShadow | Array<Property$TextShadow>,
+  "text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  "text-transform"?: Property$TextTransform | Array<Property$TextTransform>,
+  "text-underline-offset"?: Property$TextUnderlineOffset<TLength> | Array<Property$TextUnderlineOffset<TLength>>,
+  "text-underline-position"?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
+  "text-wrap"?: Property$TextWrap | Array<Property$TextWrap>,
+  "timeline-scope"?: Property$TimelineScope | Array<Property$TimelineScope>,
+  top?: Property$Top<TLength> | Array<Property$Top<TLength>>,
+  "touch-action"?: Property$TouchAction | Array<Property$TouchAction>,
+  transform?: Property$Transform | Array<Property$Transform>,
+  "transform-box"?: Property$TransformBox | Array<Property$TransformBox>,
+  "transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  "transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
+  "transition-behavior"?: Property$TransitionBehavior | Array<Property$TransitionBehavior>,
+  "transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  "transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  "transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  "transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  translate?: Property$Translate<TLength> | Array<Property$Translate<TLength>>,
+  "unicode-bidi"?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
+  "user-select"?: Property$UserSelect | Array<Property$UserSelect>,
+  "vertical-align"?: Property$VerticalAlign<TLength> | Array<Property$VerticalAlign<TLength>>,
+  "view-timeline-axis"?: Property$ViewTimelineAxis | Array<Property$ViewTimelineAxis>,
+  "view-timeline-inset"?: Property$ViewTimelineInset<TLength> | Array<Property$ViewTimelineInset<TLength>>,
+  "view-timeline-name"?: Property$ViewTimelineName | Array<Property$ViewTimelineName>,
+  "view-transition-name"?: Property$ViewTransitionName | Array<Property$ViewTransitionName>,
+  visibility?: Property$Visibility | Array<Property$Visibility>,
+  "white-space"?: Property$WhiteSpace | Array<Property$WhiteSpace>,
+  "white-space-collapse"?: Property$WhiteSpaceCollapse | Array<Property$WhiteSpaceCollapse>,
+  "white-space-trim"?: Property$WhiteSpaceTrim | Array<Property$WhiteSpaceTrim>,
+  widows?: Property$Widows | Array<Property$Widows>,
+  width?: Property$Width<TLength> | Array<Property$Width<TLength>>,
+  "will-change"?: Property$WillChange | Array<Property$WillChange>,
+  "word-break"?: Property$WordBreak | Array<Property$WordBreak>,
+  "word-spacing"?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
+  "word-wrap"?: Property$WordWrap | Array<Property$WordWrap>,
+  "writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
+  "z-index"?: Property$ZIndex | Array<Property$ZIndex>,
+  zoom?: Property$Zoom | Array<Property$Zoom>,
+|};
+
+export type StandardShorthandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  all?: Property$All | Array<Property$All>,
+  animation?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  "animation-range"?: Property$AnimationRange<TLength> | Array<Property$AnimationRange<TLength>>,
+  background?: Property$Background<TLength> | Array<Property$Background<TLength>>,
+  "background-position"?: Property$BackgroundPosition<TLength> | Array<Property$BackgroundPosition<TLength>>,
+  border?: Property$Border<TLength> | Array<Property$Border<TLength>>,
+  "border-block"?: Property$BorderBlock<TLength> | Array<Property$BorderBlock<TLength>>,
+  "border-block-end"?: Property$BorderBlockEnd<TLength> | Array<Property$BorderBlockEnd<TLength>>,
+  "border-block-start"?: Property$BorderBlockStart<TLength> | Array<Property$BorderBlockStart<TLength>>,
+  "border-bottom"?: Property$BorderBottom<TLength> | Array<Property$BorderBottom<TLength>>,
+  "border-color"?: Property$BorderColor | Array<Property$BorderColor>,
+  "border-image"?: Property$BorderImage | Array<Property$BorderImage>,
+  "border-inline"?: Property$BorderInline<TLength> | Array<Property$BorderInline<TLength>>,
+  "border-inline-end"?: Property$BorderInlineEnd<TLength> | Array<Property$BorderInlineEnd<TLength>>,
+  "border-inline-start"?: Property$BorderInlineStart<TLength> | Array<Property$BorderInlineStart<TLength>>,
+  "border-left"?: Property$BorderLeft<TLength> | Array<Property$BorderLeft<TLength>>,
+  "border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  "border-right"?: Property$BorderRight<TLength> | Array<Property$BorderRight<TLength>>,
+  "border-style"?: Property$BorderStyle | Array<Property$BorderStyle>,
+  "border-top"?: Property$BorderTop<TLength> | Array<Property$BorderTop<TLength>>,
+  "border-width"?: Property$BorderWidth<TLength> | Array<Property$BorderWidth<TLength>>,
+  caret?: Property$Caret | Array<Property$Caret>,
+  "column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  columns?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  "contain-intrinsic-size"?: Property$ContainIntrinsicSize<TLength> | Array<Property$ContainIntrinsicSize<TLength>>,
+  container?: Property$Container | Array<Property$Container>,
+  flex?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  "flex-flow"?: Property$FlexFlow | Array<Property$FlexFlow>,
+  font?: Property$Font | Array<Property$Font>,
+  gap?: Property$Gap<TLength> | Array<Property$Gap<TLength>>,
+  grid?: Property$Grid | Array<Property$Grid>,
+  "grid-area"?: Property$GridArea | Array<Property$GridArea>,
+  "grid-column"?: Property$GridColumn | Array<Property$GridColumn>,
+  "grid-row"?: Property$GridRow | Array<Property$GridRow>,
+  "grid-template"?: Property$GridTemplate | Array<Property$GridTemplate>,
+  inset?: Property$Inset<TLength> | Array<Property$Inset<TLength>>,
+  "inset-block"?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
+  "inset-inline"?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
+  "line-clamp"?: Property$LineClamp | Array<Property$LineClamp>,
+  "list-style"?: Property$ListStyle | Array<Property$ListStyle>,
+  margin?: Property$Margin<TLength> | Array<Property$Margin<TLength>>,
+  "margin-block"?: Property$MarginBlock<TLength> | Array<Property$MarginBlock<TLength>>,
+  "margin-inline"?: Property$MarginInline<TLength> | Array<Property$MarginInline<TLength>>,
+  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
+  "mask-border"?: Property$MaskBorder | Array<Property$MaskBorder>,
+  motion?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
+  offset?: Property$Offset<TLength> | Array<Property$Offset<TLength>>,
+  outline?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
+  overflow?: Property$Overflow | Array<Property$Overflow>,
+  "overscroll-behavior"?: Property$OverscrollBehavior | Array<Property$OverscrollBehavior>,
+  padding?: Property$Padding<TLength> | Array<Property$Padding<TLength>>,
+  "padding-block"?: Property$PaddingBlock<TLength> | Array<Property$PaddingBlock<TLength>>,
+  "padding-inline"?: Property$PaddingInline<TLength> | Array<Property$PaddingInline<TLength>>,
+  "place-content"?: Property$PlaceContent | Array<Property$PlaceContent>,
+  "place-items"?: Property$PlaceItems | Array<Property$PlaceItems>,
+  "place-self"?: Property$PlaceSelf | Array<Property$PlaceSelf>,
+  "scroll-margin"?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
+  "scroll-margin-block"?: Property$ScrollMarginBlock<TLength> | Array<Property$ScrollMarginBlock<TLength>>,
+  "scroll-margin-inline"?: Property$ScrollMarginInline<TLength> | Array<Property$ScrollMarginInline<TLength>>,
+  "scroll-padding"?: Property$ScrollPadding<TLength> | Array<Property$ScrollPadding<TLength>>,
+  "scroll-padding-block"?: Property$ScrollPaddingBlock<TLength> | Array<Property$ScrollPaddingBlock<TLength>>,
+  "scroll-padding-inline"?: Property$ScrollPaddingInline<TLength> | Array<Property$ScrollPaddingInline<TLength>>,
+  "scroll-snap-margin"?: Property$ScrollMargin<TLength> | Array<Property$ScrollMargin<TLength>>,
+  "scroll-timeline"?: Property$ScrollTimeline | Array<Property$ScrollTimeline>,
+  "text-decoration"?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
+  "text-emphasis"?: Property$TextEmphasis | Array<Property$TextEmphasis>,
+  transition?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  "view-timeline"?: Property$ViewTimeline | Array<Property$ViewTimeline>,
+|};
+
+export type StandardPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  ...StandardLonghandPropertiesHyphenFallback<TLength, TTime>,
+  ...StandardShorthandPropertiesHyphenFallback<TLength, TTime>,
+|};
+
+export type VendorLonghandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "-moz-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  "-moz-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  "-moz-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  "-moz-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  "-moz-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  "-moz-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
+  "-moz-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  "-moz-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  "-moz-appearance"?: Property$MozAppearance | Array<Property$MozAppearance>,
+  "-moz-binding"?: Property$MozBinding | Array<Property$MozBinding>,
+  "-moz-border-bottom-colors"?: Property$MozBorderBottomColors | Array<Property$MozBorderBottomColors>,
+  "-moz-border-end-color"?: Property$BorderInlineEndColor | Array<Property$BorderInlineEndColor>,
+  "-moz-border-end-style"?: Property$BorderInlineEndStyle | Array<Property$BorderInlineEndStyle>,
+  "-moz-border-end-width"?: Property$BorderInlineEndWidth<TLength> | Array<Property$BorderInlineEndWidth<TLength>>,
+  "-moz-border-left-colors"?: Property$MozBorderLeftColors | Array<Property$MozBorderLeftColors>,
+  "-moz-border-right-colors"?: Property$MozBorderRightColors | Array<Property$MozBorderRightColors>,
+  "-moz-border-start-color"?: Property$BorderInlineStartColor | Array<Property$BorderInlineStartColor>,
+  "-moz-border-start-style"?: Property$BorderInlineStartStyle | Array<Property$BorderInlineStartStyle>,
+  "-moz-border-top-colors"?: Property$MozBorderTopColors | Array<Property$MozBorderTopColors>,
+  "-moz-box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
+  "-moz-column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
+  "-moz-column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
+  "-moz-column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  "-moz-column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  "-moz-column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  "-moz-column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  "-moz-context-properties"?: Property$MozContextProperties | Array<Property$MozContextProperties>,
+  "-moz-font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  "-moz-font-language-override"?: Property$FontLanguageOverride | Array<Property$FontLanguageOverride>,
+  "-moz-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
+  "-moz-image-region"?: Property$MozImageRegion | Array<Property$MozImageRegion>,
+  "-moz-margin-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  "-moz-margin-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  "-moz-orient"?: Property$MozOrient | Array<Property$MozOrient>,
+  "-moz-osx-font-smoothing"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  "-moz-outline-radius-bottomleft"?: Property$MozOutlineRadiusBottomleft<TLength> | Array<Property$MozOutlineRadiusBottomleft<TLength>>,
+  "-moz-outline-radius-bottomright"?: Property$MozOutlineRadiusBottomright<TLength> | Array<Property$MozOutlineRadiusBottomright<TLength>>,
+  "-moz-outline-radius-topleft"?: Property$MozOutlineRadiusTopleft<TLength> | Array<Property$MozOutlineRadiusTopleft<TLength>>,
+  "-moz-outline-radius-topright"?: Property$MozOutlineRadiusTopright<TLength> | Array<Property$MozOutlineRadiusTopright<TLength>>,
+  "-moz-padding-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  "-moz-padding-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  "-moz-stack-sizing"?: Property$MozStackSizing | Array<Property$MozStackSizing>,
+  "-moz-tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  "-moz-text-blink"?: Property$MozTextBlink | Array<Property$MozTextBlink>,
+  "-moz-text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  "-moz-user-focus"?: Property$MozUserFocus | Array<Property$MozUserFocus>,
+  "-moz-user-modify"?: Property$MozUserModify | Array<Property$MozUserModify>,
+  "-moz-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
+  "-moz-window-dragging"?: Property$MozWindowDragging | Array<Property$MozWindowDragging>,
+  "-moz-window-shadow"?: Property$MozWindowShadow | Array<Property$MozWindowShadow>,
+  "-ms-accelerator"?: Property$MsAccelerator | Array<Property$MsAccelerator>,
+  "-ms-block-progression"?: Property$MsBlockProgression | Array<Property$MsBlockProgression>,
+  "-ms-content-zoom-chaining"?: Property$MsContentZoomChaining | Array<Property$MsContentZoomChaining>,
+  "-ms-content-zoom-limit-max"?: Property$MsContentZoomLimitMax | Array<Property$MsContentZoomLimitMax>,
+  "-ms-content-zoom-limit-min"?: Property$MsContentZoomLimitMin | Array<Property$MsContentZoomLimitMin>,
+  "-ms-content-zoom-snap-points"?: Property$MsContentZoomSnapPoints | Array<Property$MsContentZoomSnapPoints>,
+  "-ms-content-zoom-snap-type"?: Property$MsContentZoomSnapType | Array<Property$MsContentZoomSnapType>,
+  "-ms-content-zooming"?: Property$MsContentZooming | Array<Property$MsContentZooming>,
+  "-ms-filter"?: Property$MsFilter | Array<Property$MsFilter>,
+  "-ms-flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
+  "-ms-flex-positive"?: Property$FlexGrow | Array<Property$FlexGrow>,
+  "-ms-flow-from"?: Property$MsFlowFrom | Array<Property$MsFlowFrom>,
+  "-ms-flow-into"?: Property$MsFlowInto | Array<Property$MsFlowInto>,
+  "-ms-grid-columns"?: Property$MsGridColumns<TLength> | Array<Property$MsGridColumns<TLength>>,
+  "-ms-grid-rows"?: Property$MsGridRows<TLength> | Array<Property$MsGridRows<TLength>>,
+  "-ms-high-contrast-adjust"?: Property$MsHighContrastAdjust | Array<Property$MsHighContrastAdjust>,
+  "-ms-hyphenate-limit-chars"?: Property$MsHyphenateLimitChars | Array<Property$MsHyphenateLimitChars>,
+  "-ms-hyphenate-limit-lines"?: Property$MsHyphenateLimitLines | Array<Property$MsHyphenateLimitLines>,
+  "-ms-hyphenate-limit-zone"?: Property$MsHyphenateLimitZone<TLength> | Array<Property$MsHyphenateLimitZone<TLength>>,
+  "-ms-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
+  "-ms-ime-align"?: Property$MsImeAlign | Array<Property$MsImeAlign>,
+  "-ms-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
+  "-ms-order"?: Property$Order | Array<Property$Order>,
+  "-ms-overflow-style"?: Property$MsOverflowStyle | Array<Property$MsOverflowStyle>,
+  "-ms-overflow-x"?: Property$OverflowX | Array<Property$OverflowX>,
+  "-ms-overflow-y"?: Property$OverflowY | Array<Property$OverflowY>,
+  "-ms-scroll-chaining"?: Property$MsScrollChaining | Array<Property$MsScrollChaining>,
+  "-ms-scroll-limit-x-max"?: Property$MsScrollLimitXMax<TLength> | Array<Property$MsScrollLimitXMax<TLength>>,
+  "-ms-scroll-limit-x-min"?: Property$MsScrollLimitXMin<TLength> | Array<Property$MsScrollLimitXMin<TLength>>,
+  "-ms-scroll-limit-y-max"?: Property$MsScrollLimitYMax<TLength> | Array<Property$MsScrollLimitYMax<TLength>>,
+  "-ms-scroll-limit-y-min"?: Property$MsScrollLimitYMin<TLength> | Array<Property$MsScrollLimitYMin<TLength>>,
+  "-ms-scroll-rails"?: Property$MsScrollRails | Array<Property$MsScrollRails>,
+  "-ms-scroll-snap-points-x"?: Property$MsScrollSnapPointsX | Array<Property$MsScrollSnapPointsX>,
+  "-ms-scroll-snap-points-y"?: Property$MsScrollSnapPointsY | Array<Property$MsScrollSnapPointsY>,
+  "-ms-scroll-snap-type"?: Property$MsScrollSnapType | Array<Property$MsScrollSnapType>,
+  "-ms-scroll-translation"?: Property$MsScrollTranslation | Array<Property$MsScrollTranslation>,
+  "-ms-scrollbar-3dlight-color"?: Property$MsScrollbar3dlightColor | Array<Property$MsScrollbar3dlightColor>,
+  "-ms-scrollbar-arrow-color"?: Property$MsScrollbarArrowColor | Array<Property$MsScrollbarArrowColor>,
+  "-ms-scrollbar-base-color"?: Property$MsScrollbarBaseColor | Array<Property$MsScrollbarBaseColor>,
+  "-ms-scrollbar-darkshadow-color"?: Property$MsScrollbarDarkshadowColor | Array<Property$MsScrollbarDarkshadowColor>,
+  "-ms-scrollbar-face-color"?: Property$MsScrollbarFaceColor | Array<Property$MsScrollbarFaceColor>,
+  "-ms-scrollbar-highlight-color"?: Property$MsScrollbarHighlightColor | Array<Property$MsScrollbarHighlightColor>,
+  "-ms-scrollbar-shadow-color"?: Property$MsScrollbarShadowColor | Array<Property$MsScrollbarShadowColor>,
+  "-ms-scrollbar-track-color"?: Property$MsScrollbarTrackColor | Array<Property$MsScrollbarTrackColor>,
+  "-ms-text-autospace"?: Property$MsTextAutospace | Array<Property$MsTextAutospace>,
+  "-ms-text-combine-horizontal"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  "-ms-text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
+  "-ms-touch-action"?: Property$TouchAction | Array<Property$TouchAction>,
+  "-ms-touch-select"?: Property$MsTouchSelect | Array<Property$MsTouchSelect>,
+  "-ms-transform"?: Property$Transform | Array<Property$Transform>,
+  "-ms-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  "-ms-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  "-ms-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  "-ms-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  "-ms-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  "-ms-user-select"?: Property$MsUserSelect | Array<Property$MsUserSelect>,
+  "-ms-word-break"?: Property$WordBreak | Array<Property$WordBreak>,
+  "-ms-wrap-flow"?: Property$MsWrapFlow | Array<Property$MsWrapFlow>,
+  "-ms-wrap-margin"?: Property$MsWrapMargin<TLength> | Array<Property$MsWrapMargin<TLength>>,
+  "-ms-wrap-through"?: Property$MsWrapThrough | Array<Property$MsWrapThrough>,
+  "-ms-writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
+  "-webkit-align-content"?: Property$AlignContent | Array<Property$AlignContent>,
+  "-webkit-align-items"?: Property$AlignItems | Array<Property$AlignItems>,
+  "-webkit-align-self"?: Property$AlignSelf | Array<Property$AlignSelf>,
+  "-webkit-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  "-webkit-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  "-webkit-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  "-webkit-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  "-webkit-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  "-webkit-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
+  "-webkit-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  "-webkit-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  "-webkit-appearance"?: Property$WebkitAppearance | Array<Property$WebkitAppearance>,
+  "-webkit-backdrop-filter"?: Property$BackdropFilter | Array<Property$BackdropFilter>,
+  "-webkit-backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  "-webkit-background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  "-webkit-background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  "-webkit-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  "-webkit-border-before-color"?: Property$WebkitBorderBeforeColor | Array<Property$WebkitBorderBeforeColor>,
+  "-webkit-border-before-style"?: Property$WebkitBorderBeforeStyle | Array<Property$WebkitBorderBeforeStyle>,
+  "-webkit-border-before-width"?: Property$WebkitBorderBeforeWidth<TLength> | Array<Property$WebkitBorderBeforeWidth<TLength>>,
+  "-webkit-border-bottom-left-radius"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  "-webkit-border-bottom-right-radius"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  "-webkit-border-image-slice"?: Property$BorderImageSlice | Array<Property$BorderImageSlice>,
+  "-webkit-border-top-left-radius"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  "-webkit-border-top-right-radius"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  "-webkit-box-decoration-break"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  "-webkit-box-reflect"?: Property$WebkitBoxReflect<TLength> | Array<Property$WebkitBoxReflect<TLength>>,
+  "-webkit-box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
+  "-webkit-box-sizing"?: Property$BoxSizing | Array<Property$BoxSizing>,
+  "-webkit-clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
+  "-webkit-column-count"?: Property$ColumnCount | Array<Property$ColumnCount>,
+  "-webkit-column-fill"?: Property$ColumnFill | Array<Property$ColumnFill>,
+  "-webkit-column-rule-color"?: Property$ColumnRuleColor | Array<Property$ColumnRuleColor>,
+  "-webkit-column-rule-style"?: Property$ColumnRuleStyle | Array<Property$ColumnRuleStyle>,
+  "-webkit-column-rule-width"?: Property$ColumnRuleWidth<TLength> | Array<Property$ColumnRuleWidth<TLength>>,
+  "-webkit-column-span"?: Property$ColumnSpan | Array<Property$ColumnSpan>,
+  "-webkit-column-width"?: Property$ColumnWidth<TLength> | Array<Property$ColumnWidth<TLength>>,
+  "-webkit-filter"?: Property$Filter | Array<Property$Filter>,
+  "-webkit-flex-basis"?: Property$FlexBasis<TLength> | Array<Property$FlexBasis<TLength>>,
+  "-webkit-flex-direction"?: Property$FlexDirection | Array<Property$FlexDirection>,
+  "-webkit-flex-grow"?: Property$FlexGrow | Array<Property$FlexGrow>,
+  "-webkit-flex-shrink"?: Property$FlexShrink | Array<Property$FlexShrink>,
+  "-webkit-flex-wrap"?: Property$FlexWrap | Array<Property$FlexWrap>,
+  "-webkit-font-feature-settings"?: Property$FontFeatureSettings | Array<Property$FontFeatureSettings>,
+  "-webkit-font-kerning"?: Property$FontKerning | Array<Property$FontKerning>,
+  "-webkit-font-smoothing"?: Property$FontSmooth<TLength> | Array<Property$FontSmooth<TLength>>,
+  "-webkit-font-variant-ligatures"?: Property$FontVariantLigatures | Array<Property$FontVariantLigatures>,
+  "-webkit-hyphenate-character"?: Property$HyphenateCharacter | Array<Property$HyphenateCharacter>,
+  "-webkit-hyphens"?: Property$Hyphens | Array<Property$Hyphens>,
+  "-webkit-initial-letter"?: Property$InitialLetter | Array<Property$InitialLetter>,
+  "-webkit-justify-content"?: Property$JustifyContent | Array<Property$JustifyContent>,
+  "-webkit-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
+  "-webkit-line-clamp"?: Property$WebkitLineClamp | Array<Property$WebkitLineClamp>,
+  "-webkit-margin-end"?: Property$MarginInlineEnd<TLength> | Array<Property$MarginInlineEnd<TLength>>,
+  "-webkit-margin-start"?: Property$MarginInlineStart<TLength> | Array<Property$MarginInlineStart<TLength>>,
+  "-webkit-mask-attachment"?: Property$WebkitMaskAttachment | Array<Property$WebkitMaskAttachment>,
+  "-webkit-mask-box-image-outset"?: Property$MaskBorderOutset<TLength> | Array<Property$MaskBorderOutset<TLength>>,
+  "-webkit-mask-box-image-repeat"?: Property$MaskBorderRepeat | Array<Property$MaskBorderRepeat>,
+  "-webkit-mask-box-image-slice"?: Property$MaskBorderSlice | Array<Property$MaskBorderSlice>,
+  "-webkit-mask-box-image-source"?: Property$MaskBorderSource | Array<Property$MaskBorderSource>,
+  "-webkit-mask-box-image-width"?: Property$MaskBorderWidth<TLength> | Array<Property$MaskBorderWidth<TLength>>,
+  "-webkit-mask-clip"?: Property$WebkitMaskClip | Array<Property$WebkitMaskClip>,
+  "-webkit-mask-composite"?: Property$WebkitMaskComposite | Array<Property$WebkitMaskComposite>,
+  "-webkit-mask-image"?: Property$WebkitMaskImage | Array<Property$WebkitMaskImage>,
+  "-webkit-mask-origin"?: Property$WebkitMaskOrigin | Array<Property$WebkitMaskOrigin>,
+  "-webkit-mask-position"?: Property$WebkitMaskPosition<TLength> | Array<Property$WebkitMaskPosition<TLength>>,
+  "-webkit-mask-position-x"?: Property$WebkitMaskPositionX<TLength> | Array<Property$WebkitMaskPositionX<TLength>>,
+  "-webkit-mask-position-y"?: Property$WebkitMaskPositionY<TLength> | Array<Property$WebkitMaskPositionY<TLength>>,
+  "-webkit-mask-repeat"?: Property$WebkitMaskRepeat | Array<Property$WebkitMaskRepeat>,
+  "-webkit-mask-repeat-x"?: Property$WebkitMaskRepeatX | Array<Property$WebkitMaskRepeatX>,
+  "-webkit-mask-repeat-y"?: Property$WebkitMaskRepeatY | Array<Property$WebkitMaskRepeatY>,
+  "-webkit-mask-size"?: Property$WebkitMaskSize<TLength> | Array<Property$WebkitMaskSize<TLength>>,
+  "-webkit-max-inline-size"?: Property$MaxInlineSize<TLength> | Array<Property$MaxInlineSize<TLength>>,
+  "-webkit-order"?: Property$Order | Array<Property$Order>,
+  "-webkit-overflow-scrolling"?: Property$WebkitOverflowScrolling | Array<Property$WebkitOverflowScrolling>,
+  "-webkit-padding-end"?: Property$PaddingInlineEnd<TLength> | Array<Property$PaddingInlineEnd<TLength>>,
+  "-webkit-padding-start"?: Property$PaddingInlineStart<TLength> | Array<Property$PaddingInlineStart<TLength>>,
+  "-webkit-perspective"?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  "-webkit-perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  "-webkit-print-color-adjust"?: Property$PrintColorAdjust | Array<Property$PrintColorAdjust>,
+  "-webkit-ruby-position"?: Property$RubyPosition | Array<Property$RubyPosition>,
+  "-webkit-scroll-snap-type"?: Property$ScrollSnapType | Array<Property$ScrollSnapType>,
+  "-webkit-shape-margin"?: Property$ShapeMargin<TLength> | Array<Property$ShapeMargin<TLength>>,
+  "-webkit-tap-highlight-color"?: Property$WebkitTapHighlightColor | Array<Property$WebkitTapHighlightColor>,
+  "-webkit-text-combine"?: Property$TextCombineUpright | Array<Property$TextCombineUpright>,
+  "-webkit-text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  "-webkit-text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  "-webkit-text-decoration-skip"?: Property$TextDecorationSkip | Array<Property$TextDecorationSkip>,
+  "-webkit-text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  "-webkit-text-emphasis-color"?: Property$TextEmphasisColor | Array<Property$TextEmphasisColor>,
+  "-webkit-text-emphasis-position"?: Property$TextEmphasisPosition | Array<Property$TextEmphasisPosition>,
+  "-webkit-text-emphasis-style"?: Property$TextEmphasisStyle | Array<Property$TextEmphasisStyle>,
+  "-webkit-text-fill-color"?: Property$WebkitTextFillColor | Array<Property$WebkitTextFillColor>,
+  "-webkit-text-orientation"?: Property$TextOrientation | Array<Property$TextOrientation>,
+  "-webkit-text-size-adjust"?: Property$TextSizeAdjust | Array<Property$TextSizeAdjust>,
+  "-webkit-text-stroke-color"?: Property$WebkitTextStrokeColor | Array<Property$WebkitTextStrokeColor>,
+  "-webkit-text-stroke-width"?: Property$WebkitTextStrokeWidth<TLength> | Array<Property$WebkitTextStrokeWidth<TLength>>,
+  "-webkit-text-underline-position"?: Property$TextUnderlinePosition | Array<Property$TextUnderlinePosition>,
+  "-webkit-touch-callout"?: Property$WebkitTouchCallout | Array<Property$WebkitTouchCallout>,
+  "-webkit-transform"?: Property$Transform | Array<Property$Transform>,
+  "-webkit-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  "-webkit-transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
+  "-webkit-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  "-webkit-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  "-webkit-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  "-webkit-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  "-webkit-user-modify"?: Property$WebkitUserModify | Array<Property$WebkitUserModify>,
+  "-webkit-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
+  "-webkit-writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
+|};
+
+export type VendorShorthandPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "-moz-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  "-moz-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
+  "-moz-column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  "-moz-columns"?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  "-moz-outline-radius"?: Property$MozOutlineRadius<TLength> | Array<Property$MozOutlineRadius<TLength>>,
+  "-ms-content-zoom-limit"?: Property$MsContentZoomLimit | Array<Property$MsContentZoomLimit>,
+  "-ms-content-zoom-snap"?: Property$MsContentZoomSnap | Array<Property$MsContentZoomSnap>,
+  "-ms-flex"?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  "-ms-scroll-limit"?: Property$MsScrollLimit | Array<Property$MsScrollLimit>,
+  "-ms-scroll-snap-x"?: Property$MsScrollSnapX | Array<Property$MsScrollSnapX>,
+  "-ms-scroll-snap-y"?: Property$MsScrollSnapY | Array<Property$MsScrollSnapY>,
+  "-ms-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  "-webkit-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  "-webkit-border-before"?: Property$WebkitBorderBefore<TLength> | Array<Property$WebkitBorderBefore<TLength>>,
+  "-webkit-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
+  "-webkit-border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  "-webkit-column-rule"?: Property$ColumnRule<TLength> | Array<Property$ColumnRule<TLength>>,
+  "-webkit-columns"?: Property$Columns<TLength> | Array<Property$Columns<TLength>>,
+  "-webkit-flex"?: Property$Flex<TLength> | Array<Property$Flex<TLength>>,
+  "-webkit-flex-flow"?: Property$FlexFlow | Array<Property$FlexFlow>,
+  "-webkit-mask"?: Property$WebkitMask<TLength> | Array<Property$WebkitMask<TLength>>,
+  "-webkit-mask-box-image"?: Property$MaskBorder | Array<Property$MaskBorder>,
+  "-webkit-text-emphasis"?: Property$TextEmphasis | Array<Property$TextEmphasis>,
+  "-webkit-text-stroke"?: Property$WebkitTextStroke<TLength> | Array<Property$WebkitTextStroke<TLength>>,
+  "-webkit-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+|};
+
+export type VendorPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  ...VendorLonghandPropertiesHyphenFallback<TLength, TTime>,
+  ...VendorShorthandPropertiesHyphenFallback<TLength, TTime>,
+|};
+
+export type ObsoletePropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  azimuth?: Property$Azimuth | Array<Property$Azimuth>,
+  "box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
+  "box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
+  "box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
+  "box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  "box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
+  "box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  "box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
+  "box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
+  clip?: Property$Clip | Array<Property$Clip>,
+  "grid-column-gap"?: Property$GridColumnGap<TLength> | Array<Property$GridColumnGap<TLength>>,
+  "grid-gap"?: Property$GridGap<TLength> | Array<Property$GridGap<TLength>>,
+  "grid-row-gap"?: Property$GridRowGap<TLength> | Array<Property$GridRowGap<TLength>>,
+  "ime-mode"?: Property$ImeMode | Array<Property$ImeMode>,
+  "offset-block"?: Property$InsetBlock<TLength> | Array<Property$InsetBlock<TLength>>,
+  "offset-block-end"?: Property$InsetBlockEnd<TLength> | Array<Property$InsetBlockEnd<TLength>>,
+  "offset-block-start"?: Property$InsetBlockStart<TLength> | Array<Property$InsetBlockStart<TLength>>,
+  "offset-inline"?: Property$InsetInline<TLength> | Array<Property$InsetInline<TLength>>,
+  "offset-inline-end"?: Property$InsetInlineEnd<TLength> | Array<Property$InsetInlineEnd<TLength>>,
+  "offset-inline-start"?: Property$InsetInlineStart<TLength> | Array<Property$InsetInlineStart<TLength>>,
+  "scroll-snap-coordinate"?: Property$ScrollSnapCoordinate<TLength> | Array<Property$ScrollSnapCoordinate<TLength>>,
+  "scroll-snap-destination"?: Property$ScrollSnapDestination<TLength> | Array<Property$ScrollSnapDestination<TLength>>,
+  "scroll-snap-points-x"?: Property$ScrollSnapPointsX | Array<Property$ScrollSnapPointsX>,
+  "scroll-snap-points-y"?: Property$ScrollSnapPointsY | Array<Property$ScrollSnapPointsY>,
+  "scroll-snap-type-x"?: Property$ScrollSnapTypeX | Array<Property$ScrollSnapTypeX>,
+  "scroll-snap-type-y"?: Property$ScrollSnapTypeY | Array<Property$ScrollSnapTypeY>,
+  "-khtml-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
+  "-khtml-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
+  "-khtml-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
+  "-khtml-box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  "-khtml-box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
+  "-khtml-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  "-khtml-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
+  "-khtml-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
+  "-khtml-line-break"?: Property$LineBreak | Array<Property$LineBreak>,
+  "-khtml-opacity"?: Property$Opacity | Array<Property$Opacity>,
+  "-khtml-user-select"?: Property$UserSelect | Array<Property$UserSelect>,
+  "-moz-backface-visibility"?: Property$BackfaceVisibility | Array<Property$BackfaceVisibility>,
+  "-moz-background-clip"?: Property$BackgroundClip | Array<Property$BackgroundClip>,
+  "-moz-background-inline-policy"?: Property$BoxDecorationBreak | Array<Property$BoxDecorationBreak>,
+  "-moz-background-origin"?: Property$BackgroundOrigin | Array<Property$BackgroundOrigin>,
+  "-moz-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  "-moz-border-radius"?: Property$BorderRadius<TLength> | Array<Property$BorderRadius<TLength>>,
+  "-moz-border-radius-bottomleft"?: Property$BorderBottomLeftRadius<TLength> | Array<Property$BorderBottomLeftRadius<TLength>>,
+  "-moz-border-radius-bottomright"?: Property$BorderBottomRightRadius<TLength> | Array<Property$BorderBottomRightRadius<TLength>>,
+  "-moz-border-radius-topleft"?: Property$BorderTopLeftRadius<TLength> | Array<Property$BorderTopLeftRadius<TLength>>,
+  "-moz-border-radius-topright"?: Property$BorderTopRightRadius<TLength> | Array<Property$BorderTopRightRadius<TLength>>,
+  "-moz-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
+  "-moz-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
+  "-moz-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
+  "-moz-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  "-moz-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
+  "-moz-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
+  "-moz-box-shadow"?: Property$BoxShadow | Array<Property$BoxShadow>,
+  "-moz-float-edge"?: Property$MozFloatEdge | Array<Property$MozFloatEdge>,
+  "-moz-force-broken-image-icon"?: Property$MozForceBrokenImageIcon | Array<Property$MozForceBrokenImageIcon>,
+  "-moz-opacity"?: Property$Opacity | Array<Property$Opacity>,
+  "-moz-outline"?: Property$Outline<TLength> | Array<Property$Outline<TLength>>,
+  "-moz-outline-color"?: Property$OutlineColor | Array<Property$OutlineColor>,
+  "-moz-outline-style"?: Property$OutlineStyle | Array<Property$OutlineStyle>,
+  "-moz-outline-width"?: Property$OutlineWidth<TLength> | Array<Property$OutlineWidth<TLength>>,
+  "-moz-perspective"?: Property$Perspective<TLength> | Array<Property$Perspective<TLength>>,
+  "-moz-perspective-origin"?: Property$PerspectiveOrigin<TLength> | Array<Property$PerspectiveOrigin<TLength>>,
+  "-moz-text-align-last"?: Property$TextAlignLast | Array<Property$TextAlignLast>,
+  "-moz-text-decoration-color"?: Property$TextDecorationColor | Array<Property$TextDecorationColor>,
+  "-moz-text-decoration-line"?: Property$TextDecorationLine | Array<Property$TextDecorationLine>,
+  "-moz-text-decoration-style"?: Property$TextDecorationStyle | Array<Property$TextDecorationStyle>,
+  "-moz-transform"?: Property$Transform | Array<Property$Transform>,
+  "-moz-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  "-moz-transform-style"?: Property$TransformStyle | Array<Property$TransformStyle>,
+  "-moz-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  "-moz-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  "-moz-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  "-moz-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  "-moz-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  "-moz-user-input"?: Property$MozUserInput | Array<Property$MozUserInput>,
+  "-ms-ime-mode"?: Property$ImeMode | Array<Property$ImeMode>,
+  "-o-animation"?: Property$Animation<TTime> | Array<Property$Animation<TTime>>,
+  "-o-animation-delay"?: Property$AnimationDelay<TTime> | Array<Property$AnimationDelay<TTime>>,
+  "-o-animation-direction"?: Property$AnimationDirection | Array<Property$AnimationDirection>,
+  "-o-animation-duration"?: Property$AnimationDuration<TTime> | Array<Property$AnimationDuration<TTime>>,
+  "-o-animation-fill-mode"?: Property$AnimationFillMode | Array<Property$AnimationFillMode>,
+  "-o-animation-iteration-count"?: Property$AnimationIterationCount | Array<Property$AnimationIterationCount>,
+  "-o-animation-name"?: Property$AnimationName | Array<Property$AnimationName>,
+  "-o-animation-play-state"?: Property$AnimationPlayState | Array<Property$AnimationPlayState>,
+  "-o-animation-timing-function"?: Property$AnimationTimingFunction | Array<Property$AnimationTimingFunction>,
+  "-o-background-size"?: Property$BackgroundSize<TLength> | Array<Property$BackgroundSize<TLength>>,
+  "-o-border-image"?: Property$BorderImage | Array<Property$BorderImage>,
+  "-o-object-fit"?: Property$ObjectFit | Array<Property$ObjectFit>,
+  "-o-object-position"?: Property$ObjectPosition<TLength> | Array<Property$ObjectPosition<TLength>>,
+  "-o-tab-size"?: Property$TabSize<TLength> | Array<Property$TabSize<TLength>>,
+  "-o-text-overflow"?: Property$TextOverflow | Array<Property$TextOverflow>,
+  "-o-transform"?: Property$Transform | Array<Property$Transform>,
+  "-o-transform-origin"?: Property$TransformOrigin<TLength> | Array<Property$TransformOrigin<TLength>>,
+  "-o-transition"?: Property$Transition<TTime> | Array<Property$Transition<TTime>>,
+  "-o-transition-delay"?: Property$TransitionDelay<TTime> | Array<Property$TransitionDelay<TTime>>,
+  "-o-transition-duration"?: Property$TransitionDuration<TTime> | Array<Property$TransitionDuration<TTime>>,
+  "-o-transition-property"?: Property$TransitionProperty | Array<Property$TransitionProperty>,
+  "-o-transition-timing-function"?: Property$TransitionTimingFunction | Array<Property$TransitionTimingFunction>,
+  "-webkit-box-align"?: Property$BoxAlign | Array<Property$BoxAlign>,
+  "-webkit-box-direction"?: Property$BoxDirection | Array<Property$BoxDirection>,
+  "-webkit-box-flex"?: Property$BoxFlex | Array<Property$BoxFlex>,
+  "-webkit-box-flex-group"?: Property$BoxFlexGroup | Array<Property$BoxFlexGroup>,
+  "-webkit-box-lines"?: Property$BoxLines | Array<Property$BoxLines>,
+  "-webkit-box-ordinal-group"?: Property$BoxOrdinalGroup | Array<Property$BoxOrdinalGroup>,
+  "-webkit-box-orient"?: Property$BoxOrient | Array<Property$BoxOrient>,
+  "-webkit-box-pack"?: Property$BoxPack | Array<Property$BoxPack>,
+|};
+
+export type SvgPropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "alignment-baseline"?: Property$AlignmentBaseline | Array<Property$AlignmentBaseline>,
+  "baseline-shift"?: Property$BaselineShift<TLength> | Array<Property$BaselineShift<TLength>>,
+  clip?: Property$Clip | Array<Property$Clip>,
+  "clip-path"?: Property$ClipPath | Array<Property$ClipPath>,
+  "clip-rule"?: Property$ClipRule | Array<Property$ClipRule>,
+  color?: Property$Color | Array<Property$Color>,
+  "color-interpolation"?: Property$ColorInterpolation | Array<Property$ColorInterpolation>,
+  "color-rendering"?: Property$ColorRendering | Array<Property$ColorRendering>,
+  cursor?: Property$Cursor | Array<Property$Cursor>,
+  direction?: Property$Direction | Array<Property$Direction>,
+  display?: Property$Display | Array<Property$Display>,
+  "dominant-baseline"?: Property$DominantBaseline | Array<Property$DominantBaseline>,
+  fill?: Property$Fill | Array<Property$Fill>,
+  "fill-opacity"?: Property$FillOpacity | Array<Property$FillOpacity>,
+  "fill-rule"?: Property$FillRule | Array<Property$FillRule>,
+  filter?: Property$Filter | Array<Property$Filter>,
+  "flood-color"?: Property$FloodColor | Array<Property$FloodColor>,
+  "flood-opacity"?: Property$FloodOpacity | Array<Property$FloodOpacity>,
+  font?: Property$Font | Array<Property$Font>,
+  "font-family"?: Property$FontFamily | Array<Property$FontFamily>,
+  "font-size"?: Property$FontSize<TLength> | Array<Property$FontSize<TLength>>,
+  "font-size-adjust"?: Property$FontSizeAdjust | Array<Property$FontSizeAdjust>,
+  "font-stretch"?: Property$FontStretch | Array<Property$FontStretch>,
+  "font-style"?: Property$FontStyle | Array<Property$FontStyle>,
+  "font-variant"?: Property$FontVariant | Array<Property$FontVariant>,
+  "font-weight"?: Property$FontWeight | Array<Property$FontWeight>,
+  "glyph-orientation-vertical"?: Property$GlyphOrientationVertical | Array<Property$GlyphOrientationVertical>,
+  "image-rendering"?: Property$ImageRendering | Array<Property$ImageRendering>,
+  "letter-spacing"?: Property$LetterSpacing<TLength> | Array<Property$LetterSpacing<TLength>>,
+  "lighting-color"?: Property$LightingColor | Array<Property$LightingColor>,
+  "line-height"?: Property$LineHeight<TLength> | Array<Property$LineHeight<TLength>>,
+  marker?: Property$Marker | Array<Property$Marker>,
+  "marker-end"?: Property$MarkerEnd | Array<Property$MarkerEnd>,
+  "marker-mid"?: Property$MarkerMid | Array<Property$MarkerMid>,
+  "marker-start"?: Property$MarkerStart | Array<Property$MarkerStart>,
+  mask?: Property$Mask<TLength> | Array<Property$Mask<TLength>>,
+  opacity?: Property$Opacity | Array<Property$Opacity>,
+  overflow?: Property$Overflow | Array<Property$Overflow>,
+  "paint-order"?: Property$PaintOrder | Array<Property$PaintOrder>,
+  "pointer-events"?: Property$PointerEvents | Array<Property$PointerEvents>,
+  "shape-rendering"?: Property$ShapeRendering | Array<Property$ShapeRendering>,
+  "stop-color"?: Property$StopColor | Array<Property$StopColor>,
+  "stop-opacity"?: Property$StopOpacity | Array<Property$StopOpacity>,
+  stroke?: Property$Stroke | Array<Property$Stroke>,
+  "stroke-dasharray"?: Property$StrokeDasharray<TLength> | Array<Property$StrokeDasharray<TLength>>,
+  "stroke-dashoffset"?: Property$StrokeDashoffset<TLength> | Array<Property$StrokeDashoffset<TLength>>,
+  "stroke-linecap"?: Property$StrokeLinecap | Array<Property$StrokeLinecap>,
+  "stroke-linejoin"?: Property$StrokeLinejoin | Array<Property$StrokeLinejoin>,
+  "stroke-miterlimit"?: Property$StrokeMiterlimit | Array<Property$StrokeMiterlimit>,
+  "stroke-opacity"?: Property$StrokeOpacity | Array<Property$StrokeOpacity>,
+  "stroke-width"?: Property$StrokeWidth<TLength> | Array<Property$StrokeWidth<TLength>>,
+  "text-anchor"?: Property$TextAnchor | Array<Property$TextAnchor>,
+  "text-decoration"?: Property$TextDecoration<TLength> | Array<Property$TextDecoration<TLength>>,
+  "text-rendering"?: Property$TextRendering | Array<Property$TextRendering>,
+  "unicode-bidi"?: Property$UnicodeBidi | Array<Property$UnicodeBidi>,
+  "vector-effect"?: Property$VectorEffect | Array<Property$VectorEffect>,
+  visibility?: Property$Visibility | Array<Property$Visibility>,
+  "white-space"?: Property$WhiteSpace | Array<Property$WhiteSpace>,
+  "word-spacing"?: Property$WordSpacing<TLength> | Array<Property$WordSpacing<TLength>>,
+  "writing-mode"?: Property$WritingMode | Array<Property$WritingMode>,
+|};
+
+export type PropertiesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  ...StandardPropertiesHyphenFallback<TLength, TTime>,
+  ...VendorPropertiesHyphenFallback<TLength, TTime>,
+  ...ObsoletePropertiesHyphenFallback<TLength, TTime>,
+  ...SvgPropertiesHyphenFallback<TLength, TTime>,
+|};
+
+export type AtRules =
+  | "@charset"
+  | "@counter-style"
+  | "@document"
+  | "@font-face"
+  | "@font-feature-values"
+  | "@font-palette-values"
+  | "@import"
+  | "@keyframes"
+  | "@layer"
+  | "@media"
+  | "@namespace"
+  | "@page"
+  | "@property"
+  | "@scope"
+  | "@scroll-timeline"
+  | "@starting-style"
+  | "@supports"
+  | "@viewport";
+
+export type AdvancedPseudos =
+  | ":-moz-any()"
+  | ":-moz-dir"
+  | ":-webkit-any()"
+  | "::cue"
+  | "::cue-region"
+  | "::part"
+  | "::slotted"
+  | "::view-transition-group"
+  | "::view-transition-image-pair"
+  | "::view-transition-new"
+  | "::view-transition-old"
+  | ":dir"
+  | ":has"
+  | ":host"
+  | ":host-context"
+  | ":is"
+  | ":lang"
+  | ":matches()"
+  | ":not"
+  | ":nth-child"
+  | ":nth-last-child"
+  | ":nth-last-of-type"
+  | ":nth-of-type"
+  | ":where";
+
+export type SimplePseudos =
+  | ":-khtml-any-link"
+  | ":-moz-any-link"
+  | ":-moz-focusring"
+  | ":-moz-full-screen"
+  | ":-moz-placeholder"
+  | ":-moz-read-only"
+  | ":-moz-read-write"
+  | ":-moz-ui-invalid"
+  | ":-moz-ui-valid"
+  | ":-ms-fullscreen"
+  | ":-ms-input-placeholder"
+  | ":-webkit-any-link"
+  | ":-webkit-full-screen"
+  | "::-moz-placeholder"
+  | "::-moz-progress-bar"
+  | "::-moz-range-progress"
+  | "::-moz-range-thumb"
+  | "::-moz-range-track"
+  | "::-moz-selection"
+  | "::-ms-backdrop"
+  | "::-ms-browse"
+  | "::-ms-check"
+  | "::-ms-clear"
+  | "::-ms-expand"
+  | "::-ms-fill"
+  | "::-ms-fill-lower"
+  | "::-ms-fill-upper"
+  | "::-ms-input-placeholder"
+  | "::-ms-reveal"
+  | "::-ms-thumb"
+  | "::-ms-ticks-after"
+  | "::-ms-ticks-before"
+  | "::-ms-tooltip"
+  | "::-ms-track"
+  | "::-ms-value"
+  | "::-webkit-backdrop"
+  | "::-webkit-input-placeholder"
+  | "::-webkit-progress-bar"
+  | "::-webkit-progress-inner-value"
+  | "::-webkit-progress-value"
+  | "::-webkit-slider-runnable-track"
+  | "::-webkit-slider-thumb"
+  | "::after"
+  | "::backdrop"
+  | "::before"
+  | "::cue"
+  | "::cue-region"
+  | "::first-letter"
+  | "::first-line"
+  | "::grammar-error"
+  | "::marker"
+  | "::placeholder"
+  | "::selection"
+  | "::spelling-error"
+  | "::target-text"
+  | "::view-transition"
+  | ":active"
+  | ":after"
+  | ":any-link"
+  | ":before"
+  | ":blank"
+  | ":checked"
+  | ":current"
+  | ":default"
+  | ":defined"
+  | ":disabled"
+  | ":empty"
+  | ":enabled"
+  | ":first"
+  | ":first-child"
+  | ":first-letter"
+  | ":first-line"
+  | ":first-of-type"
+  | ":focus"
+  | ":focus-visible"
+  | ":focus-within"
+  | ":fullscreen"
+  | ":future"
+  | ":hover"
+  | ":in-range"
+  | ":indeterminate"
+  | ":invalid"
+  | ":last-child"
+  | ":last-of-type"
+  | ":left"
+  | ":link"
+  | ":local-link"
+  | ":nth-col"
+  | ":nth-last-col"
+  | ":only-child"
+  | ":only-of-type"
+  | ":optional"
+  | ":out-of-range"
+  | ":past"
+  | ":paused"
+  | ":picture-in-picture"
+  | ":placeholder-shown"
+  | ":playing"
+  | ":read-only"
+  | ":read-write"
+  | ":required"
+  | ":right"
+  | ":root"
+  | ":scope"
+  | ":target"
+  | ":target-within"
+  | ":user-invalid"
+  | ":user-valid"
+  | ":valid"
+  | ":visited";
+
+export type Pseudos = AdvancedPseudos | SimplePseudos;
+
+export type HtmlAttributes =
+  | "[abbr]"
+  | "[accept-charset]"
+  | "[accept]"
+  | "[accesskey]"
+  | "[action]"
+  | "[align]"
+  | "[alink]"
+  | "[allow]"
+  | "[allowfullscreen]"
+  | "[allowpaymentrequest]"
+  | "[alt]"
+  | "[archive]"
+  | "[async]"
+  | "[attributionsrc]"
+  | "[autobuffer]"
+  | "[autocapitalize]"
+  | "[autocomplete]"
+  | "[autofocus]"
+  | "[autoplay]"
+  | "[axis]"
+  | "[background]"
+  | "[behavior]"
+  | "[bgcolor]"
+  | "[blocking]"
+  | "[border]"
+  | "[bottommargin]"
+  | "[browsingtopics]"
+  | "[capture]"
+  | "[cellpadding]"
+  | "[cellspacing]"
+  | "[char]"
+  | "[charoff]"
+  | "[charset]"
+  | "[checked]"
+  | "[cite]"
+  | "[class]"
+  | "[classid]"
+  | "[clear]"
+  | "[codebase]"
+  | "[codetype]"
+  | "[color]"
+  | "[cols]"
+  | "[colspan]"
+  | "[compact]"
+  | "[content]"
+  | "[contenteditable]"
+  | "[contextmenu]"
+  | "[controls]"
+  | "[coords]"
+  | "[credentialless]"
+  | "[crossorigin]"
+  | "[data]"
+  | "[datetime]"
+  | "[declare]"
+  | "[decoding]"
+  | "[default]"
+  | "[defer]"
+  | "[dir]"
+  | "[direction]"
+  | "[dirname]"
+  | "[disabled]"
+  | "[download]"
+  | "[draggable]"
+  | "[enctype]"
+  | "[enterkeyhint]"
+  | "[exportparts]"
+  | "[face]"
+  | "[fetchpriority]"
+  | "[for]"
+  | "[form]"
+  | "[formaction]"
+  | "[formenctype]"
+  | "[formmethod]"
+  | "[formnovalidate]"
+  | "[formtarget]"
+  | "[frame]"
+  | "[frameborder]"
+  | "[headers]"
+  | "[height]"
+  | "[hidden]"
+  | "[high]"
+  | "[href]"
+  | "[hreflang]"
+  | "[hspace]"
+  | "[http-equiv]"
+  | "[id]"
+  | "[imagesizes]"
+  | "[imagesrcset]"
+  | "[inert]"
+  | "[inputmode]"
+  | "[integrity]"
+  | "[is]"
+  | "[ismap]"
+  | "[itemid]"
+  | "[itemprop]"
+  | "[itemref]"
+  | "[itemscope]"
+  | "[itemtype]"
+  | "[kind]"
+  | "[label]"
+  | "[lang]"
+  | "[language]"
+  | "[leftmargin]"
+  | "[link]"
+  | "[list]"
+  | "[loading]"
+  | "[longdesc]"
+  | "[loop]"
+  | "[low]"
+  | "[manifest]"
+  | "[marginheight]"
+  | "[marginwidth]"
+  | "[max]"
+  | "[maxlength]"
+  | "[media]"
+  | "[method]"
+  | "[methods]"
+  | "[min]"
+  | "[minlength]"
+  | "[moz-opaque]"
+  | "[mozactionhint]"
+  | "[mozallowfullscreen]"
+  | "[msallowfullscreen]"
+  | "[multiple]"
+  | "[muted]"
+  | "[name]"
+  | "[nohref]"
+  | "[nomodule]"
+  | "[nonce]"
+  | "[noresize]"
+  | "[noshade]"
+  | "[novalidate]"
+  | "[nowrap]"
+  | "[onerror]"
+  | "[open]"
+  | "[optimum]"
+  | "[part]"
+  | "[pattern]"
+  | "[ping]"
+  | "[placeholder]"
+  | "[popover]"
+  | "[popovertarget]"
+  | "[popovertargetaction]"
+  | "[poster]"
+  | "[preload]"
+  | "[profile]"
+  | "[readonly]"
+  | "[referrerpolicy]"
+  | "[rel]"
+  | "[required]"
+  | "[rev]"
+  | "[reversed]"
+  | "[rightmargin]"
+  | "[rows]"
+  | "[rowspan]"
+  | "[rules]"
+  | "[sandbox]"
+  | "[scope]"
+  | "[scrollamount]"
+  | "[scrolldelay]"
+  | "[scrolling]"
+  | "[selected]"
+  | "[shadowroot]"
+  | "[shadowrootmode]"
+  | "[shape]"
+  | "[size]"
+  | "[sizes]"
+  | "[slot]"
+  | "[span]"
+  | "[spellcheck]"
+  | "[src]"
+  | "[srcdoc]"
+  | "[srclang]"
+  | "[srcset]"
+  | "[standby]"
+  | "[start]"
+  | "[step]"
+  | "[style]"
+  | "[summary]"
+  | "[tabindex]"
+  | "[target]"
+  | "[text]"
+  | "[title]"
+  | "[topmargin]"
+  | "[translate]"
+  | "[truespeed]"
+  | "[type]"
+  | "[usemap]"
+  | "[valign]"
+  | "[value]"
+  | "[valuetype]"
+  | "[version]"
+  | "[virtualkeyboardpolicy]"
+  | "[vlink]"
+  | "[vspace]"
+  | "[webkitallowfullscreen]"
+  | "[width]"
+  | "[wrap]"
+  | "[x-moz-errormessage]"
+  | "[xmlns]";
+
+export type SvgAttributes =
+  | "[accent-height]"
+  | "[alignment-baseline]"
+  | "[allowReorder]"
+  | "[alphabetic]"
+  | "[animation]"
+  | "[arabic-form]"
+  | "[ascent]"
+  | "[async]"
+  | "[attributeName]"
+  | "[attributeType]"
+  | "[azimuth]"
+  | "[baseFrequency]"
+  | "[baseProfile]"
+  | "[baseline-shift]"
+  | "[bbox]"
+  | "[bias]"
+  | "[by]"
+  | "[calcMode]"
+  | "[cap-height]"
+  | "[class]"
+  | "[clip-path]"
+  | "[clip-rule]"
+  | "[clipPathUnits]"
+  | "[clip]"
+  | "[color-interpolation-filters]"
+  | "[color-interpolation]"
+  | "[color-profile]"
+  | "[color]"
+  | "[contentScriptType]"
+  | "[contentStyleType]"
+  | "[crossorigin]"
+  | "[cursor]"
+  | "[cx]"
+  | "[cy]"
+  | "[d]"
+  | "[decoding]"
+  | "[defer]"
+  | "[descent]"
+  | "[diffuseConstant]"
+  | "[direction]"
+  | "[display]"
+  | "[divisor]"
+  | "[document]"
+  | "[dominant-baseline]"
+  | "[download]"
+  | "[dur]"
+  | "[dx]"
+  | "[dy]"
+  | "[edgeMode]"
+  | "[elevation]"
+  | "[enable-background]"
+  | "[fill-opacity]"
+  | "[fill-rule]"
+  | "[fill]"
+  | "[filterRes]"
+  | "[filterUnits]"
+  | "[filter]"
+  | "[flood-color]"
+  | "[flood-opacity]"
+  | "[font-family]"
+  | "[font-size-adjust]"
+  | "[font-size]"
+  | "[font-stretch]"
+  | "[font-style]"
+  | "[font-variant]"
+  | "[font-weight]"
+  | "[format]"
+  | "[fr]"
+  | "[from]"
+  | "[fx]"
+  | "[fy]"
+  | "[g1]"
+  | "[g2]"
+  | "[global]"
+  | "[glyph-name]"
+  | "[glyph-orientation-horizontal]"
+  | "[glyph-orientation-vertical]"
+  | "[glyphRef]"
+  | "[gradientTransform]"
+  | "[gradientUnits]"
+  | "[graphical]"
+  | "[hanging]"
+  | "[height]"
+  | "[horiz-adv-x]"
+  | "[horiz-origin-x]"
+  | "[horiz-origin-y]"
+  | "[href]"
+  | "[hreflang]"
+  | "[id]"
+  | "[ideographic]"
+  | "[image-rendering]"
+  | "[in2]"
+  | "[in]"
+  | "[k1]"
+  | "[k2]"
+  | "[k3]"
+  | "[k4]"
+  | "[k]"
+  | "[kernelMatrix]"
+  | "[kernelUnitLength]"
+  | "[kerning]"
+  | "[keyPoints]"
+  | "[lang]"
+  | "[lengthAdjust]"
+  | "[letter-spacing]"
+  | "[lighting-color]"
+  | "[limitingConeAngle]"
+  | "[marker-end]"
+  | "[marker-mid]"
+  | "[marker-start]"
+  | "[markerHeight]"
+  | "[markerUnits]"
+  | "[markerWidth]"
+  | "[maskContentUnits]"
+  | "[maskUnits]"
+  | "[mask]"
+  | "[mathematical]"
+  | "[media]"
+  | "[mode]"
+  | "[name]"
+  | "[numOctaves]"
+  | "[offset]"
+  | "[opacity]"
+  | "[operator]"
+  | "[order]"
+  | "[orient]"
+  | "[orientation]"
+  | "[origin]"
+  | "[overflow]"
+  | "[overline-position]"
+  | "[overline-thickness]"
+  | "[paint-order]"
+  | "[panose-1]"
+  | "[path]"
+  | "[patternContentUnits]"
+  | "[patternTransform]"
+  | "[patternUnits]"
+  | "[ping]"
+  | "[pointer-events]"
+  | "[pointsAtX]"
+  | "[pointsAtY]"
+  | "[pointsAtZ]"
+  | "[points]"
+  | "[preserveAlpha]"
+  | "[preserveAspectRatio]"
+  | "[primitiveUnits]"
+  | "[r]"
+  | "[radius]"
+  | "[refX]"
+  | "[refY]"
+  | "[referrerpolicy]"
+  | "[rel]"
+  | "[repeatCount]"
+  | "[requiredExtensions]"
+  | "[requiredFeatures]"
+  | "[rotate]"
+  | "[rx]"
+  | "[ry]"
+  | "[scale]"
+  | "[seed]"
+  | "[shape-rendering]"
+  | "[side]"
+  | "[slope]"
+  | "[solid-color]"
+  | "[solid-opacity]"
+  | "[spacing]"
+  | "[specularConstant]"
+  | "[specularExponent]"
+  | "[spreadMethod]"
+  | "[startOffset]"
+  | "[stdDeviation]"
+  | "[stemh]"
+  | "[stemv]"
+  | "[stitchTiles]"
+  | "[stop-color]"
+  | "[stop-opacity]"
+  | "[strikethrough-position]"
+  | "[strikethrough-thickness]"
+  | "[string]"
+  | "[stroke-dasharray]"
+  | "[stroke-dashoffset]"
+  | "[stroke-linecap]"
+  | "[stroke-linejoin]"
+  | "[stroke-miterlimit]"
+  | "[stroke-opacity]"
+  | "[stroke-width]"
+  | "[stroke]"
+  | "[style]"
+  | "[surfaceScale]"
+  | "[systemLanguage]"
+  | "[tabindex]"
+  | "[targetX]"
+  | "[targetY]"
+  | "[target]"
+  | "[text-anchor]"
+  | "[text-decoration]"
+  | "[text-overflow]"
+  | "[text-rendering]"
+  | "[textLength]"
+  | "[title]"
+  | "[to]"
+  | "[transform-origin]"
+  | "[transform]"
+  | "[type]"
+  | "[u1]"
+  | "[u2]"
+  | "[underline-position]"
+  | "[underline-thickness]"
+  | "[unicode-bidi]"
+  | "[unicode-range]"
+  | "[unicode]"
+  | "[units-per-em]"
+  | "[v-alphabetic]"
+  | "[v-hanging]"
+  | "[v-ideographic]"
+  | "[v-mathematical]"
+  | "[values]"
+  | "[vector-effect]"
+  | "[version]"
+  | "[vert-adv-y]"
+  | "[vert-origin-x]"
+  | "[vert-origin-y]"
+  | "[viewBox]"
+  | "[viewTarget]"
+  | "[visibility]"
+  | "[white-space]"
+  | "[width]"
+  | "[widths]"
+  | "[word-spacing]"
+  | "[writing-mode]"
+  | "[x-height]"
+  | "[x1]"
+  | "[x2]"
+  | "[xChannelSelector]"
+  | "[x]"
+  | "[y1]"
+  | "[y2]"
+  | "[yChannelSelector]"
+  | "[y]"
+  | "[z]"
+  | "[zoomAndPan]";
+
+export type Globals = "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset";
+
+export type Property$AccentColor = Globals | DataType$Color | "auto";
+
+export type Property$AlignContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;
+
+export type Property$AlignItems = Globals | DataType$SelfPosition | "baseline" | "normal" | "stretch" | string;
+
+export type Property$AlignSelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "normal" | "stretch" | string;
+
+export type Property$AlignTracks = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;
+
+export type Property$All = Globals;
+
+export type Property$Animation<TTime = string> = Globals | DataType$SingleAnimation<TTime> | string;
+
+export type Property$AnimationComposition = Globals | DataType$SingleAnimationComposition | string;
+
+export type Property$AnimationDelay<TTime = string> = Globals | TTime | string;
+
+export type Property$AnimationDirection = Globals | DataType$SingleAnimationDirection | string;
+
+export type Property$AnimationDuration<TTime = string> = Globals | TTime | string;
+
+export type Property$AnimationFillMode = Globals | DataType$SingleAnimationFillMode | string;
+
+export type Property$AnimationIterationCount = Globals | "infinite" | string | number;
+
+export type Property$AnimationName = Globals | "none" | string;
+
+export type Property$AnimationPlayState = Globals | "paused" | "running" | string;
+
+export type Property$AnimationRange<TLength = string | 0> = Globals | DataType$TimelineRangeName | TLength | "normal" | string;
+
+export type Property$AnimationRangeEnd<TLength = string | 0> = Globals | DataType$TimelineRangeName | TLength | "normal" | string;
+
+export type Property$AnimationRangeStart<TLength = string | 0> = Globals | DataType$TimelineRangeName | TLength | "normal" | string;
+
+export type Property$AnimationTimeline = Globals | DataType$SingleAnimationTimeline | string;
+
+export type Property$AnimationTimingFunction = Globals | DataType$EasingFunction | string;
+
+export type Property$Appearance = Globals | DataType$CompatAuto | "auto" | "menulist-button" | "none" | "textfield";
+
+export type Property$AspectRatio = Globals | "auto" | string | number;
+
+export type Property$Azimuth =
+  | Globals
+  | "behind"
+  | "center"
+  | "center-left"
+  | "center-right"
+  | "far-left"
+  | "far-right"
+  | "left"
+  | "left-side"
+  | "leftwards"
+  | "right"
+  | "right-side"
+  | "rightwards"
+  | string;
+
+export type Property$BackdropFilter = Globals | "none" | string;
+
+export type Property$BackfaceVisibility = Globals | "hidden" | "visible";
+
+export type Property$Background<TLength = string | 0> = Globals | DataType$FinalBgLayer<TLength> | string;
+
+export type Property$BackgroundAttachment = Globals | DataType$Attachment | string;
+
+export type Property$BackgroundBlendMode = Globals | DataType$BlendMode | string;
+
+export type Property$BackgroundClip = Globals | DataType$Box | string;
+
+export type Property$BackgroundColor = Globals | DataType$Color;
+
+export type Property$BackgroundImage = Globals | "none" | string;
+
+export type Property$BackgroundOrigin = Globals | DataType$Box | string;
+
+export type Property$BackgroundPosition<TLength = string | 0> = Globals | DataType$BgPosition<TLength> | string;
+
+export type Property$BackgroundPositionX<TLength = string | 0> = Globals | TLength | "center" | "left" | "right" | "x-end" | "x-start" | string;
+
+export type Property$BackgroundPositionY<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "top" | "y-end" | "y-start" | string;
+
+export type Property$BackgroundRepeat = Globals | DataType$RepeatStyle | string;
+
+export type Property$BackgroundSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;
+
+export type Property$BlockOverflow = Globals | "clip" | "ellipsis" | string;
+
+export type Property$BlockSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "auto"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$Border<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderBlock<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderBlockColor = Globals | DataType$Color | string;
+
+export type Property$BorderBlockEnd<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderBlockEndColor = Globals | DataType$Color;
+
+export type Property$BorderBlockEndStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderBlockEndWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderBlockStart<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderBlockStartColor = Globals | DataType$Color;
+
+export type Property$BorderBlockStartStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderBlockStartWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderBlockStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderBlockWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderBottom<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderBottomColor = Globals | DataType$Color;
+
+export type Property$BorderBottomLeftRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderBottomRightRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderBottomStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderBottomWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderCollapse = Globals | "collapse" | "separate";
+
+export type Property$BorderColor = Globals | DataType$Color | string;
+
+export type Property$BorderEndEndRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderEndStartRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderImage = Globals | "none" | "repeat" | "round" | "space" | "stretch" | string | number;
+
+export type Property$BorderImageOutset<TLength = string | 0> = Globals | TLength | string | number;
+
+export type Property$BorderImageRepeat = Globals | "repeat" | "round" | "space" | "stretch" | string;
+
+export type Property$BorderImageSlice = Globals | string | number;
+
+export type Property$BorderImageSource = Globals | "none" | string;
+
+export type Property$BorderImageWidth<TLength = string | 0> = Globals | TLength | "auto" | string | number;
+
+export type Property$BorderInline<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderInlineColor = Globals | DataType$Color | string;
+
+export type Property$BorderInlineEnd<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderInlineEndColor = Globals | DataType$Color;
+
+export type Property$BorderInlineEndStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderInlineEndWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderInlineStart<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderInlineStartColor = Globals | DataType$Color;
+
+export type Property$BorderInlineStartStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderInlineStartWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderInlineStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderInlineWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderLeft<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderLeftColor = Globals | DataType$Color;
+
+export type Property$BorderLeftStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderLeftWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderRight<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderRightColor = Globals | DataType$Color;
+
+export type Property$BorderRightStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderRightWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderSpacing<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderStartEndRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderStartStartRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderStyle = Globals | DataType$LineStyle | string;
+
+export type Property$BorderTop<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$BorderTopColor = Globals | DataType$Color;
+
+export type Property$BorderTopLeftRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderTopRightRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$BorderTopStyle = Globals | DataType$LineStyle;
+
+export type Property$BorderTopWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$BorderWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;
+
+export type Property$Bottom<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$BoxAlign = Globals | "baseline" | "center" | "end" | "start" | "stretch";
+
+export type Property$BoxDecorationBreak = Globals | "clone" | "slice";
+
+export type Property$BoxDirection = Globals | "inherit" | "normal" | "reverse";
+
+export type Property$BoxFlex = Globals | number;
+
+export type Property$BoxFlexGroup = Globals | number;
+
+export type Property$BoxLines = Globals | "multiple" | "single";
+
+export type Property$BoxOrdinalGroup = Globals | number;
+
+export type Property$BoxOrient = Globals | "block-axis" | "horizontal" | "inherit" | "inline-axis" | "vertical";
+
+export type Property$BoxPack = Globals | "center" | "end" | "justify" | "start";
+
+export type Property$BoxShadow = Globals | "none" | string;
+
+export type Property$BoxSizing = Globals | "border-box" | "content-box";
+
+export type Property$BreakAfter =
+  | Globals
+  | "all"
+  | "always"
+  | "auto"
+  | "avoid"
+  | "avoid-column"
+  | "avoid-page"
+  | "avoid-region"
+  | "column"
+  | "left"
+  | "page"
+  | "recto"
+  | "region"
+  | "right"
+  | "verso";
+
+export type Property$BreakBefore =
+  | Globals
+  | "all"
+  | "always"
+  | "auto"
+  | "avoid"
+  | "avoid-column"
+  | "avoid-page"
+  | "avoid-region"
+  | "column"
+  | "left"
+  | "page"
+  | "recto"
+  | "region"
+  | "right"
+  | "verso";
+
+export type Property$BreakInside = Globals | "auto" | "avoid" | "avoid-column" | "avoid-page" | "avoid-region";
+
+export type Property$CaptionSide = Globals | "block-end" | "block-start" | "bottom" | "inline-end" | "inline-start" | "top";
+
+export type Property$Caret = Globals | DataType$Color | "auto" | "bar" | "block" | "underscore" | string;
+
+export type Property$CaretColor = Globals | DataType$Color | "auto";
+
+export type Property$CaretShape = Globals | "auto" | "bar" | "block" | "underscore";
+
+export type Property$Clear = Globals | "both" | "inline-end" | "inline-start" | "left" | "none" | "right";
+
+export type Property$Clip = Globals | "auto" | string;
+
+export type Property$ClipPath = Globals | DataType$GeometryBox | "none" | string;
+
+export type Property$Color = Globals | DataType$Color;
+
+export type Property$PrintColorAdjust = Globals | "economy" | "exact";
+
+export type Property$ColorScheme = Globals | "dark" | "light" | "normal" | string;
+
+export type Property$ColumnCount = Globals | "auto" | number;
+
+export type Property$ColumnFill = Globals | "auto" | "balance" | "balance-all";
+
+export type Property$ColumnGap<TLength = string | 0> = Globals | TLength | "normal" | string;
+
+export type Property$ColumnRule<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$ColumnRuleColor = Globals | DataType$Color;
+
+export type Property$ColumnRuleStyle = Globals | DataType$LineStyle | string;
+
+export type Property$ColumnRuleWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;
+
+export type Property$ColumnSpan = Globals | "all" | "none";
+
+export type Property$ColumnWidth<TLength = string | 0> = Globals | TLength | "auto";
+
+export type Property$Columns<TLength = string | 0> = Globals | TLength | "auto" | string | number;
+
+export type Property$Contain = Globals | "content" | "inline-size" | "layout" | "none" | "paint" | "size" | "strict" | "style" | string;
+
+export type Property$ContainIntrinsicBlockSize<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$ContainIntrinsicHeight<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$ContainIntrinsicInlineSize<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$ContainIntrinsicSize<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$ContainIntrinsicWidth<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$Container = Globals | "none" | string;
+
+export type Property$ContainerName = Globals | "none" | string;
+
+export type Property$ContainerType = Globals | "inline-size" | "normal" | "size";
+
+export type Property$Content = Globals | DataType$ContentList | "none" | "normal" | string;
+
+export type Property$ContentVisibility = Globals | "auto" | "hidden" | "visible";
+
+export type Property$CounterIncrement = Globals | "none" | string;
+
+export type Property$CounterReset = Globals | "none" | string;
+
+export type Property$CounterSet = Globals | "none" | string;
+
+export type Property$Cursor =
+  | Globals
+  | "-moz-grab"
+  | "-webkit-grab"
+  | "alias"
+  | "all-scroll"
+  | "auto"
+  | "cell"
+  | "col-resize"
+  | "context-menu"
+  | "copy"
+  | "crosshair"
+  | "default"
+  | "e-resize"
+  | "ew-resize"
+  | "grab"
+  | "grabbing"
+  | "help"
+  | "move"
+  | "n-resize"
+  | "ne-resize"
+  | "nesw-resize"
+  | "no-drop"
+  | "none"
+  | "not-allowed"
+  | "ns-resize"
+  | "nw-resize"
+  | "nwse-resize"
+  | "pointer"
+  | "progress"
+  | "row-resize"
+  | "s-resize"
+  | "se-resize"
+  | "sw-resize"
+  | "text"
+  | "vertical-text"
+  | "w-resize"
+  | "wait"
+  | "zoom-in"
+  | "zoom-out"
+  | string;
+
+export type Property$Direction = Globals | "ltr" | "rtl";
+
+export type Property$Display =
+  | Globals
+  | DataType$DisplayOutside
+  | DataType$DisplayInside
+  | DataType$DisplayInternal
+  | DataType$DisplayLegacy
+  | "contents"
+  | "list-item"
+  | "none"
+  | string;
+
+export type Property$EmptyCells = Globals | "hide" | "show";
+
+export type Property$Filter = Globals | "none" | string;
+
+export type Property$Flex<TLength = string | 0> = Globals | TLength | "auto" | "content" | "fit-content" | "max-content" | "min-content" | "none" | string | number;
+
+export type Property$FlexBasis<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-auto"
+  | "auto"
+  | "content"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$FlexDirection = Globals | "column" | "column-reverse" | "row" | "row-reverse";
+
+export type Property$FlexFlow = Globals | "column" | "column-reverse" | "nowrap" | "row" | "row-reverse" | "wrap" | "wrap-reverse" | string;
+
+export type Property$FlexGrow = Globals | number;
+
+export type Property$FlexShrink = Globals | number;
+
+export type Property$FlexWrap = Globals | "nowrap" | "wrap" | "wrap-reverse";
+
+export type Property$Float = Globals | "inline-end" | "inline-start" | "left" | "none" | "right";
+
+export type Property$Font = Globals | "caption" | "icon" | "menu" | "message-box" | "small-caption" | "status-bar" | string;
+
+export type Property$FontFamily = Globals | DataType$GenericFamily | string;
+
+export type Property$FontFeatureSettings = Globals | "normal" | string;
+
+export type Property$FontKerning = Globals | "auto" | "none" | "normal";
+
+export type Property$FontLanguageOverride = Globals | "normal" | string;
+
+export type Property$FontOpticalSizing = Globals | "auto" | "none";
+
+export type Property$FontPalette = Globals | "dark" | "light" | "normal" | string;
+
+export type Property$FontSize<TLength = string | 0> = Globals | DataType$AbsoluteSize | TLength | "larger" | "smaller" | string;
+
+export type Property$FontSizeAdjust = Globals | "from-font" | "none" | string | number;
+
+export type Property$FontSmooth<TLength = string | 0> = Globals | DataType$AbsoluteSize | TLength | "always" | "auto" | "never";
+
+export type Property$FontStretch = Globals | DataType$FontStretchAbsolute;
+
+export type Property$FontStyle = Globals | "italic" | "normal" | "oblique" | string;
+
+export type Property$FontSynthesis = Globals | "none" | "position" | "small-caps" | "style" | "weight" | string;
+
+export type Property$FontSynthesisPosition = Globals | "auto" | "none";
+
+export type Property$FontSynthesisSmallCaps = Globals | "auto" | "none";
+
+export type Property$FontSynthesisStyle = Globals | "auto" | "none";
+
+export type Property$FontSynthesisWeight = Globals | "auto" | "none";
+
+export type Property$FontVariant =
+  | Globals
+  | DataType$EastAsianVariantValues
+  | "all-petite-caps"
+  | "all-small-caps"
+  | "common-ligatures"
+  | "contextual"
+  | "diagonal-fractions"
+  | "discretionary-ligatures"
+  | "full-width"
+  | "historical-forms"
+  | "historical-ligatures"
+  | "lining-nums"
+  | "no-common-ligatures"
+  | "no-contextual"
+  | "no-discretionary-ligatures"
+  | "no-historical-ligatures"
+  | "none"
+  | "normal"
+  | "oldstyle-nums"
+  | "ordinal"
+  | "petite-caps"
+  | "proportional-nums"
+  | "proportional-width"
+  | "ruby"
+  | "slashed-zero"
+  | "small-caps"
+  | "stacked-fractions"
+  | "tabular-nums"
+  | "titling-caps"
+  | "unicase"
+  | string;
+
+export type Property$FontVariantAlternates = Globals | "historical-forms" | "normal" | string;
+
+export type Property$FontVariantCaps = Globals | "all-petite-caps" | "all-small-caps" | "normal" | "petite-caps" | "small-caps" | "titling-caps" | "unicase";
+
+export type Property$FontVariantEastAsian = Globals | DataType$EastAsianVariantValues | "full-width" | "normal" | "proportional-width" | "ruby" | string;
+
+export type Property$FontVariantEmoji = Globals | "emoji" | "normal" | "text" | "unicode";
+
+export type Property$FontVariantLigatures =
+  | Globals
+  | "common-ligatures"
+  | "contextual"
+  | "discretionary-ligatures"
+  | "historical-ligatures"
+  | "no-common-ligatures"
+  | "no-contextual"
+  | "no-discretionary-ligatures"
+  | "no-historical-ligatures"
+  | "none"
+  | "normal"
+  | string;
+
+export type Property$FontVariantNumeric =
+  | Globals
+  | "diagonal-fractions"
+  | "lining-nums"
+  | "normal"
+  | "oldstyle-nums"
+  | "ordinal"
+  | "proportional-nums"
+  | "slashed-zero"
+  | "stacked-fractions"
+  | "tabular-nums"
+  | string;
+
+export type Property$FontVariantPosition = Globals | "normal" | "sub" | "super";
+
+export type Property$FontVariationSettings = Globals | "normal" | string;
+
+export type Property$FontWeight = Globals | DataType$FontWeightAbsolute | "bolder" | "lighter";
+
+export type Property$ForcedColorAdjust = Globals | "auto" | "none";
+
+export type Property$Gap<TLength = string | 0> = Globals | TLength | "normal" | string;
+
+export type Property$Grid = Globals | "none" | string;
+
+export type Property$GridArea = Globals | DataType$GridLine | string;
+
+export type Property$GridAutoColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | string;
+
+export type Property$GridAutoFlow = Globals | "column" | "dense" | "row" | string;
+
+export type Property$GridAutoRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | string;
+
+export type Property$GridColumn = Globals | DataType$GridLine | string;
+
+export type Property$GridColumnEnd = Globals | DataType$GridLine;
+
+export type Property$GridColumnGap<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$GridColumnStart = Globals | DataType$GridLine;
+
+export type Property$GridGap<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$GridRow = Globals | DataType$GridLine | string;
+
+export type Property$GridRowEnd = Globals | DataType$GridLine;
+
+export type Property$GridRowGap<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$GridRowStart = Globals | DataType$GridLine;
+
+export type Property$GridTemplate = Globals | "none" | string;
+
+export type Property$GridTemplateAreas = Globals | "none" | string;
+
+export type Property$GridTemplateColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | "subgrid" | string;
+
+export type Property$GridTemplateRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | "subgrid" | string;
+
+export type Property$HangingPunctuation = Globals | "allow-end" | "first" | "force-end" | "last" | "none" | string;
+
+export type Property$Height<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fit-content"
+  | "auto"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$HyphenateCharacter = Globals | "auto" | string;
+
+export type Property$HyphenateLimitChars = Globals | "auto" | string | number;
+
+export type Property$Hyphens = Globals | "auto" | "manual" | "none";
+
+export type Property$ImageOrientation = Globals | "flip" | "from-image" | string;
+
+export type Property$ImageRendering = Globals | "-moz-crisp-edges" | "-webkit-optimize-contrast" | "auto" | "crisp-edges" | "pixelated";
+
+export type Property$ImageResolution = Globals | "from-image" | string;
+
+export type Property$ImeMode = Globals | "active" | "auto" | "disabled" | "inactive" | "normal";
+
+export type Property$InitialLetter = Globals | "normal" | string | number;
+
+export type Property$InlineSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "auto"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$InputSecurity = Globals | "auto" | "none";
+
+export type Property$Inset<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetBlock<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetInline<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$InsetInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$Isolation = Globals | "auto" | "isolate";
+
+export type Property$JustifyContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "left" | "normal" | "right" | string;
+
+export type Property$JustifyItems = Globals | DataType$SelfPosition | "baseline" | "left" | "legacy" | "normal" | "right" | "stretch" | string;
+
+export type Property$JustifySelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "left" | "normal" | "right" | "stretch" | string;
+
+export type Property$JustifyTracks = Globals | DataType$ContentDistribution | DataType$ContentPosition | "left" | "normal" | "right" | string;
+
+export type Property$Left<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$LetterSpacing<TLength = string | 0> = Globals | TLength | "normal";
+
+export type Property$LineBreak = Globals | "anywhere" | "auto" | "loose" | "normal" | "strict";
+
+export type Property$LineClamp = Globals | "none" | number;
+
+export type Property$LineHeight<TLength = string | 0> = Globals | TLength | "normal" | string | number;
+
+export type Property$LineHeightStep<TLength = string | 0> = Globals | TLength;
+
+export type Property$ListStyle = Globals | "inside" | "none" | "outside" | string;
+
+export type Property$ListStyleImage = Globals | "none" | string;
+
+export type Property$ListStylePosition = Globals | "inside" | "outside";
+
+export type Property$ListStyleType = Globals | "none" | string;
+
+export type Property$Margin<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginBlock<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginBottom<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginInline<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginLeft<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginRight<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginTop<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$MarginTrim = Globals | "all" | "in-flow" | "none";
+
+export type Property$Mask<TLength = string | 0> = Globals | DataType$MaskLayer<TLength> | string;
+
+export type Property$MaskBorder = Globals | "alpha" | "luminance" | "none" | "repeat" | "round" | "space" | "stretch" | string | number;
+
+export type Property$MaskBorderMode = Globals | "alpha" | "luminance";
+
+export type Property$MaskBorderOutset<TLength = string | 0> = Globals | TLength | string | number;
+
+export type Property$MaskBorderRepeat = Globals | "repeat" | "round" | "space" | "stretch" | string;
+
+export type Property$MaskBorderSlice = Globals | string | number;
+
+export type Property$MaskBorderSource = Globals | "none" | string;
+
+export type Property$MaskBorderWidth<TLength = string | 0> = Globals | TLength | "auto" | string | number;
+
+export type Property$MaskClip = Globals | DataType$GeometryBox | "no-clip" | string;
+
+export type Property$MaskComposite = Globals | DataType$CompositingOperator | string;
+
+export type Property$MaskImage = Globals | "none" | string;
+
+export type Property$MaskMode = Globals | DataType$MaskingMode | string;
+
+export type Property$MaskOrigin = Globals | DataType$GeometryBox | string;
+
+export type Property$MaskPosition<TLength = string | 0> = Globals | DataType$Position<TLength> | string;
+
+export type Property$MaskRepeat = Globals | DataType$RepeatStyle | string;
+
+export type Property$MaskSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;
+
+export type Property$MaskType = Globals | "alpha" | "luminance";
+
+export type Property$MasonryAutoFlow = Globals | "definite-first" | "next" | "ordered" | "pack" | string;
+
+export type Property$MathDepth = Globals | "auto-add" | string | number;
+
+export type Property$MathShift = Globals | "compact" | "normal";
+
+export type Property$MathStyle = Globals | "compact" | "normal";
+
+export type Property$MaxBlockSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | "none"
+  | string;
+
+export type Property$MaxHeight<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fit-content"
+  | "-webkit-max-content"
+  | "-webkit-min-content"
+  | "fit-content"
+  | "intrinsic"
+  | "max-content"
+  | "min-content"
+  | "none"
+  | string;
+
+export type Property$MaxInlineSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | "none"
+  | string;
+
+export type Property$MaxLines = Globals | "none" | number;
+
+export type Property$MaxWidth<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fit-content"
+  | "-webkit-max-content"
+  | "-webkit-min-content"
+  | "fit-content"
+  | "intrinsic"
+  | "max-content"
+  | "min-content"
+  | "none"
+  | string;
+
+export type Property$MinBlockSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "auto"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$MinHeight<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fit-content"
+  | "-webkit-max-content"
+  | "-webkit-min-content"
+  | "auto"
+  | "fit-content"
+  | "intrinsic"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$MinInlineSize<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "auto"
+  | "fit-content"
+  | "max-content"
+  | "min-content"
+  | string;
+
+export type Property$MinWidth<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fill-available"
+  | "-webkit-fit-content"
+  | "-webkit-max-content"
+  | "-webkit-min-content"
+  | "auto"
+  | "fit-content"
+  | "intrinsic"
+  | "max-content"
+  | "min-content"
+  | "min-intrinsic"
+  | string;
+
+export type Property$MixBlendMode = Globals | DataType$BlendMode | "plus-lighter";
+
+export type Property$Offset<TLength = string | 0> = Globals | DataType$Position<TLength> | "auto" | "none" | "normal" | string;
+
+export type Property$OffsetDistance<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$OffsetPath = Globals | "none" | string;
+
+export type Property$OffsetRotate = Globals | "auto" | "reverse" | string;
+
+export type Property$ObjectFit = Globals | "contain" | "cover" | "fill" | "none" | "scale-down";
+
+export type Property$ObjectPosition<TLength = string | 0> = Globals | DataType$Position<TLength>;
+
+export type Property$OffsetAnchor<TLength = string | 0> = Globals | DataType$Position<TLength> | "auto";
+
+export type Property$OffsetPosition<TLength = string | 0> = Globals | DataType$Position<TLength> | "auto" | "normal";
+
+export type Property$Opacity = Globals | string | number;
+
+export type Property$Order = Globals | number;
+
+export type Property$Orphans = Globals | number;
+
+export type Property$Outline<TLength = string | 0> = Globals | DataType$Color | DataType$LineStyle | DataType$LineWidth<TLength> | "auto" | "invert" | string;
+
+export type Property$OutlineColor = Globals | DataType$Color | "invert";
+
+export type Property$OutlineOffset<TLength = string | 0> = Globals | TLength;
+
+export type Property$OutlineStyle = Globals | DataType$LineStyle | "auto" | string;
+
+export type Property$OutlineWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength>;
+
+export type Property$Overflow = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible" | string;
+
+export type Property$OverflowAnchor = Globals | "auto" | "none";
+
+export type Property$OverflowBlock = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+export type Property$OverflowClipBox = Globals | "content-box" | "padding-box";
+
+export type Property$OverflowClipMargin<TLength = string | 0> = Globals | DataType$VisualBox | TLength | string;
+
+export type Property$OverflowInline = Globals | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+export type Property$OverflowWrap = Globals | "anywhere" | "break-word" | "normal";
+
+export type Property$OverflowX = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+export type Property$OverflowY = Globals | "-moz-hidden-unscrollable" | "auto" | "clip" | "hidden" | "scroll" | "visible";
+
+export type Property$Overlay = Globals | "auto" | "none";
+
+export type Property$OverscrollBehavior = Globals | "auto" | "contain" | "none" | string;
+
+export type Property$OverscrollBehaviorBlock = Globals | "auto" | "contain" | "none";
+
+export type Property$OverscrollBehaviorInline = Globals | "auto" | "contain" | "none";
+
+export type Property$OverscrollBehaviorX = Globals | "auto" | "contain" | "none";
+
+export type Property$OverscrollBehaviorY = Globals | "auto" | "contain" | "none";
+
+export type Property$Padding<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingBlock<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingBlockEnd<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingBlockStart<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingBottom<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingInline<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingInlineEnd<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingInlineStart<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingLeft<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingRight<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$PaddingTop<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$Page = Globals | "auto" | string;
+
+export type Property$PageBreakAfter = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";
+
+export type Property$PageBreakBefore = Globals | "always" | "auto" | "avoid" | "left" | "recto" | "right" | "verso";
+
+export type Property$PageBreakInside = Globals | "auto" | "avoid";
+
+export type Property$PaintOrder = Globals | "fill" | "markers" | "normal" | "stroke" | string;
+
+export type Property$Perspective<TLength = string | 0> = Globals | TLength | "none";
+
+export type Property$PerspectiveOrigin<TLength = string | 0> = Globals | DataType$Position<TLength>;
+
+export type Property$PlaceContent = Globals | DataType$ContentDistribution | DataType$ContentPosition | "baseline" | "normal" | string;
+
+export type Property$PlaceItems = Globals | DataType$SelfPosition | "baseline" | "normal" | "stretch" | string;
+
+export type Property$PlaceSelf = Globals | DataType$SelfPosition | "auto" | "baseline" | "normal" | "stretch" | string;
+
+export type Property$PointerEvents = Globals | "all" | "auto" | "fill" | "inherit" | "none" | "painted" | "stroke" | "visible" | "visibleFill" | "visiblePainted" | "visibleStroke";
+
+export type Property$Position = Globals | "-webkit-sticky" | "absolute" | "fixed" | "relative" | "static" | "sticky";
+
+export type Property$Quotes = Globals | "auto" | "none" | string;
+
+export type Property$Resize = Globals | "block" | "both" | "horizontal" | "inline" | "none" | "vertical";
+
+export type Property$Right<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$Rotate = Globals | "none" | string;
+
+export type Property$RowGap<TLength = string | 0> = Globals | TLength | "normal" | string;
+
+export type Property$RubyAlign = Globals | "center" | "space-around" | "space-between" | "start";
+
+export type Property$RubyMerge = Globals | "auto" | "collapse" | "separate";
+
+export type Property$RubyPosition = Globals | "alternate" | "inter-character" | "over" | "under" | string;
+
+export type Property$Scale = Globals | "none" | string | number;
+
+export type Property$ScrollBehavior = Globals | "auto" | "smooth";
+
+export type Property$ScrollMargin<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$ScrollMarginBlock<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$ScrollMarginBlockEnd<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginBlockStart<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginBottom<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginInline<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$ScrollMarginInlineEnd<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginInlineStart<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginLeft<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginRight<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollMarginTop<TLength = string | 0> = Globals | TLength;
+
+export type Property$ScrollPadding<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingBlock<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingBlockEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingBlockStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingBottom<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingInline<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingInlineEnd<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingInlineStart<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingLeft<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingRight<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollPaddingTop<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ScrollSnapAlign = Globals | "center" | "end" | "none" | "start" | string;
+
+export type Property$ScrollSnapCoordinate<TLength = string | 0> = Globals | DataType$Position<TLength> | "none" | string;
+
+export type Property$ScrollSnapDestination<TLength = string | 0> = Globals | DataType$Position<TLength>;
+
+export type Property$ScrollSnapPointsX = Globals | "none" | string;
+
+export type Property$ScrollSnapPointsY = Globals | "none" | string;
+
+export type Property$ScrollSnapStop = Globals | "always" | "normal";
+
+export type Property$ScrollSnapType = Globals | "block" | "both" | "inline" | "none" | "x" | "y" | string;
+
+export type Property$ScrollSnapTypeX = Globals | "mandatory" | "none" | "proximity";
+
+export type Property$ScrollSnapTypeY = Globals | "mandatory" | "none" | "proximity";
+
+export type Property$ScrollTimeline = Globals | "none" | string;
+
+export type Property$ScrollTimelineAxis = Globals | "block" | "inline" | "x" | "y" | string;
+
+export type Property$ScrollTimelineName = Globals | "none" | string;
+
+export type Property$ScrollbarColor = Globals | "auto" | string;
+
+export type Property$ScrollbarGutter = Globals | "auto" | "stable" | string;
+
+export type Property$ScrollbarWidth = Globals | "auto" | "none" | "thin";
+
+export type Property$ShapeImageThreshold = Globals | string | number;
+
+export type Property$ShapeMargin<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$ShapeOutside = Globals | DataType$Box | "margin-box" | "none" | string;
+
+export type Property$TabSize<TLength = string | 0> = Globals | TLength | number;
+
+export type Property$TableLayout = Globals | "auto" | "fixed";
+
+export type Property$TextAlign = Globals | "-webkit-match-parent" | "center" | "end" | "justify" | "left" | "match-parent" | "right" | "start";
+
+export type Property$TextAlignLast = Globals | "auto" | "center" | "end" | "justify" | "left" | "right" | "start";
+
+export type Property$TextCombineUpright = Globals | "all" | "none" | string;
+
+export type Property$TextDecoration<TLength = string | 0> =
+  | Globals
+  | DataType$Color
+  | TLength
+  | "auto"
+  | "blink"
+  | "dashed"
+  | "dotted"
+  | "double"
+  | "from-font"
+  | "grammar-error"
+  | "line-through"
+  | "none"
+  | "overline"
+  | "solid"
+  | "spelling-error"
+  | "underline"
+  | "wavy"
+  | string;
+
+export type Property$TextDecorationColor = Globals | DataType$Color;
+
+export type Property$TextDecorationLine = Globals | "blink" | "grammar-error" | "line-through" | "none" | "overline" | "spelling-error" | "underline" | string;
+
+export type Property$TextDecorationSkip = Globals | "box-decoration" | "edges" | "leading-spaces" | "none" | "objects" | "spaces" | "trailing-spaces" | string;
+
+export type Property$TextDecorationSkipInk = Globals | "all" | "auto" | "none";
+
+export type Property$TextDecorationStyle = Globals | "dashed" | "dotted" | "double" | "solid" | "wavy";
+
+export type Property$TextDecorationThickness<TLength = string | 0> = Globals | TLength | "auto" | "from-font" | string;
+
+export type Property$TextEmphasis = Globals | DataType$Color | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | string;
+
+export type Property$TextEmphasisColor = Globals | DataType$Color;
+
+export type Property$TextEmphasisPosition = Globals | string;
+
+export type Property$TextEmphasisStyle = Globals | "circle" | "dot" | "double-circle" | "filled" | "none" | "open" | "sesame" | "triangle" | string;
+
+export type Property$TextIndent<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$TextJustify = Globals | "auto" | "inter-character" | "inter-word" | "none";
+
+export type Property$TextOrientation = Globals | "mixed" | "sideways" | "upright";
+
+export type Property$TextOverflow = Globals | "clip" | "ellipsis" | string;
+
+export type Property$TextRendering = Globals | "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed";
+
+export type Property$TextShadow = Globals | "none" | string;
+
+export type Property$TextSizeAdjust = Globals | "auto" | "none" | string;
+
+export type Property$TextTransform = Globals | "capitalize" | "full-size-kana" | "full-width" | "lowercase" | "none" | "uppercase";
+
+export type Property$TextUnderlineOffset<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$TextUnderlinePosition = Globals | "auto" | "from-font" | "left" | "right" | "under" | string;
+
+export type Property$TextWrap = Globals | "balance" | "nowrap" | "pretty" | "stable" | "wrap";
+
+export type Property$TimelineScope = Globals | "none" | string;
+
+export type Property$Top<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$TouchAction =
+  | Globals
+  | "-ms-manipulation"
+  | "-ms-none"
+  | "-ms-pinch-zoom"
+  | "auto"
+  | "manipulation"
+  | "none"
+  | "pan-down"
+  | "pan-left"
+  | "pan-right"
+  | "pan-up"
+  | "pan-x"
+  | "pan-y"
+  | "pinch-zoom"
+  | string;
+
+export type Property$Transform = Globals | "none" | string;
+
+export type Property$TransformBox = Globals | "border-box" | "content-box" | "fill-box" | "stroke-box" | "view-box";
+
+export type Property$TransformOrigin<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "left" | "right" | "top" | string;
+
+export type Property$TransformStyle = Globals | "flat" | "preserve-3d";
+
+export type Property$Transition<TTime = string> = Globals | DataType$SingleTransition<TTime> | string;
+
+export type Property$TransitionBehavior = Globals | "allow-discrete" | "normal" | string;
+
+export type Property$TransitionDelay<TTime = string> = Globals | TTime | string;
+
+export type Property$TransitionDuration<TTime = string> = Globals | TTime | string;
+
+export type Property$TransitionProperty = Globals | "all" | "none" | string;
+
+export type Property$TransitionTimingFunction = Globals | DataType$EasingFunction | string;
+
+export type Property$Translate<TLength = string | 0> = Globals | TLength | "none" | string;
+
+export type Property$UnicodeBidi =
+  | Globals
+  | "-moz-isolate"
+  | "-moz-isolate-override"
+  | "-moz-plaintext"
+  | "-webkit-isolate"
+  | "-webkit-isolate-override"
+  | "-webkit-plaintext"
+  | "bidi-override"
+  | "embed"
+  | "isolate"
+  | "isolate-override"
+  | "normal"
+  | "plaintext";
+
+export type Property$UserSelect = Globals | "-moz-none" | "all" | "auto" | "contain" | "element" | "none" | "text";
+
+export type Property$VerticalAlign<TLength = string | 0> = Globals | TLength | "baseline" | "bottom" | "middle" | "sub" | "super" | "text-bottom" | "text-top" | "top" | string;
+
+export type Property$ViewTimeline = Globals | "none" | string;
+
+export type Property$ViewTimelineAxis = Globals | "block" | "inline" | "x" | "y" | string;
+
+export type Property$ViewTimelineInset<TLength = string | 0> = Globals | TLength | "auto" | string;
+
+export type Property$ViewTimelineName = Globals | "none" | string;
+
+export type Property$ViewTransitionName = Globals | "none" | string;
+
+export type Property$Visibility = Globals | "collapse" | "hidden" | "visible";
+
+export type Property$WhiteSpace =
+  | Globals
+  | "-moz-pre-wrap"
+  | "balance"
+  | "break-spaces"
+  | "collapse"
+  | "discard"
+  | "discard-after"
+  | "discard-before"
+  | "discard-inner"
+  | "none"
+  | "normal"
+  | "nowrap"
+  | "pre"
+  | "pre-line"
+  | "pre-wrap"
+  | "preserve"
+  | "preserve-breaks"
+  | "preserve-spaces"
+  | "pretty"
+  | "stable"
+  | "wrap"
+  | string;
+
+export type Property$WhiteSpaceCollapse = Globals | "break-spaces" | "collapse" | "discard" | "preserve" | "preserve-breaks" | "preserve-spaces";
+
+export type Property$WhiteSpaceTrim = Globals | "discard-after" | "discard-before" | "discard-inner" | "none" | string;
+
+export type Property$Widows = Globals | number;
+
+export type Property$Width<TLength = string | 0> =
+  | Globals
+  | TLength
+  | "-moz-fit-content"
+  | "-moz-max-content"
+  | "-moz-min-content"
+  | "-webkit-fit-content"
+  | "-webkit-max-content"
+  | "auto"
+  | "fit-content"
+  | "intrinsic"
+  | "max-content"
+  | "min-content"
+  | "min-intrinsic"
+  | string;
+
+export type Property$WillChange = Globals | DataType$AnimateableFeature | "auto" | string;
+
+export type Property$WordBreak = Globals | "break-all" | "break-word" | "keep-all" | "normal";
+
+export type Property$WordSpacing<TLength = string | 0> = Globals | TLength | "normal";
+
+export type Property$WordWrap = Globals | "break-word" | "normal";
+
+export type Property$WritingMode = Globals | "horizontal-tb" | "sideways-lr" | "sideways-rl" | "vertical-lr" | "vertical-rl";
+
+export type Property$ZIndex = Globals | "auto" | number;
+
+export type Property$Zoom = Globals | "normal" | "reset" | string | number;
+
+export type Property$MozAppearance =
+  | Globals
+  | "-moz-mac-unified-toolbar"
+  | "-moz-win-borderless-glass"
+  | "-moz-win-browsertabbar-toolbox"
+  | "-moz-win-communications-toolbox"
+  | "-moz-win-communicationstext"
+  | "-moz-win-exclude-glass"
+  | "-moz-win-glass"
+  | "-moz-win-media-toolbox"
+  | "-moz-win-mediatext"
+  | "-moz-window-button-box"
+  | "-moz-window-button-box-maximized"
+  | "-moz-window-button-close"
+  | "-moz-window-button-maximize"
+  | "-moz-window-button-minimize"
+  | "-moz-window-button-restore"
+  | "-moz-window-frame-bottom"
+  | "-moz-window-frame-left"
+  | "-moz-window-frame-right"
+  | "-moz-window-titlebar"
+  | "-moz-window-titlebar-maximized"
+  | "button"
+  | "button-arrow-down"
+  | "button-arrow-next"
+  | "button-arrow-previous"
+  | "button-arrow-up"
+  | "button-bevel"
+  | "button-focus"
+  | "caret"
+  | "checkbox"
+  | "checkbox-container"
+  | "checkbox-label"
+  | "checkmenuitem"
+  | "dualbutton"
+  | "groupbox"
+  | "listbox"
+  | "listitem"
+  | "menuarrow"
+  | "menubar"
+  | "menucheckbox"
+  | "menuimage"
+  | "menuitem"
+  | "menuitemtext"
+  | "menulist"
+  | "menulist-button"
+  | "menulist-text"
+  | "menulist-textfield"
+  | "menupopup"
+  | "menuradio"
+  | "menuseparator"
+  | "meterbar"
+  | "meterchunk"
+  | "none"
+  | "progressbar"
+  | "progressbar-vertical"
+  | "progresschunk"
+  | "progresschunk-vertical"
+  | "radio"
+  | "radio-container"
+  | "radio-label"
+  | "radiomenuitem"
+  | "range"
+  | "range-thumb"
+  | "resizer"
+  | "resizerpanel"
+  | "scale-horizontal"
+  | "scale-vertical"
+  | "scalethumb-horizontal"
+  | "scalethumb-vertical"
+  | "scalethumbend"
+  | "scalethumbstart"
+  | "scalethumbtick"
+  | "scrollbarbutton-down"
+  | "scrollbarbutton-left"
+  | "scrollbarbutton-right"
+  | "scrollbarbutton-up"
+  | "scrollbarthumb-horizontal"
+  | "scrollbarthumb-vertical"
+  | "scrollbartrack-horizontal"
+  | "scrollbartrack-vertical"
+  | "searchfield"
+  | "separator"
+  | "sheet"
+  | "spinner"
+  | "spinner-downbutton"
+  | "spinner-textfield"
+  | "spinner-upbutton"
+  | "splitter"
+  | "statusbar"
+  | "statusbarpanel"
+  | "tab"
+  | "tab-scroll-arrow-back"
+  | "tab-scroll-arrow-forward"
+  | "tabpanel"
+  | "tabpanels"
+  | "textfield"
+  | "textfield-multiline"
+  | "toolbar"
+  | "toolbarbutton"
+  | "toolbarbutton-dropdown"
+  | "toolbargripper"
+  | "toolbox"
+  | "tooltip"
+  | "treeheader"
+  | "treeheadercell"
+  | "treeheadersortarrow"
+  | "treeitem"
+  | "treeline"
+  | "treetwisty"
+  | "treetwistyopen"
+  | "treeview";
+
+export type Property$MozBinding = Globals | "none" | string;
+
+export type Property$MozBorderBottomColors = Globals | DataType$Color | "none" | string;
+
+export type Property$MozBorderLeftColors = Globals | DataType$Color | "none" | string;
+
+export type Property$MozBorderRightColors = Globals | DataType$Color | "none" | string;
+
+export type Property$MozBorderTopColors = Globals | DataType$Color | "none" | string;
+
+export type Property$MozContextProperties = Globals | "fill" | "fill-opacity" | "none" | "stroke" | "stroke-opacity" | string;
+
+export type Property$MozFloatEdge = Globals | "border-box" | "content-box" | "margin-box" | "padding-box";
+
+export type Property$MozForceBrokenImageIcon = Globals | 0 | 1;
+
+export type Property$MozImageRegion = Globals | "auto" | string;
+
+export type Property$MozOrient = Globals | "block" | "horizontal" | "inline" | "vertical";
+
+export type Property$MozOutlineRadius<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MozOutlineRadiusBottomleft<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MozOutlineRadiusBottomright<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MozOutlineRadiusTopleft<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MozOutlineRadiusTopright<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MozStackSizing = Globals | "ignore" | "stretch-to-fit";
+
+export type Property$MozTextBlink = Globals | "blink" | "none";
+
+export type Property$MozUserFocus = Globals | "ignore" | "none" | "normal" | "select-after" | "select-all" | "select-before" | "select-menu" | "select-same";
+
+export type Property$MozUserInput = Globals | "auto" | "disabled" | "enabled" | "none";
+
+export type Property$MozUserModify = Globals | "read-only" | "read-write" | "write-only";
+
+export type Property$MozWindowDragging = Globals | "drag" | "no-drag";
+
+export type Property$MozWindowShadow = Globals | "default" | "menu" | "none" | "sheet" | "tooltip";
+
+export type Property$MsAccelerator = Globals | "false" | "true";
+
+export type Property$MsBlockProgression = Globals | "bt" | "lr" | "rl" | "tb";
+
+export type Property$MsContentZoomChaining = Globals | "chained" | "none";
+
+export type Property$MsContentZoomLimit = Globals | string;
+
+export type Property$MsContentZoomLimitMax = Globals | string;
+
+export type Property$MsContentZoomLimitMin = Globals | string;
+
+export type Property$MsContentZoomSnap = Globals | "mandatory" | "none" | "proximity" | string;
+
+export type Property$MsContentZoomSnapPoints = Globals | string;
+
+export type Property$MsContentZoomSnapType = Globals | "mandatory" | "none" | "proximity";
+
+export type Property$MsContentZooming = Globals | "none" | "zoom";
+
+export type Property$MsFilter = Globals | string;
+
+export type Property$MsFlowFrom = Globals | "none" | string;
+
+export type Property$MsFlowInto = Globals | "none" | string;
+
+export type Property$MsGridColumns<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | string;
+
+export type Property$MsGridRows<TLength = string | 0> = Globals | DataType$TrackBreadth<TLength> | "none" | string;
+
+export type Property$MsHighContrastAdjust = Globals | "auto" | "none";
+
+export type Property$MsHyphenateLimitChars = Globals | "auto" | string | number;
+
+export type Property$MsHyphenateLimitLines = Globals | "no-limit" | number;
+
+export type Property$MsHyphenateLimitZone<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$MsImeAlign = Globals | "after" | "auto";
+
+export type Property$MsOverflowStyle = Globals | "-ms-autohiding-scrollbar" | "auto" | "none" | "scrollbar";
+
+export type Property$MsScrollChaining = Globals | "chained" | "none";
+
+export type Property$MsScrollLimit = Globals | string;
+
+export type Property$MsScrollLimitXMax<TLength = string | 0> = Globals | TLength | "auto";
+
+export type Property$MsScrollLimitXMin<TLength = string | 0> = Globals | TLength;
+
+export type Property$MsScrollLimitYMax<TLength = string | 0> = Globals | TLength | "auto";
+
+export type Property$MsScrollLimitYMin<TLength = string | 0> = Globals | TLength;
+
+export type Property$MsScrollRails = Globals | "none" | "railed";
+
+export type Property$MsScrollSnapPointsX = Globals | string;
+
+export type Property$MsScrollSnapPointsY = Globals | string;
+
+export type Property$MsScrollSnapType = Globals | "mandatory" | "none" | "proximity";
+
+export type Property$MsScrollSnapX = Globals | string;
+
+export type Property$MsScrollSnapY = Globals | string;
+
+export type Property$MsScrollTranslation = Globals | "none" | "vertical-to-horizontal";
+
+export type Property$MsScrollbar3dlightColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarArrowColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarBaseColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarDarkshadowColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarFaceColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarHighlightColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarShadowColor = Globals | DataType$Color;
+
+export type Property$MsScrollbarTrackColor = Globals | DataType$Color;
+
+export type Property$MsTextAutospace = Globals | "ideograph-alpha" | "ideograph-numeric" | "ideograph-parenthesis" | "ideograph-space" | "none";
+
+export type Property$MsTouchSelect = Globals | "grippers" | "none";
+
+export type Property$MsUserSelect = Globals | "element" | "none" | "text";
+
+export type Property$MsWrapFlow = Globals | "auto" | "both" | "clear" | "end" | "maximum" | "start";
+
+export type Property$MsWrapMargin<TLength = string | 0> = Globals | TLength;
+
+export type Property$MsWrapThrough = Globals | "none" | "wrap";
+
+export type Property$WebkitAppearance =
+  | Globals
+  | "-apple-pay-button"
+  | "button"
+  | "button-bevel"
+  | "caret"
+  | "checkbox"
+  | "default-button"
+  | "inner-spin-button"
+  | "listbox"
+  | "listitem"
+  | "media-controls-background"
+  | "media-controls-fullscreen-background"
+  | "media-current-time-display"
+  | "media-enter-fullscreen-button"
+  | "media-exit-fullscreen-button"
+  | "media-fullscreen-button"
+  | "media-mute-button"
+  | "media-overlay-play-button"
+  | "media-play-button"
+  | "media-seek-back-button"
+  | "media-seek-forward-button"
+  | "media-slider"
+  | "media-sliderthumb"
+  | "media-time-remaining-display"
+  | "media-toggle-closed-captions-button"
+  | "media-volume-slider"
+  | "media-volume-slider-container"
+  | "media-volume-sliderthumb"
+  | "menulist"
+  | "menulist-button"
+  | "menulist-text"
+  | "menulist-textfield"
+  | "meter"
+  | "none"
+  | "progress-bar"
+  | "progress-bar-value"
+  | "push-button"
+  | "radio"
+  | "searchfield"
+  | "searchfield-cancel-button"
+  | "searchfield-decoration"
+  | "searchfield-results-button"
+  | "searchfield-results-decoration"
+  | "slider-horizontal"
+  | "slider-vertical"
+  | "sliderthumb-horizontal"
+  | "sliderthumb-vertical"
+  | "square-button"
+  | "textarea"
+  | "textfield";
+
+export type Property$WebkitBorderBefore<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | DataType$LineStyle | DataType$Color | string;
+
+export type Property$WebkitBorderBeforeColor = Globals | DataType$Color;
+
+export type Property$WebkitBorderBeforeStyle = Globals | DataType$LineStyle | string;
+
+export type Property$WebkitBorderBeforeWidth<TLength = string | 0> = Globals | DataType$LineWidth<TLength> | string;
+
+export type Property$WebkitBoxReflect<TLength = string | 0> = Globals | TLength | "above" | "below" | "left" | "right" | string;
+
+export type Property$WebkitLineClamp = Globals | "none" | number;
+
+export type Property$WebkitMask<TLength = string | 0> =
+  | Globals
+  | DataType$Position<TLength>
+  | DataType$RepeatStyle
+  | DataType$Box
+  | "border"
+  | "content"
+  | "none"
+  | "padding"
+  | "text"
+  | string;
+
+export type Property$WebkitMaskAttachment = Globals | DataType$Attachment | string;
+
+export type Property$WebkitMaskClip = Globals | DataType$Box | "border" | "content" | "padding" | "text" | string;
+
+export type Property$WebkitMaskComposite = Globals | DataType$CompositeStyle | string;
+
+export type Property$WebkitMaskImage = Globals | "none" | string;
+
+export type Property$WebkitMaskOrigin = Globals | DataType$Box | "border" | "content" | "padding" | string;
+
+export type Property$WebkitMaskPosition<TLength = string | 0> = Globals | DataType$Position<TLength> | string;
+
+export type Property$WebkitMaskPositionX<TLength = string | 0> = Globals | TLength | "center" | "left" | "right" | string;
+
+export type Property$WebkitMaskPositionY<TLength = string | 0> = Globals | TLength | "bottom" | "center" | "top" | string;
+
+export type Property$WebkitMaskRepeat = Globals | DataType$RepeatStyle | string;
+
+export type Property$WebkitMaskRepeatX = Globals | "no-repeat" | "repeat" | "round" | "space";
+
+export type Property$WebkitMaskRepeatY = Globals | "no-repeat" | "repeat" | "round" | "space";
+
+export type Property$WebkitMaskSize<TLength = string | 0> = Globals | DataType$BgSize<TLength> | string;
+
+export type Property$WebkitOverflowScrolling = Globals | "auto" | "touch";
+
+export type Property$WebkitTapHighlightColor = Globals | DataType$Color;
+
+export type Property$WebkitTextFillColor = Globals | DataType$Color;
+
+export type Property$WebkitTextStroke<TLength = string | 0> = Globals | DataType$Color | TLength | string;
+
+export type Property$WebkitTextStrokeColor = Globals | DataType$Color;
+
+export type Property$WebkitTextStrokeWidth<TLength = string | 0> = Globals | TLength;
+
+export type Property$WebkitTouchCallout = Globals | "default" | "none";
+
+export type Property$WebkitUserModify = Globals | "read-only" | "read-write" | "read-write-plaintext-only";
+
+export type Property$AlignmentBaseline =
+  | Globals
+  | "after-edge"
+  | "alphabetic"
+  | "auto"
+  | "baseline"
+  | "before-edge"
+  | "central"
+  | "hanging"
+  | "ideographic"
+  | "mathematical"
+  | "middle"
+  | "text-after-edge"
+  | "text-before-edge";
+
+export type Property$BaselineShift<TLength = string | 0> = Globals | TLength | "baseline" | "sub" | "super" | string;
+
+export type Property$ClipRule = Globals | "evenodd" | "nonzero";
+
+export type Property$ColorInterpolation = Globals | "auto" | "linearRGB" | "sRGB";
+
+export type Property$ColorRendering = Globals | "auto" | "optimizeQuality" | "optimizeSpeed";
+
+export type Property$DominantBaseline =
+  | Globals
+  | "alphabetic"
+  | "auto"
+  | "central"
+  | "hanging"
+  | "ideographic"
+  | "mathematical"
+  | "middle"
+  | "no-change"
+  | "reset-size"
+  | "text-after-edge"
+  | "text-before-edge"
+  | "use-script";
+
+export type Property$Fill = Globals | DataType$Paint;
+
+export type Property$FillOpacity = Globals | number;
+
+export type Property$FillRule = Globals | "evenodd" | "nonzero";
+
+export type Property$FloodColor = Globals | DataType$Color | "currentColor";
+
+export type Property$FloodOpacity = Globals | number;
+
+export type Property$GlyphOrientationVertical = Globals | "auto" | string | number;
+
+export type Property$LightingColor = Globals | DataType$Color | "currentColor";
+
+export type Property$Marker = Globals | "none" | string;
+
+export type Property$MarkerEnd = Globals | "none" | string;
+
+export type Property$MarkerMid = Globals | "none" | string;
+
+export type Property$MarkerStart = Globals | "none" | string;
+
+export type Property$ShapeRendering = Globals | "auto" | "crispEdges" | "geometricPrecision" | "optimizeSpeed";
+
+export type Property$StopColor = Globals | DataType$Color | "currentColor";
+
+export type Property$StopOpacity = Globals | number;
+
+export type Property$Stroke = Globals | DataType$Paint;
+
+export type Property$StrokeDasharray<TLength = string | 0> = Globals | DataType$Dasharray<TLength> | "none";
+
+export type Property$StrokeDashoffset<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$StrokeLinecap = Globals | "butt" | "round" | "square";
+
+export type Property$StrokeLinejoin = Globals | "bevel" | "miter" | "round";
+
+export type Property$StrokeMiterlimit = Globals | number;
+
+export type Property$StrokeOpacity = Globals | number;
+
+export type Property$StrokeWidth<TLength = string | 0> = Globals | TLength | string;
+
+export type Property$TextAnchor = Globals | "end" | "middle" | "start";
+
+export type Property$VectorEffect = Globals | "non-scaling-stroke" | "none";
+
+export type AtRule$CounterStyle<TLength = string | 0, TTime = string> = {|
+  additiveSymbols?: string,
+  fallback?: string,
+  negative?: string,
+  pad?: string,
+  prefix?: string,
+  range?: AtRule$Range,
+  speakAs?: AtRule$SpeakAs,
+  suffix?: string,
+  symbols?: string,
+  system?: AtRule$System,
+|};
+
+export type AtRule$CounterStyleHyphen<TLength = string | 0, TTime = string> = {|
+  "additive-symbols"?: string,
+  fallback?: string,
+  negative?: string,
+  pad?: string,
+  prefix?: string,
+  range?: AtRule$Range,
+  "speak-as"?: AtRule$SpeakAs,
+  suffix?: string,
+  symbols?: string,
+  system?: AtRule$System,
+|};
+
+export type AtRule$CounterStyleFallback<TLength = string | 0, TTime = string> = {|
+  additiveSymbols?: string | Array<string>,
+  fallback?: string | Array<string>,
+  negative?: string | Array<string>,
+  pad?: string | Array<string>,
+  prefix?: string | Array<string>,
+  range?: AtRule$Range | Array<AtRule$Range>,
+  speakAs?: AtRule$SpeakAs | Array<AtRule$SpeakAs>,
+  suffix?: string | Array<string>,
+  symbols?: string | Array<string>,
+  system?: AtRule$System | Array<AtRule$System>,
+|};
+
+export type AtRule$CounterStyleHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "additive-symbols"?: string | Array<string>,
+  fallback?: string | Array<string>,
+  negative?: string | Array<string>,
+  pad?: string | Array<string>,
+  prefix?: string | Array<string>,
+  range?: AtRule$Range | Array<AtRule$Range>,
+  "speak-as"?: AtRule$SpeakAs | Array<AtRule$SpeakAs>,
+  suffix?: string | Array<string>,
+  symbols?: string | Array<string>,
+  system?: AtRule$System | Array<AtRule$System>,
+|};
+
+export type AtRule$FontFace<TLength = string | 0, TTime = string> = {|
+  MozFontFeatureSettings?: AtRule$FontFeatureSettings,
+  ascentOverride?: AtRule$AscentOverride,
+  descentOverride?: AtRule$DescentOverride,
+  fontDisplay?: AtRule$FontDisplay,
+  fontFamily?: string,
+  fontFeatureSettings?: AtRule$FontFeatureSettings,
+  fontStretch?: AtRule$FontStretch,
+  fontStyle?: AtRule$FontStyle,
+  fontVariant?: AtRule$FontVariant,
+  fontVariationSettings?: AtRule$FontVariationSettings,
+  fontWeight?: AtRule$FontWeight,
+  lineGapOverride?: AtRule$LineGapOverride,
+  sizeAdjust?: string,
+  src?: string,
+  unicodeRange?: string,
+|};
+
+export type AtRule$FontFaceHyphen<TLength = string | 0, TTime = string> = {|
+  "-moz-font-feature-settings"?: AtRule$FontFeatureSettings,
+  "ascent-override"?: AtRule$AscentOverride,
+  "descent-override"?: AtRule$DescentOverride,
+  "font-display"?: AtRule$FontDisplay,
+  "font-family"?: string,
+  "font-feature-settings"?: AtRule$FontFeatureSettings,
+  "font-stretch"?: AtRule$FontStretch,
+  "font-style"?: AtRule$FontStyle,
+  "font-variant"?: AtRule$FontVariant,
+  "font-variation-settings"?: AtRule$FontVariationSettings,
+  "font-weight"?: AtRule$FontWeight,
+  "line-gap-override"?: AtRule$LineGapOverride,
+  "size-adjust"?: string,
+  src?: string,
+  "unicode-range"?: string,
+|};
+
+export type AtRule$FontFaceFallback<TLength = string | 0, TTime = string> = {|
+  MozFontFeatureSettings?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
+  ascentOverride?: AtRule$AscentOverride | Array<AtRule$AscentOverride>,
+  descentOverride?: AtRule$DescentOverride | Array<AtRule$DescentOverride>,
+  fontDisplay?: AtRule$FontDisplay | Array<AtRule$FontDisplay>,
+  fontFamily?: string | Array<string>,
+  fontFeatureSettings?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
+  fontStretch?: AtRule$FontStretch | Array<AtRule$FontStretch>,
+  fontStyle?: AtRule$FontStyle | Array<AtRule$FontStyle>,
+  fontVariant?: AtRule$FontVariant | Array<AtRule$FontVariant>,
+  fontVariationSettings?: AtRule$FontVariationSettings | Array<AtRule$FontVariationSettings>,
+  fontWeight?: AtRule$FontWeight | Array<AtRule$FontWeight>,
+  lineGapOverride?: AtRule$LineGapOverride | Array<AtRule$LineGapOverride>,
+  sizeAdjust?: string | Array<string>,
+  src?: string | Array<string>,
+  unicodeRange?: string | Array<string>,
+|};
+
+export type AtRule$FontFaceHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "-moz-font-feature-settings"?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
+  "ascent-override"?: AtRule$AscentOverride | Array<AtRule$AscentOverride>,
+  "descent-override"?: AtRule$DescentOverride | Array<AtRule$DescentOverride>,
+  "font-display"?: AtRule$FontDisplay | Array<AtRule$FontDisplay>,
+  "font-family"?: string | Array<string>,
+  "font-feature-settings"?: AtRule$FontFeatureSettings | Array<AtRule$FontFeatureSettings>,
+  "font-stretch"?: AtRule$FontStretch | Array<AtRule$FontStretch>,
+  "font-style"?: AtRule$FontStyle | Array<AtRule$FontStyle>,
+  "font-variant"?: AtRule$FontVariant | Array<AtRule$FontVariant>,
+  "font-variation-settings"?: AtRule$FontVariationSettings | Array<AtRule$FontVariationSettings>,
+  "font-weight"?: AtRule$FontWeight | Array<AtRule$FontWeight>,
+  "line-gap-override"?: AtRule$LineGapOverride | Array<AtRule$LineGapOverride>,
+  "size-adjust"?: string | Array<string>,
+  src?: string | Array<string>,
+  "unicode-range"?: string | Array<string>,
+|};
+
+export type AtRule$FontPaletteValues<TLength = string | 0, TTime = string> = {|
+  basePalette?: AtRule$BasePalette,
+  fontFamily?: string,
+  overrideColors?: string,
+|};
+
+export type AtRule$FontPaletteValuesHyphen<TLength = string | 0, TTime = string> = {|
+  "base-palette"?: AtRule$BasePalette,
+  "font-family"?: string,
+  "override-colors"?: string,
+|};
+
+export type AtRule$FontPaletteValuesFallback<TLength = string | 0, TTime = string> = {|
+  basePalette?: AtRule$BasePalette | Array<AtRule$BasePalette>,
+  fontFamily?: string | Array<string>,
+  overrideColors?: string | Array<string>,
+|};
+
+export type AtRule$FontPaletteValuesHyphenFallback<TLength = string | 0, TTime = string> = {|
+  "base-palette"?: AtRule$BasePalette | Array<AtRule$BasePalette>,
+  "font-family"?: string | Array<string>,
+  "override-colors"?: string | Array<string>,
+|};
+
+export type AtRule$Page<TLength = string | 0, TTime = string> = {|
+  bleed?: AtRule$Bleed<TLength>,
+  marks?: AtRule$Marks,
+  pageOrientation?: AtRule$PageOrientation,
+  size?: AtRule$Size<TLength>,
+|};
+
+export type AtRule$PageHyphen<TLength = string | 0, TTime = string> = {|
+  bleed?: AtRule$Bleed<TLength>,
+  marks?: AtRule$Marks,
+  "page-orientation"?: AtRule$PageOrientation,
+  size?: AtRule$Size<TLength>,
+|};
+
+export type AtRule$PageFallback<TLength = string | 0, TTime = string> = {|
+  bleed?: AtRule$Bleed<TLength> | Array<AtRule$Bleed<TLength>>,
+  marks?: AtRule$Marks | Array<AtRule$Marks>,
+  pageOrientation?: AtRule$PageOrientation | Array<AtRule$PageOrientation>,
+  size?: AtRule$Size<TLength> | Array<AtRule$Size<TLength>>,
+|};
+
+export type AtRule$PageHyphenFallback<TLength = string | 0, TTime = string> = {|
+  bleed?: AtRule$Bleed<TLength> | Array<AtRule$Bleed<TLength>>,
+  marks?: AtRule$Marks | Array<AtRule$Marks>,
+  "page-orientation"?: AtRule$PageOrientation | Array<AtRule$PageOrientation>,
+  size?: AtRule$Size<TLength> | Array<AtRule$Size<TLength>>,
+|};
+
+export type AtRule$Property<TLength = string | 0, TTime = string> = {|
+  inherits?: AtRule$Inherits,
+  initialValue?: string,
+  syntax?: string,
+|};
+
+export type AtRule$PropertyHyphen<TLength = string | 0, TTime = string> = {|
+  inherits?: AtRule$Inherits,
+  "initial-value"?: string,
+  syntax?: string,
+|};
+
+export type AtRule$PropertyFallback<TLength = string | 0, TTime = string> = {|
+  inherits?: AtRule$Inherits | Array<AtRule$Inherits>,
+  initialValue?: string | Array<string>,
+  syntax?: string | Array<string>,
+|};
+
+export type AtRule$PropertyHyphenFallback<TLength = string | 0, TTime = string> = {|
+  inherits?: AtRule$Inherits | Array<AtRule$Inherits>,
+  "initial-value"?: string | Array<string>,
+  syntax?: string | Array<string>,
+|};
+
+export type AtRule$Viewport<TLength = string | 0, TTime = string> = {|
+  height?: AtRule$Height<TLength>,
+  maxHeight?: AtRule$MaxHeight<TLength>,
+  maxWidth?: AtRule$MaxWidth<TLength>,
+  maxZoom?: AtRule$MaxZoom,
+  minHeight?: AtRule$MinHeight<TLength>,
+  minWidth?: AtRule$MinWidth<TLength>,
+  minZoom?: AtRule$MinZoom,
+  orientation?: AtRule$Orientation,
+  userZoom?: AtRule$UserZoom,
+  viewportFit?: AtRule$ViewportFit,
+  width?: AtRule$Width<TLength>,
+  zoom?: AtRule$Zoom,
+|};
+
+export type AtRule$ViewportHyphen<TLength = string | 0, TTime = string> = {|
+  height?: AtRule$Height<TLength>,
+  "max-height"?: AtRule$MaxHeight<TLength>,
+  "max-width"?: AtRule$MaxWidth<TLength>,
+  "max-zoom"?: AtRule$MaxZoom,
+  "min-height"?: AtRule$MinHeight<TLength>,
+  "min-width"?: AtRule$MinWidth<TLength>,
+  "min-zoom"?: AtRule$MinZoom,
+  orientation?: AtRule$Orientation,
+  "user-zoom"?: AtRule$UserZoom,
+  "viewport-fit"?: AtRule$ViewportFit,
+  width?: AtRule$Width<TLength>,
+  zoom?: AtRule$Zoom,
+|};
+
+export type AtRule$ViewportFallback<TLength = string | 0, TTime = string> = {|
+  height?: AtRule$Height<TLength> | Array<AtRule$Height<TLength>>,
+  maxHeight?: AtRule$MaxHeight<TLength> | Array<AtRule$MaxHeight<TLength>>,
+  maxWidth?: AtRule$MaxWidth<TLength> | Array<AtRule$MaxWidth<TLength>>,
+  maxZoom?: AtRule$MaxZoom | Array<AtRule$MaxZoom>,
+  minHeight?: AtRule$MinHeight<TLength> | Array<AtRule$MinHeight<TLength>>,
+  minWidth?: AtRule$MinWidth<TLength> | Array<AtRule$MinWidth<TLength>>,
+  minZoom?: AtRule$MinZoom | Array<AtRule$MinZoom>,
+  orientation?: AtRule$Orientation | Array<AtRule$Orientation>,
+  userZoom?: AtRule$UserZoom | Array<AtRule$UserZoom>,
+  viewportFit?: AtRule$ViewportFit | Array<AtRule$ViewportFit>,
+  width?: AtRule$Width<TLength> | Array<AtRule$Width<TLength>>,
+  zoom?: AtRule$Zoom | Array<AtRule$Zoom>,
+|};
+
+export type AtRule$ViewportHyphenFallback<TLength = string | 0, TTime = string> = {|
+  height?: AtRule$Height<TLength> | Array<AtRule$Height<TLength>>,
+  "max-height"?: AtRule$MaxHeight<TLength> | Array<AtRule$MaxHeight<TLength>>,
+  "max-width"?: AtRule$MaxWidth<TLength> | Array<AtRule$MaxWidth<TLength>>,
+  "max-zoom"?: AtRule$MaxZoom | Array<AtRule$MaxZoom>,
+  "min-height"?: AtRule$MinHeight<TLength> | Array<AtRule$MinHeight<TLength>>,
+  "min-width"?: AtRule$MinWidth<TLength> | Array<AtRule$MinWidth<TLength>>,
+  "min-zoom"?: AtRule$MinZoom | Array<AtRule$MinZoom>,
+  orientation?: AtRule$Orientation | Array<AtRule$Orientation>,
+  "user-zoom"?: AtRule$UserZoom | Array<AtRule$UserZoom>,
+  "viewport-fit"?: AtRule$ViewportFit | Array<AtRule$ViewportFit>,
+  width?: AtRule$Width<TLength> | Array<AtRule$Width<TLength>>,
+  zoom?: AtRule$Zoom | Array<AtRule$Zoom>,
+|};
+
+type AtRule$Range = "auto" | string;
+
+type AtRule$SpeakAs = "auto" | "bullets" | "numbers" | "spell-out" | "words" | string;
+
+type AtRule$System = "additive" | "alphabetic" | "cyclic" | "fixed" | "numeric" | "symbolic" | string;
+
+type AtRule$FontFeatureSettings = "normal" | string;
+
+type AtRule$AscentOverride = "normal" | string;
+
+type AtRule$DescentOverride = "normal" | string;
+
+type AtRule$FontDisplay = "auto" | "block" | "fallback" | "optional" | "swap";
+
+type AtRule$FontStretch = DataType$FontStretchAbsolute | string;
+
+type AtRule$FontStyle = "italic" | "normal" | "oblique" | string;
+
+type AtRule$FontVariant =
+  | DataType$EastAsianVariantValues
+  | "all-petite-caps"
+  | "all-small-caps"
+  | "common-ligatures"
+  | "contextual"
+  | "diagonal-fractions"
+  | "discretionary-ligatures"
+  | "full-width"
+  | "historical-forms"
+  | "historical-ligatures"
+  | "lining-nums"
+  | "no-common-ligatures"
+  | "no-contextual"
+  | "no-discretionary-ligatures"
+  | "no-historical-ligatures"
+  | "none"
+  | "normal"
+  | "oldstyle-nums"
+  | "ordinal"
+  | "petite-caps"
+  | "proportional-nums"
+  | "proportional-width"
+  | "ruby"
+  | "slashed-zero"
+  | "small-caps"
+  | "stacked-fractions"
+  | "tabular-nums"
+  | "titling-caps"
+  | "unicase"
+  | string;
+
+type AtRule$FontVariationSettings = "normal" | string;
+
+type AtRule$FontWeight = DataType$FontWeightAbsolute | string;
+
+type AtRule$LineGapOverride = "normal" | string;
+
+type AtRule$BasePalette = "dark" | "light" | number;
+
+type AtRule$Bleed<TLength> = TLength | "auto";
+
+type AtRule$Marks = "crop" | "cross" | "none" | string;
+
+type AtRule$PageOrientation = "rotate-left" | "rotate-right" | "upright";
+
+type AtRule$Size<TLength> = DataType$PageSize | TLength | "auto" | "landscape" | "portrait" | string;
+
+type AtRule$Inherits = "false" | "true";
+
+type AtRule$Height<TLength> = DataType$ViewportLength<TLength> | string;
+
+type AtRule$MaxHeight<TLength> = DataType$ViewportLength<TLength>;
+
+type AtRule$MaxWidth<TLength> = DataType$ViewportLength<TLength>;
+
+type AtRule$MaxZoom = "auto" | string | number;
+
+type AtRule$MinHeight<TLength> = DataType$ViewportLength<TLength>;
+
+type AtRule$MinWidth<TLength> = DataType$ViewportLength<TLength>;
+
+type AtRule$MinZoom = "auto" | string | number;
+
+type AtRule$Orientation = "auto" | "landscape" | "portrait";
+
+type AtRule$UserZoom = "fixed" | "zoom";
+
+type AtRule$ViewportFit = "auto" | "contain" | "cover";
+
+type AtRule$Width<TLength> = DataType$ViewportLength<TLength> | string;
+
+type AtRule$Zoom = "auto" | string | number;
+
+type DataType$AbsoluteSize = "large" | "medium" | "small" | "x-large" | "x-small" | "xx-large" | "xx-small" | "xxx-large";
+
+type DataType$AnimateableFeature = "contents" | "scroll-position" | string;
+
+type DataType$Attachment = "fixed" | "local" | "scroll";
+
+type DataType$BgPosition<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | string;
+
+type DataType$BgSize<TLength> = TLength | "auto" | "contain" | "cover" | string;
+
+type DataType$BlendMode =
+  | "color"
+  | "color-burn"
+  | "color-dodge"
+  | "darken"
+  | "difference"
+  | "exclusion"
+  | "hard-light"
+  | "hue"
+  | "lighten"
+  | "luminosity"
+  | "multiply"
+  | "normal"
+  | "overlay"
+  | "saturation"
+  | "screen"
+  | "soft-light";
+
+type DataType$Box = "border-box" | "content-box" | "padding-box";
+
+type DataType$Color = DataType$NamedColor | DataType$DeprecatedSystemColor | "currentcolor" | string;
+
+type DataType$CompatAuto =
+  | "button"
+  | "checkbox"
+  | "listbox"
+  | "menulist"
+  | "meter"
+  | "progress-bar"
+  | "push-button"
+  | "radio"
+  | "searchfield"
+  | "slider-horizontal"
+  | "square-button"
+  | "textarea";
+
+type DataType$CompositeStyle =
+  | "clear"
+  | "copy"
+  | "destination-atop"
+  | "destination-in"
+  | "destination-out"
+  | "destination-over"
+  | "source-atop"
+  | "source-in"
+  | "source-out"
+  | "source-over"
+  | "xor";
+
+type DataType$CompositingOperator = "add" | "exclude" | "intersect" | "subtract";
+
+type DataType$ContentDistribution = "space-around" | "space-between" | "space-evenly" | "stretch";
+
+type DataType$ContentList = DataType$Quote | "contents" | string;
+
+type DataType$ContentPosition = "center" | "end" | "flex-end" | "flex-start" | "start";
+
+type DataType$CubicBezierTimingFunction = "ease" | "ease-in" | "ease-in-out" | "ease-out" | string;
+
+type DataType$Dasharray<TLength> = TLength | string | number;
+
+type DataType$DeprecatedSystemColor =
+  | "ActiveBorder"
+  | "ActiveCaption"
+  | "AppWorkspace"
+  | "Background"
+  | "ButtonFace"
+  | "ButtonHighlight"
+  | "ButtonShadow"
+  | "ButtonText"
+  | "CaptionText"
+  | "GrayText"
+  | "Highlight"
+  | "HighlightText"
+  | "InactiveBorder"
+  | "InactiveCaption"
+  | "InactiveCaptionText"
+  | "InfoBackground"
+  | "InfoText"
+  | "Menu"
+  | "MenuText"
+  | "Scrollbar"
+  | "ThreeDDarkShadow"
+  | "ThreeDFace"
+  | "ThreeDHighlight"
+  | "ThreeDLightShadow"
+  | "ThreeDShadow"
+  | "Window"
+  | "WindowFrame"
+  | "WindowText";
+
+type DataType$DisplayInside = "-ms-flexbox" | "-ms-grid" | "-webkit-flex" | "flex" | "flow" | "flow-root" | "grid" | "ruby" | "table";
+
+type DataType$DisplayInternal =
+  | "ruby-base"
+  | "ruby-base-container"
+  | "ruby-text"
+  | "ruby-text-container"
+  | "table-caption"
+  | "table-cell"
+  | "table-column"
+  | "table-column-group"
+  | "table-footer-group"
+  | "table-header-group"
+  | "table-row"
+  | "table-row-group";
+
+type DataType$DisplayLegacy =
+  | "-ms-inline-flexbox"
+  | "-ms-inline-grid"
+  | "-webkit-inline-flex"
+  | "inline-block"
+  | "inline-flex"
+  | "inline-grid"
+  | "inline-list-item"
+  | "inline-table";
+
+type DataType$DisplayOutside = "block" | "inline" | "run-in";
+
+type DataType$EasingFunction = DataType$CubicBezierTimingFunction | DataType$StepTimingFunction | "linear";
+
+type DataType$EastAsianVariantValues = "jis04" | "jis78" | "jis83" | "jis90" | "simplified" | "traditional";
+
+type DataType$FinalBgLayer<TLength> = DataType$Color | DataType$BgPosition<TLength> | DataType$RepeatStyle | DataType$Attachment | DataType$Box | "none" | string;
+
+type DataType$FontStretchAbsolute =
+  | "condensed"
+  | "expanded"
+  | "extra-condensed"
+  | "extra-expanded"
+  | "normal"
+  | "semi-condensed"
+  | "semi-expanded"
+  | "ultra-condensed"
+  | "ultra-expanded"
+  | string;
+
+type DataType$FontWeightAbsolute = "bold" | "normal" | number;
+
+type DataType$GenericFamily = "cursive" | "fantasy" | "monospace" | "sans-serif" | "serif";
+
+type DataType$GeometryBox = DataType$Box | "fill-box" | "margin-box" | "stroke-box" | "view-box";
+
+type DataType$GridLine = "auto" | string | number;
+
+type DataType$LineStyle = "dashed" | "dotted" | "double" | "groove" | "hidden" | "inset" | "none" | "outset" | "ridge" | "solid";
+
+type DataType$LineWidth<TLength> = TLength | "medium" | "thick" | "thin";
+
+type DataType$MaskLayer<TLength> =
+  | DataType$Position<TLength>
+  | DataType$RepeatStyle
+  | DataType$GeometryBox
+  | DataType$CompositingOperator
+  | DataType$MaskingMode
+  | "no-clip"
+  | "none"
+  | string;
+
+type DataType$MaskingMode = "alpha" | "luminance" | "match-source";
+
+type DataType$NamedColor =
+  | "aliceblue"
+  | "antiquewhite"
+  | "aqua"
+  | "aquamarine"
+  | "azure"
+  | "beige"
+  | "bisque"
+  | "black"
+  | "blanchedalmond"
+  | "blue"
+  | "blueviolet"
+  | "brown"
+  | "burlywood"
+  | "cadetblue"
+  | "chartreuse"
+  | "chocolate"
+  | "coral"
+  | "cornflowerblue"
+  | "cornsilk"
+  | "crimson"
+  | "cyan"
+  | "darkblue"
+  | "darkcyan"
+  | "darkgoldenrod"
+  | "darkgray"
+  | "darkgreen"
+  | "darkgrey"
+  | "darkkhaki"
+  | "darkmagenta"
+  | "darkolivegreen"
+  | "darkorange"
+  | "darkorchid"
+  | "darkred"
+  | "darksalmon"
+  | "darkseagreen"
+  | "darkslateblue"
+  | "darkslategray"
+  | "darkslategrey"
+  | "darkturquoise"
+  | "darkviolet"
+  | "deeppink"
+  | "deepskyblue"
+  | "dimgray"
+  | "dimgrey"
+  | "dodgerblue"
+  | "firebrick"
+  | "floralwhite"
+  | "forestgreen"
+  | "fuchsia"
+  | "gainsboro"
+  | "ghostwhite"
+  | "gold"
+  | "goldenrod"
+  | "gray"
+  | "green"
+  | "greenyellow"
+  | "grey"
+  | "honeydew"
+  | "hotpink"
+  | "indianred"
+  | "indigo"
+  | "ivory"
+  | "khaki"
+  | "lavender"
+  | "lavenderblush"
+  | "lawngreen"
+  | "lemonchiffon"
+  | "lightblue"
+  | "lightcoral"
+  | "lightcyan"
+  | "lightgoldenrodyellow"
+  | "lightgray"
+  | "lightgreen"
+  | "lightgrey"
+  | "lightpink"
+  | "lightsalmon"
+  | "lightseagreen"
+  | "lightskyblue"
+  | "lightslategray"
+  | "lightslategrey"
+  | "lightsteelblue"
+  | "lightyellow"
+  | "lime"
+  | "limegreen"
+  | "linen"
+  | "magenta"
+  | "maroon"
+  | "mediumaquamarine"
+  | "mediumblue"
+  | "mediumorchid"
+  | "mediumpurple"
+  | "mediumseagreen"
+  | "mediumslateblue"
+  | "mediumspringgreen"
+  | "mediumturquoise"
+  | "mediumvioletred"
+  | "midnightblue"
+  | "mintcream"
+  | "mistyrose"
+  | "moccasin"
+  | "navajowhite"
+  | "navy"
+  | "oldlace"
+  | "olive"
+  | "olivedrab"
+  | "orange"
+  | "orangered"
+  | "orchid"
+  | "palegoldenrod"
+  | "palegreen"
+  | "paleturquoise"
+  | "palevioletred"
+  | "papayawhip"
+  | "peachpuff"
+  | "peru"
+  | "pink"
+  | "plum"
+  | "powderblue"
+  | "purple"
+  | "rebeccapurple"
+  | "red"
+  | "rosybrown"
+  | "royalblue"
+  | "saddlebrown"
+  | "salmon"
+  | "sandybrown"
+  | "seagreen"
+  | "seashell"
+  | "sienna"
+  | "silver"
+  | "skyblue"
+  | "slateblue"
+  | "slategray"
+  | "slategrey"
+  | "snow"
+  | "springgreen"
+  | "steelblue"
+  | "tan"
+  | "teal"
+  | "thistle"
+  | "tomato"
+  | "transparent"
+  | "turquoise"
+  | "violet"
+  | "wheat"
+  | "white"
+  | "whitesmoke"
+  | "yellow"
+  | "yellowgreen";
+
+type DataType$PageSize = "A3" | "A4" | "A5" | "B4" | "B5" | "JIS-B4" | "JIS-B5" | "ledger" | "legal" | "letter";
+
+type DataType$Paint = DataType$Color | "child" | "context-fill" | "context-stroke" | "none" | string;
+
+type DataType$Position<TLength> = TLength | "bottom" | "center" | "left" | "right" | "top" | string;
+
+type DataType$Quote = "close-quote" | "no-close-quote" | "no-open-quote" | "open-quote";
+
+type DataType$RepeatStyle = "no-repeat" | "repeat" | "repeat-x" | "repeat-y" | "round" | "space" | string;
+
+type DataType$SelfPosition = "center" | "end" | "flex-end" | "flex-start" | "self-end" | "self-start" | "start";
+
+type DataType$SingleAnimation<TTime> =
+  | DataType$EasingFunction
+  | DataType$SingleAnimationDirection
+  | DataType$SingleAnimationFillMode
+  | DataType$SingleAnimationTimeline
+  | TTime
+  | "infinite"
+  | "none"
+  | "paused"
+  | "running"
+  | string
+  | number;
+
+type DataType$SingleAnimationComposition = "accumulate" | "add" | "replace";
+
+type DataType$SingleAnimationDirection = "alternate" | "alternate-reverse" | "normal" | "reverse";
+
+type DataType$SingleAnimationFillMode = "backwards" | "both" | "forwards" | "none";
+
+type DataType$SingleAnimationTimeline = "auto" | "none" | string;
+
+type DataType$SingleTransition<TTime> = DataType$EasingFunction | TTime | "all" | "allow-discrete" | "none" | "normal" | string;
+
+type DataType$StepTimingFunction = "step-end" | "step-start" | string;
+
+type DataType$TimelineRangeName = "contain" | "cover" | "entry" | "entry-crossing" | "exit" | "exit-crossing";
+
+type DataType$TrackBreadth<TLength> = TLength | "auto" | "max-content" | "min-content" | string;
+
+type DataType$ViewportLength<TLength> = TLength | "auto" | string;
+
+type DataType$VisualBox = "border-box" | "content-box" | "padding-box";
diff --git a/node_modules/csstype/package.json b/node_modules/csstype/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3ed071c10b4552658adf4d7c3917ca85c160a0c8
--- /dev/null
+++ b/node_modules/csstype/package.json
@@ -0,0 +1,102 @@
+{
+  "_from": "csstype@^3.0.2",
+  "_id": "csstype@3.1.3",
+  "_inBundle": false,
+  "_integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+  "_location": "/csstype",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "csstype@^3.0.2",
+    "name": "csstype",
+    "escapedName": "csstype",
+    "rawSpec": "^3.0.2",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.2"
+  },
+  "_requiredBy": [
+    "/@types/react",
+    "/dom-helpers"
+  ],
+  "_resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+  "_shasum": "d80ff294d114fb0e6ac500fbf85b60137d7eff81",
+  "_spec": "csstype@^3.0.2",
+  "_where": "/home/ethan2.clay/flask/node_modules/dom-helpers",
+  "author": {
+    "name": "Fredrik Nicol",
+    "email": "fredrik.nicol@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/frenic/csstype/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Strict TypeScript and Flow types for style based on MDN data",
+  "devDependencies": {
+    "@types/chokidar": "^2.1.3",
+    "@types/css-tree": "^2.3.1",
+    "@types/jest": "^29.5.0",
+    "@types/jsdom": "^21.1.1",
+    "@types/node": "^16.18.23",
+    "@types/prettier": "^2.7.2",
+    "@types/request": "^2.48.8",
+    "@types/turndown": "^5.0.1",
+    "@typescript-eslint/eslint-plugin": "^5.57.0",
+    "@typescript-eslint/parser": "^5.57.0",
+    "chalk": "^4.1.2",
+    "chokidar": "^3.5.3",
+    "css-tree": "^2.3.1",
+    "eslint": "^8.37.0",
+    "eslint-config-prettier": "^8.8.0",
+    "eslint-plugin-prettier": "^4.2.1",
+    "fast-glob": "^3.2.12",
+    "flow-bin": "^0.203.1",
+    "jest": "^29.5.0",
+    "jsdom": "^21.1.1",
+    "mdn-browser-compat-data": "git+https://github.com/mdn/browser-compat-data.git#1bf44517bd08de735e9ec20dbfe8e86c96341054",
+    "mdn-data": "git+https://github.com/mdn/data.git#7f0c865a3c4b5d891285c93308ee5c25cb5cfee8",
+    "prettier": "^2.8.7",
+    "request": "^2.88.2",
+    "ts-jest": "^29.0.5",
+    "ts-node": "^10.9.1",
+    "turndown": "^7.1.2",
+    "typescript": "~5.0.3"
+  },
+  "files": [
+    "index.d.ts",
+    "index.js.flow"
+  ],
+  "homepage": "https://github.com/frenic/csstype#readme",
+  "keywords": [
+    "css",
+    "style",
+    "typescript",
+    "flow",
+    "typings",
+    "types",
+    "definitions"
+  ],
+  "license": "MIT",
+  "main": "",
+  "name": "csstype",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/frenic/csstype.git"
+  },
+  "scripts": {
+    "build": "ts-node --files build.ts --start",
+    "lazy": "tsc && npm run lint",
+    "lint": "eslint . --ext .js,.jsx,.ts,.tsx --fix",
+    "prepublish": "npm install --prefix __tests__ && npm install --prefix __tests__/__fixtures__",
+    "prepublishOnly": "tsc && npm run test:src && npm run build && ts-node --files prepublish.ts",
+    "pretty": "prettier --write build.ts **/*.{ts,js,json,md}",
+    "test": "jest --runInBand",
+    "test:dist": "jest dist.*.ts --runInBand",
+    "test:src": "jest src.*.ts",
+    "update": "ts-node --files update.ts",
+    "watch": "ts-node --files build.ts --watch"
+  },
+  "types": "index.d.ts",
+  "version": "3.1.3"
+}
diff --git a/node_modules/dequal/dist/index.js b/node_modules/dequal/dist/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7cbd2e7a400b4549c0a29dd6ea7692abddafdf6e
--- /dev/null
+++ b/node_modules/dequal/dist/index.js
@@ -0,0 +1,86 @@
+var has = Object.prototype.hasOwnProperty;
+
+function find(iter, tar, key) {
+	for (key of iter.keys()) {
+		if (dequal(key, tar)) return key;
+	}
+}
+
+function dequal(foo, bar) {
+	var ctor, len, tmp;
+	if (foo === bar) return true;
+
+	if (foo && bar && (ctor=foo.constructor) === bar.constructor) {
+		if (ctor === Date) return foo.getTime() === bar.getTime();
+		if (ctor === RegExp) return foo.toString() === bar.toString();
+
+		if (ctor === Array) {
+			if ((len=foo.length) === bar.length) {
+				while (len-- && dequal(foo[len], bar[len]));
+			}
+			return len === -1;
+		}
+
+		if (ctor === Set) {
+			if (foo.size !== bar.size) {
+				return false;
+			}
+			for (len of foo) {
+				tmp = len;
+				if (tmp && typeof tmp === 'object') {
+					tmp = find(bar, tmp);
+					if (!tmp) return false;
+				}
+				if (!bar.has(tmp)) return false;
+			}
+			return true;
+		}
+
+		if (ctor === Map) {
+			if (foo.size !== bar.size) {
+				return false;
+			}
+			for (len of foo) {
+				tmp = len[0];
+				if (tmp && typeof tmp === 'object') {
+					tmp = find(bar, tmp);
+					if (!tmp) return false;
+				}
+				if (!dequal(len[1], bar.get(tmp))) {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		if (ctor === ArrayBuffer) {
+			foo = new Uint8Array(foo);
+			bar = new Uint8Array(bar);
+		} else if (ctor === DataView) {
+			if ((len=foo.byteLength) === bar.byteLength) {
+				while (len-- && foo.getInt8(len) === bar.getInt8(len));
+			}
+			return len === -1;
+		}
+
+		if (ArrayBuffer.isView(foo)) {
+			if ((len=foo.byteLength) === bar.byteLength) {
+				while (len-- && foo[len] === bar[len]);
+			}
+			return len === -1;
+		}
+
+		if (!ctor || typeof foo === 'object') {
+			len = 0;
+			for (ctor in foo) {
+				if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
+				if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
+			}
+			return Object.keys(bar).length === len;
+		}
+	}
+
+	return foo !== foo && bar !== bar;
+}
+
+exports.dequal = dequal;
\ No newline at end of file
diff --git a/node_modules/dequal/dist/index.min.js b/node_modules/dequal/dist/index.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..0149a23c202d909f8225726c26a1d3809c55f643
--- /dev/null
+++ b/node_modules/dequal/dist/index.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;function r(e,t,r){for(r of e.keys())if(n(r,t))return r}function n(e,f){var i,o,u;if(e===f)return!0;if(e&&f&&(i=e.constructor)===f.constructor){if(i===Date)return e.getTime()===f.getTime();if(i===RegExp)return e.toString()===f.toString();if(i===Array){if((o=e.length)===f.length)for(;o--&&n(e[o],f[o]););return-1===o}if(i===Set){if(e.size!==f.size)return!1;for(o of e){if((u=o)&&"object"==typeof u&&!(u=r(f,u)))return!1;if(!f.has(u))return!1}return!0}if(i===Map){if(e.size!==f.size)return!1;for(o of e){if((u=o[0])&&"object"==typeof u&&!(u=r(f,u)))return!1;if(!n(o[1],f.get(u)))return!1}return!0}if(i===ArrayBuffer)e=new Uint8Array(e),f=new Uint8Array(f);else if(i===DataView){if((o=e.byteLength)===f.byteLength)for(;o--&&e.getInt8(o)===f.getInt8(o););return-1===o}if(ArrayBuffer.isView(e)){if((o=e.byteLength)===f.byteLength)for(;o--&&e[o]===f[o];);return-1===o}if(!i||"object"==typeof e){for(i in o=0,e){if(t.call(e,i)&&++o&&!t.call(f,i))return!1;if(!(i in f)||!n(e[i],f[i]))return!1}return Object.keys(f).length===o}}return e!=e&&f!=f}e.dequal=n}));
\ No newline at end of file
diff --git a/node_modules/dequal/dist/index.mjs b/node_modules/dequal/dist/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..d0b1e2db3aa5dfcf6127417effd9a90b105a10c4
--- /dev/null
+++ b/node_modules/dequal/dist/index.mjs
@@ -0,0 +1,84 @@
+var has = Object.prototype.hasOwnProperty;
+
+function find(iter, tar, key) {
+	for (key of iter.keys()) {
+		if (dequal(key, tar)) return key;
+	}
+}
+
+export function dequal(foo, bar) {
+	var ctor, len, tmp;
+	if (foo === bar) return true;
+
+	if (foo && bar && (ctor=foo.constructor) === bar.constructor) {
+		if (ctor === Date) return foo.getTime() === bar.getTime();
+		if (ctor === RegExp) return foo.toString() === bar.toString();
+
+		if (ctor === Array) {
+			if ((len=foo.length) === bar.length) {
+				while (len-- && dequal(foo[len], bar[len]));
+			}
+			return len === -1;
+		}
+
+		if (ctor === Set) {
+			if (foo.size !== bar.size) {
+				return false;
+			}
+			for (len of foo) {
+				tmp = len;
+				if (tmp && typeof tmp === 'object') {
+					tmp = find(bar, tmp);
+					if (!tmp) return false;
+				}
+				if (!bar.has(tmp)) return false;
+			}
+			return true;
+		}
+
+		if (ctor === Map) {
+			if (foo.size !== bar.size) {
+				return false;
+			}
+			for (len of foo) {
+				tmp = len[0];
+				if (tmp && typeof tmp === 'object') {
+					tmp = find(bar, tmp);
+					if (!tmp) return false;
+				}
+				if (!dequal(len[1], bar.get(tmp))) {
+					return false;
+				}
+			}
+			return true;
+		}
+
+		if (ctor === ArrayBuffer) {
+			foo = new Uint8Array(foo);
+			bar = new Uint8Array(bar);
+		} else if (ctor === DataView) {
+			if ((len=foo.byteLength) === bar.byteLength) {
+				while (len-- && foo.getInt8(len) === bar.getInt8(len));
+			}
+			return len === -1;
+		}
+
+		if (ArrayBuffer.isView(foo)) {
+			if ((len=foo.byteLength) === bar.byteLength) {
+				while (len-- && foo[len] === bar[len]);
+			}
+			return len === -1;
+		}
+
+		if (!ctor || typeof foo === 'object') {
+			len = 0;
+			for (ctor in foo) {
+				if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
+				if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
+			}
+			return Object.keys(bar).length === len;
+		}
+	}
+
+	return foo !== foo && bar !== bar;
+}
diff --git a/node_modules/dequal/index.d.ts b/node_modules/dequal/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a9aea5d506ad986388394ac50b80d3575762f01d
--- /dev/null
+++ b/node_modules/dequal/index.d.ts
@@ -0,0 +1 @@
+export function dequal(foo: any, bar: any): boolean;
\ No newline at end of file
diff --git a/node_modules/dequal/license b/node_modules/dequal/license
new file mode 100644
index 0000000000000000000000000000000000000000..a3f96f828458d4ccf4ca8e9b0949300f1916e114
--- /dev/null
+++ b/node_modules/dequal/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/dequal/lite/index.d.ts b/node_modules/dequal/lite/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a9aea5d506ad986388394ac50b80d3575762f01d
--- /dev/null
+++ b/node_modules/dequal/lite/index.d.ts
@@ -0,0 +1 @@
+export function dequal(foo: any, bar: any): boolean;
\ No newline at end of file
diff --git a/node_modules/dequal/lite/index.js b/node_modules/dequal/lite/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac3eb6b870691e6b0183e5b2839c9d84ac170e32
--- /dev/null
+++ b/node_modules/dequal/lite/index.js
@@ -0,0 +1,31 @@
+var has = Object.prototype.hasOwnProperty;
+
+function dequal(foo, bar) {
+	var ctor, len;
+	if (foo === bar) return true;
+
+	if (foo && bar && (ctor=foo.constructor) === bar.constructor) {
+		if (ctor === Date) return foo.getTime() === bar.getTime();
+		if (ctor === RegExp) return foo.toString() === bar.toString();
+
+		if (ctor === Array) {
+			if ((len=foo.length) === bar.length) {
+				while (len-- && dequal(foo[len], bar[len]));
+			}
+			return len === -1;
+		}
+
+		if (!ctor || typeof foo === 'object') {
+			len = 0;
+			for (ctor in foo) {
+				if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
+				if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
+			}
+			return Object.keys(bar).length === len;
+		}
+	}
+
+	return foo !== foo && bar !== bar;
+}
+
+exports.dequal = dequal;
\ No newline at end of file
diff --git a/node_modules/dequal/lite/index.min.js b/node_modules/dequal/lite/index.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..2eaa55fd0607361068ee1daa48374d81bcd26647
--- /dev/null
+++ b/node_modules/dequal/lite/index.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.dequal={})}(this,(function(e){var t=Object.prototype.hasOwnProperty;e.dequal=function e(r,n){var o,i;if(r===n)return!0;if(r&&n&&(o=r.constructor)===n.constructor){if(o===Date)return r.getTime()===n.getTime();if(o===RegExp)return r.toString()===n.toString();if(o===Array){if((i=r.length)===n.length)for(;i--&&e(r[i],n[i]););return-1===i}if(!o||"object"==typeof r){for(o in i=0,r){if(t.call(r,o)&&++i&&!t.call(n,o))return!1;if(!(o in n)||!e(r[o],n[o]))return!1}return Object.keys(n).length===i}}return r!=r&&n!=n}}));
\ No newline at end of file
diff --git a/node_modules/dequal/lite/index.mjs b/node_modules/dequal/lite/index.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..5820d674f81da6a2ccb6e9cf2ec53ad2a11f0518
--- /dev/null
+++ b/node_modules/dequal/lite/index.mjs
@@ -0,0 +1,29 @@
+var has = Object.prototype.hasOwnProperty;
+
+export function dequal(foo, bar) {
+	var ctor, len;
+	if (foo === bar) return true;
+
+	if (foo && bar && (ctor=foo.constructor) === bar.constructor) {
+		if (ctor === Date) return foo.getTime() === bar.getTime();
+		if (ctor === RegExp) return foo.toString() === bar.toString();
+
+		if (ctor === Array) {
+			if ((len=foo.length) === bar.length) {
+				while (len-- && dequal(foo[len], bar[len]));
+			}
+			return len === -1;
+		}
+
+		if (!ctor || typeof foo === 'object') {
+			len = 0;
+			for (ctor in foo) {
+				if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
+				if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
+			}
+			return Object.keys(bar).length === len;
+		}
+	}
+
+	return foo !== foo && bar !== bar;
+}
diff --git a/node_modules/dequal/package.json b/node_modules/dequal/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bb4f374e8b4b4d66f0fdf14631604707012497ac
--- /dev/null
+++ b/node_modules/dequal/package.json
@@ -0,0 +1,90 @@
+{
+  "_from": "dequal@^2.0.3",
+  "_id": "dequal@2.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+  "_location": "/dequal",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "dequal@^2.0.3",
+    "name": "dequal",
+    "escapedName": "dequal",
+    "rawSpec": "^2.0.3",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.3"
+  },
+  "_requiredBy": [
+    "/@restart/hooks",
+    "/@restart/ui"
+  ],
+  "_resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+  "_shasum": "2644214f1997d39ed0ee0ece72335490a7ac67be",
+  "_spec": "dequal@^2.0.3",
+  "_where": "/home/ethan2.clay/flask/node_modules/@restart/hooks",
+  "author": {
+    "name": "Luke Edwards",
+    "email": "luke.edwards05@gmail.com",
+    "url": "https://lukeed.com"
+  },
+  "bugs": {
+    "url": "https://github.com/lukeed/dequal/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A tiny (304B to 489B) utility for check for deep equality",
+  "devDependencies": {
+    "bundt": "1.0.2",
+    "esm": "3.2.25",
+    "uvu": "0.3.2"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "exports": {
+    ".": {
+      "types": "./index.d.ts",
+      "import": "./dist/index.mjs",
+      "require": "./dist/index.js"
+    },
+    "./lite": {
+      "types": "./index.d.ts",
+      "import": "./lite/index.mjs",
+      "require": "./lite/index.js"
+    },
+    "./package.json": "./package.json"
+  },
+  "files": [
+    "*.d.ts",
+    "dist",
+    "lite"
+  ],
+  "homepage": "https://github.com/lukeed/dequal#readme",
+  "keywords": [
+    "deep",
+    "deep-equal",
+    "equality"
+  ],
+  "license": "MIT",
+  "main": "dist/index.js",
+  "modes": {
+    "lite": "src/lite.js",
+    "default": "src/index.js"
+  },
+  "module": "dist/index.mjs",
+  "name": "dequal",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lukeed/dequal.git"
+  },
+  "scripts": {
+    "build": "bundt",
+    "postbuild": "echo \"lite\" | xargs -n1 cp -v index.d.ts",
+    "pretest": "npm run build",
+    "test": "uvu -r esm test"
+  },
+  "types": "index.d.ts",
+  "unpkg": "dist/index.min.js",
+  "version": "2.0.3"
+}
diff --git a/node_modules/dequal/readme.md b/node_modules/dequal/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..e3341ef475a0b5d22cc8ffef317a27de879605c3
--- /dev/null
+++ b/node_modules/dequal/readme.md
@@ -0,0 +1,112 @@
+# dequal [![CI](https://github.com/lukeed/dequal/workflows/CI/badge.svg)](https://github.com/lukeed/dequal/actions)
+
+> A tiny (304B to 489B) utility to check for deep equality
+
+This module supports comparison of all types, including `Function`, `RegExp`, `Date`, `Set`, `Map`, `TypedArray`s, `DataView`, `null`, `undefined`, and `NaN` values. Complex values (eg, Objects, Arrays, Sets, Maps, etc) are traversed recursively.
+
+> **Important:**
+> * key order **within Objects** does not matter
+> * value order **within Arrays** _does_ matter
+> * values **within Sets and Maps** use value equality
+> * keys **within Maps** use value equality
+
+
+## Install
+
+```
+$ npm install --save dequal
+```
+
+## Modes
+
+There are two "versions" of `dequal` available:
+
+#### `dequal`
+> **Size (gzip):** 489 bytes<br>
+> **Availability:** [CommonJS](https://unpkg.com/dequal/dist/index.js), [ES Module](https://unpkg.com/dequal/dist/index.mjs), [UMD](https://unpkg.com/dequal/dist/index.min.js)
+
+#### `dequal/lite`
+> **Size (gzip):** 304 bytes<br>
+> **Availability:** [CommonJS](https://unpkg.com/dequal/lite/index.js), [ES Module](https://unpkg.com/dequal/lite/index.mjs)
+
+|  | IE9+ | Number | String | Date | RegExp | Object | Array | Class | Set | Map | ArrayBuffer | [TypedArray](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects) | [DataView](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) |
+|-|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
+| `dequal` | :x: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| `dequal/lite` | :+1: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :x: | :x: |
+
+> <sup>**Note:** Table scrolls horizontally!</sup>
+
+## Usage
+
+```js
+import { dequal } from 'dequal';
+
+dequal(1, 1); //=> true
+dequal({}, {}); //=> true
+dequal('foo', 'foo'); //=> true
+dequal([1, 2, 3], [1, 2, 3]); //=> true
+dequal(dequal, dequal); //=> true
+dequal(/foo/, /foo/); //=> true
+dequal(null, null); //=> true
+dequal(NaN, NaN); //=> true
+dequal([], []); //=> true
+dequal(
+  [{ a:1 }, [{ b:{ c:[1] } }]],
+  [{ a:1 }, [{ b:{ c:[1] } }]]
+); //=> true
+
+dequal(1, '1'); //=> false
+dequal(null, undefined); //=> false
+dequal({ a:1, b:[2,3] }, { a:1, b:[2,5] }); //=> false
+dequal(/foo/i, /bar/g); //=> false
+```
+
+## API
+
+### dequal(foo, bar)
+Returns: `Boolean`
+
+Both `foo` and `bar` can be of any type.<br>
+A `Boolean` is returned indicating if the two were deeply equal.
+
+
+## Benchmarks
+
+> Running Node v10.13.0
+
+The benchmarks can be found in the [`/bench`](/bench) directory. They are separated into two categories:
+
+* `basic` – compares an object comprised of `String`, `Number`, `Date`, `Array`, and `Object` values.
+* `complex` – like `basic`, but adds `RegExp`, `Map`, `Set`, and `Uint8Array` values.
+
+> **Note:** Only candidates that pass validation step(s) are listed. <br>For example, `fast-deep-equal/es6` handles `Set` and `Map` values, but uses _referential equality_ while those listed use _value equality_.
+
+```
+Load times:
+  assert             0.109ms
+  util               0.006ms
+  fast-deep-equal    0.479ms
+  lodash/isequal    22.826ms
+  nano-equal         0.417ms
+  dequal             0.396ms
+  dequal/lite        0.264ms
+
+Benchmark :: basic
+  assert.deepStrictEqual  x    325,262 ops/sec ±0.57% (94 runs sampled)
+  util.isDeepStrictEqual  x    318,812 ops/sec ±0.87% (94 runs sampled)
+  fast-deep-equal         x  1,332,393 ops/sec ±0.36% (93 runs sampled)
+  lodash.isEqual          x    269,129 ops/sec ±0.59% (95 runs sampled)
+  nano-equal              x  1,122,053 ops/sec ±0.36% (96 runs sampled)
+  dequal/lite             x  1,700,972 ops/sec ±0.31% (94 runs sampled)
+  dequal                  x  1,698,972 ops/sec ±0.63% (97 runs sampled)
+
+Benchmark :: complex
+  assert.deepStrictEqual  x    124,518 ops/sec ±0.64% (96 runs sampled)
+  util.isDeepStrictEqual  x    125,113 ops/sec ±0.24% (96 runs sampled)
+  lodash.isEqual          x     58,677 ops/sec ±0.49% (96 runs sampled)
+  dequal                  x    345,386 ops/sec ±0.27% (96 runs sampled)
+```
+
+## License
+
+MIT © [Luke Edwards](https://lukeed.com)
diff --git a/node_modules/dom-helpers/LICENSE b/node_modules/dom-helpers/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..284f555dbe2e5ab732871bcf74ddcb4444c83ea0
--- /dev/null
+++ b/node_modules/dom-helpers/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jason Quense
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/dom-helpers/README.md b/node_modules/dom-helpers/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1ae4dd1d5b5257513d35d55bafb1ce8b7e08b6b3
--- /dev/null
+++ b/node_modules/dom-helpers/README.md
@@ -0,0 +1,70 @@
+# dom-helpers
+
+tiny modular DOM lib for ie9+
+
+## Install
+
+```sh
+npm i -S dom-helpers
+```
+
+Mostly just naive wrappers around common DOM API inconsistencies, Cross browser work is minimal and mostly taken from jQuery. This library doesn't do a lot to normalize behavior across browsers, it mostly seeks to provide a common interface, and eliminate the need to write the same damn `if (ie9)` statements in every project.
+
+For example `on()` works in all browsers ie9+ but it uses the native event system so actual event oddities will continue to exist. If you need **robust** cross-browser support, use jQuery. If you are just tired of rewriting:
+
+```js
+if (document.addEventListener)
+  return (node, eventName, handler, capture) =>
+    node.addEventListener(eventName, handler, capture || false)
+else if (document.attachEvent)
+  return (node, eventName, handler) =>
+    node.attachEvent('on' + eventName, handler)
+```
+
+over and over again, or you need a ok `getComputedStyle` polyfill but don't want to include all of jQuery, use this.
+
+dom-helpers does expect certain, polyfillable, es5 features to be present for which you can use `es5-shim` where needed
+
+The real advantage to this collection is that any method can be required individually, meaning bundlers like webpack will only include the exact methods you use. This is great for environments where jQuery doesn't make sense, such as `React` where you only occasionally need to do direct DOM manipulation.
+
+All methods are exported as a flat namesapce
+
+```js
+var helpers = require('dom-helpers')
+var offset = require('dom-helpers/offset')
+
+// style is a function
+require('dom-helpers/css')(node, { width: '40px' })
+```
+
+- dom-helpers
+  - `ownerDocument(element)`: returns the element's document owner
+  - `ownerWindow(element)`: returns the element's document window
+  - `activeElement`: return focused element safely
+  - `querySelectorAll(element, selector)`: optimized qsa, uses `getElementBy{Id|TagName|ClassName}` if it can.
+  - `contains(container, element)`
+  - `height(element, useClientHeight)`
+  - `width(element, useClientWidth)`
+  - `matches(element, selector)`
+  - `offset(element)` -> `{ top: Number, left: Number, height: Number, width: Number}`
+  - `offsetParent(element)`: return the parent node that the element is offset from
+  - `position(element, [offsetParent]`: return "offset" of the node to its offsetParent, optionally you can specify the offset parent if different than the "real" one
+  - `scrollTop(element, [value])`
+  - `scrollLeft(element, [value])`
+  - `scrollParent(element)`
+  - `addClass(element, className)`
+  - `removeClass(element, className)`
+  - `hasClass(element, className)`
+  - `toggleClass(element, className)`
+  - `style(element, propName)` or `style(element, objectOfPropValues)`
+  - `getComputedStyle(element)` -> `getPropertyValue(name)`
+  - `animate(node, properties, duration, easing, callback)` programmatically start css transitions
+  - `transitionEnd(node, handler, [duration], [padding])` listens for transition end, and ensures that the handler if called even if the transition fails to fire its end event. Will attempt to read duration from the element, otherwise one can be provided
+  - `addEventListener(node, eventName, handler, [options])`:
+  - `removeEventListener(node, eventName, handler, [options])`:
+  - `listen(node, eventName, handler, [options])`: wraps `addEventlistener` and returns a function that calls `removeEventListener` for you
+  - `filter(selector, fn)`: returns a function handler that only fires when the target matches or is contained in the selector ex: `on(list, 'click', filter('li > a', handler))`
+  - `requestAnimationFrame(cb)` returns an ID for canceling
+  - `cancelAnimationFrame(id)`
+  - `scrollbarSize([recalc])` returns the scrollbar's width size in pixels
+  - `scrollTo(element, [scrollParent])`
diff --git a/node_modules/dom-helpers/activeElement/package.json b/node_modules/dom-helpers/activeElement/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1cc9b1ced305da9953d19ba9465159504ab6123b
--- /dev/null
+++ b/node_modules/dom-helpers/activeElement/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/activeElement",
+  "private": true,
+  "main": "../cjs/activeElement.js",
+  "module": "../esm/activeElement.js",
+  "types": "../esm/activeElement.d.ts"
+}
diff --git a/node_modules/dom-helpers/addClass/package.json b/node_modules/dom-helpers/addClass/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5193754fe2aba52620710823030c84a7f7f2d2dc
--- /dev/null
+++ b/node_modules/dom-helpers/addClass/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/addClass",
+  "private": true,
+  "main": "../cjs/addClass.js",
+  "module": "../esm/addClass.js",
+  "types": "../esm/addClass.d.ts"
+}
diff --git a/node_modules/dom-helpers/addEventListener/package.json b/node_modules/dom-helpers/addEventListener/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cd6a6baa5e7bb510a8c107160b8a7c6a634ed195
--- /dev/null
+++ b/node_modules/dom-helpers/addEventListener/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/addEventListener",
+  "private": true,
+  "main": "../cjs/addEventListener.js",
+  "module": "../esm/addEventListener.js",
+  "types": "../esm/addEventListener.d.ts"
+}
diff --git a/node_modules/dom-helpers/animate/package.json b/node_modules/dom-helpers/animate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e2e90c4af3ac3b556a2a7c45dc2e5554feb750e9
--- /dev/null
+++ b/node_modules/dom-helpers/animate/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/animate",
+  "private": true,
+  "main": "../cjs/animate.js",
+  "module": "../esm/animate.js",
+  "types": "../esm/animate.d.ts"
+}
diff --git a/node_modules/dom-helpers/animationFrame/package.json b/node_modules/dom-helpers/animationFrame/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..c6539610c794e0adf55c7850ef8301e3faee2d45
--- /dev/null
+++ b/node_modules/dom-helpers/animationFrame/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/animationFrame",
+  "private": true,
+  "main": "../cjs/animationFrame.js",
+  "module": "../esm/animationFrame.js",
+  "types": "../esm/animationFrame.d.ts"
+}
diff --git a/node_modules/dom-helpers/attribute/package.json b/node_modules/dom-helpers/attribute/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3257bbd9994183adec173da696315c7b57350a3
--- /dev/null
+++ b/node_modules/dom-helpers/attribute/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/attribute",
+  "private": true,
+  "main": "../cjs/attribute.js",
+  "module": "../esm/attribute.js",
+  "types": "../esm/attribute.d.ts"
+}
diff --git a/node_modules/dom-helpers/camelize/package.json b/node_modules/dom-helpers/camelize/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0dc66908e3f8fa4c43dd483789314cf6e287e0a8
--- /dev/null
+++ b/node_modules/dom-helpers/camelize/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/camelize",
+  "private": true,
+  "main": "../cjs/camelize.js",
+  "module": "../esm/camelize.js",
+  "types": "../esm/camelize.d.ts"
+}
diff --git a/node_modules/dom-helpers/camelizeStyle/package.json b/node_modules/dom-helpers/camelizeStyle/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..91efff44648906fe9bd24ce337ec2f851dc503f4
--- /dev/null
+++ b/node_modules/dom-helpers/camelizeStyle/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/camelizeStyle",
+  "private": true,
+  "main": "../cjs/camelizeStyle.js",
+  "module": "../esm/camelizeStyle.js",
+  "types": "../esm/camelizeStyle.d.ts"
+}
diff --git a/node_modules/dom-helpers/canUseDOM/package.json b/node_modules/dom-helpers/canUseDOM/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bc756a5301396e89130291a96834ae482ad66be0
--- /dev/null
+++ b/node_modules/dom-helpers/canUseDOM/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/canUseDOM",
+  "private": true,
+  "main": "../cjs/canUseDOM.js",
+  "module": "../esm/canUseDOM.js",
+  "types": "../esm/canUseDOM.d.ts"
+}
diff --git a/node_modules/dom-helpers/childElements/package.json b/node_modules/dom-helpers/childElements/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bfb8581fb1673ad47f6f721a62066f8e4a50f110
--- /dev/null
+++ b/node_modules/dom-helpers/childElements/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/childElements",
+  "private": true,
+  "main": "../cjs/childElements.js",
+  "module": "../esm/childElements.js",
+  "types": "../esm/childElements.d.ts"
+}
diff --git a/node_modules/dom-helpers/childNodes/package.json b/node_modules/dom-helpers/childNodes/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e1129133acf3471f17f336938d898f9fbaae819a
--- /dev/null
+++ b/node_modules/dom-helpers/childNodes/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/childNodes",
+  "private": true,
+  "main": "../cjs/childNodes.js",
+  "module": "../esm/childNodes.js",
+  "types": "../esm/childNodes.d.ts"
+}
diff --git a/node_modules/dom-helpers/cjs/activeElement.d.ts b/node_modules/dom-helpers/cjs/activeElement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9862eef69133eb88f43ccaffb3c2ad79e57b1c72
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/activeElement.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the actively focused element safely.
+ *
+ * @param doc the document to check
+ */
+export default function activeElement(doc?: Document): Element | null;
diff --git a/node_modules/dom-helpers/cjs/activeElement.js b/node_modules/dom-helpers/cjs/activeElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c83c80f9cc245a88dffdef8909adf29e5362adb
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/activeElement.js
@@ -0,0 +1,34 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = activeElement;
+
+var _ownerDocument = _interopRequireDefault(require("./ownerDocument"));
+
+/**
+ * Returns the actively focused element safely.
+ *
+ * @param doc the document to check
+ */
+function activeElement(doc) {
+  if (doc === void 0) {
+    doc = (0, _ownerDocument.default)();
+  }
+
+  // Support: IE 9 only
+  // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+  try {
+    var active = doc.activeElement; // IE11 returns a seemingly empty object in some cases when accessing
+    // document.activeElement from an <iframe>
+
+    if (!active || !active.nodeName) return null;
+    return active;
+  } catch (e) {
+    /* ie throws if no active element */
+    return doc.body;
+  }
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/addClass.d.ts b/node_modules/dom-helpers/cjs/addClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0a51e16c3ca5a4a6cd8bdf1ec8762dc37fd2b342
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/addClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Adds a CSS class to a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function addClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/cjs/addClass.js b/node_modules/dom-helpers/cjs/addClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd2929b164a6a25a56a4d84c40482956682ee485
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/addClass.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = addClass;
+
+var _hasClass = _interopRequireDefault(require("./hasClass"));
+
+/**
+ * Adds a CSS class to a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+function addClass(element, className) {
+  if (element.classList) element.classList.add(className);else if (!(0, _hasClass.default)(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/addEventListener.d.ts b/node_modules/dom-helpers/cjs/addEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..260a4ae59158f636ee7d2b9950528dd6eeb3af04
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/addEventListener.d.ts
@@ -0,0 +1,16 @@
+export declare let optionsSupported: boolean;
+export declare let onceSupported: boolean;
+export declare type EventHandler<K extends keyof HTMLElementEventMap> = (this: HTMLElement, event: HTMLElementEventMap[K]) => any;
+export declare type TaggedEventHandler<K extends keyof HTMLElementEventMap> = EventHandler<K> & {
+    __once?: EventHandler<K>;
+};
+/**
+ * An `addEventListener` ponyfill, supports the `once` option
+ *
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+declare function addEventListener<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: TaggedEventHandler<K>, options?: boolean | AddEventListenerOptions): void;
+export default addEventListener;
diff --git a/node_modules/dom-helpers/cjs/addEventListener.js b/node_modules/dom-helpers/cjs/addEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..183316ff37a716b3b092359470fe86860dddc095
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/addEventListener.js
@@ -0,0 +1,67 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = exports.onceSupported = exports.optionsSupported = void 0;
+
+var _canUseDOM = _interopRequireDefault(require("./canUseDOM"));
+
+/* eslint-disable no-return-assign */
+var optionsSupported = false;
+exports.optionsSupported = optionsSupported;
+var onceSupported = false;
+exports.onceSupported = onceSupported;
+
+try {
+  var options = {
+    get passive() {
+      return exports.optionsSupported = optionsSupported = true;
+    },
+
+    get once() {
+      // eslint-disable-next-line no-multi-assign
+      return exports.onceSupported = onceSupported = exports.optionsSupported = optionsSupported = true;
+    }
+
+  };
+
+  if (_canUseDOM.default) {
+    window.addEventListener('test', options, options);
+    window.removeEventListener('test', options, true);
+  }
+} catch (e) {
+  /* */
+}
+
+/**
+ * An `addEventListener` ponyfill, supports the `once` option
+ * 
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+function addEventListener(node, eventName, handler, options) {
+  if (options && typeof options !== 'boolean' && !onceSupported) {
+    var once = options.once,
+        capture = options.capture;
+    var wrappedHandler = handler;
+
+    if (!onceSupported && once) {
+      wrappedHandler = handler.__once || function onceHandler(event) {
+        this.removeEventListener(eventName, onceHandler, capture);
+        handler.call(this, event);
+      };
+
+      handler.__once = wrappedHandler;
+    }
+
+    node.addEventListener(eventName, wrappedHandler, optionsSupported ? options : capture);
+  }
+
+  node.addEventListener(eventName, handler, options);
+}
+
+var _default = addEventListener;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/animate.d.ts b/node_modules/dom-helpers/cjs/animate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe59582bec631b0d1ce645d9577f72548223268a
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/animate.d.ts
@@ -0,0 +1,19 @@
+import { EventHandler } from './addEventListener';
+import { TransformValue } from './isTransform';
+import { Property } from './types';
+declare type AnimateProperties = Record<Property | TransformValue, string>;
+interface Options {
+    node: HTMLElement;
+    properties: AnimateProperties;
+    duration?: number;
+    easing?: string;
+    callback?: EventHandler<'transitionend'>;
+}
+interface Cancel {
+    cancel(): void;
+}
+declare function animate(options: Options): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number, callback: EventHandler<'transitionend'>): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number, easing: string, callback: EventHandler<'transitionend'>): Cancel;
+export default animate;
diff --git a/node_modules/dom-helpers/cjs/animate.js b/node_modules/dom-helpers/cjs/animate.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd52ff4320502f0ed3f3c9f2ba034a9cfea5b49f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/animate.js
@@ -0,0 +1,103 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _css = _interopRequireDefault(require("./css"));
+
+var _hyphenate = _interopRequireDefault(require("./hyphenate"));
+
+var _isTransform = _interopRequireDefault(require("./isTransform"));
+
+var _transitionEnd = _interopRequireDefault(require("./transitionEnd"));
+
+var reset = {
+  transition: '',
+  'transition-duration': '',
+  'transition-delay': '',
+  'transition-timing-function': ''
+};
+
+// super lean animate function for transitions
+// doesn't support all translations to keep it matching the jquery API
+
+/**
+ * code in part from: Zepto 1.1.4 | zeptojs.com/license
+ */
+function _animate(_ref) {
+  var node = _ref.node,
+      properties = _ref.properties,
+      _ref$duration = _ref.duration,
+      duration = _ref$duration === void 0 ? 200 : _ref$duration,
+      easing = _ref.easing,
+      callback = _ref.callback;
+  var cssProperties = [];
+  var cssValues = {};
+  var transforms = '';
+  Object.keys(properties).forEach(function (key) {
+    var value = properties[key];
+    if ((0, _isTransform.default)(key)) transforms += key + "(" + value + ") ";else {
+      cssValues[key] = value;
+      cssProperties.push((0, _hyphenate.default)(key));
+    }
+  });
+
+  if (transforms) {
+    cssValues.transform = transforms;
+    cssProperties.push('transform');
+  }
+
+  function done(event) {
+    if (event.target !== event.currentTarget) return;
+    (0, _css.default)(node, reset);
+    if (callback) callback.call(this, event);
+  }
+
+  if (duration > 0) {
+    cssValues.transition = cssProperties.join(', ');
+    cssValues['transition-duration'] = duration / 1000 + "s";
+    cssValues['transition-delay'] = '0s';
+    cssValues['transition-timing-function'] = easing || 'linear';
+  }
+
+  var removeListener = (0, _transitionEnd.default)(node, done, duration); // eslint-disable-next-line no-unused-expressions
+
+  node.clientLeft; // trigger page reflow
+
+  (0, _css.default)(node, cssValues);
+  return {
+    cancel: function cancel() {
+      removeListener();
+      (0, _css.default)(node, reset);
+    }
+  };
+}
+
+function animate(nodeOrOptions, properties, duration, easing, callback) {
+  if (!('nodeType' in nodeOrOptions)) {
+    return _animate(nodeOrOptions);
+  }
+
+  if (!properties) {
+    throw new Error('must include properties to animate');
+  }
+
+  if (typeof easing === 'function') {
+    callback = easing;
+    easing = '';
+  }
+
+  return _animate({
+    node: nodeOrOptions,
+    properties: properties,
+    duration: duration,
+    easing: easing,
+    callback: callback
+  });
+}
+
+var _default = animate;
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/animationFrame.d.ts b/node_modules/dom-helpers/cjs/animationFrame.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7b60bb5f359c1cd778bf5cbfaaff2ba5ab5824a5
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/animationFrame.d.ts
@@ -0,0 +1,2 @@
+export declare const cancel: (id: number) => void;
+export declare const request: typeof requestAnimationFrame;
diff --git a/node_modules/dom-helpers/cjs/animationFrame.js b/node_modules/dom-helpers/cjs/animationFrame.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc2d18da87298d6cbefa9c1fe7d579fa23574af8
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/animationFrame.js
@@ -0,0 +1,52 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.request = exports.cancel = void 0;
+
+var _canUseDOM = _interopRequireDefault(require("./canUseDOM"));
+
+/* https://github.com/component/raf */
+var prev = new Date().getTime();
+
+function fallback(fn) {
+  var curr = new Date().getTime();
+  var ms = Math.max(0, 16 - (curr - prev));
+  var handle = setTimeout(fn, ms);
+  prev = curr;
+  return handle;
+}
+
+var vendors = ['', 'webkit', 'moz', 'o', 'ms'];
+var cancelMethod = 'clearTimeout';
+var rafImpl = fallback; // eslint-disable-next-line import/no-mutable-exports
+
+var getKey = function getKey(vendor, k) {
+  return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + "AnimationFrame";
+};
+
+if (_canUseDOM.default) {
+  vendors.some(function (vendor) {
+    var rafMethod = getKey(vendor, 'request');
+
+    if (rafMethod in window) {
+      cancelMethod = getKey(vendor, 'cancel'); // @ts-ignore
+
+      rafImpl = function rafImpl(cb) {
+        return window[rafMethod](cb);
+      };
+    }
+
+    return !!rafImpl;
+  });
+}
+
+var cancel = function cancel(id) {
+  // @ts-ignore
+  if (typeof window[cancelMethod] === 'function') window[cancelMethod](id);
+};
+
+exports.cancel = cancel;
+var request = rafImpl;
+exports.request = request;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/attribute.d.ts b/node_modules/dom-helpers/cjs/attribute.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d330a18ca37ad9f6ac5b7b9fd0697fa8e1c0aaa7
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/attribute.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Gets or sets an attribute of a given element.
+ *
+ * @param node the element
+ * @param attr the attribute to get or set
+ * @param val the attribute value
+ */
+export default function attribute(node: Element | null, attr: string, val?: string | boolean | null): string | null | undefined;
diff --git a/node_modules/dom-helpers/cjs/attribute.js b/node_modules/dom-helpers/cjs/attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d857be765e34e7b24e6bc4c08816255ec6e190c
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/attribute.js
@@ -0,0 +1,27 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = attribute;
+
+/**
+ * Gets or sets an attribute of a given element.
+ * 
+ * @param node the element
+ * @param attr the attribute to get or set
+ * @param val the attribute value
+ */
+function attribute(node, attr, val) {
+  if (node) {
+    if (typeof val === 'undefined') {
+      return node.getAttribute(attr);
+    }
+
+    if (!val && val !== '') {
+      node.removeAttribute(attr);
+    } else {
+      node.setAttribute(attr, String(val));
+    }
+  }
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/camelize.d.ts b/node_modules/dom-helpers/cjs/camelize.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e481d704a29de32a95ce52e5b2e25514650846c0
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/camelize.d.ts
@@ -0,0 +1 @@
+export default function camelize(string: string): string;
diff --git a/node_modules/dom-helpers/cjs/camelize.js b/node_modules/dom-helpers/cjs/camelize.js
new file mode 100644
index 0000000000000000000000000000000000000000..742154b8816b50cd32f742c6ecbfe2365cb48244
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/camelize.js
@@ -0,0 +1,13 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = camelize;
+var rHyphen = /-(.)/g;
+
+function camelize(string) {
+  return string.replace(rHyphen, function (_, chr) {
+    return chr.toUpperCase();
+  });
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/camelizeStyle.d.ts b/node_modules/dom-helpers/cjs/camelizeStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0c232be81f241839c40342e6e480708eccc5f830
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/camelizeStyle.d.ts
@@ -0,0 +1,2 @@
+import { CamelProperty, Property } from './types';
+export default function camelizeStyleName<T extends string = Property>(string: T): CamelProperty;
diff --git a/node_modules/dom-helpers/cjs/camelizeStyle.js b/node_modules/dom-helpers/cjs/camelizeStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..4896da57c42fff87dbec952571aeb4abfc25daff
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/camelizeStyle.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = camelizeStyleName;
+
+var _camelize = _interopRequireDefault(require("./camelize"));
+
+/**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js
+ */
+var msPattern = /^-ms-/;
+
+function camelizeStyleName(string) {
+  return (0, _camelize.default)(string.replace(msPattern, 'ms-'));
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/canUseDOM.d.ts b/node_modules/dom-helpers/cjs/canUseDOM.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc73b3e6308ba0111f0ca267a694200ce562d7b8
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/canUseDOM.d.ts
@@ -0,0 +1,2 @@
+declare const _default: boolean;
+export default _default;
diff --git a/node_modules/dom-helpers/cjs/canUseDOM.js b/node_modules/dom-helpers/cjs/canUseDOM.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bce22af2843e1ad3d0941fd668e24229d12585a
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/canUseDOM.js
@@ -0,0 +1,9 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _default = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/childElements.d.ts b/node_modules/dom-helpers/cjs/childElements.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2d8c46732c0375609f5f39ec2dbc9256d2cbac5c
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/childElements.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all child elements of an element.
+ *
+ * @param node the element
+ */
+export default function childElements(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/cjs/childElements.js b/node_modules/dom-helpers/cjs/childElements.js
new file mode 100644
index 0000000000000000000000000000000000000000..9efd4ad94b1e883b874c8bf425f90ca3894c25e7
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/childElements.js
@@ -0,0 +1,15 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = childElements;
+
+/**
+ * Collects all child elements of an element.
+ * 
+ * @param node the element
+ */
+function childElements(node) {
+  return node ? Array.from(node.children) : [];
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/childNodes.d.ts b/node_modules/dom-helpers/cjs/childNodes.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..467a41ab60c03a5faf838cd19193545999195f36
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/childNodes.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all child nodes of an element.
+ *
+ * @param node the node
+ */
+export default function childNodes(node: Element | null): Node[];
diff --git a/node_modules/dom-helpers/cjs/childNodes.js b/node_modules/dom-helpers/cjs/childNodes.js
new file mode 100644
index 0000000000000000000000000000000000000000..202b9c715de8572f3067b2712ac69cee2abadc10
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/childNodes.js
@@ -0,0 +1,16 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = childNodes;
+var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);
+/**
+ * Collects all child nodes of an element.
+ * 
+ * @param node the node
+ */
+
+function childNodes(node) {
+  return node ? toArray(node.childNodes) : [];
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/clear.d.ts b/node_modules/dom-helpers/cjs/clear.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bfa0282bc1e3e281450d5e4dc71222d2520554ff
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/clear.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Removes all child nodes from a given node.
+ *
+ * @param node the node to clear
+ */
+export default function clear(node: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/cjs/clear.js b/node_modules/dom-helpers/cjs/clear.js
new file mode 100644
index 0000000000000000000000000000000000000000..84c4d5535211f4b438c4f9b1c2b474cadf0f4e55
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/clear.js
@@ -0,0 +1,23 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = clear;
+
+/**
+ * Removes all child nodes from a given node.
+ * 
+ * @param node the node to clear
+ */
+function clear(node) {
+  if (node) {
+    while (node.firstChild) {
+      node.removeChild(node.firstChild);
+    }
+
+    return node;
+  }
+
+  return null;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/closest.d.ts b/node_modules/dom-helpers/cjs/closest.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d2bfe81311b4e736a78336b8940561391af31526
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/closest.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Returns the closest parent element that matches a given selector.
+ *
+ * @param node the reference element
+ * @param selector the selector to match
+ * @param stopAt stop traversing when this element is found
+ */
+export default function closest(node: Element, selector: string, stopAt?: Element): Element | null;
diff --git a/node_modules/dom-helpers/cjs/closest.js b/node_modules/dom-helpers/cjs/closest.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6a8186c362ed3489f0c0f346c1d9cff484c1315
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/closest.js
@@ -0,0 +1,29 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = closest;
+
+var _matches = _interopRequireDefault(require("./matches"));
+
+/**
+ * Returns the closest parent element that matches a given selector.
+ * 
+ * @param node the reference element
+ * @param selector the selector to match
+ * @param stopAt stop traversing when this element is found
+ */
+function closest(node, selector, stopAt) {
+  if (node.closest && !stopAt) node.closest(selector);
+  var nextNode = node;
+
+  do {
+    if ((0, _matches.default)(nextNode, selector)) return nextNode;
+    nextNode = nextNode.parentElement;
+  } while (nextNode && nextNode !== stopAt && nextNode.nodeType === document.ELEMENT_NODE);
+
+  return null;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/collectElements.d.ts b/node_modules/dom-helpers/cjs/collectElements.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d24bd003bd0dc8d638021708c28417724f2de6fa
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/collectElements.d.ts
@@ -0,0 +1,3 @@
+declare type TraverseDirection = 'parentElement' | 'previousElementSibling' | 'nextElementSibling';
+export default function collectElements(node: Element | null, direction: TraverseDirection): Element[];
+export {};
diff --git a/node_modules/dom-helpers/cjs/collectElements.js b/node_modules/dom-helpers/cjs/collectElements.js
new file mode 100644
index 0000000000000000000000000000000000000000..1307648b2c46294c5ea5c87e56323cb5965c7432
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/collectElements.js
@@ -0,0 +1,19 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = collectElements;
+
+function collectElements(node, direction) {
+  var nextNode = null;
+  var nodes = [];
+  nextNode = node ? node[direction] : null;
+
+  while (nextNode && nextNode.nodeType !== 9) {
+    nodes.push(nextNode);
+    nextNode = nextNode[direction] || null;
+  }
+
+  return nodes;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/collectSiblings.d.ts b/node_modules/dom-helpers/cjs/collectSiblings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a54a3592effd00fbf2078340f13cfbab7fb4a40b
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/collectSiblings.d.ts
@@ -0,0 +1 @@
+export default function collectSiblings(node: Element | null, refNode?: Element | null, selector?: string | null): Element[];
diff --git a/node_modules/dom-helpers/cjs/collectSiblings.js b/node_modules/dom-helpers/cjs/collectSiblings.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1f52d69e6a4a56b553f00aa1eab7f37a7a90a7d
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/collectSiblings.js
@@ -0,0 +1,34 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = collectSiblings;
+
+var _matches = _interopRequireDefault(require("./matches"));
+
+function collectSiblings(node, refNode, selector) {
+  if (refNode === void 0) {
+    refNode = null;
+  }
+
+  if (selector === void 0) {
+    selector = null;
+  }
+
+  var siblings = [];
+
+  for (; node; node = node.nextElementSibling) {
+    if (node !== refNode) {
+      if (selector && (0, _matches.default)(node, selector)) {
+        break;
+      }
+
+      siblings.push(node);
+    }
+  }
+
+  return siblings;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/contains.d.ts b/node_modules/dom-helpers/cjs/contains.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d22b2c0d40c0f8e31b352ce3087f32d4b93f7ed9
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/contains.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if an element contains another given element.
+ *
+ * @param context the context element
+ * @param node the element to check
+ */
+export default function contains(context: Element, node: Element): boolean | undefined;
diff --git a/node_modules/dom-helpers/cjs/contains.js b/node_modules/dom-helpers/cjs/contains.js
new file mode 100644
index 0000000000000000000000000000000000000000..2349f9a9da37623d2d7cf322d91d1d694a3fafe1
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/contains.js
@@ -0,0 +1,21 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = contains;
+
+/* eslint-disable no-bitwise, no-cond-assign */
+
+/**
+ * Checks if an element contains another given element.
+ * 
+ * @param context the context element
+ * @param node the element to check
+ */
+function contains(context, node) {
+  // HTML DOM and SVG DOM may have different support levels,
+  // so we need to check on context instead of a document root element.
+  if (context.contains) return context.contains(node);
+  if (context.compareDocumentPosition) return context === node || !!(context.compareDocumentPosition(node) & 16);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/css.d.ts b/node_modules/dom-helpers/cjs/css.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..473f2b84b1c7ea56e2302e9f4b78cdfb46096055
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/css.d.ts
@@ -0,0 +1,6 @@
+import * as CSS from 'csstype';
+import { CamelProperty, HyphenProperty, Property } from './types';
+declare function style(node: HTMLElement, property: Partial<Record<Property, string>>): void;
+declare function style<T extends HyphenProperty>(node: HTMLElement, property: T): CSS.PropertiesHyphen[T];
+declare function style<T extends CamelProperty>(node: HTMLElement, property: T): CSS.Properties[T];
+export default style;
diff --git a/node_modules/dom-helpers/cjs/css.js b/node_modules/dom-helpers/cjs/css.js
new file mode 100644
index 0000000000000000000000000000000000000000..8c4bf8db730cde7bcf92e6df78be96b0d8488c68
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/css.js
@@ -0,0 +1,43 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _getComputedStyle = _interopRequireDefault(require("./getComputedStyle"));
+
+var _hyphenateStyle = _interopRequireDefault(require("./hyphenateStyle"));
+
+var _isTransform = _interopRequireDefault(require("./isTransform"));
+
+function style(node, property) {
+  var css = '';
+  var transforms = '';
+
+  if (typeof property === 'string') {
+    return node.style.getPropertyValue((0, _hyphenateStyle.default)(property)) || (0, _getComputedStyle.default)(node).getPropertyValue((0, _hyphenateStyle.default)(property));
+  }
+
+  Object.keys(property).forEach(function (key) {
+    var value = property[key];
+
+    if (!value && value !== 0) {
+      node.style.removeProperty((0, _hyphenateStyle.default)(key));
+    } else if ((0, _isTransform.default)(key)) {
+      transforms += key + "(" + value + ") ";
+    } else {
+      css += (0, _hyphenateStyle.default)(key) + ": " + value + ";";
+    }
+  });
+
+  if (transforms) {
+    css += "transform: " + transforms + ";";
+  }
+
+  node.style.cssText += ";" + css;
+}
+
+var _default = style;
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/filterEventHandler.d.ts b/node_modules/dom-helpers/cjs/filterEventHandler.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6a64be2e3878ac1b2b8396739e4b518e5fa8f70f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/filterEventHandler.d.ts
@@ -0,0 +1,2 @@
+import { EventHandler } from './addEventListener';
+export default function filterEvents<K extends keyof HTMLElementEventMap>(selector: string, handler: EventHandler<K>): EventHandler<K>;
diff --git a/node_modules/dom-helpers/cjs/filterEventHandler.js b/node_modules/dom-helpers/cjs/filterEventHandler.js
new file mode 100644
index 0000000000000000000000000000000000000000..d3dc018f9bc8d46a6f7d6dbb4fd34de8bc1eccd3
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/filterEventHandler.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = filterEvents;
+
+var _contains = _interopRequireDefault(require("./contains"));
+
+var _querySelectorAll = _interopRequireDefault(require("./querySelectorAll"));
+
+function filterEvents(selector, handler) {
+  return function filterHandler(e) {
+    var top = e.currentTarget;
+    var target = e.target;
+    var matches = (0, _querySelectorAll.default)(top, selector);
+    if (matches.some(function (match) {
+      return (0, _contains.default)(match, target);
+    })) handler.call(this, e);
+  };
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/getComputedStyle.d.ts b/node_modules/dom-helpers/cjs/getComputedStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..653a12f9ae560fa27ec78303452a306451bc4029
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/getComputedStyle.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns one or all computed style properties of an element.
+ *
+ * @param node the element
+ * @param psuedoElement the style property
+ */
+export default function getComputedStyle(node: HTMLElement, psuedoElement?: string): CSSStyleDeclaration;
diff --git a/node_modules/dom-helpers/cjs/getComputedStyle.js b/node_modules/dom-helpers/cjs/getComputedStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..379887b077f6c3e659295093c2ac199ac2a0e242
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/getComputedStyle.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = getComputedStyle;
+
+var _ownerWindow = _interopRequireDefault(require("./ownerWindow"));
+
+/**
+ * Returns one or all computed style properties of an element.
+ * 
+ * @param node the element
+ * @param psuedoElement the style property
+ */
+function getComputedStyle(node, psuedoElement) {
+  return (0, _ownerWindow.default)(node).getComputedStyle(node, psuedoElement);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/getScrollAccessor.d.ts b/node_modules/dom-helpers/cjs/getScrollAccessor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9814cbe23dc01c1c969de25857e7b550a86fd5fb
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/getScrollAccessor.d.ts
@@ -0,0 +1,4 @@
+export default function getscrollAccessor(offset: 'pageXOffset' | 'pageYOffset'): {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
diff --git a/node_modules/dom-helpers/cjs/getScrollAccessor.js b/node_modules/dom-helpers/cjs/getScrollAccessor.js
new file mode 100644
index 0000000000000000000000000000000000000000..8caeed714ca5c0ab85b68233b23348db4c17ff75
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/getScrollAccessor.js
@@ -0,0 +1,30 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = getscrollAccessor;
+
+var _isWindow = _interopRequireDefault(require("./isWindow"));
+
+function getscrollAccessor(offset) {
+  var prop = offset === 'pageXOffset' ? 'scrollLeft' : 'scrollTop';
+
+  function scrollAccessor(node, val) {
+    var win = (0, _isWindow.default)(node);
+
+    if (val === undefined) {
+      return win ? win[offset] : node[prop];
+    }
+
+    if (win) {
+      win.scrollTo(win[offset], val);
+    } else {
+      node[prop] = val;
+    }
+  }
+
+  return scrollAccessor;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/hasClass.d.ts b/node_modules/dom-helpers/cjs/hasClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b7d96e3154aa7716e32b963e4ef66d1672654f5
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hasClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if a given element has a CSS class.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function hasClass(element: Element | SVGElement, className: string): boolean;
diff --git a/node_modules/dom-helpers/cjs/hasClass.js b/node_modules/dom-helpers/cjs/hasClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..7620383054f1dee0e83c68309c253f9d96179ca2
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hasClass.js
@@ -0,0 +1,17 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = hasClass;
+
+/**
+ * Checks if a given element has a CSS class.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+function hasClass(element, className) {
+  if (element.classList) return !!className && element.classList.contains(className);
+  return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/height.d.ts b/node_modules/dom-helpers/cjs/height.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9086ea3b98a6b5e6bfde7bc9b17d2e8d442be114
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/height.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns the height of a given element.
+ *
+ * @param node the element
+ * @param client whether to use `clientHeight` if possible
+ */
+export default function height(node: HTMLElement, client?: boolean): number;
diff --git a/node_modules/dom-helpers/cjs/height.js b/node_modules/dom-helpers/cjs/height.js
new file mode 100644
index 0000000000000000000000000000000000000000..c5a4f13a46b6dde1dadbef624624a3df2005866f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/height.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = height;
+
+var _isWindow = _interopRequireDefault(require("./isWindow"));
+
+var _offset = _interopRequireDefault(require("./offset"));
+
+/**
+ * Returns the height of a given element.
+ * 
+ * @param node the element
+ * @param client whether to use `clientHeight` if possible
+ */
+function height(node, client) {
+  var win = (0, _isWindow.default)(node);
+  return win ? win.innerHeight : client ? node.clientHeight : (0, _offset.default)(node).height;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/hyphenate.d.ts b/node_modules/dom-helpers/cjs/hyphenate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f5c1708c65cefe93b29dacb503605f5ec31d8d9
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hyphenate.d.ts
@@ -0,0 +1 @@
+export default function hyphenate(string: string): string;
diff --git a/node_modules/dom-helpers/cjs/hyphenate.js b/node_modules/dom-helpers/cjs/hyphenate.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce6248c12ae0d1aad92951966a049960570cc36f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hyphenate.js
@@ -0,0 +1,11 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = hyphenate;
+var rUpper = /([A-Z])/g;
+
+function hyphenate(string) {
+  return string.replace(rUpper, '-$1').toLowerCase();
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/hyphenateStyle.d.ts b/node_modules/dom-helpers/cjs/hyphenateStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a755d1f03e355257a1aa2bc6e027f9ba42fc2ff1
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hyphenateStyle.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js
+ */
+import { Property } from './types';
+export default function hyphenateStyleName(string: Property): Property;
diff --git a/node_modules/dom-helpers/cjs/hyphenateStyle.js b/node_modules/dom-helpers/cjs/hyphenateStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c9e9b143af8994160b95d81049313d17ba82521
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/hyphenateStyle.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = hyphenateStyleName;
+
+var _hyphenate = _interopRequireDefault(require("./hyphenate"));
+
+/**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js
+ */
+var msPattern = /^ms-/;
+
+function hyphenateStyleName(string) {
+  return (0, _hyphenate.default)(string).replace(msPattern, '-ms-');
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/index.d.ts b/node_modules/dom-helpers/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b47653613792f7ba731097b2bc31c4517ae20d66
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/index.d.ts
@@ -0,0 +1,99 @@
+import activeElement from './activeElement';
+import addClass from './addClass';
+import addEventListener from './addEventListener';
+import animate from './animate';
+import { cancel as cancelAnimationFrame, request as requestAnimationFrame } from './animationFrame';
+import attribute from './attribute';
+import childElements from './childElements';
+import clear from './clear';
+import closest from './closest';
+import contains from './contains';
+import childNodes from './childNodes';
+import style from './css';
+import filter from './filterEventHandler';
+import getComputedStyle from './getComputedStyle';
+import hasClass from './hasClass';
+import height from './height';
+import insertAfter from './insertAfter';
+import isInput from './isInput';
+import isVisible from './isVisible';
+import listen from './listen';
+import matches from './matches';
+import nextUntil from './nextUntil';
+import offset from './offset';
+import offsetParent from './offsetParent';
+import ownerDocument from './ownerDocument';
+import ownerWindow from './ownerWindow';
+import parents from './parents';
+import position from './position';
+import prepend from './prepend';
+import querySelectorAll from './querySelectorAll';
+import remove from './remove';
+import removeClass from './removeClass';
+import removeEventListener from './removeEventListener';
+import scrollbarSize from './scrollbarSize';
+import scrollLeft from './scrollLeft';
+import scrollParent from './scrollParent';
+import scrollTo from './scrollTo';
+import scrollTop from './scrollTop';
+import siblings from './siblings';
+import text from './text';
+import toggleClass from './toggleClass';
+import transitionEnd from './transitionEnd';
+import triggerEvent from './triggerEvent';
+import width from './width';
+export { addEventListener, removeEventListener, triggerEvent, animate, filter, listen, style, getComputedStyle, attribute, activeElement, ownerDocument, ownerWindow, requestAnimationFrame, cancelAnimationFrame, matches, height, width, offset, offsetParent, position, contains, scrollbarSize, scrollLeft, scrollParent, scrollTo, scrollTop, querySelectorAll, closest, addClass, removeClass, hasClass, toggleClass, transitionEnd, childNodes, childElements, nextUntil, parents, siblings, clear, insertAfter, isInput, isVisible, prepend, remove, text, };
+declare const _default: {
+    addEventListener: typeof addEventListener;
+    removeEventListener: typeof removeEventListener;
+    triggerEvent: typeof triggerEvent;
+    animate: typeof animate;
+    filter: typeof filter;
+    listen: typeof listen;
+    style: typeof style;
+    getComputedStyle: typeof getComputedStyle;
+    attribute: typeof attribute;
+    activeElement: typeof activeElement;
+    ownerDocument: typeof ownerDocument;
+    ownerWindow: typeof ownerWindow;
+    requestAnimationFrame: typeof globalThis.requestAnimationFrame;
+    cancelAnimationFrame: (id: number) => void;
+    matches: typeof matches;
+    height: typeof height;
+    width: typeof width;
+    offset: typeof offset;
+    offsetParent: typeof offsetParent;
+    position: typeof position;
+    contains: typeof contains;
+    scrollbarSize: typeof scrollbarSize;
+    scrollLeft: {
+        (node: Element): number;
+        (node: Element, val: number): undefined;
+    };
+    scrollParent: typeof scrollParent;
+    scrollTo: typeof scrollTo;
+    scrollTop: {
+        (node: Element): number;
+        (node: Element, val: number): undefined;
+    };
+    querySelectorAll: typeof querySelectorAll;
+    closest: typeof closest;
+    addClass: typeof addClass;
+    removeClass: typeof removeClass;
+    hasClass: typeof hasClass;
+    toggleClass: typeof toggleClass;
+    transitionEnd: typeof transitionEnd;
+    childNodes: typeof childNodes;
+    childElements: typeof childElements;
+    nextUntil: typeof nextUntil;
+    parents: typeof parents;
+    siblings: typeof siblings;
+    clear: typeof clear;
+    insertAfter: typeof insertAfter;
+    isInput: typeof isInput;
+    isVisible: typeof isVisible;
+    prepend: typeof prepend;
+    remove: typeof remove;
+    text: typeof text;
+};
+export default _default;
diff --git a/node_modules/dom-helpers/cjs/index.js b/node_modules/dom-helpers/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6bf7ad876d33f59ea59ca447213b8c39705dca82
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/index.js
@@ -0,0 +1,231 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _activeElement = _interopRequireDefault(require("./activeElement"));
+
+exports.activeElement = _activeElement.default;
+
+var _addClass = _interopRequireDefault(require("./addClass"));
+
+exports.addClass = _addClass.default;
+
+var _addEventListener = _interopRequireDefault(require("./addEventListener"));
+
+exports.addEventListener = _addEventListener.default;
+
+var _animate = _interopRequireDefault(require("./animate"));
+
+exports.animate = _animate.default;
+
+var _animationFrame = require("./animationFrame");
+
+exports.cancelAnimationFrame = _animationFrame.cancel;
+exports.requestAnimationFrame = _animationFrame.request;
+
+var _attribute = _interopRequireDefault(require("./attribute"));
+
+exports.attribute = _attribute.default;
+
+var _childElements = _interopRequireDefault(require("./childElements"));
+
+exports.childElements = _childElements.default;
+
+var _clear = _interopRequireDefault(require("./clear"));
+
+exports.clear = _clear.default;
+
+var _closest = _interopRequireDefault(require("./closest"));
+
+exports.closest = _closest.default;
+
+var _contains = _interopRequireDefault(require("./contains"));
+
+exports.contains = _contains.default;
+
+var _childNodes = _interopRequireDefault(require("./childNodes"));
+
+exports.childNodes = _childNodes.default;
+
+var _css = _interopRequireDefault(require("./css"));
+
+exports.style = _css.default;
+
+var _filterEventHandler = _interopRequireDefault(require("./filterEventHandler"));
+
+exports.filter = _filterEventHandler.default;
+
+var _getComputedStyle = _interopRequireDefault(require("./getComputedStyle"));
+
+exports.getComputedStyle = _getComputedStyle.default;
+
+var _hasClass = _interopRequireDefault(require("./hasClass"));
+
+exports.hasClass = _hasClass.default;
+
+var _height = _interopRequireDefault(require("./height"));
+
+exports.height = _height.default;
+
+var _insertAfter = _interopRequireDefault(require("./insertAfter"));
+
+exports.insertAfter = _insertAfter.default;
+
+var _isInput = _interopRequireDefault(require("./isInput"));
+
+exports.isInput = _isInput.default;
+
+var _isVisible = _interopRequireDefault(require("./isVisible"));
+
+exports.isVisible = _isVisible.default;
+
+var _listen = _interopRequireDefault(require("./listen"));
+
+exports.listen = _listen.default;
+
+var _matches = _interopRequireDefault(require("./matches"));
+
+exports.matches = _matches.default;
+
+var _nextUntil = _interopRequireDefault(require("./nextUntil"));
+
+exports.nextUntil = _nextUntil.default;
+
+var _offset = _interopRequireDefault(require("./offset"));
+
+exports.offset = _offset.default;
+
+var _offsetParent = _interopRequireDefault(require("./offsetParent"));
+
+exports.offsetParent = _offsetParent.default;
+
+var _ownerDocument = _interopRequireDefault(require("./ownerDocument"));
+
+exports.ownerDocument = _ownerDocument.default;
+
+var _ownerWindow = _interopRequireDefault(require("./ownerWindow"));
+
+exports.ownerWindow = _ownerWindow.default;
+
+var _parents = _interopRequireDefault(require("./parents"));
+
+exports.parents = _parents.default;
+
+var _position = _interopRequireDefault(require("./position"));
+
+exports.position = _position.default;
+
+var _prepend = _interopRequireDefault(require("./prepend"));
+
+exports.prepend = _prepend.default;
+
+var _querySelectorAll = _interopRequireDefault(require("./querySelectorAll"));
+
+exports.querySelectorAll = _querySelectorAll.default;
+
+var _remove = _interopRequireDefault(require("./remove"));
+
+exports.remove = _remove.default;
+
+var _removeClass = _interopRequireDefault(require("./removeClass"));
+
+exports.removeClass = _removeClass.default;
+
+var _removeEventListener = _interopRequireDefault(require("./removeEventListener"));
+
+exports.removeEventListener = _removeEventListener.default;
+
+var _scrollbarSize = _interopRequireDefault(require("./scrollbarSize"));
+
+exports.scrollbarSize = _scrollbarSize.default;
+
+var _scrollLeft = _interopRequireDefault(require("./scrollLeft"));
+
+exports.scrollLeft = _scrollLeft.default;
+
+var _scrollParent = _interopRequireDefault(require("./scrollParent"));
+
+exports.scrollParent = _scrollParent.default;
+
+var _scrollTo = _interopRequireDefault(require("./scrollTo"));
+
+exports.scrollTo = _scrollTo.default;
+
+var _scrollTop = _interopRequireDefault(require("./scrollTop"));
+
+exports.scrollTop = _scrollTop.default;
+
+var _siblings = _interopRequireDefault(require("./siblings"));
+
+exports.siblings = _siblings.default;
+
+var _text = _interopRequireDefault(require("./text"));
+
+exports.text = _text.default;
+
+var _toggleClass = _interopRequireDefault(require("./toggleClass"));
+
+exports.toggleClass = _toggleClass.default;
+
+var _transitionEnd = _interopRequireDefault(require("./transitionEnd"));
+
+exports.transitionEnd = _transitionEnd.default;
+
+var _triggerEvent = _interopRequireDefault(require("./triggerEvent"));
+
+exports.triggerEvent = _triggerEvent.default;
+
+var _width = _interopRequireDefault(require("./width"));
+
+exports.width = _width.default;
+var _default = {
+  addEventListener: _addEventListener.default,
+  removeEventListener: _removeEventListener.default,
+  triggerEvent: _triggerEvent.default,
+  animate: _animate.default,
+  filter: _filterEventHandler.default,
+  listen: _listen.default,
+  style: _css.default,
+  getComputedStyle: _getComputedStyle.default,
+  attribute: _attribute.default,
+  activeElement: _activeElement.default,
+  ownerDocument: _ownerDocument.default,
+  ownerWindow: _ownerWindow.default,
+  requestAnimationFrame: _animationFrame.request,
+  cancelAnimationFrame: _animationFrame.cancel,
+  matches: _matches.default,
+  height: _height.default,
+  width: _width.default,
+  offset: _offset.default,
+  offsetParent: _offsetParent.default,
+  position: _position.default,
+  contains: _contains.default,
+  scrollbarSize: _scrollbarSize.default,
+  scrollLeft: _scrollLeft.default,
+  scrollParent: _scrollParent.default,
+  scrollTo: _scrollTo.default,
+  scrollTop: _scrollTop.default,
+  querySelectorAll: _querySelectorAll.default,
+  closest: _closest.default,
+  addClass: _addClass.default,
+  removeClass: _removeClass.default,
+  hasClass: _hasClass.default,
+  toggleClass: _toggleClass.default,
+  transitionEnd: _transitionEnd.default,
+  childNodes: _childNodes.default,
+  childElements: _childElements.default,
+  nextUntil: _nextUntil.default,
+  parents: _parents.default,
+  siblings: _siblings.default,
+  clear: _clear.default,
+  insertAfter: _insertAfter.default,
+  isInput: _isInput.default,
+  isVisible: _isVisible.default,
+  prepend: _prepend.default,
+  remove: _remove.default,
+  text: _text.default
+};
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/insertAfter.d.ts b/node_modules/dom-helpers/cjs/insertAfter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4c8c1117b847fd4f0c6f187e0d993015db0c5213
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/insertAfter.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Inserts a node after a given reference node.
+ *
+ * @param node the node to insert
+ * @param refNode the reference node
+ */
+export default function insertAfter(node: Node | null, refNode: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/cjs/insertAfter.js b/node_modules/dom-helpers/cjs/insertAfter.js
new file mode 100644
index 0000000000000000000000000000000000000000..141199765ec3251fb4c345a7e25e64645f3845a3
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/insertAfter.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = insertAfter;
+
+/**
+ * Inserts a node after a given reference node.
+ * 
+ * @param node the node to insert
+ * @param refNode the reference node
+ */
+function insertAfter(node, refNode) {
+  if (node && refNode && refNode.parentNode) {
+    if (refNode.nextSibling) {
+      refNode.parentNode.insertBefore(node, refNode.nextSibling);
+    } else {
+      refNode.parentNode.appendChild(node);
+    }
+
+    return node;
+  }
+
+  return null;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/isDocument.d.ts b/node_modules/dom-helpers/cjs/isDocument.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..61e7626ec37b15e2a452ea7619d97bef1839dbe6
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isDocument.d.ts
@@ -0,0 +1 @@
+export default function isDocument(element: Element | Document | Window): element is Document;
diff --git a/node_modules/dom-helpers/cjs/isDocument.js b/node_modules/dom-helpers/cjs/isDocument.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3b8ee11b458c5bbbba819dc1d2631b16290434f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isDocument.js
@@ -0,0 +1,10 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = isDocument;
+
+function isDocument(element) {
+  return 'nodeType' in element && element.nodeType === document.DOCUMENT_NODE;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/isInput.d.ts b/node_modules/dom-helpers/cjs/isInput.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7cc25bf847eb03f1040a207ee554851e138f7fbe
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isInput.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Checks if a given element is an input (input, select, textarea or button).
+ *
+ * @param node the element to check
+ */
+export default function isInput(node: Element | null): boolean;
diff --git a/node_modules/dom-helpers/cjs/isInput.js b/node_modules/dom-helpers/cjs/isInput.js
new file mode 100644
index 0000000000000000000000000000000000000000..bb231bc1d5430e3dafe793f40ad14511d00676ff
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isInput.js
@@ -0,0 +1,16 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = isInput;
+var regExpInputs = /^(?:input|select|textarea|button)$/i;
+/**
+ * Checks if a given element is an input (input, select, textarea or button).
+ * 
+ * @param node the element to check
+ */
+
+function isInput(node) {
+  return node ? regExpInputs.test(node.nodeName) : false;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/isTransform.d.ts b/node_modules/dom-helpers/cjs/isTransform.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..01665c8e6e8ecce7232747f9234f990e11aa2bd5
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isTransform.d.ts
@@ -0,0 +1,2 @@
+export declare type TransformValue = 'translate' | 'translateY' | 'translateX' | 'translateZ' | 'translate3d' | 'rotate' | 'rotateY' | 'rotateX' | 'rotateZ' | 'rotate3d' | 'scale' | 'scaleY' | 'scaleX' | 'scaleZ' | 'scale3d' | 'matrix' | 'matrix3d' | 'perspective' | 'skew' | 'skewY' | 'skewX';
+export default function isTransform(value: string): value is TransformValue;
diff --git a/node_modules/dom-helpers/cjs/isTransform.js b/node_modules/dom-helpers/cjs/isTransform.js
new file mode 100644
index 0000000000000000000000000000000000000000..846262a1f8ed2c2fee6bea5252f4d247fa74dd2c
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isTransform.js
@@ -0,0 +1,11 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = isTransform;
+var supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;
+
+function isTransform(value) {
+  return !!(value && supportedTransforms.test(value));
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/isVisible.d.ts b/node_modules/dom-helpers/cjs/isVisible.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..506a6aca49a3296c75fe655001262d7fc2ba7676
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isVisible.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Checks if a given element is currently visible.
+ *
+ * @param node the element to check
+ */
+export default function isVisible(node: HTMLElement | null): boolean;
diff --git a/node_modules/dom-helpers/cjs/isVisible.js b/node_modules/dom-helpers/cjs/isVisible.js
new file mode 100644
index 0000000000000000000000000000000000000000..b311b67bbda94958077c00cee294029f6b5b03ae
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isVisible.js
@@ -0,0 +1,15 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = isVisible;
+
+/**
+ * Checks if a given element is currently visible.
+ * 
+ * @param node the element to check
+ */
+function isVisible(node) {
+  return node ? !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length) : false;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/isWindow.d.ts b/node_modules/dom-helpers/cjs/isWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..46d4359a57a87a657baa8d9a3d3f5f5455bb9607
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isWindow.d.ts
@@ -0,0 +1 @@
+export default function isWindow(node: Element | Document | Window): Window | false;
diff --git a/node_modules/dom-helpers/cjs/isWindow.js b/node_modules/dom-helpers/cjs/isWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..7ae669c28ab5b0bc5a9318903a06b8fb1e558cdf
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/isWindow.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = isWindow;
+
+var _isDocument = _interopRequireDefault(require("./isDocument"));
+
+function isWindow(node) {
+  if ('window' in node && node.window === node) return node;
+  if ((0, _isDocument.default)(node)) return node.defaultView || false;
+  return false;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/listen.d.ts b/node_modules/dom-helpers/cjs/listen.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..20d8033f8647b22941d8ac6f718fad19226a99c2
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/listen.d.ts
@@ -0,0 +1,3 @@
+import { EventHandler } from './addEventListener';
+declare function listen<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: EventHandler<K>, options?: boolean | AddEventListenerOptions): () => void;
+export default listen;
diff --git a/node_modules/dom-helpers/cjs/listen.js b/node_modules/dom-helpers/cjs/listen.js
new file mode 100644
index 0000000000000000000000000000000000000000..047ba605bda654fcd1401e579796dca63faa81a1
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/listen.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _addEventListener = _interopRequireDefault(require("./addEventListener"));
+
+var _removeEventListener = _interopRequireDefault(require("./removeEventListener"));
+
+function listen(node, eventName, handler, options) {
+  (0, _addEventListener.default)(node, eventName, handler, options);
+  return function () {
+    (0, _removeEventListener.default)(node, eventName, handler, options);
+  };
+}
+
+var _default = listen;
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/matches.d.ts b/node_modules/dom-helpers/cjs/matches.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8fc2d1074d48db626917581e89cd1544f4c5ec56
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/matches.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if a given element matches a selector.
+ *
+ * @param node the element
+ * @param selector the selector
+ */
+export default function matches(node: Element, selector: string): boolean;
diff --git a/node_modules/dom-helpers/cjs/matches.js b/node_modules/dom-helpers/cjs/matches.js
new file mode 100644
index 0000000000000000000000000000000000000000..f43a6316e7ec1705d9e6c9eda9267072ffcfd74e
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/matches.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = matches;
+var matchesImpl;
+/**
+ * Checks if a given element matches a selector.
+ * 
+ * @param node the element
+ * @param selector the selector
+ */
+
+function matches(node, selector) {
+  if (!matchesImpl) {
+    var body = document.body;
+    var nativeMatch = body.matches || body.matchesSelector || body.webkitMatchesSelector || body.mozMatchesSelector || body.msMatchesSelector;
+
+    matchesImpl = function matchesImpl(n, s) {
+      return nativeMatch.call(n, s);
+    };
+  }
+
+  return matchesImpl(node, selector);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/nextUntil.d.ts b/node_modules/dom-helpers/cjs/nextUntil.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc8d74dc0108bb3207e773cbe4ef45dc343d4f98
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/nextUntil.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Collects all next sibling elements of an element until a given selector is matched.
+ *
+ * @param node the referene node
+ * @param selector the selector to match
+ */
+export default function nextUntil(node: Element | null, selector: string): Element[];
diff --git a/node_modules/dom-helpers/cjs/nextUntil.js b/node_modules/dom-helpers/cjs/nextUntil.js
new file mode 100644
index 0000000000000000000000000000000000000000..48bbc180b5597d3f7c129ce3ff516534ce9f92a8
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/nextUntil.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = nextUntil;
+
+var _collectSiblings = _interopRequireDefault(require("./collectSiblings"));
+
+/**
+ * Collects all next sibling elements of an element until a given selector is matched.
+ * 
+ * @param node the referene node
+ * @param selector the selector to match
+ */
+function nextUntil(node, selector) {
+  return (0, _collectSiblings.default)(node, node, selector);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/offset.d.ts b/node_modules/dom-helpers/cjs/offset.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d924e241848b54977d87d61149a3c37be34e50ca
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/offset.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Returns the offset of a given element, including top and left positions, width and height.
+ *
+ * @param node the element
+ */
+export default function offset(node: HTMLElement): {
+    top: number;
+    left: number;
+    height: number;
+    width: number;
+};
diff --git a/node_modules/dom-helpers/cjs/offset.js b/node_modules/dom-helpers/cjs/offset.js
new file mode 100644
index 0000000000000000000000000000000000000000..09550148e2cc95111648b96aea760ccc04f7e156
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/offset.js
@@ -0,0 +1,42 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = offset;
+
+var _contains = _interopRequireDefault(require("./contains"));
+
+var _ownerDocument = _interopRequireDefault(require("./ownerDocument"));
+
+var _scrollLeft = _interopRequireDefault(require("./scrollLeft"));
+
+var _scrollTop = _interopRequireDefault(require("./scrollTop"));
+
+/**
+ * Returns the offset of a given element, including top and left positions, width and height.
+ * 
+ * @param node the element
+ */
+function offset(node) {
+  var doc = (0, _ownerDocument.default)(node);
+  var box = {
+    top: 0,
+    left: 0,
+    height: 0,
+    width: 0
+  };
+  var docElem = doc && doc.documentElement; // Make sure it's not a disconnected DOM node
+
+  if (!docElem || !(0, _contains.default)(docElem, node)) return box;
+  if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect();
+  box = {
+    top: box.top + (0, _scrollTop.default)(docElem) - (docElem.clientTop || 0),
+    left: box.left + (0, _scrollLeft.default)(docElem) - (docElem.clientLeft || 0),
+    width: box.width,
+    height: box.height
+  };
+  return box;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/offsetParent.d.ts b/node_modules/dom-helpers/cjs/offsetParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e60a4a91755ff190b832af7b07452327b0f908da
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/offsetParent.d.ts
@@ -0,0 +1 @@
+export default function offsetParent(node: HTMLElement): HTMLElement;
diff --git a/node_modules/dom-helpers/cjs/offsetParent.js b/node_modules/dom-helpers/cjs/offsetParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d1b2335b0e7a15fd7acf6c70228a24f5e57ec20
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/offsetParent.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = offsetParent;
+
+var _css = _interopRequireDefault(require("./css"));
+
+var _ownerDocument = _interopRequireDefault(require("./ownerDocument"));
+
+var isHTMLElement = function isHTMLElement(e) {
+  return !!e && 'offsetParent' in e;
+};
+
+function offsetParent(node) {
+  var doc = (0, _ownerDocument.default)(node);
+  var parent = node && node.offsetParent;
+
+  while (isHTMLElement(parent) && parent.nodeName !== 'HTML' && (0, _css.default)(parent, 'position') === 'static') {
+    parent = parent.offsetParent;
+  }
+
+  return parent || doc.documentElement;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/ownerDocument.d.ts b/node_modules/dom-helpers/cjs/ownerDocument.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..804406a36ba7676d614f31da12ac14de29f1ca4c
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/ownerDocument.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the owner document of a given element.
+ *
+ * @param node the element
+ */
+export default function ownerDocument(node?: Element): Document;
diff --git a/node_modules/dom-helpers/cjs/ownerDocument.js b/node_modules/dom-helpers/cjs/ownerDocument.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e61cd1568707c00c3123c11ea392c5dd067bd2f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/ownerDocument.js
@@ -0,0 +1,15 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = ownerDocument;
+
+/**
+ * Returns the owner document of a given element.
+ * 
+ * @param node the element
+ */
+function ownerDocument(node) {
+  return node && node.ownerDocument || document;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/ownerWindow.d.ts b/node_modules/dom-helpers/cjs/ownerWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6113c9d2dc7b8498752d357c6f251d9c48671244
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/ownerWindow.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the owner window of a given element.
+ *
+ * @param node the element
+ */
+export default function ownerWindow(node?: Element): Window;
diff --git a/node_modules/dom-helpers/cjs/ownerWindow.js b/node_modules/dom-helpers/cjs/ownerWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdfd529f4d0900617c8c7fe6cc59472aeeb9d093
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/ownerWindow.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = ownerWindow;
+
+var _ownerDocument = _interopRequireDefault(require("./ownerDocument"));
+
+/**
+ * Returns the owner window of a given element.
+ * 
+ * @param node the element
+ */
+function ownerWindow(node) {
+  var doc = (0, _ownerDocument.default)(node);
+  return doc && doc.defaultView || window;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/parents.d.ts b/node_modules/dom-helpers/cjs/parents.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a729777cd6f80acd6889be27c1e60012e39e9672
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/parents.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all parent elements of a given element.
+ *
+ * @param node the element
+ */
+export default function parents(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/cjs/parents.js b/node_modules/dom-helpers/cjs/parents.js
new file mode 100644
index 0000000000000000000000000000000000000000..93679e4b06262fbe6ee8ac331d42dfc7e1b92257
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/parents.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = parents;
+
+var _collectElements = _interopRequireDefault(require("./collectElements"));
+
+/**
+ * Collects all parent elements of a given element.
+ * 
+ * @param node the element
+ */
+function parents(node) {
+  return (0, _collectElements.default)(node, 'parentElement');
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/position.d.ts b/node_modules/dom-helpers/cjs/position.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a12a9812b61a2876fb7d47e6d197119714478339
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/position.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Returns the relative position of a given element.
+ *
+ * @param node the element
+ * @param offsetParent the offset parent
+ */
+export default function position(node: HTMLElement, offsetParent?: HTMLElement): {
+    top: number;
+    left: number;
+    height: number;
+    width: number;
+};
diff --git a/node_modules/dom-helpers/cjs/position.js b/node_modules/dom-helpers/cjs/position.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ae7e7d4f437ffa5ef98f6d47381450fc8aa0ab0
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/position.js
@@ -0,0 +1,60 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = position;
+
+var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
+
+var _css = _interopRequireDefault(require("./css"));
+
+var _offset = _interopRequireDefault(require("./offset"));
+
+var _offsetParent = _interopRequireDefault(require("./offsetParent"));
+
+var _scrollLeft = _interopRequireDefault(require("./scrollLeft"));
+
+var _scrollTop = _interopRequireDefault(require("./scrollTop"));
+
+var nodeName = function nodeName(node) {
+  return node.nodeName && node.nodeName.toLowerCase();
+};
+/**
+ * Returns the relative position of a given element.
+ * 
+ * @param node the element
+ * @param offsetParent the offset parent
+ */
+
+
+function position(node, offsetParent) {
+  var parentOffset = {
+    top: 0,
+    left: 0
+  };
+  var offset; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+  // because it is its only offset parent
+
+  if ((0, _css.default)(node, 'position') === 'fixed') {
+    offset = node.getBoundingClientRect();
+  } else {
+    var parent = offsetParent || (0, _offsetParent.default)(node);
+    offset = (0, _offset.default)(node);
+    if (nodeName(parent) !== 'html') parentOffset = (0, _offset.default)(parent);
+    var borderTop = String((0, _css.default)(parent, 'borderTopWidth') || 0);
+    parentOffset.top += parseInt(borderTop, 10) - (0, _scrollTop.default)(parent) || 0;
+    var borderLeft = String((0, _css.default)(parent, 'borderLeftWidth') || 0);
+    parentOffset.left += parseInt(borderLeft, 10) - (0, _scrollLeft.default)(parent) || 0;
+  }
+
+  var marginTop = String((0, _css.default)(node, 'marginTop') || 0);
+  var marginLeft = String((0, _css.default)(node, 'marginLeft') || 0); // Subtract parent offsets and node margins
+
+  return (0, _extends2.default)({}, offset, {
+    top: offset.top - parentOffset.top - (parseInt(marginTop, 10) || 0),
+    left: offset.left - parentOffset.left - (parseInt(marginLeft, 10) || 0)
+  });
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/prepend.d.ts b/node_modules/dom-helpers/cjs/prepend.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc4eac973f5b12fce005433c043af05b7d9408d5
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/prepend.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Insert a given element as the first child of a parent element.
+ *
+ * @param node the element to prepend
+ * @param parent the parent element
+ */
+export default function prepend(node: Element | null, parent: Element | null): Element | null;
diff --git a/node_modules/dom-helpers/cjs/prepend.js b/node_modules/dom-helpers/cjs/prepend.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b9c3dd0a0f35fe9ffd8e36f5bd397414a0d5083
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/prepend.js
@@ -0,0 +1,26 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = prepend;
+
+/**
+ * Insert a given element as the first child of a parent element.
+ * 
+ * @param node the element to prepend
+ * @param parent the parent element
+ */
+function prepend(node, parent) {
+  if (node && parent) {
+    if (parent.firstElementChild) {
+      parent.insertBefore(node, parent.firstElementChild);
+    } else {
+      parent.appendChild(node);
+    }
+
+    return node;
+  }
+
+  return null;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/querySelectorAll.d.ts b/node_modules/dom-helpers/cjs/querySelectorAll.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..639722cab3e2cae026f98e7f8a6998f12b0a00ad
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/querySelectorAll.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Runs `querySelectorAll` on a given element.
+ *
+ * @param element the element
+ * @param selector the selector
+ */
+export default function qsa(element: HTMLElement | Document, selector: string): HTMLElement[];
diff --git a/node_modules/dom-helpers/cjs/querySelectorAll.js b/node_modules/dom-helpers/cjs/querySelectorAll.js
new file mode 100644
index 0000000000000000000000000000000000000000..b28dc5b2998e59bab63f46d5603fb6bf655bffcd
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/querySelectorAll.js
@@ -0,0 +1,17 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = qsa;
+var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);
+/**
+ * Runs `querySelectorAll` on a given element.
+ * 
+ * @param element the element
+ * @param selector the selector
+ */
+
+function qsa(element, selector) {
+  return toArray(element.querySelectorAll(selector));
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/remove.d.ts b/node_modules/dom-helpers/cjs/remove.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2dc7f0a4b00f90c79beb995dc5051d7936492df5
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/remove.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Removes a given node from the DOM.
+ *
+ * @param node the node to remove
+ */
+export default function remove(node: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/cjs/remove.js b/node_modules/dom-helpers/cjs/remove.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b4e4c747732da49721314587337a1d182e67c12
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/remove.js
@@ -0,0 +1,20 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = remove;
+
+/**
+ * Removes a given node from the DOM.
+ * 
+ * @param node the node to remove
+ */
+function remove(node) {
+  if (node && node.parentNode) {
+    node.parentNode.removeChild(node);
+    return node;
+  }
+
+  return null;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/removeClass.d.ts b/node_modules/dom-helpers/cjs/removeClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9fea4fe918a52bd848559ad6873fa4b36c10ca2b
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/removeClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Removes a CSS class from a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function removeClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/cjs/removeClass.js b/node_modules/dom-helpers/cjs/removeClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..370ca79c1df6134d7261227f4479a4ab5381a517
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/removeClass.js
@@ -0,0 +1,27 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = removeClass;
+
+function replaceClassName(origClass, classToRemove) {
+  return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
+}
+/**
+ * Removes a CSS class from a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+
+
+function removeClass(element, className) {
+  if (element.classList) {
+    element.classList.remove(className);
+  } else if (typeof element.className === 'string') {
+    element.className = replaceClassName(element.className, className);
+  } else {
+    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));
+  }
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/removeEventListener.d.ts b/node_modules/dom-helpers/cjs/removeEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..06695ca43e3b321b156828fdf19107ef9e60bf7e
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/removeEventListener.d.ts
@@ -0,0 +1,11 @@
+import { TaggedEventHandler } from './addEventListener';
+/**
+ * A `removeEventListener` ponyfill
+ *
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+declare function removeEventListener<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: TaggedEventHandler<K>, options?: boolean | EventListenerOptions): void;
+export default removeEventListener;
diff --git a/node_modules/dom-helpers/cjs/removeEventListener.js b/node_modules/dom-helpers/cjs/removeEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..8aff7f1ebdeb579c320d9eca895ca4aef8be9ac1
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/removeEventListener.js
@@ -0,0 +1,25 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+/**
+ * A `removeEventListener` ponyfill
+ * 
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+function removeEventListener(node, eventName, handler, options) {
+  var capture = options && typeof options !== 'boolean' ? options.capture : options;
+  node.removeEventListener(eventName, handler, capture);
+
+  if (handler.__once) {
+    node.removeEventListener(eventName, handler.__once, capture);
+  }
+}
+
+var _default = removeEventListener;
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/scrollLeft.d.ts b/node_modules/dom-helpers/cjs/scrollLeft.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..38ea8a10ae98a4ebcc8a3ef0a8a492cae9a16f8f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollLeft.d.ts
@@ -0,0 +1,11 @@
+declare const _default: {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
+/**
+ * Gets or sets the scroll left position of a given element.
+ *
+ * @param node the element
+ * @param val the position to set
+ */
+export default _default;
diff --git a/node_modules/dom-helpers/cjs/scrollLeft.js b/node_modules/dom-helpers/cjs/scrollLeft.js
new file mode 100644
index 0000000000000000000000000000000000000000..ebb53c6c69d562cef98fab2ae14e69d68c5ad144
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollLeft.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _getScrollAccessor = _interopRequireDefault(require("./getScrollAccessor"));
+
+/**
+ * Gets or sets the scroll left position of a given element.
+ * 
+ * @param node the element
+ * @param val the position to set
+ */
+var _default = (0, _getScrollAccessor.default)('pageXOffset');
+
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/scrollParent.d.ts b/node_modules/dom-helpers/cjs/scrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7714cc724b82ff0c1c20ca62905191b6bc6ba6e1
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollParent.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Find the first scrollable parent of an element.
+ *
+ * @param element Starting element
+ * @param firstPossible Stop at the first scrollable parent, even if it's not currently scrollable
+ */
+export default function scrollParent(element: HTMLElement, firstPossible?: boolean): Document | HTMLElement;
diff --git a/node_modules/dom-helpers/cjs/scrollParent.js b/node_modules/dom-helpers/cjs/scrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..093656caa14cfcb12a2b01f6d58dc4e6aa8d0c6f
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollParent.js
@@ -0,0 +1,41 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = scrollParent;
+
+var _css = _interopRequireDefault(require("./css"));
+
+var _height = _interopRequireDefault(require("./height"));
+
+var _isDocument = _interopRequireDefault(require("./isDocument"));
+
+/* eslint-disable no-cond-assign, no-continue */
+
+/**
+ * Find the first scrollable parent of an element.
+ *
+ * @param element Starting element
+ * @param firstPossible Stop at the first scrollable parent, even if it's not currently scrollable
+ */
+function scrollParent(element, firstPossible) {
+  var position = (0, _css.default)(element, 'position');
+  var excludeStatic = position === 'absolute';
+  var ownerDoc = element.ownerDocument;
+  if (position === 'fixed') return ownerDoc || document; // @ts-ignore
+
+  while ((element = element.parentNode) && !(0, _isDocument.default)(element)) {
+    var isStatic = excludeStatic && (0, _css.default)(element, 'position') === 'static';
+    var style = ((0, _css.default)(element, 'overflow') || '') + ((0, _css.default)(element, 'overflow-y') || '') + (0, _css.default)(element, 'overflow-x');
+    if (isStatic) continue;
+
+    if (/(auto|scroll)/.test(style) && (firstPossible || (0, _height.default)(element) < element.scrollHeight)) {
+      return element;
+    }
+  }
+
+  return ownerDoc || document;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/scrollTo.d.ts b/node_modules/dom-helpers/cjs/scrollTo.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..522661155243dd2c7b622f5e8f59f5d9ab4c3f1d
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollTo.d.ts
@@ -0,0 +1 @@
+export default function scrollTo(selected: HTMLElement, scrollParent?: HTMLElement): (() => void) | undefined;
diff --git a/node_modules/dom-helpers/cjs/scrollTo.js b/node_modules/dom-helpers/cjs/scrollTo.js
new file mode 100644
index 0000000000000000000000000000000000000000..3485c7dd19aaa533c164d99d3333b37ef633ae5b
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollTo.js
@@ -0,0 +1,51 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = scrollTo;
+
+var _animationFrame = require("./animationFrame");
+
+var _height = _interopRequireDefault(require("./height"));
+
+var _isWindow = _interopRequireDefault(require("./isWindow"));
+
+var _offset = _interopRequireDefault(require("./offset"));
+
+var _scrollParent = _interopRequireDefault(require("./scrollParent"));
+
+var _scrollTop = _interopRequireDefault(require("./scrollTop"));
+
+/* eslint-disable no-nested-ternary */
+function scrollTo(selected, scrollParent) {
+  var offset = (0, _offset.default)(selected);
+  var poff = {
+    top: 0,
+    left: 0
+  };
+  if (!selected) return undefined;
+  var list = scrollParent || (0, _scrollParent.default)(selected);
+  var isWin = (0, _isWindow.default)(list);
+  var listScrollTop = (0, _scrollTop.default)(list);
+  var listHeight = (0, _height.default)(list, true);
+  if (!isWin) poff = (0, _offset.default)(list);
+  offset = {
+    top: offset.top - poff.top,
+    left: offset.left - poff.left,
+    height: offset.height,
+    width: offset.width
+  };
+  var selectedHeight = offset.height;
+  var selectedTop = offset.top + (isWin ? 0 : listScrollTop);
+  var bottom = selectedTop + selectedHeight;
+  listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop;
+  var id = (0, _animationFrame.request)(function () {
+    return (0, _scrollTop.default)(list, listScrollTop);
+  });
+  return function () {
+    return (0, _animationFrame.cancel)(id);
+  };
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/scrollTop.d.ts b/node_modules/dom-helpers/cjs/scrollTop.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..242365c76e31c15b2849ae7d82615795744d1b53
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollTop.d.ts
@@ -0,0 +1,11 @@
+declare const _default: {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
+/**
+ * Gets or sets the scroll top position of a given element.
+ *
+ * @param node the element
+ * @param val the position to set
+ */
+export default _default;
diff --git a/node_modules/dom-helpers/cjs/scrollTop.js b/node_modules/dom-helpers/cjs/scrollTop.js
new file mode 100644
index 0000000000000000000000000000000000000000..2c65f7e6eb8b93c678d63427fbd9198fb8898b53
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollTop.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _getScrollAccessor = _interopRequireDefault(require("./getScrollAccessor"));
+
+/**
+ * Gets or sets the scroll top position of a given element.
+ * 
+ * @param node the element
+ * @param val the position to set
+ */
+var _default = (0, _getScrollAccessor.default)('pageYOffset');
+
+exports.default = _default;
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/scrollbarSize.d.ts b/node_modules/dom-helpers/cjs/scrollbarSize.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..02ccabbfa60b9199563a3fe40b2c871538a2b385
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollbarSize.d.ts
@@ -0,0 +1 @@
+export default function scrollbarSize(recalc?: boolean): number;
diff --git a/node_modules/dom-helpers/cjs/scrollbarSize.js b/node_modules/dom-helpers/cjs/scrollbarSize.js
new file mode 100644
index 0000000000000000000000000000000000000000..92ea8699996923cc04bc83c777de5d7eb5fb643d
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/scrollbarSize.js
@@ -0,0 +1,30 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = scrollbarSize;
+
+var _canUseDOM = _interopRequireDefault(require("./canUseDOM"));
+
+var size;
+
+function scrollbarSize(recalc) {
+  if (!size && size !== 0 || recalc) {
+    if (_canUseDOM.default) {
+      var scrollDiv = document.createElement('div');
+      scrollDiv.style.position = 'absolute';
+      scrollDiv.style.top = '-9999px';
+      scrollDiv.style.width = '50px';
+      scrollDiv.style.height = '50px';
+      scrollDiv.style.overflow = 'scroll';
+      document.body.appendChild(scrollDiv);
+      size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+      document.body.removeChild(scrollDiv);
+    }
+  }
+
+  return size;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/siblings.d.ts b/node_modules/dom-helpers/cjs/siblings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b8a4cc002698cdfa968862efeea372e0943e905
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/siblings.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all previous and next sibling elements of a given element.
+ *
+ * @param node the element
+ */
+export default function siblings(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/cjs/siblings.js b/node_modules/dom-helpers/cjs/siblings.js
new file mode 100644
index 0000000000000000000000000000000000000000..b515cde3922fa317dfddf31bafc9ba17d3a5faa3
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/siblings.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = siblings;
+
+var _collectSiblings = _interopRequireDefault(require("./collectSiblings"));
+
+/**
+ * Collects all previous and next sibling elements of a given element.
+ * 
+ * @param node the element
+ */
+function siblings(node) {
+  return (0, _collectSiblings.default)(node && node.parentElement ? node.parentElement.firstElementChild : null, node);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/text.d.ts b/node_modules/dom-helpers/cjs/text.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd90e5d013d8742ae25670cc3db840462a6a3715
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/text.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Collects the text content of a given element.
+ *
+ * @param node the element
+ * @param trim whether to remove trailing whitespace chars
+ * @param singleSpaces whether to convert multiple whitespace chars into a single space character
+ */
+export default function text(node: HTMLElement | null, trim?: boolean, singleSpaces?: boolean): string;
diff --git a/node_modules/dom-helpers/cjs/text.js b/node_modules/dom-helpers/cjs/text.js
new file mode 100644
index 0000000000000000000000000000000000000000..9c97e97ebefde9b541174227662b28bcf5b4a6f7
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/text.js
@@ -0,0 +1,42 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = text;
+var regExpNbspEntity = /&nbsp;/gi;
+var regExpNbspHex = /\xA0/g;
+var regExpSpaces = /\s+([^\s])/gm;
+/**
+ * Collects the text content of a given element.
+ * 
+ * @param node the element
+ * @param trim whether to remove trailing whitespace chars
+ * @param singleSpaces whether to convert multiple whitespace chars into a single space character
+ */
+
+function text(node, trim, singleSpaces) {
+  if (trim === void 0) {
+    trim = true;
+  }
+
+  if (singleSpaces === void 0) {
+    singleSpaces = true;
+  }
+
+  var elementText = '';
+
+  if (node) {
+    elementText = (node.textContent || '').replace(regExpNbspEntity, ' ').replace(regExpNbspHex, ' ');
+
+    if (trim) {
+      elementText = elementText.trim();
+    }
+
+    if (singleSpaces) {
+      elementText = elementText.replace(regExpSpaces, ' $1');
+    }
+  }
+
+  return elementText;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/toggleClass.d.ts b/node_modules/dom-helpers/cjs/toggleClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..560be7a3f3b75f2f7f6fcc52fa7957666338fc53
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/toggleClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Toggles a CSS class on a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function toggleClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/cjs/toggleClass.js b/node_modules/dom-helpers/cjs/toggleClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6775abc57b078b6613610d51b5dd88c55bcd1ef
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/toggleClass.js
@@ -0,0 +1,24 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = toggleClass;
+
+var _addClass = _interopRequireDefault(require("./addClass"));
+
+var _hasClass = _interopRequireDefault(require("./hasClass"));
+
+var _removeClass = _interopRequireDefault(require("./removeClass"));
+
+/**
+ * Toggles a CSS class on a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+function toggleClass(element, className) {
+  if (element.classList) element.classList.toggle(className);else if ((0, _hasClass.default)(element, className)) (0, _removeClass.default)(element, className);else (0, _addClass.default)(element, className);
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/transitionEnd.d.ts b/node_modules/dom-helpers/cjs/transitionEnd.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e8066de0a4801819204ccacfda61a710b3f97ab
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/transitionEnd.d.ts
@@ -0,0 +1,2 @@
+export declare type Listener = (this: HTMLElement, ev: TransitionEvent) => any;
+export default function transitionEnd(element: HTMLElement, handler: Listener, duration?: number | null, padding?: number): () => void;
diff --git a/node_modules/dom-helpers/cjs/transitionEnd.js b/node_modules/dom-helpers/cjs/transitionEnd.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d670968372155545571d2f8ea14c8d062768f0b
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/transitionEnd.js
@@ -0,0 +1,50 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = transitionEnd;
+
+var _css = _interopRequireDefault(require("./css"));
+
+var _listen = _interopRequireDefault(require("./listen"));
+
+var _triggerEvent = _interopRequireDefault(require("./triggerEvent"));
+
+function parseDuration(node) {
+  var str = (0, _css.default)(node, 'transitionDuration') || '';
+  var mult = str.indexOf('ms') === -1 ? 1000 : 1;
+  return parseFloat(str) * mult;
+}
+
+function emulateTransitionEnd(element, duration, padding) {
+  if (padding === void 0) {
+    padding = 5;
+  }
+
+  var called = false;
+  var handle = setTimeout(function () {
+    if (!called) (0, _triggerEvent.default)(element, 'transitionend', true);
+  }, duration + padding);
+  var remove = (0, _listen.default)(element, 'transitionend', function () {
+    called = true;
+  }, {
+    once: true
+  });
+  return function () {
+    clearTimeout(handle);
+    remove();
+  };
+}
+
+function transitionEnd(element, handler, duration, padding) {
+  if (duration == null) duration = parseDuration(element) || 0;
+  var removeEmulate = emulateTransitionEnd(element, duration, padding);
+  var remove = (0, _listen.default)(element, 'transitionend', handler);
+  return function () {
+    removeEmulate();
+    remove();
+  };
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/triggerEvent.d.ts b/node_modules/dom-helpers/cjs/triggerEvent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dc1e7e724d6b13e6dd6fed2c10a06cf31d567f84
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/triggerEvent.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Triggers an event on a given element.
+ *
+ * @param node the element
+ * @param eventName the event name to trigger
+ * @param bubbles whether the event should bubble up
+ * @param cancelable whether the event should be cancelable
+ */
+export default function triggerEvent<K extends keyof HTMLElementEventMap>(node: HTMLElement | null, eventName: K, bubbles?: boolean, cancelable?: boolean): void;
diff --git a/node_modules/dom-helpers/cjs/triggerEvent.js b/node_modules/dom-helpers/cjs/triggerEvent.js
new file mode 100644
index 0000000000000000000000000000000000000000..175c7cb0a661410728bad8a9379762af160c43fc
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/triggerEvent.js
@@ -0,0 +1,30 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = triggerEvent;
+
+/**
+ * Triggers an event on a given element.
+ * 
+ * @param node the element
+ * @param eventName the event name to trigger
+ * @param bubbles whether the event should bubble up
+ * @param cancelable whether the event should be cancelable
+ */
+function triggerEvent(node, eventName, bubbles, cancelable) {
+  if (bubbles === void 0) {
+    bubbles = false;
+  }
+
+  if (cancelable === void 0) {
+    cancelable = true;
+  }
+
+  if (node) {
+    var event = document.createEvent('HTMLEvents');
+    event.initEvent(eventName, bubbles, cancelable);
+    node.dispatchEvent(event);
+  }
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/cjs/types.d.ts b/node_modules/dom-helpers/cjs/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1a9d9729cd0347308755b990ef3b77363c1697e6
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/types.d.ts
@@ -0,0 +1,8 @@
+import * as CSS from 'csstype'
+
+type Styles = keyof CSSStyleDeclaration
+
+export type HyphenProperty = keyof CSS.PropertiesHyphen
+export type CamelProperty = keyof CSS.Properties
+
+export type Property = HyphenProperty | CamelProperty
diff --git a/node_modules/dom-helpers/cjs/width.d.ts b/node_modules/dom-helpers/cjs/width.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4b40986f24f82e95f8d27eeae3113843a163369b
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/width.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns the width of a given element.
+ *
+ * @param node the element
+ * @param client whether to use `clientWidth` if possible
+ */
+export default function getWidth(node: HTMLElement, client?: boolean): number;
diff --git a/node_modules/dom-helpers/cjs/width.js b/node_modules/dom-helpers/cjs/width.js
new file mode 100644
index 0000000000000000000000000000000000000000..368c5da04d2ef840f5a61e199ea0623826f53474
--- /dev/null
+++ b/node_modules/dom-helpers/cjs/width.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.default = getWidth;
+
+var _isWindow = _interopRequireDefault(require("./isWindow"));
+
+var _offset = _interopRequireDefault(require("./offset"));
+
+/**
+ * Returns the width of a given element.
+ * 
+ * @param node the element
+ * @param client whether to use `clientWidth` if possible
+ */
+function getWidth(node, client) {
+  var win = (0, _isWindow.default)(node);
+  return win ? win.innerWidth : client ? node.clientWidth : (0, _offset.default)(node).width;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/dom-helpers/clear/package.json b/node_modules/dom-helpers/clear/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f480a283688b5b6dc4458f25ccb7aa158d63ed9
--- /dev/null
+++ b/node_modules/dom-helpers/clear/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/clear",
+  "private": true,
+  "main": "../cjs/clear.js",
+  "module": "../esm/clear.js",
+  "types": "../esm/clear.d.ts"
+}
diff --git a/node_modules/dom-helpers/closest/package.json b/node_modules/dom-helpers/closest/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e56df3e5ba8c2266febb668638cb42e0afad4444
--- /dev/null
+++ b/node_modules/dom-helpers/closest/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/closest",
+  "private": true,
+  "main": "../cjs/closest.js",
+  "module": "../esm/closest.js",
+  "types": "../esm/closest.d.ts"
+}
diff --git a/node_modules/dom-helpers/collectElements/package.json b/node_modules/dom-helpers/collectElements/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..33ab67cea33756ab083a6c6f89971e82d46c6196
--- /dev/null
+++ b/node_modules/dom-helpers/collectElements/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/collectElements",
+  "private": true,
+  "main": "../cjs/collectElements.js",
+  "module": "../esm/collectElements.js",
+  "types": "../esm/collectElements.d.ts"
+}
diff --git a/node_modules/dom-helpers/collectSiblings/package.json b/node_modules/dom-helpers/collectSiblings/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dc21e4cd598c3823dc15957a8833fb78ba8e8a95
--- /dev/null
+++ b/node_modules/dom-helpers/collectSiblings/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/collectSiblings",
+  "private": true,
+  "main": "../cjs/collectSiblings.js",
+  "module": "../esm/collectSiblings.js",
+  "types": "../esm/collectSiblings.d.ts"
+}
diff --git a/node_modules/dom-helpers/contains/package.json b/node_modules/dom-helpers/contains/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5c990d0f32ed72675778218fae7ed8b809794f47
--- /dev/null
+++ b/node_modules/dom-helpers/contains/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/contains",
+  "private": true,
+  "main": "../cjs/contains.js",
+  "module": "../esm/contains.js",
+  "types": "../esm/contains.d.ts"
+}
diff --git a/node_modules/dom-helpers/css/package.json b/node_modules/dom-helpers/css/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..47e1787524e18b767b94b684f41d8b9b62701e63
--- /dev/null
+++ b/node_modules/dom-helpers/css/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/css",
+  "private": true,
+  "main": "../cjs/css.js",
+  "module": "../esm/css.js",
+  "types": "../esm/css.d.ts"
+}
diff --git a/node_modules/dom-helpers/esm/activeElement.d.ts b/node_modules/dom-helpers/esm/activeElement.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9862eef69133eb88f43ccaffb3c2ad79e57b1c72
--- /dev/null
+++ b/node_modules/dom-helpers/esm/activeElement.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the actively focused element safely.
+ *
+ * @param doc the document to check
+ */
+export default function activeElement(doc?: Document): Element | null;
diff --git a/node_modules/dom-helpers/esm/activeElement.js b/node_modules/dom-helpers/esm/activeElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..96c02f1a3e08939efdcacde58960bb0ded2f04a1
--- /dev/null
+++ b/node_modules/dom-helpers/esm/activeElement.js
@@ -0,0 +1,25 @@
+import ownerDocument from './ownerDocument';
+/**
+ * Returns the actively focused element safely.
+ *
+ * @param doc the document to check
+ */
+
+export default function activeElement(doc) {
+  if (doc === void 0) {
+    doc = ownerDocument();
+  }
+
+  // Support: IE 9 only
+  // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+  try {
+    var active = doc.activeElement; // IE11 returns a seemingly empty object in some cases when accessing
+    // document.activeElement from an <iframe>
+
+    if (!active || !active.nodeName) return null;
+    return active;
+  } catch (e) {
+    /* ie throws if no active element */
+    return doc.body;
+  }
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/addClass.d.ts b/node_modules/dom-helpers/esm/addClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0a51e16c3ca5a4a6cd8bdf1ec8762dc37fd2b342
--- /dev/null
+++ b/node_modules/dom-helpers/esm/addClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Adds a CSS class to a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function addClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/esm/addClass.js b/node_modules/dom-helpers/esm/addClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4c6f25cf501f549c0277d0d6a7272dcdbeaa3ca
--- /dev/null
+++ b/node_modules/dom-helpers/esm/addClass.js
@@ -0,0 +1,11 @@
+import hasClass from './hasClass';
+/**
+ * Adds a CSS class to a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+
+export default function addClass(element, className) {
+  if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/addEventListener.d.ts b/node_modules/dom-helpers/esm/addEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..260a4ae59158f636ee7d2b9950528dd6eeb3af04
--- /dev/null
+++ b/node_modules/dom-helpers/esm/addEventListener.d.ts
@@ -0,0 +1,16 @@
+export declare let optionsSupported: boolean;
+export declare let onceSupported: boolean;
+export declare type EventHandler<K extends keyof HTMLElementEventMap> = (this: HTMLElement, event: HTMLElementEventMap[K]) => any;
+export declare type TaggedEventHandler<K extends keyof HTMLElementEventMap> = EventHandler<K> & {
+    __once?: EventHandler<K>;
+};
+/**
+ * An `addEventListener` ponyfill, supports the `once` option
+ *
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+declare function addEventListener<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: TaggedEventHandler<K>, options?: boolean | AddEventListenerOptions): void;
+export default addEventListener;
diff --git a/node_modules/dom-helpers/esm/addEventListener.js b/node_modules/dom-helpers/esm/addEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c9daa4e22d6221232b78b80b43de17ce35851e3
--- /dev/null
+++ b/node_modules/dom-helpers/esm/addEventListener.js
@@ -0,0 +1,56 @@
+/* eslint-disable no-return-assign */
+import canUseDOM from './canUseDOM';
+export var optionsSupported = false;
+export var onceSupported = false;
+
+try {
+  var options = {
+    get passive() {
+      return optionsSupported = true;
+    },
+
+    get once() {
+      // eslint-disable-next-line no-multi-assign
+      return onceSupported = optionsSupported = true;
+    }
+
+  };
+
+  if (canUseDOM) {
+    window.addEventListener('test', options, options);
+    window.removeEventListener('test', options, true);
+  }
+} catch (e) {
+  /* */
+}
+
+/**
+ * An `addEventListener` ponyfill, supports the `once` option
+ * 
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+function addEventListener(node, eventName, handler, options) {
+  if (options && typeof options !== 'boolean' && !onceSupported) {
+    var once = options.once,
+        capture = options.capture;
+    var wrappedHandler = handler;
+
+    if (!onceSupported && once) {
+      wrappedHandler = handler.__once || function onceHandler(event) {
+        this.removeEventListener(eventName, onceHandler, capture);
+        handler.call(this, event);
+      };
+
+      handler.__once = wrappedHandler;
+    }
+
+    node.addEventListener(eventName, wrappedHandler, optionsSupported ? options : capture);
+  }
+
+  node.addEventListener(eventName, handler, options);
+}
+
+export default addEventListener;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/animate.d.ts b/node_modules/dom-helpers/esm/animate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fe59582bec631b0d1ce645d9577f72548223268a
--- /dev/null
+++ b/node_modules/dom-helpers/esm/animate.d.ts
@@ -0,0 +1,19 @@
+import { EventHandler } from './addEventListener';
+import { TransformValue } from './isTransform';
+import { Property } from './types';
+declare type AnimateProperties = Record<Property | TransformValue, string>;
+interface Options {
+    node: HTMLElement;
+    properties: AnimateProperties;
+    duration?: number;
+    easing?: string;
+    callback?: EventHandler<'transitionend'>;
+}
+interface Cancel {
+    cancel(): void;
+}
+declare function animate(options: Options): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number, callback: EventHandler<'transitionend'>): Cancel;
+declare function animate(node: HTMLElement, properties: AnimateProperties, duration: number, easing: string, callback: EventHandler<'transitionend'>): Cancel;
+export default animate;
diff --git a/node_modules/dom-helpers/esm/animate.js b/node_modules/dom-helpers/esm/animate.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a1f934d9603dcb62343c7212aec3be474ae5670
--- /dev/null
+++ b/node_modules/dom-helpers/esm/animate.js
@@ -0,0 +1,90 @@
+import css from './css';
+import hyphenate from './hyphenate';
+import isTransform from './isTransform';
+import transitionEnd from './transitionEnd';
+var reset = {
+  transition: '',
+  'transition-duration': '',
+  'transition-delay': '',
+  'transition-timing-function': ''
+};
+
+// super lean animate function for transitions
+// doesn't support all translations to keep it matching the jquery API
+
+/**
+ * code in part from: Zepto 1.1.4 | zeptojs.com/license
+ */
+function _animate(_ref) {
+  var node = _ref.node,
+      properties = _ref.properties,
+      _ref$duration = _ref.duration,
+      duration = _ref$duration === void 0 ? 200 : _ref$duration,
+      easing = _ref.easing,
+      callback = _ref.callback;
+  var cssProperties = [];
+  var cssValues = {};
+  var transforms = '';
+  Object.keys(properties).forEach(function (key) {
+    var value = properties[key];
+    if (isTransform(key)) transforms += key + "(" + value + ") ";else {
+      cssValues[key] = value;
+      cssProperties.push(hyphenate(key));
+    }
+  });
+
+  if (transforms) {
+    cssValues.transform = transforms;
+    cssProperties.push('transform');
+  }
+
+  function done(event) {
+    if (event.target !== event.currentTarget) return;
+    css(node, reset);
+    if (callback) callback.call(this, event);
+  }
+
+  if (duration > 0) {
+    cssValues.transition = cssProperties.join(', ');
+    cssValues['transition-duration'] = duration / 1000 + "s";
+    cssValues['transition-delay'] = '0s';
+    cssValues['transition-timing-function'] = easing || 'linear';
+  }
+
+  var removeListener = transitionEnd(node, done, duration); // eslint-disable-next-line no-unused-expressions
+
+  node.clientLeft; // trigger page reflow
+
+  css(node, cssValues);
+  return {
+    cancel: function cancel() {
+      removeListener();
+      css(node, reset);
+    }
+  };
+}
+
+function animate(nodeOrOptions, properties, duration, easing, callback) {
+  if (!('nodeType' in nodeOrOptions)) {
+    return _animate(nodeOrOptions);
+  }
+
+  if (!properties) {
+    throw new Error('must include properties to animate');
+  }
+
+  if (typeof easing === 'function') {
+    callback = easing;
+    easing = '';
+  }
+
+  return _animate({
+    node: nodeOrOptions,
+    properties: properties,
+    duration: duration,
+    easing: easing,
+    callback: callback
+  });
+}
+
+export default animate;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/animationFrame.d.ts b/node_modules/dom-helpers/esm/animationFrame.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7b60bb5f359c1cd778bf5cbfaaff2ba5ab5824a5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/animationFrame.d.ts
@@ -0,0 +1,2 @@
+export declare const cancel: (id: number) => void;
+export declare const request: typeof requestAnimationFrame;
diff --git a/node_modules/dom-helpers/esm/animationFrame.js b/node_modules/dom-helpers/esm/animationFrame.js
new file mode 100644
index 0000000000000000000000000000000000000000..60d09382e348147d5a640d835a21090046120f7a
--- /dev/null
+++ b/node_modules/dom-helpers/esm/animationFrame.js
@@ -0,0 +1,42 @@
+import canUseDOM from './canUseDOM';
+
+/* https://github.com/component/raf */
+var prev = new Date().getTime();
+
+function fallback(fn) {
+  var curr = new Date().getTime();
+  var ms = Math.max(0, 16 - (curr - prev));
+  var handle = setTimeout(fn, ms);
+  prev = curr;
+  return handle;
+}
+
+var vendors = ['', 'webkit', 'moz', 'o', 'ms'];
+var cancelMethod = 'clearTimeout';
+var rafImpl = fallback; // eslint-disable-next-line import/no-mutable-exports
+
+var getKey = function getKey(vendor, k) {
+  return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + "AnimationFrame";
+};
+
+if (canUseDOM) {
+  vendors.some(function (vendor) {
+    var rafMethod = getKey(vendor, 'request');
+
+    if (rafMethod in window) {
+      cancelMethod = getKey(vendor, 'cancel'); // @ts-ignore
+
+      rafImpl = function rafImpl(cb) {
+        return window[rafMethod](cb);
+      };
+    }
+
+    return !!rafImpl;
+  });
+}
+
+export var cancel = function cancel(id) {
+  // @ts-ignore
+  if (typeof window[cancelMethod] === 'function') window[cancelMethod](id);
+};
+export var request = rafImpl;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/attribute.d.ts b/node_modules/dom-helpers/esm/attribute.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d330a18ca37ad9f6ac5b7b9fd0697fa8e1c0aaa7
--- /dev/null
+++ b/node_modules/dom-helpers/esm/attribute.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Gets or sets an attribute of a given element.
+ *
+ * @param node the element
+ * @param attr the attribute to get or set
+ * @param val the attribute value
+ */
+export default function attribute(node: Element | null, attr: string, val?: string | boolean | null): string | null | undefined;
diff --git a/node_modules/dom-helpers/esm/attribute.js b/node_modules/dom-helpers/esm/attribute.js
new file mode 100644
index 0000000000000000000000000000000000000000..08cb6490a19ed1fbfe502f7ee2fbc0df545ebd38
--- /dev/null
+++ b/node_modules/dom-helpers/esm/attribute.js
@@ -0,0 +1,20 @@
+/**
+ * Gets or sets an attribute of a given element.
+ * 
+ * @param node the element
+ * @param attr the attribute to get or set
+ * @param val the attribute value
+ */
+export default function attribute(node, attr, val) {
+  if (node) {
+    if (typeof val === 'undefined') {
+      return node.getAttribute(attr);
+    }
+
+    if (!val && val !== '') {
+      node.removeAttribute(attr);
+    } else {
+      node.setAttribute(attr, String(val));
+    }
+  }
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/camelize.d.ts b/node_modules/dom-helpers/esm/camelize.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e481d704a29de32a95ce52e5b2e25514650846c0
--- /dev/null
+++ b/node_modules/dom-helpers/esm/camelize.d.ts
@@ -0,0 +1 @@
+export default function camelize(string: string): string;
diff --git a/node_modules/dom-helpers/esm/camelize.js b/node_modules/dom-helpers/esm/camelize.js
new file mode 100644
index 0000000000000000000000000000000000000000..610657581c30397045d12e5ede641d59b06e6bf5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/camelize.js
@@ -0,0 +1,6 @@
+var rHyphen = /-(.)/g;
+export default function camelize(string) {
+  return string.replace(rHyphen, function (_, chr) {
+    return chr.toUpperCase();
+  });
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/camelizeStyle.d.ts b/node_modules/dom-helpers/esm/camelizeStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0c232be81f241839c40342e6e480708eccc5f830
--- /dev/null
+++ b/node_modules/dom-helpers/esm/camelizeStyle.d.ts
@@ -0,0 +1,2 @@
+import { CamelProperty, Property } from './types';
+export default function camelizeStyleName<T extends string = Property>(string: T): CamelProperty;
diff --git a/node_modules/dom-helpers/esm/camelizeStyle.js b/node_modules/dom-helpers/esm/camelizeStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..dacfaa0155fc5a07c54fb1a199e77adc370e2f5c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/camelizeStyle.js
@@ -0,0 +1,10 @@
+/**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/camelizeStyleName.js
+ */
+import camelize from './camelize';
+var msPattern = /^-ms-/;
+export default function camelizeStyleName(string) {
+  return camelize(string.replace(msPattern, 'ms-'));
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/canUseDOM.d.ts b/node_modules/dom-helpers/esm/canUseDOM.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc73b3e6308ba0111f0ca267a694200ce562d7b8
--- /dev/null
+++ b/node_modules/dom-helpers/esm/canUseDOM.d.ts
@@ -0,0 +1,2 @@
+declare const _default: boolean;
+export default _default;
diff --git a/node_modules/dom-helpers/esm/canUseDOM.js b/node_modules/dom-helpers/esm/canUseDOM.js
new file mode 100644
index 0000000000000000000000000000000000000000..cca7076bbcab02cf7f6fc36eee4f90c6760ef005
--- /dev/null
+++ b/node_modules/dom-helpers/esm/canUseDOM.js
@@ -0,0 +1 @@
+export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/childElements.d.ts b/node_modules/dom-helpers/esm/childElements.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2d8c46732c0375609f5f39ec2dbc9256d2cbac5c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/childElements.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all child elements of an element.
+ *
+ * @param node the element
+ */
+export default function childElements(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/esm/childElements.js b/node_modules/dom-helpers/esm/childElements.js
new file mode 100644
index 0000000000000000000000000000000000000000..7735be0cde863ed3f84f411082d0fea148a1e7b9
--- /dev/null
+++ b/node_modules/dom-helpers/esm/childElements.js
@@ -0,0 +1,8 @@
+/**
+ * Collects all child elements of an element.
+ * 
+ * @param node the element
+ */
+export default function childElements(node) {
+  return node ? Array.from(node.children) : [];
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/childNodes.d.ts b/node_modules/dom-helpers/esm/childNodes.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..467a41ab60c03a5faf838cd19193545999195f36
--- /dev/null
+++ b/node_modules/dom-helpers/esm/childNodes.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all child nodes of an element.
+ *
+ * @param node the node
+ */
+export default function childNodes(node: Element | null): Node[];
diff --git a/node_modules/dom-helpers/esm/childNodes.js b/node_modules/dom-helpers/esm/childNodes.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d5578ebbca562cc35862ae33f9e6d12f8dd1c1c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/childNodes.js
@@ -0,0 +1,10 @@
+var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);
+/**
+ * Collects all child nodes of an element.
+ * 
+ * @param node the node
+ */
+
+export default function childNodes(node) {
+  return node ? toArray(node.childNodes) : [];
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/clear.d.ts b/node_modules/dom-helpers/esm/clear.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bfa0282bc1e3e281450d5e4dc71222d2520554ff
--- /dev/null
+++ b/node_modules/dom-helpers/esm/clear.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Removes all child nodes from a given node.
+ *
+ * @param node the node to clear
+ */
+export default function clear(node: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/esm/clear.js b/node_modules/dom-helpers/esm/clear.js
new file mode 100644
index 0000000000000000000000000000000000000000..28accf8b6391bc4017ea866926a9f409d95f952d
--- /dev/null
+++ b/node_modules/dom-helpers/esm/clear.js
@@ -0,0 +1,16 @@
+/**
+ * Removes all child nodes from a given node.
+ * 
+ * @param node the node to clear
+ */
+export default function clear(node) {
+  if (node) {
+    while (node.firstChild) {
+      node.removeChild(node.firstChild);
+    }
+
+    return node;
+  }
+
+  return null;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/closest.d.ts b/node_modules/dom-helpers/esm/closest.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d2bfe81311b4e736a78336b8940561391af31526
--- /dev/null
+++ b/node_modules/dom-helpers/esm/closest.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Returns the closest parent element that matches a given selector.
+ *
+ * @param node the reference element
+ * @param selector the selector to match
+ * @param stopAt stop traversing when this element is found
+ */
+export default function closest(node: Element, selector: string, stopAt?: Element): Element | null;
diff --git a/node_modules/dom-helpers/esm/closest.js b/node_modules/dom-helpers/esm/closest.js
new file mode 100644
index 0000000000000000000000000000000000000000..46790c2d622dd4e1a31d459e7d68248885a8cfc0
--- /dev/null
+++ b/node_modules/dom-helpers/esm/closest.js
@@ -0,0 +1,20 @@
+import matches from './matches';
+/**
+ * Returns the closest parent element that matches a given selector.
+ * 
+ * @param node the reference element
+ * @param selector the selector to match
+ * @param stopAt stop traversing when this element is found
+ */
+
+export default function closest(node, selector, stopAt) {
+  if (node.closest && !stopAt) node.closest(selector);
+  var nextNode = node;
+
+  do {
+    if (matches(nextNode, selector)) return nextNode;
+    nextNode = nextNode.parentElement;
+  } while (nextNode && nextNode !== stopAt && nextNode.nodeType === document.ELEMENT_NODE);
+
+  return null;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/collectElements.d.ts b/node_modules/dom-helpers/esm/collectElements.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d24bd003bd0dc8d638021708c28417724f2de6fa
--- /dev/null
+++ b/node_modules/dom-helpers/esm/collectElements.d.ts
@@ -0,0 +1,3 @@
+declare type TraverseDirection = 'parentElement' | 'previousElementSibling' | 'nextElementSibling';
+export default function collectElements(node: Element | null, direction: TraverseDirection): Element[];
+export {};
diff --git a/node_modules/dom-helpers/esm/collectElements.js b/node_modules/dom-helpers/esm/collectElements.js
new file mode 100644
index 0000000000000000000000000000000000000000..93ca36baed5713d8da840592c3550f1f9585ce87
--- /dev/null
+++ b/node_modules/dom-helpers/esm/collectElements.js
@@ -0,0 +1,12 @@
+export default function collectElements(node, direction) {
+  var nextNode = null;
+  var nodes = [];
+  nextNode = node ? node[direction] : null;
+
+  while (nextNode && nextNode.nodeType !== 9) {
+    nodes.push(nextNode);
+    nextNode = nextNode[direction] || null;
+  }
+
+  return nodes;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/collectSiblings.d.ts b/node_modules/dom-helpers/esm/collectSiblings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a54a3592effd00fbf2078340f13cfbab7fb4a40b
--- /dev/null
+++ b/node_modules/dom-helpers/esm/collectSiblings.d.ts
@@ -0,0 +1 @@
+export default function collectSiblings(node: Element | null, refNode?: Element | null, selector?: string | null): Element[];
diff --git a/node_modules/dom-helpers/esm/collectSiblings.js b/node_modules/dom-helpers/esm/collectSiblings.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b004d8aaadb9e7e52a2591599565bcc9b3d40a4
--- /dev/null
+++ b/node_modules/dom-helpers/esm/collectSiblings.js
@@ -0,0 +1,24 @@
+import matches from './matches';
+export default function collectSiblings(node, refNode, selector) {
+  if (refNode === void 0) {
+    refNode = null;
+  }
+
+  if (selector === void 0) {
+    selector = null;
+  }
+
+  var siblings = [];
+
+  for (; node; node = node.nextElementSibling) {
+    if (node !== refNode) {
+      if (selector && matches(node, selector)) {
+        break;
+      }
+
+      siblings.push(node);
+    }
+  }
+
+  return siblings;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/contains.d.ts b/node_modules/dom-helpers/esm/contains.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d22b2c0d40c0f8e31b352ce3087f32d4b93f7ed9
--- /dev/null
+++ b/node_modules/dom-helpers/esm/contains.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if an element contains another given element.
+ *
+ * @param context the context element
+ * @param node the element to check
+ */
+export default function contains(context: Element, node: Element): boolean | undefined;
diff --git a/node_modules/dom-helpers/esm/contains.js b/node_modules/dom-helpers/esm/contains.js
new file mode 100644
index 0000000000000000000000000000000000000000..866eb438c7c0f0a48926cfdb1381a62dc5c5d343
--- /dev/null
+++ b/node_modules/dom-helpers/esm/contains.js
@@ -0,0 +1,14 @@
+/* eslint-disable no-bitwise, no-cond-assign */
+
+/**
+ * Checks if an element contains another given element.
+ * 
+ * @param context the context element
+ * @param node the element to check
+ */
+export default function contains(context, node) {
+  // HTML DOM and SVG DOM may have different support levels,
+  // so we need to check on context instead of a document root element.
+  if (context.contains) return context.contains(node);
+  if (context.compareDocumentPosition) return context === node || !!(context.compareDocumentPosition(node) & 16);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/css.d.ts b/node_modules/dom-helpers/esm/css.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..473f2b84b1c7ea56e2302e9f4b78cdfb46096055
--- /dev/null
+++ b/node_modules/dom-helpers/esm/css.d.ts
@@ -0,0 +1,6 @@
+import * as CSS from 'csstype';
+import { CamelProperty, HyphenProperty, Property } from './types';
+declare function style(node: HTMLElement, property: Partial<Record<Property, string>>): void;
+declare function style<T extends HyphenProperty>(node: HTMLElement, property: T): CSS.PropertiesHyphen[T];
+declare function style<T extends CamelProperty>(node: HTMLElement, property: T): CSS.Properties[T];
+export default style;
diff --git a/node_modules/dom-helpers/esm/css.js b/node_modules/dom-helpers/esm/css.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a66af1776fb3e2fb53d36f1f1891bca5753e8cf
--- /dev/null
+++ b/node_modules/dom-helpers/esm/css.js
@@ -0,0 +1,32 @@
+import getComputedStyle from './getComputedStyle';
+import hyphenate from './hyphenateStyle';
+import isTransform from './isTransform';
+
+function style(node, property) {
+  var css = '';
+  var transforms = '';
+
+  if (typeof property === 'string') {
+    return node.style.getPropertyValue(hyphenate(property)) || getComputedStyle(node).getPropertyValue(hyphenate(property));
+  }
+
+  Object.keys(property).forEach(function (key) {
+    var value = property[key];
+
+    if (!value && value !== 0) {
+      node.style.removeProperty(hyphenate(key));
+    } else if (isTransform(key)) {
+      transforms += key + "(" + value + ") ";
+    } else {
+      css += hyphenate(key) + ": " + value + ";";
+    }
+  });
+
+  if (transforms) {
+    css += "transform: " + transforms + ";";
+  }
+
+  node.style.cssText += ";" + css;
+}
+
+export default style;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/filterEventHandler.d.ts b/node_modules/dom-helpers/esm/filterEventHandler.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6a64be2e3878ac1b2b8396739e4b518e5fa8f70f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/filterEventHandler.d.ts
@@ -0,0 +1,2 @@
+import { EventHandler } from './addEventListener';
+export default function filterEvents<K extends keyof HTMLElementEventMap>(selector: string, handler: EventHandler<K>): EventHandler<K>;
diff --git a/node_modules/dom-helpers/esm/filterEventHandler.js b/node_modules/dom-helpers/esm/filterEventHandler.js
new file mode 100644
index 0000000000000000000000000000000000000000..63786338c8c61e74b31efa72960d5acf6b38c47f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/filterEventHandler.js
@@ -0,0 +1,12 @@
+import contains from './contains';
+import qsa from './querySelectorAll';
+export default function filterEvents(selector, handler) {
+  return function filterHandler(e) {
+    var top = e.currentTarget;
+    var target = e.target;
+    var matches = qsa(top, selector);
+    if (matches.some(function (match) {
+      return contains(match, target);
+    })) handler.call(this, e);
+  };
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/getComputedStyle.d.ts b/node_modules/dom-helpers/esm/getComputedStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..653a12f9ae560fa27ec78303452a306451bc4029
--- /dev/null
+++ b/node_modules/dom-helpers/esm/getComputedStyle.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns one or all computed style properties of an element.
+ *
+ * @param node the element
+ * @param psuedoElement the style property
+ */
+export default function getComputedStyle(node: HTMLElement, psuedoElement?: string): CSSStyleDeclaration;
diff --git a/node_modules/dom-helpers/esm/getComputedStyle.js b/node_modules/dom-helpers/esm/getComputedStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab318fa857f661b084f60bca38b8e1ca497396be
--- /dev/null
+++ b/node_modules/dom-helpers/esm/getComputedStyle.js
@@ -0,0 +1,11 @@
+import ownerWindow from './ownerWindow';
+/**
+ * Returns one or all computed style properties of an element.
+ * 
+ * @param node the element
+ * @param psuedoElement the style property
+ */
+
+export default function getComputedStyle(node, psuedoElement) {
+  return ownerWindow(node).getComputedStyle(node, psuedoElement);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/getScrollAccessor.d.ts b/node_modules/dom-helpers/esm/getScrollAccessor.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9814cbe23dc01c1c969de25857e7b550a86fd5fb
--- /dev/null
+++ b/node_modules/dom-helpers/esm/getScrollAccessor.d.ts
@@ -0,0 +1,4 @@
+export default function getscrollAccessor(offset: 'pageXOffset' | 'pageYOffset'): {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
diff --git a/node_modules/dom-helpers/esm/getScrollAccessor.js b/node_modules/dom-helpers/esm/getScrollAccessor.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd3710a38362f66082d89dcdcb3fbdfef30ff05c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/getScrollAccessor.js
@@ -0,0 +1,20 @@
+import isWindow from './isWindow';
+export default function getscrollAccessor(offset) {
+  var prop = offset === 'pageXOffset' ? 'scrollLeft' : 'scrollTop';
+
+  function scrollAccessor(node, val) {
+    var win = isWindow(node);
+
+    if (val === undefined) {
+      return win ? win[offset] : node[prop];
+    }
+
+    if (win) {
+      win.scrollTo(win[offset], val);
+    } else {
+      node[prop] = val;
+    }
+  }
+
+  return scrollAccessor;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/hasClass.d.ts b/node_modules/dom-helpers/esm/hasClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b7d96e3154aa7716e32b963e4ef66d1672654f5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hasClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if a given element has a CSS class.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function hasClass(element: Element | SVGElement, className: string): boolean;
diff --git a/node_modules/dom-helpers/esm/hasClass.js b/node_modules/dom-helpers/esm/hasClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..9be9ab116faf330ebbd5f5b92af55284e7dbd971
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hasClass.js
@@ -0,0 +1,10 @@
+/**
+ * Checks if a given element has a CSS class.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function hasClass(element, className) {
+  if (element.classList) return !!className && element.classList.contains(className);
+  return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/height.d.ts b/node_modules/dom-helpers/esm/height.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9086ea3b98a6b5e6bfde7bc9b17d2e8d442be114
--- /dev/null
+++ b/node_modules/dom-helpers/esm/height.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns the height of a given element.
+ *
+ * @param node the element
+ * @param client whether to use `clientHeight` if possible
+ */
+export default function height(node: HTMLElement, client?: boolean): number;
diff --git a/node_modules/dom-helpers/esm/height.js b/node_modules/dom-helpers/esm/height.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb4af574b3e84fc35c4403c436113fd8b5f3a1a9
--- /dev/null
+++ b/node_modules/dom-helpers/esm/height.js
@@ -0,0 +1,13 @@
+import getWindow from './isWindow';
+import offset from './offset';
+/**
+ * Returns the height of a given element.
+ * 
+ * @param node the element
+ * @param client whether to use `clientHeight` if possible
+ */
+
+export default function height(node, client) {
+  var win = getWindow(node);
+  return win ? win.innerHeight : client ? node.clientHeight : offset(node).height;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/hyphenate.d.ts b/node_modules/dom-helpers/esm/hyphenate.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1f5c1708c65cefe93b29dacb503605f5ec31d8d9
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hyphenate.d.ts
@@ -0,0 +1 @@
+export default function hyphenate(string: string): string;
diff --git a/node_modules/dom-helpers/esm/hyphenate.js b/node_modules/dom-helpers/esm/hyphenate.js
new file mode 100644
index 0000000000000000000000000000000000000000..5925a148b3cf50f3319d8cfbc79ad55bd573445f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hyphenate.js
@@ -0,0 +1,4 @@
+var rUpper = /([A-Z])/g;
+export default function hyphenate(string) {
+  return string.replace(rUpper, '-$1').toLowerCase();
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/hyphenateStyle.d.ts b/node_modules/dom-helpers/esm/hyphenateStyle.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a755d1f03e355257a1aa2bc6e027f9ba42fc2ff1
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hyphenateStyle.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js
+ */
+import { Property } from './types';
+export default function hyphenateStyleName(string: Property): Property;
diff --git a/node_modules/dom-helpers/esm/hyphenateStyle.js b/node_modules/dom-helpers/esm/hyphenateStyle.js
new file mode 100644
index 0000000000000000000000000000000000000000..f8b2d1b8e809154eca2a7b58e0afde3f7c788832
--- /dev/null
+++ b/node_modules/dom-helpers/esm/hyphenateStyle.js
@@ -0,0 +1,10 @@
+/**
+ * Copyright 2013-2014, Facebook, Inc.
+ * All rights reserved.
+ * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js
+ */
+import hyphenate from './hyphenate';
+var msPattern = /^ms-/;
+export default function hyphenateStyleName(string) {
+  return hyphenate(string).replace(msPattern, '-ms-');
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/index.d.ts b/node_modules/dom-helpers/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b47653613792f7ba731097b2bc31c4517ae20d66
--- /dev/null
+++ b/node_modules/dom-helpers/esm/index.d.ts
@@ -0,0 +1,99 @@
+import activeElement from './activeElement';
+import addClass from './addClass';
+import addEventListener from './addEventListener';
+import animate from './animate';
+import { cancel as cancelAnimationFrame, request as requestAnimationFrame } from './animationFrame';
+import attribute from './attribute';
+import childElements from './childElements';
+import clear from './clear';
+import closest from './closest';
+import contains from './contains';
+import childNodes from './childNodes';
+import style from './css';
+import filter from './filterEventHandler';
+import getComputedStyle from './getComputedStyle';
+import hasClass from './hasClass';
+import height from './height';
+import insertAfter from './insertAfter';
+import isInput from './isInput';
+import isVisible from './isVisible';
+import listen from './listen';
+import matches from './matches';
+import nextUntil from './nextUntil';
+import offset from './offset';
+import offsetParent from './offsetParent';
+import ownerDocument from './ownerDocument';
+import ownerWindow from './ownerWindow';
+import parents from './parents';
+import position from './position';
+import prepend from './prepend';
+import querySelectorAll from './querySelectorAll';
+import remove from './remove';
+import removeClass from './removeClass';
+import removeEventListener from './removeEventListener';
+import scrollbarSize from './scrollbarSize';
+import scrollLeft from './scrollLeft';
+import scrollParent from './scrollParent';
+import scrollTo from './scrollTo';
+import scrollTop from './scrollTop';
+import siblings from './siblings';
+import text from './text';
+import toggleClass from './toggleClass';
+import transitionEnd from './transitionEnd';
+import triggerEvent from './triggerEvent';
+import width from './width';
+export { addEventListener, removeEventListener, triggerEvent, animate, filter, listen, style, getComputedStyle, attribute, activeElement, ownerDocument, ownerWindow, requestAnimationFrame, cancelAnimationFrame, matches, height, width, offset, offsetParent, position, contains, scrollbarSize, scrollLeft, scrollParent, scrollTo, scrollTop, querySelectorAll, closest, addClass, removeClass, hasClass, toggleClass, transitionEnd, childNodes, childElements, nextUntil, parents, siblings, clear, insertAfter, isInput, isVisible, prepend, remove, text, };
+declare const _default: {
+    addEventListener: typeof addEventListener;
+    removeEventListener: typeof removeEventListener;
+    triggerEvent: typeof triggerEvent;
+    animate: typeof animate;
+    filter: typeof filter;
+    listen: typeof listen;
+    style: typeof style;
+    getComputedStyle: typeof getComputedStyle;
+    attribute: typeof attribute;
+    activeElement: typeof activeElement;
+    ownerDocument: typeof ownerDocument;
+    ownerWindow: typeof ownerWindow;
+    requestAnimationFrame: typeof globalThis.requestAnimationFrame;
+    cancelAnimationFrame: (id: number) => void;
+    matches: typeof matches;
+    height: typeof height;
+    width: typeof width;
+    offset: typeof offset;
+    offsetParent: typeof offsetParent;
+    position: typeof position;
+    contains: typeof contains;
+    scrollbarSize: typeof scrollbarSize;
+    scrollLeft: {
+        (node: Element): number;
+        (node: Element, val: number): undefined;
+    };
+    scrollParent: typeof scrollParent;
+    scrollTo: typeof scrollTo;
+    scrollTop: {
+        (node: Element): number;
+        (node: Element, val: number): undefined;
+    };
+    querySelectorAll: typeof querySelectorAll;
+    closest: typeof closest;
+    addClass: typeof addClass;
+    removeClass: typeof removeClass;
+    hasClass: typeof hasClass;
+    toggleClass: typeof toggleClass;
+    transitionEnd: typeof transitionEnd;
+    childNodes: typeof childNodes;
+    childElements: typeof childElements;
+    nextUntil: typeof nextUntil;
+    parents: typeof parents;
+    siblings: typeof siblings;
+    clear: typeof clear;
+    insertAfter: typeof insertAfter;
+    isInput: typeof isInput;
+    isVisible: typeof isVisible;
+    prepend: typeof prepend;
+    remove: typeof remove;
+    text: typeof text;
+};
+export default _default;
diff --git a/node_modules/dom-helpers/esm/index.js b/node_modules/dom-helpers/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0378791be75fcf4a3f066380a8668938b7a2af82
--- /dev/null
+++ b/node_modules/dom-helpers/esm/index.js
@@ -0,0 +1,92 @@
+import activeElement from './activeElement';
+import addClass from './addClass';
+import addEventListener from './addEventListener';
+import animate from './animate';
+import { cancel as cancelAnimationFrame, request as requestAnimationFrame } from './animationFrame';
+import attribute from './attribute';
+import childElements from './childElements';
+import clear from './clear';
+import closest from './closest';
+import contains from './contains';
+import childNodes from './childNodes';
+import style from './css';
+import filter from './filterEventHandler';
+import getComputedStyle from './getComputedStyle';
+import hasClass from './hasClass';
+import height from './height';
+import insertAfter from './insertAfter';
+import isInput from './isInput';
+import isVisible from './isVisible';
+import listen from './listen';
+import matches from './matches';
+import nextUntil from './nextUntil';
+import offset from './offset';
+import offsetParent from './offsetParent';
+import ownerDocument from './ownerDocument';
+import ownerWindow from './ownerWindow';
+import parents from './parents';
+import position from './position';
+import prepend from './prepend';
+import querySelectorAll from './querySelectorAll';
+import remove from './remove';
+import removeClass from './removeClass';
+import removeEventListener from './removeEventListener';
+import scrollbarSize from './scrollbarSize';
+import scrollLeft from './scrollLeft';
+import scrollParent from './scrollParent';
+import scrollTo from './scrollTo';
+import scrollTop from './scrollTop';
+import siblings from './siblings';
+import text from './text';
+import toggleClass from './toggleClass';
+import transitionEnd from './transitionEnd';
+import triggerEvent from './triggerEvent';
+import width from './width';
+export { addEventListener, removeEventListener, triggerEvent, animate, filter, listen, style, getComputedStyle, attribute, activeElement, ownerDocument, ownerWindow, requestAnimationFrame, cancelAnimationFrame, matches, height, width, offset, offsetParent, position, contains, scrollbarSize, scrollLeft, scrollParent, scrollTo, scrollTop, querySelectorAll, closest, addClass, removeClass, hasClass, toggleClass, transitionEnd, childNodes, childElements, nextUntil, parents, siblings, clear, insertAfter, isInput, isVisible, prepend, remove, text };
+export default {
+  addEventListener: addEventListener,
+  removeEventListener: removeEventListener,
+  triggerEvent: triggerEvent,
+  animate: animate,
+  filter: filter,
+  listen: listen,
+  style: style,
+  getComputedStyle: getComputedStyle,
+  attribute: attribute,
+  activeElement: activeElement,
+  ownerDocument: ownerDocument,
+  ownerWindow: ownerWindow,
+  requestAnimationFrame: requestAnimationFrame,
+  cancelAnimationFrame: cancelAnimationFrame,
+  matches: matches,
+  height: height,
+  width: width,
+  offset: offset,
+  offsetParent: offsetParent,
+  position: position,
+  contains: contains,
+  scrollbarSize: scrollbarSize,
+  scrollLeft: scrollLeft,
+  scrollParent: scrollParent,
+  scrollTo: scrollTo,
+  scrollTop: scrollTop,
+  querySelectorAll: querySelectorAll,
+  closest: closest,
+  addClass: addClass,
+  removeClass: removeClass,
+  hasClass: hasClass,
+  toggleClass: toggleClass,
+  transitionEnd: transitionEnd,
+  childNodes: childNodes,
+  childElements: childElements,
+  nextUntil: nextUntil,
+  parents: parents,
+  siblings: siblings,
+  clear: clear,
+  insertAfter: insertAfter,
+  isInput: isInput,
+  isVisible: isVisible,
+  prepend: prepend,
+  remove: remove,
+  text: text
+};
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/insertAfter.d.ts b/node_modules/dom-helpers/esm/insertAfter.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4c8c1117b847fd4f0c6f187e0d993015db0c5213
--- /dev/null
+++ b/node_modules/dom-helpers/esm/insertAfter.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Inserts a node after a given reference node.
+ *
+ * @param node the node to insert
+ * @param refNode the reference node
+ */
+export default function insertAfter(node: Node | null, refNode: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/esm/insertAfter.js b/node_modules/dom-helpers/esm/insertAfter.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b3f801d454ae2654e43da8d21ac8f9fc6e64c42
--- /dev/null
+++ b/node_modules/dom-helpers/esm/insertAfter.js
@@ -0,0 +1,19 @@
+/**
+ * Inserts a node after a given reference node.
+ * 
+ * @param node the node to insert
+ * @param refNode the reference node
+ */
+export default function insertAfter(node, refNode) {
+  if (node && refNode && refNode.parentNode) {
+    if (refNode.nextSibling) {
+      refNode.parentNode.insertBefore(node, refNode.nextSibling);
+    } else {
+      refNode.parentNode.appendChild(node);
+    }
+
+    return node;
+  }
+
+  return null;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/isDocument.d.ts b/node_modules/dom-helpers/esm/isDocument.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..61e7626ec37b15e2a452ea7619d97bef1839dbe6
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isDocument.d.ts
@@ -0,0 +1 @@
+export default function isDocument(element: Element | Document | Window): element is Document;
diff --git a/node_modules/dom-helpers/esm/isDocument.js b/node_modules/dom-helpers/esm/isDocument.js
new file mode 100644
index 0000000000000000000000000000000000000000..18620eb0e8e234b1c339e4d11965fa47f9cbee7c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isDocument.js
@@ -0,0 +1,3 @@
+export default function isDocument(element) {
+  return 'nodeType' in element && element.nodeType === document.DOCUMENT_NODE;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/isInput.d.ts b/node_modules/dom-helpers/esm/isInput.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7cc25bf847eb03f1040a207ee554851e138f7fbe
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isInput.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Checks if a given element is an input (input, select, textarea or button).
+ *
+ * @param node the element to check
+ */
+export default function isInput(node: Element | null): boolean;
diff --git a/node_modules/dom-helpers/esm/isInput.js b/node_modules/dom-helpers/esm/isInput.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0f1d60b60b095ebedb1fa8f4b1b6f72df17a9db
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isInput.js
@@ -0,0 +1,10 @@
+var regExpInputs = /^(?:input|select|textarea|button)$/i;
+/**
+ * Checks if a given element is an input (input, select, textarea or button).
+ * 
+ * @param node the element to check
+ */
+
+export default function isInput(node) {
+  return node ? regExpInputs.test(node.nodeName) : false;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/isTransform.d.ts b/node_modules/dom-helpers/esm/isTransform.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..01665c8e6e8ecce7232747f9234f990e11aa2bd5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isTransform.d.ts
@@ -0,0 +1,2 @@
+export declare type TransformValue = 'translate' | 'translateY' | 'translateX' | 'translateZ' | 'translate3d' | 'rotate' | 'rotateY' | 'rotateX' | 'rotateZ' | 'rotate3d' | 'scale' | 'scaleY' | 'scaleX' | 'scaleZ' | 'scale3d' | 'matrix' | 'matrix3d' | 'perspective' | 'skew' | 'skewY' | 'skewX';
+export default function isTransform(value: string): value is TransformValue;
diff --git a/node_modules/dom-helpers/esm/isTransform.js b/node_modules/dom-helpers/esm/isTransform.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb2833e6570224f9dd73341d34bc0fe80ffad638
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isTransform.js
@@ -0,0 +1,4 @@
+var supportedTransforms = /^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;
+export default function isTransform(value) {
+  return !!(value && supportedTransforms.test(value));
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/isVisible.d.ts b/node_modules/dom-helpers/esm/isVisible.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..506a6aca49a3296c75fe655001262d7fc2ba7676
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isVisible.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Checks if a given element is currently visible.
+ *
+ * @param node the element to check
+ */
+export default function isVisible(node: HTMLElement | null): boolean;
diff --git a/node_modules/dom-helpers/esm/isVisible.js b/node_modules/dom-helpers/esm/isVisible.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f0615e398ca90df52e7ae4b939a795c2ffdc856
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isVisible.js
@@ -0,0 +1,8 @@
+/**
+ * Checks if a given element is currently visible.
+ * 
+ * @param node the element to check
+ */
+export default function isVisible(node) {
+  return node ? !!(node.offsetWidth || node.offsetHeight || node.getClientRects().length) : false;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/isWindow.d.ts b/node_modules/dom-helpers/esm/isWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..46d4359a57a87a657baa8d9a3d3f5f5455bb9607
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isWindow.d.ts
@@ -0,0 +1 @@
+export default function isWindow(node: Element | Document | Window): Window | false;
diff --git a/node_modules/dom-helpers/esm/isWindow.js b/node_modules/dom-helpers/esm/isWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..474c161fec785e243c52875fcee5c29301817149
--- /dev/null
+++ b/node_modules/dom-helpers/esm/isWindow.js
@@ -0,0 +1,6 @@
+import isDocument from './isDocument';
+export default function isWindow(node) {
+  if ('window' in node && node.window === node) return node;
+  if (isDocument(node)) return node.defaultView || false;
+  return false;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/listen.d.ts b/node_modules/dom-helpers/esm/listen.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..20d8033f8647b22941d8ac6f718fad19226a99c2
--- /dev/null
+++ b/node_modules/dom-helpers/esm/listen.d.ts
@@ -0,0 +1,3 @@
+import { EventHandler } from './addEventListener';
+declare function listen<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: EventHandler<K>, options?: boolean | AddEventListenerOptions): () => void;
+export default listen;
diff --git a/node_modules/dom-helpers/esm/listen.js b/node_modules/dom-helpers/esm/listen.js
new file mode 100644
index 0000000000000000000000000000000000000000..842e8987ba6a4209464a51dcb866923cd4e61d1f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/listen.js
@@ -0,0 +1,11 @@
+import addEventListener from './addEventListener';
+import removeEventListener from './removeEventListener';
+
+function listen(node, eventName, handler, options) {
+  addEventListener(node, eventName, handler, options);
+  return function () {
+    removeEventListener(node, eventName, handler, options);
+  };
+}
+
+export default listen;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/matches.d.ts b/node_modules/dom-helpers/esm/matches.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8fc2d1074d48db626917581e89cd1544f4c5ec56
--- /dev/null
+++ b/node_modules/dom-helpers/esm/matches.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Checks if a given element matches a selector.
+ *
+ * @param node the element
+ * @param selector the selector
+ */
+export default function matches(node: Element, selector: string): boolean;
diff --git a/node_modules/dom-helpers/esm/matches.js b/node_modules/dom-helpers/esm/matches.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c1aed1d57db32804a5d728de23fe964a4d049f7
--- /dev/null
+++ b/node_modules/dom-helpers/esm/matches.js
@@ -0,0 +1,20 @@
+var matchesImpl;
+/**
+ * Checks if a given element matches a selector.
+ * 
+ * @param node the element
+ * @param selector the selector
+ */
+
+export default function matches(node, selector) {
+  if (!matchesImpl) {
+    var body = document.body;
+    var nativeMatch = body.matches || body.matchesSelector || body.webkitMatchesSelector || body.mozMatchesSelector || body.msMatchesSelector;
+
+    matchesImpl = function matchesImpl(n, s) {
+      return nativeMatch.call(n, s);
+    };
+  }
+
+  return matchesImpl(node, selector);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/nextUntil.d.ts b/node_modules/dom-helpers/esm/nextUntil.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc8d74dc0108bb3207e773cbe4ef45dc343d4f98
--- /dev/null
+++ b/node_modules/dom-helpers/esm/nextUntil.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Collects all next sibling elements of an element until a given selector is matched.
+ *
+ * @param node the referene node
+ * @param selector the selector to match
+ */
+export default function nextUntil(node: Element | null, selector: string): Element[];
diff --git a/node_modules/dom-helpers/esm/nextUntil.js b/node_modules/dom-helpers/esm/nextUntil.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ad8d5f75f5ab60133b07f8be15330d22b3f27ad
--- /dev/null
+++ b/node_modules/dom-helpers/esm/nextUntil.js
@@ -0,0 +1,11 @@
+import collectSiblings from './collectSiblings';
+/**
+ * Collects all next sibling elements of an element until a given selector is matched.
+ * 
+ * @param node the referene node
+ * @param selector the selector to match
+ */
+
+export default function nextUntil(node, selector) {
+  return collectSiblings(node, node, selector);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/offset.d.ts b/node_modules/dom-helpers/esm/offset.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d924e241848b54977d87d61149a3c37be34e50ca
--- /dev/null
+++ b/node_modules/dom-helpers/esm/offset.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Returns the offset of a given element, including top and left positions, width and height.
+ *
+ * @param node the element
+ */
+export default function offset(node: HTMLElement): {
+    top: number;
+    left: number;
+    height: number;
+    width: number;
+};
diff --git a/node_modules/dom-helpers/esm/offset.js b/node_modules/dom-helpers/esm/offset.js
new file mode 100644
index 0000000000000000000000000000000000000000..0016964cf3b8d974c4ee1decc21e8bbd7cf1aebd
--- /dev/null
+++ b/node_modules/dom-helpers/esm/offset.js
@@ -0,0 +1,30 @@
+import contains from './contains';
+import ownerDocument from './ownerDocument';
+import scrollLeft from './scrollLeft';
+import scrollTop from './scrollTop';
+/**
+ * Returns the offset of a given element, including top and left positions, width and height.
+ * 
+ * @param node the element
+ */
+
+export default function offset(node) {
+  var doc = ownerDocument(node);
+  var box = {
+    top: 0,
+    left: 0,
+    height: 0,
+    width: 0
+  };
+  var docElem = doc && doc.documentElement; // Make sure it's not a disconnected DOM node
+
+  if (!docElem || !contains(docElem, node)) return box;
+  if (node.getBoundingClientRect !== undefined) box = node.getBoundingClientRect();
+  box = {
+    top: box.top + scrollTop(docElem) - (docElem.clientTop || 0),
+    left: box.left + scrollLeft(docElem) - (docElem.clientLeft || 0),
+    width: box.width,
+    height: box.height
+  };
+  return box;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/offsetParent.d.ts b/node_modules/dom-helpers/esm/offsetParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e60a4a91755ff190b832af7b07452327b0f908da
--- /dev/null
+++ b/node_modules/dom-helpers/esm/offsetParent.d.ts
@@ -0,0 +1 @@
+export default function offsetParent(node: HTMLElement): HTMLElement;
diff --git a/node_modules/dom-helpers/esm/offsetParent.js b/node_modules/dom-helpers/esm/offsetParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a85789b85b7877ffac69e96bbdc787ebf44f7ea
--- /dev/null
+++ b/node_modules/dom-helpers/esm/offsetParent.js
@@ -0,0 +1,17 @@
+import css from './css';
+import ownerDocument from './ownerDocument';
+
+var isHTMLElement = function isHTMLElement(e) {
+  return !!e && 'offsetParent' in e;
+};
+
+export default function offsetParent(node) {
+  var doc = ownerDocument(node);
+  var parent = node && node.offsetParent;
+
+  while (isHTMLElement(parent) && parent.nodeName !== 'HTML' && css(parent, 'position') === 'static') {
+    parent = parent.offsetParent;
+  }
+
+  return parent || doc.documentElement;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/ownerDocument.d.ts b/node_modules/dom-helpers/esm/ownerDocument.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..804406a36ba7676d614f31da12ac14de29f1ca4c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/ownerDocument.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the owner document of a given element.
+ *
+ * @param node the element
+ */
+export default function ownerDocument(node?: Element): Document;
diff --git a/node_modules/dom-helpers/esm/ownerDocument.js b/node_modules/dom-helpers/esm/ownerDocument.js
new file mode 100644
index 0000000000000000000000000000000000000000..f72cd12f67e99724f216e4f6605a968f7266b277
--- /dev/null
+++ b/node_modules/dom-helpers/esm/ownerDocument.js
@@ -0,0 +1,8 @@
+/**
+ * Returns the owner document of a given element.
+ * 
+ * @param node the element
+ */
+export default function ownerDocument(node) {
+  return node && node.ownerDocument || document;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/ownerWindow.d.ts b/node_modules/dom-helpers/esm/ownerWindow.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..6113c9d2dc7b8498752d357c6f251d9c48671244
--- /dev/null
+++ b/node_modules/dom-helpers/esm/ownerWindow.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Returns the owner window of a given element.
+ *
+ * @param node the element
+ */
+export default function ownerWindow(node?: Element): Window;
diff --git a/node_modules/dom-helpers/esm/ownerWindow.js b/node_modules/dom-helpers/esm/ownerWindow.js
new file mode 100644
index 0000000000000000000000000000000000000000..ed920dfa07f3f35f717a925f534f31ec65deb005
--- /dev/null
+++ b/node_modules/dom-helpers/esm/ownerWindow.js
@@ -0,0 +1,11 @@
+import ownerDocument from './ownerDocument';
+/**
+ * Returns the owner window of a given element.
+ * 
+ * @param node the element
+ */
+
+export default function ownerWindow(node) {
+  var doc = ownerDocument(node);
+  return doc && doc.defaultView || window;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/parents.d.ts b/node_modules/dom-helpers/esm/parents.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a729777cd6f80acd6889be27c1e60012e39e9672
--- /dev/null
+++ b/node_modules/dom-helpers/esm/parents.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all parent elements of a given element.
+ *
+ * @param node the element
+ */
+export default function parents(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/esm/parents.js b/node_modules/dom-helpers/esm/parents.js
new file mode 100644
index 0000000000000000000000000000000000000000..c55a1c4928739733b96ea6b9e4187a614eaa1518
--- /dev/null
+++ b/node_modules/dom-helpers/esm/parents.js
@@ -0,0 +1,10 @@
+import collectElements from './collectElements';
+/**
+ * Collects all parent elements of a given element.
+ * 
+ * @param node the element
+ */
+
+export default function parents(node) {
+  return collectElements(node, 'parentElement');
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/position.d.ts b/node_modules/dom-helpers/esm/position.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a12a9812b61a2876fb7d47e6d197119714478339
--- /dev/null
+++ b/node_modules/dom-helpers/esm/position.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Returns the relative position of a given element.
+ *
+ * @param node the element
+ * @param offsetParent the offset parent
+ */
+export default function position(node: HTMLElement, offsetParent?: HTMLElement): {
+    top: number;
+    left: number;
+    height: number;
+    width: number;
+};
diff --git a/node_modules/dom-helpers/esm/position.js b/node_modules/dom-helpers/esm/position.js
new file mode 100644
index 0000000000000000000000000000000000000000..0b468549ceb38c1f3c06983dca4f696c160ad758
--- /dev/null
+++ b/node_modules/dom-helpers/esm/position.js
@@ -0,0 +1,46 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import css from './css';
+import getOffset from './offset';
+import getOffsetParent from './offsetParent';
+import scrollLeft from './scrollLeft';
+import scrollTop from './scrollTop';
+
+var nodeName = function nodeName(node) {
+  return node.nodeName && node.nodeName.toLowerCase();
+};
+/**
+ * Returns the relative position of a given element.
+ * 
+ * @param node the element
+ * @param offsetParent the offset parent
+ */
+
+
+export default function position(node, offsetParent) {
+  var parentOffset = {
+    top: 0,
+    left: 0
+  };
+  var offset; // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+  // because it is its only offset parent
+
+  if (css(node, 'position') === 'fixed') {
+    offset = node.getBoundingClientRect();
+  } else {
+    var parent = offsetParent || getOffsetParent(node);
+    offset = getOffset(node);
+    if (nodeName(parent) !== 'html') parentOffset = getOffset(parent);
+    var borderTop = String(css(parent, 'borderTopWidth') || 0);
+    parentOffset.top += parseInt(borderTop, 10) - scrollTop(parent) || 0;
+    var borderLeft = String(css(parent, 'borderLeftWidth') || 0);
+    parentOffset.left += parseInt(borderLeft, 10) - scrollLeft(parent) || 0;
+  }
+
+  var marginTop = String(css(node, 'marginTop') || 0);
+  var marginLeft = String(css(node, 'marginLeft') || 0); // Subtract parent offsets and node margins
+
+  return _extends({}, offset, {
+    top: offset.top - parentOffset.top - (parseInt(marginTop, 10) || 0),
+    left: offset.left - parentOffset.left - (parseInt(marginLeft, 10) || 0)
+  });
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/prepend.d.ts b/node_modules/dom-helpers/esm/prepend.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fc4eac973f5b12fce005433c043af05b7d9408d5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/prepend.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Insert a given element as the first child of a parent element.
+ *
+ * @param node the element to prepend
+ * @param parent the parent element
+ */
+export default function prepend(node: Element | null, parent: Element | null): Element | null;
diff --git a/node_modules/dom-helpers/esm/prepend.js b/node_modules/dom-helpers/esm/prepend.js
new file mode 100644
index 0000000000000000000000000000000000000000..c711296a1874c73f855faa3d1511558e3198015d
--- /dev/null
+++ b/node_modules/dom-helpers/esm/prepend.js
@@ -0,0 +1,19 @@
+/**
+ * Insert a given element as the first child of a parent element.
+ * 
+ * @param node the element to prepend
+ * @param parent the parent element
+ */
+export default function prepend(node, parent) {
+  if (node && parent) {
+    if (parent.firstElementChild) {
+      parent.insertBefore(node, parent.firstElementChild);
+    } else {
+      parent.appendChild(node);
+    }
+
+    return node;
+  }
+
+  return null;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/querySelectorAll.d.ts b/node_modules/dom-helpers/esm/querySelectorAll.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..639722cab3e2cae026f98e7f8a6998f12b0a00ad
--- /dev/null
+++ b/node_modules/dom-helpers/esm/querySelectorAll.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Runs `querySelectorAll` on a given element.
+ *
+ * @param element the element
+ * @param selector the selector
+ */
+export default function qsa(element: HTMLElement | Document, selector: string): HTMLElement[];
diff --git a/node_modules/dom-helpers/esm/querySelectorAll.js b/node_modules/dom-helpers/esm/querySelectorAll.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b5b0fe2ac14c2a45100539c3a185e8430cff601
--- /dev/null
+++ b/node_modules/dom-helpers/esm/querySelectorAll.js
@@ -0,0 +1,11 @@
+var toArray = Function.prototype.bind.call(Function.prototype.call, [].slice);
+/**
+ * Runs `querySelectorAll` on a given element.
+ * 
+ * @param element the element
+ * @param selector the selector
+ */
+
+export default function qsa(element, selector) {
+  return toArray(element.querySelectorAll(selector));
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/remove.d.ts b/node_modules/dom-helpers/esm/remove.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2dc7f0a4b00f90c79beb995dc5051d7936492df5
--- /dev/null
+++ b/node_modules/dom-helpers/esm/remove.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Removes a given node from the DOM.
+ *
+ * @param node the node to remove
+ */
+export default function remove(node: Node | null): Node | null;
diff --git a/node_modules/dom-helpers/esm/remove.js b/node_modules/dom-helpers/esm/remove.js
new file mode 100644
index 0000000000000000000000000000000000000000..9d2a124d6fbb44d4ca800939dcfa3f9143a82fa3
--- /dev/null
+++ b/node_modules/dom-helpers/esm/remove.js
@@ -0,0 +1,13 @@
+/**
+ * Removes a given node from the DOM.
+ * 
+ * @param node the node to remove
+ */
+export default function remove(node) {
+  if (node && node.parentNode) {
+    node.parentNode.removeChild(node);
+    return node;
+  }
+
+  return null;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/removeClass.d.ts b/node_modules/dom-helpers/esm/removeClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9fea4fe918a52bd848559ad6873fa4b36c10ca2b
--- /dev/null
+++ b/node_modules/dom-helpers/esm/removeClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Removes a CSS class from a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function removeClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/esm/removeClass.js b/node_modules/dom-helpers/esm/removeClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..1185e9776d5078fe434f159872c9324d6ac81aee
--- /dev/null
+++ b/node_modules/dom-helpers/esm/removeClass.js
@@ -0,0 +1,20 @@
+function replaceClassName(origClass, classToRemove) {
+  return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
+}
+/**
+ * Removes a CSS class from a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+
+
+export default function removeClass(element, className) {
+  if (element.classList) {
+    element.classList.remove(className);
+  } else if (typeof element.className === 'string') {
+    element.className = replaceClassName(element.className, className);
+  } else {
+    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));
+  }
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/removeEventListener.d.ts b/node_modules/dom-helpers/esm/removeEventListener.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..06695ca43e3b321b156828fdf19107ef9e60bf7e
--- /dev/null
+++ b/node_modules/dom-helpers/esm/removeEventListener.d.ts
@@ -0,0 +1,11 @@
+import { TaggedEventHandler } from './addEventListener';
+/**
+ * A `removeEventListener` ponyfill
+ *
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+declare function removeEventListener<K extends keyof HTMLElementEventMap>(node: HTMLElement, eventName: K, handler: TaggedEventHandler<K>, options?: boolean | EventListenerOptions): void;
+export default removeEventListener;
diff --git a/node_modules/dom-helpers/esm/removeEventListener.js b/node_modules/dom-helpers/esm/removeEventListener.js
new file mode 100644
index 0000000000000000000000000000000000000000..294feab9e03c46e467ed31650cceeeb8abeee562
--- /dev/null
+++ b/node_modules/dom-helpers/esm/removeEventListener.js
@@ -0,0 +1,18 @@
+/**
+ * A `removeEventListener` ponyfill
+ * 
+ * @param node the element
+ * @param eventName the event name
+ * @param handle the handler
+ * @param options event options
+ */
+function removeEventListener(node, eventName, handler, options) {
+  var capture = options && typeof options !== 'boolean' ? options.capture : options;
+  node.removeEventListener(eventName, handler, capture);
+
+  if (handler.__once) {
+    node.removeEventListener(eventName, handler.__once, capture);
+  }
+}
+
+export default removeEventListener;
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/scrollLeft.d.ts b/node_modules/dom-helpers/esm/scrollLeft.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..38ea8a10ae98a4ebcc8a3ef0a8a492cae9a16f8f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollLeft.d.ts
@@ -0,0 +1,11 @@
+declare const _default: {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
+/**
+ * Gets or sets the scroll left position of a given element.
+ *
+ * @param node the element
+ * @param val the position to set
+ */
+export default _default;
diff --git a/node_modules/dom-helpers/esm/scrollLeft.js b/node_modules/dom-helpers/esm/scrollLeft.js
new file mode 100644
index 0000000000000000000000000000000000000000..4614d811a40364802ec4e1c761110106e1c81291
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollLeft.js
@@ -0,0 +1,9 @@
+import getScrollAccessor from './getScrollAccessor';
+/**
+ * Gets or sets the scroll left position of a given element.
+ * 
+ * @param node the element
+ * @param val the position to set
+ */
+
+export default getScrollAccessor('pageXOffset');
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/scrollParent.d.ts b/node_modules/dom-helpers/esm/scrollParent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7714cc724b82ff0c1c20ca62905191b6bc6ba6e1
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollParent.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Find the first scrollable parent of an element.
+ *
+ * @param element Starting element
+ * @param firstPossible Stop at the first scrollable parent, even if it's not currently scrollable
+ */
+export default function scrollParent(element: HTMLElement, firstPossible?: boolean): Document | HTMLElement;
diff --git a/node_modules/dom-helpers/esm/scrollParent.js b/node_modules/dom-helpers/esm/scrollParent.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e9718f7429039729f0cb0c258561978a2126f2f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollParent.js
@@ -0,0 +1,29 @@
+/* eslint-disable no-cond-assign, no-continue */
+import css from './css';
+import height from './height';
+import isDocument from './isDocument';
+/**
+ * Find the first scrollable parent of an element.
+ *
+ * @param element Starting element
+ * @param firstPossible Stop at the first scrollable parent, even if it's not currently scrollable
+ */
+
+export default function scrollParent(element, firstPossible) {
+  var position = css(element, 'position');
+  var excludeStatic = position === 'absolute';
+  var ownerDoc = element.ownerDocument;
+  if (position === 'fixed') return ownerDoc || document; // @ts-ignore
+
+  while ((element = element.parentNode) && !isDocument(element)) {
+    var isStatic = excludeStatic && css(element, 'position') === 'static';
+    var style = (css(element, 'overflow') || '') + (css(element, 'overflow-y') || '') + css(element, 'overflow-x');
+    if (isStatic) continue;
+
+    if (/(auto|scroll)/.test(style) && (firstPossible || height(element) < element.scrollHeight)) {
+      return element;
+    }
+  }
+
+  return ownerDoc || document;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/scrollTo.d.ts b/node_modules/dom-helpers/esm/scrollTo.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..522661155243dd2c7b622f5e8f59f5d9ab4c3f1d
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollTo.d.ts
@@ -0,0 +1 @@
+export default function scrollTo(selected: HTMLElement, scrollParent?: HTMLElement): (() => void) | undefined;
diff --git a/node_modules/dom-helpers/esm/scrollTo.js b/node_modules/dom-helpers/esm/scrollTo.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b837b09b8dfb2719c0b9c359d841b16f72578a0
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollTo.js
@@ -0,0 +1,36 @@
+/* eslint-disable no-nested-ternary */
+import { cancel, request } from './animationFrame';
+import height from './height';
+import getWindow from './isWindow';
+import getOffset from './offset';
+import getScrollParent from './scrollParent';
+import scrollTop from './scrollTop';
+export default function scrollTo(selected, scrollParent) {
+  var offset = getOffset(selected);
+  var poff = {
+    top: 0,
+    left: 0
+  };
+  if (!selected) return undefined;
+  var list = scrollParent || getScrollParent(selected);
+  var isWin = getWindow(list);
+  var listScrollTop = scrollTop(list);
+  var listHeight = height(list, true);
+  if (!isWin) poff = getOffset(list);
+  offset = {
+    top: offset.top - poff.top,
+    left: offset.left - poff.left,
+    height: offset.height,
+    width: offset.width
+  };
+  var selectedHeight = offset.height;
+  var selectedTop = offset.top + (isWin ? 0 : listScrollTop);
+  var bottom = selectedTop + selectedHeight;
+  listScrollTop = listScrollTop > selectedTop ? selectedTop : bottom > listScrollTop + listHeight ? bottom - listHeight : listScrollTop;
+  var id = request(function () {
+    return scrollTop(list, listScrollTop);
+  });
+  return function () {
+    return cancel(id);
+  };
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/scrollTop.d.ts b/node_modules/dom-helpers/esm/scrollTop.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..242365c76e31c15b2849ae7d82615795744d1b53
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollTop.d.ts
@@ -0,0 +1,11 @@
+declare const _default: {
+    (node: Element): number;
+    (node: Element, val: number): undefined;
+};
+/**
+ * Gets or sets the scroll top position of a given element.
+ *
+ * @param node the element
+ * @param val the position to set
+ */
+export default _default;
diff --git a/node_modules/dom-helpers/esm/scrollTop.js b/node_modules/dom-helpers/esm/scrollTop.js
new file mode 100644
index 0000000000000000000000000000000000000000..836ea86cd161db546723494f5c87823017ffcc9f
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollTop.js
@@ -0,0 +1,9 @@
+import getScrollAccessor from './getScrollAccessor';
+/**
+ * Gets or sets the scroll top position of a given element.
+ * 
+ * @param node the element
+ * @param val the position to set
+ */
+
+export default getScrollAccessor('pageYOffset');
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/scrollbarSize.d.ts b/node_modules/dom-helpers/esm/scrollbarSize.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..02ccabbfa60b9199563a3fe40b2c871538a2b385
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollbarSize.d.ts
@@ -0,0 +1 @@
+export default function scrollbarSize(recalc?: boolean): number;
diff --git a/node_modules/dom-helpers/esm/scrollbarSize.js b/node_modules/dom-helpers/esm/scrollbarSize.js
new file mode 100644
index 0000000000000000000000000000000000000000..46ef49d6a8527bafc1e2ebfc842c81d5dae28ad3
--- /dev/null
+++ b/node_modules/dom-helpers/esm/scrollbarSize.js
@@ -0,0 +1,19 @@
+import canUseDOM from './canUseDOM';
+var size;
+export default function scrollbarSize(recalc) {
+  if (!size && size !== 0 || recalc) {
+    if (canUseDOM) {
+      var scrollDiv = document.createElement('div');
+      scrollDiv.style.position = 'absolute';
+      scrollDiv.style.top = '-9999px';
+      scrollDiv.style.width = '50px';
+      scrollDiv.style.height = '50px';
+      scrollDiv.style.overflow = 'scroll';
+      document.body.appendChild(scrollDiv);
+      size = scrollDiv.offsetWidth - scrollDiv.clientWidth;
+      document.body.removeChild(scrollDiv);
+    }
+  }
+
+  return size;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/siblings.d.ts b/node_modules/dom-helpers/esm/siblings.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9b8a4cc002698cdfa968862efeea372e0943e905
--- /dev/null
+++ b/node_modules/dom-helpers/esm/siblings.d.ts
@@ -0,0 +1,6 @@
+/**
+ * Collects all previous and next sibling elements of a given element.
+ *
+ * @param node the element
+ */
+export default function siblings(node: Element | null): Element[];
diff --git a/node_modules/dom-helpers/esm/siblings.js b/node_modules/dom-helpers/esm/siblings.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8131d5ded4e3359f116eff7e628b08b45fdd82e
--- /dev/null
+++ b/node_modules/dom-helpers/esm/siblings.js
@@ -0,0 +1,10 @@
+import collectSiblings from './collectSiblings';
+/**
+ * Collects all previous and next sibling elements of a given element.
+ * 
+ * @param node the element
+ */
+
+export default function siblings(node) {
+  return collectSiblings(node && node.parentElement ? node.parentElement.firstElementChild : null, node);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/text.d.ts b/node_modules/dom-helpers/esm/text.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bd90e5d013d8742ae25670cc3db840462a6a3715
--- /dev/null
+++ b/node_modules/dom-helpers/esm/text.d.ts
@@ -0,0 +1,8 @@
+/**
+ * Collects the text content of a given element.
+ *
+ * @param node the element
+ * @param trim whether to remove trailing whitespace chars
+ * @param singleSpaces whether to convert multiple whitespace chars into a single space character
+ */
+export default function text(node: HTMLElement | null, trim?: boolean, singleSpaces?: boolean): string;
diff --git a/node_modules/dom-helpers/esm/text.js b/node_modules/dom-helpers/esm/text.js
new file mode 100644
index 0000000000000000000000000000000000000000..6110a877fe4a58e80dbbb0c756faf415a67e68cf
--- /dev/null
+++ b/node_modules/dom-helpers/esm/text.js
@@ -0,0 +1,36 @@
+var regExpNbspEntity = /&nbsp;/gi;
+var regExpNbspHex = /\xA0/g;
+var regExpSpaces = /\s+([^\s])/gm;
+/**
+ * Collects the text content of a given element.
+ * 
+ * @param node the element
+ * @param trim whether to remove trailing whitespace chars
+ * @param singleSpaces whether to convert multiple whitespace chars into a single space character
+ */
+
+export default function text(node, trim, singleSpaces) {
+  if (trim === void 0) {
+    trim = true;
+  }
+
+  if (singleSpaces === void 0) {
+    singleSpaces = true;
+  }
+
+  var elementText = '';
+
+  if (node) {
+    elementText = (node.textContent || '').replace(regExpNbspEntity, ' ').replace(regExpNbspHex, ' ');
+
+    if (trim) {
+      elementText = elementText.trim();
+    }
+
+    if (singleSpaces) {
+      elementText = elementText.replace(regExpSpaces, ' $1');
+    }
+  }
+
+  return elementText;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/toggleClass.d.ts b/node_modules/dom-helpers/esm/toggleClass.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..560be7a3f3b75f2f7f6fcc52fa7957666338fc53
--- /dev/null
+++ b/node_modules/dom-helpers/esm/toggleClass.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Toggles a CSS class on a given element.
+ *
+ * @param element the element
+ * @param className the CSS class name
+ */
+export default function toggleClass(element: Element | SVGElement, className: string): void;
diff --git a/node_modules/dom-helpers/esm/toggleClass.js b/node_modules/dom-helpers/esm/toggleClass.js
new file mode 100644
index 0000000000000000000000000000000000000000..53f25643da9f563bc69e9f911772e0e0c5167753
--- /dev/null
+++ b/node_modules/dom-helpers/esm/toggleClass.js
@@ -0,0 +1,13 @@
+import addClass from './addClass';
+import hasClass from './hasClass';
+import removeClass from './removeClass';
+/**
+ * Toggles a CSS class on a given element.
+ * 
+ * @param element the element
+ * @param className the CSS class name
+ */
+
+export default function toggleClass(element, className) {
+  if (element.classList) element.classList.toggle(className);else if (hasClass(element, className)) removeClass(element, className);else addClass(element, className);
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/transitionEnd.d.ts b/node_modules/dom-helpers/esm/transitionEnd.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e8066de0a4801819204ccacfda61a710b3f97ab
--- /dev/null
+++ b/node_modules/dom-helpers/esm/transitionEnd.d.ts
@@ -0,0 +1,2 @@
+export declare type Listener = (this: HTMLElement, ev: TransitionEvent) => any;
+export default function transitionEnd(element: HTMLElement, handler: Listener, duration?: number | null, padding?: number): () => void;
diff --git a/node_modules/dom-helpers/esm/transitionEnd.js b/node_modules/dom-helpers/esm/transitionEnd.js
new file mode 100644
index 0000000000000000000000000000000000000000..55eb69d7784866cc2967bcaabb4d5e8ca8ec513c
--- /dev/null
+++ b/node_modules/dom-helpers/esm/transitionEnd.js
@@ -0,0 +1,39 @@
+import css from './css';
+import listen from './listen';
+import triggerEvent from './triggerEvent';
+
+function parseDuration(node) {
+  var str = css(node, 'transitionDuration') || '';
+  var mult = str.indexOf('ms') === -1 ? 1000 : 1;
+  return parseFloat(str) * mult;
+}
+
+function emulateTransitionEnd(element, duration, padding) {
+  if (padding === void 0) {
+    padding = 5;
+  }
+
+  var called = false;
+  var handle = setTimeout(function () {
+    if (!called) triggerEvent(element, 'transitionend', true);
+  }, duration + padding);
+  var remove = listen(element, 'transitionend', function () {
+    called = true;
+  }, {
+    once: true
+  });
+  return function () {
+    clearTimeout(handle);
+    remove();
+  };
+}
+
+export default function transitionEnd(element, handler, duration, padding) {
+  if (duration == null) duration = parseDuration(element) || 0;
+  var removeEmulate = emulateTransitionEnd(element, duration, padding);
+  var remove = listen(element, 'transitionend', handler);
+  return function () {
+    removeEmulate();
+    remove();
+  };
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/triggerEvent.d.ts b/node_modules/dom-helpers/esm/triggerEvent.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dc1e7e724d6b13e6dd6fed2c10a06cf31d567f84
--- /dev/null
+++ b/node_modules/dom-helpers/esm/triggerEvent.d.ts
@@ -0,0 +1,9 @@
+/**
+ * Triggers an event on a given element.
+ *
+ * @param node the element
+ * @param eventName the event name to trigger
+ * @param bubbles whether the event should bubble up
+ * @param cancelable whether the event should be cancelable
+ */
+export default function triggerEvent<K extends keyof HTMLElementEventMap>(node: HTMLElement | null, eventName: K, bubbles?: boolean, cancelable?: boolean): void;
diff --git a/node_modules/dom-helpers/esm/triggerEvent.js b/node_modules/dom-helpers/esm/triggerEvent.js
new file mode 100644
index 0000000000000000000000000000000000000000..83a262961c6a026307ca5e35cc62abd44a5d54ce
--- /dev/null
+++ b/node_modules/dom-helpers/esm/triggerEvent.js
@@ -0,0 +1,23 @@
+/**
+ * Triggers an event on a given element.
+ * 
+ * @param node the element
+ * @param eventName the event name to trigger
+ * @param bubbles whether the event should bubble up
+ * @param cancelable whether the event should be cancelable
+ */
+export default function triggerEvent(node, eventName, bubbles, cancelable) {
+  if (bubbles === void 0) {
+    bubbles = false;
+  }
+
+  if (cancelable === void 0) {
+    cancelable = true;
+  }
+
+  if (node) {
+    var event = document.createEvent('HTMLEvents');
+    event.initEvent(eventName, bubbles, cancelable);
+    node.dispatchEvent(event);
+  }
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/esm/types.d.ts b/node_modules/dom-helpers/esm/types.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1a9d9729cd0347308755b990ef3b77363c1697e6
--- /dev/null
+++ b/node_modules/dom-helpers/esm/types.d.ts
@@ -0,0 +1,8 @@
+import * as CSS from 'csstype'
+
+type Styles = keyof CSSStyleDeclaration
+
+export type HyphenProperty = keyof CSS.PropertiesHyphen
+export type CamelProperty = keyof CSS.Properties
+
+export type Property = HyphenProperty | CamelProperty
diff --git a/node_modules/dom-helpers/esm/width.d.ts b/node_modules/dom-helpers/esm/width.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4b40986f24f82e95f8d27eeae3113843a163369b
--- /dev/null
+++ b/node_modules/dom-helpers/esm/width.d.ts
@@ -0,0 +1,7 @@
+/**
+ * Returns the width of a given element.
+ *
+ * @param node the element
+ * @param client whether to use `clientWidth` if possible
+ */
+export default function getWidth(node: HTMLElement, client?: boolean): number;
diff --git a/node_modules/dom-helpers/esm/width.js b/node_modules/dom-helpers/esm/width.js
new file mode 100644
index 0000000000000000000000000000000000000000..faa23af6dddfba397b4f1dfb334e72d17ea4a05b
--- /dev/null
+++ b/node_modules/dom-helpers/esm/width.js
@@ -0,0 +1,13 @@
+import getWindow from './isWindow';
+import offset from './offset';
+/**
+ * Returns the width of a given element.
+ * 
+ * @param node the element
+ * @param client whether to use `clientWidth` if possible
+ */
+
+export default function getWidth(node, client) {
+  var win = getWindow(node);
+  return win ? win.innerWidth : client ? node.clientWidth : offset(node).width;
+}
\ No newline at end of file
diff --git a/node_modules/dom-helpers/filterEventHandler/package.json b/node_modules/dom-helpers/filterEventHandler/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..42392b04b17164a8f380430af4924f2b3f37e5e4
--- /dev/null
+++ b/node_modules/dom-helpers/filterEventHandler/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/filterEventHandler",
+  "private": true,
+  "main": "../cjs/filterEventHandler.js",
+  "module": "../esm/filterEventHandler.js",
+  "types": "../esm/filterEventHandler.d.ts"
+}
diff --git a/node_modules/dom-helpers/getComputedStyle/package.json b/node_modules/dom-helpers/getComputedStyle/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..342253f02d8d9e7175a30402f8e205d884188f54
--- /dev/null
+++ b/node_modules/dom-helpers/getComputedStyle/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/getComputedStyle",
+  "private": true,
+  "main": "../cjs/getComputedStyle.js",
+  "module": "../esm/getComputedStyle.js",
+  "types": "../esm/getComputedStyle.d.ts"
+}
diff --git a/node_modules/dom-helpers/getScrollAccessor/package.json b/node_modules/dom-helpers/getScrollAccessor/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..08be0f77f474052b9d2c1bc3e587bb8915489866
--- /dev/null
+++ b/node_modules/dom-helpers/getScrollAccessor/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/getScrollAccessor",
+  "private": true,
+  "main": "../cjs/getScrollAccessor.js",
+  "module": "../esm/getScrollAccessor.js",
+  "types": "../esm/getScrollAccessor.d.ts"
+}
diff --git a/node_modules/dom-helpers/hasClass/package.json b/node_modules/dom-helpers/hasClass/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d6af601fae383f9326440a2fb4f7b0ca2b1e1ef2
--- /dev/null
+++ b/node_modules/dom-helpers/hasClass/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/hasClass",
+  "private": true,
+  "main": "../cjs/hasClass.js",
+  "module": "../esm/hasClass.js",
+  "types": "../esm/hasClass.d.ts"
+}
diff --git a/node_modules/dom-helpers/height/package.json b/node_modules/dom-helpers/height/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5e528d893e53611d6550748643d20bde7dc891d3
--- /dev/null
+++ b/node_modules/dom-helpers/height/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/height",
+  "private": true,
+  "main": "../cjs/height.js",
+  "module": "../esm/height.js",
+  "types": "../esm/height.d.ts"
+}
diff --git a/node_modules/dom-helpers/hyphenate/package.json b/node_modules/dom-helpers/hyphenate/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a74b4bfc5caa4e22690844d504a6c3c262c71422
--- /dev/null
+++ b/node_modules/dom-helpers/hyphenate/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/hyphenate",
+  "private": true,
+  "main": "../cjs/hyphenate.js",
+  "module": "../esm/hyphenate.js",
+  "types": "../esm/hyphenate.d.ts"
+}
diff --git a/node_modules/dom-helpers/hyphenateStyle/package.json b/node_modules/dom-helpers/hyphenateStyle/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..75ae0b88aa1011e468e78f8bb5d854f7e6cf301f
--- /dev/null
+++ b/node_modules/dom-helpers/hyphenateStyle/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/hyphenateStyle",
+  "private": true,
+  "main": "../cjs/hyphenateStyle.js",
+  "module": "../esm/hyphenateStyle.js",
+  "types": "../esm/hyphenateStyle.d.ts"
+}
diff --git a/node_modules/dom-helpers/insertAfter/package.json b/node_modules/dom-helpers/insertAfter/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3e621d4a0721cecd10f8b1b39400dd4d4306ba64
--- /dev/null
+++ b/node_modules/dom-helpers/insertAfter/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/insertAfter",
+  "private": true,
+  "main": "../cjs/insertAfter.js",
+  "module": "../esm/insertAfter.js",
+  "types": "../esm/insertAfter.d.ts"
+}
diff --git a/node_modules/dom-helpers/isDocument/package.json b/node_modules/dom-helpers/isDocument/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d6281ed97906c7fd9ae7416dd39356f263a6da7
--- /dev/null
+++ b/node_modules/dom-helpers/isDocument/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/isDocument",
+  "private": true,
+  "main": "../cjs/isDocument.js",
+  "module": "../esm/isDocument.js",
+  "types": "../esm/isDocument.d.ts"
+}
diff --git a/node_modules/dom-helpers/isInput/package.json b/node_modules/dom-helpers/isInput/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..31ade03770ebd60fcdfdf65e29ac143f1f5017f2
--- /dev/null
+++ b/node_modules/dom-helpers/isInput/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/isInput",
+  "private": true,
+  "main": "../cjs/isInput.js",
+  "module": "../esm/isInput.js",
+  "types": "../esm/isInput.d.ts"
+}
diff --git a/node_modules/dom-helpers/isTransform/package.json b/node_modules/dom-helpers/isTransform/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..81d0c97fbe570e1db04f917d5df42843464293d9
--- /dev/null
+++ b/node_modules/dom-helpers/isTransform/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/isTransform",
+  "private": true,
+  "main": "../cjs/isTransform.js",
+  "module": "../esm/isTransform.js",
+  "types": "../esm/isTransform.d.ts"
+}
diff --git a/node_modules/dom-helpers/isVisible/package.json b/node_modules/dom-helpers/isVisible/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e76af2233a2133cccd49e3522e9bf4b846335b73
--- /dev/null
+++ b/node_modules/dom-helpers/isVisible/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/isVisible",
+  "private": true,
+  "main": "../cjs/isVisible.js",
+  "module": "../esm/isVisible.js",
+  "types": "../esm/isVisible.d.ts"
+}
diff --git a/node_modules/dom-helpers/isWindow/package.json b/node_modules/dom-helpers/isWindow/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0c0d844399bcefb90c2f67701275101cd9dcbedf
--- /dev/null
+++ b/node_modules/dom-helpers/isWindow/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/isWindow",
+  "private": true,
+  "main": "../cjs/isWindow.js",
+  "module": "../esm/isWindow.js",
+  "types": "../esm/isWindow.d.ts"
+}
diff --git a/node_modules/dom-helpers/listen/package.json b/node_modules/dom-helpers/listen/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d53179f94fa29384dc602ad866e3d4feff3afee3
--- /dev/null
+++ b/node_modules/dom-helpers/listen/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/listen",
+  "private": true,
+  "main": "../cjs/listen.js",
+  "module": "../esm/listen.js",
+  "types": "../esm/listen.d.ts"
+}
diff --git a/node_modules/dom-helpers/matches/package.json b/node_modules/dom-helpers/matches/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..18881aaf0b4128812b6b43035877aac977da1768
--- /dev/null
+++ b/node_modules/dom-helpers/matches/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/matches",
+  "private": true,
+  "main": "../cjs/matches.js",
+  "module": "../esm/matches.js",
+  "types": "../esm/matches.d.ts"
+}
diff --git a/node_modules/dom-helpers/nextUntil/package.json b/node_modules/dom-helpers/nextUntil/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..552c987578dacce84b184e148bce5ccb143f6230
--- /dev/null
+++ b/node_modules/dom-helpers/nextUntil/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/nextUntil",
+  "private": true,
+  "main": "../cjs/nextUntil.js",
+  "module": "../esm/nextUntil.js",
+  "types": "../esm/nextUntil.d.ts"
+}
diff --git a/node_modules/dom-helpers/offset/package.json b/node_modules/dom-helpers/offset/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1f953208039ea725b84eb2fc8f6258605b18b06a
--- /dev/null
+++ b/node_modules/dom-helpers/offset/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/offset",
+  "private": true,
+  "main": "../cjs/offset.js",
+  "module": "../esm/offset.js",
+  "types": "../esm/offset.d.ts"
+}
diff --git a/node_modules/dom-helpers/offsetParent/package.json b/node_modules/dom-helpers/offsetParent/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..11db2777d7214d8247bc609dfa4b9c92e4ecc0f9
--- /dev/null
+++ b/node_modules/dom-helpers/offsetParent/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/offsetParent",
+  "private": true,
+  "main": "../cjs/offsetParent.js",
+  "module": "../esm/offsetParent.js",
+  "types": "../esm/offsetParent.d.ts"
+}
diff --git a/node_modules/dom-helpers/ownerDocument/package.json b/node_modules/dom-helpers/ownerDocument/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4babb194a1484ae4a81a7695b72b9e3bc2c2f77b
--- /dev/null
+++ b/node_modules/dom-helpers/ownerDocument/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/ownerDocument",
+  "private": true,
+  "main": "../cjs/ownerDocument.js",
+  "module": "../esm/ownerDocument.js",
+  "types": "../esm/ownerDocument.d.ts"
+}
diff --git a/node_modules/dom-helpers/ownerWindow/package.json b/node_modules/dom-helpers/ownerWindow/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..798566fe1fb9328754d4b4cc9dc1e1b5f0c5f722
--- /dev/null
+++ b/node_modules/dom-helpers/ownerWindow/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/ownerWindow",
+  "private": true,
+  "main": "../cjs/ownerWindow.js",
+  "module": "../esm/ownerWindow.js",
+  "types": "../esm/ownerWindow.d.ts"
+}
diff --git a/node_modules/dom-helpers/package.json b/node_modules/dom-helpers/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..21cfbb48178d2e2974cd5e2cab306a3fa48d2bc8
--- /dev/null
+++ b/node_modules/dom-helpers/package.json
@@ -0,0 +1,73 @@
+{
+  "_from": "dom-helpers@^5.2.1",
+  "_id": "dom-helpers@5.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+  "_location": "/dom-helpers",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "dom-helpers@^5.2.1",
+    "name": "dom-helpers",
+    "escapedName": "dom-helpers",
+    "rawSpec": "^5.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^5.2.1"
+  },
+  "_requiredBy": [
+    "/@restart/ui",
+    "/react-bootstrap",
+    "/react-transition-group"
+  ],
+  "_resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+  "_shasum": "d9400536b2bf8225ad98fe052e029451ac40e902",
+  "_spec": "dom-helpers@^5.2.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/react-bootstrap/dom-helpers/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@babel/runtime": "^7.8.7",
+    "csstype": "^3.0.2"
+  },
+  "deprecated": false,
+  "description": "tiny modular DOM lib for ie9+",
+  "homepage": "https://github.com/react-bootstrap/dom-helpers#readme",
+  "keywords": [
+    "dom-helpers",
+    "react-component",
+    "dom",
+    "api",
+    "cross-browser",
+    "style",
+    "event",
+    "height",
+    "width",
+    "dom-helpers",
+    "class",
+    "classlist",
+    "css"
+  ],
+  "license": "MIT",
+  "main": "cjs/index.js",
+  "module": "esm/index.js",
+  "name": "dom-helpers",
+  "publishConfig": {
+    "directory": "lib"
+  },
+  "release": {
+    "conventionalCommits": true
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/react-bootstrap/dom-helpers.git"
+  },
+  "types": "cjs/index.d.ts",
+  "version": "5.2.1"
+}
diff --git a/node_modules/dom-helpers/parents/package.json b/node_modules/dom-helpers/parents/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9a39b2137fd7d0a6c8cc97c5db7743411f6ea328
--- /dev/null
+++ b/node_modules/dom-helpers/parents/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/parents",
+  "private": true,
+  "main": "../cjs/parents.js",
+  "module": "../esm/parents.js",
+  "types": "../esm/parents.d.ts"
+}
diff --git a/node_modules/dom-helpers/position/package.json b/node_modules/dom-helpers/position/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..43c20bd205fb52dce2a7f5389daf9fa4c982f960
--- /dev/null
+++ b/node_modules/dom-helpers/position/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/position",
+  "private": true,
+  "main": "../cjs/position.js",
+  "module": "../esm/position.js",
+  "types": "../esm/position.d.ts"
+}
diff --git a/node_modules/dom-helpers/prepend/package.json b/node_modules/dom-helpers/prepend/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..54bd43f02f9aed5ac7a76465bddf992bdf695630
--- /dev/null
+++ b/node_modules/dom-helpers/prepend/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/prepend",
+  "private": true,
+  "main": "../cjs/prepend.js",
+  "module": "../esm/prepend.js",
+  "types": "../esm/prepend.d.ts"
+}
diff --git a/node_modules/dom-helpers/querySelectorAll/package.json b/node_modules/dom-helpers/querySelectorAll/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..dfeb91ba30e1c94b06a1f1c8fed7e3885604ca5e
--- /dev/null
+++ b/node_modules/dom-helpers/querySelectorAll/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/querySelectorAll",
+  "private": true,
+  "main": "../cjs/querySelectorAll.js",
+  "module": "../esm/querySelectorAll.js",
+  "types": "../esm/querySelectorAll.d.ts"
+}
diff --git a/node_modules/dom-helpers/remove/package.json b/node_modules/dom-helpers/remove/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3d121c58ed13eb9199bf7b4fc6eabbf805cef3d3
--- /dev/null
+++ b/node_modules/dom-helpers/remove/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/remove",
+  "private": true,
+  "main": "../cjs/remove.js",
+  "module": "../esm/remove.js",
+  "types": "../esm/remove.d.ts"
+}
diff --git a/node_modules/dom-helpers/removeClass/package.json b/node_modules/dom-helpers/removeClass/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c00d1193e7abfb6562cacbc110aac6989dae09b
--- /dev/null
+++ b/node_modules/dom-helpers/removeClass/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/removeClass",
+  "private": true,
+  "main": "../cjs/removeClass.js",
+  "module": "../esm/removeClass.js",
+  "types": "../esm/removeClass.d.ts"
+}
diff --git a/node_modules/dom-helpers/removeEventListener/package.json b/node_modules/dom-helpers/removeEventListener/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..ed5383bb81115efc3aafed34f8ff60e81a7db571
--- /dev/null
+++ b/node_modules/dom-helpers/removeEventListener/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/removeEventListener",
+  "private": true,
+  "main": "../cjs/removeEventListener.js",
+  "module": "../esm/removeEventListener.js",
+  "types": "../esm/removeEventListener.d.ts"
+}
diff --git a/node_modules/dom-helpers/scrollLeft/package.json b/node_modules/dom-helpers/scrollLeft/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e7bd6d7799b9b90ed0e427d198ad036c77eb1c0c
--- /dev/null
+++ b/node_modules/dom-helpers/scrollLeft/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/scrollLeft",
+  "private": true,
+  "main": "../cjs/scrollLeft.js",
+  "module": "../esm/scrollLeft.js",
+  "types": "../esm/scrollLeft.d.ts"
+}
diff --git a/node_modules/dom-helpers/scrollParent/package.json b/node_modules/dom-helpers/scrollParent/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9551570b6c5658559fa02e2b79c466a434eb3540
--- /dev/null
+++ b/node_modules/dom-helpers/scrollParent/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/scrollParent",
+  "private": true,
+  "main": "../cjs/scrollParent.js",
+  "module": "../esm/scrollParent.js",
+  "types": "../esm/scrollParent.d.ts"
+}
diff --git a/node_modules/dom-helpers/scrollTo/package.json b/node_modules/dom-helpers/scrollTo/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..224d03b2fb08f98bbbee9915e9cd25ae8eee955e
--- /dev/null
+++ b/node_modules/dom-helpers/scrollTo/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/scrollTo",
+  "private": true,
+  "main": "../cjs/scrollTo.js",
+  "module": "../esm/scrollTo.js",
+  "types": "../esm/scrollTo.d.ts"
+}
diff --git a/node_modules/dom-helpers/scrollTop/package.json b/node_modules/dom-helpers/scrollTop/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d883314bd75137a0a47cf0f71f8566f921fd1d15
--- /dev/null
+++ b/node_modules/dom-helpers/scrollTop/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/scrollTop",
+  "private": true,
+  "main": "../cjs/scrollTop.js",
+  "module": "../esm/scrollTop.js",
+  "types": "../esm/scrollTop.d.ts"
+}
diff --git a/node_modules/dom-helpers/scrollbarSize/package.json b/node_modules/dom-helpers/scrollbarSize/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..344cf432242c271b23ed0d61ec74f39e54a40c80
--- /dev/null
+++ b/node_modules/dom-helpers/scrollbarSize/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/scrollbarSize",
+  "private": true,
+  "main": "../cjs/scrollbarSize.js",
+  "module": "../esm/scrollbarSize.js",
+  "types": "../esm/scrollbarSize.d.ts"
+}
diff --git a/node_modules/dom-helpers/siblings/package.json b/node_modules/dom-helpers/siblings/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..cf72bd52e27de5db79d0984512a2aeec1d41cb02
--- /dev/null
+++ b/node_modules/dom-helpers/siblings/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/siblings",
+  "private": true,
+  "main": "../cjs/siblings.js",
+  "module": "../esm/siblings.js",
+  "types": "../esm/siblings.d.ts"
+}
diff --git a/node_modules/dom-helpers/text/package.json b/node_modules/dom-helpers/text/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..1c319f1f15852fe6c6ff5c0c68ec5653246dfaa5
--- /dev/null
+++ b/node_modules/dom-helpers/text/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/text",
+  "private": true,
+  "main": "../cjs/text.js",
+  "module": "../esm/text.js",
+  "types": "../esm/text.d.ts"
+}
diff --git a/node_modules/dom-helpers/toggleClass/package.json b/node_modules/dom-helpers/toggleClass/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0704cf3c65795d3aae2802af503738dc25f2eafe
--- /dev/null
+++ b/node_modules/dom-helpers/toggleClass/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/toggleClass",
+  "private": true,
+  "main": "../cjs/toggleClass.js",
+  "module": "../esm/toggleClass.js",
+  "types": "../esm/toggleClass.d.ts"
+}
diff --git a/node_modules/dom-helpers/transitionEnd/package.json b/node_modules/dom-helpers/transitionEnd/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..5515de9cb444e55e55c8447cfa58489408b82cf7
--- /dev/null
+++ b/node_modules/dom-helpers/transitionEnd/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/transitionEnd",
+  "private": true,
+  "main": "../cjs/transitionEnd.js",
+  "module": "../esm/transitionEnd.js",
+  "types": "../esm/transitionEnd.d.ts"
+}
diff --git a/node_modules/dom-helpers/triggerEvent/package.json b/node_modules/dom-helpers/triggerEvent/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a4f7c8b67a1af0601fa31cdf90886e26f4333ac6
--- /dev/null
+++ b/node_modules/dom-helpers/triggerEvent/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/triggerEvent",
+  "private": true,
+  "main": "../cjs/triggerEvent.js",
+  "module": "../esm/triggerEvent.js",
+  "types": "../esm/triggerEvent.d.ts"
+}
diff --git a/node_modules/dom-helpers/width/package.json b/node_modules/dom-helpers/width/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bb0d56e1342385726d9f672cab366993b1380785
--- /dev/null
+++ b/node_modules/dom-helpers/width/package.json
@@ -0,0 +1,7 @@
+{
+  "name": "dom-helpers/width",
+  "private": true,
+  "main": "../cjs/width.js",
+  "module": "../esm/width.js",
+  "types": "../esm/width.d.ts"
+}
diff --git a/node_modules/invariant/CHANGELOG.md b/node_modules/invariant/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc52f1c5cfc91f1958084badbec318e2f2fcab3f
--- /dev/null
+++ b/node_modules/invariant/CHANGELOG.md
@@ -0,0 +1,69 @@
+2.2.4 / 2018-03-13
+==================
+
+  * Use flow strict mode (i.e. `@flow strict`).
+
+2.2.3 / 2018-02-19
+==================
+
+  * Change license from BSD+Patents to MIT.
+
+2.2.2 / 2016-11-15
+==================
+
+  * Add LICENSE file.
+  * Misc housekeeping.
+
+2.2.1 / 2016-03-09
+==================
+
+  * Use `NODE_ENV` variable instead of `__DEV__` to cache `process.env.NODE_ENV`.
+
+2.2.0 / 2015-11-17
+==================
+
+  * Use `error.name` instead of `Invariant Violation`.
+
+2.1.3 / 2015-11-17
+==================
+
+  * Remove `@provideModule` pragma.
+
+2.1.2 / 2015-10-27
+==================
+
+  * Fix license.
+
+2.1.1 / 2015-09-20
+==================
+
+  * Use correct SPDX license.
+  * Test "browser.js" using browserify.
+  * Switch from "envify" to "loose-envify".
+
+2.1.0 / 2015-06-03
+==================
+
+  * Add "envify" as a dependency.
+  * Fixed license field in "package.json".
+
+2.0.0 / 2015-02-21
+==================
+
+  * Switch to using the "browser" field. There are now browser and server versions that respect the "format" in production.
+
+1.0.2 / 2014-09-24
+==================
+
+  * Added tests, npmignore and gitignore.
+  * Clarifications in README.
+
+1.0.1 / 2014-09-24
+==================
+
+  * Actually include 'invariant.js'.
+
+1.0.0 / 2014-09-24
+==================
+
+  * Initial release.
diff --git a/node_modules/invariant/LICENSE b/node_modules/invariant/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..188fb2b0bd8e7b4aa032165449c180cc108d18ac
--- /dev/null
+++ b/node_modules/invariant/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/invariant/README.md b/node_modules/invariant/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..4f18354a0bf6a2c07a09a6443cf99f36c558f11b
--- /dev/null
+++ b/node_modules/invariant/README.md
@@ -0,0 +1,37 @@
+# invariant
+
+[![Build Status](https://travis-ci.org/zertosh/invariant.svg?branch=master)](https://travis-ci.org/zertosh/invariant)
+
+A mirror of Facebook's `invariant` (e.g. [React](https://github.com/facebook/react/blob/v0.13.3/src/vendor/core/invariant.js), [flux](https://github.com/facebook/flux/blob/2.0.2/src/invariant.js)).
+
+A way to provide descriptive errors in development but generic errors in production.
+
+## Install
+
+With [npm](http://npmjs.org) do:
+
+```sh
+npm install invariant
+```
+
+## `invariant(condition, message)`
+
+```js
+var invariant = require('invariant');
+
+invariant(someTruthyVal, 'This will not throw');
+// No errors
+
+invariant(someFalseyVal, 'This will throw an error with this message');
+// Error: Invariant Violation: This will throw an error with this message
+```
+
+**Note:** When `process.env.NODE_ENV` is not `production`, the message is required. If omitted, `invariant` will throw regardless of the truthiness of the condition. When `process.env.NODE_ENV` is `production`, the message is optional – so they can be minified away.
+
+### Browser
+
+When used with [browserify](https://github.com/substack/node-browserify), it'll use `browser.js` (instead of `invariant.js`) and the [envify](https://github.com/hughsk/envify) transform will inline the value of `process.env.NODE_ENV`.
+
+### Node
+
+The node version is optimized around the performance implications of accessing `process.env`. The value of `process.env.NODE_ENV` is cached, and repeatedly used instead of reading `process.env`. See [Server rendering is slower with npm react #812](https://github.com/facebook/react/issues/812)
diff --git a/node_modules/invariant/browser.js b/node_modules/invariant/browser.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3941bc603f8788a59f4c5987c1fc08834a0ae6d
--- /dev/null
+++ b/node_modules/invariant/browser.js
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+/**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+var invariant = function(condition, format, a, b, c, d, e, f) {
+  if (process.env.NODE_ENV !== 'production') {
+    if (format === undefined) {
+      throw new Error('invariant requires an error message argument');
+    }
+  }
+
+  if (!condition) {
+    var error;
+    if (format === undefined) {
+      error = new Error(
+        'Minified exception occurred; use the non-minified dev environment ' +
+        'for the full error message and additional helpful warnings.'
+      );
+    } else {
+      var args = [a, b, c, d, e, f];
+      var argIndex = 0;
+      error = new Error(
+        format.replace(/%s/g, function() { return args[argIndex++]; })
+      );
+      error.name = 'Invariant Violation';
+    }
+
+    error.framesToPop = 1; // we don't care about invariant's own frame
+    throw error;
+  }
+};
+
+module.exports = invariant;
diff --git a/node_modules/invariant/invariant.js b/node_modules/invariant/invariant.js
new file mode 100644
index 0000000000000000000000000000000000000000..b543e9ff018f4bbdb6a67923bfd30df6b6a2a4f8
--- /dev/null
+++ b/node_modules/invariant/invariant.js
@@ -0,0 +1,51 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+/**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+var NODE_ENV = process.env.NODE_ENV;
+
+var invariant = function(condition, format, a, b, c, d, e, f) {
+  if (NODE_ENV !== 'production') {
+    if (format === undefined) {
+      throw new Error('invariant requires an error message argument');
+    }
+  }
+
+  if (!condition) {
+    var error;
+    if (format === undefined) {
+      error = new Error(
+        'Minified exception occurred; use the non-minified dev environment ' +
+        'for the full error message and additional helpful warnings.'
+      );
+    } else {
+      var args = [a, b, c, d, e, f];
+      var argIndex = 0;
+      error = new Error(
+        format.replace(/%s/g, function() { return args[argIndex++]; })
+      );
+      error.name = 'Invariant Violation';
+    }
+
+    error.framesToPop = 1; // we don't care about invariant's own frame
+    throw error;
+  }
+};
+
+module.exports = invariant;
diff --git a/node_modules/invariant/invariant.js.flow b/node_modules/invariant/invariant.js.flow
new file mode 100644
index 0000000000000000000000000000000000000000..462ab73b6ad939b83a19618f20827b36f1a0feb0
--- /dev/null
+++ b/node_modules/invariant/invariant.js.flow
@@ -0,0 +1,7 @@
+/* @flow strict */
+
+declare module.exports: (
+  condition: any,
+  format?: string,
+  ...args: Array<any>
+) => void;
diff --git a/node_modules/invariant/package.json b/node_modules/invariant/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bd164d6edc6674231d54318da3cf3cea5ccf9808
--- /dev/null
+++ b/node_modules/invariant/package.json
@@ -0,0 +1,71 @@
+{
+  "_from": "invariant@^2.2.4",
+  "_id": "invariant@2.2.4",
+  "_inBundle": false,
+  "_integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+  "_location": "/invariant",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "invariant@^2.2.4",
+    "name": "invariant",
+    "escapedName": "invariant",
+    "rawSpec": "^2.2.4",
+    "saveSpec": null,
+    "fetchSpec": "^2.2.4"
+  },
+  "_requiredBy": [
+    "/react-bootstrap",
+    "/uncontrollable"
+  ],
+  "_resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+  "_shasum": "610f3c92c9359ce1db616e538008d23ff35158e6",
+  "_spec": "invariant@^2.2.4",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Andres Suarez",
+    "email": "zertosh@gmail.com"
+  },
+  "browser": "browser.js",
+  "browserify": {
+    "transform": [
+      "loose-envify"
+    ]
+  },
+  "bugs": {
+    "url": "https://github.com/zertosh/invariant/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "loose-envify": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "invariant",
+  "devDependencies": {
+    "browserify": "^11.0.1",
+    "flow-bin": "^0.67.1",
+    "tap": "^1.4.0"
+  },
+  "files": [
+    "browser.js",
+    "invariant.js",
+    "invariant.js.flow"
+  ],
+  "homepage": "https://github.com/zertosh/invariant#readme",
+  "keywords": [
+    "test",
+    "invariant"
+  ],
+  "license": "MIT",
+  "main": "invariant.js",
+  "name": "invariant",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/zertosh/invariant.git"
+  },
+  "scripts": {
+    "test": "NODE_ENV=production tap test/*.js && NODE_ENV=development tap test/*.js"
+  },
+  "version": "2.2.4"
+}
diff --git a/node_modules/js-tokens/CHANGELOG.md b/node_modules/js-tokens/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..755e6f6ec82ec715a1bcb407608bbb6dab3ab7b7
--- /dev/null
+++ b/node_modules/js-tokens/CHANGELOG.md
@@ -0,0 +1,151 @@
+### Version 4.0.0 (2018-01-28) ###
+
+- Added: Support for ES2018. The only change needed was recognizing the `s`
+  regex flag.
+- Changed: _All_ tokens returned by the `matchToToken` function now have a
+  `closed` property. It is set to `undefined` for the tokens where “closed”
+  doesn’t make sense. This means that all tokens objects have the same shape,
+  which might improve performance.
+
+These are the breaking changes:
+
+- `'/a/s'.match(jsTokens)` no longer returns `['/', 'a', '/', 's']`, but
+  `['/a/s']`. (There are of course other variations of this.)
+- Code that rely on some token objects not having the `closed` property could
+  now behave differently.
+
+
+### Version 3.0.2 (2017-06-28) ###
+
+- No code changes. Just updates to the readme.
+
+
+### Version 3.0.1 (2017-01-30) ###
+
+- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched
+  correctly.
+
+
+### Version 3.0.0 (2017-01-11) ###
+
+This release contains one breaking change, that should [improve performance in
+V8][v8-perf]:
+
+> So how can you, as a JavaScript developer, ensure that your RegExps are fast?
+> If you are not interested in hooking into RegExp internals, make sure that
+> neither the RegExp instance, nor its prototype is modified in order to get the
+> best performance:
+>
+> ```js
+> var re = /./g;
+> re.exec('');  // Fast path.
+> re.new_property = 'slow';
+> ```
+
+This module used to export a single regex, with `.matchToToken` bolted
+on, just like in the above example. This release changes the exports of
+the module to avoid this issue.
+
+Before:
+
+```js
+import jsTokens from "js-tokens"
+// or:
+var jsTokens = require("js-tokens")
+var matchToToken = jsTokens.matchToToken
+```
+
+After:
+
+```js
+import jsTokens, {matchToToken} from "js-tokens"
+// or:
+var jsTokens = require("js-tokens").default
+var matchToToken = require("js-tokens").matchToToken
+```
+
+[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html
+
+
+### Version 2.0.0 (2016-06-19) ###
+
+- Added: Support for ES2016. In other words, support for the `**` exponentiation
+  operator.
+
+These are the breaking changes:
+
+- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`.
+- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`.
+
+
+### Version 1.0.3 (2016-03-27) ###
+
+- Improved: Made the regex ever so slightly smaller.
+- Updated: The readme.
+
+
+### Version 1.0.2 (2015-10-18) ###
+
+- Improved: Limited npm package contents for a smaller download. Thanks to
+  @zertosh!
+
+
+### Version 1.0.1 (2015-06-20) ###
+
+- Fixed: Declared an undeclared variable.
+
+
+### Version 1.0.0 (2015-02-26) ###
+
+- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That
+  type is now equivalent to the Punctuator token in the ECMAScript
+  specification. (Backwards-incompatible change.)
+- Fixed: A `-` followed by a number is now correctly matched as a punctuator
+  followed by a number. It used to be matched as just a number, but there is no
+  such thing as negative number literals. (Possibly backwards-incompatible
+  change.)
+
+
+### Version 0.4.1 (2015-02-21) ###
+
+- Added: Support for the regex `u` flag.
+
+
+### Version 0.4.0 (2015-02-21) ###
+
+- Improved: `jsTokens.matchToToken` performance.
+- Added: Support for octal and binary number literals.
+- Added: Support for template strings.
+
+
+### Version 0.3.1 (2015-01-06) ###
+
+- Fixed: Support for unicode spaces. They used to be allowed in names (which is
+  very confusing), and some unicode newlines were wrongly allowed in strings and
+  regexes.
+
+
+### Version 0.3.0 (2014-12-19) ###
+
+- Changed: The `jsTokens.names` array has been replaced with the
+  `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no
+  longer part of the public API; instead use said function. See this [gist] for
+  an example. (Backwards-incompatible change.)
+- Changed: The empty string is now considered an “invalid” token, instead an
+  “empty” token (its own group). (Backwards-incompatible change.)
+- Removed: component support. (Backwards-incompatible change.)
+
+[gist]: https://gist.github.com/lydell/be49dbf80c382c473004
+
+
+### Version 0.2.0 (2014-06-19) ###
+
+- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own
+  category (“functionArrow”), for simplicity. (Backwards-incompatible change.)
+- Added: ES6 splats (`...`) are now matched as an operator (instead of three
+  punctuations). (Backwards-incompatible change.)
+
+
+### Version 0.1.0 (2014-03-08) ###
+
+- Initial release.
diff --git a/node_modules/js-tokens/LICENSE b/node_modules/js-tokens/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..54aef52f3a464e59316eca4068f24717a40b0ec0
--- /dev/null
+++ b/node_modules/js-tokens/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/js-tokens/README.md b/node_modules/js-tokens/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..00cdf1634db1d9385ddb795e8814cd286cac43f6
--- /dev/null
+++ b/node_modules/js-tokens/README.md
@@ -0,0 +1,240 @@
+Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens)
+========
+
+A regex that tokenizes JavaScript.
+
+```js
+var jsTokens = require("js-tokens").default
+
+var jsString = "var foo=opts.foo;\n..."
+
+jsString.match(jsTokens)
+// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...]
+```
+
+
+Installation
+============
+
+`npm install js-tokens`
+
+```js
+import jsTokens from "js-tokens"
+// or:
+var jsTokens = require("js-tokens").default
+```
+
+
+Usage
+=====
+
+### `jsTokens` ###
+
+A regex with the `g` flag that matches JavaScript tokens.
+
+The regex _always_ matches, even invalid JavaScript and the empty string.
+
+The next match is always directly after the previous.
+
+### `var token = matchToToken(match)` ###
+
+```js
+import {matchToToken} from "js-tokens"
+// or:
+var matchToToken = require("js-tokens").matchToToken
+```
+
+Takes a `match` returned by `jsTokens.exec(string)`, and returns a `{type:
+String, value: String}` object. The following types are available:
+
+- string
+- comment
+- regex
+- number
+- name
+- punctuator
+- whitespace
+- invalid
+
+Multi-line comments and strings also have a `closed` property indicating if the
+token was closed or not (see below).
+
+Comments and strings both come in several flavors. To distinguish them, check if
+the token starts with `//`, `/*`, `'`, `"` or `` ` ``.
+
+Names are ECMAScript IdentifierNames, that is, including both identifiers and
+keywords. You may use [is-keyword-js] to tell them apart.
+
+Whitespace includes both line terminators and other whitespace.
+
+[is-keyword-js]: https://github.com/crissdev/is-keyword-js
+
+
+ECMAScript support
+==================
+
+The intention is to always support the latest ECMAScript version whose feature
+set has been finalized.
+
+If adding support for a newer version requires changes, a new version with a
+major verion bump will be released.
+
+Currently, ECMAScript 2018 is supported.
+
+
+Invalid code handling
+=====================
+
+Unterminated strings are still matched as strings. JavaScript strings cannot
+contain (unescaped) newlines, so unterminated strings simply end at the end of
+the line. Unterminated template strings can contain unescaped newlines, though,
+so they go on to the end of input.
+
+Unterminated multi-line comments are also still matched as comments. They
+simply go on to the end of the input.
+
+Unterminated regex literals are likely matched as division and whatever is
+inside the regex.
+
+Invalid ASCII characters have their own capturing group.
+
+Invalid non-ASCII characters are treated as names, to simplify the matching of
+names (except unicode spaces which are treated as whitespace). Note: See also
+the [ES2018](#es2018) section.
+
+Regex literals may contain invalid regex syntax. They are still matched as
+regex literals. They may also contain repeated regex flags, to keep the regex
+simple.
+
+Strings may contain invalid escape sequences.
+
+
+Limitations
+===========
+
+Tokenizing JavaScript using regexes—in fact, _one single regex_—won’t be
+perfect. But that’s not the point either.
+
+You may compare jsTokens with [esprima] by using `esprima-compare.js`.
+See `npm run esprima-compare`!
+
+[esprima]: http://esprima.org/
+
+### Template string interpolation ###
+
+Template strings are matched as single tokens, from the starting `` ` `` to the
+ending `` ` ``, including interpolations (whose tokens are not matched
+individually).
+
+Matching template string interpolations requires recursive balancing of `{` and
+`}`—something that JavaScript regexes cannot do. Only one level of nesting is
+supported.
+
+### Division and regex literals collision ###
+
+Consider this example:
+
+```js
+var g = 9.82
+var number = bar / 2/g
+
+var regex = / 2/g
+```
+
+A human can easily understand that in the `number` line we’re dealing with
+division, and in the `regex` line we’re dealing with a regex literal. How come?
+Because humans can look at the whole code to put the `/` characters in context.
+A JavaScript regex cannot. It only sees forwards. (Well, ES2018 regexes can also
+look backwards. See the [ES2018](#es2018) section).
+
+When the `jsTokens` regex scans throught the above, it will see the following
+at the end of both the `number` and `regex` rows:
+
+```js
+/ 2/g
+```
+
+It is then impossible to know if that is a regex literal, or part of an
+expression dealing with division.
+
+Here is a similar case:
+
+```js
+foo /= 2/g
+foo(/= 2/g)
+```
+
+The first line divides the `foo` variable with `2/g`. The second line calls the
+`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only
+sees forwards, it cannot tell the two cases apart.
+
+There are some cases where we _can_ tell division and regex literals apart,
+though.
+
+First off, we have the simple cases where there’s only one slash in the line:
+
+```js
+var foo = 2/g
+foo /= 2
+```
+
+Regex literals cannot contain newlines, so the above cases are correctly
+identified as division. Things are only problematic when there are more than
+one non-comment slash in a single line.
+
+Secondly, not every character is a valid regex flag.
+
+```js
+var number = bar / 2/e
+```
+
+The above example is also correctly identified as division, because `e` is not a
+valid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*`
+(any letter) as flags, but it is not worth it since it increases the amount of
+ambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are
+allowed. This means that the above example will be identified as division as
+long as you don’t rename the `e` variable to some permutation of `gmiyus` 1 to 6
+characters long.
+
+Lastly, we can look _forward_ for information.
+
+- If the token following what looks like a regex literal is not valid after a
+  regex literal, but is valid in a division expression, then the regex literal
+  is treated as division instead. For example, a flagless regex cannot be
+  followed by a string, number or name, but all of those three can be the
+  denominator of a division.
+- Generally, if what looks like a regex literal is followed by an operator, the
+  regex literal is treated as division instead. This is because regexes are
+  seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division
+  could likely be part of such an expression.
+
+Please consult the regex source and the test cases for precise information on
+when regex or division is matched (should you need to know). In short, you
+could sum it up as:
+
+If the end of a statement looks like a regex literal (even if it isn’t), it
+will be treated as one. Otherwise it should work as expected (if you write sane
+code).
+
+### ES2018 ###
+
+ES2018 added some nice regex improvements to the language.
+
+- [Unicode property escapes] should allow telling names and invalid non-ASCII
+  characters apart without blowing up the regex size.
+- [Lookbehind assertions] should allow matching telling division and regex
+  literals apart in more cases.
+- [Named capture groups] might simplify some things.
+
+These things would be nice to do, but are not critical. They probably have to
+wait until the oldest maintained Node.js LTS release supports those features.
+
+[Unicode property escapes]: http://2ality.com/2017/07/regexp-unicode-property-escapes.html
+[Lookbehind assertions]: http://2ality.com/2017/05/regexp-lookbehind-assertions.html
+[Named capture groups]: http://2ality.com/2017/05/regexp-named-capture-groups.html
+
+
+License
+=======
+
+[MIT](LICENSE).
diff --git a/node_modules/js-tokens/index.js b/node_modules/js-tokens/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b23a4a0e7f4527221c37e5f3d0b8176878f0f600
--- /dev/null
+++ b/node_modules/js-tokens/index.js
@@ -0,0 +1,23 @@
+// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell
+// License: MIT. (See LICENSE.)
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+})
+
+// This regex comes from regex.coffee, and is inserted here by generate-index.js
+// (run `npm run build`).
+exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g
+
+exports.matchToToken = function(match) {
+  var token = {type: "invalid", value: match[0], closed: undefined}
+       if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4])
+  else if (match[ 5]) token.type = "comment"
+  else if (match[ 6]) token.type = "comment", token.closed = !!match[7]
+  else if (match[ 8]) token.type = "regex"
+  else if (match[ 9]) token.type = "number"
+  else if (match[10]) token.type = "name"
+  else if (match[11]) token.type = "punctuator"
+  else if (match[12]) token.type = "whitespace"
+  return token
+}
diff --git a/node_modules/js-tokens/package.json b/node_modules/js-tokens/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..062b8225b07ae65e260333914166502f54fcb07f
--- /dev/null
+++ b/node_modules/js-tokens/package.json
@@ -0,0 +1,64 @@
+{
+  "_from": "js-tokens@^3.0.0 || ^4.0.0",
+  "_id": "js-tokens@4.0.0",
+  "_inBundle": false,
+  "_integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+  "_location": "/js-tokens",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "js-tokens@^3.0.0 || ^4.0.0",
+    "name": "js-tokens",
+    "escapedName": "js-tokens",
+    "rawSpec": "^3.0.0 || ^4.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.0 || ^4.0.0"
+  },
+  "_requiredBy": [
+    "/loose-envify"
+  ],
+  "_resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+  "_shasum": "19203fb59991df98e3a287050d4647cdeaf32499",
+  "_spec": "js-tokens@^3.0.0 || ^4.0.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/loose-envify",
+  "author": {
+    "name": "Simon Lydell"
+  },
+  "bugs": {
+    "url": "https://github.com/lydell/js-tokens/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "A regex that tokenizes JavaScript.",
+  "devDependencies": {
+    "coffeescript": "2.1.1",
+    "esprima": "4.0.0",
+    "everything.js": "1.0.3",
+    "mocha": "5.0.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/lydell/js-tokens#readme",
+  "keywords": [
+    "JavaScript",
+    "js",
+    "token",
+    "tokenize",
+    "regex"
+  ],
+  "license": "MIT",
+  "name": "js-tokens",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/lydell/js-tokens.git"
+  },
+  "scripts": {
+    "build": "node generate-index.js",
+    "dev": "npm run build && npm test",
+    "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js",
+    "test": "mocha --ui tdd"
+  },
+  "version": "4.0.0"
+}
diff --git a/node_modules/loose-envify/LICENSE b/node_modules/loose-envify/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..fbafb48758c78039fedb1dbce1ffa6de019870d1
--- /dev/null
+++ b/node_modules/loose-envify/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Andres Suarez <zertosh@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/loose-envify/README.md b/node_modules/loose-envify/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f4e07b00d20b0be5525966e660e4a3cb92cd96e
--- /dev/null
+++ b/node_modules/loose-envify/README.md
@@ -0,0 +1,45 @@
+# loose-envify
+
+[![Build Status](https://travis-ci.org/zertosh/loose-envify.svg?branch=master)](https://travis-ci.org/zertosh/loose-envify)
+
+Fast (and loose) selective `process.env` replacer using [js-tokens](https://github.com/lydell/js-tokens) instead of an AST. Works just like [envify](https://github.com/hughsk/envify) but much faster.
+
+## Gotchas
+
+* Doesn't handle broken syntax.
+* Doesn't look inside embedded expressions in template strings.
+  - **this won't work:**
+  ```js
+  console.log(`the current env is ${process.env.NODE_ENV}`);
+  ```
+* Doesn't replace oddly-spaced or oddly-commented expressions.
+  - **this won't work:**
+  ```js
+  console.log(process./*won't*/env./*work*/NODE_ENV);
+  ```
+
+## Usage/Options
+
+loose-envify has the exact same interface as [envify](https://github.com/hughsk/envify), including the CLI.
+
+## Benchmark
+
+```
+envify:
+
+  $ for i in {1..5}; do node bench/bench.js 'envify'; done
+  708ms
+  727ms
+  791ms
+  719ms
+  720ms
+
+loose-envify:
+
+  $ for i in {1..5}; do node bench/bench.js '../'; done
+  51ms
+  52ms
+  52ms
+  52ms
+  52ms
+```
diff --git a/node_modules/loose-envify/cli.js b/node_modules/loose-envify/cli.js
new file mode 100755
index 0000000000000000000000000000000000000000..c0b63cb1dfdd2a8830b5dde6afca09e3c2560fda
--- /dev/null
+++ b/node_modules/loose-envify/cli.js
@@ -0,0 +1,16 @@
+#!/usr/bin/env node
+'use strict';
+
+var looseEnvify = require('./');
+var fs = require('fs');
+
+if (process.argv[2]) {
+  fs.createReadStream(process.argv[2], {encoding: 'utf8'})
+    .pipe(looseEnvify(process.argv[2]))
+    .pipe(process.stdout);
+} else {
+  process.stdin.resume()
+  process.stdin
+    .pipe(looseEnvify(__filename))
+    .pipe(process.stdout);
+}
diff --git a/node_modules/loose-envify/custom.js b/node_modules/loose-envify/custom.js
new file mode 100644
index 0000000000000000000000000000000000000000..6389bfac505e23015ccbd6fb6cd07be8e73215cb
--- /dev/null
+++ b/node_modules/loose-envify/custom.js
@@ -0,0 +1,4 @@
+// envify compatibility
+'use strict';
+
+module.exports = require('./loose-envify');
diff --git a/node_modules/loose-envify/index.js b/node_modules/loose-envify/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cd8305ddc1a012b319732a3321e647561060855
--- /dev/null
+++ b/node_modules/loose-envify/index.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('./loose-envify')(process.env);
diff --git a/node_modules/loose-envify/loose-envify.js b/node_modules/loose-envify/loose-envify.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5a5be22078cf5fc00146742a34861c43d5902da
--- /dev/null
+++ b/node_modules/loose-envify/loose-envify.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var stream = require('stream');
+var util = require('util');
+var replace = require('./replace');
+
+var jsonExtRe = /\.json$/;
+
+module.exports = function(rootEnv) {
+  rootEnv = rootEnv || process.env;
+  return function (file, trOpts) {
+    if (jsonExtRe.test(file)) {
+      return stream.PassThrough();
+    }
+    var envs = trOpts ? [rootEnv, trOpts] : [rootEnv];
+    return new LooseEnvify(envs);
+  };
+};
+
+function LooseEnvify(envs) {
+  stream.Transform.call(this);
+  this._data = '';
+  this._envs = envs;
+}
+util.inherits(LooseEnvify, stream.Transform);
+
+LooseEnvify.prototype._transform = function(buf, enc, cb) {
+  this._data += buf;
+  cb();
+};
+
+LooseEnvify.prototype._flush = function(cb) {
+  var replaced = replace(this._data, this._envs);
+  this.push(replaced);
+  cb();
+};
diff --git a/node_modules/loose-envify/package.json b/node_modules/loose-envify/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..2767438847573c2cad7ee16584a28a38c1bdac6a
--- /dev/null
+++ b/node_modules/loose-envify/package.json
@@ -0,0 +1,70 @@
+{
+  "_from": "loose-envify@^1.0.0",
+  "_id": "loose-envify@1.4.0",
+  "_inBundle": false,
+  "_integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+  "_location": "/loose-envify",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "loose-envify@^1.0.0",
+    "name": "loose-envify",
+    "escapedName": "loose-envify",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/invariant",
+    "/prop-types",
+    "/react-transition-group",
+    "/warning"
+  ],
+  "_resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+  "_shasum": "71ee51fa7be4caec1a63839f7e682d8132d30caf",
+  "_spec": "loose-envify@^1.0.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/warning",
+  "author": {
+    "name": "Andres Suarez",
+    "email": "zertosh@gmail.com"
+  },
+  "bin": {
+    "loose-envify": "cli.js"
+  },
+  "bugs": {
+    "url": "https://github.com/zertosh/loose-envify/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "js-tokens": "^3.0.0 || ^4.0.0"
+  },
+  "deprecated": false,
+  "description": "Fast (and loose) selective `process.env` replacer using js-tokens instead of an AST",
+  "devDependencies": {
+    "browserify": "^13.1.1",
+    "envify": "^3.4.0",
+    "tap": "^8.0.0"
+  },
+  "homepage": "https://github.com/zertosh/loose-envify",
+  "keywords": [
+    "environment",
+    "variables",
+    "browserify",
+    "browserify-transform",
+    "transform",
+    "source",
+    "configuration"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "loose-envify",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/zertosh/loose-envify.git"
+  },
+  "scripts": {
+    "test": "tap test/*.js"
+  },
+  "version": "1.4.0"
+}
diff --git a/node_modules/loose-envify/replace.js b/node_modules/loose-envify/replace.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec15e81c298e9753accffac697a51eca424fec07
--- /dev/null
+++ b/node_modules/loose-envify/replace.js
@@ -0,0 +1,65 @@
+'use strict';
+
+var jsTokens = require('js-tokens').default;
+
+var processEnvRe = /\bprocess\.env\.[_$a-zA-Z][$\w]+\b/;
+var spaceOrCommentRe = /^(?:\s|\/[/*])/;
+
+function replace(src, envs) {
+  if (!processEnvRe.test(src)) {
+    return src;
+  }
+
+  var out = [];
+  var purge = envs.some(function(env) {
+    return env._ && env._.indexOf('purge') !== -1;
+  });
+
+  jsTokens.lastIndex = 0
+  var parts = src.match(jsTokens);
+
+  for (var i = 0; i < parts.length; i++) {
+    if (parts[i    ] === 'process' &&
+        parts[i + 1] === '.' &&
+        parts[i + 2] === 'env' &&
+        parts[i + 3] === '.') {
+      var prevCodeToken = getAdjacentCodeToken(-1, parts, i);
+      var nextCodeToken = getAdjacentCodeToken(1, parts, i + 4);
+      var replacement = getReplacementString(envs, parts[i + 4], purge);
+      if (prevCodeToken !== '.' &&
+          nextCodeToken !== '.' &&
+          nextCodeToken !== '=' &&
+          typeof replacement === 'string') {
+        out.push(replacement);
+        i += 4;
+        continue;
+      }
+    }
+    out.push(parts[i]);
+  }
+
+  return out.join('');
+}
+
+function getAdjacentCodeToken(dir, parts, i) {
+  while (true) {
+    var part = parts[i += dir];
+    if (!spaceOrCommentRe.test(part)) {
+      return part;
+    }
+  }
+}
+
+function getReplacementString(envs, name, purge) {
+  for (var j = 0; j < envs.length; j++) {
+    var env = envs[j];
+    if (typeof env[name] !== 'undefined') {
+      return JSON.stringify(env[name]);
+    }
+  }
+  if (purge) {
+    return 'undefined';
+  }
+}
+
+module.exports = replace;
diff --git a/node_modules/object-assign/index.js b/node_modules/object-assign/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0930cf8890b9af66125c222c29d7bd75614ac6b4
--- /dev/null
+++ b/node_modules/object-assign/index.js
@@ -0,0 +1,90 @@
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+'use strict';
+/* eslint-disable no-unused-vars */
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+function toObject(val) {
+	if (val === null || val === undefined) {
+		throw new TypeError('Object.assign cannot be called with null or undefined');
+	}
+
+	return Object(val);
+}
+
+function shouldUseNative() {
+	try {
+		if (!Object.assign) {
+			return false;
+		}
+
+		// Detect buggy property enumeration order in older V8 versions.
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
+		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
+		test1[5] = 'de';
+		if (Object.getOwnPropertyNames(test1)[0] === '5') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test2 = {};
+		for (var i = 0; i < 10; i++) {
+			test2['_' + String.fromCharCode(i)] = i;
+		}
+		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+			return test2[n];
+		});
+		if (order2.join('') !== '0123456789') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test3 = {};
+		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+			test3[letter] = letter;
+		});
+		if (Object.keys(Object.assign({}, test3)).join('') !==
+				'abcdefghijklmnopqrst') {
+			return false;
+		}
+
+		return true;
+	} catch (err) {
+		// We don't expect any of the above to throw, but better to be safe.
+		return false;
+	}
+}
+
+module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+	var from;
+	var to = toObject(target);
+	var symbols;
+
+	for (var s = 1; s < arguments.length; s++) {
+		from = Object(arguments[s]);
+
+		for (var key in from) {
+			if (hasOwnProperty.call(from, key)) {
+				to[key] = from[key];
+			}
+		}
+
+		if (getOwnPropertySymbols) {
+			symbols = getOwnPropertySymbols(from);
+			for (var i = 0; i < symbols.length; i++) {
+				if (propIsEnumerable.call(from, symbols[i])) {
+					to[symbols[i]] = from[symbols[i]];
+				}
+			}
+		}
+	}
+
+	return to;
+};
diff --git a/node_modules/object-assign/license b/node_modules/object-assign/license
new file mode 100644
index 0000000000000000000000000000000000000000..654d0bfe943437d43242325b1fbcff5f400d84ee
--- /dev/null
+++ b/node_modules/object-assign/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/object-assign/package.json b/node_modules/object-assign/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8029b6e59a77acc39fdbe89e6db6b95b22d3ca46
--- /dev/null
+++ b/node_modules/object-assign/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "object-assign@^4.1.1",
+  "_id": "object-assign@4.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+  "_location": "/object-assign",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "object-assign@^4.1.1",
+    "name": "object-assign",
+    "escapedName": "object-assign",
+    "rawSpec": "^4.1.1",
+    "saveSpec": null,
+    "fetchSpec": "^4.1.1"
+  },
+  "_requiredBy": [
+    "/prop-types"
+  ],
+  "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+  "_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863",
+  "_spec": "object-assign@^4.1.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/prop-types",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/object-assign/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "ES2015 `Object.assign()` ponyfill",
+  "devDependencies": {
+    "ava": "^0.16.0",
+    "lodash": "^4.16.4",
+    "matcha": "^0.7.0",
+    "xo": "^0.16.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/object-assign#readme",
+  "keywords": [
+    "object",
+    "assign",
+    "extend",
+    "properties",
+    "es2015",
+    "ecmascript",
+    "harmony",
+    "ponyfill",
+    "prollyfill",
+    "polyfill",
+    "shim",
+    "browser"
+  ],
+  "license": "MIT",
+  "name": "object-assign",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/object-assign.git"
+  },
+  "scripts": {
+    "bench": "matcha bench.js",
+    "test": "xo && ava"
+  },
+  "version": "4.1.1"
+}
diff --git a/node_modules/object-assign/readme.md b/node_modules/object-assign/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..1be09d35c776cc0e9cc59519c2de6b9eecf8aa68
--- /dev/null
+++ b/node_modules/object-assign/readme.md
@@ -0,0 +1,61 @@
+# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign)
+
+> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com)
+
+
+## Use the built-in
+
+Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari),
+support `Object.assign()` :tada:. If you target only those environments, then by all
+means, use `Object.assign()` instead of this package.
+
+
+## Install
+
+```
+$ npm install --save object-assign
+```
+
+
+## Usage
+
+```js
+const objectAssign = require('object-assign');
+
+objectAssign({foo: 0}, {bar: 1});
+//=> {foo: 0, bar: 1}
+
+// multiple sources
+objectAssign({foo: 0}, {bar: 1}, {baz: 2});
+//=> {foo: 0, bar: 1, baz: 2}
+
+// overwrites equal keys
+objectAssign({foo: 0}, {foo: 1}, {foo: 2});
+//=> {foo: 2}
+
+// ignores null and undefined sources
+objectAssign({foo: 0}, null, {bar: 1}, undefined);
+//=> {foo: 0, bar: 1}
+```
+
+
+## API
+
+### objectAssign(target, [source, ...])
+
+Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones.
+
+
+## Resources
+
+- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign)
+
+
+## Related
+
+- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()`
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/prop-types-extra/CHANGELOG.md b/node_modules/prop-types-extra/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..176dc513ebfca34d0052549f11c1ee4ecb975c01
--- /dev/null
+++ b/node_modules/prop-types-extra/CHANGELOG.md
@@ -0,0 +1,44 @@
+## [v0.3.2]
+> 2016-05-13
+
+- **Bugfix:** Emit each deprecation warning message only once ([#24])
+
+[v0.3.2]: https://github.com/react-bootstrap/react-prop-types/compare/v0.3.1...v0.3.2
+[#24]: https://github.com/react-bootstrap/react-prop-types/pull/24
+
+
+## [v0.3.1]
+> 2016-05-09
+
+- **Bugfix:** Support `isRequired` on `all` ([#22])
+
+[v0.3.1]: https://github.com/react-bootstrap/react-prop-types/compare/v0.3.0...v0.3.1
+[#22]: https://github.com/react-bootstrap/react-prop-types/pull/22
+
+
+v0.3.0 - Thu, 10 Sep 2015 19:23:24 GMT
+--------------------------------------
+
+- [3784da4](../../commit/3784da4) [changed] Use es6 rest for parameters of all and singlePropFrom
+- [447c243](../../commit/447c243) [fixed] 'isRequireForA11y' undefined/null checking
+
+
+
+v0.2.2 - Fri, 21 Aug 2015 19:22:51 GMT
+--------------------------------------
+
+- [7d79e8d](../../commit/7d79e8d) [added] 'deprecated' wrapper for property deprecation warning
+
+
+
+v0.2.1 - Sun, 12 Jul 2015 16:04:58 GMT
+--------------------------------------
+
+
+
+
+
+v0.2.0 - Sun, 12 Jul 2015 16:01:47 GMT
+--------------------------------------
+
+
diff --git a/node_modules/prop-types-extra/LICENSE b/node_modules/prop-types-extra/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..b195fc1f6d7af6820725dea90ccceab6b6c4a8e0
--- /dev/null
+++ b/node_modules/prop-types-extra/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 react-bootstrap
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/node_modules/prop-types-extra/README.md b/node_modules/prop-types-extra/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9f05604fdee5cbbaa525872395048be04baa10a5
--- /dev/null
+++ b/node_modules/prop-types-extra/README.md
@@ -0,0 +1,116 @@
+# prop-types-extra [![Travis][build-badge]][build] [![npm][npm-badge]][npm]
+
+Additional [PropTypes](https://facebook.github.io/react/docs/reusable-components.html#prop-validation) for [React](https://facebook.github.io/react/).
+
+## Usage
+
+```js
+import elementType from 'prop-types-extra/lib/elementType';
+// or
+import { elementType } from 'prop-types-extra';
+
+const propTypes = {
+  someProp: elementType,
+};
+```
+
+If you want to minimize bundle size, import only the validators you use via:
+
+```js
+import elementType from 'prop-types-extra/lib/elementType'
+```
+
+## Guide
+
+### Installation
+
+```sh
+$ npm i -S react
+$ npm i -S prop-types-extra
+```
+
+### [`all(...validators)`](/src/all.js)
+
+This validator checks that all of the provided validators pass.
+
+```js
+const propTypes = {
+  vertical:  PropTypes.bool.isRequired,
+
+  block: all(
+    PropTypes.bool.isRequired,
+    ({ block, vertical }) => (
+      block && !vertical ?
+        new Error('`block` requires `vertical` to be set to have any effect') :
+        null
+    ),
+  ),
+};
+```
+
+The provided validators will be validated in order, stopping on the first failure. The combined validator will succeed only if all provided validators succeed.
+
+As in the example, this can be used to make a type assertion along with additional semantic assertions.
+
+### [`componentOrElement`](/src/componentOrElement.js)
+
+Checks that the value is a `ReactComponent` or a `DOMElement`.
+
+```js
+const propTypes = {
+  container: componentOrElement,
+  requiredContainer: componentOrElement.isRequired,
+};
+```
+
+This ensures that the value is of the right type to pass to `ReactDOM.findDOMNode()`, for cases where you need a DOM node.
+
+### [`deprecated(validator, reason)`](/src/deprecated.js)
+
+This validator will log a deprecation warning if the value is present.
+
+```js
+const propTypes = {
+  collapsable: deprecated(PropTypes.bool, 'Use `collapsible` instead.'),
+};
+```
+
+If the `collapsable` prop above is specified, this validator will log the warning:
+
+>The prop \`collapsable\` of \`MyComponent\` is deprecated. Use \`collapsible\` instead.
+
+This validator warns instead of failing on invalid values, and will still call the underlying validator if the deprecated value is present.
+
+This validator will only warn once on each deprecation. To clear the cache of warned messages, such as for clearing state between test cases intended to fail on deprecation warnings, call `deprecated._resetWarned()`.
+
+### [`elementType`](/src/elementType.js)
+
+Checks that the value is a React element type. This can be either a string (for DOM elements) or a `ReactClass` (for composite components).
+
+```js
+const propTypes = {
+  Component: elementType.isRequired,
+};
+```
+
+This ensures that the value of is the right type for creating a `ReactElement`, such as with `<Component {...props} />`.
+
+### [`isRequiredForA11y(validator)`](/src/isRequiredForA11y.js)
+
+This validator checks that the value required for accessibility are present.
+
+```js
+const propTypes = {
+  id: isRequiredForA11y(PropTypes.string),
+};
+```
+
+If the `id` prop above is not specified, the validator will fail with:
+
+>The prop \`id\` is required to make \`MyComponent\` accessible for users of assistive technologies such as screen readers.
+
+[build-badge]: https://img.shields.io/travis/react-bootstrap/prop-types-extra/master.svg
+[build]: https://travis-ci.org/react-bootstrap/prop-types-extra
+
+[npm-badge]: https://img.shields.io/npm/v/prop-types-extra.svg
+[npm]: https://www.npmjs.org/package/prop-types-extra
diff --git a/node_modules/prop-types-extra/lib/all.js b/node_modules/prop-types-extra/lib/all.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b82506e8677bf3365aa49f7424ae7ff3c3b2fe3
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/all.js
@@ -0,0 +1,42 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = all;
+
+var _createChainableTypeChecker = require('./utils/createChainableTypeChecker');
+
+var _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function all() {
+  for (var _len = arguments.length, validators = Array(_len), _key = 0; _key < _len; _key++) {
+    validators[_key] = arguments[_key];
+  }
+
+  function allPropTypes() {
+    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+      args[_key2] = arguments[_key2];
+    }
+
+    var error = null;
+
+    validators.forEach(function (validator) {
+      if (error != null) {
+        return;
+      }
+
+      var result = validator.apply(undefined, args);
+      if (result != null) {
+        error = result;
+      }
+    });
+
+    return error;
+  }
+
+  return (0, _createChainableTypeChecker2.default)(allPropTypes);
+}
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/componentOrElement.js b/node_modules/prop-types-extra/lib/componentOrElement.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7aae7f8d2219d59fa03127fdbbc20b4cc02fd42
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/componentOrElement.js
@@ -0,0 +1,35 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _createChainableTypeChecker = require('./utils/createChainableTypeChecker');
+
+var _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function validate(props, propName, componentName, location, propFullName) {
+  var propValue = props[propName];
+  var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);
+
+  if (_react2.default.isValidElement(propValue)) {
+    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement. You can usually obtain a ReactComponent or DOMElement ' + 'from a ReactElement by attaching a ref to it.');
+  }
+
+  if ((propType !== 'object' || typeof propValue.render !== 'function') && propValue.nodeType !== 1) {
+    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected a ReactComponent or a ') + 'DOMElement.');
+  }
+
+  return null;
+}
+
+exports.default = (0, _createChainableTypeChecker2.default)(validate);
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/deprecated.js b/node_modules/prop-types-extra/lib/deprecated.js
new file mode 100644
index 0000000000000000000000000000000000000000..395dca84c09996f2754ca7a248ca79047a848353
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/deprecated.js
@@ -0,0 +1,45 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = deprecated;
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var warned = {};
+
+function deprecated(validator, reason) {
+  return function validate(props, propName, componentName, location, propFullName) {
+    var componentNameSafe = componentName || '<<anonymous>>';
+    var propFullNameSafe = propFullName || propName;
+
+    if (props[propName] != null) {
+      var messageKey = componentName + '.' + propName;
+
+      (0, _warning2.default)(warned[messageKey], 'The ' + location + ' `' + propFullNameSafe + '` of ' + ('`' + componentNameSafe + '` is deprecated. ' + reason + '.'));
+
+      warned[messageKey] = true;
+    }
+
+    for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {
+      args[_key - 5] = arguments[_key];
+    }
+
+    return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args));
+  };
+}
+
+/* eslint-disable no-underscore-dangle */
+function _resetWarned() {
+  warned = {};
+}
+
+deprecated._resetWarned = _resetWarned;
+/* eslint-enable no-underscore-dangle */
+
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/elementType.js b/node_modules/prop-types-extra/lib/elementType.js
new file mode 100644
index 0000000000000000000000000000000000000000..130cb3ebade7298758772479379b99aebd7a05d5
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/elementType.js
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactIs = require('react-is');
+
+var _createChainableTypeChecker = require('./utils/createChainableTypeChecker');
+
+var _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function elementType(props, propName, componentName, location, propFullName) {
+  var propValue = props[propName];
+
+  if (_react2.default.isValidElement(propValue)) {
+    return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`,expected an element type (a string ') + ', component class, or function component).');
+  }
+
+  if (!(0, _reactIs.isValidElementType)(propValue)) {
+    return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + ', component class, or function component).');
+  }
+
+  return null;
+}
+
+exports.default = (0, _createChainableTypeChecker2.default)(elementType);
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/index.js b/node_modules/prop-types-extra/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..4ecd2557bae2a0689e970c66536fa241f9c0e6e2
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/index.js
@@ -0,0 +1,34 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.isRequiredForA11y = exports.elementType = exports.deprecated = exports.componentOrElement = exports.all = undefined;
+
+var _all = require('./all');
+
+var _all2 = _interopRequireDefault(_all);
+
+var _componentOrElement = require('./componentOrElement');
+
+var _componentOrElement2 = _interopRequireDefault(_componentOrElement);
+
+var _deprecated = require('./deprecated');
+
+var _deprecated2 = _interopRequireDefault(_deprecated);
+
+var _elementType = require('./elementType');
+
+var _elementType2 = _interopRequireDefault(_elementType);
+
+var _isRequiredForA11y = require('./isRequiredForA11y');
+
+var _isRequiredForA11y2 = _interopRequireDefault(_isRequiredForA11y);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+exports.all = _all2.default;
+exports.componentOrElement = _componentOrElement2.default;
+exports.deprecated = _deprecated2.default;
+exports.elementType = _elementType2.default;
+exports.isRequiredForA11y = _isRequiredForA11y2.default;
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/isRequiredForA11y.js b/node_modules/prop-types-extra/lib/isRequiredForA11y.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c12e1527539eb6e09b18897e3b086287491a905
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/isRequiredForA11y.js
@@ -0,0 +1,23 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = isRequiredForA11y;
+function isRequiredForA11y(validator) {
+  return function validate(props, propName, componentName, location, propFullName) {
+    var componentNameSafe = componentName || '<<anonymous>>';
+    var propFullNameSafe = propFullName || propName;
+
+    if (props[propName] == null) {
+      return new Error('The ' + location + ' `' + propFullNameSafe + '` is required to make ' + ('`' + componentNameSafe + '` accessible for users of assistive ') + 'technologies such as screen readers.');
+    }
+
+    for (var _len = arguments.length, args = Array(_len > 5 ? _len - 5 : 0), _key = 5; _key < _len; _key++) {
+      args[_key - 5] = arguments[_key];
+    }
+
+    return validator.apply(undefined, [props, propName, componentName, location, propFullName].concat(args));
+  };
+}
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js b/node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js
new file mode 100644
index 0000000000000000000000000000000000000000..79cda3011479f37d83ab7046e4453c19d02ede5c
--- /dev/null
+++ b/node_modules/prop-types-extra/lib/utils/createChainableTypeChecker.js
@@ -0,0 +1,43 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = createChainableTypeChecker;
+/**
+ * Copyright 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+// Mostly taken from ReactPropTypes.
+
+function createChainableTypeChecker(validate) {
+  function checkType(isRequired, props, propName, componentName, location, propFullName) {
+    var componentNameSafe = componentName || '<<anonymous>>';
+    var propFullNameSafe = propFullName || propName;
+
+    if (props[propName] == null) {
+      if (isRequired) {
+        return new Error('Required ' + location + ' `' + propFullNameSafe + '` was not specified ' + ('in `' + componentNameSafe + '`.'));
+      }
+
+      return null;
+    }
+
+    for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {
+      args[_key - 6] = arguments[_key];
+    }
+
+    return validate.apply(undefined, [props, propName, componentNameSafe, location, propFullNameSafe].concat(args));
+  }
+
+  var chainedCheckType = checkType.bind(null, false);
+  chainedCheckType.isRequired = checkType.bind(null, true);
+
+  return chainedCheckType;
+}
+module.exports = exports['default'];
\ No newline at end of file
diff --git a/node_modules/prop-types-extra/package.json b/node_modules/prop-types-extra/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0091d840e590bbfec9d02e56514553fe359dd855
--- /dev/null
+++ b/node_modules/prop-types-extra/package.json
@@ -0,0 +1,97 @@
+{
+  "_from": "prop-types-extra@^1.1.0",
+  "_id": "prop-types-extra@1.1.1",
+  "_inBundle": false,
+  "_integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==",
+  "_location": "/prop-types-extra",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "prop-types-extra@^1.1.0",
+    "name": "prop-types-extra",
+    "escapedName": "prop-types-extra",
+    "rawSpec": "^1.1.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.1.0"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz",
+  "_shasum": "58c3b74cbfbb95d304625975aa2f0848329a010b",
+  "_spec": "prop-types-extra@^1.1.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Matthew L Smith",
+    "email": "mtscout6@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/react-bootstrap/prop-types-extra/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "react-is": "^16.3.2",
+    "warning": "^4.0.0"
+  },
+  "deprecated": false,
+  "description": "React PropType Utilities",
+  "devDependencies": {
+    "babel-cli": "^6.24.1",
+    "babel-eslint": "^7.2.3",
+    "babel-jest": "^20.0.1",
+    "babel-plugin-add-module-exports": "^0.2.1",
+    "babel-preset-env": "^1.4.0",
+    "babel-preset-react": "^6.24.1",
+    "chai": "^3.0.0",
+    "dirty-chai": "^1.2.2",
+    "eslint": "^2.13.1",
+    "eslint-config-airbnb": "^9.0.1",
+    "eslint-config-airbnb-base": "^3.0.1",
+    "eslint-plugin-import": "^1.10.2",
+    "eslint-plugin-jsx-a11y": "^1.5.5",
+    "eslint-plugin-mocha": "^4.0.0",
+    "eslint-plugin-react": "^5.2.2",
+    "jest": "^20.0.1",
+    "prop-types": "^15.6.1",
+    "react": "^16.3.2",
+    "release-script": "^1.0.2",
+    "sinon": "^2.2.0",
+    "sinon-chai": "^2.10.0"
+  },
+  "files": [
+    "LICENSE",
+    "README.md",
+    "lib"
+  ],
+  "homepage": "https://github.com/react-bootstrap/prop-types-extra#readme",
+  "jest": {
+    "roots": [
+      "<rootDir>/test"
+    ],
+    "testRegex": "test\\.js",
+    "setupTestFrameworkScriptFile": "./test/test-setup.js"
+  },
+  "keywords": [
+    "react",
+    "proptypes"
+  ],
+  "license": "MIT",
+  "main": "lib/index.js",
+  "name": "prop-types-extra",
+  "peerDependencies": {
+    "react": ">=0.14.0"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/react-bootstrap/prop-types-extra.git"
+  },
+  "scripts": {
+    "build": "rm -rf lib && babel src --out-dir lib",
+    "lint": "eslint .",
+    "release": "release",
+    "tdd": "jest --watch",
+    "test": "npm run lint && jest"
+  },
+  "version": "1.1.1"
+}
diff --git a/node_modules/prop-types/LICENSE b/node_modules/prop-types/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..188fb2b0bd8e7b4aa032165449c180cc108d18ac
--- /dev/null
+++ b/node_modules/prop-types/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/prop-types/README.md b/node_modules/prop-types/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e54d435f9f80a7f91bde42e0de20849097d133b8
--- /dev/null
+++ b/node_modules/prop-types/README.md
@@ -0,0 +1,302 @@
+# prop-types [![Build Status](https://travis-ci.com/facebook/prop-types.svg?branch=main)](https://travis-ci.org/facebook/prop-types)
+
+Runtime type checking for React props and similar objects.
+
+You can use prop-types to document the intended types of properties passed to
+components. React (and potentially other libraries—see the `checkPropTypes()`
+reference below) will check props passed to your components against those
+definitions, and warn in development if they don’t match.
+
+## Installation
+
+```shell
+npm install --save prop-types
+```
+
+## Importing
+
+```js
+import PropTypes from 'prop-types'; // ES6
+var PropTypes = require('prop-types'); // ES5 with npm
+```
+
+### CDN
+
+If you prefer to exclude `prop-types` from your application and use it
+globally via `window.PropTypes`, the `prop-types` package provides
+single-file distributions, which are hosted on the following CDNs:
+
+* [**unpkg**](https://unpkg.com/prop-types/)
+```html
+<!-- development version -->
+<script src="https://unpkg.com/prop-types@15.6/prop-types.js"></script>
+
+<!-- production version -->
+<script src="https://unpkg.com/prop-types@15.6/prop-types.min.js"></script>
+```
+
+* [**cdnjs**](https://cdnjs.com/libraries/prop-types)
+```html
+<!-- development version -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
+
+<!-- production version -->
+<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.min.js"></script>
+```
+
+To load a specific version of `prop-types` replace `15.6.0` with the version number.
+
+## Usage
+
+PropTypes was originally exposed as part of the React core module, and is
+commonly used with React components.
+Here is an example of using PropTypes with a React component, which also
+documents the different validators provided:
+
+```js
+import React from 'react';
+import PropTypes from 'prop-types';
+
+class MyComponent extends React.Component {
+  render() {
+    // ... do things with the props
+  }
+}
+
+MyComponent.propTypes = {
+  // You can declare that a prop is a specific JS primitive. By default, these
+  // are all optional.
+  optionalArray: PropTypes.array,
+  optionalBigInt: PropTypes.bigint,
+  optionalBool: PropTypes.bool,
+  optionalFunc: PropTypes.func,
+  optionalNumber: PropTypes.number,
+  optionalObject: PropTypes.object,
+  optionalString: PropTypes.string,
+  optionalSymbol: PropTypes.symbol,
+
+  // Anything that can be rendered: numbers, strings, elements or an array
+  // (or fragment) containing these types.
+  // see https://reactjs.org/docs/rendering-elements.html for more info
+  optionalNode: PropTypes.node,
+
+  // A React element (ie. <MyComponent />).
+  optionalElement: PropTypes.element,
+
+  // A React element type (eg. MyComponent).
+  // a function, string, or "element-like" object (eg. React.Fragment, Suspense, etc.)
+  // see https://github.com/facebook/react/blob/HEAD/packages/shared/isValidElementType.js
+  optionalElementType: PropTypes.elementType,
+
+  // You can also declare that a prop is an instance of a class. This uses
+  // JS's instanceof operator.
+  optionalMessage: PropTypes.instanceOf(Message),
+
+  // You can ensure that your prop is limited to specific values by treating
+  // it as an enum.
+  optionalEnum: PropTypes.oneOf(['News', 'Photos']),
+
+  // An object that could be one of many types
+  optionalUnion: PropTypes.oneOfType([
+    PropTypes.string,
+    PropTypes.number,
+    PropTypes.instanceOf(Message)
+  ]),
+
+  // An array of a certain type
+  optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
+
+  // An object with property values of a certain type
+  optionalObjectOf: PropTypes.objectOf(PropTypes.number),
+
+  // You can chain any of the above with `isRequired` to make sure a warning
+  // is shown if the prop isn't provided.
+
+  // An object taking on a particular shape
+  optionalObjectWithShape: PropTypes.shape({
+    optionalProperty: PropTypes.string,
+    requiredProperty: PropTypes.number.isRequired
+  }),
+
+  // An object with warnings on extra properties
+  optionalObjectWithStrictShape: PropTypes.exact({
+    optionalProperty: PropTypes.string,
+    requiredProperty: PropTypes.number.isRequired
+  }),
+
+  requiredFunc: PropTypes.func.isRequired,
+
+  // A value of any data type
+  requiredAny: PropTypes.any.isRequired,
+
+  // You can also specify a custom validator. It should return an Error
+  // object if the validation fails. Don't `console.warn` or throw, as this
+  // won't work inside `oneOfType`.
+  customProp: function(props, propName, componentName) {
+    if (!/matchme/.test(props[propName])) {
+      return new Error(
+        'Invalid prop `' + propName + '` supplied to' +
+        ' `' + componentName + '`. Validation failed.'
+      );
+    }
+  },
+
+  // You can also supply a custom validator to `arrayOf` and `objectOf`.
+  // It should return an Error object if the validation fails. The validator
+  // will be called for each key in the array or object. The first two
+  // arguments of the validator are the array or object itself, and the
+  // current item's key.
+  customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
+    if (!/matchme/.test(propValue[key])) {
+      return new Error(
+        'Invalid prop `' + propFullName + '` supplied to' +
+        ' `' + componentName + '`. Validation failed.'
+      );
+    }
+  })
+};
+```
+
+Refer to the [React documentation](https://facebook.github.io/react/docs/typechecking-with-proptypes.html) for more information.
+
+## Migrating from React.PropTypes
+
+Check out [Migrating from React.PropTypes](https://facebook.github.io/react/blog/2017/04/07/react-v15.5.0.html#migrating-from-react.proptypes) for details on how to migrate to `prop-types` from `React.PropTypes`.
+
+Note that this blog posts **mentions a codemod script that performs the conversion automatically**.
+
+There are also important notes below.
+
+## How to Depend on This Package?
+
+For apps, we recommend putting it in `dependencies` with a caret range.
+For example:
+
+```js
+  "dependencies": {
+    "prop-types": "^15.5.7"
+  }
+```
+
+For libraries, we *also* recommend leaving it in `dependencies`:
+
+```js
+  "dependencies": {
+    "prop-types": "^15.5.7"
+  },
+  "peerDependencies": {
+    "react": "^15.5.0"
+  }
+```
+
+**Note:** there are known issues in versions before 15.5.7 so we recommend using it as the minimal version.
+
+Make sure that the version range uses a caret (`^`) and thus is broad enough for npm to efficiently deduplicate packages.
+
+For UMD bundles of your components, make sure you **don’t** include `PropTypes` in the build. Usually this is done by marking it as an external (the specifics depend on your bundler), just like you do with React.
+
+## Compatibility
+
+### React 0.14
+
+This package is compatible with **React 0.14.9**. Compared to 0.14.8 (which was released in March of 2016), there are no other changes in 0.14.9, so it should be a painless upgrade.
+
+```shell
+# ATTENTION: Only run this if you still use React 0.14!
+npm install --save react@^0.14.9 react-dom@^0.14.9
+```
+
+### React 15+
+
+This package is compatible with **React 15.3.0** and higher.
+
+```
+npm install --save react@^15.3.0 react-dom@^15.3.0
+```
+
+### What happens on other React versions?
+
+It outputs warnings with the message below even though the developer doesn’t do anything wrong. Unfortunately there is no solution for this other than updating React to either 15.3.0 or higher, or 0.14.9 if you’re using React 0.14.
+
+## Difference from `React.PropTypes`: Don’t Call Validator Functions
+
+First of all, **which version of React are you using**? You might be seeing this message because a component library has updated to use `prop-types` package, but your version of React is incompatible with it. See the [above section](#compatibility) for more details.
+
+Are you using either React 0.14.9 or a version higher than React 15.3.0? Read on.
+
+When you migrate components to use the standalone `prop-types`, **all validator functions will start throwing an error if you call them directly**. This makes sure that nobody relies on them in production code, and it is safe to strip their implementations to optimize the bundle size.
+
+Code like this is still fine:
+
+```js
+MyComponent.propTypes = {
+  myProp: PropTypes.bool
+};
+```
+
+However, code like this will not work with the `prop-types` package:
+
+```js
+// Will not work with `prop-types` package!
+var errorOrNull = PropTypes.bool(42, 'myProp', 'MyComponent', 'prop');
+```
+
+It will throw an error:
+
+```
+Calling PropTypes validators directly is not supported by the `prop-types` package.
+Use PropTypes.checkPropTypes() to call them.
+```
+
+(If you see **a warning** rather than an error with this message, please check the [above section about compatibility](#compatibility).)
+
+This is new behavior, and you will only encounter it when you migrate from `React.PropTypes` to the `prop-types` package. For the vast majority of components, this doesn’t matter, and if you didn’t see [this warning](https://facebook.github.io/react/warnings/dont-call-proptypes.html) in your components, your code is safe to migrate. This is not a breaking change in React because you are only opting into this change for a component by explicitly changing your imports to use `prop-types`. If you temporarily need the old behavior, you can keep using `React.PropTypes` until React 16.
+
+**If you absolutely need to trigger the validation manually**, call `PropTypes.checkPropTypes()`. Unlike the validators themselves, this function is safe to call in production, as it will be replaced by an empty function:
+
+```js
+// Works with standalone PropTypes
+PropTypes.checkPropTypes(MyComponent.propTypes, props, 'prop', 'MyComponent');
+```
+See below for more info.
+
+**If you DO want to use validation in production**, you can choose to use the **development version** by importing/requiring `prop-types/prop-types` instead of `prop-types`.
+
+**You might also see this error** if you’re calling a `PropTypes` validator from your own custom `PropTypes` validator. In this case, the fix is to make sure that you are passing *all* of the arguments to the inner function. There is a more in-depth explanation of how to fix it [on this page](https://facebook.github.io/react/warnings/dont-call-proptypes.html#fixing-the-false-positive-in-third-party-proptypes). Alternatively, you can temporarily keep using `React.PropTypes` until React 16, as it would still only warn in this case.
+
+If you use a bundler like Browserify or Webpack, don’t forget to [follow these instructions](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) to correctly bundle your application in development or production mode. Otherwise you’ll ship unnecessary code to your users.
+
+## PropTypes.checkPropTypes
+
+React will automatically check the propTypes you set on the component, but if
+you are using PropTypes without React then you may want to manually call
+`PropTypes.checkPropTypes`, like so:
+
+```js
+const myPropTypes = {
+  name: PropTypes.string,
+  age: PropTypes.number,
+  // ... define your prop validations
+};
+
+const props = {
+  name: 'hello', // is valid
+  age: 'world', // not valid
+};
+
+// Let's say your component is called 'MyComponent'
+
+// Works with standalone PropTypes
+PropTypes.checkPropTypes(myPropTypes, props, 'prop', 'MyComponent');
+// This will warn as follows:
+// Warning: Failed prop type: Invalid prop `age` of type `string` supplied to
+// `MyComponent`, expected `number`.
+```
+
+## PropTypes.resetWarningCache()
+
+`PropTypes.checkPropTypes(...)` only `console.error`s a given message once. To reset the error warning cache in tests, call `PropTypes.resetWarningCache()`
+
+### License
+
+prop-types is [MIT licensed](./LICENSE).
diff --git a/node_modules/prop-types/checkPropTypes.js b/node_modules/prop-types/checkPropTypes.js
new file mode 100644
index 0000000000000000000000000000000000000000..481f2cf9b9c16d50b50c918c172cba4e2d1e21ba
--- /dev/null
+++ b/node_modules/prop-types/checkPropTypes.js
@@ -0,0 +1,103 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var printWarning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+  var loggedTypeFailures = {};
+  var has = require('./lib/has');
+
+  printWarning = function(text) {
+    var message = 'Warning: ' + text;
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) { /**/ }
+  };
+}
+
+/**
+ * Assert that the values match with the type specs.
+ * Error messages are memorized and will only be shown once.
+ *
+ * @param {object} typeSpecs Map of name to a ReactPropType
+ * @param {object} values Runtime values that need to be type-checked
+ * @param {string} location e.g. "prop", "context", "child context"
+ * @param {string} componentName Name of the component for error messages.
+ * @param {?Function} getStack Returns the component stack.
+ * @private
+ */
+function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
+  if (process.env.NODE_ENV !== 'production') {
+    for (var typeSpecName in typeSpecs) {
+      if (has(typeSpecs, typeSpecName)) {
+        var error;
+        // Prop type validation may throw. In case they do, we don't want to
+        // fail the render phase where it didn't fail before. So we log it.
+        // After these have been cleaned up, we'll let them throw.
+        try {
+          // This is intentionally an invariant that gets caught. It's the same
+          // behavior as without this statement except with a better message.
+          if (typeof typeSpecs[typeSpecName] !== 'function') {
+            var err = Error(
+              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
+              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
+              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
+            );
+            err.name = 'Invariant Violation';
+            throw err;
+          }
+          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
+        } catch (ex) {
+          error = ex;
+        }
+        if (error && !(error instanceof Error)) {
+          printWarning(
+            (componentName || 'React class') + ': type specification of ' +
+            location + ' `' + typeSpecName + '` is invalid; the type checker ' +
+            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
+            'You may have forgotten to pass an argument to the type checker ' +
+            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
+            'shape all require an argument).'
+          );
+        }
+        if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+          // Only monitor this failure once because there tends to be a lot of the
+          // same error.
+          loggedTypeFailures[error.message] = true;
+
+          var stack = getStack ? getStack() : '';
+
+          printWarning(
+            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
+          );
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Resets warning cache when testing.
+ *
+ * @private
+ */
+checkPropTypes.resetWarningCache = function() {
+  if (process.env.NODE_ENV !== 'production') {
+    loggedTypeFailures = {};
+  }
+}
+
+module.exports = checkPropTypes;
diff --git a/node_modules/prop-types/factory.js b/node_modules/prop-types/factory.js
new file mode 100644
index 0000000000000000000000000000000000000000..abdf8e6dc7f88a6e5c55fdbb4e67b0f58e3f8c4b
--- /dev/null
+++ b/node_modules/prop-types/factory.js
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+// React 15.5 references this module, and assumes PropTypes are still callable in production.
+// Therefore we re-export development-only version with all the PropTypes checks here.
+// However if one is migrating to the `prop-types` npm library, they will go through the
+// `index.js` entry point, and it will branch depending on the environment.
+var factory = require('./factoryWithTypeCheckers');
+module.exports = function(isValidElement) {
+  // It is still allowed in 15.5.
+  var throwOnDirectAccess = false;
+  return factory(isValidElement, throwOnDirectAccess);
+};
diff --git a/node_modules/prop-types/factoryWithThrowingShims.js b/node_modules/prop-types/factoryWithThrowingShims.js
new file mode 100644
index 0000000000000000000000000000000000000000..ac882672e1749bb2729c845fbcb374c65b6e123f
--- /dev/null
+++ b/node_modules/prop-types/factoryWithThrowingShims.js
@@ -0,0 +1,65 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+
+function emptyFunction() {}
+function emptyFunctionWithReset() {}
+emptyFunctionWithReset.resetWarningCache = emptyFunction;
+
+module.exports = function() {
+  function shim(props, propName, componentName, location, propFullName, secret) {
+    if (secret === ReactPropTypesSecret) {
+      // It is still safe when called from React.
+      return;
+    }
+    var err = new Error(
+      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+      'Use PropTypes.checkPropTypes() to call them. ' +
+      'Read more at http://fb.me/use-check-prop-types'
+    );
+    err.name = 'Invariant Violation';
+    throw err;
+  };
+  shim.isRequired = shim;
+  function getShim() {
+    return shim;
+  };
+  // Important!
+  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
+  var ReactPropTypes = {
+    array: shim,
+    bigint: shim,
+    bool: shim,
+    func: shim,
+    number: shim,
+    object: shim,
+    string: shim,
+    symbol: shim,
+
+    any: shim,
+    arrayOf: getShim,
+    element: shim,
+    elementType: shim,
+    instanceOf: getShim,
+    node: shim,
+    objectOf: getShim,
+    oneOf: getShim,
+    oneOfType: getShim,
+    shape: getShim,
+    exact: getShim,
+
+    checkPropTypes: emptyFunctionWithReset,
+    resetWarningCache: emptyFunction
+  };
+
+  ReactPropTypes.PropTypes = ReactPropTypes;
+
+  return ReactPropTypes;
+};
diff --git a/node_modules/prop-types/factoryWithTypeCheckers.js b/node_modules/prop-types/factoryWithTypeCheckers.js
new file mode 100644
index 0000000000000000000000000000000000000000..a88068e50585fe462e8aee742211c17075f091c2
--- /dev/null
+++ b/node_modules/prop-types/factoryWithTypeCheckers.js
@@ -0,0 +1,610 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactIs = require('react-is');
+var assign = require('object-assign');
+
+var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+var has = require('./lib/has');
+var checkPropTypes = require('./checkPropTypes');
+
+var printWarning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+  printWarning = function(text) {
+    var message = 'Warning: ' + text;
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) {}
+  };
+}
+
+function emptyFunctionThatReturnsNull() {
+  return null;
+}
+
+module.exports = function(isValidElement, throwOnDirectAccess) {
+  /* global Symbol */
+  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
+  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
+
+  /**
+   * Returns the iterator method function contained on the iterable object.
+   *
+   * Be sure to invoke the function with the iterable as context:
+   *
+   *     var iteratorFn = getIteratorFn(myIterable);
+   *     if (iteratorFn) {
+   *       var iterator = iteratorFn.call(myIterable);
+   *       ...
+   *     }
+   *
+   * @param {?object} maybeIterable
+   * @return {?function}
+   */
+  function getIteratorFn(maybeIterable) {
+    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
+    if (typeof iteratorFn === 'function') {
+      return iteratorFn;
+    }
+  }
+
+  /**
+   * Collection of methods that allow declaration and validation of props that are
+   * supplied to React components. Example usage:
+   *
+   *   var Props = require('ReactPropTypes');
+   *   var MyArticle = React.createClass({
+   *     propTypes: {
+   *       // An optional string prop named "description".
+   *       description: Props.string,
+   *
+   *       // A required enum prop named "category".
+   *       category: Props.oneOf(['News','Photos']).isRequired,
+   *
+   *       // A prop named "dialog" that requires an instance of Dialog.
+   *       dialog: Props.instanceOf(Dialog).isRequired
+   *     },
+   *     render: function() { ... }
+   *   });
+   *
+   * A more formal specification of how these methods are used:
+   *
+   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
+   *   decl := ReactPropTypes.{type}(.isRequired)?
+   *
+   * Each and every declaration produces a function with the same signature. This
+   * allows the creation of custom validation functions. For example:
+   *
+   *  var MyLink = React.createClass({
+   *    propTypes: {
+   *      // An optional string or URI prop named "href".
+   *      href: function(props, propName, componentName) {
+   *        var propValue = props[propName];
+   *        if (propValue != null && typeof propValue !== 'string' &&
+   *            !(propValue instanceof URI)) {
+   *          return new Error(
+   *            'Expected a string or an URI for ' + propName + ' in ' +
+   *            componentName
+   *          );
+   *        }
+   *      }
+   *    },
+   *    render: function() {...}
+   *  });
+   *
+   * @internal
+   */
+
+  var ANONYMOUS = '<<anonymous>>';
+
+  // Important!
+  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
+  var ReactPropTypes = {
+    array: createPrimitiveTypeChecker('array'),
+    bigint: createPrimitiveTypeChecker('bigint'),
+    bool: createPrimitiveTypeChecker('boolean'),
+    func: createPrimitiveTypeChecker('function'),
+    number: createPrimitiveTypeChecker('number'),
+    object: createPrimitiveTypeChecker('object'),
+    string: createPrimitiveTypeChecker('string'),
+    symbol: createPrimitiveTypeChecker('symbol'),
+
+    any: createAnyTypeChecker(),
+    arrayOf: createArrayOfTypeChecker,
+    element: createElementTypeChecker(),
+    elementType: createElementTypeTypeChecker(),
+    instanceOf: createInstanceTypeChecker,
+    node: createNodeChecker(),
+    objectOf: createObjectOfTypeChecker,
+    oneOf: createEnumTypeChecker,
+    oneOfType: createUnionTypeChecker,
+    shape: createShapeTypeChecker,
+    exact: createStrictShapeTypeChecker,
+  };
+
+  /**
+   * inlined Object.is polyfill to avoid requiring consumers ship their own
+   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+   */
+  /*eslint-disable no-self-compare*/
+  function is(x, y) {
+    // SameValue algorithm
+    if (x === y) {
+      // Steps 1-5, 7-10
+      // Steps 6.b-6.e: +0 != -0
+      return x !== 0 || 1 / x === 1 / y;
+    } else {
+      // Step 6.a: NaN == NaN
+      return x !== x && y !== y;
+    }
+  }
+  /*eslint-enable no-self-compare*/
+
+  /**
+   * We use an Error-like object for backward compatibility as people may call
+   * PropTypes directly and inspect their output. However, we don't use real
+   * Errors anymore. We don't inspect their stack anyway, and creating them
+   * is prohibitively expensive if they are created too often, such as what
+   * happens in oneOfType() for any type before the one that matched.
+   */
+  function PropTypeError(message, data) {
+    this.message = message;
+    this.data = data && typeof data === 'object' ? data: {};
+    this.stack = '';
+  }
+  // Make `instanceof Error` still work for returned errors.
+  PropTypeError.prototype = Error.prototype;
+
+  function createChainableTypeChecker(validate) {
+    if (process.env.NODE_ENV !== 'production') {
+      var manualPropTypeCallCache = {};
+      var manualPropTypeWarningCount = 0;
+    }
+    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
+      componentName = componentName || ANONYMOUS;
+      propFullName = propFullName || propName;
+
+      if (secret !== ReactPropTypesSecret) {
+        if (throwOnDirectAccess) {
+          // New behavior only for users of `prop-types` package
+          var err = new Error(
+            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+            'Use `PropTypes.checkPropTypes()` to call them. ' +
+            'Read more at http://fb.me/use-check-prop-types'
+          );
+          err.name = 'Invariant Violation';
+          throw err;
+        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {
+          // Old behavior for people using React.PropTypes
+          var cacheKey = componentName + ':' + propName;
+          if (
+            !manualPropTypeCallCache[cacheKey] &&
+            // Avoid spamming the console because they are often not actionable except for lib authors
+            manualPropTypeWarningCount < 3
+          ) {
+            printWarning(
+              'You are manually calling a React.PropTypes validation ' +
+              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
+              'and will throw in the standalone `prop-types` package. ' +
+              'You may be seeing this warning due to a third-party PropTypes ' +
+              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
+            );
+            manualPropTypeCallCache[cacheKey] = true;
+            manualPropTypeWarningCount++;
+          }
+        }
+      }
+      if (props[propName] == null) {
+        if (isRequired) {
+          if (props[propName] === null) {
+            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
+          }
+          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
+        }
+        return null;
+      } else {
+        return validate(props, propName, componentName, location, propFullName);
+      }
+    }
+
+    var chainedCheckType = checkType.bind(null, false);
+    chainedCheckType.isRequired = checkType.bind(null, true);
+
+    return chainedCheckType;
+  }
+
+  function createPrimitiveTypeChecker(expectedType) {
+    function validate(props, propName, componentName, location, propFullName, secret) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== expectedType) {
+        // `propValue` being instance of, say, date/regexp, pass the 'object'
+        // check, but we can offer a more precise error message here rather than
+        // 'of type `object`'.
+        var preciseType = getPreciseType(propValue);
+
+        return new PropTypeError(
+          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
+          {expectedType: expectedType}
+        );
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createAnyTypeChecker() {
+    return createChainableTypeChecker(emptyFunctionThatReturnsNull);
+  }
+
+  function createArrayOfTypeChecker(typeChecker) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (typeof typeChecker !== 'function') {
+        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
+      }
+      var propValue = props[propName];
+      if (!Array.isArray(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
+      }
+      for (var i = 0; i < propValue.length; i++) {
+        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
+        if (error instanceof Error) {
+          return error;
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createElementTypeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      if (!isValidElement(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createElementTypeTypeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      if (!ReactIs.isValidElementType(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createInstanceTypeChecker(expectedClass) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (!(props[propName] instanceof expectedClass)) {
+        var expectedClassName = expectedClass.name || ANONYMOUS;
+        var actualClassName = getClassName(props[propName]);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createEnumTypeChecker(expectedValues) {
+    if (!Array.isArray(expectedValues)) {
+      if (process.env.NODE_ENV !== 'production') {
+        if (arguments.length > 1) {
+          printWarning(
+            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
+            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
+          );
+        } else {
+          printWarning('Invalid argument supplied to oneOf, expected an array.');
+        }
+      }
+      return emptyFunctionThatReturnsNull;
+    }
+
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      for (var i = 0; i < expectedValues.length; i++) {
+        if (is(propValue, expectedValues[i])) {
+          return null;
+        }
+      }
+
+      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
+        var type = getPreciseType(value);
+        if (type === 'symbol') {
+          return String(value);
+        }
+        return value;
+      });
+      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createObjectOfTypeChecker(typeChecker) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (typeof typeChecker !== 'function') {
+        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
+      }
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+      }
+      for (var key in propValue) {
+        if (has(propValue, key)) {
+          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+          if (error instanceof Error) {
+            return error;
+          }
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createUnionTypeChecker(arrayOfTypeCheckers) {
+    if (!Array.isArray(arrayOfTypeCheckers)) {
+      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
+      return emptyFunctionThatReturnsNull;
+    }
+
+    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+      var checker = arrayOfTypeCheckers[i];
+      if (typeof checker !== 'function') {
+        printWarning(
+          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
+          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
+        );
+        return emptyFunctionThatReturnsNull;
+      }
+    }
+
+    function validate(props, propName, componentName, location, propFullName) {
+      var expectedTypes = [];
+      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+        var checker = arrayOfTypeCheckers[i];
+        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
+        if (checkerResult == null) {
+          return null;
+        }
+        if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
+          expectedTypes.push(checkerResult.data.expectedType);
+        }
+      }
+      var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
+      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createNodeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (!isNode(props[propName])) {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function invalidValidatorError(componentName, location, propFullName, key, type) {
+    return new PropTypeError(
+      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
+      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
+    );
+  }
+
+  function createShapeTypeChecker(shapeTypes) {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+      }
+      for (var key in shapeTypes) {
+        var checker = shapeTypes[key];
+        if (typeof checker !== 'function') {
+          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
+        }
+        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+        if (error) {
+          return error;
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createStrictShapeTypeChecker(shapeTypes) {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+      }
+      // We need to check all keys in case some are required but missing from props.
+      var allKeys = assign({}, props[propName], shapeTypes);
+      for (var key in allKeys) {
+        var checker = shapeTypes[key];
+        if (has(shapeTypes, key) && typeof checker !== 'function') {
+          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
+        }
+        if (!checker) {
+          return new PropTypeError(
+            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
+            '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
+            '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')
+          );
+        }
+        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+        if (error) {
+          return error;
+        }
+      }
+      return null;
+    }
+
+    return createChainableTypeChecker(validate);
+  }
+
+  function isNode(propValue) {
+    switch (typeof propValue) {
+      case 'number':
+      case 'string':
+      case 'undefined':
+        return true;
+      case 'boolean':
+        return !propValue;
+      case 'object':
+        if (Array.isArray(propValue)) {
+          return propValue.every(isNode);
+        }
+        if (propValue === null || isValidElement(propValue)) {
+          return true;
+        }
+
+        var iteratorFn = getIteratorFn(propValue);
+        if (iteratorFn) {
+          var iterator = iteratorFn.call(propValue);
+          var step;
+          if (iteratorFn !== propValue.entries) {
+            while (!(step = iterator.next()).done) {
+              if (!isNode(step.value)) {
+                return false;
+              }
+            }
+          } else {
+            // Iterator will provide entry [k,v] tuples rather than values.
+            while (!(step = iterator.next()).done) {
+              var entry = step.value;
+              if (entry) {
+                if (!isNode(entry[1])) {
+                  return false;
+                }
+              }
+            }
+          }
+        } else {
+          return false;
+        }
+
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  function isSymbol(propType, propValue) {
+    // Native Symbol.
+    if (propType === 'symbol') {
+      return true;
+    }
+
+    // falsy value can't be a Symbol
+    if (!propValue) {
+      return false;
+    }
+
+    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+    if (propValue['@@toStringTag'] === 'Symbol') {
+      return true;
+    }
+
+    // Fallback for non-spec compliant Symbols which are polyfilled.
+    if (typeof Symbol === 'function' && propValue instanceof Symbol) {
+      return true;
+    }
+
+    return false;
+  }
+
+  // Equivalent of `typeof` but with special handling for array and regexp.
+  function getPropType(propValue) {
+    var propType = typeof propValue;
+    if (Array.isArray(propValue)) {
+      return 'array';
+    }
+    if (propValue instanceof RegExp) {
+      // Old webkits (at least until Android 4.0) return 'function' rather than
+      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+      // passes PropTypes.object.
+      return 'object';
+    }
+    if (isSymbol(propType, propValue)) {
+      return 'symbol';
+    }
+    return propType;
+  }
+
+  // This handles more types than `getPropType`. Only used for error messages.
+  // See `createPrimitiveTypeChecker`.
+  function getPreciseType(propValue) {
+    if (typeof propValue === 'undefined' || propValue === null) {
+      return '' + propValue;
+    }
+    var propType = getPropType(propValue);
+    if (propType === 'object') {
+      if (propValue instanceof Date) {
+        return 'date';
+      } else if (propValue instanceof RegExp) {
+        return 'regexp';
+      }
+    }
+    return propType;
+  }
+
+  // Returns a string that is postfixed to a warning about an invalid type.
+  // For example, "undefined" or "of type array"
+  function getPostfixForTypeWarning(value) {
+    var type = getPreciseType(value);
+    switch (type) {
+      case 'array':
+      case 'object':
+        return 'an ' + type;
+      case 'boolean':
+      case 'date':
+      case 'regexp':
+        return 'a ' + type;
+      default:
+        return type;
+    }
+  }
+
+  // Returns class name of the object, if any.
+  function getClassName(propValue) {
+    if (!propValue.constructor || !propValue.constructor.name) {
+      return ANONYMOUS;
+    }
+    return propValue.constructor.name;
+  }
+
+  ReactPropTypes.checkPropTypes = checkPropTypes;
+  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
+  ReactPropTypes.PropTypes = ReactPropTypes;
+
+  return ReactPropTypes;
+};
diff --git a/node_modules/prop-types/index.js b/node_modules/prop-types/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9ef51d6f39a3a26da5023d5470d73882139727a
--- /dev/null
+++ b/node_modules/prop-types/index.js
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+if (process.env.NODE_ENV !== 'production') {
+  var ReactIs = require('react-is');
+
+  // By explicitly using `prop-types` you are opting into new development behavior.
+  // http://fb.me/prop-types-in-prod
+  var throwOnDirectAccess = true;
+  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);
+} else {
+  // By explicitly using `prop-types` you are opting into new production behavior.
+  // http://fb.me/prop-types-in-prod
+  module.exports = require('./factoryWithThrowingShims')();
+}
diff --git a/node_modules/prop-types/lib/ReactPropTypesSecret.js b/node_modules/prop-types/lib/ReactPropTypesSecret.js
new file mode 100644
index 0000000000000000000000000000000000000000..f54525e7f12a47338a6fb8cb4527b30c6affbe6e
--- /dev/null
+++ b/node_modules/prop-types/lib/ReactPropTypesSecret.js
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
+
+module.exports = ReactPropTypesSecret;
diff --git a/node_modules/prop-types/lib/has.js b/node_modules/prop-types/lib/has.js
new file mode 100644
index 0000000000000000000000000000000000000000..007bae3226e8c675d160309e42013f5ab46f991b
--- /dev/null
+++ b/node_modules/prop-types/lib/has.js
@@ -0,0 +1 @@
+module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
diff --git a/node_modules/prop-types/package.json b/node_modules/prop-types/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..bbc6103481fe831689371d51ea9de63ac31d7333
--- /dev/null
+++ b/node_modules/prop-types/package.json
@@ -0,0 +1,89 @@
+{
+  "_from": "prop-types@^15.8.1",
+  "_id": "prop-types@15.8.1",
+  "_inBundle": false,
+  "_integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+  "_location": "/prop-types",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "prop-types@^15.8.1",
+    "name": "prop-types",
+    "escapedName": "prop-types",
+    "rawSpec": "^15.8.1",
+    "saveSpec": null,
+    "fetchSpec": "^15.8.1"
+  },
+  "_requiredBy": [
+    "/react-bootstrap",
+    "/react-transition-group"
+  ],
+  "_resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+  "_shasum": "67d87bf1a694f48435cf332c24af10214a3140b5",
+  "_spec": "prop-types@^15.8.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "browserify": {
+    "transform": [
+      "loose-envify"
+    ]
+  },
+  "bugs": {
+    "url": "https://github.com/facebook/prop-types/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "loose-envify": "^1.4.0",
+    "object-assign": "^4.1.1",
+    "react-is": "^16.13.1"
+  },
+  "deprecated": false,
+  "description": "Runtime type checking for React props and similar objects.",
+  "devDependencies": {
+    "babel-jest": "^19.0.0",
+    "babel-preset-react": "^6.24.1",
+    "browserify": "^16.5.0",
+    "bundle-collapser": "^1.4.0",
+    "eslint": "^8.6.0",
+    "in-publish": "^2.0.1",
+    "jest": "^19.0.2",
+    "react": "^15.7.0",
+    "uglifyify": "^5.0.2",
+    "uglifyjs": "^2.4.11"
+  },
+  "files": [
+    "LICENSE",
+    "README.md",
+    "checkPropTypes.js",
+    "factory.js",
+    "factoryWithThrowingShims.js",
+    "factoryWithTypeCheckers.js",
+    "index.js",
+    "prop-types.js",
+    "prop-types.min.js",
+    "lib"
+  ],
+  "homepage": "https://facebook.github.io/react/",
+  "keywords": [
+    "react"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "prop-types",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/facebook/prop-types.git"
+  },
+  "scripts": {
+    "build": "yarn umd && yarn umd-min",
+    "lint": "eslint .",
+    "prepublish": "not-in-publish || yarn build",
+    "pretest": "npm run lint",
+    "test": "npm run tests-only",
+    "tests-only": "jest",
+    "umd": "NODE_ENV=development browserify index.js -t loose-envify --standalone PropTypes -o prop-types.js",
+    "umd-min": "NODE_ENV=production browserify index.js -t loose-envify -t uglifyify --standalone PropTypes  -p bundle-collapser/plugin -o | uglifyjs --compress unused,dead_code -o prop-types.min.js"
+  },
+  "sideEffects": false,
+  "version": "15.8.1"
+}
diff --git a/node_modules/prop-types/prop-types.js b/node_modules/prop-types/prop-types.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5a15ddb55020d688e7fb9f5f5f0c53d8d3be5fe
--- /dev/null
+++ b/node_modules/prop-types/prop-types.js
@@ -0,0 +1,1315 @@
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.PropTypes = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var printWarning = function() {};
+
+if ("development" !== 'production') {
+  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+  var loggedTypeFailures = {};
+  var has = require('./lib/has');
+
+  printWarning = function(text) {
+    var message = 'Warning: ' + text;
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) { /**/ }
+  };
+}
+
+/**
+ * Assert that the values match with the type specs.
+ * Error messages are memorized and will only be shown once.
+ *
+ * @param {object} typeSpecs Map of name to a ReactPropType
+ * @param {object} values Runtime values that need to be type-checked
+ * @param {string} location e.g. "prop", "context", "child context"
+ * @param {string} componentName Name of the component for error messages.
+ * @param {?Function} getStack Returns the component stack.
+ * @private
+ */
+function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
+  if ("development" !== 'production') {
+    for (var typeSpecName in typeSpecs) {
+      if (has(typeSpecs, typeSpecName)) {
+        var error;
+        // Prop type validation may throw. In case they do, we don't want to
+        // fail the render phase where it didn't fail before. So we log it.
+        // After these have been cleaned up, we'll let them throw.
+        try {
+          // This is intentionally an invariant that gets caught. It's the same
+          // behavior as without this statement except with a better message.
+          if (typeof typeSpecs[typeSpecName] !== 'function') {
+            var err = Error(
+              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
+              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
+              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
+            );
+            err.name = 'Invariant Violation';
+            throw err;
+          }
+          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
+        } catch (ex) {
+          error = ex;
+        }
+        if (error && !(error instanceof Error)) {
+          printWarning(
+            (componentName || 'React class') + ': type specification of ' +
+            location + ' `' + typeSpecName + '` is invalid; the type checker ' +
+            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
+            'You may have forgotten to pass an argument to the type checker ' +
+            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
+            'shape all require an argument).'
+          );
+        }
+        if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+          // Only monitor this failure once because there tends to be a lot of the
+          // same error.
+          loggedTypeFailures[error.message] = true;
+
+          var stack = getStack ? getStack() : '';
+
+          printWarning(
+            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
+          );
+        }
+      }
+    }
+  }
+}
+
+/**
+ * Resets warning cache when testing.
+ *
+ * @private
+ */
+checkPropTypes.resetWarningCache = function() {
+  if ("development" !== 'production') {
+    loggedTypeFailures = {};
+  }
+}
+
+module.exports = checkPropTypes;
+
+},{"./lib/ReactPropTypesSecret":5,"./lib/has":6}],2:[function(require,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+
+function emptyFunction() {}
+function emptyFunctionWithReset() {}
+emptyFunctionWithReset.resetWarningCache = emptyFunction;
+
+module.exports = function() {
+  function shim(props, propName, componentName, location, propFullName, secret) {
+    if (secret === ReactPropTypesSecret) {
+      // It is still safe when called from React.
+      return;
+    }
+    var err = new Error(
+      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+      'Use PropTypes.checkPropTypes() to call them. ' +
+      'Read more at http://fb.me/use-check-prop-types'
+    );
+    err.name = 'Invariant Violation';
+    throw err;
+  };
+  shim.isRequired = shim;
+  function getShim() {
+    return shim;
+  };
+  // Important!
+  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
+  var ReactPropTypes = {
+    array: shim,
+    bigint: shim,
+    bool: shim,
+    func: shim,
+    number: shim,
+    object: shim,
+    string: shim,
+    symbol: shim,
+
+    any: shim,
+    arrayOf: getShim,
+    element: shim,
+    elementType: shim,
+    instanceOf: getShim,
+    node: shim,
+    objectOf: getShim,
+    oneOf: getShim,
+    oneOfType: getShim,
+    shape: getShim,
+    exact: getShim,
+
+    checkPropTypes: emptyFunctionWithReset,
+    resetWarningCache: emptyFunction
+  };
+
+  ReactPropTypes.PropTypes = ReactPropTypes;
+
+  return ReactPropTypes;
+};
+
+},{"./lib/ReactPropTypesSecret":5}],3:[function(require,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactIs = require('react-is');
+var assign = require('object-assign');
+
+var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');
+var has = require('./lib/has');
+var checkPropTypes = require('./checkPropTypes');
+
+var printWarning = function() {};
+
+if ("development" !== 'production') {
+  printWarning = function(text) {
+    var message = 'Warning: ' + text;
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) {}
+  };
+}
+
+function emptyFunctionThatReturnsNull() {
+  return null;
+}
+
+module.exports = function(isValidElement, throwOnDirectAccess) {
+  /* global Symbol */
+  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
+  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
+
+  /**
+   * Returns the iterator method function contained on the iterable object.
+   *
+   * Be sure to invoke the function with the iterable as context:
+   *
+   *     var iteratorFn = getIteratorFn(myIterable);
+   *     if (iteratorFn) {
+   *       var iterator = iteratorFn.call(myIterable);
+   *       ...
+   *     }
+   *
+   * @param {?object} maybeIterable
+   * @return {?function}
+   */
+  function getIteratorFn(maybeIterable) {
+    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
+    if (typeof iteratorFn === 'function') {
+      return iteratorFn;
+    }
+  }
+
+  /**
+   * Collection of methods that allow declaration and validation of props that are
+   * supplied to React components. Example usage:
+   *
+   *   var Props = require('ReactPropTypes');
+   *   var MyArticle = React.createClass({
+   *     propTypes: {
+   *       // An optional string prop named "description".
+   *       description: Props.string,
+   *
+   *       // A required enum prop named "category".
+   *       category: Props.oneOf(['News','Photos']).isRequired,
+   *
+   *       // A prop named "dialog" that requires an instance of Dialog.
+   *       dialog: Props.instanceOf(Dialog).isRequired
+   *     },
+   *     render: function() { ... }
+   *   });
+   *
+   * A more formal specification of how these methods are used:
+   *
+   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
+   *   decl := ReactPropTypes.{type}(.isRequired)?
+   *
+   * Each and every declaration produces a function with the same signature. This
+   * allows the creation of custom validation functions. For example:
+   *
+   *  var MyLink = React.createClass({
+   *    propTypes: {
+   *      // An optional string or URI prop named "href".
+   *      href: function(props, propName, componentName) {
+   *        var propValue = props[propName];
+   *        if (propValue != null && typeof propValue !== 'string' &&
+   *            !(propValue instanceof URI)) {
+   *          return new Error(
+   *            'Expected a string or an URI for ' + propName + ' in ' +
+   *            componentName
+   *          );
+   *        }
+   *      }
+   *    },
+   *    render: function() {...}
+   *  });
+   *
+   * @internal
+   */
+
+  var ANONYMOUS = '<<anonymous>>';
+
+  // Important!
+  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
+  var ReactPropTypes = {
+    array: createPrimitiveTypeChecker('array'),
+    bigint: createPrimitiveTypeChecker('bigint'),
+    bool: createPrimitiveTypeChecker('boolean'),
+    func: createPrimitiveTypeChecker('function'),
+    number: createPrimitiveTypeChecker('number'),
+    object: createPrimitiveTypeChecker('object'),
+    string: createPrimitiveTypeChecker('string'),
+    symbol: createPrimitiveTypeChecker('symbol'),
+
+    any: createAnyTypeChecker(),
+    arrayOf: createArrayOfTypeChecker,
+    element: createElementTypeChecker(),
+    elementType: createElementTypeTypeChecker(),
+    instanceOf: createInstanceTypeChecker,
+    node: createNodeChecker(),
+    objectOf: createObjectOfTypeChecker,
+    oneOf: createEnumTypeChecker,
+    oneOfType: createUnionTypeChecker,
+    shape: createShapeTypeChecker,
+    exact: createStrictShapeTypeChecker,
+  };
+
+  /**
+   * inlined Object.is polyfill to avoid requiring consumers ship their own
+   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+   */
+  /*eslint-disable no-self-compare*/
+  function is(x, y) {
+    // SameValue algorithm
+    if (x === y) {
+      // Steps 1-5, 7-10
+      // Steps 6.b-6.e: +0 != -0
+      return x !== 0 || 1 / x === 1 / y;
+    } else {
+      // Step 6.a: NaN == NaN
+      return x !== x && y !== y;
+    }
+  }
+  /*eslint-enable no-self-compare*/
+
+  /**
+   * We use an Error-like object for backward compatibility as people may call
+   * PropTypes directly and inspect their output. However, we don't use real
+   * Errors anymore. We don't inspect their stack anyway, and creating them
+   * is prohibitively expensive if they are created too often, such as what
+   * happens in oneOfType() for any type before the one that matched.
+   */
+  function PropTypeError(message, data) {
+    this.message = message;
+    this.data = data && typeof data === 'object' ? data: {};
+    this.stack = '';
+  }
+  // Make `instanceof Error` still work for returned errors.
+  PropTypeError.prototype = Error.prototype;
+
+  function createChainableTypeChecker(validate) {
+    if ("development" !== 'production') {
+      var manualPropTypeCallCache = {};
+      var manualPropTypeWarningCount = 0;
+    }
+    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
+      componentName = componentName || ANONYMOUS;
+      propFullName = propFullName || propName;
+
+      if (secret !== ReactPropTypesSecret) {
+        if (throwOnDirectAccess) {
+          // New behavior only for users of `prop-types` package
+          var err = new Error(
+            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+            'Use `PropTypes.checkPropTypes()` to call them. ' +
+            'Read more at http://fb.me/use-check-prop-types'
+          );
+          err.name = 'Invariant Violation';
+          throw err;
+        } else if ("development" !== 'production' && typeof console !== 'undefined') {
+          // Old behavior for people using React.PropTypes
+          var cacheKey = componentName + ':' + propName;
+          if (
+            !manualPropTypeCallCache[cacheKey] &&
+            // Avoid spamming the console because they are often not actionable except for lib authors
+            manualPropTypeWarningCount < 3
+          ) {
+            printWarning(
+              'You are manually calling a React.PropTypes validation ' +
+              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
+              'and will throw in the standalone `prop-types` package. ' +
+              'You may be seeing this warning due to a third-party PropTypes ' +
+              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
+            );
+            manualPropTypeCallCache[cacheKey] = true;
+            manualPropTypeWarningCount++;
+          }
+        }
+      }
+      if (props[propName] == null) {
+        if (isRequired) {
+          if (props[propName] === null) {
+            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
+          }
+          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
+        }
+        return null;
+      } else {
+        return validate(props, propName, componentName, location, propFullName);
+      }
+    }
+
+    var chainedCheckType = checkType.bind(null, false);
+    chainedCheckType.isRequired = checkType.bind(null, true);
+
+    return chainedCheckType;
+  }
+
+  function createPrimitiveTypeChecker(expectedType) {
+    function validate(props, propName, componentName, location, propFullName, secret) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== expectedType) {
+        // `propValue` being instance of, say, date/regexp, pass the 'object'
+        // check, but we can offer a more precise error message here rather than
+        // 'of type `object`'.
+        var preciseType = getPreciseType(propValue);
+
+        return new PropTypeError(
+          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
+          {expectedType: expectedType}
+        );
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createAnyTypeChecker() {
+    return createChainableTypeChecker(emptyFunctionThatReturnsNull);
+  }
+
+  function createArrayOfTypeChecker(typeChecker) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (typeof typeChecker !== 'function') {
+        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
+      }
+      var propValue = props[propName];
+      if (!Array.isArray(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
+      }
+      for (var i = 0; i < propValue.length; i++) {
+        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
+        if (error instanceof Error) {
+          return error;
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createElementTypeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      if (!isValidElement(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createElementTypeTypeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      if (!ReactIs.isValidElementType(propValue)) {
+        var propType = getPropType(propValue);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createInstanceTypeChecker(expectedClass) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (!(props[propName] instanceof expectedClass)) {
+        var expectedClassName = expectedClass.name || ANONYMOUS;
+        var actualClassName = getClassName(props[propName]);
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createEnumTypeChecker(expectedValues) {
+    if (!Array.isArray(expectedValues)) {
+      if ("development" !== 'production') {
+        if (arguments.length > 1) {
+          printWarning(
+            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
+            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
+          );
+        } else {
+          printWarning('Invalid argument supplied to oneOf, expected an array.');
+        }
+      }
+      return emptyFunctionThatReturnsNull;
+    }
+
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      for (var i = 0; i < expectedValues.length; i++) {
+        if (is(propValue, expectedValues[i])) {
+          return null;
+        }
+      }
+
+      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
+        var type = getPreciseType(value);
+        if (type === 'symbol') {
+          return String(value);
+        }
+        return value;
+      });
+      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createObjectOfTypeChecker(typeChecker) {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (typeof typeChecker !== 'function') {
+        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
+      }
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+      }
+      for (var key in propValue) {
+        if (has(propValue, key)) {
+          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+          if (error instanceof Error) {
+            return error;
+          }
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createUnionTypeChecker(arrayOfTypeCheckers) {
+    if (!Array.isArray(arrayOfTypeCheckers)) {
+      "development" !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;
+      return emptyFunctionThatReturnsNull;
+    }
+
+    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+      var checker = arrayOfTypeCheckers[i];
+      if (typeof checker !== 'function') {
+        printWarning(
+          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
+          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
+        );
+        return emptyFunctionThatReturnsNull;
+      }
+    }
+
+    function validate(props, propName, componentName, location, propFullName) {
+      var expectedTypes = [];
+      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+        var checker = arrayOfTypeCheckers[i];
+        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
+        if (checkerResult == null) {
+          return null;
+        }
+        if (checkerResult.data.hasOwnProperty('expectedType')) {
+          expectedTypes.push(checkerResult.data.expectedType);
+        }
+      }
+      var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
+      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createNodeChecker() {
+    function validate(props, propName, componentName, location, propFullName) {
+      if (!isNode(props[propName])) {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function invalidValidatorError(componentName, location, propFullName, key, type) {
+    return new PropTypeError(
+      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
+      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
+    );
+  }
+
+  function createShapeTypeChecker(shapeTypes) {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+      }
+      for (var key in shapeTypes) {
+        var checker = shapeTypes[key];
+        if (typeof checker !== 'function') {
+          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
+        }
+        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+        if (error) {
+          return error;
+        }
+      }
+      return null;
+    }
+    return createChainableTypeChecker(validate);
+  }
+
+  function createStrictShapeTypeChecker(shapeTypes) {
+    function validate(props, propName, componentName, location, propFullName) {
+      var propValue = props[propName];
+      var propType = getPropType(propValue);
+      if (propType !== 'object') {
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+      }
+      // We need to check all keys in case some are required but missing from props.
+      var allKeys = assign({}, props[propName], shapeTypes);
+      for (var key in allKeys) {
+        var checker = shapeTypes[key];
+        if (has(shapeTypes, key) && typeof checker !== 'function') {
+          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
+        }
+        if (!checker) {
+          return new PropTypeError(
+            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
+            '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
+            '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')
+          );
+        }
+        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
+        if (error) {
+          return error;
+        }
+      }
+      return null;
+    }
+
+    return createChainableTypeChecker(validate);
+  }
+
+  function isNode(propValue) {
+    switch (typeof propValue) {
+      case 'number':
+      case 'string':
+      case 'undefined':
+        return true;
+      case 'boolean':
+        return !propValue;
+      case 'object':
+        if (Array.isArray(propValue)) {
+          return propValue.every(isNode);
+        }
+        if (propValue === null || isValidElement(propValue)) {
+          return true;
+        }
+
+        var iteratorFn = getIteratorFn(propValue);
+        if (iteratorFn) {
+          var iterator = iteratorFn.call(propValue);
+          var step;
+          if (iteratorFn !== propValue.entries) {
+            while (!(step = iterator.next()).done) {
+              if (!isNode(step.value)) {
+                return false;
+              }
+            }
+          } else {
+            // Iterator will provide entry [k,v] tuples rather than values.
+            while (!(step = iterator.next()).done) {
+              var entry = step.value;
+              if (entry) {
+                if (!isNode(entry[1])) {
+                  return false;
+                }
+              }
+            }
+          }
+        } else {
+          return false;
+        }
+
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  function isSymbol(propType, propValue) {
+    // Native Symbol.
+    if (propType === 'symbol') {
+      return true;
+    }
+
+    // falsy value can't be a Symbol
+    if (!propValue) {
+      return false;
+    }
+
+    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+    if (propValue['@@toStringTag'] === 'Symbol') {
+      return true;
+    }
+
+    // Fallback for non-spec compliant Symbols which are polyfilled.
+    if (typeof Symbol === 'function' && propValue instanceof Symbol) {
+      return true;
+    }
+
+    return false;
+  }
+
+  // Equivalent of `typeof` but with special handling for array and regexp.
+  function getPropType(propValue) {
+    var propType = typeof propValue;
+    if (Array.isArray(propValue)) {
+      return 'array';
+    }
+    if (propValue instanceof RegExp) {
+      // Old webkits (at least until Android 4.0) return 'function' rather than
+      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+      // passes PropTypes.object.
+      return 'object';
+    }
+    if (isSymbol(propType, propValue)) {
+      return 'symbol';
+    }
+    return propType;
+  }
+
+  // This handles more types than `getPropType`. Only used for error messages.
+  // See `createPrimitiveTypeChecker`.
+  function getPreciseType(propValue) {
+    if (typeof propValue === 'undefined' || propValue === null) {
+      return '' + propValue;
+    }
+    var propType = getPropType(propValue);
+    if (propType === 'object') {
+      if (propValue instanceof Date) {
+        return 'date';
+      } else if (propValue instanceof RegExp) {
+        return 'regexp';
+      }
+    }
+    return propType;
+  }
+
+  // Returns a string that is postfixed to a warning about an invalid type.
+  // For example, "undefined" or "of type array"
+  function getPostfixForTypeWarning(value) {
+    var type = getPreciseType(value);
+    switch (type) {
+      case 'array':
+      case 'object':
+        return 'an ' + type;
+      case 'boolean':
+      case 'date':
+      case 'regexp':
+        return 'a ' + type;
+      default:
+        return type;
+    }
+  }
+
+  // Returns class name of the object, if any.
+  function getClassName(propValue) {
+    if (!propValue.constructor || !propValue.constructor.name) {
+      return ANONYMOUS;
+    }
+    return propValue.constructor.name;
+  }
+
+  ReactPropTypes.checkPropTypes = checkPropTypes;
+  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
+  ReactPropTypes.PropTypes = ReactPropTypes;
+
+  return ReactPropTypes;
+};
+
+},{"./checkPropTypes":1,"./lib/ReactPropTypesSecret":5,"./lib/has":6,"object-assign":7,"react-is":11}],4:[function(require,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+if ("development" !== 'production') {
+  var ReactIs = require('react-is');
+
+  // By explicitly using `prop-types` you are opting into new development behavior.
+  // http://fb.me/prop-types-in-prod
+  var throwOnDirectAccess = true;
+  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);
+} else {
+  // By explicitly using `prop-types` you are opting into new production behavior.
+  // http://fb.me/prop-types-in-prod
+  module.exports = require('./factoryWithThrowingShims')();
+}
+
+},{"./factoryWithThrowingShims":2,"./factoryWithTypeCheckers":3,"react-is":11}],5:[function(require,module,exports){
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
+
+module.exports = ReactPropTypesSecret;
+
+},{}],6:[function(require,module,exports){
+module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
+
+},{}],7:[function(require,module,exports){
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+'use strict';
+/* eslint-disable no-unused-vars */
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+function toObject(val) {
+	if (val === null || val === undefined) {
+		throw new TypeError('Object.assign cannot be called with null or undefined');
+	}
+
+	return Object(val);
+}
+
+function shouldUseNative() {
+	try {
+		if (!Object.assign) {
+			return false;
+		}
+
+		// Detect buggy property enumeration order in older V8 versions.
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
+		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
+		test1[5] = 'de';
+		if (Object.getOwnPropertyNames(test1)[0] === '5') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test2 = {};
+		for (var i = 0; i < 10; i++) {
+			test2['_' + String.fromCharCode(i)] = i;
+		}
+		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+			return test2[n];
+		});
+		if (order2.join('') !== '0123456789') {
+			return false;
+		}
+
+		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+		var test3 = {};
+		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+			test3[letter] = letter;
+		});
+		if (Object.keys(Object.assign({}, test3)).join('') !==
+				'abcdefghijklmnopqrst') {
+			return false;
+		}
+
+		return true;
+	} catch (err) {
+		// We don't expect any of the above to throw, but better to be safe.
+		return false;
+	}
+}
+
+module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+	var from;
+	var to = toObject(target);
+	var symbols;
+
+	for (var s = 1; s < arguments.length; s++) {
+		from = Object(arguments[s]);
+
+		for (var key in from) {
+			if (hasOwnProperty.call(from, key)) {
+				to[key] = from[key];
+			}
+		}
+
+		if (getOwnPropertySymbols) {
+			symbols = getOwnPropertySymbols(from);
+			for (var i = 0; i < symbols.length; i++) {
+				if (propIsEnumerable.call(from, symbols[i])) {
+					to[symbols[i]] = from[symbols[i]];
+				}
+			}
+		}
+	}
+
+	return to;
+};
+
+},{}],8:[function(require,module,exports){
+// shim for using process in browser
+var process = module.exports = {};
+
+// cached from whatever global is present so that test runners that stub it
+// don't break things.  But we need to wrap it in a try catch in case it is
+// wrapped in strict mode code which doesn't define any globals.  It's inside a
+// function because try/catches deoptimize in certain engines.
+
+var cachedSetTimeout;
+var cachedClearTimeout;
+
+function defaultSetTimout() {
+    throw new Error('setTimeout has not been defined');
+}
+function defaultClearTimeout () {
+    throw new Error('clearTimeout has not been defined');
+}
+(function () {
+    try {
+        if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+        } else {
+            cachedSetTimeout = defaultSetTimout;
+        }
+    } catch (e) {
+        cachedSetTimeout = defaultSetTimout;
+    }
+    try {
+        if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+        } else {
+            cachedClearTimeout = defaultClearTimeout;
+        }
+    } catch (e) {
+        cachedClearTimeout = defaultClearTimeout;
+    }
+} ())
+function runTimeout(fun) {
+    if (cachedSetTimeout === setTimeout) {
+        //normal enviroments in sane situations
+        return setTimeout(fun, 0);
+    }
+    // if setTimeout wasn't available but was latter defined
+    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+        cachedSetTimeout = setTimeout;
+        return setTimeout(fun, 0);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedSetTimeout(fun, 0);
+    } catch(e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+        } catch(e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0);
+        }
+    }
+
+
+}
+function runClearTimeout(marker) {
+    if (cachedClearTimeout === clearTimeout) {
+        //normal enviroments in sane situations
+        return clearTimeout(marker);
+    }
+    // if clearTimeout wasn't available but was latter defined
+    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+        cachedClearTimeout = clearTimeout;
+        return clearTimeout(marker);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedClearTimeout(marker);
+    } catch (e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+        } catch (e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+        }
+    }
+
+
+
+}
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
+    }
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = runTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    runClearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        runTimeout(drainQueue);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+process.prependListener = noop;
+process.prependOnceListener = noop;
+
+process.listeners = function (name) { return [] }
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],9:[function(require,module,exports){
+(function (process){(function (){
+/** @license React v16.13.1
+ * react-is.development.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+
+
+if (process.env.NODE_ENV !== "production") {
+  (function() {
+'use strict';
+
+// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
+// nor polyfill, then a plain number is used for performance.
+var hasSymbol = typeof Symbol === 'function' && Symbol.for;
+var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
+var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
+var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
+var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
+var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
+var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
+var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
+// (unstable) APIs that have been removed. Can we remove the symbols?
+
+var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
+var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
+var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
+var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
+var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
+var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
+var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
+var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
+var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
+var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
+var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
+
+function isValidElementType(type) {
+  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
+  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
+}
+
+function typeOf(object) {
+  if (typeof object === 'object' && object !== null) {
+    var $$typeof = object.$$typeof;
+
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        var type = object.type;
+
+        switch (type) {
+          case REACT_ASYNC_MODE_TYPE:
+          case REACT_CONCURRENT_MODE_TYPE:
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+            return type;
+
+          default:
+            var $$typeofType = type && type.$$typeof;
+
+            switch ($$typeofType) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+              case REACT_PROVIDER_TYPE:
+                return $$typeofType;
+
+              default:
+                return $$typeof;
+            }
+
+        }
+
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+
+  return undefined;
+} // AsyncMode is deprecated along with isAsyncMode
+
+var AsyncMode = REACT_ASYNC_MODE_TYPE;
+var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
+var ContextConsumer = REACT_CONTEXT_TYPE;
+var ContextProvider = REACT_PROVIDER_TYPE;
+var Element = REACT_ELEMENT_TYPE;
+var ForwardRef = REACT_FORWARD_REF_TYPE;
+var Fragment = REACT_FRAGMENT_TYPE;
+var Lazy = REACT_LAZY_TYPE;
+var Memo = REACT_MEMO_TYPE;
+var Portal = REACT_PORTAL_TYPE;
+var Profiler = REACT_PROFILER_TYPE;
+var StrictMode = REACT_STRICT_MODE_TYPE;
+var Suspense = REACT_SUSPENSE_TYPE;
+var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
+
+function isAsyncMode(object) {
+  {
+    if (!hasWarnedAboutDeprecatedIsAsyncMode) {
+      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
+
+      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
+    }
+  }
+
+  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
+}
+function isConcurrentMode(object) {
+  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
+}
+function isContextConsumer(object) {
+  return typeOf(object) === REACT_CONTEXT_TYPE;
+}
+function isContextProvider(object) {
+  return typeOf(object) === REACT_PROVIDER_TYPE;
+}
+function isElement(object) {
+  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+}
+function isForwardRef(object) {
+  return typeOf(object) === REACT_FORWARD_REF_TYPE;
+}
+function isFragment(object) {
+  return typeOf(object) === REACT_FRAGMENT_TYPE;
+}
+function isLazy(object) {
+  return typeOf(object) === REACT_LAZY_TYPE;
+}
+function isMemo(object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+}
+function isPortal(object) {
+  return typeOf(object) === REACT_PORTAL_TYPE;
+}
+function isProfiler(object) {
+  return typeOf(object) === REACT_PROFILER_TYPE;
+}
+function isStrictMode(object) {
+  return typeOf(object) === REACT_STRICT_MODE_TYPE;
+}
+function isSuspense(object) {
+  return typeOf(object) === REACT_SUSPENSE_TYPE;
+}
+
+exports.AsyncMode = AsyncMode;
+exports.ConcurrentMode = ConcurrentMode;
+exports.ContextConsumer = ContextConsumer;
+exports.ContextProvider = ContextProvider;
+exports.Element = Element;
+exports.ForwardRef = ForwardRef;
+exports.Fragment = Fragment;
+exports.Lazy = Lazy;
+exports.Memo = Memo;
+exports.Portal = Portal;
+exports.Profiler = Profiler;
+exports.StrictMode = StrictMode;
+exports.Suspense = Suspense;
+exports.isAsyncMode = isAsyncMode;
+exports.isConcurrentMode = isConcurrentMode;
+exports.isContextConsumer = isContextConsumer;
+exports.isContextProvider = isContextProvider;
+exports.isElement = isElement;
+exports.isForwardRef = isForwardRef;
+exports.isFragment = isFragment;
+exports.isLazy = isLazy;
+exports.isMemo = isMemo;
+exports.isPortal = isPortal;
+exports.isProfiler = isProfiler;
+exports.isStrictMode = isStrictMode;
+exports.isSuspense = isSuspense;
+exports.isValidElementType = isValidElementType;
+exports.typeOf = typeOf;
+  })();
+}
+
+}).call(this)}).call(this,require('_process'))
+},{"_process":8}],10:[function(require,module,exports){
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?
+Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;
+function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;
+exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};
+exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};
+exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;
+
+},{}],11:[function(require,module,exports){
+(function (process){(function (){
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-is.production.min.js');
+} else {
+  module.exports = require('./cjs/react-is.development.js');
+}
+
+}).call(this)}).call(this,require('_process'))
+},{"./cjs/react-is.development.js":9,"./cjs/react-is.production.min.js":10,"_process":8}]},{},[4])(4)
+});
diff --git a/node_modules/prop-types/prop-types.min.js b/node_modules/prop-types/prop-types.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..7a746e122d8a820bed3a2882daa457c7054f1138
--- /dev/null
+++ b/node_modules/prop-types/prop-types.min.js
@@ -0,0 +1 @@
+!function(f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define([],f):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).PropTypes=f()}(function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var p="function"==typeof require&&require;if(!f&&p)return p(i,!0);if(u)return u(i,!0);throw(p=new Error("Cannot find module '"+i+"'")).code="MODULE_NOT_FOUND",p}p=n[i]={exports:{}},e[i][0].call(p.exports,function(r){return o(e[i][1][r]||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){"use strict";var ReactPropTypesSecret=require(3);function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,module.exports=function(){function e(e,t,n,r,o,c){if(c!==ReactPropTypesSecret){c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}var n={array:e.isRequired=e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return n.PropTypes=n}},{3:3}],2:[function(require,module,exports){module.exports=require(1)()},{1:1}],3:[function(require,module,exports){"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},{}]},{},[2])(2)});
\ No newline at end of file
diff --git a/node_modules/react-is/LICENSE b/node_modules/react-is/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..b96dcb0480a0b0be0727976e5202a1e7b23edc3f
--- /dev/null
+++ b/node_modules/react-is/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Facebook, Inc. and its affiliates.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/react-is/README.md b/node_modules/react-is/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d25597761817812537077127533a7bc6dbd0d3d8
--- /dev/null
+++ b/node_modules/react-is/README.md
@@ -0,0 +1,104 @@
+# `react-is`
+
+This package allows you to test arbitrary values and see if they're a particular React element type.
+
+## Installation
+
+```sh
+# Yarn
+yarn add react-is
+
+# NPM
+npm install react-is
+```
+
+## Usage
+
+### Determining if a Component is Valid
+
+```js
+import React from "react";
+import * as ReactIs from "react-is";
+
+class ClassComponent extends React.Component {
+  render() {
+    return React.createElement("div");
+  }
+}
+
+const FunctionComponent = () => React.createElement("div");
+
+const ForwardRefComponent = React.forwardRef((props, ref) =>
+  React.createElement(Component, { forwardedRef: ref, ...props })
+);
+
+const Context = React.createContext(false);
+
+ReactIs.isValidElementType("div"); // true
+ReactIs.isValidElementType(ClassComponent); // true
+ReactIs.isValidElementType(FunctionComponent); // true
+ReactIs.isValidElementType(ForwardRefComponent); // true
+ReactIs.isValidElementType(Context.Provider); // true
+ReactIs.isValidElementType(Context.Consumer); // true
+ReactIs.isValidElementType(React.createFactory("div")); // true
+```
+
+### Determining an Element's Type
+
+#### Context
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+const ThemeContext = React.createContext("blue");
+
+ReactIs.isContextConsumer(<ThemeContext.Consumer />); // true
+ReactIs.isContextProvider(<ThemeContext.Provider />); // true
+ReactIs.typeOf(<ThemeContext.Provider />) === ReactIs.ContextProvider; // true
+ReactIs.typeOf(<ThemeContext.Consumer />) === ReactIs.ContextConsumer; // true
+```
+
+#### Element
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isElement(<div />); // true
+ReactIs.typeOf(<div />) === ReactIs.Element; // true
+```
+
+#### Fragment
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isFragment(<></>); // true
+ReactIs.typeOf(<></>) === ReactIs.Fragment; // true
+```
+
+#### Portal
+
+```js
+import React from "react";
+import ReactDOM from "react-dom";
+import * as ReactIs from 'react-is';
+
+const div = document.createElement("div");
+const portal = ReactDOM.createPortal(<div />, div);
+
+ReactIs.isPortal(portal); // true
+ReactIs.typeOf(portal) === ReactIs.Portal; // true
+```
+
+#### StrictMode
+
+```js
+import React from "react";
+import * as ReactIs from 'react-is';
+
+ReactIs.isStrictMode(<React.StrictMode />); // true
+ReactIs.typeOf(<React.StrictMode />) === ReactIs.StrictMode; // true
+```
diff --git a/node_modules/react-is/build-info.json b/node_modules/react-is/build-info.json
new file mode 100644
index 0000000000000000000000000000000000000000..4094da67d566d1c3d90b17a78d5ec8fc7dff8efe
--- /dev/null
+++ b/node_modules/react-is/build-info.json
@@ -0,0 +1,8 @@
+{
+  "branch": "pull/18344",
+  "buildNumber": "106499",
+  "checksum": "7fe5a2e",
+  "commit": "da834083c",
+  "environment": "ci",
+  "reactVersion": "16.12.0-da834083c"
+}
diff --git a/node_modules/react-is/cjs/react-is.development.js b/node_modules/react-is/cjs/react-is.development.js
new file mode 100644
index 0000000000000000000000000000000000000000..8a80b768ad6dcae1ed085e550dc82fb94727eccc
--- /dev/null
+++ b/node_modules/react-is/cjs/react-is.development.js
@@ -0,0 +1,181 @@
+/** @license React v16.13.1
+ * react-is.development.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+
+
+if (process.env.NODE_ENV !== "production") {
+  (function() {
+'use strict';
+
+// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
+// nor polyfill, then a plain number is used for performance.
+var hasSymbol = typeof Symbol === 'function' && Symbol.for;
+var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
+var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
+var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
+var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
+var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
+var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
+var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
+// (unstable) APIs that have been removed. Can we remove the symbols?
+
+var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
+var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
+var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
+var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
+var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
+var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
+var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
+var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
+var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
+var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
+var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
+
+function isValidElementType(type) {
+  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
+  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
+}
+
+function typeOf(object) {
+  if (typeof object === 'object' && object !== null) {
+    var $$typeof = object.$$typeof;
+
+    switch ($$typeof) {
+      case REACT_ELEMENT_TYPE:
+        var type = object.type;
+
+        switch (type) {
+          case REACT_ASYNC_MODE_TYPE:
+          case REACT_CONCURRENT_MODE_TYPE:
+          case REACT_FRAGMENT_TYPE:
+          case REACT_PROFILER_TYPE:
+          case REACT_STRICT_MODE_TYPE:
+          case REACT_SUSPENSE_TYPE:
+            return type;
+
+          default:
+            var $$typeofType = type && type.$$typeof;
+
+            switch ($$typeofType) {
+              case REACT_CONTEXT_TYPE:
+              case REACT_FORWARD_REF_TYPE:
+              case REACT_LAZY_TYPE:
+              case REACT_MEMO_TYPE:
+              case REACT_PROVIDER_TYPE:
+                return $$typeofType;
+
+              default:
+                return $$typeof;
+            }
+
+        }
+
+      case REACT_PORTAL_TYPE:
+        return $$typeof;
+    }
+  }
+
+  return undefined;
+} // AsyncMode is deprecated along with isAsyncMode
+
+var AsyncMode = REACT_ASYNC_MODE_TYPE;
+var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
+var ContextConsumer = REACT_CONTEXT_TYPE;
+var ContextProvider = REACT_PROVIDER_TYPE;
+var Element = REACT_ELEMENT_TYPE;
+var ForwardRef = REACT_FORWARD_REF_TYPE;
+var Fragment = REACT_FRAGMENT_TYPE;
+var Lazy = REACT_LAZY_TYPE;
+var Memo = REACT_MEMO_TYPE;
+var Portal = REACT_PORTAL_TYPE;
+var Profiler = REACT_PROFILER_TYPE;
+var StrictMode = REACT_STRICT_MODE_TYPE;
+var Suspense = REACT_SUSPENSE_TYPE;
+var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
+
+function isAsyncMode(object) {
+  {
+    if (!hasWarnedAboutDeprecatedIsAsyncMode) {
+      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
+
+      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
+    }
+  }
+
+  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
+}
+function isConcurrentMode(object) {
+  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
+}
+function isContextConsumer(object) {
+  return typeOf(object) === REACT_CONTEXT_TYPE;
+}
+function isContextProvider(object) {
+  return typeOf(object) === REACT_PROVIDER_TYPE;
+}
+function isElement(object) {
+  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+}
+function isForwardRef(object) {
+  return typeOf(object) === REACT_FORWARD_REF_TYPE;
+}
+function isFragment(object) {
+  return typeOf(object) === REACT_FRAGMENT_TYPE;
+}
+function isLazy(object) {
+  return typeOf(object) === REACT_LAZY_TYPE;
+}
+function isMemo(object) {
+  return typeOf(object) === REACT_MEMO_TYPE;
+}
+function isPortal(object) {
+  return typeOf(object) === REACT_PORTAL_TYPE;
+}
+function isProfiler(object) {
+  return typeOf(object) === REACT_PROFILER_TYPE;
+}
+function isStrictMode(object) {
+  return typeOf(object) === REACT_STRICT_MODE_TYPE;
+}
+function isSuspense(object) {
+  return typeOf(object) === REACT_SUSPENSE_TYPE;
+}
+
+exports.AsyncMode = AsyncMode;
+exports.ConcurrentMode = ConcurrentMode;
+exports.ContextConsumer = ContextConsumer;
+exports.ContextProvider = ContextProvider;
+exports.Element = Element;
+exports.ForwardRef = ForwardRef;
+exports.Fragment = Fragment;
+exports.Lazy = Lazy;
+exports.Memo = Memo;
+exports.Portal = Portal;
+exports.Profiler = Profiler;
+exports.StrictMode = StrictMode;
+exports.Suspense = Suspense;
+exports.isAsyncMode = isAsyncMode;
+exports.isConcurrentMode = isConcurrentMode;
+exports.isContextConsumer = isContextConsumer;
+exports.isContextProvider = isContextProvider;
+exports.isElement = isElement;
+exports.isForwardRef = isForwardRef;
+exports.isFragment = isFragment;
+exports.isLazy = isLazy;
+exports.isMemo = isMemo;
+exports.isPortal = isPortal;
+exports.isProfiler = isProfiler;
+exports.isStrictMode = isStrictMode;
+exports.isSuspense = isSuspense;
+exports.isValidElementType = isValidElementType;
+exports.typeOf = typeOf;
+  })();
+}
diff --git a/node_modules/react-is/cjs/react-is.production.min.js b/node_modules/react-is/cjs/react-is.production.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e83c7ab4916a7914b866a437d96d0352d8bfb88
--- /dev/null
+++ b/node_modules/react-is/cjs/react-is.production.min.js
@@ -0,0 +1,15 @@
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?
+Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;
+function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;
+exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};
+exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};
+exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;
diff --git a/node_modules/react-is/index.js b/node_modules/react-is/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ae098d078776a29e40a87a5f98edd1f697594ea
--- /dev/null
+++ b/node_modules/react-is/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+if (process.env.NODE_ENV === 'production') {
+  module.exports = require('./cjs/react-is.production.min.js');
+} else {
+  module.exports = require('./cjs/react-is.development.js');
+}
diff --git a/node_modules/react-is/package.json b/node_modules/react-is/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..843bd4d0c3a6e93fe3ad7f1e2a197880eb9c8cd8
--- /dev/null
+++ b/node_modules/react-is/package.json
@@ -0,0 +1,53 @@
+{
+  "_from": "react-is@^16.13.1",
+  "_id": "react-is@16.13.1",
+  "_inBundle": false,
+  "_integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+  "_location": "/react-is",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "react-is@^16.13.1",
+    "name": "react-is",
+    "escapedName": "react-is",
+    "rawSpec": "^16.13.1",
+    "saveSpec": null,
+    "fetchSpec": "^16.13.1"
+  },
+  "_requiredBy": [
+    "/prop-types",
+    "/prop-types-extra"
+  ],
+  "_resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+  "_shasum": "789729a4dc36de2999dc156dd6c1d9c18cea56a4",
+  "_spec": "react-is@^16.13.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/prop-types",
+  "bugs": {
+    "url": "https://github.com/facebook/react/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Brand checking of React Elements.",
+  "files": [
+    "LICENSE",
+    "README.md",
+    "build-info.json",
+    "index.js",
+    "cjs/",
+    "umd/"
+  ],
+  "homepage": "https://reactjs.org/",
+  "keywords": [
+    "react"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "react-is",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/facebook/react.git",
+    "directory": "packages/react-is"
+  },
+  "version": "16.13.1"
+}
diff --git a/node_modules/react-is/umd/react-is.development.js b/node_modules/react-is/umd/react-is.development.js
new file mode 100644
index 0000000000000000000000000000000000000000..a6bc018a740ea4dfd6127b4dc57873ee54b2a355
--- /dev/null
+++ b/node_modules/react-is/umd/react-is.development.js
@@ -0,0 +1,181 @@
+/** @license React v16.13.1
+ * react-is.development.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (global = global || self, factory(global.ReactIs = {}));
+}(this, (function (exports) { 'use strict';
+
+  // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
+  // nor polyfill, then a plain number is used for performance.
+  var hasSymbol = typeof Symbol === 'function' && Symbol.for;
+  var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
+  var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
+  var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
+  var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
+  var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
+  var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
+  var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
+  // (unstable) APIs that have been removed. Can we remove the symbols?
+
+  var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
+  var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
+  var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
+  var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
+  var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
+  var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
+  var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
+  var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
+  var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
+  var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
+  var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
+
+  function isValidElementType(type) {
+    return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
+    type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
+  }
+
+  function typeOf(object) {
+    if (typeof object === 'object' && object !== null) {
+      var $$typeof = object.$$typeof;
+
+      switch ($$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = object.type;
+
+          switch (type) {
+            case REACT_ASYNC_MODE_TYPE:
+            case REACT_CONCURRENT_MODE_TYPE:
+            case REACT_FRAGMENT_TYPE:
+            case REACT_PROFILER_TYPE:
+            case REACT_STRICT_MODE_TYPE:
+            case REACT_SUSPENSE_TYPE:
+              return type;
+
+            default:
+              var $$typeofType = type && type.$$typeof;
+
+              switch ($$typeofType) {
+                case REACT_CONTEXT_TYPE:
+                case REACT_FORWARD_REF_TYPE:
+                case REACT_LAZY_TYPE:
+                case REACT_MEMO_TYPE:
+                case REACT_PROVIDER_TYPE:
+                  return $$typeofType;
+
+                default:
+                  return $$typeof;
+              }
+
+          }
+
+        case REACT_PORTAL_TYPE:
+          return $$typeof;
+      }
+    }
+
+    return undefined;
+  } // AsyncMode is deprecated along with isAsyncMode
+
+  var AsyncMode = REACT_ASYNC_MODE_TYPE;
+  var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
+  var ContextConsumer = REACT_CONTEXT_TYPE;
+  var ContextProvider = REACT_PROVIDER_TYPE;
+  var Element = REACT_ELEMENT_TYPE;
+  var ForwardRef = REACT_FORWARD_REF_TYPE;
+  var Fragment = REACT_FRAGMENT_TYPE;
+  var Lazy = REACT_LAZY_TYPE;
+  var Memo = REACT_MEMO_TYPE;
+  var Portal = REACT_PORTAL_TYPE;
+  var Profiler = REACT_PROFILER_TYPE;
+  var StrictMode = REACT_STRICT_MODE_TYPE;
+  var Suspense = REACT_SUSPENSE_TYPE;
+  var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
+
+  function isAsyncMode(object) {
+    {
+      if (!hasWarnedAboutDeprecatedIsAsyncMode) {
+        hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
+
+        console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
+      }
+    }
+
+    return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
+  }
+  function isConcurrentMode(object) {
+    return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
+  }
+  function isContextConsumer(object) {
+    return typeOf(object) === REACT_CONTEXT_TYPE;
+  }
+  function isContextProvider(object) {
+    return typeOf(object) === REACT_PROVIDER_TYPE;
+  }
+  function isElement(object) {
+    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+  }
+  function isForwardRef(object) {
+    return typeOf(object) === REACT_FORWARD_REF_TYPE;
+  }
+  function isFragment(object) {
+    return typeOf(object) === REACT_FRAGMENT_TYPE;
+  }
+  function isLazy(object) {
+    return typeOf(object) === REACT_LAZY_TYPE;
+  }
+  function isMemo(object) {
+    return typeOf(object) === REACT_MEMO_TYPE;
+  }
+  function isPortal(object) {
+    return typeOf(object) === REACT_PORTAL_TYPE;
+  }
+  function isProfiler(object) {
+    return typeOf(object) === REACT_PROFILER_TYPE;
+  }
+  function isStrictMode(object) {
+    return typeOf(object) === REACT_STRICT_MODE_TYPE;
+  }
+  function isSuspense(object) {
+    return typeOf(object) === REACT_SUSPENSE_TYPE;
+  }
+
+  exports.AsyncMode = AsyncMode;
+  exports.ConcurrentMode = ConcurrentMode;
+  exports.ContextConsumer = ContextConsumer;
+  exports.ContextProvider = ContextProvider;
+  exports.Element = Element;
+  exports.ForwardRef = ForwardRef;
+  exports.Fragment = Fragment;
+  exports.Lazy = Lazy;
+  exports.Memo = Memo;
+  exports.Portal = Portal;
+  exports.Profiler = Profiler;
+  exports.StrictMode = StrictMode;
+  exports.Suspense = Suspense;
+  exports.isAsyncMode = isAsyncMode;
+  exports.isConcurrentMode = isConcurrentMode;
+  exports.isContextConsumer = isContextConsumer;
+  exports.isContextProvider = isContextProvider;
+  exports.isElement = isElement;
+  exports.isForwardRef = isForwardRef;
+  exports.isFragment = isFragment;
+  exports.isLazy = isLazy;
+  exports.isMemo = isMemo;
+  exports.isPortal = isPortal;
+  exports.isProfiler = isProfiler;
+  exports.isStrictMode = isStrictMode;
+  exports.isSuspense = isSuspense;
+  exports.isValidElementType = isValidElementType;
+  exports.typeOf = typeOf;
+
+})));
diff --git a/node_modules/react-is/umd/react-is.production.min.js b/node_modules/react-is/umd/react-is.production.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..62fe6b226e12631d571d071bd0b7a8b6c3170549
--- /dev/null
+++ b/node_modules/react-is/umd/react-is.production.min.js
@@ -0,0 +1,13 @@
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+'use strict';(function(b,d){"object"===typeof exports&&"undefined"!==typeof module?d(exports):"function"===typeof define&&define.amd?define(["exports"],d):(b=b||self,d(b.ReactIs={}))})(this,function(b){function d(a){if("object"===typeof a&&null!==a){var b=a.$$typeof;switch(b){case r:switch(a=a.type,a){case t:case e:case f:case g:case h:case k:return a;default:switch(a=a&&a.$$typeof,a){case l:case m:case n:case p:case q:return a;default:return b}}case u:return b}}}function v(a){return d(a)===e}var c=
+"function"===typeof Symbol&&Symbol.for,r=c?Symbol.for("react.element"):60103,u=c?Symbol.for("react.portal"):60106,f=c?Symbol.for("react.fragment"):60107,h=c?Symbol.for("react.strict_mode"):60108,g=c?Symbol.for("react.profiler"):60114,q=c?Symbol.for("react.provider"):60109,l=c?Symbol.for("react.context"):60110,t=c?Symbol.for("react.async_mode"):60111,e=c?Symbol.for("react.concurrent_mode"):60111,m=c?Symbol.for("react.forward_ref"):60112,k=c?Symbol.for("react.suspense"):60113,w=c?Symbol.for("react.suspense_list"):
+60120,p=c?Symbol.for("react.memo"):60115,n=c?Symbol.for("react.lazy"):60116,x=c?Symbol.for("react.block"):60121,y=c?Symbol.for("react.fundamental"):60117,z=c?Symbol.for("react.responder"):60118,A=c?Symbol.for("react.scope"):60119;b.AsyncMode=t;b.ConcurrentMode=e;b.ContextConsumer=l;b.ContextProvider=q;b.Element=r;b.ForwardRef=m;b.Fragment=f;b.Lazy=n;b.Memo=p;b.Portal=u;b.Profiler=g;b.StrictMode=h;b.Suspense=k;b.isAsyncMode=function(a){return v(a)||d(a)===t};b.isConcurrentMode=v;b.isContextConsumer=
+function(a){return d(a)===l};b.isContextProvider=function(a){return d(a)===q};b.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===r};b.isForwardRef=function(a){return d(a)===m};b.isFragment=function(a){return d(a)===f};b.isLazy=function(a){return d(a)===n};b.isMemo=function(a){return d(a)===p};b.isPortal=function(a){return d(a)===u};b.isProfiler=function(a){return d(a)===g};b.isStrictMode=function(a){return d(a)===h};b.isSuspense=function(a){return d(a)===k};b.isValidElementType=
+function(a){return"string"===typeof a||"function"===typeof a||a===f||a===e||a===g||a===h||a===k||a===w||"object"===typeof a&&null!==a&&(a.$$typeof===n||a.$$typeof===p||a.$$typeof===q||a.$$typeof===l||a.$$typeof===m||a.$$typeof===y||a.$$typeof===z||a.$$typeof===A||a.$$typeof===x)};b.typeOf=d});
diff --git a/node_modules/react-lifecycles-compat/CHANGELOG.md b/node_modules/react-lifecycles-compat/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..bd49c9f5416c0f8595656b86586a74cb46d3345f
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/CHANGELOG.md
@@ -0,0 +1,48 @@
+## [Unreleased]
+
+<details>
+  <summary>
+    Changes that have landed in master but are not yet released.
+    Click to see more.
+  </summary>
+</details>
+
+## 3.0.4 (May 11, 2018)
+
+Fixed shallow renderer regression (introduced in 3.0.3) that caused `setState` updater to fail due to incorrect `this`. ([#26](https://github.com/reactjs/react-lifecycles-compat/pull/26))
+
+## 3.0.3 (May 9, 2018)
+
+Fixed an edge case bug where a batched update containing both a `setState` updater and a parent re-render could result in dropped `state` updates. ([#24](https://github.com/reactjs/react-lifecycles-compat/pull/24))
+
+## 3.0.2 (April 11, 2018)
+
+Replaced an unintentional template literal to ensure broader browser compatibility. ([ce42fe4](https://github.com/reactjs/react-lifecycles-compat/commit/ce42fe426e6348fd221bb4fd1905e392ceb823a9))
+
+## 3.0.1 (April 10, 2018)
+
+Replaced a few unintentional `let` keywords with `var` to ensure broader browser compatibility. ([#17](https://github.com/reactjs/react-lifecycles-compat/pull/17))
+
+## 3.0.0 (April 9, 2018)
+
+Throw an error for any polyfilled component that mixes old lifecycles (`componentWillMount`, `componentWillReceiveProps`, or `componentWillUpdate`) and new lifecycles (`getDerivedStateFromProps` or `getSnapshotBeforeUpdate`) as React 16.3+ does not support this case and will not invoke the old lifecycles. This error ensures consistent behavior between React 16.3+ and older versions. ([#14](https://github.com/reactjs/react-lifecycles-compat/pull/14))
+
+## 2.0.1 (April 9, 2018)
+
+Add a DEV mode warning for any polyfilled component that mixes old lifecycles (`componentWillMount`, `componentWillReceiveProps`, or `componentWillUpdate`) and new lifecycles (`getDerivedStateFromProps` or `getSnapshotBeforeUpdate`) as React 16.3+ does not support this case and will not invoke the old lifecycles. This warning ensures consistent behavior between React 16.3+ and older versions. ([#15](https://github.com/reactjs/react-lifecycles-compat/pull/15))
+
+## 2.0.0 (April 4, 2018)
+
+Package uses a named export and includes an ES6 module build. ([#11](https://github.com/reactjs/react-lifecycles-compat/pull/11))
+
+```js
+// 1.x (before)
+import polyfill from 'react-lifecycles-compat';
+
+// 2.x (after)
+import {polyfill} from 'react-lifecycles-compat';
+```
+
+## 1.1.4 (April 3, 2018)
+
+Improved handling of falsy return values from polyfilled `getSnapshotBeforeUpdate()` lifecycle. [#12](https://github.com/reactjs/react-lifecycles-compat/pull/12)
diff --git a/node_modules/react-lifecycles-compat/LICENSE.md b/node_modules/react-lifecycles-compat/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..5930f2b8d8167e7c1d1d1e0cdb0b60f1b9e03cc5
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/react-lifecycles-compat/README.md b/node_modules/react-lifecycles-compat/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..904289de970b8c687c69b3f965fe1c1b8f0e0dbc
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/README.md
@@ -0,0 +1,57 @@
+# react-lifecycles-compat
+
+## What is this project?
+
+React version 17 will deprecate several of the class component API lifecycles: `componentWillMount`, `componentWillReceiveProps`, and `componentWillUpdate`. (Read the [Update on Async rendering blog post](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html) to learn more about why.) A couple of new lifecycles are also being added to better support [async rendering mode](https://reactjs.org/blog/2018/03/01/sneak-peek-beyond-react-16.html).
+
+Typically, this type of change would require third party libraries to release a new major version in order to adhere to semver. However, the `react-lifecycles-compat` polyfill offers a way to use the new lifecycles with older versions of React as well (0.14.9+) so no breaking release is required. This enables shared libraries to support both older and newer versions of React simultaneously.
+
+## How can I use the polyfill
+
+First, install the polyfill from NPM:
+```sh
+# Yarn
+yarn add react-lifecycles-compat
+
+# NPM
+npm install react-lifecycles-compat --save
+```
+
+Next, update your component and replace any of the deprecated lifecycles with new ones introduced with React 16.3. (Refer to the React docs for [examples of how to use the new lifecycles](https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html).)
+
+Lastly, use the polyfill to make the new lifecycles work with older versions of React:
+```js
+import React from 'react';
+import {polyfill} from 'react-lifecycles-compat';
+
+class ExampleComponent extends React.Component {
+  static getDerivedStateFromProps(nextProps, prevState) {
+    // Normally this method would only work for React 16.3 and newer,
+    // But the polyfill will make it work for older versions also!
+  }
+
+  getSnapshotBeforeUpdate(prevProps, prevState) {
+    // Normally this method would only work for React 16.3 and newer,
+    // But the polyfill will make it work for older versions also!
+  }
+
+  // render() and other methods ...
+}
+
+// Polyfill your component so the new lifecycles will work with older versions of React:
+polyfill(ExampleComponent);
+
+export default ExampleComponent;
+```
+
+## Which lifecycles are supported?
+
+Currently, this polyfill supports [static `getDerivedStateFromProps`](https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops) and [`getSnapshotBeforeUpdate`](https://reactjs.org/docs/react-component.html#getsnapshotbeforeupdate)- both introduced in version 16.3.
+
+## Validation
+
+Note that in order for the polyfill to work, none of the following lifecycles can be defined by your component: `componentWillMount`, `componentWillReceiveProps`, or `componentWillUpdate`.
+
+Note also that if your component contains `getSnapshotBeforeUpdate`, `componentDidUpdate` must be defined as well.
+
+An error will be thrown if any of the above conditions are not met.
\ No newline at end of file
diff --git a/node_modules/react-lifecycles-compat/package.json b/node_modules/react-lifecycles-compat/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..564ce51f4db66b6517fd0a09637fcde14c4485f0
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/package.json
@@ -0,0 +1,71 @@
+{
+  "_from": "react-lifecycles-compat@^3.0.4",
+  "_id": "react-lifecycles-compat@3.0.4",
+  "_inBundle": false,
+  "_integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
+  "_location": "/react-lifecycles-compat",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "react-lifecycles-compat@^3.0.4",
+    "name": "react-lifecycles-compat",
+    "escapedName": "react-lifecycles-compat",
+    "rawSpec": "^3.0.4",
+    "saveSpec": null,
+    "fetchSpec": "^3.0.4"
+  },
+  "_requiredBy": [
+    "/uncontrollable"
+  ],
+  "_resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+  "_shasum": "4f1a273afdfc8f3488a8c516bfda78f872352362",
+  "_spec": "react-lifecycles-compat@^3.0.4",
+  "_where": "/home/ethan2.clay/flask/node_modules/uncontrollable",
+  "bugs": {
+    "url": "https://github.com/reactjs/react-lifecycles-compat/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Backwards compatibility polyfill for React class components",
+  "devDependencies": {
+    "camelcase": "^5.0.0",
+    "chalk": "^2.3.0",
+    "eslint": "^4.16.0",
+    "eslint-config-es5": "^0.5.0",
+    "jest": "^22.1.4",
+    "jest-cli": "^22.1.4",
+    "prettier": "^1.10.2",
+    "rollup": "^0.57.1",
+    "rollup-plugin-replace": "^2.0.0",
+    "rollup-plugin-uglify": "^3.0.0"
+  },
+  "devEngines": {
+    "node": "8.5 || 9.x"
+  },
+  "files": [
+    "react-lifecycles-compat.cjs.js",
+    "react-lifecycles-compat.es.js",
+    "react-lifecycles-compat.js",
+    "react-lifecycles-compat.min.js"
+  ],
+  "homepage": "https://github.com/reactjs/react-lifecycles-compat#readme",
+  "license": "MIT",
+  "main": "react-lifecycles-compat.cjs.js",
+  "module": "react-lifecycles-compat.es.js",
+  "name": "react-lifecycles-compat",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/reactjs/react-lifecycles-compat.git"
+  },
+  "scripts": {
+    "build": "rollup -c",
+    "install:dependencies": "node install.js",
+    "lint": "eslint index.js",
+    "prepublish": "npm test",
+    "pretest": "npm run install:dependencies && npm run build",
+    "prettier": "prettier --write {index,test}.js",
+    "test": "jest test.js"
+  },
+  "version": "3.0.4"
+}
diff --git a/node_modules/react-lifecycles-compat/react-lifecycles-compat.cjs.js b/node_modules/react-lifecycles-compat/react-lifecycles-compat.cjs.js
new file mode 100644
index 0000000000000000000000000000000000000000..6b84263e741d5c2b9ddb5a6ab528743ceeacdc5a
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/react-lifecycles-compat.cjs.js
@@ -0,0 +1,162 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function componentWillMount() {
+  // Call this.constructor.gDSFP to support sub-classes.
+  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);
+  if (state !== null && state !== undefined) {
+    this.setState(state);
+  }
+}
+
+function componentWillReceiveProps(nextProps) {
+  // Call this.constructor.gDSFP to support sub-classes.
+  // Use the setState() updater to ensure state isn't stale in certain edge cases.
+  function updater(prevState) {
+    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);
+    return state !== null && state !== undefined ? state : null;
+  }
+  // Binding "this" is important for shallow renderer support.
+  this.setState(updater.bind(this));
+}
+
+function componentWillUpdate(nextProps, nextState) {
+  try {
+    var prevProps = this.props;
+    var prevState = this.state;
+    this.props = nextProps;
+    this.state = nextState;
+    this.__reactInternalSnapshotFlag = true;
+    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(
+      prevProps,
+      prevState
+    );
+  } finally {
+    this.props = prevProps;
+    this.state = prevState;
+  }
+}
+
+// React may warn about cWM/cWRP/cWU methods being deprecated.
+// Add a flag to suppress these warnings for this special case.
+componentWillMount.__suppressDeprecationWarning = true;
+componentWillReceiveProps.__suppressDeprecationWarning = true;
+componentWillUpdate.__suppressDeprecationWarning = true;
+
+function polyfill(Component) {
+  var prototype = Component.prototype;
+
+  if (!prototype || !prototype.isReactComponent) {
+    throw new Error('Can only polyfill class components');
+  }
+
+  if (
+    typeof Component.getDerivedStateFromProps !== 'function' &&
+    typeof prototype.getSnapshotBeforeUpdate !== 'function'
+  ) {
+    return Component;
+  }
+
+  // If new component APIs are defined, "unsafe" lifecycles won't be called.
+  // Error if any of these lifecycles are present,
+  // Because they would work differently between older and newer (16.3+) versions of React.
+  var foundWillMountName = null;
+  var foundWillReceivePropsName = null;
+  var foundWillUpdateName = null;
+  if (typeof prototype.componentWillMount === 'function') {
+    foundWillMountName = 'componentWillMount';
+  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {
+    foundWillMountName = 'UNSAFE_componentWillMount';
+  }
+  if (typeof prototype.componentWillReceiveProps === 'function') {
+    foundWillReceivePropsName = 'componentWillReceiveProps';
+  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {
+    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
+  }
+  if (typeof prototype.componentWillUpdate === 'function') {
+    foundWillUpdateName = 'componentWillUpdate';
+  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {
+    foundWillUpdateName = 'UNSAFE_componentWillUpdate';
+  }
+  if (
+    foundWillMountName !== null ||
+    foundWillReceivePropsName !== null ||
+    foundWillUpdateName !== null
+  ) {
+    var componentName = Component.displayName || Component.name;
+    var newApiName =
+      typeof Component.getDerivedStateFromProps === 'function'
+        ? 'getDerivedStateFromProps()'
+        : 'getSnapshotBeforeUpdate()';
+
+    throw Error(
+      'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' +
+        componentName +
+        ' uses ' +
+        newApiName +
+        ' but also contains the following legacy lifecycles:' +
+        (foundWillMountName !== null ? '\n  ' + foundWillMountName : '') +
+        (foundWillReceivePropsName !== null
+          ? '\n  ' + foundWillReceivePropsName
+          : '') +
+        (foundWillUpdateName !== null ? '\n  ' + foundWillUpdateName : '') +
+        '\n\nThe above lifecycles should be removed. Learn more about this warning here:\n' +
+        'https://fb.me/react-async-component-lifecycle-hooks'
+    );
+  }
+
+  // React <= 16.2 does not support static getDerivedStateFromProps.
+  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.
+  // Newer versions of React will ignore these lifecycles if gDSFP exists.
+  if (typeof Component.getDerivedStateFromProps === 'function') {
+    prototype.componentWillMount = componentWillMount;
+    prototype.componentWillReceiveProps = componentWillReceiveProps;
+  }
+
+  // React <= 16.2 does not support getSnapshotBeforeUpdate.
+  // As a workaround, use cWU to invoke the new lifecycle.
+  // Newer versions of React will ignore that lifecycle if gSBU exists.
+  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {
+    if (typeof prototype.componentDidUpdate !== 'function') {
+      throw new Error(
+        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'
+      );
+    }
+
+    prototype.componentWillUpdate = componentWillUpdate;
+
+    var componentDidUpdate = prototype.componentDidUpdate;
+
+    prototype.componentDidUpdate = function componentDidUpdatePolyfill(
+      prevProps,
+      prevState,
+      maybeSnapshot
+    ) {
+      // 16.3+ will not execute our will-update method;
+      // It will pass a snapshot value to did-update though.
+      // Older versions will require our polyfilled will-update value.
+      // We need to handle both cases, but can't just check for the presence of "maybeSnapshot",
+      // Because for <= 15.x versions this might be a "prevContext" object.
+      // We also can't just check "__reactInternalSnapshot",
+      // Because get-snapshot might return a falsy value.
+      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.
+      var snapshot = this.__reactInternalSnapshotFlag
+        ? this.__reactInternalSnapshot
+        : maybeSnapshot;
+
+      componentDidUpdate.call(this, prevProps, prevState, snapshot);
+    };
+  }
+
+  return Component;
+}
+
+exports.polyfill = polyfill;
diff --git a/node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js b/node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e12c774c49be6f0d71800d3075d4f6783c9c684
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js
@@ -0,0 +1,158 @@
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+function componentWillMount() {
+  // Call this.constructor.gDSFP to support sub-classes.
+  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);
+  if (state !== null && state !== undefined) {
+    this.setState(state);
+  }
+}
+
+function componentWillReceiveProps(nextProps) {
+  // Call this.constructor.gDSFP to support sub-classes.
+  // Use the setState() updater to ensure state isn't stale in certain edge cases.
+  function updater(prevState) {
+    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);
+    return state !== null && state !== undefined ? state : null;
+  }
+  // Binding "this" is important for shallow renderer support.
+  this.setState(updater.bind(this));
+}
+
+function componentWillUpdate(nextProps, nextState) {
+  try {
+    var prevProps = this.props;
+    var prevState = this.state;
+    this.props = nextProps;
+    this.state = nextState;
+    this.__reactInternalSnapshotFlag = true;
+    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(
+      prevProps,
+      prevState
+    );
+  } finally {
+    this.props = prevProps;
+    this.state = prevState;
+  }
+}
+
+// React may warn about cWM/cWRP/cWU methods being deprecated.
+// Add a flag to suppress these warnings for this special case.
+componentWillMount.__suppressDeprecationWarning = true;
+componentWillReceiveProps.__suppressDeprecationWarning = true;
+componentWillUpdate.__suppressDeprecationWarning = true;
+
+function polyfill(Component) {
+  var prototype = Component.prototype;
+
+  if (!prototype || !prototype.isReactComponent) {
+    throw new Error('Can only polyfill class components');
+  }
+
+  if (
+    typeof Component.getDerivedStateFromProps !== 'function' &&
+    typeof prototype.getSnapshotBeforeUpdate !== 'function'
+  ) {
+    return Component;
+  }
+
+  // If new component APIs are defined, "unsafe" lifecycles won't be called.
+  // Error if any of these lifecycles are present,
+  // Because they would work differently between older and newer (16.3+) versions of React.
+  var foundWillMountName = null;
+  var foundWillReceivePropsName = null;
+  var foundWillUpdateName = null;
+  if (typeof prototype.componentWillMount === 'function') {
+    foundWillMountName = 'componentWillMount';
+  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {
+    foundWillMountName = 'UNSAFE_componentWillMount';
+  }
+  if (typeof prototype.componentWillReceiveProps === 'function') {
+    foundWillReceivePropsName = 'componentWillReceiveProps';
+  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {
+    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
+  }
+  if (typeof prototype.componentWillUpdate === 'function') {
+    foundWillUpdateName = 'componentWillUpdate';
+  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {
+    foundWillUpdateName = 'UNSAFE_componentWillUpdate';
+  }
+  if (
+    foundWillMountName !== null ||
+    foundWillReceivePropsName !== null ||
+    foundWillUpdateName !== null
+  ) {
+    var componentName = Component.displayName || Component.name;
+    var newApiName =
+      typeof Component.getDerivedStateFromProps === 'function'
+        ? 'getDerivedStateFromProps()'
+        : 'getSnapshotBeforeUpdate()';
+
+    throw Error(
+      'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' +
+        componentName +
+        ' uses ' +
+        newApiName +
+        ' but also contains the following legacy lifecycles:' +
+        (foundWillMountName !== null ? '\n  ' + foundWillMountName : '') +
+        (foundWillReceivePropsName !== null
+          ? '\n  ' + foundWillReceivePropsName
+          : '') +
+        (foundWillUpdateName !== null ? '\n  ' + foundWillUpdateName : '') +
+        '\n\nThe above lifecycles should be removed. Learn more about this warning here:\n' +
+        'https://fb.me/react-async-component-lifecycle-hooks'
+    );
+  }
+
+  // React <= 16.2 does not support static getDerivedStateFromProps.
+  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.
+  // Newer versions of React will ignore these lifecycles if gDSFP exists.
+  if (typeof Component.getDerivedStateFromProps === 'function') {
+    prototype.componentWillMount = componentWillMount;
+    prototype.componentWillReceiveProps = componentWillReceiveProps;
+  }
+
+  // React <= 16.2 does not support getSnapshotBeforeUpdate.
+  // As a workaround, use cWU to invoke the new lifecycle.
+  // Newer versions of React will ignore that lifecycle if gSBU exists.
+  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {
+    if (typeof prototype.componentDidUpdate !== 'function') {
+      throw new Error(
+        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'
+      );
+    }
+
+    prototype.componentWillUpdate = componentWillUpdate;
+
+    var componentDidUpdate = prototype.componentDidUpdate;
+
+    prototype.componentDidUpdate = function componentDidUpdatePolyfill(
+      prevProps,
+      prevState,
+      maybeSnapshot
+    ) {
+      // 16.3+ will not execute our will-update method;
+      // It will pass a snapshot value to did-update though.
+      // Older versions will require our polyfilled will-update value.
+      // We need to handle both cases, but can't just check for the presence of "maybeSnapshot",
+      // Because for <= 15.x versions this might be a "prevContext" object.
+      // We also can't just check "__reactInternalSnapshot",
+      // Because get-snapshot might return a falsy value.
+      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.
+      var snapshot = this.__reactInternalSnapshotFlag
+        ? this.__reactInternalSnapshot
+        : maybeSnapshot;
+
+      componentDidUpdate.call(this, prevProps, prevState, snapshot);
+    };
+  }
+
+  return Component;
+}
+
+export { polyfill };
diff --git a/node_modules/react-lifecycles-compat/react-lifecycles-compat.js b/node_modules/react-lifecycles-compat/react-lifecycles-compat.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe77093ec8130e3c456b041d5222522bfc304112
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/react-lifecycles-compat.js
@@ -0,0 +1,168 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (factory((global.reactLifecyclesCompat = {})));
+}(this, (function (exports) { 'use strict';
+
+  /**
+   * Copyright (c) 2013-present, Facebook, Inc.
+   *
+   * This source code is licensed under the MIT license found in the
+   * LICENSE file in the root directory of this source tree.
+   */
+
+  function componentWillMount() {
+    // Call this.constructor.gDSFP to support sub-classes.
+    var state = this.constructor.getDerivedStateFromProps(this.props, this.state);
+    if (state !== null && state !== undefined) {
+      this.setState(state);
+    }
+  }
+
+  function componentWillReceiveProps(nextProps) {
+    // Call this.constructor.gDSFP to support sub-classes.
+    // Use the setState() updater to ensure state isn't stale in certain edge cases.
+    function updater(prevState) {
+      var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);
+      return state !== null && state !== undefined ? state : null;
+    }
+    // Binding "this" is important for shallow renderer support.
+    this.setState(updater.bind(this));
+  }
+
+  function componentWillUpdate(nextProps, nextState) {
+    try {
+      var prevProps = this.props;
+      var prevState = this.state;
+      this.props = nextProps;
+      this.state = nextState;
+      this.__reactInternalSnapshotFlag = true;
+      this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(
+        prevProps,
+        prevState
+      );
+    } finally {
+      this.props = prevProps;
+      this.state = prevState;
+    }
+  }
+
+  // React may warn about cWM/cWRP/cWU methods being deprecated.
+  // Add a flag to suppress these warnings for this special case.
+  componentWillMount.__suppressDeprecationWarning = true;
+  componentWillReceiveProps.__suppressDeprecationWarning = true;
+  componentWillUpdate.__suppressDeprecationWarning = true;
+
+  function polyfill(Component) {
+    var prototype = Component.prototype;
+
+    if (!prototype || !prototype.isReactComponent) {
+      throw new Error('Can only polyfill class components');
+    }
+
+    if (
+      typeof Component.getDerivedStateFromProps !== 'function' &&
+      typeof prototype.getSnapshotBeforeUpdate !== 'function'
+    ) {
+      return Component;
+    }
+
+    // If new component APIs are defined, "unsafe" lifecycles won't be called.
+    // Error if any of these lifecycles are present,
+    // Because they would work differently between older and newer (16.3+) versions of React.
+    var foundWillMountName = null;
+    var foundWillReceivePropsName = null;
+    var foundWillUpdateName = null;
+    if (typeof prototype.componentWillMount === 'function') {
+      foundWillMountName = 'componentWillMount';
+    } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {
+      foundWillMountName = 'UNSAFE_componentWillMount';
+    }
+    if (typeof prototype.componentWillReceiveProps === 'function') {
+      foundWillReceivePropsName = 'componentWillReceiveProps';
+    } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {
+      foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
+    }
+    if (typeof prototype.componentWillUpdate === 'function') {
+      foundWillUpdateName = 'componentWillUpdate';
+    } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {
+      foundWillUpdateName = 'UNSAFE_componentWillUpdate';
+    }
+    if (
+      foundWillMountName !== null ||
+      foundWillReceivePropsName !== null ||
+      foundWillUpdateName !== null
+    ) {
+      var componentName = Component.displayName || Component.name;
+      var newApiName =
+        typeof Component.getDerivedStateFromProps === 'function'
+          ? 'getDerivedStateFromProps()'
+          : 'getSnapshotBeforeUpdate()';
+
+      throw Error(
+        'Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' +
+          componentName +
+          ' uses ' +
+          newApiName +
+          ' but also contains the following legacy lifecycles:' +
+          (foundWillMountName !== null ? '\n  ' + foundWillMountName : '') +
+          (foundWillReceivePropsName !== null
+            ? '\n  ' + foundWillReceivePropsName
+            : '') +
+          (foundWillUpdateName !== null ? '\n  ' + foundWillUpdateName : '') +
+          '\n\nThe above lifecycles should be removed. Learn more about this warning here:\n' +
+          'https://fb.me/react-async-component-lifecycle-hooks'
+      );
+    }
+
+    // React <= 16.2 does not support static getDerivedStateFromProps.
+    // As a workaround, use cWM and cWRP to invoke the new static lifecycle.
+    // Newer versions of React will ignore these lifecycles if gDSFP exists.
+    if (typeof Component.getDerivedStateFromProps === 'function') {
+      prototype.componentWillMount = componentWillMount;
+      prototype.componentWillReceiveProps = componentWillReceiveProps;
+    }
+
+    // React <= 16.2 does not support getSnapshotBeforeUpdate.
+    // As a workaround, use cWU to invoke the new lifecycle.
+    // Newer versions of React will ignore that lifecycle if gSBU exists.
+    if (typeof prototype.getSnapshotBeforeUpdate === 'function') {
+      if (typeof prototype.componentDidUpdate !== 'function') {
+        throw new Error(
+          'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'
+        );
+      }
+
+      prototype.componentWillUpdate = componentWillUpdate;
+
+      var componentDidUpdate = prototype.componentDidUpdate;
+
+      prototype.componentDidUpdate = function componentDidUpdatePolyfill(
+        prevProps,
+        prevState,
+        maybeSnapshot
+      ) {
+        // 16.3+ will not execute our will-update method;
+        // It will pass a snapshot value to did-update though.
+        // Older versions will require our polyfilled will-update value.
+        // We need to handle both cases, but can't just check for the presence of "maybeSnapshot",
+        // Because for <= 15.x versions this might be a "prevContext" object.
+        // We also can't just check "__reactInternalSnapshot",
+        // Because get-snapshot might return a falsy value.
+        // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.
+        var snapshot = this.__reactInternalSnapshotFlag
+          ? this.__reactInternalSnapshot
+          : maybeSnapshot;
+
+        componentDidUpdate.call(this, prevProps, prevState, snapshot);
+      };
+    }
+
+    return Component;
+  }
+
+  exports.polyfill = polyfill;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/node_modules/react-lifecycles-compat/react-lifecycles-compat.min.js b/node_modules/react-lifecycles-compat/react-lifecycles-compat.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..68b22352476a0cb3170e6f04d4bf8277f1258e5a
--- /dev/null
+++ b/node_modules/react-lifecycles-compat/react-lifecycles-compat.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.reactLifecyclesCompat={})}(this,function(e){"use strict";function t(){var e=this.constructor.getDerivedStateFromProps(this.props,this.state);null!==e&&void 0!==e&&this.setState(e)}function n(e){this.setState(function(t){var n=this.constructor.getDerivedStateFromProps(e,t);return null!==n&&void 0!==n?n:null}.bind(this))}function o(e,t){try{var n=this.props,o=this.state;this.props=e,this.state=t,this.__reactInternalSnapshotFlag=!0,this.__reactInternalSnapshot=this.getSnapshotBeforeUpdate(n,o)}finally{this.props=n,this.state=o}}t.__suppressDeprecationWarning=!0,n.__suppressDeprecationWarning=!0,o.__suppressDeprecationWarning=!0,e.polyfill=function(e){var i=e.prototype;if(!i||!i.isReactComponent)throw new Error("Can only polyfill class components");if("function"!=typeof e.getDerivedStateFromProps&&"function"!=typeof i.getSnapshotBeforeUpdate)return e;var p=null,l=null,r=null;if("function"==typeof i.componentWillMount?p="componentWillMount":"function"==typeof i.UNSAFE_componentWillMount&&(p="UNSAFE_componentWillMount"),"function"==typeof i.componentWillReceiveProps?l="componentWillReceiveProps":"function"==typeof i.UNSAFE_componentWillReceiveProps&&(l="UNSAFE_componentWillReceiveProps"),"function"==typeof i.componentWillUpdate?r="componentWillUpdate":"function"==typeof i.UNSAFE_componentWillUpdate&&(r="UNSAFE_componentWillUpdate"),null!==p||null!==l||null!==r){var s=e.displayName||e.name,a="function"==typeof e.getDerivedStateFromProps?"getDerivedStateFromProps()":"getSnapshotBeforeUpdate()";throw Error("Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n"+s+" uses "+a+" but also contains the following legacy lifecycles:"+(null!==p?"\n  "+p:"")+(null!==l?"\n  "+l:"")+(null!==r?"\n  "+r:"")+"\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://fb.me/react-async-component-lifecycle-hooks")}if("function"==typeof e.getDerivedStateFromProps&&(i.componentWillMount=t,i.componentWillReceiveProps=n),"function"==typeof i.getSnapshotBeforeUpdate){if("function"!=typeof i.componentDidUpdate)throw new Error("Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype");i.componentWillUpdate=o;var c=i.componentDidUpdate;i.componentDidUpdate=function(e,t,n){var o=this.__reactInternalSnapshotFlag?this.__reactInternalSnapshot:n;c.call(this,e,t,o)}}return e},Object.defineProperty(e,"__esModule",{value:!0})});
diff --git a/node_modules/react-transition-group/CSSTransition/package.json b/node_modules/react-transition-group/CSSTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..b92db9d640dba72daada66ffd589e66e29e618f7
--- /dev/null
+++ b/node_modules/react-transition-group/CSSTransition/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/CSSTransition",
+  "private": true,
+  "main": "../cjs/CSSTransition.js",
+  "module": "../esm/CSSTransition.js"
+}
diff --git a/node_modules/react-transition-group/LICENSE b/node_modules/react-transition-group/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..af586225d65dc0c40190323cc86ec45487aa9ca2
--- /dev/null
+++ b/node_modules/react-transition-group/LICENSE
@@ -0,0 +1,30 @@
+BSD 3-Clause License
+
+Copyright (c) 2018, React Community
+Forked from React (https://github.com/facebook/react) Copyright 2013-present, Facebook, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the copyright holder nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/react-transition-group/README.md b/node_modules/react-transition-group/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..566a11a63655714d56bc599b1b7828899148bf25
--- /dev/null
+++ b/node_modules/react-transition-group/README.md
@@ -0,0 +1,34 @@
+# react-transition-group [![npm][npm-badge]][npm]
+
+> **ATTENTION!** To address many issues that have come up over the years, the API in v2 and above is not backwards compatible with the original [`React addon (v1-stable)`](https://github.com/reactjs/react-transition-group/tree/v1-stable).
+>
+> **For a drop-in replacement for `react-addons-transition-group` and `react-addons-css-transition-group`, use the v1 release. Documentation and code for that release are available on the [`v1-stable`](https://github.com/reactjs/react-transition-group/tree/v1-stable) branch.**
+>
+> We are no longer updating the v1 codebase, please upgrade to the latest version when possible
+
+A set of components for managing component states (including mounting and unmounting) over time, specifically designed with animation in mind.
+
+## Documentation
+
+- [**Main documentation**](https://reactcommunity.org/react-transition-group/)
+- [Migration guide from v1](/Migration.md)
+
+## TypeScript
+TypeScript definitions are published via [**DefinitelyTyped**](https://github.com/DefinitelyTyped/DefinitelyTyped) and can be installed via the following command:
+
+```
+npm install @types/react-transition-group
+```
+
+## Examples
+
+Clone the repo first:
+
+```
+git@github.com:reactjs/react-transition-group.git
+```
+
+Then run `npm install` (or `yarn`), and finally `npm run storybook` to start a storybook instance that you can navigate to in your browser to see the examples.
+
+[npm-badge]: https://img.shields.io/npm/v/react-transition-group.svg
+[npm]: https://www.npmjs.org/package/react-transition-group
diff --git a/node_modules/react-transition-group/ReplaceTransition/package.json b/node_modules/react-transition-group/ReplaceTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8dd4d777f33a8d46a3a3540a81ae65bf1c5b647c
--- /dev/null
+++ b/node_modules/react-transition-group/ReplaceTransition/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/ReplaceTransition",
+  "private": true,
+  "main": "../cjs/ReplaceTransition.js",
+  "module": "../esm/ReplaceTransition.js"
+}
diff --git a/node_modules/react-transition-group/SwitchTransition/package.json b/node_modules/react-transition-group/SwitchTransition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..a12ce085a996d1e7c8e9fafd0146303a717f04d9
--- /dev/null
+++ b/node_modules/react-transition-group/SwitchTransition/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/SwitchTransition",
+  "private": true,
+  "main": "../cjs/SwitchTransition.js",
+  "module": "../esm/SwitchTransition.js"
+}
diff --git a/node_modules/react-transition-group/Transition/package.json b/node_modules/react-transition-group/Transition/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..372e90533a15168d1169d557e0c699932e2286cc
--- /dev/null
+++ b/node_modules/react-transition-group/Transition/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/Transition",
+  "private": true,
+  "main": "../cjs/Transition.js",
+  "module": "../esm/Transition.js"
+}
diff --git a/node_modules/react-transition-group/TransitionGroup/package.json b/node_modules/react-transition-group/TransitionGroup/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8aaa9c32189027b5e14fcdd5f192e153b47f1e8b
--- /dev/null
+++ b/node_modules/react-transition-group/TransitionGroup/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/TransitionGroup",
+  "private": true,
+  "main": "../cjs/TransitionGroup.js",
+  "module": "../esm/TransitionGroup.js"
+}
diff --git a/node_modules/react-transition-group/TransitionGroupContext/package.json b/node_modules/react-transition-group/TransitionGroupContext/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..83ad28fb49a20f7bb1ecbe326e42dfb6a6d3ba7b
--- /dev/null
+++ b/node_modules/react-transition-group/TransitionGroupContext/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/TransitionGroupContext",
+  "private": true,
+  "main": "../cjs/TransitionGroupContext.js",
+  "module": "../esm/TransitionGroupContext.js"
+}
diff --git a/node_modules/react-transition-group/cjs/CSSTransition.js b/node_modules/react-transition-group/cjs/CSSTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f0d3c1411e76293894b46ee6b9817609d2f192e
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/CSSTransition.js
@@ -0,0 +1,430 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _addClass2 = _interopRequireDefault(require("dom-helpers/addClass"));
+
+var _removeClass = _interopRequireDefault(require("dom-helpers/removeClass"));
+
+var _react = _interopRequireDefault(require("react"));
+
+var _Transition = _interopRequireDefault(require("./Transition"));
+
+var _PropTypes = require("./utils/PropTypes");
+
+var _reflow = require("./utils/reflow");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
+
+var _addClass = function addClass(node, classes) {
+  return node && classes && classes.split(' ').forEach(function (c) {
+    return (0, _addClass2.default)(node, c);
+  });
+};
+
+var removeClass = function removeClass(node, classes) {
+  return node && classes && classes.split(' ').forEach(function (c) {
+    return (0, _removeClass.default)(node, c);
+  });
+};
+/**
+ * A transition component inspired by the excellent
+ * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should
+ * use it if you're using CSS transitions or animations. It's built upon the
+ * [`Transition`](https://reactcommunity.org/react-transition-group/transition)
+ * component, so it inherits all of its props.
+ *
+ * `CSSTransition` applies a pair of class names during the `appear`, `enter`,
+ * and `exit` states of the transition. The first class is applied and then a
+ * second `*-active` class in order to activate the CSS transition. After the
+ * transition, matching `*-done` class names are applied to persist the
+ * transition state.
+ *
+ * ```jsx
+ * function App() {
+ *   const [inProp, setInProp] = useState(false);
+ *   return (
+ *     <div>
+ *       <CSSTransition in={inProp} timeout={200} classNames="my-node">
+ *         <div>
+ *           {"I'll receive my-node-* classes"}
+ *         </div>
+ *       </CSSTransition>
+ *       <button type="button" onClick={() => setInProp(true)}>
+ *         Click to Enter
+ *       </button>
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * When the `in` prop is set to `true`, the child component will first receive
+ * the class `example-enter`, then the `example-enter-active` will be added in
+ * the next tick. `CSSTransition` [forces a
+ * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)
+ * between before adding the `example-enter-active`. This is an important trick
+ * because it allows us to transition between `example-enter` and
+ * `example-enter-active` even though they were added immediately one after
+ * another. Most notably, this is what makes it possible for us to animate
+ * _appearance_.
+ *
+ * ```css
+ * .my-node-enter {
+ *   opacity: 0;
+ * }
+ * .my-node-enter-active {
+ *   opacity: 1;
+ *   transition: opacity 200ms;
+ * }
+ * .my-node-exit {
+ *   opacity: 1;
+ * }
+ * .my-node-exit-active {
+ *   opacity: 0;
+ *   transition: opacity 200ms;
+ * }
+ * ```
+ *
+ * `*-active` classes represent which styles you want to animate **to**, so it's
+ * important to add `transition` declaration only to them, otherwise transitions
+ * might not behave as intended! This might not be obvious when the transitions
+ * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in
+ * the example above (minus `transition`), but it becomes apparent in more
+ * complex transitions.
+ *
+ * **Note**: If you're using the
+ * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)
+ * prop, make sure to define styles for `.appear-*` classes as well.
+ */
+
+
+var CSSTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(CSSTransition, _React$Component);
+
+  function CSSTransition() {
+    var _this;
+
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+    _this.appliedClasses = {
+      appear: {},
+      enter: {},
+      exit: {}
+    };
+
+    _this.onEnter = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument[0],
+          appearing = _this$resolveArgument[1];
+
+      _this.removeClasses(node, 'exit');
+
+      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');
+
+      if (_this.props.onEnter) {
+        _this.props.onEnter(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onEntering = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument2[0],
+          appearing = _this$resolveArgument2[1];
+
+      var type = appearing ? 'appear' : 'enter';
+
+      _this.addClass(node, type, 'active');
+
+      if (_this.props.onEntering) {
+        _this.props.onEntering(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onEntered = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument3[0],
+          appearing = _this$resolveArgument3[1];
+
+      var type = appearing ? 'appear' : 'enter';
+
+      _this.removeClasses(node, type);
+
+      _this.addClass(node, type, 'done');
+
+      if (_this.props.onEntered) {
+        _this.props.onEntered(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onExit = function (maybeNode) {
+      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument4[0];
+
+      _this.removeClasses(node, 'appear');
+
+      _this.removeClasses(node, 'enter');
+
+      _this.addClass(node, 'exit', 'base');
+
+      if (_this.props.onExit) {
+        _this.props.onExit(maybeNode);
+      }
+    };
+
+    _this.onExiting = function (maybeNode) {
+      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument5[0];
+
+      _this.addClass(node, 'exit', 'active');
+
+      if (_this.props.onExiting) {
+        _this.props.onExiting(maybeNode);
+      }
+    };
+
+    _this.onExited = function (maybeNode) {
+      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument6[0];
+
+      _this.removeClasses(node, 'exit');
+
+      _this.addClass(node, 'exit', 'done');
+
+      if (_this.props.onExited) {
+        _this.props.onExited(maybeNode);
+      }
+    };
+
+    _this.resolveArguments = function (maybeNode, maybeAppearing) {
+      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`
+      : [maybeNode, maybeAppearing];
+    };
+
+    _this.getClassNames = function (type) {
+      var classNames = _this.props.classNames;
+      var isStringClassNames = typeof classNames === 'string';
+      var prefix = isStringClassNames && classNames ? classNames + "-" : '';
+      var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type];
+      var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"];
+      var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"];
+      return {
+        baseClassName: baseClassName,
+        activeClassName: activeClassName,
+        doneClassName: doneClassName
+      };
+    };
+
+    return _this;
+  }
+
+  var _proto = CSSTransition.prototype;
+
+  _proto.addClass = function addClass(node, type, phase) {
+    var className = this.getClassNames(type)[phase + "ClassName"];
+
+    var _this$getClassNames = this.getClassNames('enter'),
+        doneClassName = _this$getClassNames.doneClassName;
+
+    if (type === 'appear' && phase === 'done' && doneClassName) {
+      className += " " + doneClassName;
+    } // This is to force a repaint,
+    // which is necessary in order to transition styles when adding a class name.
+
+
+    if (phase === 'active') {
+      if (node) (0, _reflow.forceReflow)(node);
+    }
+
+    if (className) {
+      this.appliedClasses[type][phase] = className;
+
+      _addClass(node, className);
+    }
+  };
+
+  _proto.removeClasses = function removeClasses(node, type) {
+    var _this$appliedClasses$ = this.appliedClasses[type],
+        baseClassName = _this$appliedClasses$.base,
+        activeClassName = _this$appliedClasses$.active,
+        doneClassName = _this$appliedClasses$.done;
+    this.appliedClasses[type] = {};
+
+    if (baseClassName) {
+      removeClass(node, baseClassName);
+    }
+
+    if (activeClassName) {
+      removeClass(node, activeClassName);
+    }
+
+    if (doneClassName) {
+      removeClass(node, doneClassName);
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        _ = _this$props.classNames,
+        props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
+
+    return /*#__PURE__*/_react.default.createElement(_Transition.default, _extends({}, props, {
+      onEnter: this.onEnter,
+      onEntered: this.onEntered,
+      onEntering: this.onEntering,
+      onExit: this.onExit,
+      onExiting: this.onExiting,
+      onExited: this.onExited
+    }));
+  };
+
+  return CSSTransition;
+}(_react.default.Component);
+
+CSSTransition.defaultProps = {
+  classNames: ''
+};
+CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends({}, _Transition.default.propTypes, {
+  /**
+   * The animation classNames applied to the component as it appears, enters,
+   * exits or has finished the transition. A single name can be provided, which
+   * will be suffixed for each stage, e.g. `classNames="fade"` applies:
+   *
+   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`
+   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`
+   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`
+   *
+   * A few details to note about how these classes are applied:
+   *
+   * 1. They are _joined_ with the ones that are already defined on the child
+   *    component, so if you want to add some base styles, you can use
+   *    `className` without worrying that it will be overridden.
+   *
+   * 2. If the transition component mounts with `in={false}`, no classes are
+   *    applied yet. You might be expecting `*-exit-done`, but if you think
+   *    about it, a component cannot finish exiting if it hasn't entered yet.
+   *
+   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This
+   *    allows you to define different behavior for when appearing is done and
+   *    when regular entering is done, using selectors like
+   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply
+   *    an epic entrance animation when element first appears in the DOM using
+   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can
+   *    simply use `fade-enter-done` for defining both cases.
+   *
+   * Each individual classNames can also be specified independently like:
+   *
+   * ```js
+   * classNames={{
+   *  appear: 'my-appear',
+   *  appearActive: 'my-active-appear',
+   *  appearDone: 'my-done-appear',
+   *  enter: 'my-enter',
+   *  enterActive: 'my-active-enter',
+   *  enterDone: 'my-done-enter',
+   *  exit: 'my-exit',
+   *  exitActive: 'my-active-exit',
+   *  exitDone: 'my-done-exit',
+   * }}
+   * ```
+   *
+   * If you want to set these classes using CSS Modules:
+   *
+   * ```js
+   * import styles from './styles.css';
+   * ```
+   *
+   * you might want to use camelCase in your CSS file, that way could simply
+   * spread them instead of listing them one by one:
+   *
+   * ```js
+   * classNames={{ ...styles }}
+   * ```
+   *
+   * @type {string | {
+   *  appear?: string,
+   *  appearActive?: string,
+   *  appearDone?: string,
+   *  enter?: string,
+   *  enterActive?: string,
+   *  enterDone?: string,
+   *  exit?: string,
+   *  exitActive?: string,
+   *  exitDone?: string,
+   * }}
+   */
+  classNames: _PropTypes.classNamesShape,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is
+   * applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEnter: _propTypes.default.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter-active' or
+   * 'appear-active' class is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntering: _propTypes.default.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter' or
+   * 'appear' classes are **removed** and the `done` class is added to the DOM node.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntered: _propTypes.default.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit' class is
+   * applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExit: _propTypes.default.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExiting: _propTypes.default.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit' classes
+   * are **removed** and the `exit-done` class is added to the DOM node.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExited: _propTypes.default.func
+}) : {};
+var _default = CSSTransition;
+exports.default = _default;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/ReplaceTransition.js b/node_modules/react-transition-group/cjs/ReplaceTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..cb3224c97150a41bb46a5c0cee4352218035b472
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/ReplaceTransition.js
@@ -0,0 +1,152 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _react = _interopRequireDefault(require("react"));
+
+var _reactDom = _interopRequireDefault(require("react-dom"));
+
+var _TransitionGroup = _interopRequireDefault(require("./TransitionGroup"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
+
+/**
+ * The `<ReplaceTransition>` component is a specialized `Transition` component
+ * that animates between two children.
+ *
+ * ```jsx
+ * <ReplaceTransition in>
+ *   <Fade><div>I appear first</div></Fade>
+ *   <Fade><div>I replace the above</div></Fade>
+ * </ReplaceTransition>
+ * ```
+ */
+var ReplaceTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(ReplaceTransition, _React$Component);
+
+  function ReplaceTransition() {
+    var _this;
+
+    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
+      _args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;
+
+    _this.handleEnter = function () {
+      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+        args[_key2] = arguments[_key2];
+      }
+
+      return _this.handleLifecycle('onEnter', 0, args);
+    };
+
+    _this.handleEntering = function () {
+      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+        args[_key3] = arguments[_key3];
+      }
+
+      return _this.handleLifecycle('onEntering', 0, args);
+    };
+
+    _this.handleEntered = function () {
+      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+        args[_key4] = arguments[_key4];
+      }
+
+      return _this.handleLifecycle('onEntered', 0, args);
+    };
+
+    _this.handleExit = function () {
+      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+        args[_key5] = arguments[_key5];
+      }
+
+      return _this.handleLifecycle('onExit', 1, args);
+    };
+
+    _this.handleExiting = function () {
+      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+        args[_key6] = arguments[_key6];
+      }
+
+      return _this.handleLifecycle('onExiting', 1, args);
+    };
+
+    _this.handleExited = function () {
+      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+        args[_key7] = arguments[_key7];
+      }
+
+      return _this.handleLifecycle('onExited', 1, args);
+    };
+
+    return _this;
+  }
+
+  var _proto = ReplaceTransition.prototype;
+
+  _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {
+    var _child$props;
+
+    var children = this.props.children;
+
+    var child = _react.default.Children.toArray(children)[idx];
+
+    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);
+
+    if (this.props[handler]) {
+      var maybeNode = child.props.nodeRef ? undefined : _reactDom.default.findDOMNode(this);
+      this.props[handler](maybeNode);
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        children = _this$props.children,
+        inProp = _this$props.in,
+        props = _objectWithoutPropertiesLoose(_this$props, ["children", "in"]);
+
+    var _React$Children$toArr = _react.default.Children.toArray(children),
+        first = _React$Children$toArr[0],
+        second = _React$Children$toArr[1];
+
+    delete props.onEnter;
+    delete props.onEntering;
+    delete props.onEntered;
+    delete props.onExit;
+    delete props.onExiting;
+    delete props.onExited;
+    return /*#__PURE__*/_react.default.createElement(_TransitionGroup.default, props, inProp ? _react.default.cloneElement(first, {
+      key: 'first',
+      onEnter: this.handleEnter,
+      onEntering: this.handleEntering,
+      onEntered: this.handleEntered
+    }) : _react.default.cloneElement(second, {
+      key: 'second',
+      onEnter: this.handleExit,
+      onEntering: this.handleExiting,
+      onEntered: this.handleExited
+    }));
+  };
+
+  return ReplaceTransition;
+}(_react.default.Component);
+
+ReplaceTransition.propTypes = process.env.NODE_ENV !== "production" ? {
+  in: _propTypes.default.bool.isRequired,
+  children: function children(props, propName) {
+    if (_react.default.Children.count(props[propName]) !== 2) return new Error("\"" + propName + "\" must be exactly two transition components.");
+    return null;
+  }
+} : {};
+var _default = ReplaceTransition;
+exports.default = _default;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/SwitchTransition.js b/node_modules/react-transition-group/cjs/SwitchTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..19b342c30fd281ec494ef5d2357278daffebac7a
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/SwitchTransition.js
@@ -0,0 +1,269 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.modes = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _Transition = require("./Transition");
+
+var _TransitionGroupContext = _interopRequireDefault(require("./TransitionGroupContext"));
+
+var _leaveRenders, _enterRenders;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
+
+function areChildrenDifferent(oldChildren, newChildren) {
+  if (oldChildren === newChildren) return false;
+
+  if (_react.default.isValidElement(oldChildren) && _react.default.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {
+    return false;
+  }
+
+  return true;
+}
+/**
+ * Enum of modes for SwitchTransition component
+ * @enum { string }
+ */
+
+
+var modes = {
+  out: 'out-in',
+  in: 'in-out'
+};
+exports.modes = modes;
+
+var callHook = function callHook(element, name, cb) {
+  return function () {
+    var _element$props;
+
+    element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);
+    cb();
+  };
+};
+
+var leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {
+  var current = _ref.current,
+      changeState = _ref.changeState;
+  return _react.default.cloneElement(current, {
+    in: false,
+    onExited: callHook(current, 'onExited', function () {
+      changeState(_Transition.ENTERING, null);
+    })
+  });
+}, _leaveRenders[modes.in] = function (_ref2) {
+  var current = _ref2.current,
+      changeState = _ref2.changeState,
+      children = _ref2.children;
+  return [current, _react.default.cloneElement(children, {
+    in: true,
+    onEntered: callHook(children, 'onEntered', function () {
+      changeState(_Transition.ENTERING);
+    })
+  })];
+}, _leaveRenders);
+var enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {
+  var children = _ref3.children,
+      changeState = _ref3.changeState;
+  return _react.default.cloneElement(children, {
+    in: true,
+    onEntered: callHook(children, 'onEntered', function () {
+      changeState(_Transition.ENTERED, _react.default.cloneElement(children, {
+        in: true
+      }));
+    })
+  });
+}, _enterRenders[modes.in] = function (_ref4) {
+  var current = _ref4.current,
+      children = _ref4.children,
+      changeState = _ref4.changeState;
+  return [_react.default.cloneElement(current, {
+    in: false,
+    onExited: callHook(current, 'onExited', function () {
+      changeState(_Transition.ENTERED, _react.default.cloneElement(children, {
+        in: true
+      }));
+    })
+  }), _react.default.cloneElement(children, {
+    in: true
+  })];
+}, _enterRenders);
+/**
+ * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).
+ * You can use it when you want to control the render between state transitions.
+ * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.
+ *
+ * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.
+ * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.
+ *
+ * **Note**: If you want the animation to happen simultaneously
+ * (that is, to have the old child removed and a new child inserted **at the same time**),
+ * you should use
+ * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)
+ * instead.
+ *
+ * ```jsx
+ * function App() {
+ *  const [state, setState] = useState(false);
+ *  return (
+ *    <SwitchTransition>
+ *      <CSSTransition
+ *        key={state ? "Goodbye, world!" : "Hello, world!"}
+ *        addEndListener={(node, done) => node.addEventListener("transitionend", done, false)}
+ *        classNames='fade'
+ *      >
+ *        <button onClick={() => setState(state => !state)}>
+ *          {state ? "Goodbye, world!" : "Hello, world!"}
+ *        </button>
+ *      </CSSTransition>
+ *    </SwitchTransition>
+ *  );
+ * }
+ * ```
+ *
+ * ```css
+ * .fade-enter{
+ *    opacity: 0;
+ * }
+ * .fade-exit{
+ *    opacity: 1;
+ * }
+ * .fade-enter-active{
+ *    opacity: 1;
+ * }
+ * .fade-exit-active{
+ *    opacity: 0;
+ * }
+ * .fade-enter-active,
+ * .fade-exit-active{
+ *    transition: opacity 500ms;
+ * }
+ * ```
+ */
+
+var SwitchTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(SwitchTransition, _React$Component);
+
+  function SwitchTransition() {
+    var _this;
+
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+    _this.state = {
+      status: _Transition.ENTERED,
+      current: null
+    };
+    _this.appeared = false;
+
+    _this.changeState = function (status, current) {
+      if (current === void 0) {
+        current = _this.state.current;
+      }
+
+      _this.setState({
+        status: status,
+        current: current
+      });
+    };
+
+    return _this;
+  }
+
+  var _proto = SwitchTransition.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.appeared = true;
+  };
+
+  SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
+    if (props.children == null) {
+      return {
+        current: null
+      };
+    }
+
+    if (state.status === _Transition.ENTERING && props.mode === modes.in) {
+      return {
+        status: _Transition.ENTERING
+      };
+    }
+
+    if (state.current && areChildrenDifferent(state.current, props.children)) {
+      return {
+        status: _Transition.EXITING
+      };
+    }
+
+    return {
+      current: _react.default.cloneElement(props.children, {
+        in: true
+      })
+    };
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        children = _this$props.children,
+        mode = _this$props.mode,
+        _this$state = this.state,
+        status = _this$state.status,
+        current = _this$state.current;
+    var data = {
+      children: children,
+      current: current,
+      changeState: this.changeState,
+      status: status
+    };
+    var component;
+
+    switch (status) {
+      case _Transition.ENTERING:
+        component = enterRenders[mode](data);
+        break;
+
+      case _Transition.EXITING:
+        component = leaveRenders[mode](data);
+        break;
+
+      case _Transition.ENTERED:
+        component = current;
+    }
+
+    return /*#__PURE__*/_react.default.createElement(_TransitionGroupContext.default.Provider, {
+      value: {
+        isMounting: !this.appeared
+      }
+    }, component);
+  };
+
+  return SwitchTransition;
+}(_react.default.Component);
+
+SwitchTransition.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * Transition modes.
+   * `out-in`: Current element transitions out first, then when complete, the new element transitions in.
+   * `in-out`: New element transitions in first, then when complete, the current element transitions out.
+   *
+   * @type {'out-in'|'in-out'}
+   */
+  mode: _propTypes.default.oneOf([modes.in, modes.out]),
+
+  /**
+   * Any `Transition` or `CSSTransition` component.
+   */
+  children: _propTypes.default.oneOfType([_propTypes.default.element.isRequired])
+} : {};
+SwitchTransition.defaultProps = {
+  mode: modes.out
+};
+var _default = SwitchTransition;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/Transition.js b/node_modules/react-transition-group/cjs/Transition.js
new file mode 100644
index 0000000000000000000000000000000000000000..b44cb76052fba3d1cd1d8d034e5c79b6d7493a19
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/Transition.js
@@ -0,0 +1,648 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = exports.EXITING = exports.ENTERED = exports.ENTERING = exports.EXITED = exports.UNMOUNTED = void 0;
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _react = _interopRequireDefault(require("react"));
+
+var _reactDom = _interopRequireDefault(require("react-dom"));
+
+var _config = _interopRequireDefault(require("./config"));
+
+var _PropTypes = require("./utils/PropTypes");
+
+var _TransitionGroupContext = _interopRequireDefault(require("./TransitionGroupContext"));
+
+var _reflow = require("./utils/reflow");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
+
+var UNMOUNTED = 'unmounted';
+exports.UNMOUNTED = UNMOUNTED;
+var EXITED = 'exited';
+exports.EXITED = EXITED;
+var ENTERING = 'entering';
+exports.ENTERING = ENTERING;
+var ENTERED = 'entered';
+exports.ENTERED = ENTERED;
+var EXITING = 'exiting';
+/**
+ * The Transition component lets you describe a transition from one component
+ * state to another _over time_ with a simple declarative API. Most commonly
+ * it's used to animate the mounting and unmounting of a component, but can also
+ * be used to describe in-place transition states as well.
+ *
+ * ---
+ *
+ * **Note**: `Transition` is a platform-agnostic base component. If you're using
+ * transitions in CSS, you'll probably want to use
+ * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
+ * instead. It inherits all the features of `Transition`, but contains
+ * additional features necessary to play nice with CSS transitions (hence the
+ * name of the component).
+ *
+ * ---
+ *
+ * By default the `Transition` component does not alter the behavior of the
+ * component it renders, it only tracks "enter" and "exit" states for the
+ * components. It's up to you to give meaning and effect to those states. For
+ * example we can add styles to a component when it enters or exits:
+ *
+ * ```jsx
+ * import { Transition } from 'react-transition-group';
+ *
+ * const duration = 300;
+ *
+ * const defaultStyle = {
+ *   transition: `opacity ${duration}ms ease-in-out`,
+ *   opacity: 0,
+ * }
+ *
+ * const transitionStyles = {
+ *   entering: { opacity: 1 },
+ *   entered:  { opacity: 1 },
+ *   exiting:  { opacity: 0 },
+ *   exited:  { opacity: 0 },
+ * };
+ *
+ * const Fade = ({ in: inProp }) => (
+ *   <Transition in={inProp} timeout={duration}>
+ *     {state => (
+ *       <div style={{
+ *         ...defaultStyle,
+ *         ...transitionStyles[state]
+ *       }}>
+ *         I'm a fade Transition!
+ *       </div>
+ *     )}
+ *   </Transition>
+ * );
+ * ```
+ *
+ * There are 4 main states a Transition can be in:
+ *  - `'entering'`
+ *  - `'entered'`
+ *  - `'exiting'`
+ *  - `'exited'`
+ *
+ * Transition state is toggled via the `in` prop. When `true` the component
+ * begins the "Enter" stage. During this stage, the component will shift from
+ * its current transition state, to `'entering'` for the duration of the
+ * transition and then to the `'entered'` stage once it's complete. Let's take
+ * the following example (we'll use the
+ * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
+ *
+ * ```jsx
+ * function App() {
+ *   const [inProp, setInProp] = useState(false);
+ *   return (
+ *     <div>
+ *       <Transition in={inProp} timeout={500}>
+ *         {state => (
+ *           // ...
+ *         )}
+ *       </Transition>
+ *       <button onClick={() => setInProp(true)}>
+ *         Click to Enter
+ *       </button>
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * When the button is clicked the component will shift to the `'entering'` state
+ * and stay there for 500ms (the value of `timeout`) before it finally switches
+ * to `'entered'`.
+ *
+ * When `in` is `false` the same thing happens except the state moves from
+ * `'exiting'` to `'exited'`.
+ */
+
+exports.EXITING = EXITING;
+
+var Transition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(Transition, _React$Component);
+
+  function Transition(props, context) {
+    var _this;
+
+    _this = _React$Component.call(this, props, context) || this;
+    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears
+
+    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
+    var initialStatus;
+    _this.appearStatus = null;
+
+    if (props.in) {
+      if (appear) {
+        initialStatus = EXITED;
+        _this.appearStatus = ENTERING;
+      } else {
+        initialStatus = ENTERED;
+      }
+    } else {
+      if (props.unmountOnExit || props.mountOnEnter) {
+        initialStatus = UNMOUNTED;
+      } else {
+        initialStatus = EXITED;
+      }
+    }
+
+    _this.state = {
+      status: initialStatus
+    };
+    _this.nextCallback = null;
+    return _this;
+  }
+
+  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
+    var nextIn = _ref.in;
+
+    if (nextIn && prevState.status === UNMOUNTED) {
+      return {
+        status: EXITED
+      };
+    }
+
+    return null;
+  } // getSnapshotBeforeUpdate(prevProps) {
+  //   let nextStatus = null
+  //   if (prevProps !== this.props) {
+  //     const { status } = this.state
+  //     if (this.props.in) {
+  //       if (status !== ENTERING && status !== ENTERED) {
+  //         nextStatus = ENTERING
+  //       }
+  //     } else {
+  //       if (status === ENTERING || status === ENTERED) {
+  //         nextStatus = EXITING
+  //       }
+  //     }
+  //   }
+  //   return { nextStatus }
+  // }
+  ;
+
+  var _proto = Transition.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.updateStatus(true, this.appearStatus);
+  };
+
+  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
+    var nextStatus = null;
+
+    if (prevProps !== this.props) {
+      var status = this.state.status;
+
+      if (this.props.in) {
+        if (status !== ENTERING && status !== ENTERED) {
+          nextStatus = ENTERING;
+        }
+      } else {
+        if (status === ENTERING || status === ENTERED) {
+          nextStatus = EXITING;
+        }
+      }
+    }
+
+    this.updateStatus(false, nextStatus);
+  };
+
+  _proto.componentWillUnmount = function componentWillUnmount() {
+    this.cancelNextCallback();
+  };
+
+  _proto.getTimeouts = function getTimeouts() {
+    var timeout = this.props.timeout;
+    var exit, enter, appear;
+    exit = enter = appear = timeout;
+
+    if (timeout != null && typeof timeout !== 'number') {
+      exit = timeout.exit;
+      enter = timeout.enter; // TODO: remove fallback for next major
+
+      appear = timeout.appear !== undefined ? timeout.appear : enter;
+    }
+
+    return {
+      exit: exit,
+      enter: enter,
+      appear: appear
+    };
+  };
+
+  _proto.updateStatus = function updateStatus(mounting, nextStatus) {
+    if (mounting === void 0) {
+      mounting = false;
+    }
+
+    if (nextStatus !== null) {
+      // nextStatus will always be ENTERING or EXITING.
+      this.cancelNextCallback();
+
+      if (nextStatus === ENTERING) {
+        if (this.props.unmountOnExit || this.props.mountOnEnter) {
+          var node = this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
+          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
+          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.
+
+          if (node) (0, _reflow.forceReflow)(node);
+        }
+
+        this.performEnter(mounting);
+      } else {
+        this.performExit();
+      }
+    } else if (this.props.unmountOnExit && this.state.status === EXITED) {
+      this.setState({
+        status: UNMOUNTED
+      });
+    }
+  };
+
+  _proto.performEnter = function performEnter(mounting) {
+    var _this2 = this;
+
+    var enter = this.props.enter;
+    var appearing = this.context ? this.context.isMounting : mounting;
+
+    var _ref2 = this.props.nodeRef ? [appearing] : [_reactDom.default.findDOMNode(this), appearing],
+        maybeNode = _ref2[0],
+        maybeAppearing = _ref2[1];
+
+    var timeouts = this.getTimeouts();
+    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
+    // if we are mounting and running this it means appear _must_ be set
+
+    if (!mounting && !enter || _config.default.disabled) {
+      this.safeSetState({
+        status: ENTERED
+      }, function () {
+        _this2.props.onEntered(maybeNode);
+      });
+      return;
+    }
+
+    this.props.onEnter(maybeNode, maybeAppearing);
+    this.safeSetState({
+      status: ENTERING
+    }, function () {
+      _this2.props.onEntering(maybeNode, maybeAppearing);
+
+      _this2.onTransitionEnd(enterTimeout, function () {
+        _this2.safeSetState({
+          status: ENTERED
+        }, function () {
+          _this2.props.onEntered(maybeNode, maybeAppearing);
+        });
+      });
+    });
+  };
+
+  _proto.performExit = function performExit() {
+    var _this3 = this;
+
+    var exit = this.props.exit;
+    var timeouts = this.getTimeouts();
+    var maybeNode = this.props.nodeRef ? undefined : _reactDom.default.findDOMNode(this); // no exit animation skip right to EXITED
+
+    if (!exit || _config.default.disabled) {
+      this.safeSetState({
+        status: EXITED
+      }, function () {
+        _this3.props.onExited(maybeNode);
+      });
+      return;
+    }
+
+    this.props.onExit(maybeNode);
+    this.safeSetState({
+      status: EXITING
+    }, function () {
+      _this3.props.onExiting(maybeNode);
+
+      _this3.onTransitionEnd(timeouts.exit, function () {
+        _this3.safeSetState({
+          status: EXITED
+        }, function () {
+          _this3.props.onExited(maybeNode);
+        });
+      });
+    });
+  };
+
+  _proto.cancelNextCallback = function cancelNextCallback() {
+    if (this.nextCallback !== null) {
+      this.nextCallback.cancel();
+      this.nextCallback = null;
+    }
+  };
+
+  _proto.safeSetState = function safeSetState(nextState, callback) {
+    // This shouldn't be necessary, but there are weird race conditions with
+    // setState callbacks and unmounting in testing, so always make sure that
+    // we can cancel any pending setState callbacks after we unmount.
+    callback = this.setNextCallback(callback);
+    this.setState(nextState, callback);
+  };
+
+  _proto.setNextCallback = function setNextCallback(callback) {
+    var _this4 = this;
+
+    var active = true;
+
+    this.nextCallback = function (event) {
+      if (active) {
+        active = false;
+        _this4.nextCallback = null;
+        callback(event);
+      }
+    };
+
+    this.nextCallback.cancel = function () {
+      active = false;
+    };
+
+    return this.nextCallback;
+  };
+
+  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
+    this.setNextCallback(handler);
+    var node = this.props.nodeRef ? this.props.nodeRef.current : _reactDom.default.findDOMNode(this);
+    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;
+
+    if (!node || doesNotHaveTimeoutOrListener) {
+      setTimeout(this.nextCallback, 0);
+      return;
+    }
+
+    if (this.props.addEndListener) {
+      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
+          maybeNode = _ref3[0],
+          maybeNextCallback = _ref3[1];
+
+      this.props.addEndListener(maybeNode, maybeNextCallback);
+    }
+
+    if (timeout != null) {
+      setTimeout(this.nextCallback, timeout);
+    }
+  };
+
+  _proto.render = function render() {
+    var status = this.state.status;
+
+    if (status === UNMOUNTED) {
+      return null;
+    }
+
+    var _this$props = this.props,
+        children = _this$props.children,
+        _in = _this$props.in,
+        _mountOnEnter = _this$props.mountOnEnter,
+        _unmountOnExit = _this$props.unmountOnExit,
+        _appear = _this$props.appear,
+        _enter = _this$props.enter,
+        _exit = _this$props.exit,
+        _timeout = _this$props.timeout,
+        _addEndListener = _this$props.addEndListener,
+        _onEnter = _this$props.onEnter,
+        _onEntering = _this$props.onEntering,
+        _onEntered = _this$props.onEntered,
+        _onExit = _this$props.onExit,
+        _onExiting = _this$props.onExiting,
+        _onExited = _this$props.onExited,
+        _nodeRef = _this$props.nodeRef,
+        childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);
+
+    return (
+      /*#__PURE__*/
+      // allows for nested Transitions
+      _react.default.createElement(_TransitionGroupContext.default.Provider, {
+        value: null
+      }, typeof children === 'function' ? children(status, childProps) : _react.default.cloneElement(_react.default.Children.only(children), childProps))
+    );
+  };
+
+  return Transition;
+}(_react.default.Component);
+
+Transition.contextType = _TransitionGroupContext.default;
+Transition.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * A React reference to DOM element that need to transition:
+   * https://stackoverflow.com/a/51127130/4671932
+   *
+   *   - When `nodeRef` prop is used, `node` is not passed to callback functions
+   *      (e.g. `onEnter`) because user already has direct access to the node.
+   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new
+   *     `nodeRef` need to be provided to `Transition` with changed `key` prop
+   *     (see
+   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
+   */
+  nodeRef: _propTypes.default.shape({
+    current: typeof Element === 'undefined' ? _propTypes.default.any : function (propValue, key, componentName, location, propFullName, secret) {
+      var value = propValue[key];
+      return _propTypes.default.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
+    }
+  }),
+
+  /**
+   * A `function` child can be used instead of a React element. This function is
+   * called with the current transition status (`'entering'`, `'entered'`,
+   * `'exiting'`, `'exited'`), which can be used to apply context
+   * specific props to a component.
+   *
+   * ```jsx
+   * <Transition in={this.state.in} timeout={150}>
+   *   {state => (
+   *     <MyComponent className={`fade fade-${state}`} />
+   *   )}
+   * </Transition>
+   * ```
+   */
+  children: _propTypes.default.oneOfType([_propTypes.default.func.isRequired, _propTypes.default.element.isRequired]).isRequired,
+
+  /**
+   * Show the component; triggers the enter or exit states
+   */
+  in: _propTypes.default.bool,
+
+  /**
+   * By default the child component is mounted immediately along with
+   * the parent `Transition` component. If you want to "lazy mount" the component on the
+   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay
+   * mounted, even on "exited", unless you also specify `unmountOnExit`.
+   */
+  mountOnEnter: _propTypes.default.bool,
+
+  /**
+   * By default the child component stays mounted after it reaches the `'exited'` state.
+   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.
+   */
+  unmountOnExit: _propTypes.default.bool,
+
+  /**
+   * By default the child component does not perform the enter transition when
+   * it first mounts, regardless of the value of `in`. If you want this
+   * behavior, set both `appear` and `in` to `true`.
+   *
+   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop
+   * > only adds an additional enter transition. However, in the
+   * > `<CSSTransition>` component that first enter transition does result in
+   * > additional `.appear-*` classes, that way you can choose to style it
+   * > differently.
+   */
+  appear: _propTypes.default.bool,
+
+  /**
+   * Enable or disable enter transitions.
+   */
+  enter: _propTypes.default.bool,
+
+  /**
+   * Enable or disable exit transitions.
+   */
+  exit: _propTypes.default.bool,
+
+  /**
+   * The duration of the transition, in milliseconds.
+   * Required unless `addEndListener` is provided.
+   *
+   * You may specify a single timeout for all transitions:
+   *
+   * ```jsx
+   * timeout={500}
+   * ```
+   *
+   * or individually:
+   *
+   * ```jsx
+   * timeout={{
+   *  appear: 500,
+   *  enter: 300,
+   *  exit: 500,
+   * }}
+   * ```
+   *
+   * - `appear` defaults to the value of `enter`
+   * - `enter` defaults to `0`
+   * - `exit` defaults to `0`
+   *
+   * @type {number | { enter?: number, exit?: number, appear?: number }}
+   */
+  timeout: function timeout(props) {
+    var pt = _PropTypes.timeoutsShape;
+    if (!props.addEndListener) pt = pt.isRequired;
+
+    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    return pt.apply(void 0, [props].concat(args));
+  },
+
+  /**
+   * Add a custom transition end trigger. Called with the transitioning
+   * DOM node and a `done` callback. Allows for more fine grained transition end
+   * logic. Timeouts are still used as a fallback if provided.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * ```jsx
+   * addEndListener={(node, done) => {
+   *   // use the css transitionend event to mark the finish of a transition
+   *   node.addEventListener('transitionend', done, false);
+   * }}
+   * ```
+   */
+  addEndListener: _propTypes.default.func,
+
+  /**
+   * Callback fired before the "entering" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool) -> void
+   */
+  onEnter: _propTypes.default.func,
+
+  /**
+   * Callback fired after the "entering" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntering: _propTypes.default.func,
+
+  /**
+   * Callback fired after the "entered" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool) -> void
+   */
+  onEntered: _propTypes.default.func,
+
+  /**
+   * Callback fired before the "exiting" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExit: _propTypes.default.func,
+
+  /**
+   * Callback fired after the "exiting" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExiting: _propTypes.default.func,
+
+  /**
+   * Callback fired after the "exited" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExited: _propTypes.default.func
+} : {}; // Name the function so it is clearer in the documentation
+
+function noop() {}
+
+Transition.defaultProps = {
+  in: false,
+  mountOnEnter: false,
+  unmountOnExit: false,
+  appear: false,
+  enter: true,
+  exit: true,
+  onEnter: noop,
+  onEntering: noop,
+  onEntered: noop,
+  onExit: noop,
+  onExiting: noop,
+  onExited: noop
+};
+Transition.UNMOUNTED = UNMOUNTED;
+Transition.EXITED = EXITED;
+Transition.ENTERING = ENTERING;
+Transition.ENTERED = ENTERED;
+Transition.EXITING = EXITING;
+var _default = Transition;
+exports.default = _default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/TransitionGroup.js b/node_modules/react-transition-group/cjs/TransitionGroup.js
new file mode 100644
index 0000000000000000000000000000000000000000..800a5360b8e472559d2c77789f0467d6ce8e29a6
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/TransitionGroup.js
@@ -0,0 +1,205 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+var _react = _interopRequireDefault(require("react"));
+
+var _TransitionGroupContext = _interopRequireDefault(require("./TransitionGroupContext"));
+
+var _ChildMapping = require("./utils/ChildMapping");
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
+
+function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
+
+var values = Object.values || function (obj) {
+  return Object.keys(obj).map(function (k) {
+    return obj[k];
+  });
+};
+
+var defaultProps = {
+  component: 'div',
+  childFactory: function childFactory(child) {
+    return child;
+  }
+};
+/**
+ * The `<TransitionGroup>` component manages a set of transition components
+ * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition
+ * components, `<TransitionGroup>` is a state machine for managing the mounting
+ * and unmounting of components over time.
+ *
+ * Consider the example below. As items are removed or added to the TodoList the
+ * `in` prop is toggled automatically by the `<TransitionGroup>`.
+ *
+ * Note that `<TransitionGroup>`  does not define any animation behavior!
+ * Exactly _how_ a list item animates is up to the individual transition
+ * component. This means you can mix and match animations across different list
+ * items.
+ */
+
+var TransitionGroup = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(TransitionGroup, _React$Component);
+
+  function TransitionGroup(props, context) {
+    var _this;
+
+    _this = _React$Component.call(this, props, context) || this;
+
+    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear
+
+
+    _this.state = {
+      contextValue: {
+        isMounting: true
+      },
+      handleExited: handleExited,
+      firstRender: true
+    };
+    return _this;
+  }
+
+  var _proto = TransitionGroup.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.mounted = true;
+    this.setState({
+      contextValue: {
+        isMounting: false
+      }
+    });
+  };
+
+  _proto.componentWillUnmount = function componentWillUnmount() {
+    this.mounted = false;
+  };
+
+  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {
+    var prevChildMapping = _ref.children,
+        handleExited = _ref.handleExited,
+        firstRender = _ref.firstRender;
+    return {
+      children: firstRender ? (0, _ChildMapping.getInitialChildMapping)(nextProps, handleExited) : (0, _ChildMapping.getNextChildMapping)(nextProps, prevChildMapping, handleExited),
+      firstRender: false
+    };
+  } // node is `undefined` when user provided `nodeRef` prop
+  ;
+
+  _proto.handleExited = function handleExited(child, node) {
+    var currentChildMapping = (0, _ChildMapping.getChildMapping)(this.props.children);
+    if (child.key in currentChildMapping) return;
+
+    if (child.props.onExited) {
+      child.props.onExited(node);
+    }
+
+    if (this.mounted) {
+      this.setState(function (state) {
+        var children = _extends({}, state.children);
+
+        delete children[child.key];
+        return {
+          children: children
+        };
+      });
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        Component = _this$props.component,
+        childFactory = _this$props.childFactory,
+        props = _objectWithoutPropertiesLoose(_this$props, ["component", "childFactory"]);
+
+    var contextValue = this.state.contextValue;
+    var children = values(this.state.children).map(childFactory);
+    delete props.appear;
+    delete props.enter;
+    delete props.exit;
+
+    if (Component === null) {
+      return /*#__PURE__*/_react.default.createElement(_TransitionGroupContext.default.Provider, {
+        value: contextValue
+      }, children);
+    }
+
+    return /*#__PURE__*/_react.default.createElement(_TransitionGroupContext.default.Provider, {
+      value: contextValue
+    }, /*#__PURE__*/_react.default.createElement(Component, props, children));
+  };
+
+  return TransitionGroup;
+}(_react.default.Component);
+
+TransitionGroup.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * `<TransitionGroup>` renders a `<div>` by default. You can change this
+   * behavior by providing a `component` prop.
+   * If you use React v16+ and would like to avoid a wrapping `<div>` element
+   * you can pass in `component={null}`. This is useful if the wrapping div
+   * borks your css styles.
+   */
+  component: _propTypes.default.any,
+
+  /**
+   * A set of `<Transition>` components, that are toggled `in` and out as they
+   * leave. the `<TransitionGroup>` will inject specific transition props, so
+   * remember to spread them through if you are wrapping the `<Transition>` as
+   * with our `<Fade>` example.
+   *
+   * While this component is meant for multiple `Transition` or `CSSTransition`
+   * children, sometimes you may want to have a single transition child with
+   * content that you want to be transitioned out and in when you change it
+   * (e.g. routes, images etc.) In that case you can change the `key` prop of
+   * the transition child as you change its content, this will cause
+   * `TransitionGroup` to transition the child out and back in.
+   */
+  children: _propTypes.default.node,
+
+  /**
+   * A convenience prop that enables or disables appear animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  appear: _propTypes.default.bool,
+
+  /**
+   * A convenience prop that enables or disables enter animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  enter: _propTypes.default.bool,
+
+  /**
+   * A convenience prop that enables or disables exit animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  exit: _propTypes.default.bool,
+
+  /**
+   * You may need to apply reactive updates to a child as it is exiting.
+   * This is generally done by using `cloneElement` however in the case of an exiting
+   * child the element has already been removed and not accessible to the consumer.
+   *
+   * If you do need to update a child as it leaves you can provide a `childFactory`
+   * to wrap every child, even the ones that are leaving.
+   *
+   * @type Function(child: ReactElement) -> ReactElement
+   */
+  childFactory: _propTypes.default.func
+} : {};
+TransitionGroup.defaultProps = defaultProps;
+var _default = TransitionGroup;
+exports.default = _default;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/TransitionGroupContext.js b/node_modules/react-transition-group/cjs/TransitionGroupContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..4f5372e6510523615753db78b5111aabc9606e8b
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/TransitionGroupContext.js
@@ -0,0 +1,13 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var _react = _interopRequireDefault(require("react"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var _default = _react.default.createContext(null);
+
+exports.default = _default;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/config.js b/node_modules/react-transition-group/cjs/config.js
new file mode 100644
index 0000000000000000000000000000000000000000..7842584ac901a2984bca0ef7315d94b51e8977af
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/config.js
@@ -0,0 +1,9 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+var _default = {
+  disabled: false
+};
+exports.default = _default;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/index.js b/node_modules/react-transition-group/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9b54f9f4c166b4dcf63503adf8867260317b005
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/index.js
@@ -0,0 +1,30 @@
+"use strict";
+
+exports.__esModule = true;
+exports.config = exports.Transition = exports.TransitionGroup = exports.SwitchTransition = exports.ReplaceTransition = exports.CSSTransition = void 0;
+
+var _CSSTransition = _interopRequireDefault(require("./CSSTransition"));
+
+exports.CSSTransition = _CSSTransition.default;
+
+var _ReplaceTransition = _interopRequireDefault(require("./ReplaceTransition"));
+
+exports.ReplaceTransition = _ReplaceTransition.default;
+
+var _SwitchTransition = _interopRequireDefault(require("./SwitchTransition"));
+
+exports.SwitchTransition = _SwitchTransition.default;
+
+var _TransitionGroup = _interopRequireDefault(require("./TransitionGroup"));
+
+exports.TransitionGroup = _TransitionGroup.default;
+
+var _Transition = _interopRequireDefault(require("./Transition"));
+
+exports.Transition = _Transition.default;
+
+var _config = _interopRequireDefault(require("./config"));
+
+exports.config = _config.default;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/utils/ChildMapping.js b/node_modules/react-transition-group/cjs/utils/ChildMapping.js
new file mode 100644
index 0000000000000000000000000000000000000000..5454b9e10de51715b6aead9eafd8c5c2f4060f72
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/utils/ChildMapping.js
@@ -0,0 +1,150 @@
+"use strict";
+
+exports.__esModule = true;
+exports.getChildMapping = getChildMapping;
+exports.mergeChildMappings = mergeChildMappings;
+exports.getInitialChildMapping = getInitialChildMapping;
+exports.getNextChildMapping = getNextChildMapping;
+
+var _react = require("react");
+
+/**
+ * Given `this.props.children`, return an object mapping key to child.
+ *
+ * @param {*} children `this.props.children`
+ * @return {object} Mapping of key to child
+ */
+function getChildMapping(children, mapFn) {
+  var mapper = function mapper(child) {
+    return mapFn && (0, _react.isValidElement)(child) ? mapFn(child) : child;
+  };
+
+  var result = Object.create(null);
+  if (children) _react.Children.map(children, function (c) {
+    return c;
+  }).forEach(function (child) {
+    // run the map function here instead so that the key is the computed one
+    result[child.key] = mapper(child);
+  });
+  return result;
+}
+/**
+ * When you're adding or removing children some may be added or removed in the
+ * same render pass. We want to show *both* since we want to simultaneously
+ * animate elements in and out. This function takes a previous set of keys
+ * and a new set of keys and merges them with its best guess of the correct
+ * ordering. In the future we may expose some of the utilities in
+ * ReactMultiChild to make this easy, but for now React itself does not
+ * directly have this concept of the union of prevChildren and nextChildren
+ * so we implement it here.
+ *
+ * @param {object} prev prev children as returned from
+ * `ReactTransitionChildMapping.getChildMapping()`.
+ * @param {object} next next children as returned from
+ * `ReactTransitionChildMapping.getChildMapping()`.
+ * @return {object} a key set that contains all keys in `prev` and all keys
+ * in `next` in a reasonable order.
+ */
+
+
+function mergeChildMappings(prev, next) {
+  prev = prev || {};
+  next = next || {};
+
+  function getValueForKey(key) {
+    return key in next ? next[key] : prev[key];
+  } // For each key of `next`, the list of keys to insert before that key in
+  // the combined list
+
+
+  var nextKeysPending = Object.create(null);
+  var pendingKeys = [];
+
+  for (var prevKey in prev) {
+    if (prevKey in next) {
+      if (pendingKeys.length) {
+        nextKeysPending[prevKey] = pendingKeys;
+        pendingKeys = [];
+      }
+    } else {
+      pendingKeys.push(prevKey);
+    }
+  }
+
+  var i;
+  var childMapping = {};
+
+  for (var nextKey in next) {
+    if (nextKeysPending[nextKey]) {
+      for (i = 0; i < nextKeysPending[nextKey].length; i++) {
+        var pendingNextKey = nextKeysPending[nextKey][i];
+        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
+      }
+    }
+
+    childMapping[nextKey] = getValueForKey(nextKey);
+  } // Finally, add the keys which didn't appear before any key in `next`
+
+
+  for (i = 0; i < pendingKeys.length; i++) {
+    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
+  }
+
+  return childMapping;
+}
+
+function getProp(child, prop, props) {
+  return props[prop] != null ? props[prop] : child.props[prop];
+}
+
+function getInitialChildMapping(props, onExited) {
+  return getChildMapping(props.children, function (child) {
+    return (0, _react.cloneElement)(child, {
+      onExited: onExited.bind(null, child),
+      in: true,
+      appear: getProp(child, 'appear', props),
+      enter: getProp(child, 'enter', props),
+      exit: getProp(child, 'exit', props)
+    });
+  });
+}
+
+function getNextChildMapping(nextProps, prevChildMapping, onExited) {
+  var nextChildMapping = getChildMapping(nextProps.children);
+  var children = mergeChildMappings(prevChildMapping, nextChildMapping);
+  Object.keys(children).forEach(function (key) {
+    var child = children[key];
+    if (!(0, _react.isValidElement)(child)) return;
+    var hasPrev = (key in prevChildMapping);
+    var hasNext = (key in nextChildMapping);
+    var prevChild = prevChildMapping[key];
+    var isLeaving = (0, _react.isValidElement)(prevChild) && !prevChild.props.in; // item is new (entering)
+
+    if (hasNext && (!hasPrev || isLeaving)) {
+      // console.log('entering', key)
+      children[key] = (0, _react.cloneElement)(child, {
+        onExited: onExited.bind(null, child),
+        in: true,
+        exit: getProp(child, 'exit', nextProps),
+        enter: getProp(child, 'enter', nextProps)
+      });
+    } else if (!hasNext && hasPrev && !isLeaving) {
+      // item is old (exiting)
+      // console.log('leaving', key)
+      children[key] = (0, _react.cloneElement)(child, {
+        in: false
+      });
+    } else if (hasNext && hasPrev && (0, _react.isValidElement)(prevChild)) {
+      // item hasn't changed transition states
+      // copy over the last transition props;
+      // console.log('unchanged', key)
+      children[key] = (0, _react.cloneElement)(child, {
+        onExited: onExited.bind(null, child),
+        in: prevChild.props.in,
+        exit: getProp(child, 'exit', nextProps),
+        enter: getProp(child, 'enter', nextProps)
+      });
+    }
+  });
+  return children;
+}
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/utils/PropTypes.js b/node_modules/react-transition-group/cjs/utils/PropTypes.js
new file mode 100644
index 0000000000000000000000000000000000000000..69dbba080bfaa99e3a8ee07e9ad0271b483436d6
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/utils/PropTypes.js
@@ -0,0 +1,28 @@
+"use strict";
+
+exports.__esModule = true;
+exports.classNamesShape = exports.timeoutsShape = void 0;
+
+var _propTypes = _interopRequireDefault(require("prop-types"));
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var timeoutsShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({
+  enter: _propTypes.default.number,
+  exit: _propTypes.default.number,
+  appear: _propTypes.default.number
+}).isRequired]) : null;
+exports.timeoutsShape = timeoutsShape;
+var classNamesShape = process.env.NODE_ENV !== 'production' ? _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
+  enter: _propTypes.default.string,
+  exit: _propTypes.default.string,
+  active: _propTypes.default.string
+}), _propTypes.default.shape({
+  enter: _propTypes.default.string,
+  enterDone: _propTypes.default.string,
+  enterActive: _propTypes.default.string,
+  exit: _propTypes.default.string,
+  exitDone: _propTypes.default.string,
+  exitActive: _propTypes.default.string
+})]) : null;
+exports.classNamesShape = classNamesShape;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/utils/SimpleSet.js b/node_modules/react-transition-group/cjs/utils/SimpleSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..63069adc0042320aac50e25a7923bb44fcc76a39
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/utils/SimpleSet.js
@@ -0,0 +1,37 @@
+"use strict";
+
+exports.__esModule = true;
+exports.default = void 0;
+
+var SimpleSet = /*#__PURE__*/function () {
+  function SimpleSet() {
+    this.v = [];
+  }
+
+  var _proto = SimpleSet.prototype;
+
+  _proto.clear = function clear() {
+    this.v.length = 0;
+  };
+
+  _proto.has = function has(k) {
+    return this.v.indexOf(k) !== -1;
+  };
+
+  _proto.add = function add(k) {
+    if (this.has(k)) return;
+    this.v.push(k);
+  };
+
+  _proto.delete = function _delete(k) {
+    var idx = this.v.indexOf(k);
+    if (idx === -1) return false;
+    this.v.splice(idx, 1);
+    return true;
+  };
+
+  return SimpleSet;
+}();
+
+exports.default = SimpleSet;
+module.exports = exports.default;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/cjs/utils/reflow.js b/node_modules/react-transition-group/cjs/utils/reflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..a03558b52b2a3d4f91c2616c4fb6b0b5ed32a79f
--- /dev/null
+++ b/node_modules/react-transition-group/cjs/utils/reflow.js
@@ -0,0 +1,10 @@
+"use strict";
+
+exports.__esModule = true;
+exports.forceReflow = void 0;
+
+var forceReflow = function forceReflow(node) {
+  return node.scrollTop;
+};
+
+exports.forceReflow = forceReflow;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/config/package.json b/node_modules/react-transition-group/config/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d0fe72c7d7e8cd44301f4893208abd69dbc6478c
--- /dev/null
+++ b/node_modules/react-transition-group/config/package.json
@@ -0,0 +1,6 @@
+{
+  "name": "react-transition-group/config",
+  "private": true,
+  "main": "../cjs/config.js",
+  "module": "../esm/config.js"
+}
diff --git a/node_modules/react-transition-group/dist/react-transition-group.js b/node_modules/react-transition-group/dist/react-transition-group.js
new file mode 100644
index 0000000000000000000000000000000000000000..a16945276d5582f0d9e2feb071808b639ede8f3f
--- /dev/null
+++ b/node_modules/react-transition-group/dist/react-transition-group.js
@@ -0,0 +1,2840 @@
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom')) :
+  typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom'], factory) :
+  (global = global || self, factory(global.ReactTransitionGroup = {}, global.React, global.ReactDOM));
+}(this, (function (exports, React, ReactDOM) { 'use strict';
+
+  var React__default = 'default' in React ? React['default'] : React;
+  ReactDOM = ReactDOM && Object.prototype.hasOwnProperty.call(ReactDOM, 'default') ? ReactDOM['default'] : ReactDOM;
+
+  function _extends() {
+    _extends = Object.assign || function (target) {
+      for (var i = 1; i < arguments.length; i++) {
+        var source = arguments[i];
+
+        for (var key in source) {
+          if (Object.prototype.hasOwnProperty.call(source, key)) {
+            target[key] = source[key];
+          }
+        }
+      }
+
+      return target;
+    };
+
+    return _extends.apply(this, arguments);
+  }
+
+  function _objectWithoutPropertiesLoose(source, excluded) {
+    if (source == null) return {};
+    var target = {};
+    var sourceKeys = Object.keys(source);
+    var key, i;
+
+    for (i = 0; i < sourceKeys.length; i++) {
+      key = sourceKeys[i];
+      if (excluded.indexOf(key) >= 0) continue;
+      target[key] = source[key];
+    }
+
+    return target;
+  }
+
+  function _inheritsLoose(subClass, superClass) {
+    subClass.prototype = Object.create(superClass.prototype);
+    subClass.prototype.constructor = subClass;
+    subClass.__proto__ = superClass;
+  }
+
+  function createCommonjsModule(fn, module) {
+  	return module = { exports: {} }, fn(module, module.exports), module.exports;
+  }
+
+  var reactIs_development = createCommonjsModule(function (module, exports) {
+
+
+
+  {
+    (function() {
+
+  // The Symbol used to tag the ReactElement-like types. If there is no native Symbol
+  // nor polyfill, then a plain number is used for performance.
+  var hasSymbol = typeof Symbol === 'function' && Symbol.for;
+  var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
+  var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
+  var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
+  var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
+  var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
+  var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
+  var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
+  // (unstable) APIs that have been removed. Can we remove the symbols?
+
+  var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
+  var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
+  var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
+  var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
+  var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
+  var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
+  var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
+  var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
+  var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
+  var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
+  var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
+
+  function isValidElementType(type) {
+    return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
+    type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
+  }
+
+  function typeOf(object) {
+    if (typeof object === 'object' && object !== null) {
+      var $$typeof = object.$$typeof;
+
+      switch ($$typeof) {
+        case REACT_ELEMENT_TYPE:
+          var type = object.type;
+
+          switch (type) {
+            case REACT_ASYNC_MODE_TYPE:
+            case REACT_CONCURRENT_MODE_TYPE:
+            case REACT_FRAGMENT_TYPE:
+            case REACT_PROFILER_TYPE:
+            case REACT_STRICT_MODE_TYPE:
+            case REACT_SUSPENSE_TYPE:
+              return type;
+
+            default:
+              var $$typeofType = type && type.$$typeof;
+
+              switch ($$typeofType) {
+                case REACT_CONTEXT_TYPE:
+                case REACT_FORWARD_REF_TYPE:
+                case REACT_LAZY_TYPE:
+                case REACT_MEMO_TYPE:
+                case REACT_PROVIDER_TYPE:
+                  return $$typeofType;
+
+                default:
+                  return $$typeof;
+              }
+
+          }
+
+        case REACT_PORTAL_TYPE:
+          return $$typeof;
+      }
+    }
+
+    return undefined;
+  } // AsyncMode is deprecated along with isAsyncMode
+
+  var AsyncMode = REACT_ASYNC_MODE_TYPE;
+  var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
+  var ContextConsumer = REACT_CONTEXT_TYPE;
+  var ContextProvider = REACT_PROVIDER_TYPE;
+  var Element = REACT_ELEMENT_TYPE;
+  var ForwardRef = REACT_FORWARD_REF_TYPE;
+  var Fragment = REACT_FRAGMENT_TYPE;
+  var Lazy = REACT_LAZY_TYPE;
+  var Memo = REACT_MEMO_TYPE;
+  var Portal = REACT_PORTAL_TYPE;
+  var Profiler = REACT_PROFILER_TYPE;
+  var StrictMode = REACT_STRICT_MODE_TYPE;
+  var Suspense = REACT_SUSPENSE_TYPE;
+  var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
+
+  function isAsyncMode(object) {
+    {
+      if (!hasWarnedAboutDeprecatedIsAsyncMode) {
+        hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
+
+        console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
+      }
+    }
+
+    return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
+  }
+  function isConcurrentMode(object) {
+    return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
+  }
+  function isContextConsumer(object) {
+    return typeOf(object) === REACT_CONTEXT_TYPE;
+  }
+  function isContextProvider(object) {
+    return typeOf(object) === REACT_PROVIDER_TYPE;
+  }
+  function isElement(object) {
+    return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
+  }
+  function isForwardRef(object) {
+    return typeOf(object) === REACT_FORWARD_REF_TYPE;
+  }
+  function isFragment(object) {
+    return typeOf(object) === REACT_FRAGMENT_TYPE;
+  }
+  function isLazy(object) {
+    return typeOf(object) === REACT_LAZY_TYPE;
+  }
+  function isMemo(object) {
+    return typeOf(object) === REACT_MEMO_TYPE;
+  }
+  function isPortal(object) {
+    return typeOf(object) === REACT_PORTAL_TYPE;
+  }
+  function isProfiler(object) {
+    return typeOf(object) === REACT_PROFILER_TYPE;
+  }
+  function isStrictMode(object) {
+    return typeOf(object) === REACT_STRICT_MODE_TYPE;
+  }
+  function isSuspense(object) {
+    return typeOf(object) === REACT_SUSPENSE_TYPE;
+  }
+
+  exports.AsyncMode = AsyncMode;
+  exports.ConcurrentMode = ConcurrentMode;
+  exports.ContextConsumer = ContextConsumer;
+  exports.ContextProvider = ContextProvider;
+  exports.Element = Element;
+  exports.ForwardRef = ForwardRef;
+  exports.Fragment = Fragment;
+  exports.Lazy = Lazy;
+  exports.Memo = Memo;
+  exports.Portal = Portal;
+  exports.Profiler = Profiler;
+  exports.StrictMode = StrictMode;
+  exports.Suspense = Suspense;
+  exports.isAsyncMode = isAsyncMode;
+  exports.isConcurrentMode = isConcurrentMode;
+  exports.isContextConsumer = isContextConsumer;
+  exports.isContextProvider = isContextProvider;
+  exports.isElement = isElement;
+  exports.isForwardRef = isForwardRef;
+  exports.isFragment = isFragment;
+  exports.isLazy = isLazy;
+  exports.isMemo = isMemo;
+  exports.isPortal = isPortal;
+  exports.isProfiler = isProfiler;
+  exports.isStrictMode = isStrictMode;
+  exports.isSuspense = isSuspense;
+  exports.isValidElementType = isValidElementType;
+  exports.typeOf = typeOf;
+    })();
+  }
+  });
+  var reactIs_development_1 = reactIs_development.AsyncMode;
+  var reactIs_development_2 = reactIs_development.ConcurrentMode;
+  var reactIs_development_3 = reactIs_development.ContextConsumer;
+  var reactIs_development_4 = reactIs_development.ContextProvider;
+  var reactIs_development_5 = reactIs_development.Element;
+  var reactIs_development_6 = reactIs_development.ForwardRef;
+  var reactIs_development_7 = reactIs_development.Fragment;
+  var reactIs_development_8 = reactIs_development.Lazy;
+  var reactIs_development_9 = reactIs_development.Memo;
+  var reactIs_development_10 = reactIs_development.Portal;
+  var reactIs_development_11 = reactIs_development.Profiler;
+  var reactIs_development_12 = reactIs_development.StrictMode;
+  var reactIs_development_13 = reactIs_development.Suspense;
+  var reactIs_development_14 = reactIs_development.isAsyncMode;
+  var reactIs_development_15 = reactIs_development.isConcurrentMode;
+  var reactIs_development_16 = reactIs_development.isContextConsumer;
+  var reactIs_development_17 = reactIs_development.isContextProvider;
+  var reactIs_development_18 = reactIs_development.isElement;
+  var reactIs_development_19 = reactIs_development.isForwardRef;
+  var reactIs_development_20 = reactIs_development.isFragment;
+  var reactIs_development_21 = reactIs_development.isLazy;
+  var reactIs_development_22 = reactIs_development.isMemo;
+  var reactIs_development_23 = reactIs_development.isPortal;
+  var reactIs_development_24 = reactIs_development.isProfiler;
+  var reactIs_development_25 = reactIs_development.isStrictMode;
+  var reactIs_development_26 = reactIs_development.isSuspense;
+  var reactIs_development_27 = reactIs_development.isValidElementType;
+  var reactIs_development_28 = reactIs_development.typeOf;
+
+  var reactIs = createCommonjsModule(function (module) {
+
+  {
+    module.exports = reactIs_development;
+  }
+  });
+
+  /*
+  object-assign
+  (c) Sindre Sorhus
+  @license MIT
+  */
+  /* eslint-disable no-unused-vars */
+  var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+  var hasOwnProperty = Object.prototype.hasOwnProperty;
+  var propIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+  function toObject(val) {
+  	if (val === null || val === undefined) {
+  		throw new TypeError('Object.assign cannot be called with null or undefined');
+  	}
+
+  	return Object(val);
+  }
+
+  function shouldUseNative() {
+  	try {
+  		if (!Object.assign) {
+  			return false;
+  		}
+
+  		// Detect buggy property enumeration order in older V8 versions.
+
+  		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
+  		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
+  		test1[5] = 'de';
+  		if (Object.getOwnPropertyNames(test1)[0] === '5') {
+  			return false;
+  		}
+
+  		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+  		var test2 = {};
+  		for (var i = 0; i < 10; i++) {
+  			test2['_' + String.fromCharCode(i)] = i;
+  		}
+  		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+  			return test2[n];
+  		});
+  		if (order2.join('') !== '0123456789') {
+  			return false;
+  		}
+
+  		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
+  		var test3 = {};
+  		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+  			test3[letter] = letter;
+  		});
+  		if (Object.keys(Object.assign({}, test3)).join('') !==
+  				'abcdefghijklmnopqrst') {
+  			return false;
+  		}
+
+  		return true;
+  	} catch (err) {
+  		// We don't expect any of the above to throw, but better to be safe.
+  		return false;
+  	}
+  }
+
+  var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
+  	var from;
+  	var to = toObject(target);
+  	var symbols;
+
+  	for (var s = 1; s < arguments.length; s++) {
+  		from = Object(arguments[s]);
+
+  		for (var key in from) {
+  			if (hasOwnProperty.call(from, key)) {
+  				to[key] = from[key];
+  			}
+  		}
+
+  		if (getOwnPropertySymbols) {
+  			symbols = getOwnPropertySymbols(from);
+  			for (var i = 0; i < symbols.length; i++) {
+  				if (propIsEnumerable.call(from, symbols[i])) {
+  					to[symbols[i]] = from[symbols[i]];
+  				}
+  			}
+  		}
+  	}
+
+  	return to;
+  };
+
+  /**
+   * Copyright (c) 2013-present, Facebook, Inc.
+   *
+   * This source code is licensed under the MIT license found in the
+   * LICENSE file in the root directory of this source tree.
+   */
+
+  var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
+
+  var ReactPropTypesSecret_1 = ReactPropTypesSecret;
+
+  var printWarning = function() {};
+
+  {
+    var ReactPropTypesSecret$1 = ReactPropTypesSecret_1;
+    var loggedTypeFailures = {};
+    var has = Function.call.bind(Object.prototype.hasOwnProperty);
+
+    printWarning = function(text) {
+      var message = 'Warning: ' + text;
+      if (typeof console !== 'undefined') {
+        console.error(message);
+      }
+      try {
+        // --- Welcome to debugging React ---
+        // This error was thrown as a convenience so that you can use this stack
+        // to find the callsite that caused this warning to fire.
+        throw new Error(message);
+      } catch (x) {}
+    };
+  }
+
+  /**
+   * Assert that the values match with the type specs.
+   * Error messages are memorized and will only be shown once.
+   *
+   * @param {object} typeSpecs Map of name to a ReactPropType
+   * @param {object} values Runtime values that need to be type-checked
+   * @param {string} location e.g. "prop", "context", "child context"
+   * @param {string} componentName Name of the component for error messages.
+   * @param {?Function} getStack Returns the component stack.
+   * @private
+   */
+  function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
+    {
+      for (var typeSpecName in typeSpecs) {
+        if (has(typeSpecs, typeSpecName)) {
+          var error;
+          // Prop type validation may throw. In case they do, we don't want to
+          // fail the render phase where it didn't fail before. So we log it.
+          // After these have been cleaned up, we'll let them throw.
+          try {
+            // This is intentionally an invariant that gets caught. It's the same
+            // behavior as without this statement except with a better message.
+            if (typeof typeSpecs[typeSpecName] !== 'function') {
+              var err = Error(
+                (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
+                'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'
+              );
+              err.name = 'Invariant Violation';
+              throw err;
+            }
+            error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1);
+          } catch (ex) {
+            error = ex;
+          }
+          if (error && !(error instanceof Error)) {
+            printWarning(
+              (componentName || 'React class') + ': type specification of ' +
+              location + ' `' + typeSpecName + '` is invalid; the type checker ' +
+              'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
+              'You may have forgotten to pass an argument to the type checker ' +
+              'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
+              'shape all require an argument).'
+            );
+          }
+          if (error instanceof Error && !(error.message in loggedTypeFailures)) {
+            // Only monitor this failure once because there tends to be a lot of the
+            // same error.
+            loggedTypeFailures[error.message] = true;
+
+            var stack = getStack ? getStack() : '';
+
+            printWarning(
+              'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
+            );
+          }
+        }
+      }
+    }
+  }
+
+  /**
+   * Resets warning cache when testing.
+   *
+   * @private
+   */
+  checkPropTypes.resetWarningCache = function() {
+    {
+      loggedTypeFailures = {};
+    }
+  };
+
+  var checkPropTypes_1 = checkPropTypes;
+
+  var has$1 = Function.call.bind(Object.prototype.hasOwnProperty);
+  var printWarning$1 = function() {};
+
+  {
+    printWarning$1 = function(text) {
+      var message = 'Warning: ' + text;
+      if (typeof console !== 'undefined') {
+        console.error(message);
+      }
+      try {
+        // --- Welcome to debugging React ---
+        // This error was thrown as a convenience so that you can use this stack
+        // to find the callsite that caused this warning to fire.
+        throw new Error(message);
+      } catch (x) {}
+    };
+  }
+
+  function emptyFunctionThatReturnsNull() {
+    return null;
+  }
+
+  var factoryWithTypeCheckers = function(isValidElement, throwOnDirectAccess) {
+    /* global Symbol */
+    var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
+    var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
+
+    /**
+     * Returns the iterator method function contained on the iterable object.
+     *
+     * Be sure to invoke the function with the iterable as context:
+     *
+     *     var iteratorFn = getIteratorFn(myIterable);
+     *     if (iteratorFn) {
+     *       var iterator = iteratorFn.call(myIterable);
+     *       ...
+     *     }
+     *
+     * @param {?object} maybeIterable
+     * @return {?function}
+     */
+    function getIteratorFn(maybeIterable) {
+      var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
+      if (typeof iteratorFn === 'function') {
+        return iteratorFn;
+      }
+    }
+
+    /**
+     * Collection of methods that allow declaration and validation of props that are
+     * supplied to React components. Example usage:
+     *
+     *   var Props = require('ReactPropTypes');
+     *   var MyArticle = React.createClass({
+     *     propTypes: {
+     *       // An optional string prop named "description".
+     *       description: Props.string,
+     *
+     *       // A required enum prop named "category".
+     *       category: Props.oneOf(['News','Photos']).isRequired,
+     *
+     *       // A prop named "dialog" that requires an instance of Dialog.
+     *       dialog: Props.instanceOf(Dialog).isRequired
+     *     },
+     *     render: function() { ... }
+     *   });
+     *
+     * A more formal specification of how these methods are used:
+     *
+     *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
+     *   decl := ReactPropTypes.{type}(.isRequired)?
+     *
+     * Each and every declaration produces a function with the same signature. This
+     * allows the creation of custom validation functions. For example:
+     *
+     *  var MyLink = React.createClass({
+     *    propTypes: {
+     *      // An optional string or URI prop named "href".
+     *      href: function(props, propName, componentName) {
+     *        var propValue = props[propName];
+     *        if (propValue != null && typeof propValue !== 'string' &&
+     *            !(propValue instanceof URI)) {
+     *          return new Error(
+     *            'Expected a string or an URI for ' + propName + ' in ' +
+     *            componentName
+     *          );
+     *        }
+     *      }
+     *    },
+     *    render: function() {...}
+     *  });
+     *
+     * @internal
+     */
+
+    var ANONYMOUS = '<<anonymous>>';
+
+    // Important!
+    // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
+    var ReactPropTypes = {
+      array: createPrimitiveTypeChecker('array'),
+      bool: createPrimitiveTypeChecker('boolean'),
+      func: createPrimitiveTypeChecker('function'),
+      number: createPrimitiveTypeChecker('number'),
+      object: createPrimitiveTypeChecker('object'),
+      string: createPrimitiveTypeChecker('string'),
+      symbol: createPrimitiveTypeChecker('symbol'),
+
+      any: createAnyTypeChecker(),
+      arrayOf: createArrayOfTypeChecker,
+      element: createElementTypeChecker(),
+      elementType: createElementTypeTypeChecker(),
+      instanceOf: createInstanceTypeChecker,
+      node: createNodeChecker(),
+      objectOf: createObjectOfTypeChecker,
+      oneOf: createEnumTypeChecker,
+      oneOfType: createUnionTypeChecker,
+      shape: createShapeTypeChecker,
+      exact: createStrictShapeTypeChecker,
+    };
+
+    /**
+     * inlined Object.is polyfill to avoid requiring consumers ship their own
+     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+     */
+    /*eslint-disable no-self-compare*/
+    function is(x, y) {
+      // SameValue algorithm
+      if (x === y) {
+        // Steps 1-5, 7-10
+        // Steps 6.b-6.e: +0 != -0
+        return x !== 0 || 1 / x === 1 / y;
+      } else {
+        // Step 6.a: NaN == NaN
+        return x !== x && y !== y;
+      }
+    }
+    /*eslint-enable no-self-compare*/
+
+    /**
+     * We use an Error-like object for backward compatibility as people may call
+     * PropTypes directly and inspect their output. However, we don't use real
+     * Errors anymore. We don't inspect their stack anyway, and creating them
+     * is prohibitively expensive if they are created too often, such as what
+     * happens in oneOfType() for any type before the one that matched.
+     */
+    function PropTypeError(message) {
+      this.message = message;
+      this.stack = '';
+    }
+    // Make `instanceof Error` still work for returned errors.
+    PropTypeError.prototype = Error.prototype;
+
+    function createChainableTypeChecker(validate) {
+      {
+        var manualPropTypeCallCache = {};
+        var manualPropTypeWarningCount = 0;
+      }
+      function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
+        componentName = componentName || ANONYMOUS;
+        propFullName = propFullName || propName;
+
+        if (secret !== ReactPropTypesSecret_1) {
+          if (throwOnDirectAccess) {
+            // New behavior only for users of `prop-types` package
+            var err = new Error(
+              'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
+              'Use `PropTypes.checkPropTypes()` to call them. ' +
+              'Read more at http://fb.me/use-check-prop-types'
+            );
+            err.name = 'Invariant Violation';
+            throw err;
+          } else if ( typeof console !== 'undefined') {
+            // Old behavior for people using React.PropTypes
+            var cacheKey = componentName + ':' + propName;
+            if (
+              !manualPropTypeCallCache[cacheKey] &&
+              // Avoid spamming the console because they are often not actionable except for lib authors
+              manualPropTypeWarningCount < 3
+            ) {
+              printWarning$1(
+                'You are manually calling a React.PropTypes validation ' +
+                'function for the `' + propFullName + '` prop on `' + componentName  + '`. This is deprecated ' +
+                'and will throw in the standalone `prop-types` package. ' +
+                'You may be seeing this warning due to a third-party PropTypes ' +
+                'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
+              );
+              manualPropTypeCallCache[cacheKey] = true;
+              manualPropTypeWarningCount++;
+            }
+          }
+        }
+        if (props[propName] == null) {
+          if (isRequired) {
+            if (props[propName] === null) {
+              return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
+            }
+            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
+          }
+          return null;
+        } else {
+          return validate(props, propName, componentName, location, propFullName);
+        }
+      }
+
+      var chainedCheckType = checkType.bind(null, false);
+      chainedCheckType.isRequired = checkType.bind(null, true);
+
+      return chainedCheckType;
+    }
+
+    function createPrimitiveTypeChecker(expectedType) {
+      function validate(props, propName, componentName, location, propFullName, secret) {
+        var propValue = props[propName];
+        var propType = getPropType(propValue);
+        if (propType !== expectedType) {
+          // `propValue` being instance of, say, date/regexp, pass the 'object'
+          // check, but we can offer a more precise error message here rather than
+          // 'of type `object`'.
+          var preciseType = getPreciseType(propValue);
+
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createAnyTypeChecker() {
+      return createChainableTypeChecker(emptyFunctionThatReturnsNull);
+    }
+
+    function createArrayOfTypeChecker(typeChecker) {
+      function validate(props, propName, componentName, location, propFullName) {
+        if (typeof typeChecker !== 'function') {
+          return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
+        }
+        var propValue = props[propName];
+        if (!Array.isArray(propValue)) {
+          var propType = getPropType(propValue);
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
+        }
+        for (var i = 0; i < propValue.length; i++) {
+          var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret_1);
+          if (error instanceof Error) {
+            return error;
+          }
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createElementTypeChecker() {
+      function validate(props, propName, componentName, location, propFullName) {
+        var propValue = props[propName];
+        if (!isValidElement(propValue)) {
+          var propType = getPropType(propValue);
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createElementTypeTypeChecker() {
+      function validate(props, propName, componentName, location, propFullName) {
+        var propValue = props[propName];
+        if (!reactIs.isValidElementType(propValue)) {
+          var propType = getPropType(propValue);
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createInstanceTypeChecker(expectedClass) {
+      function validate(props, propName, componentName, location, propFullName) {
+        if (!(props[propName] instanceof expectedClass)) {
+          var expectedClassName = expectedClass.name || ANONYMOUS;
+          var actualClassName = getClassName(props[propName]);
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createEnumTypeChecker(expectedValues) {
+      if (!Array.isArray(expectedValues)) {
+        {
+          if (arguments.length > 1) {
+            printWarning$1(
+              'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
+              'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
+            );
+          } else {
+            printWarning$1('Invalid argument supplied to oneOf, expected an array.');
+          }
+        }
+        return emptyFunctionThatReturnsNull;
+      }
+
+      function validate(props, propName, componentName, location, propFullName) {
+        var propValue = props[propName];
+        for (var i = 0; i < expectedValues.length; i++) {
+          if (is(propValue, expectedValues[i])) {
+            return null;
+          }
+        }
+
+        var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
+          var type = getPreciseType(value);
+          if (type === 'symbol') {
+            return String(value);
+          }
+          return value;
+        });
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createObjectOfTypeChecker(typeChecker) {
+      function validate(props, propName, componentName, location, propFullName) {
+        if (typeof typeChecker !== 'function') {
+          return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
+        }
+        var propValue = props[propName];
+        var propType = getPropType(propValue);
+        if (propType !== 'object') {
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
+        }
+        for (var key in propValue) {
+          if (has$1(propValue, key)) {
+            var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
+            if (error instanceof Error) {
+              return error;
+            }
+          }
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createUnionTypeChecker(arrayOfTypeCheckers) {
+      if (!Array.isArray(arrayOfTypeCheckers)) {
+         printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') ;
+        return emptyFunctionThatReturnsNull;
+      }
+
+      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+        var checker = arrayOfTypeCheckers[i];
+        if (typeof checker !== 'function') {
+          printWarning$1(
+            'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
+            'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
+          );
+          return emptyFunctionThatReturnsNull;
+        }
+      }
+
+      function validate(props, propName, componentName, location, propFullName) {
+        for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
+          var checker = arrayOfTypeCheckers[i];
+          if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret_1) == null) {
+            return null;
+          }
+        }
+
+        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createNodeChecker() {
+      function validate(props, propName, componentName, location, propFullName) {
+        if (!isNode(props[propName])) {
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createShapeTypeChecker(shapeTypes) {
+      function validate(props, propName, componentName, location, propFullName) {
+        var propValue = props[propName];
+        var propType = getPropType(propValue);
+        if (propType !== 'object') {
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+        }
+        for (var key in shapeTypes) {
+          var checker = shapeTypes[key];
+          if (!checker) {
+            continue;
+          }
+          var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
+          if (error) {
+            return error;
+          }
+        }
+        return null;
+      }
+      return createChainableTypeChecker(validate);
+    }
+
+    function createStrictShapeTypeChecker(shapeTypes) {
+      function validate(props, propName, componentName, location, propFullName) {
+        var propValue = props[propName];
+        var propType = getPropType(propValue);
+        if (propType !== 'object') {
+          return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
+        }
+        // We need to check all keys in case some are required but missing from
+        // props.
+        var allKeys = objectAssign({}, props[propName], shapeTypes);
+        for (var key in allKeys) {
+          var checker = shapeTypes[key];
+          if (!checker) {
+            return new PropTypeError(
+              'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
+              '\nBad object: ' + JSON.stringify(props[propName], null, '  ') +
+              '\nValid keys: ' +  JSON.stringify(Object.keys(shapeTypes), null, '  ')
+            );
+          }
+          var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret_1);
+          if (error) {
+            return error;
+          }
+        }
+        return null;
+      }
+
+      return createChainableTypeChecker(validate);
+    }
+
+    function isNode(propValue) {
+      switch (typeof propValue) {
+        case 'number':
+        case 'string':
+        case 'undefined':
+          return true;
+        case 'boolean':
+          return !propValue;
+        case 'object':
+          if (Array.isArray(propValue)) {
+            return propValue.every(isNode);
+          }
+          if (propValue === null || isValidElement(propValue)) {
+            return true;
+          }
+
+          var iteratorFn = getIteratorFn(propValue);
+          if (iteratorFn) {
+            var iterator = iteratorFn.call(propValue);
+            var step;
+            if (iteratorFn !== propValue.entries) {
+              while (!(step = iterator.next()).done) {
+                if (!isNode(step.value)) {
+                  return false;
+                }
+              }
+            } else {
+              // Iterator will provide entry [k,v] tuples rather than values.
+              while (!(step = iterator.next()).done) {
+                var entry = step.value;
+                if (entry) {
+                  if (!isNode(entry[1])) {
+                    return false;
+                  }
+                }
+              }
+            }
+          } else {
+            return false;
+          }
+
+          return true;
+        default:
+          return false;
+      }
+    }
+
+    function isSymbol(propType, propValue) {
+      // Native Symbol.
+      if (propType === 'symbol') {
+        return true;
+      }
+
+      // falsy value can't be a Symbol
+      if (!propValue) {
+        return false;
+      }
+
+      // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
+      if (propValue['@@toStringTag'] === 'Symbol') {
+        return true;
+      }
+
+      // Fallback for non-spec compliant Symbols which are polyfilled.
+      if (typeof Symbol === 'function' && propValue instanceof Symbol) {
+        return true;
+      }
+
+      return false;
+    }
+
+    // Equivalent of `typeof` but with special handling for array and regexp.
+    function getPropType(propValue) {
+      var propType = typeof propValue;
+      if (Array.isArray(propValue)) {
+        return 'array';
+      }
+      if (propValue instanceof RegExp) {
+        // Old webkits (at least until Android 4.0) return 'function' rather than
+        // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
+        // passes PropTypes.object.
+        return 'object';
+      }
+      if (isSymbol(propType, propValue)) {
+        return 'symbol';
+      }
+      return propType;
+    }
+
+    // This handles more types than `getPropType`. Only used for error messages.
+    // See `createPrimitiveTypeChecker`.
+    function getPreciseType(propValue) {
+      if (typeof propValue === 'undefined' || propValue === null) {
+        return '' + propValue;
+      }
+      var propType = getPropType(propValue);
+      if (propType === 'object') {
+        if (propValue instanceof Date) {
+          return 'date';
+        } else if (propValue instanceof RegExp) {
+          return 'regexp';
+        }
+      }
+      return propType;
+    }
+
+    // Returns a string that is postfixed to a warning about an invalid type.
+    // For example, "undefined" or "of type array"
+    function getPostfixForTypeWarning(value) {
+      var type = getPreciseType(value);
+      switch (type) {
+        case 'array':
+        case 'object':
+          return 'an ' + type;
+        case 'boolean':
+        case 'date':
+        case 'regexp':
+          return 'a ' + type;
+        default:
+          return type;
+      }
+    }
+
+    // Returns class name of the object, if any.
+    function getClassName(propValue) {
+      if (!propValue.constructor || !propValue.constructor.name) {
+        return ANONYMOUS;
+      }
+      return propValue.constructor.name;
+    }
+
+    ReactPropTypes.checkPropTypes = checkPropTypes_1;
+    ReactPropTypes.resetWarningCache = checkPropTypes_1.resetWarningCache;
+    ReactPropTypes.PropTypes = ReactPropTypes;
+
+    return ReactPropTypes;
+  };
+
+  var propTypes = createCommonjsModule(function (module) {
+  /**
+   * Copyright (c) 2013-present, Facebook, Inc.
+   *
+   * This source code is licensed under the MIT license found in the
+   * LICENSE file in the root directory of this source tree.
+   */
+
+  {
+    var ReactIs = reactIs;
+
+    // By explicitly using `prop-types` you are opting into new development behavior.
+    // http://fb.me/prop-types-in-prod
+    var throwOnDirectAccess = true;
+    module.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess);
+  }
+  });
+  var propTypes_1 = propTypes.object;
+  var propTypes_2 = propTypes.oneOfType;
+  var propTypes_3 = propTypes.element;
+  var propTypes_4 = propTypes.bool;
+  var propTypes_5 = propTypes.func;
+
+  function hasClass(element, className) {
+    if (element.classList) return !!className && element.classList.contains(className);
+    return (" " + (element.className.baseVal || element.className) + " ").indexOf(" " + className + " ") !== -1;
+  }
+
+  function addClass(element, className) {
+    if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + " " + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + " " + className);
+  }
+
+  function replaceClassName(origClass, classToRemove) {
+    return origClass.replace(new RegExp("(^|\\s)" + classToRemove + "(?:\\s|$)", 'g'), '$1').replace(/\s+/g, ' ').replace(/^\s*|\s*$/g, '');
+  }
+
+  function removeClass(element, className) {
+    if (element.classList) {
+      element.classList.remove(className);
+    } else if (typeof element.className === 'string') {
+      element.className = replaceClassName(element.className, className);
+    } else {
+      element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));
+    }
+  }
+
+  var config = {
+    disabled: false
+  };
+
+  var timeoutsShape =  propTypes.oneOfType([propTypes.number, propTypes.shape({
+    enter: propTypes.number,
+    exit: propTypes.number,
+    appear: propTypes.number
+  }).isRequired]) ;
+  var classNamesShape =  propTypes.oneOfType([propTypes.string, propTypes.shape({
+    enter: propTypes.string,
+    exit: propTypes.string,
+    active: propTypes.string
+  }), propTypes.shape({
+    enter: propTypes.string,
+    enterDone: propTypes.string,
+    enterActive: propTypes.string,
+    exit: propTypes.string,
+    exitDone: propTypes.string,
+    exitActive: propTypes.string
+  })]) ;
+
+  var TransitionGroupContext = React__default.createContext(null);
+
+  var forceReflow = function forceReflow(node) {
+    return node.scrollTop;
+  };
+
+  var UNMOUNTED = 'unmounted';
+  var EXITED = 'exited';
+  var ENTERING = 'entering';
+  var ENTERED = 'entered';
+  var EXITING = 'exiting';
+  /**
+   * The Transition component lets you describe a transition from one component
+   * state to another _over time_ with a simple declarative API. Most commonly
+   * it's used to animate the mounting and unmounting of a component, but can also
+   * be used to describe in-place transition states as well.
+   *
+   * ---
+   *
+   * **Note**: `Transition` is a platform-agnostic base component. If you're using
+   * transitions in CSS, you'll probably want to use
+   * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
+   * instead. It inherits all the features of `Transition`, but contains
+   * additional features necessary to play nice with CSS transitions (hence the
+   * name of the component).
+   *
+   * ---
+   *
+   * By default the `Transition` component does not alter the behavior of the
+   * component it renders, it only tracks "enter" and "exit" states for the
+   * components. It's up to you to give meaning and effect to those states. For
+   * example we can add styles to a component when it enters or exits:
+   *
+   * ```jsx
+   * import { Transition } from 'react-transition-group';
+   *
+   * const duration = 300;
+   *
+   * const defaultStyle = {
+   *   transition: `opacity ${duration}ms ease-in-out`,
+   *   opacity: 0,
+   * }
+   *
+   * const transitionStyles = {
+   *   entering: { opacity: 1 },
+   *   entered:  { opacity: 1 },
+   *   exiting:  { opacity: 0 },
+   *   exited:  { opacity: 0 },
+   * };
+   *
+   * const Fade = ({ in: inProp }) => (
+   *   <Transition in={inProp} timeout={duration}>
+   *     {state => (
+   *       <div style={{
+   *         ...defaultStyle,
+   *         ...transitionStyles[state]
+   *       }}>
+   *         I'm a fade Transition!
+   *       </div>
+   *     )}
+   *   </Transition>
+   * );
+   * ```
+   *
+   * There are 4 main states a Transition can be in:
+   *  - `'entering'`
+   *  - `'entered'`
+   *  - `'exiting'`
+   *  - `'exited'`
+   *
+   * Transition state is toggled via the `in` prop. When `true` the component
+   * begins the "Enter" stage. During this stage, the component will shift from
+   * its current transition state, to `'entering'` for the duration of the
+   * transition and then to the `'entered'` stage once it's complete. Let's take
+   * the following example (we'll use the
+   * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
+   *
+   * ```jsx
+   * function App() {
+   *   const [inProp, setInProp] = useState(false);
+   *   return (
+   *     <div>
+   *       <Transition in={inProp} timeout={500}>
+   *         {state => (
+   *           // ...
+   *         )}
+   *       </Transition>
+   *       <button onClick={() => setInProp(true)}>
+   *         Click to Enter
+   *       </button>
+   *     </div>
+   *   );
+   * }
+   * ```
+   *
+   * When the button is clicked the component will shift to the `'entering'` state
+   * and stay there for 500ms (the value of `timeout`) before it finally switches
+   * to `'entered'`.
+   *
+   * When `in` is `false` the same thing happens except the state moves from
+   * `'exiting'` to `'exited'`.
+   */
+
+  var Transition = /*#__PURE__*/function (_React$Component) {
+    _inheritsLoose(Transition, _React$Component);
+
+    function Transition(props, context) {
+      var _this;
+
+      _this = _React$Component.call(this, props, context) || this;
+      var parentGroup = context; // In the context of a TransitionGroup all enters are really appears
+
+      var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
+      var initialStatus;
+      _this.appearStatus = null;
+
+      if (props.in) {
+        if (appear) {
+          initialStatus = EXITED;
+          _this.appearStatus = ENTERING;
+        } else {
+          initialStatus = ENTERED;
+        }
+      } else {
+        if (props.unmountOnExit || props.mountOnEnter) {
+          initialStatus = UNMOUNTED;
+        } else {
+          initialStatus = EXITED;
+        }
+      }
+
+      _this.state = {
+        status: initialStatus
+      };
+      _this.nextCallback = null;
+      return _this;
+    }
+
+    Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
+      var nextIn = _ref.in;
+
+      if (nextIn && prevState.status === UNMOUNTED) {
+        return {
+          status: EXITED
+        };
+      }
+
+      return null;
+    } // getSnapshotBeforeUpdate(prevProps) {
+    //   let nextStatus = null
+    //   if (prevProps !== this.props) {
+    //     const { status } = this.state
+    //     if (this.props.in) {
+    //       if (status !== ENTERING && status !== ENTERED) {
+    //         nextStatus = ENTERING
+    //       }
+    //     } else {
+    //       if (status === ENTERING || status === ENTERED) {
+    //         nextStatus = EXITING
+    //       }
+    //     }
+    //   }
+    //   return { nextStatus }
+    // }
+    ;
+
+    var _proto = Transition.prototype;
+
+    _proto.componentDidMount = function componentDidMount() {
+      this.updateStatus(true, this.appearStatus);
+    };
+
+    _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
+      var nextStatus = null;
+
+      if (prevProps !== this.props) {
+        var status = this.state.status;
+
+        if (this.props.in) {
+          if (status !== ENTERING && status !== ENTERED) {
+            nextStatus = ENTERING;
+          }
+        } else {
+          if (status === ENTERING || status === ENTERED) {
+            nextStatus = EXITING;
+          }
+        }
+      }
+
+      this.updateStatus(false, nextStatus);
+    };
+
+    _proto.componentWillUnmount = function componentWillUnmount() {
+      this.cancelNextCallback();
+    };
+
+    _proto.getTimeouts = function getTimeouts() {
+      var timeout = this.props.timeout;
+      var exit, enter, appear;
+      exit = enter = appear = timeout;
+
+      if (timeout != null && typeof timeout !== 'number') {
+        exit = timeout.exit;
+        enter = timeout.enter; // TODO: remove fallback for next major
+
+        appear = timeout.appear !== undefined ? timeout.appear : enter;
+      }
+
+      return {
+        exit: exit,
+        enter: enter,
+        appear: appear
+      };
+    };
+
+    _proto.updateStatus = function updateStatus(mounting, nextStatus) {
+      if (mounting === void 0) {
+        mounting = false;
+      }
+
+      if (nextStatus !== null) {
+        // nextStatus will always be ENTERING or EXITING.
+        this.cancelNextCallback();
+
+        if (nextStatus === ENTERING) {
+          if (this.props.unmountOnExit || this.props.mountOnEnter) {
+            var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
+            // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
+            // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.
+
+            if (node) forceReflow(node);
+          }
+
+          this.performEnter(mounting);
+        } else {
+          this.performExit();
+        }
+      } else if (this.props.unmountOnExit && this.state.status === EXITED) {
+        this.setState({
+          status: UNMOUNTED
+        });
+      }
+    };
+
+    _proto.performEnter = function performEnter(mounting) {
+      var _this2 = this;
+
+      var enter = this.props.enter;
+      var appearing = this.context ? this.context.isMounting : mounting;
+
+      var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],
+          maybeNode = _ref2[0],
+          maybeAppearing = _ref2[1];
+
+      var timeouts = this.getTimeouts();
+      var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
+      // if we are mounting and running this it means appear _must_ be set
+
+      if (!mounting && !enter || config.disabled) {
+        this.safeSetState({
+          status: ENTERED
+        }, function () {
+          _this2.props.onEntered(maybeNode);
+        });
+        return;
+      }
+
+      this.props.onEnter(maybeNode, maybeAppearing);
+      this.safeSetState({
+        status: ENTERING
+      }, function () {
+        _this2.props.onEntering(maybeNode, maybeAppearing);
+
+        _this2.onTransitionEnd(enterTimeout, function () {
+          _this2.safeSetState({
+            status: ENTERED
+          }, function () {
+            _this2.props.onEntered(maybeNode, maybeAppearing);
+          });
+        });
+      });
+    };
+
+    _proto.performExit = function performExit() {
+      var _this3 = this;
+
+      var exit = this.props.exit;
+      var timeouts = this.getTimeouts();
+      var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED
+
+      if (!exit || config.disabled) {
+        this.safeSetState({
+          status: EXITED
+        }, function () {
+          _this3.props.onExited(maybeNode);
+        });
+        return;
+      }
+
+      this.props.onExit(maybeNode);
+      this.safeSetState({
+        status: EXITING
+      }, function () {
+        _this3.props.onExiting(maybeNode);
+
+        _this3.onTransitionEnd(timeouts.exit, function () {
+          _this3.safeSetState({
+            status: EXITED
+          }, function () {
+            _this3.props.onExited(maybeNode);
+          });
+        });
+      });
+    };
+
+    _proto.cancelNextCallback = function cancelNextCallback() {
+      if (this.nextCallback !== null) {
+        this.nextCallback.cancel();
+        this.nextCallback = null;
+      }
+    };
+
+    _proto.safeSetState = function safeSetState(nextState, callback) {
+      // This shouldn't be necessary, but there are weird race conditions with
+      // setState callbacks and unmounting in testing, so always make sure that
+      // we can cancel any pending setState callbacks after we unmount.
+      callback = this.setNextCallback(callback);
+      this.setState(nextState, callback);
+    };
+
+    _proto.setNextCallback = function setNextCallback(callback) {
+      var _this4 = this;
+
+      var active = true;
+
+      this.nextCallback = function (event) {
+        if (active) {
+          active = false;
+          _this4.nextCallback = null;
+          callback(event);
+        }
+      };
+
+      this.nextCallback.cancel = function () {
+        active = false;
+      };
+
+      return this.nextCallback;
+    };
+
+    _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
+      this.setNextCallback(handler);
+      var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);
+      var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;
+
+      if (!node || doesNotHaveTimeoutOrListener) {
+        setTimeout(this.nextCallback, 0);
+        return;
+      }
+
+      if (this.props.addEndListener) {
+        var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
+            maybeNode = _ref3[0],
+            maybeNextCallback = _ref3[1];
+
+        this.props.addEndListener(maybeNode, maybeNextCallback);
+      }
+
+      if (timeout != null) {
+        setTimeout(this.nextCallback, timeout);
+      }
+    };
+
+    _proto.render = function render() {
+      var status = this.state.status;
+
+      if (status === UNMOUNTED) {
+        return null;
+      }
+
+      var _this$props = this.props,
+          children = _this$props.children,
+          _in = _this$props.in,
+          _mountOnEnter = _this$props.mountOnEnter,
+          _unmountOnExit = _this$props.unmountOnExit,
+          _appear = _this$props.appear,
+          _enter = _this$props.enter,
+          _exit = _this$props.exit,
+          _timeout = _this$props.timeout,
+          _addEndListener = _this$props.addEndListener,
+          _onEnter = _this$props.onEnter,
+          _onEntering = _this$props.onEntering,
+          _onEntered = _this$props.onEntered,
+          _onExit = _this$props.onExit,
+          _onExiting = _this$props.onExiting,
+          _onExited = _this$props.onExited,
+          _nodeRef = _this$props.nodeRef,
+          childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);
+
+      return (
+        /*#__PURE__*/
+        // allows for nested Transitions
+        React__default.createElement(TransitionGroupContext.Provider, {
+          value: null
+        }, typeof children === 'function' ? children(status, childProps) : React__default.cloneElement(React__default.Children.only(children), childProps))
+      );
+    };
+
+    return Transition;
+  }(React__default.Component);
+
+  Transition.contextType = TransitionGroupContext;
+  Transition.propTypes =  {
+    /**
+     * A React reference to DOM element that need to transition:
+     * https://stackoverflow.com/a/51127130/4671932
+     *
+     *   - When `nodeRef` prop is used, `node` is not passed to callback functions
+     *      (e.g. `onEnter`) because user already has direct access to the node.
+     *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new
+     *     `nodeRef` need to be provided to `Transition` with changed `key` prop
+     *     (see
+     *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
+     */
+    nodeRef: propTypes.shape({
+      current: typeof Element === 'undefined' ? propTypes.any : function (propValue, key, componentName, location, propFullName, secret) {
+        var value = propValue[key];
+        return propTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
+      }
+    }),
+
+    /**
+     * A `function` child can be used instead of a React element. This function is
+     * called with the current transition status (`'entering'`, `'entered'`,
+     * `'exiting'`, `'exited'`), which can be used to apply context
+     * specific props to a component.
+     *
+     * ```jsx
+     * <Transition in={this.state.in} timeout={150}>
+     *   {state => (
+     *     <MyComponent className={`fade fade-${state}`} />
+     *   )}
+     * </Transition>
+     * ```
+     */
+    children: propTypes.oneOfType([propTypes.func.isRequired, propTypes.element.isRequired]).isRequired,
+
+    /**
+     * Show the component; triggers the enter or exit states
+     */
+    in: propTypes.bool,
+
+    /**
+     * By default the child component is mounted immediately along with
+     * the parent `Transition` component. If you want to "lazy mount" the component on the
+     * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay
+     * mounted, even on "exited", unless you also specify `unmountOnExit`.
+     */
+    mountOnEnter: propTypes.bool,
+
+    /**
+     * By default the child component stays mounted after it reaches the `'exited'` state.
+     * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.
+     */
+    unmountOnExit: propTypes.bool,
+
+    /**
+     * By default the child component does not perform the enter transition when
+     * it first mounts, regardless of the value of `in`. If you want this
+     * behavior, set both `appear` and `in` to `true`.
+     *
+     * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop
+     * > only adds an additional enter transition. However, in the
+     * > `<CSSTransition>` component that first enter transition does result in
+     * > additional `.appear-*` classes, that way you can choose to style it
+     * > differently.
+     */
+    appear: propTypes.bool,
+
+    /**
+     * Enable or disable enter transitions.
+     */
+    enter: propTypes.bool,
+
+    /**
+     * Enable or disable exit transitions.
+     */
+    exit: propTypes.bool,
+
+    /**
+     * The duration of the transition, in milliseconds.
+     * Required unless `addEndListener` is provided.
+     *
+     * You may specify a single timeout for all transitions:
+     *
+     * ```jsx
+     * timeout={500}
+     * ```
+     *
+     * or individually:
+     *
+     * ```jsx
+     * timeout={{
+     *  appear: 500,
+     *  enter: 300,
+     *  exit: 500,
+     * }}
+     * ```
+     *
+     * - `appear` defaults to the value of `enter`
+     * - `enter` defaults to `0`
+     * - `exit` defaults to `0`
+     *
+     * @type {number | { enter?: number, exit?: number, appear?: number }}
+     */
+    timeout: function timeout(props) {
+      var pt = timeoutsShape;
+      if (!props.addEndListener) pt = pt.isRequired;
+
+      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        args[_key - 1] = arguments[_key];
+      }
+
+      return pt.apply(void 0, [props].concat(args));
+    },
+
+    /**
+     * Add a custom transition end trigger. Called with the transitioning
+     * DOM node and a `done` callback. Allows for more fine grained transition end
+     * logic. Timeouts are still used as a fallback if provided.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * ```jsx
+     * addEndListener={(node, done) => {
+     *   // use the css transitionend event to mark the finish of a transition
+     *   node.addEventListener('transitionend', done, false);
+     * }}
+     * ```
+     */
+    addEndListener: propTypes.func,
+
+    /**
+     * Callback fired before the "entering" status is applied. An extra parameter
+     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool) -> void
+     */
+    onEnter: propTypes.func,
+
+    /**
+     * Callback fired after the "entering" status is applied. An extra parameter
+     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool)
+     */
+    onEntering: propTypes.func,
+
+    /**
+     * Callback fired after the "entered" status is applied. An extra parameter
+     * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool) -> void
+     */
+    onEntered: propTypes.func,
+
+    /**
+     * Callback fired before the "exiting" status is applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement) -> void
+     */
+    onExit: propTypes.func,
+
+    /**
+     * Callback fired after the "exiting" status is applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement) -> void
+     */
+    onExiting: propTypes.func,
+
+    /**
+     * Callback fired after the "exited" status is applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed
+     *
+     * @type Function(node: HtmlElement) -> void
+     */
+    onExited: propTypes.func
+  } ; // Name the function so it is clearer in the documentation
+
+  function noop() {}
+
+  Transition.defaultProps = {
+    in: false,
+    mountOnEnter: false,
+    unmountOnExit: false,
+    appear: false,
+    enter: true,
+    exit: true,
+    onEnter: noop,
+    onEntering: noop,
+    onEntered: noop,
+    onExit: noop,
+    onExiting: noop,
+    onExited: noop
+  };
+  Transition.UNMOUNTED = UNMOUNTED;
+  Transition.EXITED = EXITED;
+  Transition.ENTERING = ENTERING;
+  Transition.ENTERED = ENTERED;
+  Transition.EXITING = EXITING;
+
+  var _addClass = function addClass$1(node, classes) {
+    return node && classes && classes.split(' ').forEach(function (c) {
+      return addClass(node, c);
+    });
+  };
+
+  var removeClass$1 = function removeClass$1(node, classes) {
+    return node && classes && classes.split(' ').forEach(function (c) {
+      return removeClass(node, c);
+    });
+  };
+  /**
+   * A transition component inspired by the excellent
+   * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should
+   * use it if you're using CSS transitions or animations. It's built upon the
+   * [`Transition`](https://reactcommunity.org/react-transition-group/transition)
+   * component, so it inherits all of its props.
+   *
+   * `CSSTransition` applies a pair of class names during the `appear`, `enter`,
+   * and `exit` states of the transition. The first class is applied and then a
+   * second `*-active` class in order to activate the CSS transition. After the
+   * transition, matching `*-done` class names are applied to persist the
+   * transition state.
+   *
+   * ```jsx
+   * function App() {
+   *   const [inProp, setInProp] = useState(false);
+   *   return (
+   *     <div>
+   *       <CSSTransition in={inProp} timeout={200} classNames="my-node">
+   *         <div>
+   *           {"I'll receive my-node-* classes"}
+   *         </div>
+   *       </CSSTransition>
+   *       <button type="button" onClick={() => setInProp(true)}>
+   *         Click to Enter
+   *       </button>
+   *     </div>
+   *   );
+   * }
+   * ```
+   *
+   * When the `in` prop is set to `true`, the child component will first receive
+   * the class `example-enter`, then the `example-enter-active` will be added in
+   * the next tick. `CSSTransition` [forces a
+   * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)
+   * between before adding the `example-enter-active`. This is an important trick
+   * because it allows us to transition between `example-enter` and
+   * `example-enter-active` even though they were added immediately one after
+   * another. Most notably, this is what makes it possible for us to animate
+   * _appearance_.
+   *
+   * ```css
+   * .my-node-enter {
+   *   opacity: 0;
+   * }
+   * .my-node-enter-active {
+   *   opacity: 1;
+   *   transition: opacity 200ms;
+   * }
+   * .my-node-exit {
+   *   opacity: 1;
+   * }
+   * .my-node-exit-active {
+   *   opacity: 0;
+   *   transition: opacity 200ms;
+   * }
+   * ```
+   *
+   * `*-active` classes represent which styles you want to animate **to**, so it's
+   * important to add `transition` declaration only to them, otherwise transitions
+   * might not behave as intended! This might not be obvious when the transitions
+   * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in
+   * the example above (minus `transition`), but it becomes apparent in more
+   * complex transitions.
+   *
+   * **Note**: If you're using the
+   * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)
+   * prop, make sure to define styles for `.appear-*` classes as well.
+   */
+
+
+  var CSSTransition = /*#__PURE__*/function (_React$Component) {
+    _inheritsLoose(CSSTransition, _React$Component);
+
+    function CSSTransition() {
+      var _this;
+
+      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+        args[_key] = arguments[_key];
+      }
+
+      _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+      _this.appliedClasses = {
+        appear: {},
+        enter: {},
+        exit: {}
+      };
+
+      _this.onEnter = function (maybeNode, maybeAppearing) {
+        var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),
+            node = _this$resolveArgument[0],
+            appearing = _this$resolveArgument[1];
+
+        _this.removeClasses(node, 'exit');
+
+        _this.addClass(node, appearing ? 'appear' : 'enter', 'base');
+
+        if (_this.props.onEnter) {
+          _this.props.onEnter(maybeNode, maybeAppearing);
+        }
+      };
+
+      _this.onEntering = function (maybeNode, maybeAppearing) {
+        var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),
+            node = _this$resolveArgument2[0],
+            appearing = _this$resolveArgument2[1];
+
+        var type = appearing ? 'appear' : 'enter';
+
+        _this.addClass(node, type, 'active');
+
+        if (_this.props.onEntering) {
+          _this.props.onEntering(maybeNode, maybeAppearing);
+        }
+      };
+
+      _this.onEntered = function (maybeNode, maybeAppearing) {
+        var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),
+            node = _this$resolveArgument3[0],
+            appearing = _this$resolveArgument3[1];
+
+        var type = appearing ? 'appear' : 'enter';
+
+        _this.removeClasses(node, type);
+
+        _this.addClass(node, type, 'done');
+
+        if (_this.props.onEntered) {
+          _this.props.onEntered(maybeNode, maybeAppearing);
+        }
+      };
+
+      _this.onExit = function (maybeNode) {
+        var _this$resolveArgument4 = _this.resolveArguments(maybeNode),
+            node = _this$resolveArgument4[0];
+
+        _this.removeClasses(node, 'appear');
+
+        _this.removeClasses(node, 'enter');
+
+        _this.addClass(node, 'exit', 'base');
+
+        if (_this.props.onExit) {
+          _this.props.onExit(maybeNode);
+        }
+      };
+
+      _this.onExiting = function (maybeNode) {
+        var _this$resolveArgument5 = _this.resolveArguments(maybeNode),
+            node = _this$resolveArgument5[0];
+
+        _this.addClass(node, 'exit', 'active');
+
+        if (_this.props.onExiting) {
+          _this.props.onExiting(maybeNode);
+        }
+      };
+
+      _this.onExited = function (maybeNode) {
+        var _this$resolveArgument6 = _this.resolveArguments(maybeNode),
+            node = _this$resolveArgument6[0];
+
+        _this.removeClasses(node, 'exit');
+
+        _this.addClass(node, 'exit', 'done');
+
+        if (_this.props.onExited) {
+          _this.props.onExited(maybeNode);
+        }
+      };
+
+      _this.resolveArguments = function (maybeNode, maybeAppearing) {
+        return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`
+        : [maybeNode, maybeAppearing];
+      };
+
+      _this.getClassNames = function (type) {
+        var classNames = _this.props.classNames;
+        var isStringClassNames = typeof classNames === 'string';
+        var prefix = isStringClassNames && classNames ? classNames + "-" : '';
+        var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type];
+        var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"];
+        var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"];
+        return {
+          baseClassName: baseClassName,
+          activeClassName: activeClassName,
+          doneClassName: doneClassName
+        };
+      };
+
+      return _this;
+    }
+
+    var _proto = CSSTransition.prototype;
+
+    _proto.addClass = function addClass(node, type, phase) {
+      var className = this.getClassNames(type)[phase + "ClassName"];
+
+      var _this$getClassNames = this.getClassNames('enter'),
+          doneClassName = _this$getClassNames.doneClassName;
+
+      if (type === 'appear' && phase === 'done' && doneClassName) {
+        className += " " + doneClassName;
+      } // This is to force a repaint,
+      // which is necessary in order to transition styles when adding a class name.
+
+
+      if (phase === 'active') {
+        if (node) forceReflow(node);
+      }
+
+      if (className) {
+        this.appliedClasses[type][phase] = className;
+
+        _addClass(node, className);
+      }
+    };
+
+    _proto.removeClasses = function removeClasses(node, type) {
+      var _this$appliedClasses$ = this.appliedClasses[type],
+          baseClassName = _this$appliedClasses$.base,
+          activeClassName = _this$appliedClasses$.active,
+          doneClassName = _this$appliedClasses$.done;
+      this.appliedClasses[type] = {};
+
+      if (baseClassName) {
+        removeClass$1(node, baseClassName);
+      }
+
+      if (activeClassName) {
+        removeClass$1(node, activeClassName);
+      }
+
+      if (doneClassName) {
+        removeClass$1(node, doneClassName);
+      }
+    };
+
+    _proto.render = function render() {
+      var _this$props = this.props,
+          _ = _this$props.classNames,
+          props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
+
+      return /*#__PURE__*/React__default.createElement(Transition, _extends({}, props, {
+        onEnter: this.onEnter,
+        onEntered: this.onEntered,
+        onEntering: this.onEntering,
+        onExit: this.onExit,
+        onExiting: this.onExiting,
+        onExited: this.onExited
+      }));
+    };
+
+    return CSSTransition;
+  }(React__default.Component);
+
+  CSSTransition.defaultProps = {
+    classNames: ''
+  };
+  CSSTransition.propTypes =  _extends({}, Transition.propTypes, {
+    /**
+     * The animation classNames applied to the component as it appears, enters,
+     * exits or has finished the transition. A single name can be provided, which
+     * will be suffixed for each stage, e.g. `classNames="fade"` applies:
+     *
+     * - `fade-appear`, `fade-appear-active`, `fade-appear-done`
+     * - `fade-enter`, `fade-enter-active`, `fade-enter-done`
+     * - `fade-exit`, `fade-exit-active`, `fade-exit-done`
+     *
+     * A few details to note about how these classes are applied:
+     *
+     * 1. They are _joined_ with the ones that are already defined on the child
+     *    component, so if you want to add some base styles, you can use
+     *    `className` without worrying that it will be overridden.
+     *
+     * 2. If the transition component mounts with `in={false}`, no classes are
+     *    applied yet. You might be expecting `*-exit-done`, but if you think
+     *    about it, a component cannot finish exiting if it hasn't entered yet.
+     *
+     * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This
+     *    allows you to define different behavior for when appearing is done and
+     *    when regular entering is done, using selectors like
+     *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply
+     *    an epic entrance animation when element first appears in the DOM using
+     *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can
+     *    simply use `fade-enter-done` for defining both cases.
+     *
+     * Each individual classNames can also be specified independently like:
+     *
+     * ```js
+     * classNames={{
+     *  appear: 'my-appear',
+     *  appearActive: 'my-active-appear',
+     *  appearDone: 'my-done-appear',
+     *  enter: 'my-enter',
+     *  enterActive: 'my-active-enter',
+     *  enterDone: 'my-done-enter',
+     *  exit: 'my-exit',
+     *  exitActive: 'my-active-exit',
+     *  exitDone: 'my-done-exit',
+     * }}
+     * ```
+     *
+     * If you want to set these classes using CSS Modules:
+     *
+     * ```js
+     * import styles from './styles.css';
+     * ```
+     *
+     * you might want to use camelCase in your CSS file, that way could simply
+     * spread them instead of listing them one by one:
+     *
+     * ```js
+     * classNames={{ ...styles }}
+     * ```
+     *
+     * @type {string | {
+     *  appear?: string,
+     *  appearActive?: string,
+     *  appearDone?: string,
+     *  enter?: string,
+     *  enterActive?: string,
+     *  enterDone?: string,
+     *  exit?: string,
+     *  exitActive?: string,
+     *  exitDone?: string,
+     * }}
+     */
+    classNames: classNamesShape,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is
+     * applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool)
+     */
+    onEnter: propTypes.func,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'enter-active' or
+     * 'appear-active' class is applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool)
+     */
+    onEntering: propTypes.func,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'enter' or
+     * 'appear' classes are **removed** and the `done` class is added to the DOM node.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+     *
+     * @type Function(node: HtmlElement, isAppearing: bool)
+     */
+    onEntered: propTypes.func,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'exit' class is
+     * applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed
+     *
+     * @type Function(node: HtmlElement)
+     */
+    onExit: propTypes.func,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'exit-active' is applied.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed
+     *
+     * @type Function(node: HtmlElement)
+     */
+    onExiting: propTypes.func,
+
+    /**
+     * A `<Transition>` callback fired immediately after the 'exit' classes
+     * are **removed** and the `exit-done` class is added to the DOM node.
+     *
+     * **Note**: when `nodeRef` prop is passed, `node` is not passed
+     *
+     * @type Function(node: HtmlElement)
+     */
+    onExited: propTypes.func
+  }) ;
+
+  function _assertThisInitialized(self) {
+    if (self === void 0) {
+      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+    }
+
+    return self;
+  }
+
+  /**
+   * Given `this.props.children`, return an object mapping key to child.
+   *
+   * @param {*} children `this.props.children`
+   * @return {object} Mapping of key to child
+   */
+
+  function getChildMapping(children, mapFn) {
+    var mapper = function mapper(child) {
+      return mapFn && React.isValidElement(child) ? mapFn(child) : child;
+    };
+
+    var result = Object.create(null);
+    if (children) React.Children.map(children, function (c) {
+      return c;
+    }).forEach(function (child) {
+      // run the map function here instead so that the key is the computed one
+      result[child.key] = mapper(child);
+    });
+    return result;
+  }
+  /**
+   * When you're adding or removing children some may be added or removed in the
+   * same render pass. We want to show *both* since we want to simultaneously
+   * animate elements in and out. This function takes a previous set of keys
+   * and a new set of keys and merges them with its best guess of the correct
+   * ordering. In the future we may expose some of the utilities in
+   * ReactMultiChild to make this easy, but for now React itself does not
+   * directly have this concept of the union of prevChildren and nextChildren
+   * so we implement it here.
+   *
+   * @param {object} prev prev children as returned from
+   * `ReactTransitionChildMapping.getChildMapping()`.
+   * @param {object} next next children as returned from
+   * `ReactTransitionChildMapping.getChildMapping()`.
+   * @return {object} a key set that contains all keys in `prev` and all keys
+   * in `next` in a reasonable order.
+   */
+
+  function mergeChildMappings(prev, next) {
+    prev = prev || {};
+    next = next || {};
+
+    function getValueForKey(key) {
+      return key in next ? next[key] : prev[key];
+    } // For each key of `next`, the list of keys to insert before that key in
+    // the combined list
+
+
+    var nextKeysPending = Object.create(null);
+    var pendingKeys = [];
+
+    for (var prevKey in prev) {
+      if (prevKey in next) {
+        if (pendingKeys.length) {
+          nextKeysPending[prevKey] = pendingKeys;
+          pendingKeys = [];
+        }
+      } else {
+        pendingKeys.push(prevKey);
+      }
+    }
+
+    var i;
+    var childMapping = {};
+
+    for (var nextKey in next) {
+      if (nextKeysPending[nextKey]) {
+        for (i = 0; i < nextKeysPending[nextKey].length; i++) {
+          var pendingNextKey = nextKeysPending[nextKey][i];
+          childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
+        }
+      }
+
+      childMapping[nextKey] = getValueForKey(nextKey);
+    } // Finally, add the keys which didn't appear before any key in `next`
+
+
+    for (i = 0; i < pendingKeys.length; i++) {
+      childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
+    }
+
+    return childMapping;
+  }
+
+  function getProp(child, prop, props) {
+    return props[prop] != null ? props[prop] : child.props[prop];
+  }
+
+  function getInitialChildMapping(props, onExited) {
+    return getChildMapping(props.children, function (child) {
+      return React.cloneElement(child, {
+        onExited: onExited.bind(null, child),
+        in: true,
+        appear: getProp(child, 'appear', props),
+        enter: getProp(child, 'enter', props),
+        exit: getProp(child, 'exit', props)
+      });
+    });
+  }
+  function getNextChildMapping(nextProps, prevChildMapping, onExited) {
+    var nextChildMapping = getChildMapping(nextProps.children);
+    var children = mergeChildMappings(prevChildMapping, nextChildMapping);
+    Object.keys(children).forEach(function (key) {
+      var child = children[key];
+      if (!React.isValidElement(child)) return;
+      var hasPrev = (key in prevChildMapping);
+      var hasNext = (key in nextChildMapping);
+      var prevChild = prevChildMapping[key];
+      var isLeaving = React.isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)
+
+      if (hasNext && (!hasPrev || isLeaving)) {
+        // console.log('entering', key)
+        children[key] = React.cloneElement(child, {
+          onExited: onExited.bind(null, child),
+          in: true,
+          exit: getProp(child, 'exit', nextProps),
+          enter: getProp(child, 'enter', nextProps)
+        });
+      } else if (!hasNext && hasPrev && !isLeaving) {
+        // item is old (exiting)
+        // console.log('leaving', key)
+        children[key] = React.cloneElement(child, {
+          in: false
+        });
+      } else if (hasNext && hasPrev && React.isValidElement(prevChild)) {
+        // item hasn't changed transition states
+        // copy over the last transition props;
+        // console.log('unchanged', key)
+        children[key] = React.cloneElement(child, {
+          onExited: onExited.bind(null, child),
+          in: prevChild.props.in,
+          exit: getProp(child, 'exit', nextProps),
+          enter: getProp(child, 'enter', nextProps)
+        });
+      }
+    });
+    return children;
+  }
+
+  var values = Object.values || function (obj) {
+    return Object.keys(obj).map(function (k) {
+      return obj[k];
+    });
+  };
+
+  var defaultProps = {
+    component: 'div',
+    childFactory: function childFactory(child) {
+      return child;
+    }
+  };
+  /**
+   * The `<TransitionGroup>` component manages a set of transition components
+   * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition
+   * components, `<TransitionGroup>` is a state machine for managing the mounting
+   * and unmounting of components over time.
+   *
+   * Consider the example below. As items are removed or added to the TodoList the
+   * `in` prop is toggled automatically by the `<TransitionGroup>`.
+   *
+   * Note that `<TransitionGroup>`  does not define any animation behavior!
+   * Exactly _how_ a list item animates is up to the individual transition
+   * component. This means you can mix and match animations across different list
+   * items.
+   */
+
+  var TransitionGroup = /*#__PURE__*/function (_React$Component) {
+    _inheritsLoose(TransitionGroup, _React$Component);
+
+    function TransitionGroup(props, context) {
+      var _this;
+
+      _this = _React$Component.call(this, props, context) || this;
+
+      var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear
+
+
+      _this.state = {
+        contextValue: {
+          isMounting: true
+        },
+        handleExited: handleExited,
+        firstRender: true
+      };
+      return _this;
+    }
+
+    var _proto = TransitionGroup.prototype;
+
+    _proto.componentDidMount = function componentDidMount() {
+      this.mounted = true;
+      this.setState({
+        contextValue: {
+          isMounting: false
+        }
+      });
+    };
+
+    _proto.componentWillUnmount = function componentWillUnmount() {
+      this.mounted = false;
+    };
+
+    TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {
+      var prevChildMapping = _ref.children,
+          handleExited = _ref.handleExited,
+          firstRender = _ref.firstRender;
+      return {
+        children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),
+        firstRender: false
+      };
+    } // node is `undefined` when user provided `nodeRef` prop
+    ;
+
+    _proto.handleExited = function handleExited(child, node) {
+      var currentChildMapping = getChildMapping(this.props.children);
+      if (child.key in currentChildMapping) return;
+
+      if (child.props.onExited) {
+        child.props.onExited(node);
+      }
+
+      if (this.mounted) {
+        this.setState(function (state) {
+          var children = _extends({}, state.children);
+
+          delete children[child.key];
+          return {
+            children: children
+          };
+        });
+      }
+    };
+
+    _proto.render = function render() {
+      var _this$props = this.props,
+          Component = _this$props.component,
+          childFactory = _this$props.childFactory,
+          props = _objectWithoutPropertiesLoose(_this$props, ["component", "childFactory"]);
+
+      var contextValue = this.state.contextValue;
+      var children = values(this.state.children).map(childFactory);
+      delete props.appear;
+      delete props.enter;
+      delete props.exit;
+
+      if (Component === null) {
+        return /*#__PURE__*/React__default.createElement(TransitionGroupContext.Provider, {
+          value: contextValue
+        }, children);
+      }
+
+      return /*#__PURE__*/React__default.createElement(TransitionGroupContext.Provider, {
+        value: contextValue
+      }, /*#__PURE__*/React__default.createElement(Component, props, children));
+    };
+
+    return TransitionGroup;
+  }(React__default.Component);
+
+  TransitionGroup.propTypes =  {
+    /**
+     * `<TransitionGroup>` renders a `<div>` by default. You can change this
+     * behavior by providing a `component` prop.
+     * If you use React v16+ and would like to avoid a wrapping `<div>` element
+     * you can pass in `component={null}`. This is useful if the wrapping div
+     * borks your css styles.
+     */
+    component: propTypes.any,
+
+    /**
+     * A set of `<Transition>` components, that are toggled `in` and out as they
+     * leave. the `<TransitionGroup>` will inject specific transition props, so
+     * remember to spread them through if you are wrapping the `<Transition>` as
+     * with our `<Fade>` example.
+     *
+     * While this component is meant for multiple `Transition` or `CSSTransition`
+     * children, sometimes you may want to have a single transition child with
+     * content that you want to be transitioned out and in when you change it
+     * (e.g. routes, images etc.) In that case you can change the `key` prop of
+     * the transition child as you change its content, this will cause
+     * `TransitionGroup` to transition the child out and back in.
+     */
+    children: propTypes.node,
+
+    /**
+     * A convenience prop that enables or disables appear animations
+     * for all children. Note that specifying this will override any defaults set
+     * on individual children Transitions.
+     */
+    appear: propTypes.bool,
+
+    /**
+     * A convenience prop that enables or disables enter animations
+     * for all children. Note that specifying this will override any defaults set
+     * on individual children Transitions.
+     */
+    enter: propTypes.bool,
+
+    /**
+     * A convenience prop that enables or disables exit animations
+     * for all children. Note that specifying this will override any defaults set
+     * on individual children Transitions.
+     */
+    exit: propTypes.bool,
+
+    /**
+     * You may need to apply reactive updates to a child as it is exiting.
+     * This is generally done by using `cloneElement` however in the case of an exiting
+     * child the element has already been removed and not accessible to the consumer.
+     *
+     * If you do need to update a child as it leaves you can provide a `childFactory`
+     * to wrap every child, even the ones that are leaving.
+     *
+     * @type Function(child: ReactElement) -> ReactElement
+     */
+    childFactory: propTypes.func
+  } ;
+  TransitionGroup.defaultProps = defaultProps;
+
+  /**
+   * The `<ReplaceTransition>` component is a specialized `Transition` component
+   * that animates between two children.
+   *
+   * ```jsx
+   * <ReplaceTransition in>
+   *   <Fade><div>I appear first</div></Fade>
+   *   <Fade><div>I replace the above</div></Fade>
+   * </ReplaceTransition>
+   * ```
+   */
+
+  var ReplaceTransition = /*#__PURE__*/function (_React$Component) {
+    _inheritsLoose(ReplaceTransition, _React$Component);
+
+    function ReplaceTransition() {
+      var _this;
+
+      for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
+        _args[_key] = arguments[_key];
+      }
+
+      _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;
+
+      _this.handleEnter = function () {
+        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+          args[_key2] = arguments[_key2];
+        }
+
+        return _this.handleLifecycle('onEnter', 0, args);
+      };
+
+      _this.handleEntering = function () {
+        for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+          args[_key3] = arguments[_key3];
+        }
+
+        return _this.handleLifecycle('onEntering', 0, args);
+      };
+
+      _this.handleEntered = function () {
+        for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+          args[_key4] = arguments[_key4];
+        }
+
+        return _this.handleLifecycle('onEntered', 0, args);
+      };
+
+      _this.handleExit = function () {
+        for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+          args[_key5] = arguments[_key5];
+        }
+
+        return _this.handleLifecycle('onExit', 1, args);
+      };
+
+      _this.handleExiting = function () {
+        for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+          args[_key6] = arguments[_key6];
+        }
+
+        return _this.handleLifecycle('onExiting', 1, args);
+      };
+
+      _this.handleExited = function () {
+        for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+          args[_key7] = arguments[_key7];
+        }
+
+        return _this.handleLifecycle('onExited', 1, args);
+      };
+
+      return _this;
+    }
+
+    var _proto = ReplaceTransition.prototype;
+
+    _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {
+      var _child$props;
+
+      var children = this.props.children;
+      var child = React__default.Children.toArray(children)[idx];
+      if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);
+
+      if (this.props[handler]) {
+        var maybeNode = child.props.nodeRef ? undefined : ReactDOM.findDOMNode(this);
+        this.props[handler](maybeNode);
+      }
+    };
+
+    _proto.render = function render() {
+      var _this$props = this.props,
+          children = _this$props.children,
+          inProp = _this$props.in,
+          props = _objectWithoutPropertiesLoose(_this$props, ["children", "in"]);
+
+      var _React$Children$toArr = React__default.Children.toArray(children),
+          first = _React$Children$toArr[0],
+          second = _React$Children$toArr[1];
+
+      delete props.onEnter;
+      delete props.onEntering;
+      delete props.onEntered;
+      delete props.onExit;
+      delete props.onExiting;
+      delete props.onExited;
+      return /*#__PURE__*/React__default.createElement(TransitionGroup, props, inProp ? React__default.cloneElement(first, {
+        key: 'first',
+        onEnter: this.handleEnter,
+        onEntering: this.handleEntering,
+        onEntered: this.handleEntered
+      }) : React__default.cloneElement(second, {
+        key: 'second',
+        onEnter: this.handleExit,
+        onEntering: this.handleExiting,
+        onEntered: this.handleExited
+      }));
+    };
+
+    return ReplaceTransition;
+  }(React__default.Component);
+
+  ReplaceTransition.propTypes =  {
+    in: propTypes.bool.isRequired,
+    children: function children(props, propName) {
+      if (React__default.Children.count(props[propName]) !== 2) return new Error("\"" + propName + "\" must be exactly two transition components.");
+      return null;
+    }
+  } ;
+
+  var _leaveRenders, _enterRenders;
+
+  function areChildrenDifferent(oldChildren, newChildren) {
+    if (oldChildren === newChildren) return false;
+
+    if (React__default.isValidElement(oldChildren) && React__default.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {
+      return false;
+    }
+
+    return true;
+  }
+  /**
+   * Enum of modes for SwitchTransition component
+   * @enum { string }
+   */
+
+
+  var modes = {
+    out: 'out-in',
+    in: 'in-out'
+  };
+
+  var callHook = function callHook(element, name, cb) {
+    return function () {
+      var _element$props;
+
+      element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);
+      cb();
+    };
+  };
+
+  var leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {
+    var current = _ref.current,
+        changeState = _ref.changeState;
+    return React__default.cloneElement(current, {
+      in: false,
+      onExited: callHook(current, 'onExited', function () {
+        changeState(ENTERING, null);
+      })
+    });
+  }, _leaveRenders[modes.in] = function (_ref2) {
+    var current = _ref2.current,
+        changeState = _ref2.changeState,
+        children = _ref2.children;
+    return [current, React__default.cloneElement(children, {
+      in: true,
+      onEntered: callHook(children, 'onEntered', function () {
+        changeState(ENTERING);
+      })
+    })];
+  }, _leaveRenders);
+  var enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {
+    var children = _ref3.children,
+        changeState = _ref3.changeState;
+    return React__default.cloneElement(children, {
+      in: true,
+      onEntered: callHook(children, 'onEntered', function () {
+        changeState(ENTERED, React__default.cloneElement(children, {
+          in: true
+        }));
+      })
+    });
+  }, _enterRenders[modes.in] = function (_ref4) {
+    var current = _ref4.current,
+        children = _ref4.children,
+        changeState = _ref4.changeState;
+    return [React__default.cloneElement(current, {
+      in: false,
+      onExited: callHook(current, 'onExited', function () {
+        changeState(ENTERED, React__default.cloneElement(children, {
+          in: true
+        }));
+      })
+    }), React__default.cloneElement(children, {
+      in: true
+    })];
+  }, _enterRenders);
+  /**
+   * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).
+   * You can use it when you want to control the render between state transitions.
+   * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.
+   *
+   * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.
+   * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.
+   *
+   * **Note**: If you want the animation to happen simultaneously
+   * (that is, to have the old child removed and a new child inserted **at the same time**),
+   * you should use
+   * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)
+   * instead.
+   *
+   * ```jsx
+   * function App() {
+   *  const [state, setState] = useState(false);
+   *  return (
+   *    <SwitchTransition>
+   *      <CSSTransition
+   *        key={state ? "Goodbye, world!" : "Hello, world!"}
+   *        addEndListener={(node, done) => node.addEventListener("transitionend", done, false)}
+   *        classNames='fade'
+   *      >
+   *        <button onClick={() => setState(state => !state)}>
+   *          {state ? "Goodbye, world!" : "Hello, world!"}
+   *        </button>
+   *      </CSSTransition>
+   *    </SwitchTransition>
+   *  );
+   * }
+   * ```
+   *
+   * ```css
+   * .fade-enter{
+   *    opacity: 0;
+   * }
+   * .fade-exit{
+   *    opacity: 1;
+   * }
+   * .fade-enter-active{
+   *    opacity: 1;
+   * }
+   * .fade-exit-active{
+   *    opacity: 0;
+   * }
+   * .fade-enter-active,
+   * .fade-exit-active{
+   *    transition: opacity 500ms;
+   * }
+   * ```
+   */
+
+  var SwitchTransition = /*#__PURE__*/function (_React$Component) {
+    _inheritsLoose(SwitchTransition, _React$Component);
+
+    function SwitchTransition() {
+      var _this;
+
+      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+        args[_key] = arguments[_key];
+      }
+
+      _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+      _this.state = {
+        status: ENTERED,
+        current: null
+      };
+      _this.appeared = false;
+
+      _this.changeState = function (status, current) {
+        if (current === void 0) {
+          current = _this.state.current;
+        }
+
+        _this.setState({
+          status: status,
+          current: current
+        });
+      };
+
+      return _this;
+    }
+
+    var _proto = SwitchTransition.prototype;
+
+    _proto.componentDidMount = function componentDidMount() {
+      this.appeared = true;
+    };
+
+    SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
+      if (props.children == null) {
+        return {
+          current: null
+        };
+      }
+
+      if (state.status === ENTERING && props.mode === modes.in) {
+        return {
+          status: ENTERING
+        };
+      }
+
+      if (state.current && areChildrenDifferent(state.current, props.children)) {
+        return {
+          status: EXITING
+        };
+      }
+
+      return {
+        current: React__default.cloneElement(props.children, {
+          in: true
+        })
+      };
+    };
+
+    _proto.render = function render() {
+      var _this$props = this.props,
+          children = _this$props.children,
+          mode = _this$props.mode,
+          _this$state = this.state,
+          status = _this$state.status,
+          current = _this$state.current;
+      var data = {
+        children: children,
+        current: current,
+        changeState: this.changeState,
+        status: status
+      };
+      var component;
+
+      switch (status) {
+        case ENTERING:
+          component = enterRenders[mode](data);
+          break;
+
+        case EXITING:
+          component = leaveRenders[mode](data);
+          break;
+
+        case ENTERED:
+          component = current;
+      }
+
+      return /*#__PURE__*/React__default.createElement(TransitionGroupContext.Provider, {
+        value: {
+          isMounting: !this.appeared
+        }
+      }, component);
+    };
+
+    return SwitchTransition;
+  }(React__default.Component);
+
+  SwitchTransition.propTypes =  {
+    /**
+     * Transition modes.
+     * `out-in`: Current element transitions out first, then when complete, the new element transitions in.
+     * `in-out`: New element transitions in first, then when complete, the current element transitions out.
+     *
+     * @type {'out-in'|'in-out'}
+     */
+    mode: propTypes.oneOf([modes.in, modes.out]),
+
+    /**
+     * Any `Transition` or `CSSTransition` component.
+     */
+    children: propTypes.oneOfType([propTypes.element.isRequired])
+  } ;
+  SwitchTransition.defaultProps = {
+    mode: modes.out
+  };
+
+  exports.CSSTransition = CSSTransition;
+  exports.ReplaceTransition = ReplaceTransition;
+  exports.SwitchTransition = SwitchTransition;
+  exports.Transition = Transition;
+  exports.TransitionGroup = TransitionGroup;
+  exports.config = config;
+
+  Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/node_modules/react-transition-group/dist/react-transition-group.min.js b/node_modules/react-transition-group/dist/react-transition-group.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..0599e96071cefa78a34a3765b8408dbcc97d356d
--- /dev/null
+++ b/node_modules/react-transition-group/dist/react-transition-group.min.js
@@ -0,0 +1,9 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["exports","react","react-dom"],t):t((e=e||self).ReactTransitionGroup={},e.React,e.ReactDOM)}(this,(function(e,t,n){"use strict";var r="default"in t?t.default:t;function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e,t){return e(t={exports:{}},t.exports),t.exports
+/** @license React v16.13.1
+   * react-is.production.min.js
+   *
+   * Copyright (c) Facebook, Inc. and its affiliates.
+   *
+   * This source code is licensed under the MIT license found in the
+   * LICENSE file in the root directory of this source tree.
+   */}n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;var c="function"==typeof Symbol&&Symbol.for,l=c?Symbol.for("react.element"):60103,u=c?Symbol.for("react.portal"):60106,p=c?Symbol.for("react.fragment"):60107,d=c?Symbol.for("react.strict_mode"):60108,f=c?Symbol.for("react.profiler"):60114,h=c?Symbol.for("react.provider"):60109,m=c?Symbol.for("react.context"):60110,E=c?Symbol.for("react.async_mode"):60111,y=c?Symbol.for("react.concurrent_mode"):60111,x=c?Symbol.for("react.forward_ref"):60112,v=c?Symbol.for("react.suspense"):60113,g=c?Symbol.for("react.suspense_list"):60120,b=c?Symbol.for("react.memo"):60115,C=c?Symbol.for("react.lazy"):60116,S=c?Symbol.for("react.block"):60121,O=c?Symbol.for("react.fundamental"):60117,N=c?Symbol.for("react.responder"):60118,T=c?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case l:switch(e=e.type){case E:case y:case p:case f:case d:case v:return e;default:switch(e=e&&e.$$typeof){case m:case x:case C:case b:case h:return e;default:return t}}case u:return t}}}function P(e){return k(e)===y}var w={AsyncMode:E,ConcurrentMode:y,ContextConsumer:m,ContextProvider:h,Element:l,ForwardRef:x,Fragment:p,Lazy:C,Memo:b,Portal:u,Profiler:f,StrictMode:d,Suspense:v,isAsyncMode:function(e){return P(e)||k(e)===E},isConcurrentMode:P,isContextConsumer:function(e){return k(e)===m},isContextProvider:function(e){return k(e)===h},isElement:function(e){return"object"==typeof e&&null!==e&&e.$$typeof===l},isForwardRef:function(e){return k(e)===x},isFragment:function(e){return k(e)===p},isLazy:function(e){return k(e)===C},isMemo:function(e){return k(e)===b},isPortal:function(e){return k(e)===u},isProfiler:function(e){return k(e)===f},isStrictMode:function(e){return k(e)===d},isSuspense:function(e){return k(e)===v},isValidElementType:function(e){return"string"==typeof e||"function"==typeof e||e===p||e===y||e===f||e===d||e===v||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===C||e.$$typeof===b||e.$$typeof===h||e.$$typeof===m||e.$$typeof===x||e.$$typeof===O||e.$$typeof===N||e.$$typeof===T||e.$$typeof===S)},typeOf:k},j=a((function(e,t){})),M=(j.AsyncMode,j.ConcurrentMode,j.ContextConsumer,j.ContextProvider,j.Element,j.ForwardRef,j.Fragment,j.Lazy,j.Memo,j.Portal,j.Profiler,j.StrictMode,j.Suspense,j.isAsyncMode,j.isConcurrentMode,j.isContextConsumer,j.isContextProvider,j.isElement,j.isForwardRef,j.isFragment,j.isLazy,j.isMemo,j.isPortal,j.isProfiler,j.isStrictMode,j.isSuspense,j.isValidElementType,j.typeOf,a((function(e){e.exports=w})),Object.getOwnPropertySymbols),R=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;function A(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}})()&&Object.assign,Function.call.bind(Object.prototype.hasOwnProperty);function L(){}function _(){}_.resetWarningCache=L;var D=a((function(e){e.exports=function(){function e(e,t,n,r,o,i){if("SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"!==i){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:_,resetWarningCache:L};return n.PropTypes=n,n}()}));D.object,D.oneOfType,D.element,D.bool,D.func;function F(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var V={disabled:!1},I=r.createContext(null),U=function(e){return e.scrollTop},q="entering",z="entered",W=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(o="exited",r.appearStatus=q):o=z:o=t.unmountOnExit||t.mountOnEnter?"unmounted":"exited",r.state={status:o},r.nextCallback=null,r}s(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&"unmounted"===t.status?{status:"exited"}:null};var o=t.prototype;return o.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},o.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==q&&n!==z&&(t=q):n!==q&&n!==z||(t="exiting")}this.updateStatus(!1,t)},o.componentWillUnmount=function(){this.cancelNextCallback()},o.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},o.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===q){if(this.props.unmountOnExit||this.props.mountOnEnter){var r=this.props.nodeRef?this.props.nodeRef.current:n.findDOMNode(this);r&&U(r)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&"exited"===this.state.status&&this.setState({status:"unmounted"})},o.performEnter=function(e){var t=this,r=this.props.enter,o=this.context?this.context.isMounting:e,i=this.props.nodeRef?[o]:[n.findDOMNode(this),o],s=i[0],a=i[1],c=this.getTimeouts(),l=o?c.appear:c.enter;!e&&!r||V.disabled?this.safeSetState({status:z},(function(){t.props.onEntered(s)})):(this.props.onEnter(s,a),this.safeSetState({status:q},(function(){t.props.onEntering(s,a),t.onTransitionEnd(l,(function(){t.safeSetState({status:z},(function(){t.props.onEntered(s,a)}))}))})))},o.performExit=function(){var e=this,t=this.props.exit,r=this.getTimeouts(),o=this.props.nodeRef?void 0:n.findDOMNode(this);t&&!V.disabled?(this.props.onExit(o),this.safeSetState({status:"exiting"},(function(){e.props.onExiting(o),e.onTransitionEnd(r.exit,(function(){e.safeSetState({status:"exited"},(function(){e.props.onExited(o)}))}))}))):this.safeSetState({status:"exited"},(function(){e.props.onExited(o)}))},o.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},o.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},o.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},o.onTransitionEnd=function(e,t){this.setNextCallback(t);var r=this.props.nodeRef?this.props.nodeRef.current:n.findDOMNode(this),o=null==e&&!this.props.addEndListener;if(r&&!o){if(this.props.addEndListener){var i=this.props.nodeRef?[this.nextCallback]:[r,this.nextCallback],s=i[0],a=i[1];this.props.addEndListener(s,a)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},o.render=function(){var e=this.state.status;if("unmounted"===e)return null;var t=this.props,n=t.children,o=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,i(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return r.createElement(I.Provider,{value:null},"function"==typeof n?n(e,o):r.cloneElement(r.Children.only(n),o))},t}(r.Component);function G(){}W.contextType=I,W.propTypes={},W.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:G,onEntering:G,onEntered:G,onExit:G,onExiting:G,onExited:G},W.UNMOUNTED="unmounted",W.EXITED="exited",W.ENTERING=q,W.ENTERED=z,W.EXITING="exiting";var X=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))},B=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=F(n.className,r):n.setAttribute("class",F(n.className&&n.className.baseVal||"",r)));var n,r}))},H=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1];t.removeClasses(o,"exit"),t.addClass(o,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.addClass(o,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],i=r[1]?"appear":"enter";t.removeClasses(o,i),t.addClass(o,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}s(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&U(e),r&&(this.appliedClasses[t][n]=r,X(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,i=n.done;this.appliedClasses[t]={},r&&B(e,r),o&&B(e,o),i&&B(e,i)},n.render=function(){var e=this.props,t=(e.classNames,i(e,["classNames"]));return r.createElement(W,o({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(r.Component);function Y(e,n){var r=Object.create(null);return e&&t.Children.map(e,(function(e){return e})).forEach((function(e){r[e.key]=function(e){return n&&t.isValidElement(e)?n(e):e}(e)})),r}function J(e,t,n){return null!=n[t]?n[t]:e.props[t]}function K(e,n,r){var o=Y(e.children),i=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),i=[];for(var s in e)s in t?i.length&&(o[s]=i,i=[]):i.push(s);var a={};for(var c in t){if(o[c])for(r=0;r<o[c].length;r++){var l=o[c][r];a[o[c][r]]=n(l)}a[c]=n(c)}for(r=0;r<i.length;r++)a[i[r]]=n(i[r]);return a}(n,o);return Object.keys(i).forEach((function(s){var a=i[s];if(t.isValidElement(a)){var c=s in n,l=s in o,u=n[s],p=t.isValidElement(u)&&!u.props.in;!l||c&&!p?l||!c||p?l&&c&&t.isValidElement(u)&&(i[s]=t.cloneElement(a,{onExited:r.bind(null,a),in:u.props.in,exit:J(a,"exit",e),enter:J(a,"enter",e)})):i[s]=t.cloneElement(a,{in:!1}):i[s]=t.cloneElement(a,{onExited:r.bind(null,a),in:!0,exit:J(a,"exit",e),enter:J(a,"enter",e)})}})),i}H.defaultProps={classNames:""},H.propTypes={};var Q=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},Z=function(e){function n(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}s(n,e);var a=n.prototype;return a.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},a.componentWillUnmount=function(){this.mounted=!1},n.getDerivedStateFromProps=function(e,n){var r,o,i=n.children,s=n.handleExited;return{children:n.firstRender?(r=e,o=s,Y(r.children,(function(e){return t.cloneElement(e,{onExited:o.bind(null,e),in:!0,appear:J(e,"appear",r),enter:J(e,"enter",r),exit:J(e,"exit",r)})}))):K(e,i,s),firstRender:!1}},a.handleExited=function(e,t){var n=Y(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=o({},t.children);return delete n[e.key],{children:n}})))},a.render=function(){var e=this.props,t=e.component,n=e.childFactory,o=i(e,["component","childFactory"]),s=this.state.contextValue,a=Q(this.state.children).map(n);return delete o.appear,delete o.enter,delete o.exit,null===t?r.createElement(I.Provider,{value:s},a):r.createElement(I.Provider,{value:s},r.createElement(t,o,a))},n}(r.Component);Z.propTypes={},Z.defaultProps={component:"div",childFactory:function(e){return e}};var ee,te,ne=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}s(t,e);var o=t.prototype;return o.handleLifecycle=function(e,t,o){var i,s=this.props.children,a=r.Children.toArray(s)[t];if(a.props[e]&&(i=a.props)[e].apply(i,o),this.props[e]){var c=a.props.nodeRef?void 0:n.findDOMNode(this);this.props[e](c)}},o.render=function(){var e=this.props,t=e.children,n=e.in,o=i(e,["children","in"]),s=r.Children.toArray(t),a=s[0],c=s[1];return delete o.onEnter,delete o.onEntering,delete o.onEntered,delete o.onExit,delete o.onExiting,delete o.onExited,r.createElement(Z,o,n?r.cloneElement(a,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):r.cloneElement(c,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(r.Component);ne.propTypes={};var re="out-in",oe="in-out",ie=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},se=((ee={})[re]=function(e){var t=e.current,n=e.changeState;return r.cloneElement(t,{in:!1,onExited:ie(t,"onExited",(function(){n(q,null)}))})},ee[oe]=function(e){var t=e.current,n=e.changeState,o=e.children;return[t,r.cloneElement(o,{in:!0,onEntered:ie(o,"onEntered",(function(){n(q)}))})]},ee),ae=((te={})[re]=function(e){var t=e.children,n=e.changeState;return r.cloneElement(t,{in:!0,onEntered:ie(t,"onEntered",(function(){n(z,r.cloneElement(t,{in:!0}))}))})},te[oe]=function(e){var t=e.current,n=e.children,o=e.changeState;return[r.cloneElement(t,{in:!1,onExited:ie(t,"onExited",(function(){o(z,r.cloneElement(n,{in:!0}))}))}),r.cloneElement(n,{in:!0})]},te),ce=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:z,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===q&&e.mode===oe?{status:q}:!t.current||(n=t.current,o=e.children,n===o||r.isValidElement(n)&&r.isValidElement(o)&&null!=n.key&&n.key===o.key)?{current:r.cloneElement(e.children,{in:!0})}:{status:"exiting"};var n,o},n.render=function(){var e,t=this.props,n=t.children,o=t.mode,i=this.state,s=i.status,a=i.current,c={children:n,current:a,changeState:this.changeState,status:s};switch(s){case q:e=ae[o](c);break;case"exiting":e=se[o](c);break;case z:e=a}return r.createElement(I.Provider,{value:{isMounting:!this.appeared}},e)},t}(r.Component);ce.propTypes={},ce.defaultProps={mode:re},e.CSSTransition=H,e.ReplaceTransition=ne,e.SwitchTransition=ce,e.Transition=W,e.TransitionGroup=Z,e.config=V,Object.defineProperty(e,"__esModule",{value:!0})}));
diff --git a/node_modules/react-transition-group/esm/CSSTransition.js b/node_modules/react-transition-group/esm/CSSTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..fb43f53a5bd8354dfe9c3d6437c5f2c89227b628
--- /dev/null
+++ b/node_modules/react-transition-group/esm/CSSTransition.js
@@ -0,0 +1,412 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+import PropTypes from 'prop-types';
+import addOneClass from 'dom-helpers/addClass';
+import removeOneClass from 'dom-helpers/removeClass';
+import React from 'react';
+import Transition from './Transition';
+import { classNamesShape } from './utils/PropTypes';
+import { forceReflow } from './utils/reflow';
+
+var _addClass = function addClass(node, classes) {
+  return node && classes && classes.split(' ').forEach(function (c) {
+    return addOneClass(node, c);
+  });
+};
+
+var removeClass = function removeClass(node, classes) {
+  return node && classes && classes.split(' ').forEach(function (c) {
+    return removeOneClass(node, c);
+  });
+};
+/**
+ * A transition component inspired by the excellent
+ * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should
+ * use it if you're using CSS transitions or animations. It's built upon the
+ * [`Transition`](https://reactcommunity.org/react-transition-group/transition)
+ * component, so it inherits all of its props.
+ *
+ * `CSSTransition` applies a pair of class names during the `appear`, `enter`,
+ * and `exit` states of the transition. The first class is applied and then a
+ * second `*-active` class in order to activate the CSS transition. After the
+ * transition, matching `*-done` class names are applied to persist the
+ * transition state.
+ *
+ * ```jsx
+ * function App() {
+ *   const [inProp, setInProp] = useState(false);
+ *   return (
+ *     <div>
+ *       <CSSTransition in={inProp} timeout={200} classNames="my-node">
+ *         <div>
+ *           {"I'll receive my-node-* classes"}
+ *         </div>
+ *       </CSSTransition>
+ *       <button type="button" onClick={() => setInProp(true)}>
+ *         Click to Enter
+ *       </button>
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * When the `in` prop is set to `true`, the child component will first receive
+ * the class `example-enter`, then the `example-enter-active` will be added in
+ * the next tick. `CSSTransition` [forces a
+ * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)
+ * between before adding the `example-enter-active`. This is an important trick
+ * because it allows us to transition between `example-enter` and
+ * `example-enter-active` even though they were added immediately one after
+ * another. Most notably, this is what makes it possible for us to animate
+ * _appearance_.
+ *
+ * ```css
+ * .my-node-enter {
+ *   opacity: 0;
+ * }
+ * .my-node-enter-active {
+ *   opacity: 1;
+ *   transition: opacity 200ms;
+ * }
+ * .my-node-exit {
+ *   opacity: 1;
+ * }
+ * .my-node-exit-active {
+ *   opacity: 0;
+ *   transition: opacity 200ms;
+ * }
+ * ```
+ *
+ * `*-active` classes represent which styles you want to animate **to**, so it's
+ * important to add `transition` declaration only to them, otherwise transitions
+ * might not behave as intended! This might not be obvious when the transitions
+ * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in
+ * the example above (minus `transition`), but it becomes apparent in more
+ * complex transitions.
+ *
+ * **Note**: If you're using the
+ * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)
+ * prop, make sure to define styles for `.appear-*` classes as well.
+ */
+
+
+var CSSTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(CSSTransition, _React$Component);
+
+  function CSSTransition() {
+    var _this;
+
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+    _this.appliedClasses = {
+      appear: {},
+      enter: {},
+      exit: {}
+    };
+
+    _this.onEnter = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument[0],
+          appearing = _this$resolveArgument[1];
+
+      _this.removeClasses(node, 'exit');
+
+      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');
+
+      if (_this.props.onEnter) {
+        _this.props.onEnter(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onEntering = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument2[0],
+          appearing = _this$resolveArgument2[1];
+
+      var type = appearing ? 'appear' : 'enter';
+
+      _this.addClass(node, type, 'active');
+
+      if (_this.props.onEntering) {
+        _this.props.onEntering(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onEntered = function (maybeNode, maybeAppearing) {
+      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),
+          node = _this$resolveArgument3[0],
+          appearing = _this$resolveArgument3[1];
+
+      var type = appearing ? 'appear' : 'enter';
+
+      _this.removeClasses(node, type);
+
+      _this.addClass(node, type, 'done');
+
+      if (_this.props.onEntered) {
+        _this.props.onEntered(maybeNode, maybeAppearing);
+      }
+    };
+
+    _this.onExit = function (maybeNode) {
+      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument4[0];
+
+      _this.removeClasses(node, 'appear');
+
+      _this.removeClasses(node, 'enter');
+
+      _this.addClass(node, 'exit', 'base');
+
+      if (_this.props.onExit) {
+        _this.props.onExit(maybeNode);
+      }
+    };
+
+    _this.onExiting = function (maybeNode) {
+      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument5[0];
+
+      _this.addClass(node, 'exit', 'active');
+
+      if (_this.props.onExiting) {
+        _this.props.onExiting(maybeNode);
+      }
+    };
+
+    _this.onExited = function (maybeNode) {
+      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),
+          node = _this$resolveArgument6[0];
+
+      _this.removeClasses(node, 'exit');
+
+      _this.addClass(node, 'exit', 'done');
+
+      if (_this.props.onExited) {
+        _this.props.onExited(maybeNode);
+      }
+    };
+
+    _this.resolveArguments = function (maybeNode, maybeAppearing) {
+      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`
+      : [maybeNode, maybeAppearing];
+    };
+
+    _this.getClassNames = function (type) {
+      var classNames = _this.props.classNames;
+      var isStringClassNames = typeof classNames === 'string';
+      var prefix = isStringClassNames && classNames ? classNames + "-" : '';
+      var baseClassName = isStringClassNames ? "" + prefix + type : classNames[type];
+      var activeClassName = isStringClassNames ? baseClassName + "-active" : classNames[type + "Active"];
+      var doneClassName = isStringClassNames ? baseClassName + "-done" : classNames[type + "Done"];
+      return {
+        baseClassName: baseClassName,
+        activeClassName: activeClassName,
+        doneClassName: doneClassName
+      };
+    };
+
+    return _this;
+  }
+
+  var _proto = CSSTransition.prototype;
+
+  _proto.addClass = function addClass(node, type, phase) {
+    var className = this.getClassNames(type)[phase + "ClassName"];
+
+    var _this$getClassNames = this.getClassNames('enter'),
+        doneClassName = _this$getClassNames.doneClassName;
+
+    if (type === 'appear' && phase === 'done' && doneClassName) {
+      className += " " + doneClassName;
+    } // This is to force a repaint,
+    // which is necessary in order to transition styles when adding a class name.
+
+
+    if (phase === 'active') {
+      if (node) forceReflow(node);
+    }
+
+    if (className) {
+      this.appliedClasses[type][phase] = className;
+
+      _addClass(node, className);
+    }
+  };
+
+  _proto.removeClasses = function removeClasses(node, type) {
+    var _this$appliedClasses$ = this.appliedClasses[type],
+        baseClassName = _this$appliedClasses$.base,
+        activeClassName = _this$appliedClasses$.active,
+        doneClassName = _this$appliedClasses$.done;
+    this.appliedClasses[type] = {};
+
+    if (baseClassName) {
+      removeClass(node, baseClassName);
+    }
+
+    if (activeClassName) {
+      removeClass(node, activeClassName);
+    }
+
+    if (doneClassName) {
+      removeClass(node, doneClassName);
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        _ = _this$props.classNames,
+        props = _objectWithoutPropertiesLoose(_this$props, ["classNames"]);
+
+    return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {
+      onEnter: this.onEnter,
+      onEntered: this.onEntered,
+      onEntering: this.onEntering,
+      onExit: this.onExit,
+      onExiting: this.onExiting,
+      onExited: this.onExited
+    }));
+  };
+
+  return CSSTransition;
+}(React.Component);
+
+CSSTransition.defaultProps = {
+  classNames: ''
+};
+CSSTransition.propTypes = process.env.NODE_ENV !== "production" ? _extends({}, Transition.propTypes, {
+  /**
+   * The animation classNames applied to the component as it appears, enters,
+   * exits or has finished the transition. A single name can be provided, which
+   * will be suffixed for each stage, e.g. `classNames="fade"` applies:
+   *
+   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`
+   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`
+   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`
+   *
+   * A few details to note about how these classes are applied:
+   *
+   * 1. They are _joined_ with the ones that are already defined on the child
+   *    component, so if you want to add some base styles, you can use
+   *    `className` without worrying that it will be overridden.
+   *
+   * 2. If the transition component mounts with `in={false}`, no classes are
+   *    applied yet. You might be expecting `*-exit-done`, but if you think
+   *    about it, a component cannot finish exiting if it hasn't entered yet.
+   *
+   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This
+   *    allows you to define different behavior for when appearing is done and
+   *    when regular entering is done, using selectors like
+   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply
+   *    an epic entrance animation when element first appears in the DOM using
+   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can
+   *    simply use `fade-enter-done` for defining both cases.
+   *
+   * Each individual classNames can also be specified independently like:
+   *
+   * ```js
+   * classNames={{
+   *  appear: 'my-appear',
+   *  appearActive: 'my-active-appear',
+   *  appearDone: 'my-done-appear',
+   *  enter: 'my-enter',
+   *  enterActive: 'my-active-enter',
+   *  enterDone: 'my-done-enter',
+   *  exit: 'my-exit',
+   *  exitActive: 'my-active-exit',
+   *  exitDone: 'my-done-exit',
+   * }}
+   * ```
+   *
+   * If you want to set these classes using CSS Modules:
+   *
+   * ```js
+   * import styles from './styles.css';
+   * ```
+   *
+   * you might want to use camelCase in your CSS file, that way could simply
+   * spread them instead of listing them one by one:
+   *
+   * ```js
+   * classNames={{ ...styles }}
+   * ```
+   *
+   * @type {string | {
+   *  appear?: string,
+   *  appearActive?: string,
+   *  appearDone?: string,
+   *  enter?: string,
+   *  enterActive?: string,
+   *  enterDone?: string,
+   *  exit?: string,
+   *  exitActive?: string,
+   *  exitDone?: string,
+   * }}
+   */
+  classNames: classNamesShape,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is
+   * applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEnter: PropTypes.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter-active' or
+   * 'appear-active' class is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntering: PropTypes.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'enter' or
+   * 'appear' classes are **removed** and the `done` class is added to the DOM node.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntered: PropTypes.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit' class is
+   * applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExit: PropTypes.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExiting: PropTypes.func,
+
+  /**
+   * A `<Transition>` callback fired immediately after the 'exit' classes
+   * are **removed** and the `exit-done` class is added to the DOM node.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement)
+   */
+  onExited: PropTypes.func
+}) : {};
+export default CSSTransition;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/ReplaceTransition.js b/node_modules/react-transition-group/esm/ReplaceTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..a7678c6e10539daf50697cb16969434cbc63c7eb
--- /dev/null
+++ b/node_modules/react-transition-group/esm/ReplaceTransition.js
@@ -0,0 +1,136 @@
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+import PropTypes from 'prop-types';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import TransitionGroup from './TransitionGroup';
+/**
+ * The `<ReplaceTransition>` component is a specialized `Transition` component
+ * that animates between two children.
+ *
+ * ```jsx
+ * <ReplaceTransition in>
+ *   <Fade><div>I appear first</div></Fade>
+ *   <Fade><div>I replace the above</div></Fade>
+ * </ReplaceTransition>
+ * ```
+ */
+
+var ReplaceTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(ReplaceTransition, _React$Component);
+
+  function ReplaceTransition() {
+    var _this;
+
+    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {
+      _args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;
+
+    _this.handleEnter = function () {
+      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+        args[_key2] = arguments[_key2];
+      }
+
+      return _this.handleLifecycle('onEnter', 0, args);
+    };
+
+    _this.handleEntering = function () {
+      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
+        args[_key3] = arguments[_key3];
+      }
+
+      return _this.handleLifecycle('onEntering', 0, args);
+    };
+
+    _this.handleEntered = function () {
+      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
+        args[_key4] = arguments[_key4];
+      }
+
+      return _this.handleLifecycle('onEntered', 0, args);
+    };
+
+    _this.handleExit = function () {
+      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
+        args[_key5] = arguments[_key5];
+      }
+
+      return _this.handleLifecycle('onExit', 1, args);
+    };
+
+    _this.handleExiting = function () {
+      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
+        args[_key6] = arguments[_key6];
+      }
+
+      return _this.handleLifecycle('onExiting', 1, args);
+    };
+
+    _this.handleExited = function () {
+      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {
+        args[_key7] = arguments[_key7];
+      }
+
+      return _this.handleLifecycle('onExited', 1, args);
+    };
+
+    return _this;
+  }
+
+  var _proto = ReplaceTransition.prototype;
+
+  _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {
+    var _child$props;
+
+    var children = this.props.children;
+    var child = React.Children.toArray(children)[idx];
+    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);
+
+    if (this.props[handler]) {
+      var maybeNode = child.props.nodeRef ? undefined : ReactDOM.findDOMNode(this);
+      this.props[handler](maybeNode);
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        children = _this$props.children,
+        inProp = _this$props.in,
+        props = _objectWithoutPropertiesLoose(_this$props, ["children", "in"]);
+
+    var _React$Children$toArr = React.Children.toArray(children),
+        first = _React$Children$toArr[0],
+        second = _React$Children$toArr[1];
+
+    delete props.onEnter;
+    delete props.onEntering;
+    delete props.onEntered;
+    delete props.onExit;
+    delete props.onExiting;
+    delete props.onExited;
+    return /*#__PURE__*/React.createElement(TransitionGroup, props, inProp ? React.cloneElement(first, {
+      key: 'first',
+      onEnter: this.handleEnter,
+      onEntering: this.handleEntering,
+      onEntered: this.handleEntered
+    }) : React.cloneElement(second, {
+      key: 'second',
+      onEnter: this.handleExit,
+      onEntering: this.handleExiting,
+      onEntered: this.handleExited
+    }));
+  };
+
+  return ReplaceTransition;
+}(React.Component);
+
+ReplaceTransition.propTypes = process.env.NODE_ENV !== "production" ? {
+  in: PropTypes.bool.isRequired,
+  children: function children(props, propName) {
+    if (React.Children.count(props[propName]) !== 2) return new Error("\"" + propName + "\" must be exactly two transition components.");
+    return null;
+  }
+} : {};
+export default ReplaceTransition;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/SwitchTransition.js b/node_modules/react-transition-group/esm/SwitchTransition.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ba2e9e38f7175d0f619072fc77b8ab5403e4c48
--- /dev/null
+++ b/node_modules/react-transition-group/esm/SwitchTransition.js
@@ -0,0 +1,257 @@
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+
+var _leaveRenders, _enterRenders;
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import { ENTERED, ENTERING, EXITING } from './Transition';
+import TransitionGroupContext from './TransitionGroupContext';
+
+function areChildrenDifferent(oldChildren, newChildren) {
+  if (oldChildren === newChildren) return false;
+
+  if (React.isValidElement(oldChildren) && React.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {
+    return false;
+  }
+
+  return true;
+}
+/**
+ * Enum of modes for SwitchTransition component
+ * @enum { string }
+ */
+
+
+export var modes = {
+  out: 'out-in',
+  in: 'in-out'
+};
+
+var callHook = function callHook(element, name, cb) {
+  return function () {
+    var _element$props;
+
+    element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);
+    cb();
+  };
+};
+
+var leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {
+  var current = _ref.current,
+      changeState = _ref.changeState;
+  return React.cloneElement(current, {
+    in: false,
+    onExited: callHook(current, 'onExited', function () {
+      changeState(ENTERING, null);
+    })
+  });
+}, _leaveRenders[modes.in] = function (_ref2) {
+  var current = _ref2.current,
+      changeState = _ref2.changeState,
+      children = _ref2.children;
+  return [current, React.cloneElement(children, {
+    in: true,
+    onEntered: callHook(children, 'onEntered', function () {
+      changeState(ENTERING);
+    })
+  })];
+}, _leaveRenders);
+var enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {
+  var children = _ref3.children,
+      changeState = _ref3.changeState;
+  return React.cloneElement(children, {
+    in: true,
+    onEntered: callHook(children, 'onEntered', function () {
+      changeState(ENTERED, React.cloneElement(children, {
+        in: true
+      }));
+    })
+  });
+}, _enterRenders[modes.in] = function (_ref4) {
+  var current = _ref4.current,
+      children = _ref4.children,
+      changeState = _ref4.changeState;
+  return [React.cloneElement(current, {
+    in: false,
+    onExited: callHook(current, 'onExited', function () {
+      changeState(ENTERED, React.cloneElement(children, {
+        in: true
+      }));
+    })
+  }), React.cloneElement(children, {
+    in: true
+  })];
+}, _enterRenders);
+/**
+ * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).
+ * You can use it when you want to control the render between state transitions.
+ * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.
+ *
+ * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.
+ * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.
+ *
+ * **Note**: If you want the animation to happen simultaneously
+ * (that is, to have the old child removed and a new child inserted **at the same time**),
+ * you should use
+ * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)
+ * instead.
+ *
+ * ```jsx
+ * function App() {
+ *  const [state, setState] = useState(false);
+ *  return (
+ *    <SwitchTransition>
+ *      <CSSTransition
+ *        key={state ? "Goodbye, world!" : "Hello, world!"}
+ *        addEndListener={(node, done) => node.addEventListener("transitionend", done, false)}
+ *        classNames='fade'
+ *      >
+ *        <button onClick={() => setState(state => !state)}>
+ *          {state ? "Goodbye, world!" : "Hello, world!"}
+ *        </button>
+ *      </CSSTransition>
+ *    </SwitchTransition>
+ *  );
+ * }
+ * ```
+ *
+ * ```css
+ * .fade-enter{
+ *    opacity: 0;
+ * }
+ * .fade-exit{
+ *    opacity: 1;
+ * }
+ * .fade-enter-active{
+ *    opacity: 1;
+ * }
+ * .fade-exit-active{
+ *    opacity: 0;
+ * }
+ * .fade-enter-active,
+ * .fade-exit-active{
+ *    transition: opacity 500ms;
+ * }
+ * ```
+ */
+
+var SwitchTransition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(SwitchTransition, _React$Component);
+
+  function SwitchTransition() {
+    var _this;
+
+    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+    _this.state = {
+      status: ENTERED,
+      current: null
+    };
+    _this.appeared = false;
+
+    _this.changeState = function (status, current) {
+      if (current === void 0) {
+        current = _this.state.current;
+      }
+
+      _this.setState({
+        status: status,
+        current: current
+      });
+    };
+
+    return _this;
+  }
+
+  var _proto = SwitchTransition.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.appeared = true;
+  };
+
+  SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {
+    if (props.children == null) {
+      return {
+        current: null
+      };
+    }
+
+    if (state.status === ENTERING && props.mode === modes.in) {
+      return {
+        status: ENTERING
+      };
+    }
+
+    if (state.current && areChildrenDifferent(state.current, props.children)) {
+      return {
+        status: EXITING
+      };
+    }
+
+    return {
+      current: React.cloneElement(props.children, {
+        in: true
+      })
+    };
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        children = _this$props.children,
+        mode = _this$props.mode,
+        _this$state = this.state,
+        status = _this$state.status,
+        current = _this$state.current;
+    var data = {
+      children: children,
+      current: current,
+      changeState: this.changeState,
+      status: status
+    };
+    var component;
+
+    switch (status) {
+      case ENTERING:
+        component = enterRenders[mode](data);
+        break;
+
+      case EXITING:
+        component = leaveRenders[mode](data);
+        break;
+
+      case ENTERED:
+        component = current;
+    }
+
+    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {
+      value: {
+        isMounting: !this.appeared
+      }
+    }, component);
+  };
+
+  return SwitchTransition;
+}(React.Component);
+
+SwitchTransition.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * Transition modes.
+   * `out-in`: Current element transitions out first, then when complete, the new element transitions in.
+   * `in-out`: New element transitions in first, then when complete, the current element transitions out.
+   *
+   * @type {'out-in'|'in-out'}
+   */
+  mode: PropTypes.oneOf([modes.in, modes.out]),
+
+  /**
+   * Any `Transition` or `CSSTransition` component.
+   */
+  children: PropTypes.oneOfType([PropTypes.element.isRequired])
+} : {};
+SwitchTransition.defaultProps = {
+  mode: modes.out
+};
+export default SwitchTransition;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/Transition.js b/node_modules/react-transition-group/esm/Transition.js
new file mode 100644
index 0000000000000000000000000000000000000000..986d29f43ade851a1b4701a6eb857339c8cb33eb
--- /dev/null
+++ b/node_modules/react-transition-group/esm/Transition.js
@@ -0,0 +1,625 @@
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+import PropTypes from 'prop-types';
+import React from 'react';
+import ReactDOM from 'react-dom';
+import config from './config';
+import { timeoutsShape } from './utils/PropTypes';
+import TransitionGroupContext from './TransitionGroupContext';
+import { forceReflow } from './utils/reflow';
+export var UNMOUNTED = 'unmounted';
+export var EXITED = 'exited';
+export var ENTERING = 'entering';
+export var ENTERED = 'entered';
+export var EXITING = 'exiting';
+/**
+ * The Transition component lets you describe a transition from one component
+ * state to another _over time_ with a simple declarative API. Most commonly
+ * it's used to animate the mounting and unmounting of a component, but can also
+ * be used to describe in-place transition states as well.
+ *
+ * ---
+ *
+ * **Note**: `Transition` is a platform-agnostic base component. If you're using
+ * transitions in CSS, you'll probably want to use
+ * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)
+ * instead. It inherits all the features of `Transition`, but contains
+ * additional features necessary to play nice with CSS transitions (hence the
+ * name of the component).
+ *
+ * ---
+ *
+ * By default the `Transition` component does not alter the behavior of the
+ * component it renders, it only tracks "enter" and "exit" states for the
+ * components. It's up to you to give meaning and effect to those states. For
+ * example we can add styles to a component when it enters or exits:
+ *
+ * ```jsx
+ * import { Transition } from 'react-transition-group';
+ *
+ * const duration = 300;
+ *
+ * const defaultStyle = {
+ *   transition: `opacity ${duration}ms ease-in-out`,
+ *   opacity: 0,
+ * }
+ *
+ * const transitionStyles = {
+ *   entering: { opacity: 1 },
+ *   entered:  { opacity: 1 },
+ *   exiting:  { opacity: 0 },
+ *   exited:  { opacity: 0 },
+ * };
+ *
+ * const Fade = ({ in: inProp }) => (
+ *   <Transition in={inProp} timeout={duration}>
+ *     {state => (
+ *       <div style={{
+ *         ...defaultStyle,
+ *         ...transitionStyles[state]
+ *       }}>
+ *         I'm a fade Transition!
+ *       </div>
+ *     )}
+ *   </Transition>
+ * );
+ * ```
+ *
+ * There are 4 main states a Transition can be in:
+ *  - `'entering'`
+ *  - `'entered'`
+ *  - `'exiting'`
+ *  - `'exited'`
+ *
+ * Transition state is toggled via the `in` prop. When `true` the component
+ * begins the "Enter" stage. During this stage, the component will shift from
+ * its current transition state, to `'entering'` for the duration of the
+ * transition and then to the `'entered'` stage once it's complete. Let's take
+ * the following example (we'll use the
+ * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):
+ *
+ * ```jsx
+ * function App() {
+ *   const [inProp, setInProp] = useState(false);
+ *   return (
+ *     <div>
+ *       <Transition in={inProp} timeout={500}>
+ *         {state => (
+ *           // ...
+ *         )}
+ *       </Transition>
+ *       <button onClick={() => setInProp(true)}>
+ *         Click to Enter
+ *       </button>
+ *     </div>
+ *   );
+ * }
+ * ```
+ *
+ * When the button is clicked the component will shift to the `'entering'` state
+ * and stay there for 500ms (the value of `timeout`) before it finally switches
+ * to `'entered'`.
+ *
+ * When `in` is `false` the same thing happens except the state moves from
+ * `'exiting'` to `'exited'`.
+ */
+
+var Transition = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(Transition, _React$Component);
+
+  function Transition(props, context) {
+    var _this;
+
+    _this = _React$Component.call(this, props, context) || this;
+    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears
+
+    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;
+    var initialStatus;
+    _this.appearStatus = null;
+
+    if (props.in) {
+      if (appear) {
+        initialStatus = EXITED;
+        _this.appearStatus = ENTERING;
+      } else {
+        initialStatus = ENTERED;
+      }
+    } else {
+      if (props.unmountOnExit || props.mountOnEnter) {
+        initialStatus = UNMOUNTED;
+      } else {
+        initialStatus = EXITED;
+      }
+    }
+
+    _this.state = {
+      status: initialStatus
+    };
+    _this.nextCallback = null;
+    return _this;
+  }
+
+  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {
+    var nextIn = _ref.in;
+
+    if (nextIn && prevState.status === UNMOUNTED) {
+      return {
+        status: EXITED
+      };
+    }
+
+    return null;
+  } // getSnapshotBeforeUpdate(prevProps) {
+  //   let nextStatus = null
+  //   if (prevProps !== this.props) {
+  //     const { status } = this.state
+  //     if (this.props.in) {
+  //       if (status !== ENTERING && status !== ENTERED) {
+  //         nextStatus = ENTERING
+  //       }
+  //     } else {
+  //       if (status === ENTERING || status === ENTERED) {
+  //         nextStatus = EXITING
+  //       }
+  //     }
+  //   }
+  //   return { nextStatus }
+  // }
+  ;
+
+  var _proto = Transition.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.updateStatus(true, this.appearStatus);
+  };
+
+  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
+    var nextStatus = null;
+
+    if (prevProps !== this.props) {
+      var status = this.state.status;
+
+      if (this.props.in) {
+        if (status !== ENTERING && status !== ENTERED) {
+          nextStatus = ENTERING;
+        }
+      } else {
+        if (status === ENTERING || status === ENTERED) {
+          nextStatus = EXITING;
+        }
+      }
+    }
+
+    this.updateStatus(false, nextStatus);
+  };
+
+  _proto.componentWillUnmount = function componentWillUnmount() {
+    this.cancelNextCallback();
+  };
+
+  _proto.getTimeouts = function getTimeouts() {
+    var timeout = this.props.timeout;
+    var exit, enter, appear;
+    exit = enter = appear = timeout;
+
+    if (timeout != null && typeof timeout !== 'number') {
+      exit = timeout.exit;
+      enter = timeout.enter; // TODO: remove fallback for next major
+
+      appear = timeout.appear !== undefined ? timeout.appear : enter;
+    }
+
+    return {
+      exit: exit,
+      enter: enter,
+      appear: appear
+    };
+  };
+
+  _proto.updateStatus = function updateStatus(mounting, nextStatus) {
+    if (mounting === void 0) {
+      mounting = false;
+    }
+
+    if (nextStatus !== null) {
+      // nextStatus will always be ENTERING or EXITING.
+      this.cancelNextCallback();
+
+      if (nextStatus === ENTERING) {
+        if (this.props.unmountOnExit || this.props.mountOnEnter) {
+          var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749
+          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.
+          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.
+
+          if (node) forceReflow(node);
+        }
+
+        this.performEnter(mounting);
+      } else {
+        this.performExit();
+      }
+    } else if (this.props.unmountOnExit && this.state.status === EXITED) {
+      this.setState({
+        status: UNMOUNTED
+      });
+    }
+  };
+
+  _proto.performEnter = function performEnter(mounting) {
+    var _this2 = this;
+
+    var enter = this.props.enter;
+    var appearing = this.context ? this.context.isMounting : mounting;
+
+    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],
+        maybeNode = _ref2[0],
+        maybeAppearing = _ref2[1];
+
+    var timeouts = this.getTimeouts();
+    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED
+    // if we are mounting and running this it means appear _must_ be set
+
+    if (!mounting && !enter || config.disabled) {
+      this.safeSetState({
+        status: ENTERED
+      }, function () {
+        _this2.props.onEntered(maybeNode);
+      });
+      return;
+    }
+
+    this.props.onEnter(maybeNode, maybeAppearing);
+    this.safeSetState({
+      status: ENTERING
+    }, function () {
+      _this2.props.onEntering(maybeNode, maybeAppearing);
+
+      _this2.onTransitionEnd(enterTimeout, function () {
+        _this2.safeSetState({
+          status: ENTERED
+        }, function () {
+          _this2.props.onEntered(maybeNode, maybeAppearing);
+        });
+      });
+    });
+  };
+
+  _proto.performExit = function performExit() {
+    var _this3 = this;
+
+    var exit = this.props.exit;
+    var timeouts = this.getTimeouts();
+    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED
+
+    if (!exit || config.disabled) {
+      this.safeSetState({
+        status: EXITED
+      }, function () {
+        _this3.props.onExited(maybeNode);
+      });
+      return;
+    }
+
+    this.props.onExit(maybeNode);
+    this.safeSetState({
+      status: EXITING
+    }, function () {
+      _this3.props.onExiting(maybeNode);
+
+      _this3.onTransitionEnd(timeouts.exit, function () {
+        _this3.safeSetState({
+          status: EXITED
+        }, function () {
+          _this3.props.onExited(maybeNode);
+        });
+      });
+    });
+  };
+
+  _proto.cancelNextCallback = function cancelNextCallback() {
+    if (this.nextCallback !== null) {
+      this.nextCallback.cancel();
+      this.nextCallback = null;
+    }
+  };
+
+  _proto.safeSetState = function safeSetState(nextState, callback) {
+    // This shouldn't be necessary, but there are weird race conditions with
+    // setState callbacks and unmounting in testing, so always make sure that
+    // we can cancel any pending setState callbacks after we unmount.
+    callback = this.setNextCallback(callback);
+    this.setState(nextState, callback);
+  };
+
+  _proto.setNextCallback = function setNextCallback(callback) {
+    var _this4 = this;
+
+    var active = true;
+
+    this.nextCallback = function (event) {
+      if (active) {
+        active = false;
+        _this4.nextCallback = null;
+        callback(event);
+      }
+    };
+
+    this.nextCallback.cancel = function () {
+      active = false;
+    };
+
+    return this.nextCallback;
+  };
+
+  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {
+    this.setNextCallback(handler);
+    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);
+    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;
+
+    if (!node || doesNotHaveTimeoutOrListener) {
+      setTimeout(this.nextCallback, 0);
+      return;
+    }
+
+    if (this.props.addEndListener) {
+      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],
+          maybeNode = _ref3[0],
+          maybeNextCallback = _ref3[1];
+
+      this.props.addEndListener(maybeNode, maybeNextCallback);
+    }
+
+    if (timeout != null) {
+      setTimeout(this.nextCallback, timeout);
+    }
+  };
+
+  _proto.render = function render() {
+    var status = this.state.status;
+
+    if (status === UNMOUNTED) {
+      return null;
+    }
+
+    var _this$props = this.props,
+        children = _this$props.children,
+        _in = _this$props.in,
+        _mountOnEnter = _this$props.mountOnEnter,
+        _unmountOnExit = _this$props.unmountOnExit,
+        _appear = _this$props.appear,
+        _enter = _this$props.enter,
+        _exit = _this$props.exit,
+        _timeout = _this$props.timeout,
+        _addEndListener = _this$props.addEndListener,
+        _onEnter = _this$props.onEnter,
+        _onEntering = _this$props.onEntering,
+        _onEntered = _this$props.onEntered,
+        _onExit = _this$props.onExit,
+        _onExiting = _this$props.onExiting,
+        _onExited = _this$props.onExited,
+        _nodeRef = _this$props.nodeRef,
+        childProps = _objectWithoutPropertiesLoose(_this$props, ["children", "in", "mountOnEnter", "unmountOnExit", "appear", "enter", "exit", "timeout", "addEndListener", "onEnter", "onEntering", "onEntered", "onExit", "onExiting", "onExited", "nodeRef"]);
+
+    return (
+      /*#__PURE__*/
+      // allows for nested Transitions
+      React.createElement(TransitionGroupContext.Provider, {
+        value: null
+      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))
+    );
+  };
+
+  return Transition;
+}(React.Component);
+
+Transition.contextType = TransitionGroupContext;
+Transition.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * A React reference to DOM element that need to transition:
+   * https://stackoverflow.com/a/51127130/4671932
+   *
+   *   - When `nodeRef` prop is used, `node` is not passed to callback functions
+   *      (e.g. `onEnter`) because user already has direct access to the node.
+   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new
+   *     `nodeRef` need to be provided to `Transition` with changed `key` prop
+   *     (see
+   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).
+   */
+  nodeRef: PropTypes.shape({
+    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {
+      var value = propValue[key];
+      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);
+    }
+  }),
+
+  /**
+   * A `function` child can be used instead of a React element. This function is
+   * called with the current transition status (`'entering'`, `'entered'`,
+   * `'exiting'`, `'exited'`), which can be used to apply context
+   * specific props to a component.
+   *
+   * ```jsx
+   * <Transition in={this.state.in} timeout={150}>
+   *   {state => (
+   *     <MyComponent className={`fade fade-${state}`} />
+   *   )}
+   * </Transition>
+   * ```
+   */
+  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,
+
+  /**
+   * Show the component; triggers the enter or exit states
+   */
+  in: PropTypes.bool,
+
+  /**
+   * By default the child component is mounted immediately along with
+   * the parent `Transition` component. If you want to "lazy mount" the component on the
+   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay
+   * mounted, even on "exited", unless you also specify `unmountOnExit`.
+   */
+  mountOnEnter: PropTypes.bool,
+
+  /**
+   * By default the child component stays mounted after it reaches the `'exited'` state.
+   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.
+   */
+  unmountOnExit: PropTypes.bool,
+
+  /**
+   * By default the child component does not perform the enter transition when
+   * it first mounts, regardless of the value of `in`. If you want this
+   * behavior, set both `appear` and `in` to `true`.
+   *
+   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop
+   * > only adds an additional enter transition. However, in the
+   * > `<CSSTransition>` component that first enter transition does result in
+   * > additional `.appear-*` classes, that way you can choose to style it
+   * > differently.
+   */
+  appear: PropTypes.bool,
+
+  /**
+   * Enable or disable enter transitions.
+   */
+  enter: PropTypes.bool,
+
+  /**
+   * Enable or disable exit transitions.
+   */
+  exit: PropTypes.bool,
+
+  /**
+   * The duration of the transition, in milliseconds.
+   * Required unless `addEndListener` is provided.
+   *
+   * You may specify a single timeout for all transitions:
+   *
+   * ```jsx
+   * timeout={500}
+   * ```
+   *
+   * or individually:
+   *
+   * ```jsx
+   * timeout={{
+   *  appear: 500,
+   *  enter: 300,
+   *  exit: 500,
+   * }}
+   * ```
+   *
+   * - `appear` defaults to the value of `enter`
+   * - `enter` defaults to `0`
+   * - `exit` defaults to `0`
+   *
+   * @type {number | { enter?: number, exit?: number, appear?: number }}
+   */
+  timeout: function timeout(props) {
+    var pt = timeoutsShape;
+    if (!props.addEndListener) pt = pt.isRequired;
+
+    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    return pt.apply(void 0, [props].concat(args));
+  },
+
+  /**
+   * Add a custom transition end trigger. Called with the transitioning
+   * DOM node and a `done` callback. Allows for more fine grained transition end
+   * logic. Timeouts are still used as a fallback if provided.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * ```jsx
+   * addEndListener={(node, done) => {
+   *   // use the css transitionend event to mark the finish of a transition
+   *   node.addEventListener('transitionend', done, false);
+   * }}
+   * ```
+   */
+  addEndListener: PropTypes.func,
+
+  /**
+   * Callback fired before the "entering" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool) -> void
+   */
+  onEnter: PropTypes.func,
+
+  /**
+   * Callback fired after the "entering" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool)
+   */
+  onEntering: PropTypes.func,
+
+  /**
+   * Callback fired after the "entered" status is applied. An extra parameter
+   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement, isAppearing: bool) -> void
+   */
+  onEntered: PropTypes.func,
+
+  /**
+   * Callback fired before the "exiting" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExit: PropTypes.func,
+
+  /**
+   * Callback fired after the "exiting" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed.
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExiting: PropTypes.func,
+
+  /**
+   * Callback fired after the "exited" status is applied.
+   *
+   * **Note**: when `nodeRef` prop is passed, `node` is not passed
+   *
+   * @type Function(node: HtmlElement) -> void
+   */
+  onExited: PropTypes.func
+} : {}; // Name the function so it is clearer in the documentation
+
+function noop() {}
+
+Transition.defaultProps = {
+  in: false,
+  mountOnEnter: false,
+  unmountOnExit: false,
+  appear: false,
+  enter: true,
+  exit: true,
+  onEnter: noop,
+  onEntering: noop,
+  onEntered: noop,
+  onExit: noop,
+  onExiting: noop,
+  onExited: noop
+};
+Transition.UNMOUNTED = UNMOUNTED;
+Transition.EXITED = EXITED;
+Transition.ENTERING = ENTERING;
+Transition.ENTERED = ENTERED;
+Transition.EXITING = EXITING;
+export default Transition;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/TransitionGroup.js b/node_modules/react-transition-group/esm/TransitionGroup.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e4deb3f2e5c217a8a00f57865b10e379035269e
--- /dev/null
+++ b/node_modules/react-transition-group/esm/TransitionGroup.js
@@ -0,0 +1,189 @@
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+import PropTypes from 'prop-types';
+import React from 'react';
+import TransitionGroupContext from './TransitionGroupContext';
+import { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';
+
+var values = Object.values || function (obj) {
+  return Object.keys(obj).map(function (k) {
+    return obj[k];
+  });
+};
+
+var defaultProps = {
+  component: 'div',
+  childFactory: function childFactory(child) {
+    return child;
+  }
+};
+/**
+ * The `<TransitionGroup>` component manages a set of transition components
+ * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition
+ * components, `<TransitionGroup>` is a state machine for managing the mounting
+ * and unmounting of components over time.
+ *
+ * Consider the example below. As items are removed or added to the TodoList the
+ * `in` prop is toggled automatically by the `<TransitionGroup>`.
+ *
+ * Note that `<TransitionGroup>`  does not define any animation behavior!
+ * Exactly _how_ a list item animates is up to the individual transition
+ * component. This means you can mix and match animations across different list
+ * items.
+ */
+
+var TransitionGroup = /*#__PURE__*/function (_React$Component) {
+  _inheritsLoose(TransitionGroup, _React$Component);
+
+  function TransitionGroup(props, context) {
+    var _this;
+
+    _this = _React$Component.call(this, props, context) || this;
+
+    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear
+
+
+    _this.state = {
+      contextValue: {
+        isMounting: true
+      },
+      handleExited: handleExited,
+      firstRender: true
+    };
+    return _this;
+  }
+
+  var _proto = TransitionGroup.prototype;
+
+  _proto.componentDidMount = function componentDidMount() {
+    this.mounted = true;
+    this.setState({
+      contextValue: {
+        isMounting: false
+      }
+    });
+  };
+
+  _proto.componentWillUnmount = function componentWillUnmount() {
+    this.mounted = false;
+  };
+
+  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {
+    var prevChildMapping = _ref.children,
+        handleExited = _ref.handleExited,
+        firstRender = _ref.firstRender;
+    return {
+      children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),
+      firstRender: false
+    };
+  } // node is `undefined` when user provided `nodeRef` prop
+  ;
+
+  _proto.handleExited = function handleExited(child, node) {
+    var currentChildMapping = getChildMapping(this.props.children);
+    if (child.key in currentChildMapping) return;
+
+    if (child.props.onExited) {
+      child.props.onExited(node);
+    }
+
+    if (this.mounted) {
+      this.setState(function (state) {
+        var children = _extends({}, state.children);
+
+        delete children[child.key];
+        return {
+          children: children
+        };
+      });
+    }
+  };
+
+  _proto.render = function render() {
+    var _this$props = this.props,
+        Component = _this$props.component,
+        childFactory = _this$props.childFactory,
+        props = _objectWithoutPropertiesLoose(_this$props, ["component", "childFactory"]);
+
+    var contextValue = this.state.contextValue;
+    var children = values(this.state.children).map(childFactory);
+    delete props.appear;
+    delete props.enter;
+    delete props.exit;
+
+    if (Component === null) {
+      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {
+        value: contextValue
+      }, children);
+    }
+
+    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {
+      value: contextValue
+    }, /*#__PURE__*/React.createElement(Component, props, children));
+  };
+
+  return TransitionGroup;
+}(React.Component);
+
+TransitionGroup.propTypes = process.env.NODE_ENV !== "production" ? {
+  /**
+   * `<TransitionGroup>` renders a `<div>` by default. You can change this
+   * behavior by providing a `component` prop.
+   * If you use React v16+ and would like to avoid a wrapping `<div>` element
+   * you can pass in `component={null}`. This is useful if the wrapping div
+   * borks your css styles.
+   */
+  component: PropTypes.any,
+
+  /**
+   * A set of `<Transition>` components, that are toggled `in` and out as they
+   * leave. the `<TransitionGroup>` will inject specific transition props, so
+   * remember to spread them through if you are wrapping the `<Transition>` as
+   * with our `<Fade>` example.
+   *
+   * While this component is meant for multiple `Transition` or `CSSTransition`
+   * children, sometimes you may want to have a single transition child with
+   * content that you want to be transitioned out and in when you change it
+   * (e.g. routes, images etc.) In that case you can change the `key` prop of
+   * the transition child as you change its content, this will cause
+   * `TransitionGroup` to transition the child out and back in.
+   */
+  children: PropTypes.node,
+
+  /**
+   * A convenience prop that enables or disables appear animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  appear: PropTypes.bool,
+
+  /**
+   * A convenience prop that enables or disables enter animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  enter: PropTypes.bool,
+
+  /**
+   * A convenience prop that enables or disables exit animations
+   * for all children. Note that specifying this will override any defaults set
+   * on individual children Transitions.
+   */
+  exit: PropTypes.bool,
+
+  /**
+   * You may need to apply reactive updates to a child as it is exiting.
+   * This is generally done by using `cloneElement` however in the case of an exiting
+   * child the element has already been removed and not accessible to the consumer.
+   *
+   * If you do need to update a child as it leaves you can provide a `childFactory`
+   * to wrap every child, even the ones that are leaving.
+   *
+   * @type Function(child: ReactElement) -> ReactElement
+   */
+  childFactory: PropTypes.func
+} : {};
+TransitionGroup.defaultProps = defaultProps;
+export default TransitionGroup;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/TransitionGroupContext.js b/node_modules/react-transition-group/esm/TransitionGroupContext.js
new file mode 100644
index 0000000000000000000000000000000000000000..659d70e1314bd95b9a3c82c89e1baa1fb8d8b8a3
--- /dev/null
+++ b/node_modules/react-transition-group/esm/TransitionGroupContext.js
@@ -0,0 +1,2 @@
+import React from 'react';
+export default React.createContext(null);
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/config.js b/node_modules/react-transition-group/esm/config.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bb7274c32fc24418c6661fd68ac9b8d97c4dc64
--- /dev/null
+++ b/node_modules/react-transition-group/esm/config.js
@@ -0,0 +1,3 @@
+export default {
+  disabled: false
+};
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/index.js b/node_modules/react-transition-group/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1856bac3f6954f1199d9a4c6faea45470c97fdcc
--- /dev/null
+++ b/node_modules/react-transition-group/esm/index.js
@@ -0,0 +1,6 @@
+export { default as CSSTransition } from './CSSTransition';
+export { default as ReplaceTransition } from './ReplaceTransition';
+export { default as SwitchTransition } from './SwitchTransition';
+export { default as TransitionGroup } from './TransitionGroup';
+export { default as Transition } from './Transition';
+export { default as config } from './config';
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/utils/ChildMapping.js b/node_modules/react-transition-group/esm/utils/ChildMapping.js
new file mode 100644
index 0000000000000000000000000000000000000000..86f32cf7cc65c44af744ca553d63ad18b7aa88cd
--- /dev/null
+++ b/node_modules/react-transition-group/esm/utils/ChildMapping.js
@@ -0,0 +1,140 @@
+import { Children, cloneElement, isValidElement } from 'react';
+/**
+ * Given `this.props.children`, return an object mapping key to child.
+ *
+ * @param {*} children `this.props.children`
+ * @return {object} Mapping of key to child
+ */
+
+export function getChildMapping(children, mapFn) {
+  var mapper = function mapper(child) {
+    return mapFn && isValidElement(child) ? mapFn(child) : child;
+  };
+
+  var result = Object.create(null);
+  if (children) Children.map(children, function (c) {
+    return c;
+  }).forEach(function (child) {
+    // run the map function here instead so that the key is the computed one
+    result[child.key] = mapper(child);
+  });
+  return result;
+}
+/**
+ * When you're adding or removing children some may be added or removed in the
+ * same render pass. We want to show *both* since we want to simultaneously
+ * animate elements in and out. This function takes a previous set of keys
+ * and a new set of keys and merges them with its best guess of the correct
+ * ordering. In the future we may expose some of the utilities in
+ * ReactMultiChild to make this easy, but for now React itself does not
+ * directly have this concept of the union of prevChildren and nextChildren
+ * so we implement it here.
+ *
+ * @param {object} prev prev children as returned from
+ * `ReactTransitionChildMapping.getChildMapping()`.
+ * @param {object} next next children as returned from
+ * `ReactTransitionChildMapping.getChildMapping()`.
+ * @return {object} a key set that contains all keys in `prev` and all keys
+ * in `next` in a reasonable order.
+ */
+
+export function mergeChildMappings(prev, next) {
+  prev = prev || {};
+  next = next || {};
+
+  function getValueForKey(key) {
+    return key in next ? next[key] : prev[key];
+  } // For each key of `next`, the list of keys to insert before that key in
+  // the combined list
+
+
+  var nextKeysPending = Object.create(null);
+  var pendingKeys = [];
+
+  for (var prevKey in prev) {
+    if (prevKey in next) {
+      if (pendingKeys.length) {
+        nextKeysPending[prevKey] = pendingKeys;
+        pendingKeys = [];
+      }
+    } else {
+      pendingKeys.push(prevKey);
+    }
+  }
+
+  var i;
+  var childMapping = {};
+
+  for (var nextKey in next) {
+    if (nextKeysPending[nextKey]) {
+      for (i = 0; i < nextKeysPending[nextKey].length; i++) {
+        var pendingNextKey = nextKeysPending[nextKey][i];
+        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);
+      }
+    }
+
+    childMapping[nextKey] = getValueForKey(nextKey);
+  } // Finally, add the keys which didn't appear before any key in `next`
+
+
+  for (i = 0; i < pendingKeys.length; i++) {
+    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);
+  }
+
+  return childMapping;
+}
+
+function getProp(child, prop, props) {
+  return props[prop] != null ? props[prop] : child.props[prop];
+}
+
+export function getInitialChildMapping(props, onExited) {
+  return getChildMapping(props.children, function (child) {
+    return cloneElement(child, {
+      onExited: onExited.bind(null, child),
+      in: true,
+      appear: getProp(child, 'appear', props),
+      enter: getProp(child, 'enter', props),
+      exit: getProp(child, 'exit', props)
+    });
+  });
+}
+export function getNextChildMapping(nextProps, prevChildMapping, onExited) {
+  var nextChildMapping = getChildMapping(nextProps.children);
+  var children = mergeChildMappings(prevChildMapping, nextChildMapping);
+  Object.keys(children).forEach(function (key) {
+    var child = children[key];
+    if (!isValidElement(child)) return;
+    var hasPrev = (key in prevChildMapping);
+    var hasNext = (key in nextChildMapping);
+    var prevChild = prevChildMapping[key];
+    var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)
+
+    if (hasNext && (!hasPrev || isLeaving)) {
+      // console.log('entering', key)
+      children[key] = cloneElement(child, {
+        onExited: onExited.bind(null, child),
+        in: true,
+        exit: getProp(child, 'exit', nextProps),
+        enter: getProp(child, 'enter', nextProps)
+      });
+    } else if (!hasNext && hasPrev && !isLeaving) {
+      // item is old (exiting)
+      // console.log('leaving', key)
+      children[key] = cloneElement(child, {
+        in: false
+      });
+    } else if (hasNext && hasPrev && isValidElement(prevChild)) {
+      // item hasn't changed transition states
+      // copy over the last transition props;
+      // console.log('unchanged', key)
+      children[key] = cloneElement(child, {
+        onExited: onExited.bind(null, child),
+        in: prevChild.props.in,
+        exit: getProp(child, 'exit', nextProps),
+        enter: getProp(child, 'enter', nextProps)
+      });
+    }
+  });
+  return children;
+}
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/utils/PropTypes.js b/node_modules/react-transition-group/esm/utils/PropTypes.js
new file mode 100644
index 0000000000000000000000000000000000000000..b67473ed7909cfd23793ce23faaff85180436ef8
--- /dev/null
+++ b/node_modules/react-transition-group/esm/utils/PropTypes.js
@@ -0,0 +1,18 @@
+import PropTypes from 'prop-types';
+export var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({
+  enter: PropTypes.number,
+  exit: PropTypes.number,
+  appear: PropTypes.number
+}).isRequired]) : null;
+export var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({
+  enter: PropTypes.string,
+  exit: PropTypes.string,
+  active: PropTypes.string
+}), PropTypes.shape({
+  enter: PropTypes.string,
+  enterDone: PropTypes.string,
+  enterActive: PropTypes.string,
+  exit: PropTypes.string,
+  exitDone: PropTypes.string,
+  exitActive: PropTypes.string
+})]) : null;
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/utils/SimpleSet.js b/node_modules/react-transition-group/esm/utils/SimpleSet.js
new file mode 100644
index 0000000000000000000000000000000000000000..6ef979c9903ada14285ef605662342706e881a43
--- /dev/null
+++ b/node_modules/react-transition-group/esm/utils/SimpleSet.js
@@ -0,0 +1,31 @@
+var SimpleSet = /*#__PURE__*/function () {
+  function SimpleSet() {
+    this.v = [];
+  }
+
+  var _proto = SimpleSet.prototype;
+
+  _proto.clear = function clear() {
+    this.v.length = 0;
+  };
+
+  _proto.has = function has(k) {
+    return this.v.indexOf(k) !== -1;
+  };
+
+  _proto.add = function add(k) {
+    if (this.has(k)) return;
+    this.v.push(k);
+  };
+
+  _proto.delete = function _delete(k) {
+    var idx = this.v.indexOf(k);
+    if (idx === -1) return false;
+    this.v.splice(idx, 1);
+    return true;
+  };
+
+  return SimpleSet;
+}();
+
+export { SimpleSet as default };
\ No newline at end of file
diff --git a/node_modules/react-transition-group/esm/utils/reflow.js b/node_modules/react-transition-group/esm/utils/reflow.js
new file mode 100644
index 0000000000000000000000000000000000000000..62c5029821d3646fbfba8f3a59e13f98ccb3bd0a
--- /dev/null
+++ b/node_modules/react-transition-group/esm/utils/reflow.js
@@ -0,0 +1,3 @@
+export var forceReflow = function forceReflow(node) {
+  return node.scrollTop;
+};
\ No newline at end of file
diff --git a/node_modules/react-transition-group/package.json b/node_modules/react-transition-group/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..621ee7dd34bd99d91337f271a124cbbd16ee16c9
--- /dev/null
+++ b/node_modules/react-transition-group/package.json
@@ -0,0 +1,94 @@
+{
+  "_from": "react-transition-group@^4.4.5",
+  "_id": "react-transition-group@4.4.5",
+  "_inBundle": false,
+  "_integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+  "_location": "/react-transition-group",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "react-transition-group@^4.4.5",
+    "name": "react-transition-group",
+    "escapedName": "react-transition-group",
+    "rawSpec": "^4.4.5",
+    "saveSpec": null,
+    "fetchSpec": "^4.4.5"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+  "_shasum": "e53d4e3f3344da8521489fbef8f2581d42becdd1",
+  "_spec": "react-transition-group@^4.4.5",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": "",
+  "browserify": {
+    "transform": [
+      "loose-envify"
+    ]
+  },
+  "bugs": {
+    "url": "https://github.com/reactjs/react-transition-group/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@babel/runtime": "^7.5.5",
+    "dom-helpers": "^5.0.1",
+    "loose-envify": "^1.4.0",
+    "prop-types": "^15.6.2"
+  },
+  "deprecated": false,
+  "description": "A react component toolset for managing animations",
+  "homepage": "https://github.com/reactjs/react-transition-group#readme",
+  "jest": {
+    "testRegex": "-test\\.js",
+    "setupFiles": [
+      "./test/setup.js"
+    ],
+    "setupFilesAfterEnv": [
+      "./test/setupAfterEnv.js"
+    ],
+    "roots": [
+      "<rootDir>/test"
+    ]
+  },
+  "keywords": [
+    "react",
+    "transition",
+    "addons",
+    "transition-group",
+    "animation",
+    "css",
+    "transitions"
+  ],
+  "license": "BSD-3-Clause",
+  "main": "cjs/index.js",
+  "module": "esm/index.js",
+  "name": "react-transition-group",
+  "peerDependencies": {
+    "react": ">=16.6.0",
+    "react-dom": ">=16.6.0"
+  },
+  "release": {
+    "pkgRoot": "lib",
+    "verifyConditions": [
+      "@semantic-release/changelog",
+      "semantic-release-alt-publish-dir",
+      "@semantic-release/git",
+      "@semantic-release/github"
+    ],
+    "prepare": [
+      "@semantic-release/changelog",
+      "semantic-release-alt-publish-dir",
+      "@semantic-release/npm",
+      "@semantic-release/git"
+    ]
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/reactjs/react-transition-group.git"
+  },
+  "sideEffects": false,
+  "version": "4.4.5"
+}
diff --git a/node_modules/regenerator-runtime/LICENSE b/node_modules/regenerator-runtime/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..cde61b6c53dda799b707ddf13c067fada5140acf
--- /dev/null
+++ b/node_modules/regenerator-runtime/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2014-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/regenerator-runtime/README.md b/node_modules/regenerator-runtime/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e8702babf3de6f6c22e169550b1d455133b6e290
--- /dev/null
+++ b/node_modules/regenerator-runtime/README.md
@@ -0,0 +1,31 @@
+# regenerator-runtime
+
+Standalone runtime for
+[Regenerator](https://github.com/facebook/regenerator)-compiled generator
+and `async` functions.
+
+To import the runtime as a module (recommended), either of the following
+import styles will work:
+```js
+// CommonJS
+const regeneratorRuntime = require("regenerator-runtime");
+
+// ECMAScript 2015
+import regeneratorRuntime from "regenerator-runtime";
+```
+
+To ensure that `regeneratorRuntime` is defined globally, either of the
+following styles will work:
+```js
+// CommonJS
+require("regenerator-runtime/runtime");
+
+// ECMAScript 2015
+import "regenerator-runtime/runtime.js";
+```
+
+To get the absolute file system path of `runtime.js`, evaluate the
+following expression:
+```js
+require("regenerator-runtime/path").path
+```
diff --git a/node_modules/regenerator-runtime/package.json b/node_modules/regenerator-runtime/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d217abee6b61247aa5ad2e1594ff98dd0f5d573
--- /dev/null
+++ b/node_modules/regenerator-runtime/package.json
@@ -0,0 +1,47 @@
+{
+  "_from": "regenerator-runtime@^0.14.0",
+  "_id": "regenerator-runtime@0.14.1",
+  "_inBundle": false,
+  "_integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+  "_location": "/regenerator-runtime",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "regenerator-runtime@^0.14.0",
+    "name": "regenerator-runtime",
+    "escapedName": "regenerator-runtime",
+    "rawSpec": "^0.14.0",
+    "saveSpec": null,
+    "fetchSpec": "^0.14.0"
+  },
+  "_requiredBy": [
+    "/@babel/runtime"
+  ],
+  "_resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+  "_shasum": "356ade10263f685dda125100cd862c1db895327f",
+  "_spec": "regenerator-runtime@^0.14.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/@babel/runtime",
+  "author": {
+    "name": "Ben Newman",
+    "email": "bn@cs.stanford.edu"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Runtime for Regenerator-compiled generator and async functions.",
+  "keywords": [
+    "regenerator",
+    "runtime",
+    "generator",
+    "async"
+  ],
+  "license": "MIT",
+  "main": "runtime.js",
+  "name": "regenerator-runtime",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/facebook/regenerator/tree/main/packages/runtime"
+  },
+  "sideEffects": true,
+  "version": "0.14.1"
+}
diff --git a/node_modules/regenerator-runtime/path.js b/node_modules/regenerator-runtime/path.js
new file mode 100644
index 0000000000000000000000000000000000000000..ced878b884a680e5aafe2cfa83e019d9f6043654
--- /dev/null
+++ b/node_modules/regenerator-runtime/path.js
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+exports.path = require("path").join(
+  __dirname,
+  "runtime.js"
+);
diff --git a/node_modules/regenerator-runtime/runtime.js b/node_modules/regenerator-runtime/runtime.js
new file mode 100644
index 0000000000000000000000000000000000000000..5593ca59df1a550a407642bf07d5960fb59dc56e
--- /dev/null
+++ b/node_modules/regenerator-runtime/runtime.js
@@ -0,0 +1,761 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+var runtime = (function (exports) {
+  "use strict";
+
+  var Op = Object.prototype;
+  var hasOwn = Op.hasOwnProperty;
+  var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };
+  var undefined; // More compressible than void 0.
+  var $Symbol = typeof Symbol === "function" ? Symbol : {};
+  var iteratorSymbol = $Symbol.iterator || "@@iterator";
+  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
+  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
+
+  function define(obj, key, value) {
+    Object.defineProperty(obj, key, {
+      value: value,
+      enumerable: true,
+      configurable: true,
+      writable: true
+    });
+    return obj[key];
+  }
+  try {
+    // IE 8 has a broken Object.defineProperty that only works on DOM objects.
+    define({}, "");
+  } catch (err) {
+    define = function(obj, key, value) {
+      return obj[key] = value;
+    };
+  }
+
+  function wrap(innerFn, outerFn, self, tryLocsList) {
+    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
+    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
+    var generator = Object.create(protoGenerator.prototype);
+    var context = new Context(tryLocsList || []);
+
+    // The ._invoke method unifies the implementations of the .next,
+    // .throw, and .return methods.
+    defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) });
+
+    return generator;
+  }
+  exports.wrap = wrap;
+
+  // Try/catch helper to minimize deoptimizations. Returns a completion
+  // record like context.tryEntries[i].completion. This interface could
+  // have been (and was previously) designed to take a closure to be
+  // invoked without arguments, but in all the cases we care about we
+  // already have an existing method we want to call, so there's no need
+  // to create a new function object. We can even get away with assuming
+  // the method takes exactly one argument, since that happens to be true
+  // in every case, so we don't have to touch the arguments object. The
+  // only additional allocation required is the completion record, which
+  // has a stable shape and so hopefully should be cheap to allocate.
+  function tryCatch(fn, obj, arg) {
+    try {
+      return { type: "normal", arg: fn.call(obj, arg) };
+    } catch (err) {
+      return { type: "throw", arg: err };
+    }
+  }
+
+  var GenStateSuspendedStart = "suspendedStart";
+  var GenStateSuspendedYield = "suspendedYield";
+  var GenStateExecuting = "executing";
+  var GenStateCompleted = "completed";
+
+  // Returning this object from the innerFn has the same effect as
+  // breaking out of the dispatch switch statement.
+  var ContinueSentinel = {};
+
+  // Dummy constructor functions that we use as the .constructor and
+  // .constructor.prototype properties for functions that return Generator
+  // objects. For full spec compliance, you may wish to configure your
+  // minifier not to mangle the names of these two functions.
+  function Generator() {}
+  function GeneratorFunction() {}
+  function GeneratorFunctionPrototype() {}
+
+  // This is a polyfill for %IteratorPrototype% for environments that
+  // don't natively support it.
+  var IteratorPrototype = {};
+  define(IteratorPrototype, iteratorSymbol, function () {
+    return this;
+  });
+
+  var getProto = Object.getPrototypeOf;
+  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
+  if (NativeIteratorPrototype &&
+      NativeIteratorPrototype !== Op &&
+      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
+    // This environment has a native %IteratorPrototype%; use it instead
+    // of the polyfill.
+    IteratorPrototype = NativeIteratorPrototype;
+  }
+
+  var Gp = GeneratorFunctionPrototype.prototype =
+    Generator.prototype = Object.create(IteratorPrototype);
+  GeneratorFunction.prototype = GeneratorFunctionPrototype;
+  defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: true });
+  defineProperty(
+    GeneratorFunctionPrototype,
+    "constructor",
+    { value: GeneratorFunction, configurable: true }
+  );
+  GeneratorFunction.displayName = define(
+    GeneratorFunctionPrototype,
+    toStringTagSymbol,
+    "GeneratorFunction"
+  );
+
+  // Helper for defining the .next, .throw, and .return methods of the
+  // Iterator interface in terms of a single ._invoke method.
+  function defineIteratorMethods(prototype) {
+    ["next", "throw", "return"].forEach(function(method) {
+      define(prototype, method, function(arg) {
+        return this._invoke(method, arg);
+      });
+    });
+  }
+
+  exports.isGeneratorFunction = function(genFun) {
+    var ctor = typeof genFun === "function" && genFun.constructor;
+    return ctor
+      ? ctor === GeneratorFunction ||
+        // For the native GeneratorFunction constructor, the best we can
+        // do is to check its .name property.
+        (ctor.displayName || ctor.name) === "GeneratorFunction"
+      : false;
+  };
+
+  exports.mark = function(genFun) {
+    if (Object.setPrototypeOf) {
+      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
+    } else {
+      genFun.__proto__ = GeneratorFunctionPrototype;
+      define(genFun, toStringTagSymbol, "GeneratorFunction");
+    }
+    genFun.prototype = Object.create(Gp);
+    return genFun;
+  };
+
+  // Within the body of any async function, `await x` is transformed to
+  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
+  // `hasOwn.call(value, "__await")` to determine if the yielded value is
+  // meant to be awaited.
+  exports.awrap = function(arg) {
+    return { __await: arg };
+  };
+
+  function AsyncIterator(generator, PromiseImpl) {
+    function invoke(method, arg, resolve, reject) {
+      var record = tryCatch(generator[method], generator, arg);
+      if (record.type === "throw") {
+        reject(record.arg);
+      } else {
+        var result = record.arg;
+        var value = result.value;
+        if (value &&
+            typeof value === "object" &&
+            hasOwn.call(value, "__await")) {
+          return PromiseImpl.resolve(value.__await).then(function(value) {
+            invoke("next", value, resolve, reject);
+          }, function(err) {
+            invoke("throw", err, resolve, reject);
+          });
+        }
+
+        return PromiseImpl.resolve(value).then(function(unwrapped) {
+          // When a yielded Promise is resolved, its final value becomes
+          // the .value of the Promise<{value,done}> result for the
+          // current iteration.
+          result.value = unwrapped;
+          resolve(result);
+        }, function(error) {
+          // If a rejected Promise was yielded, throw the rejection back
+          // into the async generator function so it can be handled there.
+          return invoke("throw", error, resolve, reject);
+        });
+      }
+    }
+
+    var previousPromise;
+
+    function enqueue(method, arg) {
+      function callInvokeWithMethodAndArg() {
+        return new PromiseImpl(function(resolve, reject) {
+          invoke(method, arg, resolve, reject);
+        });
+      }
+
+      return previousPromise =
+        // If enqueue has been called before, then we want to wait until
+        // all previous Promises have been resolved before calling invoke,
+        // so that results are always delivered in the correct order. If
+        // enqueue has not been called before, then it is important to
+        // call invoke immediately, without waiting on a callback to fire,
+        // so that the async generator function has the opportunity to do
+        // any necessary setup in a predictable way. This predictability
+        // is why the Promise constructor synchronously invokes its
+        // executor callback, and why async functions synchronously
+        // execute code before the first await. Since we implement simple
+        // async functions in terms of async generators, it is especially
+        // important to get this right, even though it requires care.
+        previousPromise ? previousPromise.then(
+          callInvokeWithMethodAndArg,
+          // Avoid propagating failures to Promises returned by later
+          // invocations of the iterator.
+          callInvokeWithMethodAndArg
+        ) : callInvokeWithMethodAndArg();
+    }
+
+    // Define the unified helper method that is used to implement .next,
+    // .throw, and .return (see defineIteratorMethods).
+    defineProperty(this, "_invoke", { value: enqueue });
+  }
+
+  defineIteratorMethods(AsyncIterator.prototype);
+  define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
+    return this;
+  });
+  exports.AsyncIterator = AsyncIterator;
+
+  // Note that simple async functions are implemented on top of
+  // AsyncIterator objects; they just return a Promise for the value of
+  // the final result produced by the iterator.
+  exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {
+    if (PromiseImpl === void 0) PromiseImpl = Promise;
+
+    var iter = new AsyncIterator(
+      wrap(innerFn, outerFn, self, tryLocsList),
+      PromiseImpl
+    );
+
+    return exports.isGeneratorFunction(outerFn)
+      ? iter // If outerFn is a generator, return the full iterator.
+      : iter.next().then(function(result) {
+          return result.done ? result.value : iter.next();
+        });
+  };
+
+  function makeInvokeMethod(innerFn, self, context) {
+    var state = GenStateSuspendedStart;
+
+    return function invoke(method, arg) {
+      if (state === GenStateExecuting) {
+        throw new Error("Generator is already running");
+      }
+
+      if (state === GenStateCompleted) {
+        if (method === "throw") {
+          throw arg;
+        }
+
+        // Be forgiving, per GeneratorResume behavior specified since ES2015:
+        // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume
+        // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume
+        return doneResult();
+      }
+
+      context.method = method;
+      context.arg = arg;
+
+      while (true) {
+        var delegate = context.delegate;
+        if (delegate) {
+          var delegateResult = maybeInvokeDelegate(delegate, context);
+          if (delegateResult) {
+            if (delegateResult === ContinueSentinel) continue;
+            return delegateResult;
+          }
+        }
+
+        if (context.method === "next") {
+          // Setting context._sent for legacy support of Babel's
+          // function.sent implementation.
+          context.sent = context._sent = context.arg;
+
+        } else if (context.method === "throw") {
+          if (state === GenStateSuspendedStart) {
+            state = GenStateCompleted;
+            throw context.arg;
+          }
+
+          context.dispatchException(context.arg);
+
+        } else if (context.method === "return") {
+          context.abrupt("return", context.arg);
+        }
+
+        state = GenStateExecuting;
+
+        var record = tryCatch(innerFn, self, context);
+        if (record.type === "normal") {
+          // If an exception is thrown from innerFn, we leave state ===
+          // GenStateExecuting and loop back for another invocation.
+          state = context.done
+            ? GenStateCompleted
+            : GenStateSuspendedYield;
+
+          if (record.arg === ContinueSentinel) {
+            continue;
+          }
+
+          return {
+            value: record.arg,
+            done: context.done
+          };
+
+        } else if (record.type === "throw") {
+          state = GenStateCompleted;
+          // Dispatch the exception by looping back around to the
+          // context.dispatchException(context.arg) call above.
+          context.method = "throw";
+          context.arg = record.arg;
+        }
+      }
+    };
+  }
+
+  // Call delegate.iterator[context.method](context.arg) and handle the
+  // result, either by returning a { value, done } result from the
+  // delegate iterator, or by modifying context.method and context.arg,
+  // setting context.delegate to null, and returning the ContinueSentinel.
+  function maybeInvokeDelegate(delegate, context) {
+    var methodName = context.method;
+    var method = delegate.iterator[methodName];
+    if (method === undefined) {
+      // A .throw or .return when the delegate iterator has no .throw
+      // method, or a missing .next method, always terminate the
+      // yield* loop.
+      context.delegate = null;
+
+      // Note: ["return"] must be used for ES3 parsing compatibility.
+      if (methodName === "throw" && delegate.iterator["return"]) {
+        // If the delegate iterator has a return method, give it a
+        // chance to clean up.
+        context.method = "return";
+        context.arg = undefined;
+        maybeInvokeDelegate(delegate, context);
+
+        if (context.method === "throw") {
+          // If maybeInvokeDelegate(context) changed context.method from
+          // "return" to "throw", let that override the TypeError below.
+          return ContinueSentinel;
+        }
+      }
+      if (methodName !== "return") {
+        context.method = "throw";
+        context.arg = new TypeError(
+          "The iterator does not provide a '" + methodName + "' method");
+      }
+
+      return ContinueSentinel;
+    }
+
+    var record = tryCatch(method, delegate.iterator, context.arg);
+
+    if (record.type === "throw") {
+      context.method = "throw";
+      context.arg = record.arg;
+      context.delegate = null;
+      return ContinueSentinel;
+    }
+
+    var info = record.arg;
+
+    if (! info) {
+      context.method = "throw";
+      context.arg = new TypeError("iterator result is not an object");
+      context.delegate = null;
+      return ContinueSentinel;
+    }
+
+    if (info.done) {
+      // Assign the result of the finished delegate to the temporary
+      // variable specified by delegate.resultName (see delegateYield).
+      context[delegate.resultName] = info.value;
+
+      // Resume execution at the desired location (see delegateYield).
+      context.next = delegate.nextLoc;
+
+      // If context.method was "throw" but the delegate handled the
+      // exception, let the outer generator proceed normally. If
+      // context.method was "next", forget context.arg since it has been
+      // "consumed" by the delegate iterator. If context.method was
+      // "return", allow the original .return call to continue in the
+      // outer generator.
+      if (context.method !== "return") {
+        context.method = "next";
+        context.arg = undefined;
+      }
+
+    } else {
+      // Re-yield the result returned by the delegate method.
+      return info;
+    }
+
+    // The delegate iterator is finished, so forget it and continue with
+    // the outer generator.
+    context.delegate = null;
+    return ContinueSentinel;
+  }
+
+  // Define Generator.prototype.{next,throw,return} in terms of the
+  // unified ._invoke helper method.
+  defineIteratorMethods(Gp);
+
+  define(Gp, toStringTagSymbol, "Generator");
+
+  // A Generator should always return itself as the iterator object when the
+  // @@iterator function is called on it. Some browsers' implementations of the
+  // iterator prototype chain incorrectly implement this, causing the Generator
+  // object to not be returned from this call. This ensures that doesn't happen.
+  // See https://github.com/facebook/regenerator/issues/274 for more details.
+  define(Gp, iteratorSymbol, function() {
+    return this;
+  });
+
+  define(Gp, "toString", function() {
+    return "[object Generator]";
+  });
+
+  function pushTryEntry(locs) {
+    var entry = { tryLoc: locs[0] };
+
+    if (1 in locs) {
+      entry.catchLoc = locs[1];
+    }
+
+    if (2 in locs) {
+      entry.finallyLoc = locs[2];
+      entry.afterLoc = locs[3];
+    }
+
+    this.tryEntries.push(entry);
+  }
+
+  function resetTryEntry(entry) {
+    var record = entry.completion || {};
+    record.type = "normal";
+    delete record.arg;
+    entry.completion = record;
+  }
+
+  function Context(tryLocsList) {
+    // The root entry object (effectively a try statement without a catch
+    // or a finally block) gives us a place to store values thrown from
+    // locations where there is no enclosing try statement.
+    this.tryEntries = [{ tryLoc: "root" }];
+    tryLocsList.forEach(pushTryEntry, this);
+    this.reset(true);
+  }
+
+  exports.keys = function(val) {
+    var object = Object(val);
+    var keys = [];
+    for (var key in object) {
+      keys.push(key);
+    }
+    keys.reverse();
+
+    // Rather than returning an object with a next method, we keep
+    // things simple and return the next function itself.
+    return function next() {
+      while (keys.length) {
+        var key = keys.pop();
+        if (key in object) {
+          next.value = key;
+          next.done = false;
+          return next;
+        }
+      }
+
+      // To avoid creating an additional object, we just hang the .value
+      // and .done properties off the next function object itself. This
+      // also ensures that the minifier will not anonymize the function.
+      next.done = true;
+      return next;
+    };
+  };
+
+  function values(iterable) {
+    if (iterable != null) {
+      var iteratorMethod = iterable[iteratorSymbol];
+      if (iteratorMethod) {
+        return iteratorMethod.call(iterable);
+      }
+
+      if (typeof iterable.next === "function") {
+        return iterable;
+      }
+
+      if (!isNaN(iterable.length)) {
+        var i = -1, next = function next() {
+          while (++i < iterable.length) {
+            if (hasOwn.call(iterable, i)) {
+              next.value = iterable[i];
+              next.done = false;
+              return next;
+            }
+          }
+
+          next.value = undefined;
+          next.done = true;
+
+          return next;
+        };
+
+        return next.next = next;
+      }
+    }
+
+    throw new TypeError(typeof iterable + " is not iterable");
+  }
+  exports.values = values;
+
+  function doneResult() {
+    return { value: undefined, done: true };
+  }
+
+  Context.prototype = {
+    constructor: Context,
+
+    reset: function(skipTempReset) {
+      this.prev = 0;
+      this.next = 0;
+      // Resetting context._sent for legacy support of Babel's
+      // function.sent implementation.
+      this.sent = this._sent = undefined;
+      this.done = false;
+      this.delegate = null;
+
+      this.method = "next";
+      this.arg = undefined;
+
+      this.tryEntries.forEach(resetTryEntry);
+
+      if (!skipTempReset) {
+        for (var name in this) {
+          // Not sure about the optimal order of these conditions:
+          if (name.charAt(0) === "t" &&
+              hasOwn.call(this, name) &&
+              !isNaN(+name.slice(1))) {
+            this[name] = undefined;
+          }
+        }
+      }
+    },
+
+    stop: function() {
+      this.done = true;
+
+      var rootEntry = this.tryEntries[0];
+      var rootRecord = rootEntry.completion;
+      if (rootRecord.type === "throw") {
+        throw rootRecord.arg;
+      }
+
+      return this.rval;
+    },
+
+    dispatchException: function(exception) {
+      if (this.done) {
+        throw exception;
+      }
+
+      var context = this;
+      function handle(loc, caught) {
+        record.type = "throw";
+        record.arg = exception;
+        context.next = loc;
+
+        if (caught) {
+          // If the dispatched exception was caught by a catch block,
+          // then let that catch block handle the exception normally.
+          context.method = "next";
+          context.arg = undefined;
+        }
+
+        return !! caught;
+      }
+
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        var record = entry.completion;
+
+        if (entry.tryLoc === "root") {
+          // Exception thrown outside of any try block that could handle
+          // it, so set the completion value of the entire function to
+          // throw the exception.
+          return handle("end");
+        }
+
+        if (entry.tryLoc <= this.prev) {
+          var hasCatch = hasOwn.call(entry, "catchLoc");
+          var hasFinally = hasOwn.call(entry, "finallyLoc");
+
+          if (hasCatch && hasFinally) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            } else if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else if (hasCatch) {
+            if (this.prev < entry.catchLoc) {
+              return handle(entry.catchLoc, true);
+            }
+
+          } else if (hasFinally) {
+            if (this.prev < entry.finallyLoc) {
+              return handle(entry.finallyLoc);
+            }
+
+          } else {
+            throw new Error("try statement without catch or finally");
+          }
+        }
+      }
+    },
+
+    abrupt: function(type, arg) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc <= this.prev &&
+            hasOwn.call(entry, "finallyLoc") &&
+            this.prev < entry.finallyLoc) {
+          var finallyEntry = entry;
+          break;
+        }
+      }
+
+      if (finallyEntry &&
+          (type === "break" ||
+           type === "continue") &&
+          finallyEntry.tryLoc <= arg &&
+          arg <= finallyEntry.finallyLoc) {
+        // Ignore the finally entry if control is not jumping to a
+        // location outside the try/catch block.
+        finallyEntry = null;
+      }
+
+      var record = finallyEntry ? finallyEntry.completion : {};
+      record.type = type;
+      record.arg = arg;
+
+      if (finallyEntry) {
+        this.method = "next";
+        this.next = finallyEntry.finallyLoc;
+        return ContinueSentinel;
+      }
+
+      return this.complete(record);
+    },
+
+    complete: function(record, afterLoc) {
+      if (record.type === "throw") {
+        throw record.arg;
+      }
+
+      if (record.type === "break" ||
+          record.type === "continue") {
+        this.next = record.arg;
+      } else if (record.type === "return") {
+        this.rval = this.arg = record.arg;
+        this.method = "return";
+        this.next = "end";
+      } else if (record.type === "normal" && afterLoc) {
+        this.next = afterLoc;
+      }
+
+      return ContinueSentinel;
+    },
+
+    finish: function(finallyLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.finallyLoc === finallyLoc) {
+          this.complete(entry.completion, entry.afterLoc);
+          resetTryEntry(entry);
+          return ContinueSentinel;
+        }
+      }
+    },
+
+    "catch": function(tryLoc) {
+      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
+        var entry = this.tryEntries[i];
+        if (entry.tryLoc === tryLoc) {
+          var record = entry.completion;
+          if (record.type === "throw") {
+            var thrown = record.arg;
+            resetTryEntry(entry);
+          }
+          return thrown;
+        }
+      }
+
+      // The context.catch method must only be called with a location
+      // argument that corresponds to a known catch block.
+      throw new Error("illegal catch attempt");
+    },
+
+    delegateYield: function(iterable, resultName, nextLoc) {
+      this.delegate = {
+        iterator: values(iterable),
+        resultName: resultName,
+        nextLoc: nextLoc
+      };
+
+      if (this.method === "next") {
+        // Deliberately forget the last sent value so that we don't
+        // accidentally pass it on to the delegate.
+        this.arg = undefined;
+      }
+
+      return ContinueSentinel;
+    }
+  };
+
+  // Regardless of whether this script is executing as a CommonJS module
+  // or not, return the runtime object so that we can declare the variable
+  // regeneratorRuntime in the outer scope, which allows this module to be
+  // injected easily by `bin/regenerator --include-runtime script.js`.
+  return exports;
+
+}(
+  // If this script is executing as a CommonJS module, use module.exports
+  // as the regeneratorRuntime namespace. Otherwise create a new empty
+  // object. Either way, the resulting object will be used to initialize
+  // the regeneratorRuntime variable at the top of this file.
+  typeof module === "object" ? module.exports : {}
+));
+
+try {
+  regeneratorRuntime = runtime;
+} catch (accidentalStrictMode) {
+  // This module should not be running in strict mode, so the above
+  // assignment should always work unless something is misconfigured. Just
+  // in case runtime.js accidentally runs in strict mode, in modern engines
+  // we can explicitly access globalThis. In older engines we can escape
+  // strict mode using a global Function call. This could conceivably fail
+  // if a Content Security Policy forbids using Function, but in that case
+  // the proper solution is to fix the accidental strict mode problem. If
+  // you've misconfigured your bundler to force strict mode and applied a
+  // CSP to forbid Function, and you're not willing to fix either of those
+  // problems, please detail your unique predicament in a GitHub issue.
+  if (typeof globalThis === "object") {
+    globalThis.regeneratorRuntime = runtime;
+  } else {
+    Function("r", "regeneratorRuntime = r")(runtime);
+  }
+}
diff --git a/node_modules/tslib/CopyrightNotice.txt b/node_modules/tslib/CopyrightNotice.txt
new file mode 100644
index 0000000000000000000000000000000000000000..0e42542369729ec05635e54491d177e86ccea100
--- /dev/null
+++ b/node_modules/tslib/CopyrightNotice.txt
@@ -0,0 +1,15 @@
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
diff --git a/node_modules/tslib/LICENSE.txt b/node_modules/tslib/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bfe6430cb0d83f34f5ed859d118dd3dc8ec1f7e8
--- /dev/null
+++ b/node_modules/tslib/LICENSE.txt
@@ -0,0 +1,12 @@
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
\ No newline at end of file
diff --git a/node_modules/tslib/README.md b/node_modules/tslib/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..290cc618fba09dc5e93cb6c6b2364835d474f205
--- /dev/null
+++ b/node_modules/tslib/README.md
@@ -0,0 +1,164 @@
+# tslib
+
+This is a runtime library for [TypeScript](https://www.typescriptlang.org/) that contains all of the TypeScript helper functions.
+
+This library is primarily used by the `--importHelpers` flag in TypeScript.
+When using `--importHelpers`, a module that uses helper functions like `__extends` and `__assign` in the following emitted file:
+
+```ts
+var __assign = (this && this.__assign) || Object.assign || function(t) {
+    for (var s, i = 1, n = arguments.length; i < n; i++) {
+        s = arguments[i];
+        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+            t[p] = s[p];
+    }
+    return t;
+};
+exports.x = {};
+exports.y = __assign({}, exports.x);
+
+```
+
+will instead be emitted as something like the following:
+
+```ts
+var tslib_1 = require("tslib");
+exports.x = {};
+exports.y = tslib_1.__assign({}, exports.x);
+```
+
+Because this can avoid duplicate declarations of things like `__extends`, `__assign`, etc., this means delivering users smaller files on average, as well as less runtime overhead.
+For optimized bundles with TypeScript, you should absolutely consider using `tslib` and `--importHelpers`.
+
+# Installing
+
+For the latest stable version, run:
+
+## npm
+
+```sh
+# TypeScript 3.9.2 or later
+npm install tslib
+
+# TypeScript 3.8.4 or earlier
+npm install tslib@^1
+
+# TypeScript 2.3.2 or earlier
+npm install tslib@1.6.1
+```
+
+## yarn
+
+```sh
+# TypeScript 3.9.2 or later
+yarn add tslib
+
+# TypeScript 3.8.4 or earlier
+yarn add tslib@^1
+
+# TypeScript 2.3.2 or earlier
+yarn add tslib@1.6.1
+```
+
+## bower
+
+```sh
+# TypeScript 3.9.2 or later
+bower install tslib
+
+# TypeScript 3.8.4 or earlier
+bower install tslib@^1
+
+# TypeScript 2.3.2 or earlier
+bower install tslib@1.6.1
+```
+
+## JSPM
+
+```sh
+# TypeScript 3.9.2 or later
+jspm install tslib
+
+# TypeScript 3.8.4 or earlier
+jspm install tslib@^1
+
+# TypeScript 2.3.2 or earlier
+jspm install tslib@1.6.1
+```
+
+# Usage
+
+Set the `importHelpers` compiler option on the command line:
+
+```
+tsc --importHelpers file.ts
+```
+
+or in your tsconfig.json:
+
+```json
+{
+    "compilerOptions": {
+        "importHelpers": true
+    }
+}
+```
+
+#### For bower and JSPM users
+
+You will need to add a `paths` mapping for `tslib`, e.g. For Bower users:
+
+```json
+{
+    "compilerOptions": {
+        "module": "amd",
+        "importHelpers": true,
+        "baseUrl": "./",
+        "paths": {
+            "tslib" : ["bower_components/tslib/tslib.d.ts"]
+        }
+    }
+}
+```
+
+For JSPM users:
+
+```json
+{
+    "compilerOptions": {
+        "module": "system",
+        "importHelpers": true,
+        "baseUrl": "./",
+        "paths": {
+            "tslib" : ["jspm_packages/npm/tslib@2.x.y/tslib.d.ts"]
+        }
+    }
+}
+```
+
+## Deployment
+
+- Choose your new version number
+- Set it in `package.json` and `bower.json`
+- Create a tag: `git tag [version]`
+- Push the tag: `git push --tags`
+- Create a [release in GitHub](https://github.com/microsoft/tslib/releases)
+- Run the [publish to npm](https://github.com/microsoft/tslib/actions?query=workflow%3A%22Publish+to+NPM%22) workflow
+
+Done.
+
+# Contribute
+
+There are many ways to [contribute](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md) to TypeScript.
+
+* [Submit bugs](https://github.com/Microsoft/TypeScript/issues) and help us verify fixes as they are checked in.
+* Review the [source code changes](https://github.com/Microsoft/TypeScript/pulls).
+* Engage with other TypeScript users and developers on [StackOverflow](http://stackoverflow.com/questions/tagged/typescript).
+* Join the [#typescript](http://twitter.com/#!/search/realtime/%23typescript) discussion on Twitter.
+* [Contribute bug fixes](https://github.com/Microsoft/TypeScript/blob/master/CONTRIBUTING.md).
+
+# Documentation
+
+* [Quick tutorial](http://www.typescriptlang.org/Tutorial)
+* [Programming handbook](http://www.typescriptlang.org/Handbook)
+* [Homepage](http://www.typescriptlang.org/)
diff --git a/node_modules/tslib/SECURITY.md b/node_modules/tslib/SECURITY.md
new file mode 100644
index 0000000000000000000000000000000000000000..869fdfe2b246991a053fab9cfec1bed3ab532ab1
--- /dev/null
+++ b/node_modules/tslib/SECURITY.md
@@ -0,0 +1,41 @@
+<!-- BEGIN MICROSOFT SECURITY.MD V0.0.7 BLOCK -->
+
+## Security
+
+Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
+
+If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
+
+## Reporting Security Issues
+
+**Please do not report security vulnerabilities through public GitHub issues.**
+
+Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
+
+If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com).  If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
+
+You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). 
+
+Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
+
+  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
+  * Full paths of source file(s) related to the manifestation of the issue
+  * The location of the affected source code (tag/branch/commit or direct URL)
+  * Any special configuration required to reproduce the issue
+  * Step-by-step instructions to reproduce the issue
+  * Proof-of-concept or exploit code (if possible)
+  * Impact of the issue, including how an attacker might exploit the issue
+
+This information will help us triage your report more quickly.
+
+If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
+
+## Preferred Languages
+
+We prefer all communications to be in English.
+
+## Policy
+
+Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
+
+<!-- END MICROSOFT SECURITY.MD BLOCK -->
diff --git a/node_modules/tslib/modules/index.d.ts b/node_modules/tslib/modules/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3244fabeec060d55c47f0a981adb9d629fd0678f
--- /dev/null
+++ b/node_modules/tslib/modules/index.d.ts
@@ -0,0 +1,38 @@
+// Note: named reexports are used instead of `export *` because
+// TypeScript itself doesn't resolve the `export *` when checking
+// if a particular helper exists.
+export {
+  __extends,
+  __assign,
+  __rest,
+  __decorate,
+  __param,
+  __esDecorate,
+  __runInitializers,
+  __propKey,
+  __setFunctionName,
+  __metadata,
+  __awaiter,
+  __generator,
+  __exportStar,
+  __values,
+  __read,
+  __spread,
+  __spreadArrays,
+  __spreadArray,
+  __await,
+  __asyncGenerator,
+  __asyncDelegator,
+  __asyncValues,
+  __makeTemplateObject,
+  __importStar,
+  __importDefault,
+  __classPrivateFieldGet,
+  __classPrivateFieldSet,
+  __classPrivateFieldIn,
+  __createBinding,
+  __addDisposableResource,
+  __disposeResources,
+  __rewriteRelativeImportExtension,
+} from '../tslib.js';
+export * as default from '../tslib.js';
diff --git a/node_modules/tslib/modules/index.js b/node_modules/tslib/modules/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c91f61864fead99b3085eed82ae0aa8a098d83a8
--- /dev/null
+++ b/node_modules/tslib/modules/index.js
@@ -0,0 +1,70 @@
+import tslib from '../tslib.js';
+const {
+    __extends,
+    __assign,
+    __rest,
+    __decorate,
+    __param,
+    __esDecorate,
+    __runInitializers,
+    __propKey,
+    __setFunctionName,
+    __metadata,
+    __awaiter,
+    __generator,
+    __exportStar,
+    __createBinding,
+    __values,
+    __read,
+    __spread,
+    __spreadArrays,
+    __spreadArray,
+    __await,
+    __asyncGenerator,
+    __asyncDelegator,
+    __asyncValues,
+    __makeTemplateObject,
+    __importStar,
+    __importDefault,
+    __classPrivateFieldGet,
+    __classPrivateFieldSet,
+    __classPrivateFieldIn,
+    __addDisposableResource,
+    __disposeResources,
+    __rewriteRelativeImportExtension,
+} = tslib;
+export {
+    __extends,
+    __assign,
+    __rest,
+    __decorate,
+    __param,
+    __esDecorate,
+    __runInitializers,
+    __propKey,
+    __setFunctionName,
+    __metadata,
+    __awaiter,
+    __generator,
+    __exportStar,
+    __createBinding,
+    __values,
+    __read,
+    __spread,
+    __spreadArrays,
+    __spreadArray,
+    __await,
+    __asyncGenerator,
+    __asyncDelegator,
+    __asyncValues,
+    __makeTemplateObject,
+    __importStar,
+    __importDefault,
+    __classPrivateFieldGet,
+    __classPrivateFieldSet,
+    __classPrivateFieldIn,
+    __addDisposableResource,
+    __disposeResources,
+    __rewriteRelativeImportExtension,
+};
+export default tslib;
diff --git a/node_modules/tslib/modules/package.json b/node_modules/tslib/modules/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..aafa0e4b45ab8f65ed28c0d0b389ae9587aa3d80
--- /dev/null
+++ b/node_modules/tslib/modules/package.json
@@ -0,0 +1,3 @@
+{
+    "type": "module"
+}
\ No newline at end of file
diff --git a/node_modules/tslib/package.json b/node_modules/tslib/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..e3bc59fd68a35fe03c7af78750ba5a56c6ba5846
--- /dev/null
+++ b/node_modules/tslib/package.json
@@ -0,0 +1,74 @@
+{
+  "_from": "tslib@^2.8.0",
+  "_id": "tslib@2.8.1",
+  "_inBundle": false,
+  "_integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+  "_location": "/tslib",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "tslib@^2.8.0",
+    "name": "tslib",
+    "escapedName": "tslib",
+    "rawSpec": "^2.8.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.8.0"
+  },
+  "_requiredBy": [
+    "/@swc/helpers"
+  ],
+  "_resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+  "_shasum": "612efe4ed235d567e8aba5f2a5fab70280ade83f",
+  "_spec": "tslib@^2.8.0",
+  "_where": "/home/ethan2.clay/flask/node_modules/@swc/helpers",
+  "author": {
+    "name": "Microsoft Corp."
+  },
+  "bugs": {
+    "url": "https://github.com/Microsoft/TypeScript/issues"
+  },
+  "bundleDependencies": false,
+  "deprecated": false,
+  "description": "Runtime library for TypeScript helper functions",
+  "exports": {
+    ".": {
+      "module": {
+        "types": "./modules/index.d.ts",
+        "default": "./tslib.es6.mjs"
+      },
+      "import": {
+        "node": "./modules/index.js",
+        "default": {
+          "types": "./modules/index.d.ts",
+          "default": "./tslib.es6.mjs"
+        }
+      },
+      "default": "./tslib.js"
+    },
+    "./*": "./*",
+    "./": "./"
+  },
+  "homepage": "https://www.typescriptlang.org/",
+  "jsnext:main": "tslib.es6.js",
+  "keywords": [
+    "TypeScript",
+    "Microsoft",
+    "compiler",
+    "language",
+    "javascript",
+    "tslib",
+    "runtime"
+  ],
+  "license": "0BSD",
+  "main": "tslib.js",
+  "module": "tslib.es6.js",
+  "name": "tslib",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/Microsoft/tslib.git"
+  },
+  "sideEffects": false,
+  "typings": "tslib.d.ts",
+  "version": "2.8.1"
+}
diff --git a/node_modules/tslib/tslib.d.ts b/node_modules/tslib/tslib.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f23df5596e4c82c702ef1fcf8f8be68d650e3988
--- /dev/null
+++ b/node_modules/tslib/tslib.d.ts
@@ -0,0 +1,460 @@
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+
+/**
+ * Used to shim class extends.
+ *
+ * @param d The derived class.
+ * @param b The base class.
+ */
+export declare function __extends(d: Function, b: Function): void;
+
+/**
+ * Copy the values of all of the enumerable own properties from one or more source objects to a
+ * target object. Returns the target object.
+ *
+ * @param t The target object to copy to.
+ * @param sources One or more source objects from which to copy properties
+ */
+export declare function __assign(t: any, ...sources: any[]): any;
+
+/**
+ * Performs a rest spread on an object.
+ *
+ * @param t The source value.
+ * @param propertyNames The property names excluded from the rest spread.
+ */
+export declare function __rest(t: any, propertyNames: (string | symbol)[]): any;
+
+/**
+ * Applies decorators to a target object
+ *
+ * @param decorators The set of decorators to apply.
+ * @param target The target object.
+ * @param key If specified, the own property to apply the decorators to.
+ * @param desc The property descriptor, defaults to fetching the descriptor from the target object.
+ * @experimental
+ */
+export declare function __decorate(decorators: Function[], target: any, key?: string | symbol, desc?: any): any;
+
+/**
+ * Creates an observing function decorator from a parameter decorator.
+ *
+ * @param paramIndex The parameter index to apply the decorator to.
+ * @param decorator The parameter decorator to apply. Note that the return value is ignored.
+ * @experimental
+ */
+export declare function __param(paramIndex: number, decorator: Function): Function;
+
+/**
+ * Applies decorators to a class or class member, following the native ECMAScript decorator specification.
+ * @param ctor For non-field class members, the class constructor. Otherwise, `null`.
+ * @param descriptorIn The `PropertyDescriptor` to use when unable to look up the property from `ctor`.
+ * @param decorators The decorators to apply
+ * @param contextIn The `DecoratorContext` to clone for each decorator application.
+ * @param initializers An array of field initializer mutation functions into which new initializers are written.
+ * @param extraInitializers An array of extra initializer functions into which new initializers are written.
+ */
+export declare function __esDecorate(ctor: Function | null, descriptorIn: object | null, decorators: Function[], contextIn: object, initializers: Function[] | null, extraInitializers: Function[]): void;
+
+/**
+ * Runs field initializers or extra initializers generated by `__esDecorate`.
+ * @param thisArg The `this` argument to use.
+ * @param initializers The array of initializers to evaluate.
+ * @param value The initial value to pass to the initializers.
+ */
+export declare function __runInitializers(thisArg: unknown, initializers: Function[], value?: any): any;
+
+/**
+ * Converts a computed property name into a `string` or `symbol` value.
+ */
+export declare function __propKey(x: any): string | symbol;
+
+/**
+ * Assigns the name of a function derived from the left-hand side of an assignment.
+ * @param f The function to rename.
+ * @param name The new name for the function.
+ * @param prefix A prefix (such as `"get"` or `"set"`) to insert before the name.
+ */
+export declare function __setFunctionName(f: Function, name: string | symbol, prefix?: string): Function;
+
+/**
+ * Creates a decorator that sets metadata.
+ *
+ * @param metadataKey The metadata key
+ * @param metadataValue The metadata value
+ * @experimental
+ */
+export declare function __metadata(metadataKey: any, metadataValue: any): Function;
+
+/**
+ * Converts a generator function into a pseudo-async function, by treating each `yield` as an `await`.
+ *
+ * @param thisArg The reference to use as the `this` value in the generator function
+ * @param _arguments The optional arguments array
+ * @param P The optional promise constructor argument, defaults to the `Promise` property of the global object.
+ * @param generator The generator function
+ */
+export declare function __awaiter(thisArg: any, _arguments: any, P: Function, generator: Function): any;
+
+/**
+ * Creates an Iterator object using the body as the implementation.
+ *
+ * @param thisArg The reference to use as the `this` value in the function
+ * @param body The generator state-machine based implementation.
+ *
+ * @see [./docs/generator.md]
+ */
+export declare function __generator(thisArg: any, body: Function): any;
+
+/**
+ * Creates bindings for all enumerable properties of `m` on `exports`
+ *
+ * @param m The source object
+ * @param o The `exports` object.
+ */
+export declare function __exportStar(m: any, o: any): void;
+
+/**
+ * Creates a value iterator from an `Iterable` or `ArrayLike` object.
+ *
+ * @param o The object.
+ * @throws {TypeError} If `o` is neither `Iterable`, nor an `ArrayLike`.
+ */
+export declare function __values(o: any): any;
+
+/**
+ * Reads values from an `Iterable` or `ArrayLike` object and returns the resulting array.
+ *
+ * @param o The object to read from.
+ * @param n The maximum number of arguments to read, defaults to `Infinity`.
+ */
+export declare function __read(o: any, n?: number): any[];
+
+/**
+ * Creates an array from iterable spread.
+ *
+ * @param args The Iterable objects to spread.
+ * @deprecated since TypeScript 4.2 - Use `__spreadArray`
+ */
+export declare function __spread(...args: any[][]): any[];
+
+/**
+ * Creates an array from array spread.
+ *
+ * @param args The ArrayLikes to spread into the resulting array.
+ * @deprecated since TypeScript 4.2 - Use `__spreadArray`
+ */
+export declare function __spreadArrays(...args: any[][]): any[];
+
+/**
+ * Spreads the `from` array into the `to` array.
+ *
+ * @param pack Replace empty elements with `undefined`.
+ */
+export declare function __spreadArray(to: any[], from: any[], pack?: boolean): any[];
+
+/**
+ * Creates an object that signals to `__asyncGenerator` that it shouldn't be yielded,
+ * and instead should be awaited and the resulting value passed back to the generator.
+ *
+ * @param v The value to await.
+ */
+export declare function __await(v: any): any;
+
+/**
+ * Converts a generator function into an async generator function, by using `yield __await`
+ * in place of normal `await`.
+ *
+ * @param thisArg The reference to use as the `this` value in the generator function
+ * @param _arguments The optional arguments array
+ * @param generator The generator function
+ */
+export declare function __asyncGenerator(thisArg: any, _arguments: any, generator: Function): any;
+
+/**
+ * Used to wrap a potentially async iterator in such a way so that it wraps the result
+ * of calling iterator methods of `o` in `__await` instances, and then yields the awaited values.
+ *
+ * @param o The potentially async iterator.
+ * @returns A synchronous iterator yielding `__await` instances on every odd invocation
+ *          and returning the awaited `IteratorResult` passed to `next` every even invocation.
+ */
+export declare function __asyncDelegator(o: any): any;
+
+/**
+ * Creates a value async iterator from an `AsyncIterable`, `Iterable` or `ArrayLike` object.
+ *
+ * @param o The object.
+ * @throws {TypeError} If `o` is neither `AsyncIterable`, `Iterable`, nor an `ArrayLike`.
+ */
+export declare function __asyncValues(o: any): any;
+
+/**
+ * Creates a `TemplateStringsArray` frozen object from the `cooked` and `raw` arrays.
+ *
+ * @param cooked The cooked possibly-sparse array.
+ * @param raw The raw string content.
+ */
+export declare function __makeTemplateObject(cooked: string[], raw: string[]): TemplateStringsArray;
+
+/**
+ * Used to shim default and named imports in ECMAScript Modules transpiled to CommonJS.
+ *
+ * ```js
+ * import Default, { Named, Other } from "mod";
+ * // or
+ * import { default as Default, Named, Other } from "mod";
+ * ```
+ *
+ * @param mod The CommonJS module exports object.
+ */
+export declare function __importStar<T>(mod: T): T;
+
+/**
+ * Used to shim default imports in ECMAScript Modules transpiled to CommonJS.
+ *
+ * ```js
+ * import Default from "mod";
+ * ```
+ *
+ * @param mod The CommonJS module exports object.
+ */
+export declare function __importDefault<T>(mod: T): T | { default: T };
+
+/**
+ * Emulates reading a private instance field.
+ *
+ * @param receiver The instance from which to read the private field.
+ * @param state A WeakMap containing the private field value for an instance.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ *
+ * @throws {TypeError} If `state` doesn't have an entry for `receiver`.
+ */
+export declare function __classPrivateFieldGet<T extends object, V>(
+    receiver: T,
+    state: { has(o: T): boolean, get(o: T): V | undefined },
+    kind?: "f"
+): V;
+
+/**
+ * Emulates reading a private static field.
+ *
+ * @param receiver The object from which to read the private static field.
+ * @param state The class constructor containing the definition of the static field.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The descriptor that holds the static field value.
+ *
+ * @throws {TypeError} If `receiver` is not `state`.
+ */
+export declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V>(
+    receiver: T,
+    state: T,
+    kind: "f",
+    f: { value: V }
+): V;
+
+/**
+ * Emulates evaluating a private instance "get" accessor.
+ *
+ * @param receiver The instance on which to evaluate the private "get" accessor.
+ * @param state A WeakSet used to verify an instance supports the private "get" accessor.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The "get" accessor function to evaluate.
+ *
+ * @throws {TypeError} If `state` doesn't have an entry for `receiver`.
+ */
+export declare function __classPrivateFieldGet<T extends object, V>(
+    receiver: T,
+    state: { has(o: T): boolean },
+    kind: "a",
+    f: () => V
+): V;
+
+/**
+ * Emulates evaluating a private static "get" accessor.
+ *
+ * @param receiver The object on which to evaluate the private static "get" accessor.
+ * @param state The class constructor containing the definition of the static "get" accessor.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The "get" accessor function to evaluate.
+ *
+ * @throws {TypeError} If `receiver` is not `state`.
+ */
+export declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V>(
+    receiver: T,
+    state: T,
+    kind: "a",
+    f: () => V
+): V;
+
+/**
+ * Emulates reading a private instance method.
+ *
+ * @param receiver The instance from which to read a private method.
+ * @param state A WeakSet used to verify an instance supports the private method.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The function to return as the private instance method.
+ *
+ * @throws {TypeError} If `state` doesn't have an entry for `receiver`.
+ */
+export declare function __classPrivateFieldGet<T extends object, V extends (...args: any[]) => unknown>(
+    receiver: T,
+    state: { has(o: T): boolean },
+    kind: "m",
+    f: V
+): V;
+
+/**
+ * Emulates reading a private static method.
+ *
+ * @param receiver The object from which to read the private static method.
+ * @param state The class constructor containing the definition of the static method.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The function to return as the private static method.
+ *
+ * @throws {TypeError} If `receiver` is not `state`.
+ */
+export declare function __classPrivateFieldGet<T extends new (...args: any[]) => unknown, V extends (...args: any[]) => unknown>(
+    receiver: T,
+    state: T,
+    kind: "m",
+    f: V
+): V;
+
+/**
+ * Emulates writing to a private instance field.
+ *
+ * @param receiver The instance on which to set a private field value.
+ * @param state A WeakMap used to store the private field value for an instance.
+ * @param value The value to store in the private field.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ *
+ * @throws {TypeError} If `state` doesn't have an entry for `receiver`.
+ */
+export declare function __classPrivateFieldSet<T extends object, V>(
+    receiver: T,
+    state: { has(o: T): boolean, set(o: T, value: V): unknown },
+    value: V,
+    kind?: "f"
+): V;
+
+/**
+ * Emulates writing to a private static field.
+ *
+ * @param receiver The object on which to set the private static field.
+ * @param state The class constructor containing the definition of the private static field.
+ * @param value The value to store in the private field.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The descriptor that holds the static field value.
+ *
+ * @throws {TypeError} If `receiver` is not `state`.
+ */
+export declare function __classPrivateFieldSet<T extends new (...args: any[]) => unknown, V>(
+    receiver: T,
+    state: T,
+    value: V,
+    kind: "f",
+    f: { value: V }
+): V;
+
+/**
+ * Emulates writing to a private instance "set" accessor.
+ *
+ * @param receiver The instance on which to evaluate the private instance "set" accessor.
+ * @param state A WeakSet used to verify an instance supports the private "set" accessor.
+ * @param value The value to store in the private accessor.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The "set" accessor function to evaluate.
+ *
+ * @throws {TypeError} If `state` doesn't have an entry for `receiver`.
+ */
+export declare function __classPrivateFieldSet<T extends object, V>(
+    receiver: T,
+    state: { has(o: T): boolean },
+    value: V,
+    kind: "a",
+    f: (v: V) => void
+): V;
+
+/**
+ * Emulates writing to a private static "set" accessor.
+ *
+ * @param receiver The object on which to evaluate the private static "set" accessor.
+ * @param state The class constructor containing the definition of the static "set" accessor.
+ * @param value The value to store in the private field.
+ * @param kind Either `"f"` for a field, `"a"` for an accessor, or `"m"` for a method.
+ * @param f The "set" accessor function to evaluate.
+ *
+ * @throws {TypeError} If `receiver` is not `state`.
+ */
+export declare function __classPrivateFieldSet<T extends new (...args: any[]) => unknown, V>(
+    receiver: T,
+    state: T,
+    value: V,
+    kind: "a",
+    f: (v: V) => void
+): V;
+
+/**
+ * Checks for the existence of a private field/method/accessor.
+ *
+ * @param state The class constructor containing the static member, or the WeakMap or WeakSet associated with a private instance member.
+ * @param receiver The object for which to test the presence of the private member.
+ */
+export declare function __classPrivateFieldIn(
+    state: (new (...args: any[]) => unknown) | { has(o: any): boolean },
+    receiver: unknown,
+): boolean;
+
+/**
+ * Creates a re-export binding on `object` with key `objectKey` that references `target[key]`.
+ *
+ * @param object The local `exports` object.
+ * @param target The object to re-export from.
+ * @param key The property key of `target` to re-export.
+ * @param objectKey The property key to re-export as. Defaults to `key`.
+ */
+export declare function __createBinding(object: object, target: object, key: PropertyKey, objectKey?: PropertyKey): void;
+
+/**
+ * Adds a disposable resource to a resource-tracking environment object.
+ * @param env A resource-tracking environment object.
+ * @param value Either a Disposable or AsyncDisposable object, `null`, or `undefined`.
+ * @param async When `true`, `AsyncDisposable` resources can be added. When `false`, `AsyncDisposable` resources cannot be added.
+ * @returns The {@link value} argument.
+ *
+ * @throws {TypeError} If {@link value} is not an object, or if either `Symbol.dispose` or `Symbol.asyncDispose` are not
+ * defined, or if {@link value} does not have an appropriate `Symbol.dispose` or `Symbol.asyncDispose` method.
+ */
+export declare function __addDisposableResource<T>(env: { stack: { value?: unknown, dispose?: Function, async: boolean }[]; error: unknown; hasError: boolean; }, value: T, async: boolean): T;
+
+/**
+ * Disposes all resources in a resource-tracking environment object.
+ * @param env A resource-tracking environment object.
+ * @returns A {@link Promise} if any resources in the environment were marked as `async` when added; otherwise, `void`.
+ *
+ * @throws {SuppressedError} if an error thrown during disposal would have suppressed a prior error from disposal or the
+ * error recorded in the resource-tracking environment object.
+ * @seealso {@link __addDisposableResource}
+ */
+export declare function __disposeResources(env: { stack: { value?: unknown, dispose?: Function, async: boolean }[]; error: unknown; hasError: boolean; }): any;
+
+/**
+ * Transforms a relative import specifier ending in a non-declaration TypeScript file extension to its JavaScript file extension counterpart.
+ * @param path The import specifier.
+ * @param preserveJsx Causes '*.tsx' to transform to '*.jsx' instead of '*.js'. Should be true when `--jsx` is set to `preserve`.
+ */
+export declare function __rewriteRelativeImportExtension(path: string, preserveJsx?: boolean): string;
\ No newline at end of file
diff --git a/node_modules/tslib/tslib.es6.html b/node_modules/tslib/tslib.es6.html
new file mode 100644
index 0000000000000000000000000000000000000000..b122e41b06af8034aca824c9563053cf501eba2a
--- /dev/null
+++ b/node_modules/tslib/tslib.es6.html
@@ -0,0 +1 @@
+<script src="tslib.es6.js"></script>
\ No newline at end of file
diff --git a/node_modules/tslib/tslib.es6.js b/node_modules/tslib/tslib.es6.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c1739b34112104923fb7f1f1f119da40ef38ba9
--- /dev/null
+++ b/node_modules/tslib/tslib.es6.js
@@ -0,0 +1,402 @@
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
+
+var extendStatics = function(d, b) {
+    extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+    return extendStatics(d, b);
+};
+
+export function __extends(d, b) {
+    if (typeof b !== "function" && b !== null)
+        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+    extendStatics(d, b);
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+export var __assign = function() {
+    __assign = Object.assign || function __assign(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+        }
+        return t;
+    }
+    return __assign.apply(this, arguments);
+}
+
+export function __rest(s, e) {
+    var t = {};
+    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+        t[p] = s[p];
+    if (s != null && typeof Object.getOwnPropertySymbols === "function")
+        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                t[p[i]] = s[p[i]];
+        }
+    return t;
+}
+
+export function __decorate(decorators, target, key, desc) {
+    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+    return c > 3 && r && Object.defineProperty(target, key, r), r;
+}
+
+export function __param(paramIndex, decorator) {
+    return function (target, key) { decorator(target, key, paramIndex); }
+}
+
+export function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
+    function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
+    var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
+    var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
+    var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
+    var _, done = false;
+    for (var i = decorators.length - 1; i >= 0; i--) {
+        var context = {};
+        for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
+        for (var p in contextIn.access) context.access[p] = contextIn.access[p];
+        context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
+        var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
+        if (kind === "accessor") {
+            if (result === void 0) continue;
+            if (result === null || typeof result !== "object") throw new TypeError("Object expected");
+            if (_ = accept(result.get)) descriptor.get = _;
+            if (_ = accept(result.set)) descriptor.set = _;
+            if (_ = accept(result.init)) initializers.unshift(_);
+        }
+        else if (_ = accept(result)) {
+            if (kind === "field") initializers.unshift(_);
+            else descriptor[key] = _;
+        }
+    }
+    if (target) Object.defineProperty(target, contextIn.name, descriptor);
+    done = true;
+};
+
+export function __runInitializers(thisArg, initializers, value) {
+    var useValue = arguments.length > 2;
+    for (var i = 0; i < initializers.length; i++) {
+        value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
+    }
+    return useValue ? value : void 0;
+};
+
+export function __propKey(x) {
+    return typeof x === "symbol" ? x : "".concat(x);
+};
+
+export function __setFunctionName(f, name, prefix) {
+    if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
+    return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
+};
+
+export function __metadata(metadataKey, metadataValue) {
+    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+}
+
+export function __awaiter(thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+}
+
+export function __generator(thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
+    return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (g && (g = 0, op[0] && (_ = 0)), _) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+}
+
+export var __createBinding = Object.create ? (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    var desc = Object.getOwnPropertyDescriptor(m, k);
+    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+        desc = { enumerable: true, get: function() { return m[k]; } };
+    }
+    Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+    if (k2 === undefined) k2 = k;
+    o[k2] = m[k];
+});
+
+export function __exportStar(m, o) {
+    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
+}
+
+export function __values(o) {
+    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+    if (m) return m.call(o);
+    if (o && typeof o.length === "number") return {
+        next: function () {
+            if (o && i >= o.length) o = void 0;
+            return { value: o && o[i++], done: !o };
+        }
+    };
+    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+}
+
+export function __read(o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+}
+
+/** @deprecated */
+export function __spread() {
+    for (var ar = [], i = 0; i < arguments.length; i++)
+        ar = ar.concat(__read(arguments[i]));
+    return ar;
+}
+
+/** @deprecated */
+export function __spreadArrays() {
+    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+    for (var r = Array(s), k = 0, i = 0; i < il; i++)
+        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+            r[k] = a[j];
+    return r;
+}
+
+export function __spreadArray(to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+}
+
+export function __await(v) {
+    return this instanceof __await ? (this.v = v, this) : new __await(v);
+}
+
+export function __asyncGenerator(thisArg, _arguments, generator) {
+    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+    var g = generator.apply(thisArg, _arguments || []), i, q = [];
+    return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
+    function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
+    function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
+    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+    function fulfill(value) { resume("next", value); }
+    function reject(value) { resume("throw", value); }
+    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+}
+
+export function __asyncDelegator(o) {
+    var i, p;
+    return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
+}
+
+export function __asyncValues(o) {
+    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+    var m = o[Symbol.asyncIterator], i;
+    return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+}
+
+export function __makeTemplateObject(cooked, raw) {
+    if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+    return cooked;
+};
+
+var __setModuleDefault = Object.create ? (function(o, v) {
+    Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+    o["default"] = v;
+};
+
+var ownKeys = function(o) {
+    ownKeys = Object.getOwnPropertyNames || function (o) {
+        var ar = [];
+        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+        return ar;
+    };
+    return ownKeys(o);
+};
+
+export function __importStar(mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+    __setModuleDefault(result, mod);
+    return result;
+}
+
+export function __importDefault(mod) {
+    return (mod && mod.__esModule) ? mod : { default: mod };
+}
+
+export function __classPrivateFieldGet(receiver, state, kind, f) {
+    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
+    if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
+    return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+}
+
+export function __classPrivateFieldSet(receiver, state, value, kind, f) {
+    if (kind === "m") throw new TypeError("Private method is not writable");
+    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
+    if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
+    return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
+}
+
+export function __classPrivateFieldIn(state, receiver) {
+    if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
+    return typeof state === "function" ? receiver === state : state.has(receiver);
+}
+
+export function __addDisposableResource(env, value, async) {
+    if (value !== null && value !== void 0) {
+        if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
+        var dispose, inner;
+        if (async) {
+            if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
+            dispose = value[Symbol.asyncDispose];
+        }
+        if (dispose === void 0) {
+            if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
+            dispose = value[Symbol.dispose];
+            if (async) inner = dispose;
+        }
+        if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
+        if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
+        env.stack.push({ value: value, dispose: dispose, async: async });
+    }
+    else if (async) {
+        env.stack.push({ async: true });
+    }
+    return value;
+
+}
+
+var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
+    var e = new Error(message);
+    return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
+};
+
+export function __disposeResources(env) {
+    function fail(e) {
+        env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
+        env.hasError = true;
+    }
+    var r, s = 0;
+    function next() {
+        while (r = env.stack.pop()) {
+            try {
+                if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
+                if (r.dispose) {
+                    var result = r.dispose.call(r.value);
+                    if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+                }
+                else s |= 1;
+            }
+            catch (e) {
+                fail(e);
+            }
+        }
+        if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
+        if (env.hasError) throw env.error;
+    }
+    return next();
+}
+
+export function __rewriteRelativeImportExtension(path, preserveJsx) {
+    if (typeof path === "string" && /^\.\.?\//.test(path)) {
+        return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
+            return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
+        });
+    }
+    return path;
+}
+
+export default {
+    __extends: __extends,
+    __assign: __assign,
+    __rest: __rest,
+    __decorate: __decorate,
+    __param: __param,
+    __esDecorate: __esDecorate,
+    __runInitializers: __runInitializers,
+    __propKey: __propKey,
+    __setFunctionName: __setFunctionName,
+    __metadata: __metadata,
+    __awaiter: __awaiter,
+    __generator: __generator,
+    __createBinding: __createBinding,
+    __exportStar: __exportStar,
+    __values: __values,
+    __read: __read,
+    __spread: __spread,
+    __spreadArrays: __spreadArrays,
+    __spreadArray: __spreadArray,
+    __await: __await,
+    __asyncGenerator: __asyncGenerator,
+    __asyncDelegator: __asyncDelegator,
+    __asyncValues: __asyncValues,
+    __makeTemplateObject: __makeTemplateObject,
+    __importStar: __importStar,
+    __importDefault: __importDefault,
+    __classPrivateFieldGet: __classPrivateFieldGet,
+    __classPrivateFieldSet: __classPrivateFieldSet,
+    __classPrivateFieldIn: __classPrivateFieldIn,
+    __addDisposableResource: __addDisposableResource,
+    __disposeResources: __disposeResources,
+    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,
+};
diff --git a/node_modules/tslib/tslib.es6.mjs b/node_modules/tslib/tslib.es6.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..c17990a13acce3c462871f37caae96b112850771
--- /dev/null
+++ b/node_modules/tslib/tslib.es6.mjs
@@ -0,0 +1,401 @@
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise, SuppressedError, Symbol, Iterator */
+
+var extendStatics = function(d, b) {
+  extendStatics = Object.setPrototypeOf ||
+      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+  return extendStatics(d, b);
+};
+
+export function __extends(d, b) {
+  if (typeof b !== "function" && b !== null)
+      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+  extendStatics(d, b);
+  function __() { this.constructor = d; }
+  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+export var __assign = function() {
+  __assign = Object.assign || function __assign(t) {
+      for (var s, i = 1, n = arguments.length; i < n; i++) {
+          s = arguments[i];
+          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+      }
+      return t;
+  }
+  return __assign.apply(this, arguments);
+}
+
+export function __rest(s, e) {
+  var t = {};
+  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+      t[p] = s[p];
+  if (s != null && typeof Object.getOwnPropertySymbols === "function")
+      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+              t[p[i]] = s[p[i]];
+      }
+  return t;
+}
+
+export function __decorate(decorators, target, key, desc) {
+  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+  return c > 3 && r && Object.defineProperty(target, key, r), r;
+}
+
+export function __param(paramIndex, decorator) {
+  return function (target, key) { decorator(target, key, paramIndex); }
+}
+
+export function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
+  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
+  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
+  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
+  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
+  var _, done = false;
+  for (var i = decorators.length - 1; i >= 0; i--) {
+      var context = {};
+      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
+      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
+      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
+      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
+      if (kind === "accessor") {
+          if (result === void 0) continue;
+          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
+          if (_ = accept(result.get)) descriptor.get = _;
+          if (_ = accept(result.set)) descriptor.set = _;
+          if (_ = accept(result.init)) initializers.unshift(_);
+      }
+      else if (_ = accept(result)) {
+          if (kind === "field") initializers.unshift(_);
+          else descriptor[key] = _;
+      }
+  }
+  if (target) Object.defineProperty(target, contextIn.name, descriptor);
+  done = true;
+};
+
+export function __runInitializers(thisArg, initializers, value) {
+  var useValue = arguments.length > 2;
+  for (var i = 0; i < initializers.length; i++) {
+      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
+  }
+  return useValue ? value : void 0;
+};
+
+export function __propKey(x) {
+  return typeof x === "symbol" ? x : "".concat(x);
+};
+
+export function __setFunctionName(f, name, prefix) {
+  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
+  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
+};
+
+export function __metadata(metadataKey, metadataValue) {
+  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+}
+
+export function __awaiter(thisArg, _arguments, P, generator) {
+  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+  return new (P || (P = Promise))(function (resolve, reject) {
+      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+      step((generator = generator.apply(thisArg, _arguments || [])).next());
+  });
+}
+
+export function __generator(thisArg, body) {
+  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
+  return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+  function verb(n) { return function (v) { return step([n, v]); }; }
+  function step(op) {
+      if (f) throw new TypeError("Generator is already executing.");
+      while (g && (g = 0, op[0] && (_ = 0)), _) try {
+          if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+          if (y = 0, t) op = [op[0] & 2, t.value];
+          switch (op[0]) {
+              case 0: case 1: t = op; break;
+              case 4: _.label++; return { value: op[1], done: false };
+              case 5: _.label++; y = op[1]; op = [0]; continue;
+              case 7: op = _.ops.pop(); _.trys.pop(); continue;
+              default:
+                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                  if (t[2]) _.ops.pop();
+                  _.trys.pop(); continue;
+          }
+          op = body.call(thisArg, _);
+      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+  }
+}
+
+export var __createBinding = Object.create ? (function(o, m, k, k2) {
+  if (k2 === undefined) k2 = k;
+  var desc = Object.getOwnPropertyDescriptor(m, k);
+  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+      desc = { enumerable: true, get: function() { return m[k]; } };
+  }
+  Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+  if (k2 === undefined) k2 = k;
+  o[k2] = m[k];
+});
+
+export function __exportStar(m, o) {
+  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
+}
+
+export function __values(o) {
+  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+  if (m) return m.call(o);
+  if (o && typeof o.length === "number") return {
+      next: function () {
+          if (o && i >= o.length) o = void 0;
+          return { value: o && o[i++], done: !o };
+      }
+  };
+  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+}
+
+export function __read(o, n) {
+  var m = typeof Symbol === "function" && o[Symbol.iterator];
+  if (!m) return o;
+  var i = m.call(o), r, ar = [], e;
+  try {
+      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+  }
+  catch (error) { e = { error: error }; }
+  finally {
+      try {
+          if (r && !r.done && (m = i["return"])) m.call(i);
+      }
+      finally { if (e) throw e.error; }
+  }
+  return ar;
+}
+
+/** @deprecated */
+export function __spread() {
+  for (var ar = [], i = 0; i < arguments.length; i++)
+      ar = ar.concat(__read(arguments[i]));
+  return ar;
+}
+
+/** @deprecated */
+export function __spreadArrays() {
+  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+  for (var r = Array(s), k = 0, i = 0; i < il; i++)
+      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+          r[k] = a[j];
+  return r;
+}
+
+export function __spreadArray(to, from, pack) {
+  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+      if (ar || !(i in from)) {
+          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+          ar[i] = from[i];
+      }
+  }
+  return to.concat(ar || Array.prototype.slice.call(from));
+}
+
+export function __await(v) {
+  return this instanceof __await ? (this.v = v, this) : new __await(v);
+}
+
+export function __asyncGenerator(thisArg, _arguments, generator) {
+  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+  var g = generator.apply(thisArg, _arguments || []), i, q = [];
+  return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
+  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
+  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
+  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+  function fulfill(value) { resume("next", value); }
+  function reject(value) { resume("throw", value); }
+  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+}
+
+export function __asyncDelegator(o) {
+  var i, p;
+  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
+}
+
+export function __asyncValues(o) {
+  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+  var m = o[Symbol.asyncIterator], i;
+  return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+}
+
+export function __makeTemplateObject(cooked, raw) {
+  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+  return cooked;
+};
+
+var __setModuleDefault = Object.create ? (function(o, v) {
+  Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+  o["default"] = v;
+};
+
+var ownKeys = function(o) {
+  ownKeys = Object.getOwnPropertyNames || function (o) {
+    var ar = [];
+    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+    return ar;
+  };
+  return ownKeys(o);
+};
+
+export function __importStar(mod) {
+  if (mod && mod.__esModule) return mod;
+  var result = {};
+  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+  __setModuleDefault(result, mod);
+  return result;
+}
+
+export function __importDefault(mod) {
+  return (mod && mod.__esModule) ? mod : { default: mod };
+}
+
+export function __classPrivateFieldGet(receiver, state, kind, f) {
+  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
+  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
+  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+}
+
+export function __classPrivateFieldSet(receiver, state, value, kind, f) {
+  if (kind === "m") throw new TypeError("Private method is not writable");
+  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
+  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
+  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
+}
+
+export function __classPrivateFieldIn(state, receiver) {
+  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
+  return typeof state === "function" ? receiver === state : state.has(receiver);
+}
+
+export function __addDisposableResource(env, value, async) {
+  if (value !== null && value !== void 0) {
+    if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
+    var dispose, inner;
+    if (async) {
+      if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
+      dispose = value[Symbol.asyncDispose];
+    }
+    if (dispose === void 0) {
+      if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
+      dispose = value[Symbol.dispose];
+      if (async) inner = dispose;
+    }
+    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
+    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
+    env.stack.push({ value: value, dispose: dispose, async: async });
+  }
+  else if (async) {
+    env.stack.push({ async: true });
+  }
+  return value;
+}
+
+var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
+  var e = new Error(message);
+  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
+};
+
+export function __disposeResources(env) {
+  function fail(e) {
+    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
+    env.hasError = true;
+  }
+  var r, s = 0;
+  function next() {
+    while (r = env.stack.pop()) {
+      try {
+        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
+        if (r.dispose) {
+          var result = r.dispose.call(r.value);
+          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+        }
+        else s |= 1;
+      }
+      catch (e) {
+        fail(e);
+      }
+    }
+    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
+    if (env.hasError) throw env.error;
+  }
+  return next();
+}
+
+export function __rewriteRelativeImportExtension(path, preserveJsx) {
+  if (typeof path === "string" && /^\.\.?\//.test(path)) {
+      return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
+          return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
+      });
+  }
+  return path;
+}
+
+export default {
+  __extends,
+  __assign,
+  __rest,
+  __decorate,
+  __param,
+  __esDecorate,
+  __runInitializers,
+  __propKey,
+  __setFunctionName,
+  __metadata,
+  __awaiter,
+  __generator,
+  __createBinding,
+  __exportStar,
+  __values,
+  __read,
+  __spread,
+  __spreadArrays,
+  __spreadArray,
+  __await,
+  __asyncGenerator,
+  __asyncDelegator,
+  __asyncValues,
+  __makeTemplateObject,
+  __importStar,
+  __importDefault,
+  __classPrivateFieldGet,
+  __classPrivateFieldSet,
+  __classPrivateFieldIn,
+  __addDisposableResource,
+  __disposeResources,
+  __rewriteRelativeImportExtension,
+};
diff --git a/node_modules/tslib/tslib.html b/node_modules/tslib/tslib.html
new file mode 100644
index 0000000000000000000000000000000000000000..44c9ba51e3547ad1b7a9244f14703ab681519619
--- /dev/null
+++ b/node_modules/tslib/tslib.html
@@ -0,0 +1 @@
+<script src="tslib.js"></script>
\ No newline at end of file
diff --git a/node_modules/tslib/tslib.js b/node_modules/tslib/tslib.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e12ace6db8ac89cf15b3106d8d6ab8271ffd3a4
--- /dev/null
+++ b/node_modules/tslib/tslib.js
@@ -0,0 +1,484 @@
+/******************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global global, define, Symbol, Reflect, Promise, SuppressedError, Iterator */
+var __extends;
+var __assign;
+var __rest;
+var __decorate;
+var __param;
+var __esDecorate;
+var __runInitializers;
+var __propKey;
+var __setFunctionName;
+var __metadata;
+var __awaiter;
+var __generator;
+var __exportStar;
+var __values;
+var __read;
+var __spread;
+var __spreadArrays;
+var __spreadArray;
+var __await;
+var __asyncGenerator;
+var __asyncDelegator;
+var __asyncValues;
+var __makeTemplateObject;
+var __importStar;
+var __importDefault;
+var __classPrivateFieldGet;
+var __classPrivateFieldSet;
+var __classPrivateFieldIn;
+var __createBinding;
+var __addDisposableResource;
+var __disposeResources;
+var __rewriteRelativeImportExtension;
+(function (factory) {
+    var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
+    if (typeof define === "function" && define.amd) {
+        define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
+    }
+    else if (typeof module === "object" && typeof module.exports === "object") {
+        factory(createExporter(root, createExporter(module.exports)));
+    }
+    else {
+        factory(createExporter(root));
+    }
+    function createExporter(exports, previous) {
+        if (exports !== root) {
+            if (typeof Object.create === "function") {
+                Object.defineProperty(exports, "__esModule", { value: true });
+            }
+            else {
+                exports.__esModule = true;
+            }
+        }
+        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
+    }
+})
+(function (exporter) {
+    var extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+
+    __extends = function (d, b) {
+        if (typeof b !== "function" && b !== null)
+            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+        extendStatics(d, b);
+        function __() { this.constructor = d; }
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+    };
+
+    __assign = Object.assign || function (t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+        }
+        return t;
+    };
+
+    __rest = function (s, e) {
+        var t = {};
+        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
+            t[p] = s[p];
+        if (s != null && typeof Object.getOwnPropertySymbols === "function")
+            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
+                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
+                    t[p[i]] = s[p[i]];
+            }
+        return t;
+    };
+
+    __decorate = function (decorators, target, key, desc) {
+        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+        return c > 3 && r && Object.defineProperty(target, key, r), r;
+    };
+
+    __param = function (paramIndex, decorator) {
+        return function (target, key) { decorator(target, key, paramIndex); }
+    };
+
+    __esDecorate = function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
+        function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
+        var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
+        var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
+        var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
+        var _, done = false;
+        for (var i = decorators.length - 1; i >= 0; i--) {
+            var context = {};
+            for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
+            for (var p in contextIn.access) context.access[p] = contextIn.access[p];
+            context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
+            var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
+            if (kind === "accessor") {
+                if (result === void 0) continue;
+                if (result === null || typeof result !== "object") throw new TypeError("Object expected");
+                if (_ = accept(result.get)) descriptor.get = _;
+                if (_ = accept(result.set)) descriptor.set = _;
+                if (_ = accept(result.init)) initializers.unshift(_);
+            }
+            else if (_ = accept(result)) {
+                if (kind === "field") initializers.unshift(_);
+                else descriptor[key] = _;
+            }
+        }
+        if (target) Object.defineProperty(target, contextIn.name, descriptor);
+        done = true;
+    };
+
+    __runInitializers = function (thisArg, initializers, value) {
+        var useValue = arguments.length > 2;
+        for (var i = 0; i < initializers.length; i++) {
+            value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
+        }
+        return useValue ? value : void 0;
+    };
+
+    __propKey = function (x) {
+        return typeof x === "symbol" ? x : "".concat(x);
+    };
+
+    __setFunctionName = function (f, name, prefix) {
+        if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
+        return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
+    };
+
+    __metadata = function (metadataKey, metadataValue) {
+        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
+    };
+
+    __awaiter = function (thisArg, _arguments, P, generator) {
+        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+        return new (P || (P = Promise))(function (resolve, reject) {
+            function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+            function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+            step((generator = generator.apply(thisArg, _arguments || [])).next());
+        });
+    };
+
+    __generator = function (thisArg, body) {
+        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
+        return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+        function verb(n) { return function (v) { return step([n, v]); }; }
+        function step(op) {
+            if (f) throw new TypeError("Generator is already executing.");
+            while (g && (g = 0, op[0] && (_ = 0)), _) try {
+                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+                if (y = 0, t) op = [op[0] & 2, t.value];
+                switch (op[0]) {
+                    case 0: case 1: t = op; break;
+                    case 4: _.label++; return { value: op[1], done: false };
+                    case 5: _.label++; y = op[1]; op = [0]; continue;
+                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                    default:
+                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                        if (t[2]) _.ops.pop();
+                        _.trys.pop(); continue;
+                }
+                op = body.call(thisArg, _);
+            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+        }
+    };
+
+    __exportStar = function(m, o) {
+        for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
+    };
+
+    __createBinding = Object.create ? (function(o, m, k, k2) {
+        if (k2 === undefined) k2 = k;
+        var desc = Object.getOwnPropertyDescriptor(m, k);
+        if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+            desc = { enumerable: true, get: function() { return m[k]; } };
+        }
+        Object.defineProperty(o, k2, desc);
+    }) : (function(o, m, k, k2) {
+        if (k2 === undefined) k2 = k;
+        o[k2] = m[k];
+    });
+
+    __values = function (o) {
+        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
+        if (m) return m.call(o);
+        if (o && typeof o.length === "number") return {
+            next: function () {
+                if (o && i >= o.length) o = void 0;
+                return { value: o && o[i++], done: !o };
+            }
+        };
+        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
+    };
+
+    __read = function (o, n) {
+        var m = typeof Symbol === "function" && o[Symbol.iterator];
+        if (!m) return o;
+        var i = m.call(o), r, ar = [], e;
+        try {
+            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+        }
+        catch (error) { e = { error: error }; }
+        finally {
+            try {
+                if (r && !r.done && (m = i["return"])) m.call(i);
+            }
+            finally { if (e) throw e.error; }
+        }
+        return ar;
+    };
+
+    /** @deprecated */
+    __spread = function () {
+        for (var ar = [], i = 0; i < arguments.length; i++)
+            ar = ar.concat(__read(arguments[i]));
+        return ar;
+    };
+
+    /** @deprecated */
+    __spreadArrays = function () {
+        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
+        for (var r = Array(s), k = 0, i = 0; i < il; i++)
+            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
+                r[k] = a[j];
+        return r;
+    };
+
+    __spreadArray = function (to, from, pack) {
+        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+            if (ar || !(i in from)) {
+                if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+                ar[i] = from[i];
+            }
+        }
+        return to.concat(ar || Array.prototype.slice.call(from));
+    };
+
+    __await = function (v) {
+        return this instanceof __await ? (this.v = v, this) : new __await(v);
+    };
+
+    __asyncGenerator = function (thisArg, _arguments, generator) {
+        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+        var g = generator.apply(thisArg, _arguments || []), i, q = [];
+        return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
+        function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
+        function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
+        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
+        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
+        function fulfill(value) { resume("next", value); }
+        function reject(value) { resume("throw", value); }
+        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
+    };
+
+    __asyncDelegator = function (o) {
+        var i, p;
+        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
+        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
+    };
+
+    __asyncValues = function (o) {
+        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
+        var m = o[Symbol.asyncIterator], i;
+        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
+        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
+        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
+    };
+
+    __makeTemplateObject = function (cooked, raw) {
+        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
+        return cooked;
+    };
+
+    var __setModuleDefault = Object.create ? (function(o, v) {
+        Object.defineProperty(o, "default", { enumerable: true, value: v });
+    }) : function(o, v) {
+        o["default"] = v;
+    };
+
+    var ownKeys = function(o) {
+        ownKeys = Object.getOwnPropertyNames || function (o) {
+            var ar = [];
+            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
+            return ar;
+        };
+        return ownKeys(o);
+    };
+
+    __importStar = function (mod) {
+        if (mod && mod.__esModule) return mod;
+        var result = {};
+        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
+        __setModuleDefault(result, mod);
+        return result;
+    };
+
+    __importDefault = function (mod) {
+        return (mod && mod.__esModule) ? mod : { "default": mod };
+    };
+
+    __classPrivateFieldGet = function (receiver, state, kind, f) {
+        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
+        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
+        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
+    };
+
+    __classPrivateFieldSet = function (receiver, state, value, kind, f) {
+        if (kind === "m") throw new TypeError("Private method is not writable");
+        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
+        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
+        return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
+    };
+
+    __classPrivateFieldIn = function (state, receiver) {
+        if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
+        return typeof state === "function" ? receiver === state : state.has(receiver);
+    };
+
+    __addDisposableResource = function (env, value, async) {
+        if (value !== null && value !== void 0) {
+            if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
+            var dispose, inner;
+            if (async) {
+                if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
+                dispose = value[Symbol.asyncDispose];
+            }
+            if (dispose === void 0) {
+                if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
+                dispose = value[Symbol.dispose];
+                if (async) inner = dispose;
+            }
+            if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
+            if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
+            env.stack.push({ value: value, dispose: dispose, async: async });
+        }
+        else if (async) {
+            env.stack.push({ async: true });
+        }
+        return value;
+    };
+
+    var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
+        var e = new Error(message);
+        return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
+    };
+
+    __disposeResources = function (env) {
+        function fail(e) {
+            env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
+            env.hasError = true;
+        }
+        var r, s = 0;
+        function next() {
+            while (r = env.stack.pop()) {
+                try {
+                    if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
+                    if (r.dispose) {
+                        var result = r.dispose.call(r.value);
+                        if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
+                    }
+                    else s |= 1;
+                }
+                catch (e) {
+                    fail(e);
+                }
+            }
+            if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
+            if (env.hasError) throw env.error;
+        }
+        return next();
+    };
+
+    __rewriteRelativeImportExtension = function (path, preserveJsx) {
+        if (typeof path === "string" && /^\.\.?\//.test(path)) {
+            return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
+                return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
+            });
+        }
+        return path;
+    };
+
+    exporter("__extends", __extends);
+    exporter("__assign", __assign);
+    exporter("__rest", __rest);
+    exporter("__decorate", __decorate);
+    exporter("__param", __param);
+    exporter("__esDecorate", __esDecorate);
+    exporter("__runInitializers", __runInitializers);
+    exporter("__propKey", __propKey);
+    exporter("__setFunctionName", __setFunctionName);
+    exporter("__metadata", __metadata);
+    exporter("__awaiter", __awaiter);
+    exporter("__generator", __generator);
+    exporter("__exportStar", __exportStar);
+    exporter("__createBinding", __createBinding);
+    exporter("__values", __values);
+    exporter("__read", __read);
+    exporter("__spread", __spread);
+    exporter("__spreadArrays", __spreadArrays);
+    exporter("__spreadArray", __spreadArray);
+    exporter("__await", __await);
+    exporter("__asyncGenerator", __asyncGenerator);
+    exporter("__asyncDelegator", __asyncDelegator);
+    exporter("__asyncValues", __asyncValues);
+    exporter("__makeTemplateObject", __makeTemplateObject);
+    exporter("__importStar", __importStar);
+    exporter("__importDefault", __importDefault);
+    exporter("__classPrivateFieldGet", __classPrivateFieldGet);
+    exporter("__classPrivateFieldSet", __classPrivateFieldSet);
+    exporter("__classPrivateFieldIn", __classPrivateFieldIn);
+    exporter("__addDisposableResource", __addDisposableResource);
+    exporter("__disposeResources", __disposeResources);
+    exporter("__rewriteRelativeImportExtension", __rewriteRelativeImportExtension);
+});
+
+0 && (module.exports = {
+    __extends: __extends,
+    __assign: __assign,
+    __rest: __rest,
+    __decorate: __decorate,
+    __param: __param,
+    __esDecorate: __esDecorate,
+    __runInitializers: __runInitializers,
+    __propKey: __propKey,
+    __setFunctionName: __setFunctionName,
+    __metadata: __metadata,
+    __awaiter: __awaiter,
+    __generator: __generator,
+    __exportStar: __exportStar,
+    __createBinding: __createBinding,
+    __values: __values,
+    __read: __read,
+    __spread: __spread,
+    __spreadArrays: __spreadArrays,
+    __spreadArray: __spreadArray,
+    __await: __await,
+    __asyncGenerator: __asyncGenerator,
+    __asyncDelegator: __asyncDelegator,
+    __asyncValues: __asyncValues,
+    __makeTemplateObject: __makeTemplateObject,
+    __importStar: __importStar,
+    __importDefault: __importDefault,
+    __classPrivateFieldGet: __classPrivateFieldGet,
+    __classPrivateFieldSet: __classPrivateFieldSet,
+    __classPrivateFieldIn: __classPrivateFieldIn,
+    __addDisposableResource: __addDisposableResource,
+    __disposeResources: __disposeResources,
+    __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,
+});
diff --git a/node_modules/uncontrollable/.babelrc b/node_modules/uncontrollable/.babelrc
new file mode 100644
index 0000000000000000000000000000000000000000..17284601ecf821392cc262797f3f57d9738d319b
--- /dev/null
+++ b/node_modules/uncontrollable/.babelrc
@@ -0,0 +1,47 @@
+{
+  "presets": [
+    [
+      "jason",
+      {
+        "debug": true,
+        "targets": {
+          "browsers": [
+            ">= .25%",
+            "ie 11",
+            "not dead",
+            "not op_mini all",
+            "not Android 4.4.3-4.4.4",
+            "not ios_saf < 10",
+            "not Chrome < 50", // caniuse lastest is reporting chrome 29
+            "firefox ESR"
+          ]
+        }
+      }
+    ],
+    "@babel/preset-typescript"
+  ],
+  "env": {
+    "esm": {
+      "presets": [
+        [
+          "jason",
+          {
+            "modules": false,
+            "targets": {
+              "browsers": [
+                ">= .25%",
+                "ie 11",
+                "not dead",
+                "not op_mini all",
+                "not Android 4.4.3-4.4.4",
+                "not ios_saf < 10",
+                "not Chrome < 50", // caniuse lastest is reporting chrome 29
+                "firefox ESR"
+              ]
+            }
+          }
+        ]
+      ]
+    }
+  }
+}
diff --git a/node_modules/uncontrollable/.travis.yml b/node_modules/uncontrollable/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4807d37588f2465020eed6b94ba7501906fce8e4
--- /dev/null
+++ b/node_modules/uncontrollable/.travis.yml
@@ -0,0 +1,9 @@
+language: node_js
+cache: yarn
+notifications:
+  email: false
+node_js:
+  - "stable"
+branches:
+  only:
+    - master
diff --git a/node_modules/uncontrollable/CHANGELOG.md b/node_modules/uncontrollable/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc2b26afbf9bb8e44adc9a1bd5c979791f809c39
--- /dev/null
+++ b/node_modules/uncontrollable/CHANGELOG.md
@@ -0,0 +1,134 @@
+# [7.2.0](https://github.com/jquense/uncontrollable/compare/v7.1.1...v7.2.0) (2021-01-25)
+
+
+### Features
+
+* Allow React 17 types ([#50](https://github.com/jquense/uncontrollable/issues/50)) ([d1f5274](https://github.com/jquense/uncontrollable/commit/d1f527437b93af5baf4c1c038ee1d0afd4ce0d73))
+
+
+
+
+
+## [7.1.1](https://github.com/jquense/uncontrollable/compare/v7.1.0...v7.1.1) (2019-10-31)
+
+
+### Bug Fixes
+
+* bump fstream from 1.0.11 to 1.0.12 ([#45](https://github.com/jquense/uncontrollable/issues/45)) ([97b1287](https://github.com/jquense/uncontrollable/commit/97b1287))
+* bump sshpk from 1.11.0 to 1.16.1 ([#46](https://github.com/jquense/uncontrollable/issues/46)) ([80e19d5](https://github.com/jquense/uncontrollable/commit/80e19d5))
+* clean up types ([bd29932](https://github.com/jquense/uncontrollable/commit/bd29932))
+
+
+
+
+
+# [7.1.0](https://github.com/jquense/uncontrollable/compare/v7.0.2...v7.1.0) (2019-10-30)
+
+
+### Features
+
+* add useUncontrolledProp and types ([6e0837d](https://github.com/jquense/uncontrollable/commit/6e0837d))
+
+
+
+
+
+## [7.0.2](https://github.com/jquense/uncontrollable/compare/v7.0.1...v7.0.2) (2019-10-03)
+
+
+### Bug Fixes
+
+*  migrate unsafe lifecycle ([#40](https://github.com/jquense/uncontrollable/issues/40)) ([1607fff](https://github.com/jquense/uncontrollable/commit/1607fff))
+
+## [7.0.1](https://github.com/jquense/uncontrollable/compare/v7.0.0...v7.0.1) (2019-09-06)
+
+
+### Bug Fixes
+
+* rename License.txt to LICENSE ([#39](https://github.com/jquense/uncontrollable/issues/39)) ([171e821](https://github.com/jquense/uncontrollable/commit/171e821))
+
+# [7.0.0](https://github.com/jquense/uncontrollable/compare/v6.2.3...v7.0.0) (2019-06-18)
+
+
+### Features
+
+* consistent exports ([#37](https://github.com/jquense/uncontrollable/issues/37)) ([6b51ec6](https://github.com/jquense/uncontrollable/commit/6b51ec6))
+
+
+### BREAKING CHANGES
+
+* no more default export
+
+- removed default export
+- name files properly
+
+* Use default exports
+
+## [6.2.3](https://github.com/jquense/uncontrollable/compare/v6.2.2...v6.2.3) (2019-06-17)
+
+
+### Bug Fixes
+
+* republish again to fix build lol ([38f3bf8](https://github.com/jquense/uncontrollable/commit/38f3bf8))
+
+
+
+
+
+## [6.2.2](https://github.com/jquense/uncontrollable/compare/v6.2.1...v6.2.2) (2019-06-17)
+
+
+### Bug Fixes
+
+* make default import ([e7ff375](https://github.com/jquense/uncontrollable/commit/e7ff375))
+
+
+
+
+
+## [6.2.1](https://github.com/jquense/uncontrollable/compare/v6.2.0...v6.2.1) (2019-06-17)
+
+
+### Bug Fixes
+
+* bad publish ([82ef3fc](https://github.com/jquense/uncontrollable/commit/82ef3fc))
+
+# [6.2.0](https://github.com/jquense/uncontrollable/compare/v6.1.0...v6.2.0) (2019-06-17)
+
+
+### Features
+
+* add esm support ([2457bf3](https://github.com/jquense/uncontrollable/commit/2457bf3))
+
+# [6.1.0](https://github.com/jquense/uncontrollable/compare/v6.0.0...v6.1.0) (2019-02-12)
+
+
+### Features
+
+* add hook ([35c194d](https://github.com/jquense/uncontrollable/commit/35c194d))
+
+
+
+<a name="6.0.0"></a>
+# [6.0.0](https://github.com/jquense/uncontrollable/compare/v5.1.0...v6.0.0) (2018-05-02)
+
+
+### Features
+
+* Support forwardRef() ([a558754](https://github.com/jquense/uncontrollable/commit/a558754))
+
+
+### BREAKING CHANGES
+
+* attached refs are now the original components, and not
+the uncontrolled component instance
+* removed getControlledInstance so there are no special
+methods on the uncontrolled component
+
+<a name="5.1.0"></a>
+# [5.1.0](https://github.com/jquense/uncontrollable/compare/v5.0.0...v5.1.0) (2018-03-31)
+
+
+### Features
+
+* better release tooling ([41bfc32](https://github.com/jquense/uncontrollable/commit/41bfc32))
diff --git a/node_modules/uncontrollable/LICENSE b/node_modules/uncontrollable/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7805399acb78383e982b19164b4a95a1ff6b15ac
--- /dev/null
+++ b/node_modules/uncontrollable/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jason Quense
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/uncontrollable/README.md b/node_modules/uncontrollable/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f3499972a9393a140ab32234ea1347125ee39f6
--- /dev/null
+++ b/node_modules/uncontrollable/README.md
@@ -0,0 +1,146 @@
+# uncontrollable
+
+Wrap a controlled react component, to allow specific prop/handler pairs to be omitted by Component consumers. Uncontrollable allows you to write React components, with minimal state, and then wrap them in a component that will manage state for prop/handlers if they are excluded.
+
+## Install
+
+```sh
+npm i -S uncontrollable
+```
+
+### Usage
+
+If you are a bit unsure on the _why_ of this module read the next section first. If you just want to see some real-world examples, check out [React Widgets](https://github.com/jquense/react-widgets) which makes [heavy use of this strategy](https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521).
+
+```js
+import { uncontrollable } from 'uncontrollable'
+```
+
+### API
+
+#### `uncontrollable(Component, propHandlerHash, [methods])`
+
+- `Component`: is a valid react component, such as the result of `createClass`
+- `propHandlerHash`: define the pairs of prop/handlers you want to be uncontrollable, e.g. `{ value: 'onChange'}`
+- `methods`: since uncontrollable wraps your component in another component, methods are not immediately accessible. You can proxy them through by providing the names of the methods you want to continue to expose. **You don't need this if you are using React >= v16.3.0, the ref will automatically be forwarded to the uinderlying component**
+
+For every prop you indicate as uncontrollable, the returned component will also accept an initial, `default` value for that prop. For example, `open` can be left uncontrolled but the initial value can be set via `defaultOpen={true}` if we want it to start open.
+
+```js
+import { uncontrollable } from 'uncontrollable'
+
+const UncontrolledCombobox = uncontrollable(Combobox, {
+  value: 'onChange',
+  open: 'onToggle',
+  searchTerm: 'onSearch', //the current typed value (maybe it filters the dropdown list)
+})
+```
+
+Since uncontrollable creates a new component that wraps your existing one, methods on your underlying component
+won't be immediately accessible. In general this sort of access is not idiomatic React, but it does have its place.
+The third argument of `uncontrollable()` is an optional array of method names you want uncontrollable to "pass through"
+to the original component.
+
+```js
+let UncontrolledForm = uncontrollable(Form, { value: 'onChange' }, ['submit'])
+
+//when you use a ref this will work
+this.refs.myForm.submit()
+```
+
+#### `useUncontrolled(props, propsHandlerHash) => controlledProps`
+
+A React hook that can be used in place of the above Higher order Component. It
+returns a complete set of `props` which are safe to spread through to a child element.
+
+```js
+import { useUncontrolled } from 'uncontrollable'
+
+const UncontrolledCombobox = props => {
+  // filters out defaultValue, defaultOpen and returns controlled
+  // versions of onChange, and onToggle.
+  const controlledProps = useUncontrolled(props, {
+    value: 'onChange',
+    open: 'onToggle',
+  })
+
+  return <Checkbox {...controlledProps} />
+}
+```
+
+### Use Case
+
+One of the strengths of React is its extensibility model, enabled by a common practice of pushing component state as high up the tree as possible. While great for enabling extremely flexible and easy to reason about components, this can produce a lot of boilerplate to wire components up with every use. For simple components (like an input) this is usually a matter of tying the input `value` prop to a parent state property via its `onChange` handler. Here is an extremely common pattern:
+
+```jsx
+  render() {
+    return (
+      <input type='text'
+        value={this.state.value}
+        onChange={ e => this.setState({ value: e.target.value })}
+      />
+    )
+  }
+```
+
+This pattern moves the responsibility of managing the `value` from the input to its parent and mimics "two-way" databinding. Sometimes, however, there is no need for the parent to manage the input's state directly. In that case, all we want to do is set the initial `value` of the input and let the input manage it from then on. React deals with this through "uncontrolled" inputs, where if you don't indicate that you want to control the state of the input externally via a `value` prop it will just do the book-keeping for you.
+
+This is a great pattern which we can make use of in our own Components. It is often best to build each component to be as stateless as possible, assuming that the parent will want to control everything that makes sense. Take a simple Dropdown component as an example
+
+```js
+class SimpleDropdown extends React.Component {
+  static propTypes = {
+    value: React.PropTypes.string,
+    onChange: React.PropTypes.func,
+    open: React.PropTypes.bool,
+    onToggle: React.PropTypes.func,
+  }
+
+  render() {
+    return (
+      <div>
+        <input
+          value={this.props.value}
+          onChange={e => this.props.onChange(e.target.value)}
+        />
+        <button onClick={e => this.props.onToggle(!this.props.open)}>
+          open
+        </button>
+        {this.props.open && (
+          <ul className="open">
+            <li>option 1</li>
+            <li>option 2</li>
+          </ul>
+        )}
+      </div>
+    )
+  }
+}
+```
+
+Notice how we don't track any state in our simple dropdown? This is great because a consumer of our module will have the all the flexibility to decide what the behavior of the dropdown should be. Also notice our public API (propTypes), it consists of common pattern: a property we want set (`value`, `open`), and a set of handlers that indicate _when_ we want them set (`onChange`, `onToggle`). It is up to the parent component to change the `value` and `open` props in response to the handlers.
+
+While this pattern offers an excellent amount of flexibility to consumers, it also requires them to write a bunch of boilerplate code that probably won't change much from use to use. In all likelihood they will always want to set `open` in response to `onToggle`, and only in rare cases will want to override that behavior. This is where the controlled/uncontrolled pattern comes in.
+
+We want to just handle the open/onToggle case ourselves if the consumer doesn't provide a `open` prop (indicating that they want to control it). Rather than complicating our dropdown component with all that logic, obscuring the business logic of our dropdown, we can add it later, by taking our dropdown and wrapping it inside another component that handles that for us.
+
+`uncontrollable` allows you separate out the logic necessary to create controlled/uncontrolled inputs letting you focus on creating a completely controlled input and wrapping it later. This tends to be a lot simpler to reason about as well.
+
+```js
+  import { uncontrollable } from 'uncontrollable';
+
+  const UncontrollableDropdown = uncontrollable(SimpleDropdown, {
+    value: 'onChange',
+    open: 'onToggle'
+  })
+
+  <UncontrollableDropdown
+    value={this.state.val} // we can still control these props if we want
+    onChange={val => this.setState({ val })}
+    defaultOpen={true} /> // or just let the UncontrollableDropdown handle it
+                          // and we just set an initial value (or leave it out completely)!
+```
+
+Now we don't need to worry about the open onToggle! The returned component will track `open` for us by assuming that it should just set `open` to whatever `onToggle` returns. If we _do_ want to worry about it we can just provide `open` and `onToggle` props and the uncontrolled input will just pass them through.
+
+The above is a contrived example but it allows you to wrap even more complex Components, giving you a lot of flexibility in the API you can offer a consumer of your Component. For every pair of prop/handlers you also get a defaultProp of the form "default[PropName]" so `value` -> `defaultValue`, and `open` -> `defaultOpen`, etc. [React Widgets](https://github.com/jquense/react-widgets) makes heavy use of this strategy, you can see it in action here: https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521
diff --git a/node_modules/uncontrollable/lib/LICENSE b/node_modules/uncontrollable/lib/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..7805399acb78383e982b19164b4a95a1ff6b15ac
--- /dev/null
+++ b/node_modules/uncontrollable/lib/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Jason Quense
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/uncontrollable/lib/README.md b/node_modules/uncontrollable/lib/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3f3499972a9393a140ab32234ea1347125ee39f6
--- /dev/null
+++ b/node_modules/uncontrollable/lib/README.md
@@ -0,0 +1,146 @@
+# uncontrollable
+
+Wrap a controlled react component, to allow specific prop/handler pairs to be omitted by Component consumers. Uncontrollable allows you to write React components, with minimal state, and then wrap them in a component that will manage state for prop/handlers if they are excluded.
+
+## Install
+
+```sh
+npm i -S uncontrollable
+```
+
+### Usage
+
+If you are a bit unsure on the _why_ of this module read the next section first. If you just want to see some real-world examples, check out [React Widgets](https://github.com/jquense/react-widgets) which makes [heavy use of this strategy](https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521).
+
+```js
+import { uncontrollable } from 'uncontrollable'
+```
+
+### API
+
+#### `uncontrollable(Component, propHandlerHash, [methods])`
+
+- `Component`: is a valid react component, such as the result of `createClass`
+- `propHandlerHash`: define the pairs of prop/handlers you want to be uncontrollable, e.g. `{ value: 'onChange'}`
+- `methods`: since uncontrollable wraps your component in another component, methods are not immediately accessible. You can proxy them through by providing the names of the methods you want to continue to expose. **You don't need this if you are using React >= v16.3.0, the ref will automatically be forwarded to the uinderlying component**
+
+For every prop you indicate as uncontrollable, the returned component will also accept an initial, `default` value for that prop. For example, `open` can be left uncontrolled but the initial value can be set via `defaultOpen={true}` if we want it to start open.
+
+```js
+import { uncontrollable } from 'uncontrollable'
+
+const UncontrolledCombobox = uncontrollable(Combobox, {
+  value: 'onChange',
+  open: 'onToggle',
+  searchTerm: 'onSearch', //the current typed value (maybe it filters the dropdown list)
+})
+```
+
+Since uncontrollable creates a new component that wraps your existing one, methods on your underlying component
+won't be immediately accessible. In general this sort of access is not idiomatic React, but it does have its place.
+The third argument of `uncontrollable()` is an optional array of method names you want uncontrollable to "pass through"
+to the original component.
+
+```js
+let UncontrolledForm = uncontrollable(Form, { value: 'onChange' }, ['submit'])
+
+//when you use a ref this will work
+this.refs.myForm.submit()
+```
+
+#### `useUncontrolled(props, propsHandlerHash) => controlledProps`
+
+A React hook that can be used in place of the above Higher order Component. It
+returns a complete set of `props` which are safe to spread through to a child element.
+
+```js
+import { useUncontrolled } from 'uncontrollable'
+
+const UncontrolledCombobox = props => {
+  // filters out defaultValue, defaultOpen and returns controlled
+  // versions of onChange, and onToggle.
+  const controlledProps = useUncontrolled(props, {
+    value: 'onChange',
+    open: 'onToggle',
+  })
+
+  return <Checkbox {...controlledProps} />
+}
+```
+
+### Use Case
+
+One of the strengths of React is its extensibility model, enabled by a common practice of pushing component state as high up the tree as possible. While great for enabling extremely flexible and easy to reason about components, this can produce a lot of boilerplate to wire components up with every use. For simple components (like an input) this is usually a matter of tying the input `value` prop to a parent state property via its `onChange` handler. Here is an extremely common pattern:
+
+```jsx
+  render() {
+    return (
+      <input type='text'
+        value={this.state.value}
+        onChange={ e => this.setState({ value: e.target.value })}
+      />
+    )
+  }
+```
+
+This pattern moves the responsibility of managing the `value` from the input to its parent and mimics "two-way" databinding. Sometimes, however, there is no need for the parent to manage the input's state directly. In that case, all we want to do is set the initial `value` of the input and let the input manage it from then on. React deals with this through "uncontrolled" inputs, where if you don't indicate that you want to control the state of the input externally via a `value` prop it will just do the book-keeping for you.
+
+This is a great pattern which we can make use of in our own Components. It is often best to build each component to be as stateless as possible, assuming that the parent will want to control everything that makes sense. Take a simple Dropdown component as an example
+
+```js
+class SimpleDropdown extends React.Component {
+  static propTypes = {
+    value: React.PropTypes.string,
+    onChange: React.PropTypes.func,
+    open: React.PropTypes.bool,
+    onToggle: React.PropTypes.func,
+  }
+
+  render() {
+    return (
+      <div>
+        <input
+          value={this.props.value}
+          onChange={e => this.props.onChange(e.target.value)}
+        />
+        <button onClick={e => this.props.onToggle(!this.props.open)}>
+          open
+        </button>
+        {this.props.open && (
+          <ul className="open">
+            <li>option 1</li>
+            <li>option 2</li>
+          </ul>
+        )}
+      </div>
+    )
+  }
+}
+```
+
+Notice how we don't track any state in our simple dropdown? This is great because a consumer of our module will have the all the flexibility to decide what the behavior of the dropdown should be. Also notice our public API (propTypes), it consists of common pattern: a property we want set (`value`, `open`), and a set of handlers that indicate _when_ we want them set (`onChange`, `onToggle`). It is up to the parent component to change the `value` and `open` props in response to the handlers.
+
+While this pattern offers an excellent amount of flexibility to consumers, it also requires them to write a bunch of boilerplate code that probably won't change much from use to use. In all likelihood they will always want to set `open` in response to `onToggle`, and only in rare cases will want to override that behavior. This is where the controlled/uncontrolled pattern comes in.
+
+We want to just handle the open/onToggle case ourselves if the consumer doesn't provide a `open` prop (indicating that they want to control it). Rather than complicating our dropdown component with all that logic, obscuring the business logic of our dropdown, we can add it later, by taking our dropdown and wrapping it inside another component that handles that for us.
+
+`uncontrollable` allows you separate out the logic necessary to create controlled/uncontrolled inputs letting you focus on creating a completely controlled input and wrapping it later. This tends to be a lot simpler to reason about as well.
+
+```js
+  import { uncontrollable } from 'uncontrollable';
+
+  const UncontrollableDropdown = uncontrollable(SimpleDropdown, {
+    value: 'onChange',
+    open: 'onToggle'
+  })
+
+  <UncontrollableDropdown
+    value={this.state.val} // we can still control these props if we want
+    onChange={val => this.setState({ val })}
+    defaultOpen={true} /> // or just let the UncontrollableDropdown handle it
+                          // and we just set an initial value (or leave it out completely)!
+```
+
+Now we don't need to worry about the open onToggle! The returned component will track `open` for us by assuming that it should just set `open` to whatever `onToggle` returns. If we _do_ want to worry about it we can just provide `open` and `onToggle` props and the uncontrolled input will just pass them through.
+
+The above is a contrived example but it allows you to wrap even more complex Components, giving you a lot of flexibility in the API you can offer a consumer of your Component. For every pair of prop/handlers you also get a defaultProp of the form "default[PropName]" so `value` -> `defaultValue`, and `open` -> `defaultOpen`, etc. [React Widgets](https://github.com/jquense/react-widgets) makes heavy use of this strategy, you can see it in action here: https://github.com/jquense/react-widgets/blob/5d1b530cb094cdc72f577fe01abe4a02dd265400/src/Multiselect.jsx#L521
diff --git a/node_modules/uncontrollable/lib/cjs/hook.d.ts b/node_modules/uncontrollable/lib/cjs/hook.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ecde68a8a32abcbbd80e1867b208b9bf3ef99caf
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/hook.d.ts
@@ -0,0 +1,12 @@
+export declare type Handler = (...args: any[]) => any;
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [TProp | undefined, THandler];
+export { useUncontrolledProp };
+declare type FilterFlags<Base, Condition> = {
+    [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
+};
+declare type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
+declare type ConfigMap<TProps extends object> = {
+    [p in keyof TProps]?: AllowedNames<TProps, Function>;
+};
+export default function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;
diff --git a/node_modules/uncontrollable/lib/cjs/hook.js b/node_modules/uncontrollable/lib/cjs/hook.js
new file mode 100644
index 0000000000000000000000000000000000000000..d68724fd27d3161e71b49f9aad4b869ccfaf8f36
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/hook.js
@@ -0,0 +1,69 @@
+"use strict";
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.useUncontrolledProp = useUncontrolledProp;
+exports.default = useUncontrolled;
+
+var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
+
+var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
+
+var _react = require("react");
+
+var Utils = _interopRequireWildcard(require("./utils"));
+
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+
+function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+
+function useUncontrolledProp(propValue, defaultValue, handler) {
+  var wasPropRef = (0, _react.useRef)(propValue !== undefined);
+
+  var _useState = (0, _react.useState)(defaultValue),
+      stateValue = _useState[0],
+      setState = _useState[1];
+
+  var isProp = propValue !== undefined;
+  var wasProp = wasPropRef.current;
+  wasPropRef.current = isProp;
+  /**
+   * If a prop switches from controlled to Uncontrolled
+   * reset its value to the defaultValue
+   */
+
+  if (!isProp && wasProp && stateValue !== defaultValue) {
+    setState(defaultValue);
+  }
+
+  return [isProp ? propValue : stateValue, (0, _react.useCallback)(function (value) {
+    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    if (handler) handler.apply(void 0, [value].concat(args));
+    setState(value);
+  }, [handler])];
+}
+
+function useUncontrolled(props, config) {
+  return Object.keys(config).reduce(function (result, fieldName) {
+    var _extends2;
+
+    var _ref = result,
+        defaultValue = _ref[Utils.defaultKey(fieldName)],
+        propsValue = _ref[fieldName],
+        rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, [Utils.defaultKey(fieldName), fieldName].map(_toPropertyKey));
+
+    var handlerName = config[fieldName];
+
+    var _useUncontrolledProp = useUncontrolledProp(propsValue, defaultValue, props[handlerName]),
+        value = _useUncontrolledProp[0],
+        handler = _useUncontrolledProp[1];
+
+    return (0, _extends3.default)({}, rest, (_extends2 = {}, _extends2[fieldName] = value, _extends2[handlerName] = handler, _extends2));
+  }, props);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/cjs/index.d.ts b/node_modules/uncontrollable/lib/cjs/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9c3845c2386b41bd47e755c6e9afc4326c2d3370
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/index.d.ts
@@ -0,0 +1,2 @@
+export { default as useUncontrolled, useUncontrolledProp } from './hook';
+export { default as uncontrollable } from './uncontrollable';
diff --git a/node_modules/uncontrollable/lib/cjs/index.js b/node_modules/uncontrollable/lib/cjs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..adcc74073c5a7e7df6f99f36ee45281bef785f22
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/index.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+exports.__esModule = true;
+exports.useUncontrolledProp = exports.uncontrollable = exports.useUncontrolled = void 0;
+
+var _hook = _interopRequireWildcard(require("./hook"));
+
+exports.useUncontrolled = _hook.default;
+exports.useUncontrolledProp = _hook.useUncontrolledProp;
+
+var _uncontrollable = _interopRequireDefault(require("./uncontrollable"));
+
+exports.uncontrollable = _uncontrollable.default;
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/cjs/uncontrollable.js b/node_modules/uncontrollable/lib/cjs/uncontrollable.js
new file mode 100644
index 0000000000000000000000000000000000000000..2346bc5f6ccfe7d161fe8c6ff65da1e22394ec3d
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/uncontrollable.js
@@ -0,0 +1,194 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+exports.__esModule = true;
+exports.default = uncontrollable;
+
+var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
+
+var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
+
+var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
+
+var _react = _interopRequireDefault(require("react"));
+
+var _reactLifecyclesCompat = require("react-lifecycles-compat");
+
+var _invariant = _interopRequireDefault(require("invariant"));
+
+var Utils = _interopRequireWildcard(require("./utils"));
+
+var _jsxFileName = "/Users/jquense/src/uncontrollable/src/uncontrollable.js";
+
+function uncontrollable(Component, controlledValues, methods) {
+  if (methods === void 0) {
+    methods = [];
+  }
+
+  var displayName = Component.displayName || Component.name || 'Component';
+  var canAcceptRef = Utils.canAcceptRef(Component);
+  var controlledProps = Object.keys(controlledValues);
+  var PROPS_TO_OMIT = controlledProps.map(Utils.defaultKey);
+  !(canAcceptRef || !methods.length) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, '[uncontrollable] stateless function components cannot pass through methods ' + 'because they have no associated instances. Check component: ' + displayName + ', ' + 'attempting to pass through methods: ' + methods.join(', ')) : invariant(false) : void 0;
+
+  var UncontrolledComponent =
+  /*#__PURE__*/
+  function (_React$Component) {
+    (0, _inheritsLoose2.default)(UncontrolledComponent, _React$Component);
+
+    function UncontrolledComponent() {
+      var _this;
+
+      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+        args[_key] = arguments[_key];
+      }
+
+      _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+      _this.handlers = Object.create(null);
+      controlledProps.forEach(function (propName) {
+        var handlerName = controlledValues[propName];
+
+        var handleChange = function handleChange(value) {
+          if (_this.props[handlerName]) {
+            var _this$props;
+
+            _this._notifying = true;
+
+            for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+              args[_key2 - 1] = arguments[_key2];
+            }
+
+            (_this$props = _this.props)[handlerName].apply(_this$props, [value].concat(args));
+
+            _this._notifying = false;
+          }
+
+          if (!_this.unmounted) _this.setState(function (_ref) {
+            var _extends2;
+
+            var values = _ref.values;
+            return {
+              values: (0, _extends3.default)(Object.create(null), values, (_extends2 = {}, _extends2[propName] = value, _extends2))
+            };
+          });
+        };
+
+        _this.handlers[handlerName] = handleChange;
+      });
+      if (methods.length) _this.attachRef = function (ref) {
+        _this.inner = ref;
+      };
+      var values = Object.create(null);
+      controlledProps.forEach(function (key) {
+        values[key] = _this.props[Utils.defaultKey(key)];
+      });
+      _this.state = {
+        values: values,
+        prevProps: {}
+      };
+      return _this;
+    }
+
+    var _proto = UncontrolledComponent.prototype;
+
+    _proto.shouldComponentUpdate = function shouldComponentUpdate() {
+      //let setState trigger the update
+      return !this._notifying;
+    };
+
+    UncontrolledComponent.getDerivedStateFromProps = function getDerivedStateFromProps(props, _ref2) {
+      var values = _ref2.values,
+          prevProps = _ref2.prevProps;
+      var nextState = {
+        values: (0, _extends3.default)(Object.create(null), values),
+        prevProps: {}
+      };
+      controlledProps.forEach(function (key) {
+        /**
+         * If a prop switches from controlled to Uncontrolled
+         * reset its value to the defaultValue
+         */
+        nextState.prevProps[key] = props[key];
+
+        if (!Utils.isProp(props, key) && Utils.isProp(prevProps, key)) {
+          nextState.values[key] = props[Utils.defaultKey(key)];
+        }
+      });
+      return nextState;
+    };
+
+    _proto.componentWillUnmount = function componentWillUnmount() {
+      this.unmounted = true;
+    };
+
+    _proto.render = function render() {
+      var _this2 = this;
+
+      var _this$props2 = this.props,
+          innerRef = _this$props2.innerRef,
+          props = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["innerRef"]);
+      PROPS_TO_OMIT.forEach(function (prop) {
+        delete props[prop];
+      });
+      var newProps = {};
+      controlledProps.forEach(function (propName) {
+        var propValue = _this2.props[propName];
+        newProps[propName] = propValue !== undefined ? propValue : _this2.state.values[propName];
+      });
+      return _react.default.createElement(Component, (0, _extends3.default)({}, props, newProps, this.handlers, {
+        ref: innerRef || this.attachRef
+      }));
+    };
+
+    return UncontrolledComponent;
+  }(_react.default.Component);
+
+  (0, _reactLifecyclesCompat.polyfill)(UncontrolledComponent);
+  UncontrolledComponent.displayName = "Uncontrolled(" + displayName + ")";
+  UncontrolledComponent.propTypes = (0, _extends3.default)({
+    innerRef: function innerRef() {}
+  }, Utils.uncontrolledPropTypes(controlledValues, displayName));
+  methods.forEach(function (method) {
+    UncontrolledComponent.prototype[method] = function $proxiedMethod() {
+      var _this$inner;
+
+      return (_this$inner = this.inner)[method].apply(_this$inner, arguments);
+    };
+  });
+  var WrappedComponent = UncontrolledComponent;
+
+  if (_react.default.forwardRef) {
+    WrappedComponent = _react.default.forwardRef(function (props, ref) {
+      return _react.default.createElement(UncontrolledComponent, (0, _extends3.default)({}, props, {
+        innerRef: ref,
+        __source: {
+          fileName: _jsxFileName,
+          lineNumber: 128
+        },
+        __self: this
+      }));
+    });
+    WrappedComponent.propTypes = UncontrolledComponent.propTypes;
+  }
+
+  WrappedComponent.ControlledComponent = Component;
+  /**
+   * useful when wrapping a Component and you want to control
+   * everything
+   */
+
+  WrappedComponent.deferControlTo = function (newComponent, additions, nextMethods) {
+    if (additions === void 0) {
+      additions = {};
+    }
+
+    return uncontrollable(newComponent, (0, _extends3.default)({}, controlledValues, additions), nextMethods);
+  };
+
+  return WrappedComponent;
+}
+
+module.exports = exports["default"];
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/cjs/utils.d.ts b/node_modules/uncontrollable/lib/cjs/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4575a4f86884a7a81b7e8b9a3810c8bce1140bb2
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/utils.d.ts
@@ -0,0 +1,12 @@
+export declare function uncontrolledPropTypes(controlledValues: any, displayName: string): {};
+export declare function isProp<P>(props: P, prop: keyof P): boolean;
+export declare function defaultKey(key: string): string;
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+export declare function canAcceptRef(component: any): any;
diff --git a/node_modules/uncontrollable/lib/cjs/utils.js b/node_modules/uncontrollable/lib/cjs/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9ac77b5dc0cbc2f5a9dcfe5a3368620e757aeee
--- /dev/null
+++ b/node_modules/uncontrollable/lib/cjs/utils.js
@@ -0,0 +1,59 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.uncontrolledPropTypes = uncontrolledPropTypes;
+exports.isProp = isProp;
+exports.defaultKey = defaultKey;
+exports.canAcceptRef = canAcceptRef;
+
+var _invariant = _interopRequireDefault(require("invariant"));
+
+var noop = function noop() {};
+
+function readOnlyPropType(handler, name) {
+  return function (props, propName) {
+    if (props[propName] !== undefined) {
+      if (!props[handler]) {
+        return new Error("You have provided a `" + propName + "` prop to `" + name + "` " + ("without an `" + handler + "` handler prop. This will render a read-only field. ") + ("If the field should be mutable use `" + defaultKey(propName) + "`. ") + ("Otherwise, set `" + handler + "`."));
+      }
+    }
+  };
+}
+
+function uncontrolledPropTypes(controlledValues, displayName) {
+  var propTypes = {};
+  Object.keys(controlledValues).forEach(function (prop) {
+    // add default propTypes for folks that use runtime checks
+    propTypes[defaultKey(prop)] = noop;
+
+    if (process.env.NODE_ENV !== 'production') {
+      var handler = controlledValues[prop];
+      !(typeof handler === 'string' && handler.trim().length) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop) : invariant(false) : void 0;
+      propTypes[prop] = readOnlyPropType(handler, displayName);
+    }
+  });
+  return propTypes;
+}
+
+function isProp(props, prop) {
+  return props[prop] !== undefined;
+}
+
+function defaultKey(key) {
+  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+}
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+
+function canAcceptRef(component) {
+  return !!component && (typeof component !== 'function' || component.prototype && component.prototype.isReactComponent);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/esm/hook.d.ts b/node_modules/uncontrollable/lib/esm/hook.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ecde68a8a32abcbbd80e1867b208b9bf3ef99caf
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/hook.d.ts
@@ -0,0 +1,12 @@
+export declare type Handler = (...args: any[]) => any;
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
+declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [TProp | undefined, THandler];
+export { useUncontrolledProp };
+declare type FilterFlags<Base, Condition> = {
+    [Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
+};
+declare type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
+declare type ConfigMap<TProps extends object> = {
+    [p in keyof TProps]?: AllowedNames<TProps, Function>;
+};
+export default function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;
diff --git a/node_modules/uncontrollable/lib/esm/hook.js b/node_modules/uncontrollable/lib/esm/hook.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6b93f086ff84d774eb71ca8250aafa08405d2e5
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/hook.js
@@ -0,0 +1,58 @@
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+
+function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+
+import { useCallback, useRef, useState } from 'react';
+import * as Utils from './utils';
+
+function useUncontrolledProp(propValue, defaultValue, handler) {
+  var wasPropRef = useRef(propValue !== undefined);
+
+  var _useState = useState(defaultValue),
+      stateValue = _useState[0],
+      setState = _useState[1];
+
+  var isProp = propValue !== undefined;
+  var wasProp = wasPropRef.current;
+  wasPropRef.current = isProp;
+  /**
+   * If a prop switches from controlled to Uncontrolled
+   * reset its value to the defaultValue
+   */
+
+  if (!isProp && wasProp && stateValue !== defaultValue) {
+    setState(defaultValue);
+  }
+
+  return [isProp ? propValue : stateValue, useCallback(function (value) {
+    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    if (handler) handler.apply(void 0, [value].concat(args));
+    setState(value);
+  }, [handler])];
+}
+
+export { useUncontrolledProp };
+export default function useUncontrolled(props, config) {
+  return Object.keys(config).reduce(function (result, fieldName) {
+    var _extends2;
+
+    var _ref = result,
+        defaultValue = _ref[Utils.defaultKey(fieldName)],
+        propsValue = _ref[fieldName],
+        rest = _objectWithoutPropertiesLoose(_ref, [Utils.defaultKey(fieldName), fieldName].map(_toPropertyKey));
+
+    var handlerName = config[fieldName];
+
+    var _useUncontrolledProp = useUncontrolledProp(propsValue, defaultValue, props[handlerName]),
+        value = _useUncontrolledProp[0],
+        handler = _useUncontrolledProp[1];
+
+    return _extends({}, rest, (_extends2 = {}, _extends2[fieldName] = value, _extends2[handlerName] = handler, _extends2));
+  }, props);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/esm/index.d.ts b/node_modules/uncontrollable/lib/esm/index.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9c3845c2386b41bd47e755c6e9afc4326c2d3370
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/index.d.ts
@@ -0,0 +1,2 @@
+export { default as useUncontrolled, useUncontrolledProp } from './hook';
+export { default as uncontrollable } from './uncontrollable';
diff --git a/node_modules/uncontrollable/lib/esm/index.js b/node_modules/uncontrollable/lib/esm/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b6feb6a81ade07925f7d54531e4bdf1b893074d
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/index.js
@@ -0,0 +1,2 @@
+export { default as useUncontrolled, useUncontrolledProp } from './hook';
+export { default as uncontrollable } from './uncontrollable';
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/esm/uncontrollable.js b/node_modules/uncontrollable/lib/esm/uncontrollable.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5f01cea22e36071fcaa2c398bc3904504f79609
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/uncontrollable.js
@@ -0,0 +1,176 @@
+import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
+import _extends from "@babel/runtime/helpers/esm/extends";
+import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
+var _jsxFileName = "/Users/jquense/src/uncontrollable/src/uncontrollable.js";
+import React from 'react';
+import { polyfill } from 'react-lifecycles-compat';
+import invariant from 'invariant';
+import * as Utils from './utils';
+export default function uncontrollable(Component, controlledValues, methods) {
+  if (methods === void 0) {
+    methods = [];
+  }
+
+  var displayName = Component.displayName || Component.name || 'Component';
+  var canAcceptRef = Utils.canAcceptRef(Component);
+  var controlledProps = Object.keys(controlledValues);
+  var PROPS_TO_OMIT = controlledProps.map(Utils.defaultKey);
+  !(canAcceptRef || !methods.length) ? process.env.NODE_ENV !== "production" ? invariant(false, '[uncontrollable] stateless function components cannot pass through methods ' + 'because they have no associated instances. Check component: ' + displayName + ', ' + 'attempting to pass through methods: ' + methods.join(', ')) : invariant(false) : void 0;
+
+  var UncontrolledComponent =
+  /*#__PURE__*/
+  function (_React$Component) {
+    _inheritsLoose(UncontrolledComponent, _React$Component);
+
+    function UncontrolledComponent() {
+      var _this;
+
+      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+        args[_key] = arguments[_key];
+      }
+
+      _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
+      _this.handlers = Object.create(null);
+      controlledProps.forEach(function (propName) {
+        var handlerName = controlledValues[propName];
+
+        var handleChange = function handleChange(value) {
+          if (_this.props[handlerName]) {
+            var _this$props;
+
+            _this._notifying = true;
+
+            for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+              args[_key2 - 1] = arguments[_key2];
+            }
+
+            (_this$props = _this.props)[handlerName].apply(_this$props, [value].concat(args));
+
+            _this._notifying = false;
+          }
+
+          if (!_this.unmounted) _this.setState(function (_ref) {
+            var _extends2;
+
+            var values = _ref.values;
+            return {
+              values: _extends(Object.create(null), values, (_extends2 = {}, _extends2[propName] = value, _extends2))
+            };
+          });
+        };
+
+        _this.handlers[handlerName] = handleChange;
+      });
+      if (methods.length) _this.attachRef = function (ref) {
+        _this.inner = ref;
+      };
+      var values = Object.create(null);
+      controlledProps.forEach(function (key) {
+        values[key] = _this.props[Utils.defaultKey(key)];
+      });
+      _this.state = {
+        values: values,
+        prevProps: {}
+      };
+      return _this;
+    }
+
+    var _proto = UncontrolledComponent.prototype;
+
+    _proto.shouldComponentUpdate = function shouldComponentUpdate() {
+      //let setState trigger the update
+      return !this._notifying;
+    };
+
+    UncontrolledComponent.getDerivedStateFromProps = function getDerivedStateFromProps(props, _ref2) {
+      var values = _ref2.values,
+          prevProps = _ref2.prevProps;
+      var nextState = {
+        values: _extends(Object.create(null), values),
+        prevProps: {}
+      };
+      controlledProps.forEach(function (key) {
+        /**
+         * If a prop switches from controlled to Uncontrolled
+         * reset its value to the defaultValue
+         */
+        nextState.prevProps[key] = props[key];
+
+        if (!Utils.isProp(props, key) && Utils.isProp(prevProps, key)) {
+          nextState.values[key] = props[Utils.defaultKey(key)];
+        }
+      });
+      return nextState;
+    };
+
+    _proto.componentWillUnmount = function componentWillUnmount() {
+      this.unmounted = true;
+    };
+
+    _proto.render = function render() {
+      var _this2 = this;
+
+      var _this$props2 = this.props,
+          innerRef = _this$props2.innerRef,
+          props = _objectWithoutPropertiesLoose(_this$props2, ["innerRef"]);
+
+      PROPS_TO_OMIT.forEach(function (prop) {
+        delete props[prop];
+      });
+      var newProps = {};
+      controlledProps.forEach(function (propName) {
+        var propValue = _this2.props[propName];
+        newProps[propName] = propValue !== undefined ? propValue : _this2.state.values[propName];
+      });
+      return React.createElement(Component, _extends({}, props, newProps, this.handlers, {
+        ref: innerRef || this.attachRef
+      }));
+    };
+
+    return UncontrolledComponent;
+  }(React.Component);
+
+  polyfill(UncontrolledComponent);
+  UncontrolledComponent.displayName = "Uncontrolled(" + displayName + ")";
+  UncontrolledComponent.propTypes = _extends({
+    innerRef: function innerRef() {}
+  }, Utils.uncontrolledPropTypes(controlledValues, displayName));
+  methods.forEach(function (method) {
+    UncontrolledComponent.prototype[method] = function $proxiedMethod() {
+      var _this$inner;
+
+      return (_this$inner = this.inner)[method].apply(_this$inner, arguments);
+    };
+  });
+  var WrappedComponent = UncontrolledComponent;
+
+  if (React.forwardRef) {
+    WrappedComponent = React.forwardRef(function (props, ref) {
+      return React.createElement(UncontrolledComponent, _extends({}, props, {
+        innerRef: ref,
+        __source: {
+          fileName: _jsxFileName,
+          lineNumber: 128
+        },
+        __self: this
+      }));
+    });
+    WrappedComponent.propTypes = UncontrolledComponent.propTypes;
+  }
+
+  WrappedComponent.ControlledComponent = Component;
+  /**
+   * useful when wrapping a Component and you want to control
+   * everything
+   */
+
+  WrappedComponent.deferControlTo = function (newComponent, additions, nextMethods) {
+    if (additions === void 0) {
+      additions = {};
+    }
+
+    return uncontrollable(newComponent, _extends({}, controlledValues, additions), nextMethods);
+  };
+
+  return WrappedComponent;
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/esm/utils.d.ts b/node_modules/uncontrollable/lib/esm/utils.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4575a4f86884a7a81b7e8b9a3810c8bce1140bb2
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/utils.d.ts
@@ -0,0 +1,12 @@
+export declare function uncontrolledPropTypes(controlledValues: any, displayName: string): {};
+export declare function isProp<P>(props: P, prop: keyof P): boolean;
+export declare function defaultKey(key: string): string;
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+export declare function canAcceptRef(component: any): any;
diff --git a/node_modules/uncontrollable/lib/esm/utils.js b/node_modules/uncontrollable/lib/esm/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1677fb4a383885eb7935b3b37ccc5f26e00392a
--- /dev/null
+++ b/node_modules/uncontrollable/lib/esm/utils.js
@@ -0,0 +1,46 @@
+import invariant from 'invariant';
+
+var noop = function noop() {};
+
+function readOnlyPropType(handler, name) {
+  return function (props, propName) {
+    if (props[propName] !== undefined) {
+      if (!props[handler]) {
+        return new Error("You have provided a `" + propName + "` prop to `" + name + "` " + ("without an `" + handler + "` handler prop. This will render a read-only field. ") + ("If the field should be mutable use `" + defaultKey(propName) + "`. ") + ("Otherwise, set `" + handler + "`."));
+      }
+    }
+  };
+}
+
+export function uncontrolledPropTypes(controlledValues, displayName) {
+  var propTypes = {};
+  Object.keys(controlledValues).forEach(function (prop) {
+    // add default propTypes for folks that use runtime checks
+    propTypes[defaultKey(prop)] = noop;
+
+    if (process.env.NODE_ENV !== 'production') {
+      var handler = controlledValues[prop];
+      !(typeof handler === 'string' && handler.trim().length) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop) : invariant(false) : void 0;
+      propTypes[prop] = readOnlyPropType(handler, displayName);
+    }
+  });
+  return propTypes;
+}
+export function isProp(props, prop) {
+  return props[prop] !== undefined;
+}
+export function defaultKey(key) {
+  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+}
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+export function canAcceptRef(component) {
+  return !!component && (typeof component !== 'function' || component.prototype && component.prototype.isReactComponent);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/hook.js b/node_modules/uncontrollable/lib/hook.js
new file mode 100644
index 0000000000000000000000000000000000000000..d68724fd27d3161e71b49f9aad4b869ccfaf8f36
--- /dev/null
+++ b/node_modules/uncontrollable/lib/hook.js
@@ -0,0 +1,69 @@
+"use strict";
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.useUncontrolledProp = useUncontrolledProp;
+exports.default = useUncontrolled;
+
+var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
+
+var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
+
+var _react = require("react");
+
+var Utils = _interopRequireWildcard(require("./utils"));
+
+function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
+
+function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
+
+function useUncontrolledProp(propValue, defaultValue, handler) {
+  var wasPropRef = (0, _react.useRef)(propValue !== undefined);
+
+  var _useState = (0, _react.useState)(defaultValue),
+      stateValue = _useState[0],
+      setState = _useState[1];
+
+  var isProp = propValue !== undefined;
+  var wasProp = wasPropRef.current;
+  wasPropRef.current = isProp;
+  /**
+   * If a prop switches from controlled to Uncontrolled
+   * reset its value to the defaultValue
+   */
+
+  if (!isProp && wasProp && stateValue !== defaultValue) {
+    setState(defaultValue);
+  }
+
+  return [isProp ? propValue : stateValue, (0, _react.useCallback)(function (value) {
+    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+      args[_key - 1] = arguments[_key];
+    }
+
+    if (handler) handler.apply(void 0, [value].concat(args));
+    setState(value);
+  }, [handler])];
+}
+
+function useUncontrolled(props, config) {
+  return Object.keys(config).reduce(function (result, fieldName) {
+    var _extends2;
+
+    var _ref = result,
+        defaultValue = _ref[Utils.defaultKey(fieldName)],
+        propsValue = _ref[fieldName],
+        rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, [Utils.defaultKey(fieldName), fieldName].map(_toPropertyKey));
+
+    var handlerName = config[fieldName];
+
+    var _useUncontrolledProp = useUncontrolledProp(propsValue, defaultValue, props[handlerName]),
+        value = _useUncontrolledProp[0],
+        handler = _useUncontrolledProp[1];
+
+    return (0, _extends3.default)({}, rest, (_extends2 = {}, _extends2[fieldName] = value, _extends2[handlerName] = handler, _extends2));
+  }, props);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/index.js b/node_modules/uncontrollable/lib/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..adcc74073c5a7e7df6f99f36ee45281bef785f22
--- /dev/null
+++ b/node_modules/uncontrollable/lib/index.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
+
+exports.__esModule = true;
+exports.useUncontrolledProp = exports.uncontrollable = exports.useUncontrolled = void 0;
+
+var _hook = _interopRequireWildcard(require("./hook"));
+
+exports.useUncontrolled = _hook.default;
+exports.useUncontrolledProp = _hook.useUncontrolledProp;
+
+var _uncontrollable = _interopRequireDefault(require("./uncontrollable"));
+
+exports.uncontrollable = _uncontrollable.default;
\ No newline at end of file
diff --git a/node_modules/uncontrollable/lib/package.json b/node_modules/uncontrollable/lib/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9441730351c83791fb75513e54f6c26a6dd4dc12
--- /dev/null
+++ b/node_modules/uncontrollable/lib/package.json
@@ -0,0 +1,45 @@
+{
+  "name": "uncontrollable",
+  "version": "7.2.0",
+  "description": "Wrap a controlled react component, to allow specific prop/handler pairs to be uncontrolled",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jquense/uncontrollable.git"
+  },
+  "license": "MIT",
+  "main": "cjs/index.js",
+  "module": "esm/index.js",
+  "keywords": [
+    "uncontrolled-component",
+    "react-component",
+    "input",
+    "controlled",
+    "uncontrolled",
+    "form"
+  ],
+  "publishConfig": {
+    "directory": "lib"
+  },
+  "peerDependencies": {
+    "react": ">=15.0.0"
+  },
+  "jest": {
+    "rootDir": "./test"
+  },
+  "dependencies": {
+    "@babel/runtime": "^7.6.3",
+    "@types/react": ">=16.9.11",
+    "invariant": "^2.2.4",
+    "react-lifecycles-compat": "^3.0.4"
+  },
+  "bugs": {
+    "url": "https://github.com/jquense/uncontrollable/issues"
+  },
+  "readme": "ERROR: No README data found!",
+  "homepage": "https://github.com/jquense/uncontrollable#readme",
+  "_id": "uncontrollable@7.1.0"
+}
diff --git a/node_modules/uncontrollable/lib/utils.js b/node_modules/uncontrollable/lib/utils.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9ac77b5dc0cbc2f5a9dcfe5a3368620e757aeee
--- /dev/null
+++ b/node_modules/uncontrollable/lib/utils.js
@@ -0,0 +1,59 @@
+"use strict";
+
+var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
+
+exports.__esModule = true;
+exports.uncontrolledPropTypes = uncontrolledPropTypes;
+exports.isProp = isProp;
+exports.defaultKey = defaultKey;
+exports.canAcceptRef = canAcceptRef;
+
+var _invariant = _interopRequireDefault(require("invariant"));
+
+var noop = function noop() {};
+
+function readOnlyPropType(handler, name) {
+  return function (props, propName) {
+    if (props[propName] !== undefined) {
+      if (!props[handler]) {
+        return new Error("You have provided a `" + propName + "` prop to `" + name + "` " + ("without an `" + handler + "` handler prop. This will render a read-only field. ") + ("If the field should be mutable use `" + defaultKey(propName) + "`. ") + ("Otherwise, set `" + handler + "`."));
+      }
+    }
+  };
+}
+
+function uncontrolledPropTypes(controlledValues, displayName) {
+  var propTypes = {};
+  Object.keys(controlledValues).forEach(function (prop) {
+    // add default propTypes for folks that use runtime checks
+    propTypes[defaultKey(prop)] = noop;
+
+    if (process.env.NODE_ENV !== 'production') {
+      var handler = controlledValues[prop];
+      !(typeof handler === 'string' && handler.trim().length) ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, 'Uncontrollable - [%s]: the prop `%s` needs a valid handler key name in order to make it uncontrollable', displayName, prop) : invariant(false) : void 0;
+      propTypes[prop] = readOnlyPropType(handler, displayName);
+    }
+  });
+  return propTypes;
+}
+
+function isProp(props, prop) {
+  return props[prop] !== undefined;
+}
+
+function defaultKey(key) {
+  return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
+}
+/**
+ * Copyright (c) 2013-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+
+function canAcceptRef(component) {
+  return !!component && (typeof component !== 'function' || component.prototype && component.prototype.isReactComponent);
+}
\ No newline at end of file
diff --git a/node_modules/uncontrollable/manual-releases.md b/node_modules/uncontrollable/manual-releases.md
new file mode 100644
index 0000000000000000000000000000000000000000..edf9f25843e7b67f12c02b489749e2ceff5f8740
--- /dev/null
+++ b/node_modules/uncontrollable/manual-releases.md
@@ -0,0 +1 @@
+times manually bumped: 1
diff --git a/node_modules/uncontrollable/package.json b/node_modules/uncontrollable/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d3ebcf19d1c1aa6e35adf840ee7895666e546457
--- /dev/null
+++ b/node_modules/uncontrollable/package.json
@@ -0,0 +1,104 @@
+{
+  "_from": "uncontrollable@^7.2.1",
+  "_id": "uncontrollable@7.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==",
+  "_location": "/uncontrollable",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "uncontrollable@^7.2.1",
+    "name": "uncontrollable",
+    "escapedName": "uncontrollable",
+    "rawSpec": "^7.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^7.2.1"
+  },
+  "_requiredBy": [
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz",
+  "_shasum": "1fa70ba0c57a14d5f78905d533cf63916dc75738",
+  "_spec": "uncontrollable@^7.2.1",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Jason Quense",
+    "email": "monastic.panic@gmail.com"
+  },
+  "bugs": {
+    "url": "https://github.com/jquense/uncontrollable/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "@babel/runtime": "^7.6.3",
+    "@types/react": ">=16.9.11",
+    "invariant": "^2.2.4",
+    "react-lifecycles-compat": "^3.0.4"
+  },
+  "deprecated": false,
+  "description": "Wrap a controlled react component, to allow specific prop/handler pairs to be uncontrolled",
+  "devDependencies": {
+    "@4c/build": "^2.0.1",
+    "@4c/semantic-release-config": "^2.0.3",
+    "@4c/tsconfig": "^0.3.0",
+    "@babel/cli": "^7.6.4",
+    "@babel/core": "^7.6.4",
+    "@babel/preset-typescript": "^7.6.0",
+    "@typescript-eslint/eslint-plugin": "^2.5.0",
+    "@typescript-eslint/parser": "^2.5.0",
+    "babel-core": "^7.0.0-0",
+    "babel-jest": "^24.9.0",
+    "babel-preset-jason": "^6.0.1",
+    "cpy": "^7.3.0",
+    "enzyme": "^3.10.0",
+    "enzyme-adapter-react-16": "^1.15.1",
+    "eslint": "^6.6.0",
+    "eslint-config-4catalyzer-typescript": "^1.1.0",
+    "eslint-config-jason": "^6.1.0",
+    "eslint-config-prettier": "^6.5.0",
+    "eslint-plugin-import": "^2.18.2",
+    "eslint-plugin-react": "^7.16.0",
+    "jest": "^24.9.0",
+    "prop-types": "^15.7.2",
+    "react": "^16.11.0",
+    "react-dom": "^16.11.0",
+    "release-script": "^1.0.2",
+    "rimraf": "^3.0.0",
+    "typescript": "^3.6.4"
+  },
+  "homepage": "https://github.com/jquense/uncontrollable#readme",
+  "jest": {
+    "rootDir": "./test"
+  },
+  "keywords": [
+    "uncontrolled-component",
+    "react-component",
+    "input",
+    "controlled",
+    "uncontrolled",
+    "form"
+  ],
+  "license": "MIT",
+  "main": "lib/cjs/index.js",
+  "module": "lib/esm/index.js",
+  "name": "uncontrollable",
+  "peerDependencies": {
+    "react": ">=15.0.0"
+  },
+  "publishConfig": {
+    "directory": "lib"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jquense/uncontrollable.git"
+  },
+  "scripts": {
+    "build": "build src",
+    "lint": "eslint src test",
+    "prepublishOnly": "npm run build",
+    "tdd": "jest --watch",
+    "test": "jest"
+  },
+  "version": "7.2.1"
+}
diff --git a/node_modules/uncontrollable/test/.eslintrc b/node_modules/uncontrollable/test/.eslintrc
new file mode 100644
index 0000000000000000000000000000000000000000..d5ba8f9d9ca87e03c0be04dd936ce188dcf16b23
--- /dev/null
+++ b/node_modules/uncontrollable/test/.eslintrc
@@ -0,0 +1,5 @@
+{
+  "rules": {
+    "no-console": "off"
+  }
+}
diff --git a/node_modules/uncontrollable/test/test.js b/node_modules/uncontrollable/test/test.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e10cc1730dc8e8b23ac16729d7de8719d71d208
--- /dev/null
+++ b/node_modules/uncontrollable/test/test.js
@@ -0,0 +1,466 @@
+import Enzyme, { mount } from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+/* eslint-env jest */
+/* eslint-disable react/prop-types */
+import PropTypes from 'prop-types'
+import React from 'react'
+import { uncontrollable, useUncontrolled } from '../src'
+
+Enzyme.configure({ adapter: new Adapter() })
+
+describe('uncontrollable', () => {
+  var Base
+
+  beforeEach(() => {
+    Base = class extends React.Component {
+      static propTypes = {
+        value: PropTypes.number,
+        checked: PropTypes.bool,
+        onChange: PropTypes.func,
+
+        open: PropTypes.bool,
+        onToggle: PropTypes.func,
+
+        onRender: PropTypes.func,
+      }
+
+      handleChange = val => {
+        var target = this.input
+
+        if (val) target.value = val
+
+        this.props.onChange(val)
+      }
+
+      render() {
+        if (this.props.onRender) this.props.onRender(this.props)
+
+        const { value, checked } = this.props
+
+        return (
+          <div>
+            <button onClick={this.props.onToggle}>toggle</button>
+            {this.props.open && <span className="open">open!</span>}
+            <input
+              className="valueInput"
+              ref={r => {
+                this.input = r
+              }}
+              value={value == null ? '' : value}
+              onChange={e => this.props.onChange(e.value)}
+            />
+            <input
+              type="checkbox"
+              checked={checked ? '' : null}
+              value={value == null ? '' : value}
+              onChange={e => this.props.onChange(e.checked)}
+            />
+          </div>
+        )
+      }
+
+      foo(num) {
+        return num + num
+      }
+
+      bar = () => {
+        return 'value: ' + this.props.value
+      }
+    }
+  })
+
+  it('should warn when handlers are missing', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' })
+
+    expect(Control.propTypes.value({ value: 3 }, 'value').message).toContain(
+      'You have provided a `value` prop to `Base` without an `onChange` ' +
+        'handler prop. This will render a read-only field.'
+    )
+  })
+
+  it('should include default PropTypes', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' })
+
+    expect(Control.propTypes.defaultValue).not.toBeNull()
+  })
+
+  it('should adjust displayName', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' })
+
+    expect(mount(<Control />).find('Uncontrolled(Base)')).toHaveLength(1)
+  })
+
+  it('should expose the original component', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' })
+
+    expect(Control.ControlledComponent).toEqual(Base)
+  })
+
+  describe('without forwardRef()', () => {
+    let forwardRef
+
+    beforeEach(() => {
+      forwardRef = React.forwardRef
+      delete React.forwardRef
+    })
+
+    afterEach(() => {
+      React.forwardRef = forwardRef
+    })
+
+    it('should forward methods', () => {
+      var Control = uncontrollable(Base, { value: 'onChange' }, ['foo', 'bar'])
+
+      let wrapper = mount(<Control value={5} onChange={() => {}} />)
+      const instance = wrapper.instance()
+
+      expect(instance.constructor.name).toBe('UncontrolledComponent')
+
+      expect(typeof instance.foo).toBe('function')
+      expect(typeof instance.bar).toBe('function')
+
+      expect(instance.foo(10)).toEqual(20)
+      expect(instance.bar()).toEqual('value: 5')
+    })
+
+    it('should pass through uncontrollables', () => {
+      let Control = uncontrollable(Base, { value: 'onChange' }, ['foo'])
+      let instance = mount(<Control defaultValue={10} defaultOpen />).instance()
+
+      expect(typeof instance.foo).toEqual('function')
+      expect(instance.foo(2)).toEqual(4)
+      expect(instance.inner).toEqual(expect.anything())
+    })
+
+    it('should work with stateless components', () => {
+      jest.spyOn(console, 'error')
+
+      var Control = uncontrollable(() => <span />, { value: 'onChange' })
+
+      expect(
+        mount(<Control defaultValue={10} defaultOpen />).instance().inner
+      ).not.toEqual(expect.anything())
+
+      expect(console.error).not.toHaveBeenCalled()
+      console.error.mockRestore()
+    })
+  })
+
+  it('should passthrough ref', () => {
+    let Control = uncontrollable(Base, { value: 'onChange' })
+
+    class Example extends React.Component {
+      render() {
+        return <Control ref="control" defaultValue={10} defaultOpen />
+      }
+    }
+
+    expect(mount(<Example />).instance().refs.control instanceof Base).toEqual(
+      true
+    )
+  })
+
+  it('should compose ref with method passthrough', () => {
+    let Control = uncontrollable(Base, { value: 'onChange' }, ['foo'])
+    let ref = null
+
+    class Example extends React.Component {
+      render() {
+        return <Control ref={r => (ref = r)} defaultValue={10} defaultOpen />
+      }
+    }
+
+    mount(<Example />)
+
+    expect(ref instanceof Base).toEqual(true)
+  })
+
+  it('should work with forwardRef components', () => {
+    const OtherBase = React.forwardRef((props, ref) => (
+      <Base {...props} ref={ref} />
+    ))
+    let Control = uncontrollable(OtherBase, { value: 'onChange' })
+    let ref
+    class Example extends React.Component {
+      render() {
+        return <Control ref={r => (ref = r)} defaultValue={10} defaultOpen />
+      }
+    }
+    mount(<Example />)
+
+    expect(ref instanceof Base).toEqual(true)
+  })
+
+  it('should warn when passing through uncontrollables to stateless components', () => {
+    expect(() => {
+      uncontrollable(() => null, { value: 'onChange' }, ['foo'])
+    }).toThrow(/stateless function components.+Component.+foo/g)
+  })
+
+  it('should track internally if not specified', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' })
+
+    let inst = mount(<Control />)
+
+    inst
+      .find('input')
+      .first()
+      .simulate('change', { value: 42 })
+
+    expect(inst.children().instance().state.values.value).toEqual(42)
+  })
+
+  it('should allow for defaultProp', () => {
+    let Control = uncontrollable(Base, {
+      value: 'onChange',
+      open: 'onToggle',
+    })
+
+    let inst = mount(<Control defaultValue={10} defaultOpen />)
+
+    inst.find('.open').first()
+
+    inst
+      .find('input')
+      .first()
+      .tap(inst => expect(inst.getDOMNode().value).toEqual('10'))
+      .simulate('change', { value: 42 })
+
+    expect(inst.children().instance().state.values.value).toEqual(42)
+  })
+
+  it('should not forward default props through', () => {
+    let Control = uncontrollable(Base, {
+      value: 'onChange',
+      open: 'onToggle',
+    })
+
+    let inst = mount(<Control defaultValue={10} defaultOpen />)
+
+    let props = inst.find(Base).props()
+
+    expect(Object.keys(props)).not.toEqual(
+      expect.arrayContaining(['defaultValue', 'defaultOpen'])
+    )
+
+    expect(Object.keys(props)).toEqual(
+      expect.arrayContaining(['value', 'open'])
+    )
+  })
+
+  it('should not throw when not batching', () => {
+    let spy = jest.fn()
+
+    let Control = uncontrollable(Base, {
+      value: 'onChange',
+      open: 'onToggle',
+    })
+
+    let inst = mount(<Control defaultValue={10} defaultOpen onChange={spy} />)
+    let base = inst.find(Base).instance()
+
+    inst.find('.open')
+
+    expect(() => base.handleChange(42)).not.toThrow()
+
+    expect(spy).toHaveBeenCalledTimes(1)
+    expect(inst.children().instance().state.values.value).toEqual(42)
+  })
+
+  it('should update in the right order when controlled', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' }),
+      spy = jest.fn()
+
+    class Parent extends React.Component {
+      state = { value: 5 }
+      render() {
+        return (
+          <Control
+            onRender={spy}
+            value={this.state.value}
+            onChange={value => this.setState({ value })}
+          />
+        )
+      }
+    }
+
+    mount(<Parent />)
+      .find('input')
+      .first()
+      .simulate('change', { value: 42 })
+
+    expect(spy.mock.calls.length).toEqual(2)
+    expect(spy.mock.calls[0][0].value).toEqual(5)
+    expect(spy.mock.calls[1][0].value).toEqual(42)
+  })
+
+  it('should update in the right order', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' }),
+      spy = jest.fn()
+
+    class Parent extends React.Component {
+      state = { value: 5 }
+      render() {
+        return <Control onRender={spy} defaultValue={this.state.value} />
+      }
+    }
+
+    var inst = mount(<Parent />)
+
+    inst
+      .find('input')
+      .first()
+      .simulate('change', { value: 42 })
+
+    expect(spy.mock.calls.length).toEqual(2)
+    expect(spy.mock.calls[0][0].value).toEqual(5)
+    expect(spy.mock.calls[1][0].value).toEqual(42)
+
+    spy.mockReset()
+
+    inst
+      .find(Base)
+      .instance()
+      .handleChange(84)
+
+    expect(spy.mock.calls.length).toEqual(1)
+    expect(spy.mock.calls[0][0].value).toEqual(84)
+  })
+
+  it('should revert to defaultProp when switched to uncontrollable', () => {
+    var Control = uncontrollable(Base, { value: 'onChange' }),
+      spy = jest.fn()
+
+    class Parent extends React.Component {
+      state = { value: 5, defaultValue: 6 }
+      render() {
+        return (
+          <Control
+            onRender={spy}
+            value={this.state.value}
+            defaultValue={this.state.defaultValue}
+            onChange={value => this.setState({ value })}
+          />
+        )
+      }
+    }
+
+    var inst = mount(<Parent />)
+
+    expect(spy.mock.calls.length).toEqual(1)
+    expect(spy.mock.calls[0][0].value).toEqual(5)
+
+    inst.setState({ value: undefined })
+
+    expect(spy.mock.calls.length).toEqual(2)
+    expect(spy.mock.calls[1][0].value).toEqual(6)
+
+    inst.setState({ value: 63 })
+
+    expect(spy.mock.calls.length).toEqual(3)
+    expect(spy.mock.calls[2][0].value).toEqual(63)
+
+    inst.setState({ value: undefined, defaultValue: 52 })
+
+    expect(spy.mock.calls.length).toEqual(4)
+    expect(spy.mock.calls[3][0].value).toEqual(52)
+  })
+
+  describe('hook', () => {
+    it('should track internally if not specified', () => {
+      let ref = {}
+      let Control = props => {
+        props = useUncontrolled(props, { value: 'onChange' })
+        ref.current = props
+
+        return (
+          <input
+            {...props}
+            value={props.value == null ? '' : props.value}
+            onChange={e => props.onChange(e.value)}
+          />
+        )
+      }
+
+      let inst = mount(<Control />)
+
+      inst
+        .find('input')
+        .first()
+        .simulate('change', { value: 42 })
+
+      expect(ref.current.value).toEqual(42)
+    })
+
+    it('should allow for defaultProp', () => {
+      let ref = {}
+      let Control = props => {
+        props = useUncontrolled(props, {
+          value: 'onChange',
+          open: 'onToggle',
+        })
+
+        ref.current = props
+
+        return (
+          <input
+            {...props}
+            className={props.open ? 'open' : ''}
+            value={props.value == null ? '' : props.value}
+            onChange={e => props.onChange(e.value)}
+          />
+        )
+      }
+      let inst = mount(<Control defaultValue={10} defaultOpen />)
+
+      expect(inst.find('.open')).toHaveLength(1)
+
+      const inputProps = inst.find('input').props()
+
+      expect(inputProps.defaultValue).not.toBeDefined()
+      expect(inputProps.defaultOpen).not.toBeDefined()
+
+      inst
+        .find('input')
+        .first()
+        .tap(inst => expect(inst.getDOMNode().value).toEqual('10'))
+        .simulate('change', { value: 42 })
+
+      expect(ref.current.value).toEqual(42)
+    })
+
+    it('should revert to defaultProp when switched to uncontrolled', () => {
+      let ref = {}
+      let Control = props => {
+        props = useUncontrolled(props, { value: 'onChange' })
+        ref.current = props
+
+        return (
+          <input
+            {...props}
+            value={props.value == null ? '' : props.value}
+            onChange={e => props.onChange(e.value)}
+          />
+        )
+      }
+
+      let inst = mount(
+        <Control defaultValue="foo" value="bar" onChange={() => {}} />
+      )
+
+      expect(ref.current.value).toEqual('bar')
+
+      inst.setProps({ value: undefined })
+
+      expect(ref.current.value).toEqual('foo')
+
+      inst.setProps({ value: 'bar' })
+
+      expect(ref.current.value).toEqual('bar')
+
+      inst.setProps({ value: undefined, defaultValue: 'baz' })
+
+      expect(ref.current.value).toEqual('baz')
+    })
+  })
+})
diff --git a/node_modules/uncontrollable/test/types-test.tsx b/node_modules/uncontrollable/test/types-test.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..f48113eac56c3619484db72c4bca404d962307d9
--- /dev/null
+++ b/node_modules/uncontrollable/test/types-test.tsx
@@ -0,0 +1,28 @@
+import { useUncontrolled, useUncontrolledProp } from '../src'
+
+interface Props {
+  value?: string
+  defaultValue: string | undefined
+  onChange?(value: string, meta: {}): void
+}
+
+function Foo(props: Props) {
+  // $ExpectType [string, (value: string, meta: {}) => void]
+  const [value, onChange] = useUncontrolledProp(
+    props.value,
+    props.defaultValue,
+    props.onChange
+  )
+}
+
+function FooA(props: Props) {
+  // $ExpectType { value: string, onChange:  (value: string, meta: {}) => void }
+  const a = useUncontrolled<Props, 'defaultValue'>(props, {
+    value: 'onChange',
+  })
+
+  // $ExpectType Props
+  const b = useUncontrolled(props, {
+    value: 'onChange',
+  })
+}
diff --git a/node_modules/uncontrollable/tsconfig.json b/node_modules/uncontrollable/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..8eeab9c3aa362c26733dd31ae906676ec7c8d305
--- /dev/null
+++ b/node_modules/uncontrollable/tsconfig.json
@@ -0,0 +1,8 @@
+{
+  "extends": "@4c/tsconfig/web.json",
+  "compilerOptions": {
+    "noImplicitAny": false,
+    "rootDir": "src"
+  },
+  "include": ["src"]
+}
diff --git a/node_modules/warning/CHANGELOG.md b/node_modules/warning/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..643cf10a5d1d0f0af3af34c8ca9112709fc5ea2f
--- /dev/null
+++ b/node_modules/warning/CHANGELOG.md
@@ -0,0 +1,83 @@
+<a name="4.0.3"></a>
+## [4.0.3](https://github.com/BerkeleyTrue/warning/compare/v4.0.2...v4.0.3) (2019-02-09)
+
+
+### Bug Fixes
+
+* incorrect formatting of message with arguments ([b188176](https://github.com/BerkeleyTrue/warning/commit/b188176))
+
+
+
+<a name="4.0.2"></a>
+## [4.0.2](https://github.com/BerkeleyTrue/warning/compare/v4.0.1...v4.0.2) (2018-08-17)
+
+
+### Bug Fixes
+
+* **use jest instead of tap:** tap is a PITA to debug ([c4c026b](https://github.com/BerkeleyTrue/warning/commit/c4c026b))
+* remove [@provides](https://github.com/provides)Module annotation ([1d808f1](https://github.com/BerkeleyTrue/warning/commit/1d808f1))
+
+
+
+# Change Log
+
+All notable changes to this project will be documented in this file.
+See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+
+<a name="4.0.1"></a>
+## [4.0.1](https://github.com/BerkeleyTrue/warning/compare/v4.0.0...v4.0.1) (2018-05-30)
+
+
+### Bug Fixes
+
+* add `var printWarning =` to comply with ES5 strict mode ([677dcfa](https://github.com/BerkeleyTrue/warning/commit/677dcfa)), closes [#25](https://github.com/BerkeleyTrue/warning/issues/25)
+
+<a name="4.0.0"></a>
+## [4.0.0](https://github.com/BerkeleyTrue/warning/compare/v3.0.0...v4.0.0) (2018-05-22)
+
+
+### Bug Fixes
+
+* Remove "browser" version ([521f5f5](https://github.com/BerkeleyTrue/warning/commit/521f5f5)), closes [#18](https://github.com/BerkeleyTrue/warning/issues/18) [/github.com/facebook/fbjs/pull/86#issuecomment-285204734](https://github.com//github.com/facebook/fbjs/pull/86/issues/issuecomment-285204734)
+* Update warning to use the latest version from facebook/fbjs ([0572ddd](https://github.com/BerkeleyTrue/warning/commit/0572ddd))
+
+
+### Chores
+
+* **LICENSE:** Change from BSD modified to MIT ([5a63a1b](https://github.com/BerkeleyTrue/warning/commit/5a63a1b))
+
+
+### BREAKING CHANGES
+
+* **LICENSE:** Change License to MIT from BSD+patents
+* This changes the internal workings. A major release is
+made to ensure minimal effect on downstream users.
+
+
+<a name="3.0.0"></a>
+## [3.0.0](https://github.com/BerkeleyTrue/warning/compare/v2.1.0...v3.0.0) (2015-10-04)
+
+### BREAKING CHANGE
+
+* **package.json** correct license field ([6bd7ad5](https://github.com/BerkeleyTrue/warning/commit/6bd7ad5))
+
+<a name="2.1.0"></a>
+## [2.1.0](https://github.com/BerkeleyTrue/warning/compare/v2.0.0...v2.1.0) (2015-10-04)
+
+### Features
+
+* switch to loose-envify ([dacc2da](https://github.com/BerkeleyTrue/warning/commit/dacc2da))
+
+<a name="2.0.0"></a>
+## [2.0.0](https://github.com/BerkeleyTrue/warning/compare/v1.0.2...v2.0.0) (2015-07-11)
+
+### BREAKING CHANGE
+
+* add browser(ify) friendly version ([1a33d40fa1](https://github.com/BerkeleyTrue/warning/commit/1a33d40fa1))
+
+<a name="1.0.2"></a>
+## [1.0.2](https://github.com/BerkeleyTrue/warning/compare/v1.0.1...v1.0.2) (2015-05-30)
+
+### Bug Fixes
+
+* return args in replace ([2ac6962](https://github.com/BerkeleyTrue/warning/commit/2ac6962263))
diff --git a/node_modules/warning/LICENSE.md b/node_modules/warning/LICENSE.md
new file mode 100644
index 0000000000000000000000000000000000000000..188fb2b0bd8e7b4aa032165449c180cc108d18ac
--- /dev/null
+++ b/node_modules/warning/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-present, Facebook, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/warning/README.md b/node_modules/warning/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..81e88ceb6f0fa2fb2788ef08f8d31cfcd4f2e5e6
--- /dev/null
+++ b/node_modules/warning/README.md
@@ -0,0 +1,69 @@
+# Warning [![npm version](https://badge.fury.io/js/warning.svg)](https://badge.fury.io/js/warning)
+
+[![Greenkeeper badge](https://badges.greenkeeper.io/BerkeleyTrue/warning.svg)](https://greenkeeper.io/)
+A mirror of Facebook's [Warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js)
+
+
+## Usage
+```
+npm install warning
+```
+
+```
+// some script
+var warning = require('warning');
+
+var ShouldBeTrue = false;
+
+warning(
+  ShouldBeTrue,
+  'This thing should be true but you set to false. No soup for you!'
+);
+//  'This thing should be true but you set to false. No soup for you!'
+```
+
+Similar to Facebook's (FB) invariant but only logs a warning if the condition is not met.
+This can be used to log issues in development environments in critical
+paths. Removing the logging code for production environments will keep the
+same logic and follow the same code paths.
+
+## FAQ (READ before opening an issue)
+
+> Why do you use `console.error` instead of `console.warn` ?
+
+This is a mirror of Facebook's (FB) [warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js) module used within React's source code (and other FB software).
+As such this module will mirror their code as much as possible. 
+
+The descision to use `error` over `warn` was made a long time ago by the FB team and isn't going to change anytime soon.
+
+The source can be found here: https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js
+The reasoning can be found here and elsewhere: https://github.com/facebook/fbjs/pull/94#issuecomment-168332326
+
+> Can I add X feature?
+
+This is a mirror of Facebook's (FB) [warning](https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/__forks__/warning.js) and as such the source and signature will mirror that module.
+
+If you believe a feature is missing than please open a feature request [there](https://github.com/facebook/fbjs).
+If it is approved and merged in that this module will be updated to reflect that change, otherwise this module will not change.
+
+## Use in Production
+
+It is recommended to add [babel-plugin-dev-expression](https://github.com/4Catalyzer/babel-plugin-dev-expression) with this module to remove warning messages in production.
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<small>Don't Forget To Be Awesome</small>
diff --git a/node_modules/warning/package.json b/node_modules/warning/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..0e3fce09afea4180bd2bfba8014c0de6a0f79a2a
--- /dev/null
+++ b/node_modules/warning/package.json
@@ -0,0 +1,86 @@
+{
+  "_from": "warning@^4.0.3",
+  "_id": "warning@4.0.3",
+  "_inBundle": false,
+  "_integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+  "_location": "/warning",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "warning@^4.0.3",
+    "name": "warning",
+    "escapedName": "warning",
+    "rawSpec": "^4.0.3",
+    "saveSpec": null,
+    "fetchSpec": "^4.0.3"
+  },
+  "_requiredBy": [
+    "/@restart/ui",
+    "/prop-types-extra",
+    "/react-bootstrap"
+  ],
+  "_resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+  "_shasum": "16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3",
+  "_spec": "warning@^4.0.3",
+  "_where": "/home/ethan2.clay/flask/node_modules/react-bootstrap",
+  "author": {
+    "name": "Berkeley Martinez",
+    "email": "berkeley@berkeleytrue.com",
+    "url": "http://www.berkeleytrue.com"
+  },
+  "browserify": {
+    "transform": [
+      "loose-envify"
+    ]
+  },
+  "bugs": {
+    "url": "https://github.com/BerkeleyTrue/warning/issues"
+  },
+  "bundleDependencies": false,
+  "config": {
+    "commitizen": {
+      "path": "cz-conventional-changelog"
+    }
+  },
+  "dependencies": {
+    "loose-envify": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "A mirror of Facebook's Warning",
+  "devDependencies": {
+    "@commitlint/cli": "^6.2.0",
+    "@commitlint/config-conventional": "^6.1.3",
+    "browserify": "^16.2.2",
+    "commitizen": "^2.10.1",
+    "cz-conventional-changelog": "^2.1.0",
+    "husky": "^0.14.3",
+    "jest": "^23.1.0",
+    "uglify-js": "^3.3.25"
+  },
+  "files": [
+    "warning.js"
+  ],
+  "homepage": "https://github.com/BerkeleyTrue/warning",
+  "keywords": [
+    "warning",
+    "facebook",
+    "react",
+    "invariant"
+  ],
+  "license": "MIT",
+  "main": "warning.js",
+  "name": "warning",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/BerkeleyTrue/warning.git"
+  },
+  "scripts": {
+    "commit": "git cz",
+    "commitmsg": "commitlint -e $GIT_PARAMS",
+    "test": "npm run test:dev && npm run test:prod",
+    "test:dev": "NODE_ENV=development jest",
+    "test:prod": "NODE_ENV=production jest"
+  },
+  "version": "4.0.3"
+}
diff --git a/node_modules/warning/warning.js b/node_modules/warning/warning.js
new file mode 100644
index 0000000000000000000000000000000000000000..281d85bcc939b29cd45f32bd9b784cfc4032d5e0
--- /dev/null
+++ b/node_modules/warning/warning.js
@@ -0,0 +1,62 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+'use strict';
+
+/**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+var __DEV__ = process.env.NODE_ENV !== 'production';
+
+var warning = function() {};
+
+if (__DEV__) {
+  var printWarning = function printWarning(format, args) {
+    var len = arguments.length;
+    args = new Array(len > 1 ? len - 1 : 0);
+    for (var key = 1; key < len; key++) {
+      args[key - 1] = arguments[key];
+    }
+    var argIndex = 0;
+    var message = 'Warning: ' +
+      format.replace(/%s/g, function() {
+        return args[argIndex++];
+      });
+    if (typeof console !== 'undefined') {
+      console.error(message);
+    }
+    try {
+      // --- Welcome to debugging React ---
+      // This error was thrown as a convenience so that you can use this stack
+      // to find the callsite that caused this warning to fire.
+      throw new Error(message);
+    } catch (x) {}
+  }
+
+  warning = function(condition, format, args) {
+    var len = arguments.length;
+    args = new Array(len > 2 ? len - 2 : 0);
+    for (var key = 2; key < len; key++) {
+      args[key - 2] = arguments[key];
+    }
+    if (format === undefined) {
+      throw new Error(
+          '`warning(condition, format, ...args)` requires a warning ' +
+          'message argument'
+      );
+    }
+    if (!condition) {
+      printWarning.apply(null, [format].concat(args));
+    }
+  };
+}
+
+module.exports = warning;
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..d2ce7a7f63c8de7f1c62c9e543ad0cff2dbb2659
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,212 @@
+{
+  "requires": true,
+  "lockfileVersion": 1,
+  "dependencies": {
+    "@babel/runtime": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+      "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+      "requires": {
+        "regenerator-runtime": "^0.14.0"
+      }
+    },
+    "@popperjs/core": {
+      "version": "2.11.8",
+      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
+    },
+    "@react-aria/ssr": {
+      "version": "3.9.6",
+      "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.6.tgz",
+      "integrity": "sha512-iLo82l82ilMiVGy342SELjshuWottlb5+VefO3jOQqQRNYnJBFpUSadswDPbRimSgJUZuFwIEYs6AabkP038fA==",
+      "requires": {
+        "@swc/helpers": "^0.5.0"
+      }
+    },
+    "@restart/hooks": {
+      "version": "0.4.16",
+      "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz",
+      "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==",
+      "requires": {
+        "dequal": "^2.0.3"
+      }
+    },
+    "@restart/ui": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.8.0.tgz",
+      "integrity": "sha512-xJEOXUOTmT4FngTmhdjKFRrVVF0hwCLNPdatLCHkyS4dkiSK12cEu1Y0fjxktjJrdst9jJIc5J6ihMJCoWEN/g==",
+      "requires": {
+        "@babel/runtime": "^7.21.0",
+        "@popperjs/core": "^2.11.6",
+        "@react-aria/ssr": "^3.5.0",
+        "@restart/hooks": "^0.4.9",
+        "@types/warning": "^3.0.0",
+        "dequal": "^2.0.3",
+        "dom-helpers": "^5.2.0",
+        "uncontrollable": "^8.0.1",
+        "warning": "^4.0.3"
+      },
+      "dependencies": {
+        "uncontrollable": {
+          "version": "8.0.4",
+          "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz",
+          "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ=="
+        }
+      }
+    },
+    "@swc/helpers": {
+      "version": "0.5.15",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+      "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+      "requires": {
+        "tslib": "^2.8.0"
+      }
+    },
+    "@types/prop-types": {
+      "version": "15.7.13",
+      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
+      "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA=="
+    },
+    "@types/react": {
+      "version": "18.3.12",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz",
+      "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==",
+      "requires": {
+        "@types/prop-types": "*",
+        "csstype": "^3.0.2"
+      }
+    },
+    "@types/react-transition-group": {
+      "version": "4.4.11",
+      "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz",
+      "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==",
+      "requires": {
+        "@types/react": "*"
+      }
+    },
+    "@types/warning": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz",
+      "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q=="
+    },
+    "classnames": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+      "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="
+    },
+    "csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "dequal": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="
+    },
+    "dom-helpers": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+      "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+      "requires": {
+        "@babel/runtime": "^7.8.7",
+        "csstype": "^3.0.2"
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+    },
+    "prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "requires": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "prop-types-extra": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz",
+      "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==",
+      "requires": {
+        "react-is": "^16.3.2",
+        "warning": "^4.0.0"
+      }
+    },
+    "react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
+    "react-lifecycles-compat": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+    },
+    "react-transition-group": {
+      "version": "4.4.5",
+      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
+      "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
+      "requires": {
+        "@babel/runtime": "^7.5.5",
+        "dom-helpers": "^5.0.1",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.6.2"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+    },
+    "uncontrollable": {
+      "version": "7.2.1",
+      "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz",
+      "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==",
+      "requires": {
+        "@babel/runtime": "^7.6.3",
+        "@types/react": ">=16.9.11",
+        "invariant": "^2.2.4",
+        "react-lifecycles-compat": "^3.0.4"
+      }
+    },
+    "warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    }
+  }
+}