From a08c98586263c797aafb7974a20e33253c3307b6 Mon Sep 17 00:00:00 2001 From: Casey Date: Sun, 29 May 2022 13:43:55 -0400 Subject: [PATCH] TGUI API improvements port --- code/controllers/subsystems/tgui.dm | 4 + code/modules/tgui/tgui.dm | 2 +- code/modules/tgui/tgui_window.dm | 57 +++- code/modules/tooltip/tooltip.html | 9 +- tgui/.eslintrc.yml | 1 + tgui/README.md | 12 +- tgui/docs/tgui-for-custom-html-popups.md | 259 ++++++++++++++++++ tgui/global.d.ts | 55 +++- tgui/packages/tgui-panel/index.js | 15 +- tgui/packages/tgui-panel/ping/middleware.js | 6 +- tgui/packages/tgui-panel/telemetry.js | 11 +- .../{html5shiv.js => 00-html5shiv.js} | 0 .../tgui-polyfill/{ie8.js => 01-ie8.js} | 0 .../tgui-polyfill/{dom4.js => 02-dom4.js} | 0 .../tgui-polyfill/{css-om.js => 03-css-om.js} | 0 tgui/packages/tgui-polyfill/10-misc.js | 61 +++++ tgui/packages/tgui-polyfill/index.js | 8 +- tgui/packages/tgui-polyfill/inferno.js | 10 - tgui/packages/tgui-polyfill/package.json | 6 + tgui/packages/tgui/backend.ts | 51 +--- tgui/packages/tgui/components/ByondUi.js | 13 +- tgui/packages/tgui/components/Popper.tsx | 16 +- tgui/packages/tgui/debug/middleware.js | 4 +- tgui/packages/tgui/drag.js | 96 ++++--- tgui/packages/tgui/focus.js | 2 +- tgui/packages/tgui/index.js | 15 +- tgui/packages/tgui/layouts/Window.js | 2 +- tgui/packages/tgui/links.js | 4 +- tgui/packages/tgui/logging.js | 4 +- tgui/packages/tgui/stories/ByondUi.stories.js | 2 +- tgui/public/tgui-common.bundle.js | 2 +- tgui/public/tgui-panel.bundle.js | 2 +- tgui/public/tgui-polyfill.min.js | 1 + tgui/public/tgui.bundle.js | 6 +- tgui/public/tgui.html | 207 +++++++++----- tgui/yarn.lock | 3 +- 36 files changed, 674 insertions(+), 272 deletions(-) create mode 100644 tgui/docs/tgui-for-custom-html-popups.md rename tgui/packages/tgui-polyfill/{html5shiv.js => 00-html5shiv.js} (100%) rename tgui/packages/tgui-polyfill/{ie8.js => 01-ie8.js} (100%) rename tgui/packages/tgui-polyfill/{dom4.js => 02-dom4.js} (100%) rename tgui/packages/tgui-polyfill/{css-om.js => 03-css-om.js} (100%) create mode 100644 tgui/packages/tgui-polyfill/10-misc.js delete mode 100644 tgui/packages/tgui-polyfill/inferno.js create mode 100644 tgui/public/tgui-polyfill.min.js diff --git a/code/controllers/subsystems/tgui.dm b/code/controllers/subsystems/tgui.dm index a0d96cf80c..d70d06017a 100644 --- a/code/controllers/subsystems/tgui.dm +++ b/code/controllers/subsystems/tgui.dm @@ -23,6 +23,10 @@ SUBSYSTEM_DEF(tgui) /datum/controller/subsystem/tgui/PreInit() basehtml = file2text('tgui/public/tgui.html') + // Inject inline polyfills + var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') + polyfill = "" + basehtml = replacetextEx(basehtml, "", polyfill) /datum/controller/subsystem/tgui/Shutdown() close_all_uis() diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 5f95ab7db2..677d20164d 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -92,7 +92,7 @@ if(!window.is_ready()) window.initialize( fancy = user.client.prefs.tgui_fancy, - inline_assets = list( + assets = list( get_asset_datum(/datum/asset/simple/tgui_common), get_asset_datum(/datum/asset/simple/tgui) )) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index cc8a63ef27..2e1b64bac1 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -18,8 +18,11 @@ var/message_queue var/sent_assets = list() // Vars passed to initialize proc (and saved for later) - var/inline_assets - var/fancy + var/initial_fancy + var/initial_assets + var/initial_inline_html + var/initial_inline_js + var/initial_inline_css /** * public @@ -45,21 +48,26 @@ * state. You can begin sending messages right after initializing. Messages * will be put into the queue until the window finishes loading. * - * optional inline_assets list List of assets to inline into the html. + * optional assets list List of assets to inline into the html. * optional inline_html string Custom HTML to inject. * optional fancy bool If TRUE, will hide the window titlebar. */ /datum/tgui_window/proc/initialize( - inline_assets = list(), + fancy = FALSE, + assets = list(), inline_html = "", - fancy = FALSE) + inline_js = "", + inline_css = "") #ifdef TGUI_DEBUGGING log_tgui(client, "[id]/initiailize ([src])") #endif if(!client) return - src.inline_assets = inline_assets - src.fancy = fancy + src.initial_fancy = fancy + src.initial_assets = assets + src.initial_inline_html = inline_html + src.initial_inline_js = inline_js + src.initial_inline_css = inline_css status = TGUI_WINDOW_LOADING fatally_errored = FALSE // Build window options @@ -72,9 +80,9 @@ // Generate page html var/html = SStgui.basehtml html = replacetextEx(html, "\[tgui:windowId]", id) - // Inject inline assets + // Inject assets var/inline_assets_str = "" - for(var/datum/asset/asset in inline_assets) + for(var/datum/asset/asset in assets) var/mappings = asset.get_url_mappings() for(var/name in mappings) var/url = mappings[name] @@ -87,8 +95,17 @@ if(length(inline_assets_str)) inline_assets_str = "\n" html = replacetextEx(html, "\n", inline_assets_str) - // Inject custom HTML - html = replacetextEx(html, "\n", inline_html) + // Inject inline HTML + if (inline_html) + html = replacetextEx(html, "", inline_html) + // Inject inline JS + if (inline_js) + inline_js = "" + html = replacetextEx(html, "", inline_js) + // Inject inline CSS + if (inline_css) + inline_css = "" + html = replacetextEx(html, "", inline_css) // Open the window client << browse(html, "window=[id];[options]") // Detect whether the control is a browser @@ -281,6 +298,17 @@ : "[id].browser:update") message_queue = null +/** + * public + * + * Replaces the inline HTML content. + * + * required inline_html string HTML to inject + */ +/datum/tgui_window/proc/replace_html(inline_html = "") + client << output(url_encode(inline_html), is_browser \ + ? "[id]:replaceHtml" \ + : "[id].browser:replaceHtml") /** * private @@ -325,7 +353,12 @@ client << link(href_list["url"]) if("cacheReloaded") // Reinitialize - initialize(inline_assets = inline_assets, fancy = fancy) + initialize( + fancy = initial_fancy, + assets = initial_assets, + inline_html = initial_inline_html, + inline_js = initial_inline_js, + inline_css = initial_inline_css) // Resend the assets for(var/asset in sent_assets) send_asset(asset) \ No newline at end of file diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html index 67fb8a77f1..77ac63c1a9 100644 --- a/code/modules/tooltip/tooltip.html +++ b/code/modules/tooltip/tooltip.html @@ -217,8 +217,13 @@ $wrap.width($wrap.width() + 2); //Dumb hack to fix a bizarre sizing bug - var docWidth = $wrap.outerWidth(), - docHeight = $wrap.outerHeight(); + var pixelRatio = 1; + if (window.devicePixelRatio) { + pixelRatio = window.devicePixelRatio; + } + + var docWidth = Math.floor($wrap.outerWidth() * pixelRatio), + docHeight = Math.floor($wrap.outerHeight() * pixelRatio); if (posY + docHeight > map.size.y) { //Is the bottom edge below the window? Snap it up if so posY = (posY - docHeight) - realIconSize - tooltip.padding; diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index d312b80c4b..0ca5affa06 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -376,6 +376,7 @@ rules: ignoreUrls: true, ignoreRegExpLiterals: true, ignoreStrings: true, + ignoreTemplateLiterals: true, }] ## Enforce a maximum number of lines per file # max-lines: error diff --git a/tgui/README.md b/tgui/README.md index bfa9ec3d92..d0f1d1e08d 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -33,6 +33,13 @@ If you were already familiar with an older, Ractive-based tgui, and want to translate concepts between old and new tgui, read this [interface conversion guide](docs/converting-old-tgui-interfaces.md). +### Other Documentation + +- [Component Reference](docs/component-reference.md) - UI building blocks +- [Using TGUI and Byond API for custom HTML popups](docs/tgui-for-custom-html-popups.md) +- [Chat Embedded Components](docs/chat-embedded-components.md) +- [Writing Tests](docs/writing-tests.md) + ## Pre-requisites You will need these programs to start developing in tgui: @@ -40,6 +47,7 @@ You will need these programs to start developing in tgui: - [Node v16.13+](https://nodejs.org/en/download/) - **LTS** release is recommended instead of latest - [Yarn v1.22.4+](https://yarnpkg.com/getting-started/install) (optional) + - You can run `npm install -g yarn` to install it. - [Git Bash](https://git-scm.com/downloads) or [MSys2](https://www.msys2.org/) (optional) @@ -190,10 +198,6 @@ Add stylesheets here if you really need a fine control over your UI styles. - `/packages/tgui/styles/themes` - Contains all the various themes you can use in tgui. Each theme must be registered in `webpack.config.js` file. -## Component Reference - -See: [Component Reference](docs/component-reference.md). - ## License Source code is covered by /tg/station's parent license - **AGPL-3.0** diff --git a/tgui/docs/tgui-for-custom-html-popups.md b/tgui/docs/tgui-for-custom-html-popups.md new file mode 100644 index 0000000000..f25060e9fa --- /dev/null +++ b/tgui/docs/tgui-for-custom-html-popups.md @@ -0,0 +1,259 @@ +# Using TGUI and Byond API for custom HTML popups + +TGUI in its current form would not exist without a very robust underlying layer that interfaces TGUI code with the BYOND browser component. This very layer can also be used to write simple and robust HTML popups, with access to many convenient APIs. In this article, you'll learn how to make a TGUI powered HTML popup and leverage all APIs that it provides. + +## How to create a window + +TGUI in order to create a window (popup) uses the `/datum/tgui_window` class. Feel free to take a look at its [source code](../../code/modules/tgui/tgui_window.dm), as all of its procs are very well documented. This class takes care of spawning the BYOND's browser element, normalizes the browser environment (because users might have IE8 on their system, or in future, it might be Microsoft Edge) and specifies a very rigid communication protocol between DM and JS. + +> **Notice:** Because `/datum/tgui_window` includes a lot of boilerplate in the final html that it displays in the browser, it is somewhat more expensive to render than a traditional, dumb popup using a `browse()` proc call. Therefore, its best to use it with static popups or very custom pieces of client-side code, e.g. stat panel, chat or a background music player. +Create a window that prints hello world. + +```dm +var/datum/tgui_window/window = new(usr.client, "custom_popup") +window.initialize( + inline_html = "

Hello world!

", +) +``` + +Here, `custom_popup` is a unique id for the BYOND skin element that this window uses, and it can be anything you want. If you want to reference a specific element from `interface/skin.dmf`, you can use that id instead, and UI will initialize inside of that element. This is how for example chat initializes itself, by using a `browseroutput` id, which is also specified in `interface/skin.dmf`. + +In case you want to re-initialize it with different content, you can do that as well by calling `initialize` again with different arguments. + +```dm +window.initialize( + inline_html = "

Hello world, but smaller!

", +) +``` + +You can close the window as easily as you've opened it. + +```dm +window.close() +``` + +## Sending assets + +TGUI in /tg/station codebase has `/datum/asset`, that packs scripts and stylesheets for delivery via CDN for efficiency. TGUI internally uses this asset system to render TGUI interfaces *proper* and TGUI chat. This is a snippet from internal TGUI code: + +```dm +window.initialize( + fancy = user.client.prefs.read_preference( + /datum/preference/toggle/tgui_fancy + ), + assets = list( + get_asset_datum(/datum/asset/simple/tgui), + )) +``` + +You can see two new arguments: + +- `fancy` - See [Fancy mode](#fancy-mode) +- `assets` - This is a list of asset datums, and all JS and CSS in the assets will be loaded in the page. + +Using asset datums has a big benefit over including ` +``` + +## Inlined HTML, CSS and JS + +You can also make a popup that doesn't rely on network requests to get JS and CSS. In the following case, the entirety of the page will be contained in a single HTML file. + +```dm +window.initialize( + inline_html = "

Hello world!

", + inline_js = "window.alert('Warning!')", + inline_css = "h1 { color: red }", +) +``` + +You can also do the same by splitting your code into separate files, and then leveraging tgui window to serve it all as one big HTML file. + +```dm +window.initialize( + inline_html = file2text('code/modules/thing/thing.html'), + inline_js = file2text('code/modules/thing/thing.js'), + inline_css = file2text('code/modules/thing/thing.css'), +) +``` + +If you need to inline multiple JS or CSS files, you can concatenate them for now, and separate contents of each file with an `\n` symbol. *This can be a point of improvement (add support for file lists)*. + +## Fancy mode + +You may have noticed the fancy mode in previous snippets: + +```dm +window.initialize(fancy = TRUE) +``` + +This removes the native window titlebar and border, which effectively turns window into a floating panel. TGUI heavily uses this option to draw completely custom, fancy windows. You can use it too, but not having the default titlebar limits usability of the browser window, since you can't even close it or drag around without implementing that functionality yourself. This mode might be useful for creating popups and tooltips. + +## Communication + +It is very often necessary to exchange data between DM and JS, and in vanilla BYOND programming it is a huge pain in the butt, because the `browse()` API is very convoluted, out of box it can send only strings, and sending data back to DM requires using hrefs. + +``` +location.href = '?src=12345¶m=1' +``` + +If you're familiar with the href syntax of BYOND topic calls, then perhaps this doesn't surprise you, but this API artificially limits you to sending 2048 characters of string-typed data; you need to reinvent the wheel if you want to send something more complex than strings. It differs from the way you send messages from DM. And it's very hard to read as well. + +Thankfully, TGUI implements a very robust protocol that makes this slightly less of an eye sore and very convenient to use in the long run. + +### Message structure + +```ts +{ + type: string; + payload?: any; + // ... +} +``` + +Each message always has a **type**, which is usually (but not always) the first argument on all message sending functions. The next property is the **payload**, which contains all the data sent in the message. + +You can think of it in these terms: + +- **type** - function name +- **payload** - function arguments + +Of course we're not working with functions here, but hopefully this analogy makes the concept easier to understand. + +Finally, message can contain custom properties, and how you use them is *completely up to you*. They have an important limitation - all additional properties are string-typed, and require you to use a slightly more verbose API for sending them (more about it in the next section). + +```js +Byond.sendMessage({ + type: 'click', + payload: { buttonId: 1 }, + popup_section: 'left', +}); +``` + +### DM ➡ JS + +To send a message from DM, you can use the `window.send_message()` proc. + +```dm +window.send_message("alert", list( + text = "Hello, world!", +)) +``` + +To receive it in JS, you have two different syntaxes. First one is the most verbose one, but allows receiving all types of messages, and deciding what to do via `if` conditions. + +> NOTE: We're using ECMAScript 5 syntax here, because this is the version that is supported by IE 11 natively without any additional compilation. If you're coding in a compiled environment (TGUI/Webpack), then feel free to use arrow functions and other fancy syntaxes. +```js +Byond.subscribe(function (type, payload) { + if (type === 'alert') { + window.alert(payload.text); + return; + } + if (type === 'other') { + // ... + return; + } + // ... +}); +``` + +Second one is more compact, because it already filters messages by type and passes the payload directly to the callback. + +```js +Byond.subscribeTo('alert', function (payload) { + window.alert(payload.text); +}); +``` + +### JS ➡ DM + +To send a message from JS, you can use the `Byond.sendMessage()` function. + +```js +Byond.sendMessage('click', { + button: 'explode-mech', +}); +``` + +To receive it in DM, you must register a delegate proc (callback) that will receive the messages (usually called `on_message`), and handle the message in that proc. + +```dm +/datum/my_object/proc/initialize() + // ... + window.subscribe(src, .proc/on_message) +/datum/my_object/proc/on_message(type, payload) + if (type == "click") + process_button_click(payload["button"]) + return +``` + +**Advanced variant** + +You can send messages with custom fields in case if you want to bypass JSON serialization of the **payload**. Not sending the **payload** is a little bit faster if you send a lot of messages (because BYOND is slow in general with proc calls, especially `json_decode`). All raw message fields are available in the third argument `href_list`. + +```js +Byond.sendMessage({ + type: "something", + ref: "[0x12345678]", +}); +``` + +```dm +/datum/my_object/proc/on_message(type, payload, href_list) + if (type == "something") + process_something(locate(href_list["ref"])) + return +``` + +## BYOND Skin API + +There is a full assortment of BYOND client-side features that you can access via the `Byond` API object. + +Full reference of the `Byond` API object is here: [global.d.ts](../global.d.ts). It's a global type definition file, which provides auto-completion in VSCode when coding TGUI interfaces. When writing custom popups outside of TGUI, autocompletion doesn't work, so you might need to peek into this file sometimes. + +Here's the summary of what it has. + +- `Byond.winget()` - Returns a property of a skin element. This is an async function call, more on that later. +- `Byond.winset()` - Sets a property of a skin element. +- `Byond.topic()` - Makes a Topic call to the server. Similar to `sendMessage`, but all topic calls are native to BYOND, string typed and processed in `/client/Topic()` proc. +- `Byond.command()` - Runs a command on the client, as if you typed it into the command bar yourself. Can be any verb, or a special client-side command, such as `.output`. + +> As of now, `Byond.winget()` requires a Promise polyfill, which is only available in compiled TGUI, but not in plain popups, and if you try using it, you'll get a bluescreen error. If you'd like to have winget in non-compiled contexts, then ping maintainers on Discord to request this feature. +When working with `winset` and `winget`, it can be very useful to consult [BYOND 5.0 controls and parameters guide](https://secure.byond.com/docs/ref/skinparams.html) to figure out what you can control in the BYOND client. Via these controls and parameters, you can do many interesting things, such as dynamically define BYOND macros, or show/hide and reposition various skin elements. + +Another source of information is the official [BYOND Reference](https://secure.byond.com/docs/ref/info.html#/{skin}), which is a much larger, but a more comprehensive doc. + +Id of the current tgui window can be accessed via `Byond.windowId`, and below in an example of changing its `size`. + +```js +Byond.winset(Byond.windowId, { + size: '1280x640', +}); +``` + +Id of the main SS13 window is `'mainwindow'`, as defined in [skin.dmf](../../interface/skin.dmf). + +Little known feature, but you can also get non-UI parameters on the client by using a `null` id. + +```js +// Fetch URL of a server client is currently connected to +Byond.winget(null, 'url').then((serverUrl) => { + // Connect to this server + Byond.call(serverUrl); + // Close our client because it is now connecting in background + Byond.command('.quit'); +}); +``` diff --git a/tgui/global.d.ts b/tgui/global.d.ts index 7f2cc8f728..aa8495a249 100644 --- a/tgui/global.d.ts +++ b/tgui/global.d.ts @@ -22,12 +22,29 @@ declare global { export default content; } + type TguiMessage = { + type: string; + payload?: any; + [key: string]: any; + }; + type ByondType = { + /** + * ID of the Byond window this script is running on. + * Can be used as a parameter to winget/winset. + */ + windowId: string; + /** * True if javascript is running in BYOND. */ IS_BYOND: boolean; + /** + * Version of Trident engine of Internet Explorer. Null if N/A. + */ + TRIDENT: number | null; + /** * True if browser is IE8 or lower. */ @@ -80,14 +97,14 @@ declare global { * * Returns a promise with a key-value object containing all properties. */ - winget(id: string): Promise; + winget(id: string | null): Promise; /** * Retrieves all properties of the BYOND skin element. * * Returns a promise with a key-value object containing all properties. */ - winget(id: string, propName: '*'): Promise; + winget(id: string | null, propName: '*'): Promise; /** * Retrieves an exactly one property of the BYOND skin element, @@ -95,7 +112,7 @@ declare global { * * Returns a promise with the value of that property. */ - winget(id: string, propName: string): Promise; + winget(id: string | null, propName: string): Promise; /** * Retrieves multiple properties of the BYOND skin element, @@ -103,30 +120,47 @@ declare global { * * Returns a promise with a key-value object containing listed properties. */ - winget(id: string, propNames: string[]): Promise; + winget(id: string | null, propNames: string[]): Promise; /** - * Assigns properties to BYOND skin elements. + * Assigns properties to BYOND skin elements in bulk. */ winset(props: object): void; /** * Assigns properties to the BYOND skin element. */ - winset(id: string, props: object): void; + winset(id: string | null, props: object): void; /** * Sets a property on the BYOND skin element to a certain value. */ - winset(id: string, propName: string, propValue: any): void; + winset(id: string | null, propName: string, propValue: any): void; /** * Parses BYOND JSON. * - * Uses a special encoding to preverse Infinity and NaN. + * Uses a special encoding to preserve `Infinity` and `NaN`. */ parseJson(text: string): any; + /** + * Sends a message to `/datum/tgui_window` which hosts this window instance. + */ + sendMessage(type: string, payload?: any): void; + sendMessage(message: TguiMessage): void; + + /** + * Subscribe to incoming messages that were sent from `/datum/tgui_window`. + */ + subscribe(listener: (type: string, payload: any) => void): void; + + /** + * Subscribe to incoming messages *of some specific type* + * that were sent from `/datum/tgui_window`. + */ + subscribeTo(type: string, listener: (payload: any) => void): void; + /** * Loads a stylesheet into the document. */ @@ -145,11 +179,6 @@ declare global { const Byond: ByondType; interface Window { - /** - * ID of the Byond window this script is running on. - * Should be used as a parameter to winget/winset. - */ - __windowId__: string; Byond: ByondType; } diff --git a/tgui/packages/tgui-panel/index.js b/tgui/packages/tgui-panel/index.js index fd0f73b0d8..0e08014b2b 100644 --- a/tgui/packages/tgui-panel/index.js +++ b/tgui/packages/tgui-panel/index.js @@ -68,20 +68,11 @@ const setupApp = () => { setupPanelFocusHacks(); captureExternalLinks(); - // Subscribe for Redux state updates + // Re-render UI on store updates store.subscribe(renderApp); - // Subscribe for bankend updates - window.update = msg => store.dispatch(Byond.parseJson(msg)); - - // Process the early update queue - while (true) { - const msg = window.__updateQueue__.shift(); - if (!msg) { - break; - } - window.update(msg); - } + // Dispatch incoming messages as store actions + Byond.subscribe((type, payload) => store.dispatch({ type, payload })); // Unhide the panel Byond.winset('output', { diff --git a/tgui/packages/tgui-panel/ping/middleware.js b/tgui/packages/tgui-panel/ping/middleware.js index b7d8e25a76..2d607c8417 100644 --- a/tgui/packages/tgui-panel/ping/middleware.js +++ b/tgui/packages/tgui-panel/ping/middleware.js @@ -4,7 +4,6 @@ * @license MIT */ -import { sendMessage } from 'tgui/backend'; import { pingFail, pingSuccess } from './actions'; import { PING_INTERVAL, PING_QUEUE_SIZE, PING_TIMEOUT } from './constants'; @@ -23,10 +22,7 @@ export const pingMiddleware = store => { } const ping = { index, sentAt: Date.now() }; pings[index] = ping; - sendMessage({ - type: 'ping', - payload: { index }, - }); + Byond.sendMessage('ping', { index }); index = (index + 1) % PING_QUEUE_SIZE; }; return next => action => { diff --git a/tgui/packages/tgui-panel/telemetry.js b/tgui/packages/tgui-panel/telemetry.js index 31b8541c21..afad245c48 100644 --- a/tgui/packages/tgui-panel/telemetry.js +++ b/tgui/packages/tgui-panel/telemetry.js @@ -4,7 +4,6 @@ * @license MIT */ -import { sendMessage } from 'tgui/backend'; import { storage } from 'common/storage'; import { createLogger } from 'tgui/logging'; @@ -34,14 +33,8 @@ export const telemetryMiddleware = store => { logger.debug('sending'); const limits = payload?.limits || {}; // Trim connections according to the server limit - const connections = telemetry.connections - .slice(0, limits.connections); - sendMessage({ - type: 'telemetry', - payload: { - connections, - }, - }); + const connections = telemetry.connections.slice(0, limits.connections); + Byond.sendMessage('telemetry', { connections }); return; } // Keep telemetry up to date diff --git a/tgui/packages/tgui-polyfill/html5shiv.js b/tgui/packages/tgui-polyfill/00-html5shiv.js similarity index 100% rename from tgui/packages/tgui-polyfill/html5shiv.js rename to tgui/packages/tgui-polyfill/00-html5shiv.js diff --git a/tgui/packages/tgui-polyfill/ie8.js b/tgui/packages/tgui-polyfill/01-ie8.js similarity index 100% rename from tgui/packages/tgui-polyfill/ie8.js rename to tgui/packages/tgui-polyfill/01-ie8.js diff --git a/tgui/packages/tgui-polyfill/dom4.js b/tgui/packages/tgui-polyfill/02-dom4.js similarity index 100% rename from tgui/packages/tgui-polyfill/dom4.js rename to tgui/packages/tgui-polyfill/02-dom4.js diff --git a/tgui/packages/tgui-polyfill/css-om.js b/tgui/packages/tgui-polyfill/03-css-om.js similarity index 100% rename from tgui/packages/tgui-polyfill/css-om.js rename to tgui/packages/tgui-polyfill/03-css-om.js diff --git a/tgui/packages/tgui-polyfill/10-misc.js b/tgui/packages/tgui-polyfill/10-misc.js new file mode 100644 index 0000000000..5a1849e135 --- /dev/null +++ b/tgui/packages/tgui-polyfill/10-misc.js @@ -0,0 +1,61 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +/* eslint-disable */ +(function () { + 'use strict'; + + // Necessary polyfill to make Webpack code splitting work on IE8 + if (!Function.prototype.bind) (function () { + var slice = Array.prototype.slice; + Function.prototype.bind = function () { + var thatFunc = this, thatArg = arguments[0]; + var args = slice.call(arguments, 1); + if (typeof thatFunc !== 'function') { + // closest thing possible to the ECMAScript 5 + // internal IsCallable function + throw new TypeError('Function.prototype.bind - ' + + 'what is trying to be bound is not callable'); + } + return function () { + var funcArgs = args.concat(slice.call(arguments)) + return thatFunc.apply(thatArg, funcArgs); + }; + }; + })(); + + if (!Array.prototype['forEach']) { + Array.prototype.forEach = function (callback, thisArg) { + if (this == null) { + throw new TypeError('Array.prototype.forEach called on null or undefined'); + } + var T, k; + var O = Object(this); + var len = O.length >>> 0; + if (typeof callback !== "function") { + throw new TypeError(callback + ' is not a function'); + } + if (arguments.length > 1) { + T = thisArg; + } + k = 0; + while (k < len) { + var kValue; + if (k in O) { + kValue = O[k]; + callback.call(T, kValue, k, O); + } + k++; + } + }; + } + + // Inferno needs Int32Array, and it is not covered by core-js. + if (!window.Int32Array) { + window.Int32Array = Array; + } + +})(); diff --git a/tgui/packages/tgui-polyfill/index.js b/tgui/packages/tgui-polyfill/index.js index ab69510366..7c45386d8b 100644 --- a/tgui/packages/tgui-polyfill/index.js +++ b/tgui/packages/tgui-polyfill/index.js @@ -4,14 +4,12 @@ * @license MIT */ +// NOTE: There are numbered polyfills, which are baked and injected directly +// into `tgui.html`. See how they're baked in `package.json`. + import 'core-js/es'; import 'core-js/web/immediate'; import 'core-js/web/queue-microtask'; import 'core-js/web/timers'; import 'regenerator-runtime/runtime'; -import './html5shiv'; -import './ie8'; -import './dom4'; -import './css-om'; -import './inferno'; import 'unfetch/polyfill'; diff --git a/tgui/packages/tgui-polyfill/inferno.js b/tgui/packages/tgui-polyfill/inferno.js deleted file mode 100644 index f9182cedb3..0000000000 --- a/tgui/packages/tgui-polyfill/inferno.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -// Inferno needs Int32Array, and it is not covered by core-js. -if (!window.Int32Array) { - window.Int32Array = Array; -} diff --git a/tgui/packages/tgui-polyfill/package.json b/tgui/packages/tgui-polyfill/package.json index 244bdca358..85d004bf99 100644 --- a/tgui/packages/tgui-polyfill/package.json +++ b/tgui/packages/tgui-polyfill/package.json @@ -2,9 +2,15 @@ "private": true, "name": "tgui-polyfill", "version": "4.3.0", + "scripts": { + "tgui-polyfill:build": "terser 00-html5shiv.js 01-ie8.js 02-dom4.js 03-css-om.js 10-misc.js --ie8 -f ascii_only,comments=false -o ../../public/tgui-polyfill.min.js" + }, "dependencies": { "core-js": "^3.22.5", "regenerator-runtime": "^0.13.9", "unfetch": "^4.2.0" + }, + "devDependencies": { + "terser": "^5.13.1" } } diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index 41b2404333..3e57bca72b 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -134,19 +134,15 @@ export const backendMiddleware = store => { } if (type === 'ping') { - sendMessage({ - type: 'pingReply', - }); + Byond.sendMessage('pingReply'); return; } if (type === 'backend/suspendStart' && !suspendInterval) { - logger.log(`suspending (${window.__windowId__})`); + logger.log(`suspending (${Byond.windowId})`); // Keep sending suspend messages until it succeeds. // It may fail multiple times due to topic rate limiting. - const suspendFn = () => sendMessage({ - type: 'suspend', - }); + const suspendFn = () => Byond.sendMessage('suspend'); suspendFn(); suspendInterval = setInterval(suspendFn, 2000); } @@ -155,7 +151,7 @@ export const backendMiddleware = store => { suspendRenderer(); clearInterval(suspendInterval); suspendInterval = undefined; - Byond.winset(window.__windowId__, { + Byond.winset(Byond.windowId, { 'is-visible': false, }); setImmediate(() => focusMap()); @@ -171,7 +167,7 @@ export const backendMiddleware = store => { else if (fancyState !== fancy) { logger.log('changing fancy mode to', fancy); fancyState = fancy; - Byond.winset(window.__windowId__, { + Byond.winset(Byond.windowId, { titlebar: !fancy, 'can-resize': !fancy, }); @@ -195,7 +191,7 @@ export const backendMiddleware = store => { if (suspended) { return; } - Byond.winset(window.__windowId__, { + Byond.winset(Byond.windowId, { 'is-visible': true, }); perf.mark('resume/finish'); @@ -210,25 +206,6 @@ export const backendMiddleware = store => { }; }; -/** - * Sends a message to /datum/tgui_window. - */ -export const sendMessage = (message: any = {}) => { - const { payload, ...rest } = message; - const data: any = { - // Message identifying header - tgui: 1, - window_id: window.__windowId__, - // Message body - ...rest, - }; - // JSON-encode the payload - if (payload !== null && payload !== undefined) { - data.payload = JSON.stringify(payload); - } - Byond.topic(data); -}; - /** * Sends an action to `ui_act` on `src_object` that this tgui window * is associated with. @@ -242,10 +219,7 @@ export const sendAct = (action: string, payload: object = {}) => { logger.error(`Payload for act() must be an object, got this:`, payload); return; } - sendMessage({ - type: 'act/' + action, - payload, - }); + Byond.sendMessage('act/' + action, payload); }; type BackendState = { @@ -273,7 +247,7 @@ type BackendState = { shared: Record, suspending: boolean, suspended: boolean, -} +}; /** * Selects a backend-related slice of Redux state @@ -283,12 +257,9 @@ export const selectBackend = (state: any): BackendState => ( ); /** - * A React hook (sort of) for getting tgui state and related functions. + * Get data from tgui backend. * - * This is supposed to be replaced with a real React Hook, which can only - * be used in functional components. - * - * You can make + * Includes the `act` function for performing DM actions. */ export const useBackend = (context: any) => { const { store } = context; @@ -371,7 +342,7 @@ export const useSharedState = ( return [ sharedState, nextState => { - sendMessage({ + Byond.sendMessage({ type: 'setSharedState', key, value: JSON.stringify( diff --git a/tgui/packages/tgui/components/ByondUi.js b/tgui/packages/tgui/components/ByondUi.js index 07be451e9d..43d4039fcc 100644 --- a/tgui/packages/tgui/components/ByondUi.js +++ b/tgui/packages/tgui/components/ByondUi.js @@ -54,18 +54,19 @@ window.addEventListener('beforeunload', () => { }); /** - * Get the bounding box of the DOM element. + * Get the bounding box of the DOM element in display-pixels. */ const getBoundingBox = element => { + const pixelRatio = window.devicePixelRatio ?? 1; const rect = element.getBoundingClientRect(); return { pos: [ - rect.left, - rect.top, + rect.left * pixelRatio, + rect.top * pixelRatio, ], size: [ - rect.right - rect.left, - rect.bottom - rect.top, + (rect.right - rect.left) * pixelRatio, + (rect.bottom - rect.top) * pixelRatio, ], }; }; @@ -114,7 +115,7 @@ export class ByondUi extends Component { const box = getBoundingBox(this.containerRef.current); logger.debug('bounding box', box); this.byondUiElement.render({ - parent: window.__windowId__, + parent: Byond.windowId, ...params, pos: box.pos[0] + ',' + box.pos[1], size: box.size[0] + 'x' + box.size[1], diff --git a/tgui/packages/tgui/components/Popper.tsx b/tgui/packages/tgui/components/Popper.tsx index 5922e9a569..f5a50f6433 100644 --- a/tgui/packages/tgui/components/Popper.tsx +++ b/tgui/packages/tgui/components/Popper.tsx @@ -1,10 +1,11 @@ -import { createPopper, OptionsGeneric } from "@popperjs/core"; -import { Component, findDOMfromVNode, InfernoNode, render } from "inferno"; +// import { createPopper, OptionsGeneric } from "@popperjs/core"; +import { createPopper, OptionsGeneric } from '@popperjs/core'; +import { Component, findDOMfromVNode, InfernoNode, render } from 'inferno'; type PopperProps = { popperContent: InfernoNode; options?: Partial>; - additionalStyles?: CSSProperties, + additionalStyles?: CSSProperties; }; export class Popper extends Component { @@ -20,12 +21,9 @@ export class Popper extends Component { } componentDidMount() { - const { - additionalStyles, - options, - } = this.props; + const { additionalStyles, options } = this.props; - this.renderedContent = document.createElement("div"); + this.renderedContent = document.createElement('div'); if (additionalStyles) { for (const [attribute, value] of Object.entries(additionalStyles)) { this.renderedContent.style[attribute] = value; @@ -47,7 +45,7 @@ export class Popper extends Component { // immediately if this internal variable is removed. findDOMfromVNode(this.$LI, true), this.renderedContent, - options, + options ); }); } diff --git a/tgui/packages/tgui/debug/middleware.js b/tgui/packages/tgui/debug/middleware.js index 6c11d32e0f..55219dcf5c 100644 --- a/tgui/packages/tgui/debug/middleware.js +++ b/tgui/packages/tgui/debug/middleware.js @@ -44,7 +44,7 @@ export const relayMiddleware = store => { if (externalBrowser) { devServer.subscribe(msg => { const { type, payload } = msg; - if (type === 'relay' && payload.windowId === window.__windowId__) { + if (type === 'relay' && payload.windowId === Byond.windowId) { store.dispatch({ ...payload.action, relayed: true, @@ -70,7 +70,7 @@ export const relayMiddleware = store => { devServer.sendMessage({ type: 'relay', payload: { - windowId: window.__windowId__, + windowId: Byond.windowId, action, }, }); diff --git a/tgui/packages/tgui/drag.js b/tgui/packages/tgui/drag.js index d6f0967a8d..406b730b1a 100644 --- a/tgui/packages/tgui/drag.js +++ b/tgui/packages/tgui/drag.js @@ -5,12 +5,13 @@ */ import { storage } from 'common/storage'; -import { vecAdd, vecInverse, vecMultiply, vecScale } from 'common/vector'; +import { vecAdd, vecSubtract, vecMultiply, vecScale } from 'common/vector'; import { createLogger } from './logging'; const logger = createLogger('drag'); +const pixelRatio = window.devicePixelRatio ?? 1; -let windowKey = window.__windowId__; +let windowKey = Byond.windowId; let dragging = false; let resizing = false; let screenOffset = [0, 0]; @@ -24,37 +25,37 @@ export const setWindowKey = key => { windowKey = key; }; -export const getWindowPosition = () => [ - window.screenLeft, - window.screenTop, +const getWindowPosition = () => [ + window.screenLeft * pixelRatio, + window.screenTop * pixelRatio, ]; -export const getWindowSize = () => [ - window.innerWidth, - window.innerHeight, +const getWindowSize = () => [ + window.innerWidth * pixelRatio, + window.innerHeight * pixelRatio, ]; -export const setWindowPosition = vec => { +const setWindowPosition = vec => { const byondPos = vecAdd(vec, screenOffset); - return Byond.winset(window.__windowId__, { + return Byond.winset(Byond.windowId, { pos: byondPos[0] + ',' + byondPos[1], }); }; -export const setWindowSize = vec => { - return Byond.winset(window.__windowId__, { +const setWindowSize = vec => { + return Byond.winset(Byond.windowId, { size: vec[0] + 'x' + vec[1], }); }; -export const getScreenPosition = () => [ +const getScreenPosition = () => [ 0 - screenOffset[0], 0 - screenOffset[1], ]; -export const getScreenSize = () => [ - window.screen.availWidth, - window.screen.availHeight, +const getScreenSize = () => [ + window.screen.availWidth * pixelRatio, + window.screen.availHeight * pixelRatio, ]; /** @@ -83,7 +84,7 @@ const touchRecents = (recents, touchedItem, limit = 50) => { return [nextRecents, trimmedItem]; }; -export const storeWindowGeometry = async () => { +const storeWindowGeometry = async () => { logger.log('storing geometry'); const geometry = { pos: getWindowPosition(), @@ -106,14 +107,19 @@ export const recallWindowGeometry = async (options = {}) => { if (geometry) { logger.log('recalled geometry:', geometry); } + // options.pos is assumed to already be in display-pixels let pos = geometry?.pos || options.pos; let size = options.size; + // Convert size from css-pixels to display-pixels + if (size) { + size = [ + size[0] * pixelRatio, + size[1] * pixelRatio, + ]; + } // Wait until screen offset gets resolved await screenOffsetPromise; - const areaAvailable = [ - window.screen.availWidth, - window.screen.availHeight, - ]; + const areaAvailable = getScreenSize(); // Set window size if (size) { // Constraint size to not exceed available screen area. @@ -143,10 +149,12 @@ export const recallWindowGeometry = async (options = {}) => { export const setupDrag = async () => { // Calculate screen offset caused by the windows taskbar - screenOffsetPromise = Byond.winget(window.__windowId__, 'pos') + let windowPosition = getWindowPosition(); + + screenOffsetPromise = Byond.winget(Byond.windowId, 'pos') .then(pos => [ - pos.x - window.screenLeft, - pos.y - window.screenTop, + pos.x - windowPosition[0], + pos.y - windowPosition[1], ]); screenOffset = await screenOffsetPromise; logger.debug('screen offset', screenOffset); @@ -179,10 +187,10 @@ const constraintPosition = (pos, size) => { export const dragStartHandler = event => { logger.log('drag start'); dragging = true; - dragPointOffset = [ - window.screenLeft - event.screenX, - window.screenTop - event.screenY, - ]; + let windowPosition = getWindowPosition(); + dragPointOffset = vecSubtract( + [event.screenX, event.screenY], + getWindowPosition()); // Focus click target event.target?.focus(); document.addEventListener('mousemove', dragMoveHandler); @@ -204,7 +212,7 @@ const dragMoveHandler = event => { return; } event.preventDefault(); - setWindowPosition(vecAdd( + setWindowPosition(vecSubtract( [event.screenX, event.screenY], dragPointOffset)); }; @@ -213,14 +221,10 @@ export const resizeStartHandler = (x, y) => event => { resizeMatrix = [x, y]; logger.log('resize start', resizeMatrix); resizing = true; - dragPointOffset = [ - window.screenLeft - event.screenX, - window.screenTop - event.screenY, - ]; - initialSize = [ - window.innerWidth, - window.innerHeight, - ]; + dragPointOffset = vecSubtract( + [event.screenX, event.screenY], + getWindowPosition()); + initialSize = getWindowSize(); // Focus click target event.target?.focus(); document.addEventListener('mousemove', resizeMoveHandler); @@ -242,13 +246,19 @@ const resizeMoveHandler = event => { return; } event.preventDefault(); - size = vecAdd(initialSize, vecMultiply(resizeMatrix, vecAdd( + const currentOffset = vecSubtract( [event.screenX, event.screenY], - vecInverse([window.screenLeft, window.screenTop]), - dragPointOffset, - [1, 1]))); + getWindowPosition()); + const delta = vecSubtract( + currentOffset, + dragPointOffset); + // Extra 1x1 area is added to ensure the browser can see the cursor + size = vecAdd( + initialSize, + vecMultiply(resizeMatrix, delta), + [1, 1]); // Sane window size values - size[0] = Math.max(size[0], 150); - size[1] = Math.max(size[1], 50); + size[0] = Math.max(size[0], 150 * pixelRatio); + size[1] = Math.max(size[1], 50 * pixelRatio); setWindowSize(size); }; diff --git a/tgui/packages/tgui/focus.js b/tgui/packages/tgui/focus.js index 60c6e430a2..bb97b75d3b 100644 --- a/tgui/packages/tgui/focus.js +++ b/tgui/packages/tgui/focus.js @@ -19,7 +19,7 @@ export const focusMap = () => { * Moves focus to the browser window. */ export const focusWindow = () => { - Byond.winset(window.__windowId__, { + Byond.winset(Byond.windowId, { focus: true, }); }; diff --git a/tgui/packages/tgui/index.js b/tgui/packages/tgui/index.js index 742032ab57..653b422812 100644 --- a/tgui/packages/tgui/index.js +++ b/tgui/packages/tgui/index.js @@ -53,20 +53,11 @@ const setupApp = () => { setupHotKeys(); captureExternalLinks(); - // Subscribe for state updates + // Re-render UI on store updates store.subscribe(renderApp); - // Dispatch incoming messages - window.update = msg => store.dispatch(Byond.parseJson(msg)); - - // Process the early update queue - while (true) { - const msg = window.__updateQueue__.shift(); - if (!msg) { - break; - } - window.update(msg); - } + // Dispatch incoming messages as store actions + Byond.subscribe((type, payload) => store.dispatch({ type, payload })); // Enable hot module reloading if (module.hot) { diff --git a/tgui/packages/tgui/layouts/Window.js b/tgui/packages/tgui/layouts/Window.js index a291cc6d5a..1e6d55d032 100644 --- a/tgui/packages/tgui/layouts/Window.js +++ b/tgui/packages/tgui/layouts/Window.js @@ -28,7 +28,7 @@ export class Window extends Component { if (suspended) { return; } - Byond.winset(window.__windowId__, { + Byond.winset(Byond.windowId, { 'can-close': Boolean(canClose), }); logger.log('mounting'); diff --git a/tgui/packages/tgui/links.js b/tgui/packages/tgui/links.js index c489db10aa..5c1a34d46d 100644 --- a/tgui/packages/tgui/links.js +++ b/tgui/packages/tgui/links.js @@ -39,9 +39,7 @@ export const captureExternalLinks = () => { url = 'https://' + url; } // Open the link - Byond.topic({ - tgui: 1, - window_id: window.__windowId__, + Byond.sendMessage({ type: 'openLink', url, }); diff --git a/tgui/packages/tgui/logging.js b/tgui/packages/tgui/logging.js index 341eb609e3..9138964c5c 100644 --- a/tgui/packages/tgui/logging.js +++ b/tgui/packages/tgui/logging.js @@ -32,9 +32,7 @@ const log = (level, ns, ...args) => { .filter(value => value) .join(' ') + '\nUser Agent: ' + navigator.userAgent; - Byond.topic({ - tgui: 1, - window_id: window.__windowId__, + Byond.sendMessage({ type: 'log', ns, message: logEntry, diff --git a/tgui/packages/tgui/stories/ByondUi.stories.js b/tgui/packages/tgui/stories/ByondUi.stories.js index 7d7e37424e..ca88d1028f 100644 --- a/tgui/packages/tgui/stories/ByondUi.stories.js +++ b/tgui/packages/tgui/stories/ByondUi.stories.js @@ -16,7 +16,7 @@ export const meta = { const Story = (props, context) => { const [code, setCode] = useLocalState(context, 'byondUiEvalCode', - `Byond.winset('${window.__windowId__}', {\n 'is-visible': true,\n})`); + `Byond.winset('${Byond.windowId}', {\n 'is-visible': true,\n})`); return ( <>
diff --git a/tgui/public/tgui-common.bundle.js b/tgui/public/tgui-common.bundle.js index f4e42e8f8e..a2cf17ae6d 100644 --- a/tgui/public/tgui-common.bundle.js +++ b/tgui/public/tgui-common.bundle.js @@ -1 +1 @@ -(self.webpackChunktgui_workspace=self.webpackChunktgui_workspace||[]).push([[962],{21926:function(e,t,n){"use strict";t.__esModule=!0,t.createPopper=void 0,t.popperGenerator=v;var r=d(n(48764)),o=d(n(68349)),i=d(n(3671)),a=d(n(55490)),u=(d(n(40755)),d(n(69282))),c=d(n(27672)),s=(d(n(30752)),d(n(12459)),d(n(27629)),d(n(54220))),l=d(n(75949));t.detectOverflow=l["default"];var f=n(79388);n(15954);function d(e){return e&&e.__esModule?e:{"default":e}}var p={placement:"bottom",modifiers:[],strategy:"absolute"};function h(){for(var e=arguments.length,t=new Array(e),n=0;n0&&(i=(0,o.round)(n.width)/c||1),u>0&&(a=(0,o.round)(n.height)/u||1)}return{width:n.width/i,height:n.height/a,top:n.top/a,right:n.right/i,bottom:n.bottom/a,left:n.left/i,x:n.left/i,y:n.top/a}};var r=n(79388),o=n(36291)},65647:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){var r="clippingParents"===t?function(e){var t=(0,a["default"])((0,d["default"])(e)),n=["absolute","fixed"].indexOf((0,s["default"])(e).position)>=0&&(0,l.isHTMLElement)(e)?(0,u["default"])(e):e;if(!(0,l.isElement)(n))return[];return t.filter((function(e){return(0,l.isElement)(e)&&(0,p["default"])(e,n)&&"body"!==(0,h["default"])(e)}))}(e):[].concat(t),o=[].concat(r,[n]),i=o[0],c=o.reduce((function(t,n){var r=y(e,n);return t.top=(0,m.max)(r.top,t.top),t.right=(0,m.min)(r.right,t.right),t.bottom=(0,m.min)(r.bottom,t.bottom),t.left=(0,m.max)(r.left,t.left),t}),y(e,i));return c.width=c.right-c.left,c.height=c.bottom-c.top,c.x=c.left,c.y=c.top,c};var r=n(15954),o=g(n(8204)),i=g(n(40015)),a=g(n(3671)),u=g(n(55490)),c=g(n(25890)),s=g(n(40755)),l=n(79388),f=g(n(11100)),d=g(n(95136)),p=g(n(62215)),h=g(n(38569)),v=g(n(73060)),m=n(36291);function g(e){return e&&e.__esModule?e:{"default":e}}function y(e,t){return t===r.viewport?(0,v["default"])((0,o["default"])(e)):(0,l.isElement)(t)?function(e){var t=(0,f["default"])(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}(t):(0,v["default"])((0,i["default"])((0,c["default"])(e)))}},48764:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t,n){void 0===n&&(n=!1);var f=(0,a.isHTMLElement)(t),d=(0,a.isHTMLElement)(t)&&function(e){var t=e.getBoundingClientRect(),n=(0,l.round)(t.width)/e.offsetWidth||1,r=(0,l.round)(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(t),p=(0,c["default"])(t),h=(0,r["default"])(e,d),v={scrollLeft:0,scrollTop:0},m={x:0,y:0};(f||!f&&!n)&&(("body"!==(0,i["default"])(t)||(0,s["default"])(p))&&(v=(0,o["default"])(t)),(0,a.isHTMLElement)(t)?((m=(0,r["default"])(t,!0)).x+=t.clientLeft,m.y+=t.clientTop):p&&(m.x=(0,u["default"])(p)));return{x:h.left+v.scrollLeft-m.x,y:h.top+v.scrollTop-m.y,width:h.width,height:h.height}};var r=f(n(11100)),o=f(n(3514)),i=f(n(38569)),a=n(79388),u=f(n(36056)),c=f(n(25890)),s=f(n(57360)),l=n(36291);function f(e){return e&&e.__esModule?e:{"default":e}}},40755:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,o["default"])(e).getComputedStyle(e)};var r,o=(r=n(96904))&&r.__esModule?r:{"default":r}},25890:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(((0,r.isElement)(e)?e.ownerDocument:e.document)||window.document).documentElement};var r=n(79388)},40015:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=(0,r["default"])(e),c=(0,a["default"])(e),s=null==(t=e.ownerDocument)?void 0:t.body,l=(0,u.max)(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),f=(0,u.max)(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),d=-c.scrollLeft+(0,i["default"])(e),p=-c.scrollTop;"rtl"===(0,o["default"])(s||n).direction&&(d+=(0,u.max)(n.clientWidth,s?s.clientWidth:0)-l);return{width:l,height:f,x:d,y:p}};var r=c(n(25890)),o=c(n(40755)),i=c(n(36056)),a=c(n(69211)),u=n(36291);function c(e){return e&&e.__esModule?e:{"default":e}}},41829:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}},68349:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=e.offsetWidth,r=e.offsetHeight;Math.abs(t.width-n)<=1&&(n=t.width);Math.abs(t.height-r)<=1&&(r=t.height);return{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}};var r,o=(r=n(11100))&&r.__esModule?r:{"default":r}},38569:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e?(e.nodeName||"").toLowerCase():null}},3514:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return e!==(0,o["default"])(e)&&(0,i.isHTMLElement)(e)?(0,a["default"])(e):(0,r["default"])(e)};var r=u(n(69211)),o=u(n(96904)),i=n(79388),a=u(n(41829));function u(e){return e&&e.__esModule?e:{"default":e}}},55490:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=l(e);for(;n&&(0,u["default"])(n)&&"static"===(0,i["default"])(n).position;)n=l(n);if(n&&("html"===(0,o["default"])(n)||"body"===(0,o["default"])(n)&&"static"===(0,i["default"])(n).position))return t;return n||function(e){var t=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&(0,a.isHTMLElement)(e)){if("fixed"===(0,i["default"])(e).position)return null}var n=(0,c["default"])(e);(0,a.isShadowRoot)(n)&&(n=n.host);for(;(0,a.isHTMLElement)(n)&&["html","body"].indexOf((0,o["default"])(n))<0;){var r=(0,i["default"])(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t};var r=s(n(96904)),o=s(n(38569)),i=s(n(40755)),a=n(79388),u=s(n(94437)),c=s(n(95136));function s(e){return e&&e.__esModule?e:{"default":e}}function l(e){return(0,a.isHTMLElement)(e)&&"fixed"!==(0,i["default"])(e).position?e.offsetParent:null}},95136:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){if("html"===(0,r["default"])(e))return e;return e.assignedSlot||e.parentNode||((0,i.isShadowRoot)(e)?e.host:null)||(0,o["default"])(e)};var r=a(n(38569)),o=a(n(25890)),i=n(79388);function a(e){return e&&e.__esModule?e:{"default":e}}},43367:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function c(e){if(["html","body","#document"].indexOf((0,i["default"])(e))>=0)return e.ownerDocument.body;if((0,a.isHTMLElement)(e)&&(0,o["default"])(e))return e;return c((0,r["default"])(e))};var r=u(n(95136)),o=u(n(57360)),i=u(n(38569)),a=n(79388);function u(e){return e&&e.__esModule?e:{"default":e}}},8204:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,r["default"])(e),n=(0,o["default"])(e),a=t.visualViewport,u=n.clientWidth,c=n.clientHeight,s=0,l=0;a&&(u=a.width,c=a.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(s=a.offsetLeft,l=a.offsetTop));return{width:u,height:c,x:s+(0,i["default"])(e),y:l}};var r=a(n(96904)),o=a(n(25890)),i=a(n(36056));function a(e){return e&&e.__esModule?e:{"default":e}}},96904:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}},69211:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=t.pageXOffset,r=t.pageYOffset;return{scrollLeft:n,scrollTop:r}};var r,o=(r=n(96904))&&r.__esModule?r:{"default":r}},36056:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return(0,r["default"])((0,o["default"])(e)).left+(0,i["default"])(e).scrollLeft};var r=a(n(11100)),o=a(n(25890)),i=a(n(69211));function a(e){return e&&e.__esModule?e:{"default":e}}},79388:function(e,t,n){"use strict";t.__esModule=!0,t.isElement=function(e){var t=(0,o["default"])(e).Element;return e instanceof t||e instanceof Element},t.isHTMLElement=function(e){var t=(0,o["default"])(e).HTMLElement;return e instanceof t||e instanceof HTMLElement},t.isShadowRoot=function(e){if("undefined"==typeof ShadowRoot)return!1;var t=(0,o["default"])(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot};var r,o=(r=n(96904))&&r.__esModule?r:{"default":r}},57360:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=(0,o["default"])(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)};var r,o=(r=n(40755))&&r.__esModule?r:{"default":r}},94437:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return["table","td","th"].indexOf((0,o["default"])(e))>=0};var r,o=(r=n(38569))&&r.__esModule?r:{"default":r}},3671:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function c(e,t){var n;void 0===t&&(t=[]);var u=(0,r["default"])(e),s=u===(null==(n=e.ownerDocument)?void 0:n.body),l=(0,i["default"])(u),f=s?[l].concat(l.visualViewport||[],(0,a["default"])(u)?u:[]):u,d=t.concat(f);return s?d:d.concat(c((0,o["default"])(f)))};var r=u(n(43367)),o=u(n(95136)),i=u(n(96904)),a=u(n(57360));function u(e){return e&&e.__esModule?e:{"default":e}}},15954:function(e,t){"use strict";t.__esModule=!0,t.write=t.viewport=t.variationPlacements=t.top=t.start=t.right=t.reference=t.read=t.popper=t.placements=t.modifierPhases=t.main=t.left=t.end=t.clippingParents=t.bottom=t.beforeWrite=t.beforeRead=t.beforeMain=t.basePlacements=t.auto=t.afterWrite=t.afterRead=t.afterMain=void 0;t.top="top";var n="bottom";t.bottom=n;var r="right";t.right=r;var o="left";t.left=o;var i="auto";t.auto=i;var a=["top",n,r,o];t.basePlacements=a;var u="start";t.start=u;var c="end";t.end=c;t.clippingParents="clippingParents";t.viewport="viewport";t.popper="popper";t.reference="reference";var s=a.reduce((function(e,t){return e.concat([t+"-"+u,t+"-"+c])}),[]);t.variationPlacements=s;var l=[].concat(a,[i]).reduce((function(e,t){return e.concat([t,t+"-"+u,t+"-"+c])}),[]);t.placements=l;var f="beforeRead";t.beforeRead=f;var d="read";t.read=d;var p="afterRead";t.afterRead=p;var h="beforeMain";t.beforeMain=h;var v="main";t.main=v;var m="afterMain";t.afterMain=m;var g="beforeWrite";t.beforeWrite=g;var y="write";t.write=y;var b="afterWrite";t.afterWrite=b;var w=[f,d,p,h,v,m,g,y,b];t.modifierPhases=w},37809:function(e,t,n){"use strict";t.__esModule=!0;var r={popperGenerator:!0,detectOverflow:!0,createPopperBase:!0,createPopper:!0,createPopperLite:!0};t.popperGenerator=t.detectOverflow=t.createPopperLite=t.createPopperBase=t.createPopper=void 0;var o=n(15954);Object.keys(o).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===o[e]||(t[e]=o[e]))}));var i=n(4207);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===i[e]||(t[e]=i[e]))}));var a=n(21926);t.popperGenerator=a.popperGenerator,t.detectOverflow=a.detectOverflow,t.createPopperBase=a.createPopper;var u=n(17827);t.createPopper=u.createPopper;var c=n(47952);t.createPopperLite=c.createPopper},89290:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r,o=(r=n(38569))&&r.__esModule?r:{"default":r},i=n(79388);var a={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]||{},a=t.elements[e];(0,i.isHTMLElement)(a)&&(0,o["default"])(a)&&(Object.assign(a.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?a.removeAttribute(e):a.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],a=t.attributes[e]||{},u=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});(0,i.isHTMLElement)(r)&&(0,o["default"])(r)&&(Object.assign(r.style,u),Object.keys(a).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]};t["default"]=a},71313:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r=d(n(27629)),o=d(n(68349)),i=d(n(62215)),a=d(n(55490)),u=d(n(78772)),c=n(54444),s=d(n(11277)),l=d(n(45674)),f=n(15954);n(79388);function d(e){return e&&e.__esModule?e:{"default":e}}var p=function(e,t){return e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e,(0,s["default"])("number"!=typeof e?e:(0,l["default"])(e,f.basePlacements))};var h={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,s=e.options,l=n.elements.arrow,d=n.modifiersData.popperOffsets,h=(0,r["default"])(n.placement),v=(0,u["default"])(h),m=[f.left,f.right].indexOf(h)>=0?"height":"width";if(l&&d){var g=p(s.padding,n),y=(0,o["default"])(l),b="y"===v?f.top:f.left,w="y"===v?f.bottom:f.right,_=n.rects.reference[m]+n.rects.reference[v]-d[v]-n.rects.popper[m],x=d[v]-n.rects.reference[v],E=(0,a["default"])(l),C=E?"y"===v?E.clientHeight||0:E.clientWidth||0:0,N=_/2-x/2,S=g[b],O=C-y[m]-g[w],k=C/2-y[m]/2+N,M=(0,c.within)(S,k,O),T=v;n.modifiersData[i]=((t={})[T]=M,t.centerOffset=M-k,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)))&&(0,i["default"])(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};t["default"]=h},54680:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.mapToStyles=p;var r=n(15954),o=f(n(55490)),i=f(n(96904)),a=f(n(25890)),u=f(n(40755)),c=f(n(27629)),s=f(n(31686)),l=n(36291);function f(e){return e&&e.__esModule?e:{"default":e}}var d={top:"auto",right:"auto",bottom:"auto",left:"auto"};function p(e){var t,n=e.popper,c=e.popperRect,s=e.placement,f=e.variation,p=e.offsets,h=e.position,v=e.gpuAcceleration,m=e.adaptive,g=e.roundOffsets,y=e.isFixed,b=p.x,w=void 0===b?0:b,_=p.y,x=void 0===_?0:_,E="function"==typeof g?g({x:w,y:x}):{x:w,y:x};w=E.x,x=E.y;var C=p.hasOwnProperty("x"),N=p.hasOwnProperty("y"),S=r.left,O=r.top,k=window;if(m){var M=(0,o["default"])(n),T="clientHeight",A="clientWidth";if(M===(0,i["default"])(n)&&(M=(0,a["default"])(n),"static"!==(0,u["default"])(M).position&&"absolute"===h&&(T="scrollHeight",A="scrollWidth")),s===r.top||(s===r.left||s===r.right)&&f===r.end)O=r.bottom,x-=(y&&M===k&&k.visualViewport?k.visualViewport.height:M[T])-c.height,x*=v?1:-1;if(s===r.left||(s===r.top||s===r.bottom)&&f===r.end)S=r.right,w-=(y&&M===k&&k.visualViewport?k.visualViewport.width:M[A])-c.width,w*=v?1:-1}var I,L=Object.assign({position:h},m&&d),P=!0===g?function(e){var t=e.x,n=e.y,r=window.devicePixelRatio||1;return{x:(0,l.round)(t*r)/r||0,y:(0,l.round)(n*r)/r||0}}({x:w,y:x}):{x:w,y:x};return w=P.x,x=P.y,v?Object.assign({},L,((I={})[O]=N?"0":"",I[S]=C?"0":"",I.transform=(k.devicePixelRatio||1)<=1?"translate("+w+"px, "+x+"px)":"translate3d("+w+"px, "+x+"px, 0)",I)):Object.assign({},L,((t={})[O]=N?x+"px":"",t[S]=C?w+"px":"",t.transform="",t))}var h={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,u=n.roundOffsets,l=void 0===u||u,f={placement:(0,c["default"])(t.placement),variation:(0,s["default"])(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,p(Object.assign({},f,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:a,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,p(Object.assign({},f,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}};t["default"]=h},53887:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r,o=(r=n(96904))&&r.__esModule?r:{"default":r};var i={passive:!0};var a={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,a=r.scroll,u=void 0===a||a,c=r.resize,s=void 0===c||c,l=(0,o["default"])(t.elements.popper),f=[].concat(t.scrollParents.reference,t.scrollParents.popper);return u&&f.forEach((function(e){e.addEventListener("scroll",n.update,i)})),s&&l.addEventListener("resize",n.update,i),function(){u&&f.forEach((function(e){e.removeEventListener("scroll",n.update,i)})),s&&l.removeEventListener("resize",n.update,i)}},data:{}};t["default"]=a},82566:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r=l(n(31477)),o=l(n(27629)),i=l(n(44214)),a=l(n(75949)),u=l(n(2894)),c=n(15954),s=l(n(31686));function l(e){return e&&e.__esModule?e:{"default":e}}var f={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,l=e.name;if(!t.modifiersData[l]._skip){for(var f=n.mainAxis,d=void 0===f||f,p=n.altAxis,h=void 0===p||p,v=n.fallbackPlacements,m=n.padding,g=n.boundary,y=n.rootBoundary,b=n.altBoundary,w=n.flipVariations,_=void 0===w||w,x=n.allowedAutoPlacements,E=t.options.placement,C=(0,o["default"])(E),N=v||(C===E||!_?[(0,r["default"])(E)]:function(e){if((0,o["default"])(e)===c.auto)return[];var t=(0,r["default"])(e);return[(0,i["default"])(e),t,(0,i["default"])(t)]}(E)),S=[E].concat(N).reduce((function(e,n){return e.concat((0,o["default"])(n)===c.auto?(0,u["default"])(t,{placement:n,boundary:g,rootBoundary:y,padding:m,flipVariations:_,allowedAutoPlacements:x}):n)}),[]),O=t.rects.reference,k=t.rects.popper,M=new Map,T=!0,A=S[0],I=0;I=0,B=j?"width":"height",R=(0,a["default"])(t,{placement:L,boundary:g,rootBoundary:y,altBoundary:b,padding:m}),D=j?V?c.right:c.left:V?c.bottom:c.top;O[B]>k[B]&&(D=(0,r["default"])(D));var F=(0,r["default"])(D),K=[];if(d&&K.push(R[P]<=0),h&&K.push(R[D]<=0,R[F]<=0),K.every((function(e){return e}))){A=L,T=!1;break}M.set(L,K)}if(T)for(var Y=function(e){var t=S.find((function(t){var n=M.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return A=t,"break"},z=_?3:1;z>0;z--){if("break"===Y(z))break}t.placement!==A&&(t.modifiersData[l]._skip=!0,t.placement=A,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};t["default"]=f},27353:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r,o=n(15954),i=(r=n(75949))&&r.__esModule?r:{"default":r};function a(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 u(e){return[o.top,o.right,o.bottom,o.left].some((function(t){return e[t]>=0}))}var c={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,c=t.modifiersData.preventOverflow,s=(0,i["default"])(t,{elementContext:"reference"}),l=(0,i["default"])(t,{altBoundary:!0}),f=a(s,r),d=a(l,o,c),p=u(f),h=u(d);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:d,isReferenceHidden:p,hasPopperEscaped:h},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":h})}};t["default"]=c},4207:function(e,t,n){"use strict";t.__esModule=!0,t.preventOverflow=t.popperOffsets=t.offset=t.hide=t.flip=t.eventListeners=t.computeStyles=t.arrow=t.applyStyles=void 0;var r=d(n(89290));t.applyStyles=r["default"];var o=d(n(71313));t.arrow=o["default"];var i=d(n(54680));t.computeStyles=i["default"];var a=d(n(53887));t.eventListeners=a["default"];var u=d(n(82566));t.flip=u["default"];var c=d(n(27353));t.hide=c["default"];var s=d(n(99873));t.offset=s["default"];var l=d(n(83662));t.popperOffsets=l["default"];var f=d(n(21031));function d(e){return e&&e.__esModule?e:{"default":e}}t.preventOverflow=f["default"]},99873:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0,t.distanceAndSkiddingToXY=a;var r,o=(r=n(27629))&&r.__esModule?r:{"default":r},i=n(15954);function a(e,t,n){var r=(0,o["default"])(e),a=[i.left,i.top].indexOf(r)>=0?-1:1,u="function"==typeof n?n(Object.assign({},t,{placement:e})):n,c=u[0],s=u[1];return c=c||0,s=(s||0)*a,[i.left,i.right].indexOf(r)>=0?{x:s,y:c}:{x:c,y:s}}var u={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,u=void 0===o?[0,0]:o,c=i.placements.reduce((function(e,n){return e[n]=a(n,t.rects,u),e}),{}),s=c[t.placement],l=s.x,f=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=f),t.modifiersData[r]=c}};t["default"]=u},83662:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r,o=(r=n(2002))&&r.__esModule?r:{"default":r};var i={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=(0,o["default"])({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};t["default"]=i},21031:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=void 0;var r=n(15954),o=h(n(27629)),i=h(n(78772)),a=h(n(16696)),u=n(54444),c=h(n(68349)),s=h(n(55490)),l=h(n(75949)),f=h(n(31686)),d=h(n(22710)),p=n(36291);function h(e){return e&&e.__esModule?e:{"default":e}}var v={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,h=e.name,v=n.mainAxis,m=void 0===v||v,g=n.altAxis,y=void 0!==g&&g,b=n.boundary,w=n.rootBoundary,_=n.altBoundary,x=n.padding,E=n.tether,C=void 0===E||E,N=n.tetherOffset,S=void 0===N?0:N,O=(0,l["default"])(t,{boundary:b,rootBoundary:w,padding:x,altBoundary:_}),k=(0,o["default"])(t.placement),M=(0,f["default"])(t.placement),T=!M,A=(0,i["default"])(k),I=(0,a["default"])(A),L=t.modifiersData.popperOffsets,P=t.rects.reference,V=t.rects.popper,j="function"==typeof S?S(Object.assign({},t.rects,{placement:t.placement})):S,B="number"==typeof j?{mainAxis:j,altAxis:j}:Object.assign({mainAxis:0,altAxis:0},j),R=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,D={x:0,y:0};if(L){if(m){var F,K="y"===A?r.top:r.left,Y="y"===A?r.bottom:r.right,z="y"===A?"height":"width",U=L[A],H=U+O[K],W=U-O[Y],G=C?-V[z]/2:0,$=M===r.start?P[z]:V[z],q=M===r.start?-V[z]:-P[z],X=t.elements.arrow,Z=C&&X?(0,c["default"])(X):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:(0,d["default"])(),J=Q[K],ee=Q[Y],te=(0,u.within)(0,P[z],Z[z]),ne=T?P[z]/2-G-te-J-B.mainAxis:$-te-J-B.mainAxis,re=T?-P[z]/2+G+te+ee+B.mainAxis:q+te+ee+B.mainAxis,oe=t.elements.arrow&&(0,s["default"])(t.elements.arrow),ie=oe?"y"===A?oe.clientTop||0:oe.clientLeft||0:0,ae=null!=(F=null==R?void 0:R[A])?F:0,ue=U+ne-ae-ie,ce=U+re-ae,se=(0,u.within)(C?(0,p.min)(H,ue):H,U,C?(0,p.max)(W,ce):W);L[A]=se,D[A]=se-U}if(y){var le,fe="x"===A?r.top:r.left,de="x"===A?r.bottom:r.right,pe=L[I],he="y"===I?"height":"width",ve=pe+O[fe],me=pe-O[de],ge=-1!==[r.top,r.left].indexOf(k),ye=null!=(le=null==R?void 0:R[I])?le:0,be=ge?ve:pe-P[he]-V[he]-ye+B.altAxis,we=ge?pe+P[he]+V[he]-ye-B.altAxis:me,_e=C&&ge?(0,u.withinMaxClamp)(be,pe,we):(0,u.within)(C?be:ve,pe,C?we:me);L[I]=_e,D[I]=_e-pe}t.modifiersData[h]=D}},requiresIfExists:["offset"]};t["default"]=v},47952:function(e,t,n){"use strict";t.__esModule=!0,t.defaultModifiers=t.createPopper=void 0;var r=n(21926);t.popperGenerator=r.popperGenerator,t.detectOverflow=r.detectOverflow;var o=c(n(53887)),i=c(n(83662)),a=c(n(54680)),u=c(n(89290));function c(e){return e&&e.__esModule?e:{"default":e}}var s=[o["default"],i["default"],a["default"],u["default"]];t.defaultModifiers=s;var l=(0,r.popperGenerator)({defaultModifiers:s});t.createPopper=l},17827:function(e,t,n){"use strict";t.__esModule=!0;var r={createPopper:!0,createPopperLite:!0,defaultModifiers:!0,popperGenerator:!0,detectOverflow:!0};t.defaultModifiers=t.createPopperLite=t.createPopper=void 0;var o=n(21926);t.popperGenerator=o.popperGenerator,t.detectOverflow=o.detectOverflow;var i=m(n(53887)),a=m(n(83662)),u=m(n(54680)),c=m(n(89290)),s=m(n(99873)),l=m(n(82566)),f=m(n(21031)),d=m(n(71313)),p=m(n(27353)),h=n(47952);t.createPopperLite=h.createPopper;var v=n(4207);function m(e){return e&&e.__esModule?e:{"default":e}}Object.keys(v).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===v[e]||(t[e]=v[e]))}));var g=[i["default"],a["default"],u["default"],c["default"],s["default"],l["default"],f["default"],d["default"],p["default"]];t.defaultModifiers=g;var y=(0,o.popperGenerator)({defaultModifiers:g});t.createPopperLite=t.createPopper=y},2894:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,u=n.placement,c=n.boundary,s=n.rootBoundary,l=n.padding,f=n.flipVariations,d=n.allowedAutoPlacements,p=void 0===d?o.placements:d,h=(0,r["default"])(u),v=h?f?o.variationPlacements:o.variationPlacements.filter((function(e){return(0,r["default"])(e)===h})):o.basePlacements,m=v.filter((function(e){return p.indexOf(e)>=0}));0===m.length&&(m=v);var g=m.reduce((function(t,n){return t[n]=(0,i["default"])(e,{placement:n,boundary:c,rootBoundary:s,padding:l})[(0,a["default"])(n)],t}),{});return Object.keys(g).sort((function(e,t){return g[e]-g[t]}))};var r=u(n(31686)),o=n(15954),i=u(n(75949)),a=u(n(27629));function u(e){return e&&e.__esModule?e:{"default":e}}},2002:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t,n=e.reference,u=e.element,c=e.placement,s=c?(0,r["default"])(c):null,l=c?(0,o["default"])(c):null,f=n.x+n.width/2-u.width/2,d=n.y+n.height/2-u.height/2;switch(s){case a.top:t={x:f,y:n.y-u.height};break;case a.bottom:t={x:f,y:n.y+n.height};break;case a.right:t={x:n.x+n.width,y:d};break;case a.left:t={x:n.x-u.width,y:d};break;default:t={x:n.x,y:n.y}}var p=s?(0,i["default"])(s):null;if(null!=p){var h="y"===p?"height":"width";switch(l){case a.start:t[p]=t[p]-(n[h]/2-u[h]/2);break;case a.end:t[p]=t[p]+(n[h]/2-u[h]/2)}}return t};var r=u(n(27629)),o=u(n(31686)),i=u(n(78772)),a=n(15954);function u(e){return e&&e.__esModule?e:{"default":e}}},27672:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t;return function(){return t||(t=new Promise((function(n){Promise.resolve().then((function(){t=undefined,n(e())}))}))),t}}},75949:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e,t){void 0===t&&(t={});var n=t,d=n.placement,p=void 0===d?e.placement:d,h=n.boundary,v=void 0===h?c.clippingParents:h,m=n.rootBoundary,g=void 0===m?c.viewport:m,y=n.elementContext,b=void 0===y?c.popper:y,w=n.altBoundary,_=void 0!==w&&w,x=n.padding,E=void 0===x?0:x,C=(0,l["default"])("number"!=typeof E?E:(0,f["default"])(E,c.basePlacements)),N=b===c.popper?c.reference:c.popper,S=e.rects.popper,O=e.elements[_?N:b],k=(0,r["default"])((0,s.isElement)(O)?O:O.contextElement||(0,o["default"])(e.elements.popper),v,g),M=(0,i["default"])(e.elements.reference),T=(0,a["default"])({reference:M,element:S,strategy:"absolute",placement:p}),A=(0,u["default"])(Object.assign({},S,T)),I=b===c.popper?A:M,L={top:k.top-I.top+C.top,bottom:I.bottom-k.bottom+C.bottom,left:k.left-I.left+C.left,right:I.right-k.right+C.right},P=e.modifiersData.offset;if(b===c.popper&&P){var V=P[p];Object.keys(L).forEach((function(e){var t=[c.right,c.bottom].indexOf(e)>=0?1:-1,n=[c.top,c.bottom].indexOf(e)>=0?"y":"x";L[e]+=V[n]*t}))}return L};var r=d(n(65647)),o=d(n(25890)),i=d(n(11100)),a=d(n(2002)),u=d(n(73060)),c=n(15954),s=n(79388),l=d(n(11277)),f=d(n(45674));function d(e){return e&&e.__esModule?e:{"default":e}}},45674:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}},80885:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=0?"x":"y"}},31477:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/left|right|bottom|top/g,(function(e){return n[e]}))};var n={left:"right",right:"left",bottom:"top",top:"bottom"}},44214:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.replace(/start|end/g,(function(e){return n[e]}))};var n={start:"end",end:"start"}},31686:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return e.split("-")[1]}},36291:function(e,t){"use strict";t.__esModule=!0,t.round=t.min=t.max=void 0;var n=Math.max;t.max=n;var r=Math.min;t.min=r;var o=Math.round;t.round=o},54220:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){var t=e.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}),{});return Object.keys(t).map((function(e){return t[e]}))}},11277:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},(0,o["default"])(),e)};var r,o=(r=n(22710))&&r.__esModule?r:{"default":r}},69282:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){var t=function(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}(e);return r.modifierPhases.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])};var r=n(15954)},73060:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}},12459:function(e,t){"use strict";t.__esModule=!0,t["default"]=function(e,t){var n=new Set;return e.filter((function(e){var r=t(e);if(!n.has(r))return n.add(r),!0}))}},30752:function(e,t,n){"use strict";t.__esModule=!0,t["default"]=function(e){e.forEach((function(t){[].concat(Object.keys(t),i).filter((function(e,t,n){return n.indexOf(e)===t})).forEach((function(n){switch(n){case"name":t.name;break;case"enabled":t.enabled;break;case"phase":o.modifierPhases.indexOf(t.phase);break;case"fn":t.fn;break;case"effect":null!=t.effect&&t.effect;break;case"requires":null!=t.requires&&Array.isArray(t.requires);break;case"requiresIfExists":Array.isArray(t.requiresIfExists)}t.requires&&t.requires.forEach((function(t){e.find((function(e){return e.name===t}))}))}))}))};(r=n(80885))&&r.__esModule;var r,o=n(15954);var i=["name","enabled","phase","fn","effect","requires","options"]},54444:function(e,t,n){"use strict";t.__esModule=!0,t.within=o,t.withinMaxClamp=function(e,t,n){var r=o(e,t,n);return r>n?n:r};var r=n(36291);function o(e,t,n){return(0,r.max)(e,(0,r.min)(t,n))}},34963:function(e,t,n){"use strict";var r=n(78427),o=n(39580),i=n(43553),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a function")}},57564:function(e,t,n){"use strict";var r=n(78427),o=n(8623),i=n(43553),a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not a constructor")}},46509:function(e,t,n){"use strict";var r=n(78427),o=n(39580),i=r.String,a=r.TypeError;e.exports=function(e){if("object"==typeof e||o(e))return e;throw a("Can't set "+i(e)+" as a prototype")}},89190:function(e,t,n){"use strict";var r=n(16417),o=n(79751),i=n(45988),a=r("unscopables"),u=Array.prototype;u[a]==undefined&&i.f(u,a,{configurable:!0,value:o(null)}),e.exports=function(e){u[a][e]=!0}},56405:function(e,t,n){"use strict";var r=n(82257).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},4:function(e,t,n){"use strict";var r=n(78427),o=n(61170),i=r.TypeError;e.exports=function(e,t){if(o(t,e))return e;throw i("Incorrect invocation")}},66970:function(e,t,n){"use strict";var r=n(78427),o=n(7174),i=r.String,a=r.TypeError;e.exports=function(e){if(o(e))return e;throw a(i(e)+" is not an object")}},70047:function(e){"use strict";e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},67603:function(e,t,n){"use strict";var r=n(43831);e.exports=r((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},39187:function(e,t,n){"use strict";var r,o,i,a=n(70047),u=n(35843),c=n(78427),s=n(39580),l=n(7174),f=n(83761),d=n(99310),p=n(43553),h=n(60163),v=n(52929),m=n(45988).f,g=n(61170),y=n(93577),b=n(87421),w=n(16417),_=n(73638),x=c.Int8Array,E=x&&x.prototype,C=c.Uint8ClampedArray,N=C&&C.prototype,S=x&&y(x),O=E&&y(E),k=Object.prototype,M=c.TypeError,T=w("toStringTag"),A=_("TYPED_ARRAY_TAG"),I=_("TYPED_ARRAY_CONSTRUCTOR"),L=a&&!!b&&"Opera"!==d(c.opera),P=!1,V={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},j={BigInt64Array:8,BigUint64Array:8},B=function(e){if(!l(e))return!1;var t=d(e);return"DataView"===t||f(V,t)||f(j,t)},R=function(e){if(!l(e))return!1;var t=d(e);return f(V,t)||f(j,t)};for(r in V)(i=(o=c[r])&&o.prototype)?h(i,I,o):L=!1;for(r in j)(i=(o=c[r])&&o.prototype)&&h(i,I,o);if((!L||!s(S)||S===Function.prototype)&&(S=function(){throw M("Incorrect invocation")},L))for(r in V)c[r]&&b(c[r],S);if((!L||!O||O===k)&&(O=S.prototype,L))for(r in V)c[r]&&b(c[r].prototype,O);if(L&&y(N)!==O&&b(N,O),u&&!f(O,T))for(r in P=!0,m(O,T,{get:function(){return l(this)?this[A]:undefined}}),V)c[r]&&h(c[r],A,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:L,TYPED_ARRAY_CONSTRUCTOR:I,TYPED_ARRAY_TAG:P&&A,aTypedArray:function(e){if(R(e))return e;throw M("Target is not a typed array")},aTypedArrayConstructor:function(e){if(s(e)&&(!b||g(S,e)))return e;throw M(p(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n,r){if(u){if(n)for(var o in V){var i=c[o];if(i&&f(i.prototype,e))try{delete i.prototype[e]}catch(a){try{i.prototype[e]=t}catch(s){}}}O[e]&&!n||v(O,e,n?t:L&&E[e]||t,r)}},exportTypedArrayStaticMethod:function(e,t,n){var r,o;if(u){if(b){if(n)for(r in V)if((o=c[r])&&f(o,e))try{delete o[e]}catch(i){}if(S[e]&&!n)return;try{return v(S,e,n?t:L&&S[e]||t)}catch(i){}}for(r in V)!(o=c[r])||o[e]&&!n||v(o,e,t)}},isView:B,isTypedArray:R,TypedArray:S,TypedArrayPrototype:O}},92215:function(e,t,n){"use strict";var r=n(78427),o=n(36500),i=n(35843),a=n(70047),u=n(53696),c=n(60163),s=n(79677),l=n(43831),f=n(4),d=n(33569),p=n(7291),h=n(42226),v=n(15808),m=n(93577),g=n(87421),y=n(3547).f,b=n(45988).f,w=n(56272),_=n(43902),x=n(52302),E=n(52576),C=u.PROPER,N=u.CONFIGURABLE,S=E.get,O=E.set,k="ArrayBuffer",M="DataView",T="Wrong index",A=r.ArrayBuffer,I=A,L=I&&I.prototype,P=r.DataView,V=P&&P.prototype,j=Object.prototype,B=r.Array,R=r.RangeError,D=o(w),F=o([].reverse),K=v.pack,Y=v.unpack,z=function(e){return[255&e]},U=function(e){return[255&e,e>>8&255]},H=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},W=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},G=function(e){return K(e,23,4)},$=function(e){return K(e,52,8)},q=function(e,t){b(e.prototype,t,{get:function(){return S(this)[t]}})},X=function(e,t,n,r){var o=h(n),i=S(e);if(o+t>i.byteLength)throw R(T);var a=S(i.buffer).bytes,u=o+i.byteOffset,c=_(a,u,u+t);return r?c:F(c)},Z=function(e,t,n,r,o,i){var a=h(n),u=S(e);if(a+t>u.byteLength)throw R(T);for(var c=S(u.buffer).bytes,s=a+u.byteOffset,l=r(+o),f=0;fte;)(J=ee[te++])in I||c(I,J,A[J]);L.constructor=I}g&&m(V)!==j&&g(V,j);var ne=new P(new I(2)),re=o(V.setInt8);ne.setInt8(0,2147483648),ne.setInt8(1,2147483649),!ne.getInt8(0)&&ne.getInt8(1)||s(V,{setInt8:function(e,t){re(this,e,t<<24>>24)},setUint8:function(e,t){re(this,e,t<<24>>24)}},{unsafe:!0})}else L=(I=function(e){f(this,L);var t=h(e);O(this,{bytes:D(B(t),0),byteLength:t}),i||(this.byteLength=t)}).prototype,V=(P=function(e,t,n){f(this,V),f(e,L);var r=S(e).byteLength,o=d(t);if(o<0||o>r)throw R("Wrong offset");if(o+(n=n===undefined?r-o:p(n))>r)throw R("Wrong length");O(this,{buffer:e,byteLength:n,byteOffset:o}),i||(this.buffer=e,this.byteLength=n,this.byteOffset=o)}).prototype,i&&(q(I,"byteLength"),q(P,"buffer"),q(P,"byteLength"),q(P,"byteOffset")),s(V,{getInt8:function(e){return X(this,1,e)[0]<<24>>24},getUint8:function(e){return X(this,1,e)[0]},getInt16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=X(this,2,e,arguments.length>1?arguments[1]:undefined);return t[1]<<8|t[0]},getInt32:function(e){return W(X(this,4,e,arguments.length>1?arguments[1]:undefined))},getUint32:function(e){return W(X(this,4,e,arguments.length>1?arguments[1]:undefined))>>>0},getFloat32:function(e){return Y(X(this,4,e,arguments.length>1?arguments[1]:undefined),23)},getFloat64:function(e){return Y(X(this,8,e,arguments.length>1?arguments[1]:undefined),52)},setInt8:function(e,t){Z(this,1,e,z,t)},setUint8:function(e,t){Z(this,1,e,z,t)},setInt16:function(e,t){Z(this,2,e,U,t,arguments.length>2?arguments[2]:undefined)},setUint16:function(e,t){Z(this,2,e,U,t,arguments.length>2?arguments[2]:undefined)},setInt32:function(e,t){Z(this,4,e,H,t,arguments.length>2?arguments[2]:undefined)},setUint32:function(e,t){Z(this,4,e,H,t,arguments.length>2?arguments[2]:undefined)},setFloat32:function(e,t){Z(this,4,e,G,t,arguments.length>2?arguments[2]:undefined)},setFloat64:function(e,t){Z(this,8,e,$,t,arguments.length>2?arguments[2]:undefined)}});x(I,k),x(P,M),e.exports={ArrayBuffer:I,DataView:P}},18770:function(e,t,n){"use strict";var r=n(60855),o=n(55371),i=n(47558),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),u=i(n),c=o(e,u),s=o(t,u),l=arguments.length>2?arguments[2]:undefined,f=a((l===undefined?u:o(l,u))-s,u-c),d=1;for(s0;)s in n?n[c]=n[s]:delete n[c],c+=d,s+=d;return n}},56272:function(e,t,n){"use strict";var r=n(60855),o=n(55371),i=n(47558);e.exports=function(e){for(var t=r(this),n=i(t),a=arguments.length,u=o(a>1?arguments[1]:undefined,n),c=a>2?arguments[2]:undefined,s=c===undefined?n:o(c,n);s>u;)t[u++]=e;return t}},19465:function(e,t,n){"use strict";var r=n(73266).forEach,o=n(66681)("forEach");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:undefined)}},45331:function(e,t,n){"use strict";var r=n(47558);e.exports=function(e,t){for(var n=0,o=r(t),i=new e(o);o>n;)i[n]=t[n++];return i}},65422:function(e,t,n){"use strict";var r=n(78427),o=n(98045),i=n(10878),a=n(60855),u=n(45910),c=n(81094),s=n(8623),l=n(47558),f=n(73746),d=n(66570),p=n(31491),h=r.Array;e.exports=function(e){var t=a(e),n=s(this),r=arguments.length,v=r>1?arguments[1]:undefined,m=v!==undefined;m&&(v=o(v,r>2?arguments[2]:undefined));var g,y,b,w,_,x,E=p(t),C=0;if(!E||this==h&&c(E))for(g=l(t),y=n?new this(g):h(g);g>C;C++)x=m?v(t[C],C):t[C],f(y,C,x);else for(_=(w=d(t,E)).next,y=n?new this:[];!(b=i(_,w)).done;C++)x=m?u(w,v,[b.value,C],!0):b.value,f(y,C,x);return y.length=C,y}},31170:function(e,t,n){"use strict";var r=n(10569),o=n(55371),i=n(47558),a=function(e){return function(t,n,a){var u,c=r(t),s=i(c),l=o(a,s);if(e&&n!=n){for(;s>l;)if((u=c[l++])!=u)return!0}else for(;s>l;l++)if((e||l in c)&&c[l]===n)return e||l||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},73266:function(e,t,n){"use strict";var r=n(98045),o=n(36500),i=n(66122),a=n(60855),u=n(47558),c=n(55886),s=o([].push),l=function(e){var t=1==e,n=2==e,o=3==e,l=4==e,f=6==e,d=7==e,p=5==e||f;return function(h,v,m,g){for(var y,b,w=a(h),_=i(w),x=r(v,m),E=u(_),C=0,N=g||c,S=t?N(h,E):n||d?N(h,0):undefined;E>C;C++)if((p||C in _)&&(b=x(y=_[C],C,w),e))if(t)S[C]=b;else if(b)switch(e){case 3:return!0;case 5:return y;case 6:return C;case 2:s(S,y)}else switch(e){case 4:return!1;case 7:s(S,y)}return f?-1:o||l?l:S}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterReject:l(7)}},63277:function(e,t,n){"use strict";var r=n(40353),o=n(10569),i=n(33569),a=n(47558),u=n(66681),c=Math.min,s=[].lastIndexOf,l=!!s&&1/[1].lastIndexOf(1,-0)<0,f=u("lastIndexOf"),d=l||!f;e.exports=d?function(e){if(l)return r(s,this,arguments)||0;var t=o(this),n=a(t),u=n-1;for(arguments.length>1&&(u=c(u,i(arguments[1]))),u<0&&(u=n+u);u>=0;u--)if(u in t&&t[u]===e)return u||0;return-1}:s},67030:function(e,t,n){"use strict";var r=n(43831),o=n(16417),i=n(28499),a=o("species");e.exports=function(e){return i>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},66681:function(e,t,n){"use strict";var r=n(43831);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},4917:function(e,t,n){"use strict";var r=n(78427),o=n(34963),i=n(60855),a=n(66122),u=n(47558),c=r.TypeError,s=function(e){return function(t,n,r,s){o(n);var l=i(t),f=a(l),d=u(l),p=e?d-1:0,h=e?-1:1;if(r<2)for(;;){if(p in f){s=f[p],p+=h;break}if(p+=h,e?p<0:d<=p)throw c("Reduce of empty array with no initial value")}for(;e?p>=0:d>p;p+=h)p in f&&(s=n(s,f[p],p,l));return s}};e.exports={left:s(!1),right:s(!0)}},43902:function(e,t,n){"use strict";var r=n(78427),o=n(55371),i=n(47558),a=n(73746),u=r.Array,c=Math.max;e.exports=function(e,t,n){for(var r=i(e),s=o(t,r),l=o(n===undefined?r:n,r),f=u(c(l-s,0)),d=0;s0;)e[r]=e[--r];r!==i++&&(e[r]=n)}return e},a=function(e,t,n,r){for(var o=t.length,i=n.length,a=0,u=0;a1?arguments[1]:undefined);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!y(this,e)}}),i(p,n?{get:function(e){var t=y(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),f&&r(p,"size",{get:function(){return m(this).size}}),l},setStrong:function(e,t,n){var r=t+" Iterator",o=v(t),i=v(r);s(e,t,(function(e,t){h(this,{type:r,target:e,state:o(e),kind:t,last:undefined})}),(function(){for(var e=i(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?"keys"==t?{value:n.key,done:!1}:"values"==t?{value:n.value,done:!1}:{value:[n.key,n.value],done:!1}:(e.target=undefined,{value:undefined,done:!0})}),n?"entries":"values",!n,!0),l(t)}}},83196:function(e,t,n){"use strict";var r=n(36500),o=n(79677),i=n(54915).getWeakData,a=n(66970),u=n(7174),c=n(4),s=n(98470),l=n(73266),f=n(83761),d=n(52576),p=d.set,h=d.getterFor,v=l.find,m=l.findIndex,g=r([].splice),y=0,b=function(e){return e.frozen||(e.frozen=new w)},w=function(){this.entries=[]},_=function(e,t){return v(e.entries,(function(e){return e[0]===t}))};w.prototype={get:function(e){var t=_(this,e);if(t)return t[1]},has:function(e){return!!_(this,e)},set:function(e,t){var n=_(this,e);n?n[1]=t:this.entries.push([e,t])},"delete":function(e){var t=m(this.entries,(function(t){return t[0]===e}));return~t&&g(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var l=e((function(e,o){c(e,d),p(e,{type:t,id:y++,frozen:undefined}),o!=undefined&&s(o,e[r],{that:e,AS_ENTRIES:n})})),d=l.prototype,v=h(t),m=function(e,t,n){var r=v(e),o=i(a(t),!0);return!0===o?b(r).set(t,n):o[r.id]=n,e};return o(d,{"delete":function(e){var t=v(this);if(!u(e))return!1;var n=i(e);return!0===n?b(t)["delete"](e):n&&f(n,t.id)&&delete n[t.id]},has:function(e){var t=v(this);if(!u(e))return!1;var n=i(e);return!0===n?b(t).has(e):n&&f(n,t.id)}}),o(d,n?{get:function(e){var t=v(this);if(u(e)){var n=i(e);return!0===n?b(t).get(e):n?n[t.id]:undefined}},set:function(e,t){return m(this,e,t)}}:{add:function(e){return m(this,e,!0)}}),l}}},43497:function(e,t,n){"use strict";var r=n(76586),o=n(78427),i=n(36500),a=n(89753),u=n(52929),c=n(54915),s=n(98470),l=n(4),f=n(39580),d=n(7174),p=n(43831),h=n(56980),v=n(52302),m=n(58803);e.exports=function(e,t,n){var g=-1!==e.indexOf("Map"),y=-1!==e.indexOf("Weak"),b=g?"set":"add",w=o[e],_=w&&w.prototype,x=w,E={},C=function(e){var t=i(_[e]);u(_,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(y&&!d(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return y&&!d(e)?undefined:t(this,0===e?0:e)}:"has"==e?function(e){return!(y&&!d(e))&&t(this,0===e?0:e)}:function(e,n){return t(this,0===e?0:e,n),this})};if(a(e,!f(w)||!(y||_.forEach&&!p((function(){(new w).entries().next()})))))x=n.getConstructor(t,e,g,b),c.enable();else if(a(e,!0)){var N=new x,S=N[b](y?{}:-0,1)!=N,O=p((function(){N.has(1)})),k=h((function(e){new w(e)})),M=!y&&p((function(){for(var e=new w,t=5;t--;)e[b](t,t);return!e.has(-0)}));k||((x=t((function(e,t){l(e,_);var n=m(new w,e,x);return t!=undefined&&s(t,n[b],{that:n,AS_ENTRIES:g}),n}))).prototype=_,_.constructor=x),(O||M)&&(C("delete"),C("has"),g&&C("get")),(M||S)&&C(b),y&&_.clear&&delete _.clear}return E[e]=x,r({global:!0,constructor:!0,forced:x!=w},E),v(x,e),y||n.setStrong(x,e,g),x}},35311:function(e,t,n){"use strict";var r=n(83761),o=n(63790),i=n(16042),a=n(45988);e.exports=function(e,t,n){for(var u=o(t),c=a.f,s=i.f,l=0;l"+c+""}},70259:function(e,t,n){"use strict";var r=n(41903).IteratorPrototype,o=n(79751),i=n(10990),a=n(52302),u=n(91673),c=function(){return this};e.exports=function(e,t,n,s){var l=t+" Iterator";return e.prototype=o(r,{next:i(+!s,n)}),a(e,l,!1,!0),u[l]=c,e}},60163:function(e,t,n){"use strict";var r=n(35843),o=n(45988),i=n(10990);e.exports=r?function(e,t,n){return o.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},10990:function(e){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},73746:function(e,t,n){"use strict";var r=n(40514),o=n(45988),i=n(10990);e.exports=function(e,t,n){var a=r(t);a in e?o.f(e,a,i(0,n)):e[a]=n}},68191:function(e,t,n){"use strict";var r=n(78427),o=n(36500),i=n(43831),a=n(83639).start,u=r.RangeError,c=Math.abs,s=Date.prototype,l=s.toISOString,f=o(s.getTime),d=o(s.getUTCDate),p=o(s.getUTCFullYear),h=o(s.getUTCHours),v=o(s.getUTCMilliseconds),m=o(s.getUTCMinutes),g=o(s.getUTCMonth),y=o(s.getUTCSeconds);e.exports=i((function(){return"0385-07-25T07:06:39.999Z"!=l.call(new Date(-50000000000001))}))||!i((function(){l.call(new Date(NaN))}))?function(){if(!isFinite(f(this)))throw u("Invalid time value");var e=this,t=p(e),n=v(e),r=t<0?"-":t>9999?"+":"";return r+a(c(t),r?6:4,0)+"-"+a(g(e)+1,2,0)+"-"+a(d(e),2,0)+"T"+a(h(e),2,0)+":"+a(m(e),2,0)+":"+a(y(e),2,0)+"."+a(n,3,0)+"Z"}:l},49926:function(e,t,n){"use strict";var r=n(78427),o=n(66970),i=n(51148),a=r.TypeError;e.exports=function(e){if(o(this),"string"===e||"default"===e)e="string";else if("number"!==e)throw a("Incorrect hint");return i(this,e)}},26790:function(e,t,n){"use strict";var r=n(94668),o=n(45988);e.exports=function(e,t,n){return n.get&&r(n.get,t,{getter:!0}),n.set&&r(n.set,t,{setter:!0}),o.f(e,t,n)}},52929:function(e,t,n){"use strict";var r=n(78427),o=n(39580),i=n(60163),a=n(94668),u=n(95749);e.exports=function(e,t,n,c){var s=!!c&&!!c.unsafe,l=!!c&&!!c.enumerable,f=!!c&&!!c.noTargetGet,d=c&&c.name!==undefined?c.name:t;return o(n)&&a(n,d,c),e===r?(l?e[t]=n:u(t,n),e):(s?!f&&e[t]&&(l=!0):delete e[t],l?e[t]=n:i(e,t,n),e)}},79677:function(e,t,n){"use strict";var r=n(52929);e.exports=function(e,t,n){for(var o in t)r(e,o,t[o],n);return e}},89853:function(e,t,n){"use strict";var r=n(76586),o=n(10878),i=n(45026),a=n(53696),u=n(39580),c=n(70259),s=n(93577),l=n(87421),f=n(52302),d=n(60163),p=n(52929),h=n(16417),v=n(91673),m=n(41903),g=a.PROPER,y=a.CONFIGURABLE,b=m.IteratorPrototype,w=m.BUGGY_SAFARI_ITERATORS,_=h("iterator"),x="keys",E="values",C="entries",N=function(){return this};e.exports=function(e,t,n,a,h,m,S){c(n,t,a);var O,k,M,T=function(e){if(e===h&&V)return V;if(!w&&e in L)return L[e];switch(e){case x:case E:case C:return function(){return new n(this,e)}}return function(){return new n(this)}},A=t+" Iterator",I=!1,L=e.prototype,P=L[_]||L["@@iterator"]||h&&L[h],V=!w&&P||T(h),j="Array"==t&&L.entries||P;if(j&&(O=s(j.call(new e)))!==Object.prototype&&O.next&&(i||s(O)===b||(l?l(O,b):u(O[_])||p(O,_,N)),f(O,A,!0,!0),i&&(v[A]=N)),g&&h==E&&P&&P.name!==E&&(!i&&y?d(L,"name",E):(I=!0,V=function(){return o(P,this)})),h)if(k={values:T(E),keys:m?V:T(x),entries:T(C)},S)for(M in k)(w||I||!(M in L))&&p(L,M,k[M]);else r({target:t,proto:!0,forced:w||I},k);return i&&!S||L[_]===V||p(L,_,V,{name:h}),v[t]=V,k}},39719:function(e,t,n){"use strict";var r=n(4763),o=n(83761),i=n(21888),a=n(45988).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||a(t,e,{value:i.f(e)})}},35843:function(e,t,n){"use strict";var r=n(43831);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},59289:function(e,t,n){"use strict";var r=n(78427),o=n(7174),i=r.document,a=o(i)&&o(i.createElement);e.exports=function(e){return a?i.createElement(e):{}}},10196:function(e,t,n){"use strict";var r=n(91528).match(/firefox\/(\d+)/i);e.exports=!!r&&+r[1]},40109:function(e){"use strict";e.exports="object"==typeof window&&"object"!=typeof Deno},42997:function(e,t,n){"use strict";var r=n(91528);e.exports=/MSIE|Trident/.test(r)},12739:function(e,t,n){"use strict";var r=n(91528),o=n(78427);e.exports=/ipad|iphone|ipod/i.test(r)&&o.Pebble!==undefined},88249:function(e,t,n){"use strict";var r=n(91528);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},23526:function(e,t,n){"use strict";var r=n(3775),o=n(78427);e.exports="process"==r(o.process)},33901:function(e,t,n){"use strict";var r=n(91528);e.exports=/web0s(?!.*chrome)/i.test(r)},91528:function(e,t,n){"use strict";var r=n(4069);e.exports=r("navigator","userAgent")||""},28499:function(e,t,n){"use strict";var r,o,i=n(78427),a=n(91528),u=i.process,c=i.Deno,s=u&&u.versions||c&&c.version,l=s&&s.v8;l&&(o=(r=l.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(o=+r[1]),e.exports=o},92529:function(e,t,n){"use strict";var r=n(91528).match(/AppleWebKit\/(\d+)\./);e.exports=!!r&&+r[1]},46458:function(e){"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},19372:function(e,t,n){"use strict";var r=n(43831),o=n(10990);e.exports=!r((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",o(1,7)),7!==e.stack)}))},76586:function(e,t,n){"use strict";var r=n(78427),o=n(16042).f,i=n(60163),a=n(52929),u=n(95749),c=n(35311),s=n(89753);e.exports=function(e,t){var n,l,f,d,p,h=e.target,v=e.global,m=e.stat;if(n=v?r:m?r[h]||u(h,{}):(r[h]||{}).prototype)for(l in t){if(d=t[l],f=e.noTargetGet?(p=o(n,l))&&p.value:n[l],!s(v?l:h+(m?".":"#")+l,e.forced)&&f!==undefined){if(typeof d==typeof f)continue;c(d,f)}(e.sham||f&&f.sham)&&i(d,"sham",!0),a(n,l,d,e)}}},43831:function(e){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},65284:function(e,t,n){"use strict";n(79367);var r=n(36500),o=n(52929),i=n(11642),a=n(43831),u=n(16417),c=n(60163),s=u("species"),l=RegExp.prototype;e.exports=function(e,t,n,f){var d=u(e),p=!a((function(){var t={};return t[d]=function(){return 7},7!=""[e](t)})),h=p&&!a((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[d]=/./[d]),n.exec=function(){return t=!0,null},n[d](""),!t}));if(!p||!h||n){var v=r(/./[d]),m=t(d,""[e],(function(e,t,n,o,a){var u=r(e),c=t.exec;return c===i||c===l.exec?p&&!a?{done:!0,value:v(t,n,o)}:{done:!0,value:u(n,t,o)}:{done:!1}}));o(String.prototype,e,m[0]),o(l,d,m[1])}f&&c(l[d],"sham",!0)}},98600:function(e,t,n){"use strict";var r=n(78427),o=n(86905),i=n(47558),a=n(98045),u=r.TypeError;e.exports=function c(e,t,n,r,s,l,f,d){for(var p,h=s,v=0,m=!!f&&a(f,d);v0&&o(p))h=c(e,t,p,i(p),h,l-1)-1;else{if(h>=9007199254740991)throw u("Exceed the acceptable array length");e[h]=p}h++}v++}return h}},37726:function(e,t,n){"use strict";var r=n(43831);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},40353:function(e,t,n){"use strict";var r=n(53027),o=Function.prototype,i=o.apply,a=o.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?a.bind(i):function(){return a.apply(i,arguments)})},98045:function(e,t,n){"use strict";var r=n(36500),o=n(34963),i=n(53027),a=r(r.bind);e.exports=function(e,t){return o(e),t===undefined?e:i?a(e,t):function(){return e.apply(t,arguments)}}},53027:function(e,t,n){"use strict";var r=n(43831);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},19012:function(e,t,n){"use strict";var r=n(78427),o=n(36500),i=n(34963),a=n(7174),u=n(83761),c=n(44684),s=n(53027),l=r.Function,f=o([].concat),d=o([].join),p={},h=function(e,t,n){if(!u(p,t)){for(var r=[],o=0;o]*>)/g,l=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,f,d){var p=n+e.length,h=r.length,v=l;return f!==undefined&&(f=o(f),v=s),u(d,v,(function(o,u){var s;switch(a(u,0)){case"$":return"$";case"&":return e;case"`":return c(t,0,n);case"'":return c(t,p);case"<":s=f[c(u,1,-1)];break;default:var l=+u;if(0===l)return o;if(l>h){var d=i(l/10);return 0===d?o:d<=h?r[d-1]===undefined?a(u,1):r[d-1]+a(u,1):o}s=r[l-1]}return s===undefined?"":s}))}},78427:function(e,t,n){"use strict";var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},83761:function(e,t,n){"use strict";var r=n(36500),o=n(60855),i=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(o(e),t)}},39833:function(e){"use strict";e.exports={}},57298:function(e,t,n){"use strict";var r=n(78427);e.exports=function(e,t){var n=r.console;n&&n.error&&(1==arguments.length?n.error(e):n.error(e,t))}},83099:function(e,t,n){"use strict";var r=n(4069);e.exports=r("document","documentElement")},77103:function(e,t,n){"use strict";var r=n(35843),o=n(43831),i=n(59289);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},15808:function(e,t,n){"use strict";var r=n(78427).Array,o=Math.abs,i=Math.pow,a=Math.floor,u=Math.log,c=Math.LN2;e.exports={pack:function(e,t,n){var s,l,f,d=r(n),p=8*n-t-1,h=(1<>1,m=23===t?i(2,-24)-i(2,-77):0,g=e<0||0===e&&1/e<0?1:0,y=0;for((e=o(e))!=e||e===Infinity?(l=e!=e?1:0,s=h):(s=a(u(e)/c),e*(f=i(2,-s))<1&&(s--,f*=2),(e+=s+v>=1?m/f:m*i(2,1-v))*f>=2&&(s++,f/=2),s+v>=h?(l=0,s=h):s+v>=1?(l=(e*f-1)*i(2,t),s+=v):(l=e*i(2,v-1)*i(2,t),s=0));t>=8;)d[y++]=255&l,l/=256,t-=8;for(s=s<0;)d[y++]=255&s,s/=256,p-=8;return d[--y]|=128*g,d},unpack:function(e,t){var n,r=e.length,o=8*r-t-1,a=(1<>1,c=o-7,s=r-1,l=e[s--],f=127&l;for(l>>=7;c>0;)f=256*f+e[s--],c-=8;for(n=f&(1<<-c)-1,f>>=-c,c+=t;c>0;)n=256*n+e[s--],c-=8;if(0===f)f=1-u;else{if(f===a)return n?NaN:l?-Infinity:Infinity;n+=i(2,t),f-=u}return(l?-1:1)*n*i(2,f-t)}}},66122:function(e,t,n){"use strict";var r=n(78427),o=n(36500),i=n(43831),a=n(3775),u=r.Object,c=o("".split);e.exports=i((function(){return!u("z").propertyIsEnumerable(0)}))?function(e){return"String"==a(e)?c(e,""):u(e)}:u},58803:function(e,t,n){"use strict";var r=n(39580),o=n(7174),i=n(87421);e.exports=function(e,t,n){var a,u;return i&&r(a=t.constructor)&&a!==n&&o(u=a.prototype)&&u!==n.prototype&&i(e,u),e}},91368:function(e,t,n){"use strict";var r=n(36500),o=n(39580),i=n(70836),a=r(Function.toString);o(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),e.exports=i.inspectSource},64011:function(e,t,n){"use strict";var r=n(7174),o=n(60163);e.exports=function(e,t){r(t)&&"cause"in t&&o(e,"cause",t.cause)}},54915:function(e,t,n){"use strict";var r=n(76586),o=n(36500),i=n(39833),a=n(7174),u=n(83761),c=n(45988).f,s=n(3547),l=n(61726),f=n(50566),d=n(73638),p=n(37726),h=!1,v=d("meta"),m=0,g=function(e){c(e,v,{value:{objectID:"O"+m++,weakData:{}}})},y=e.exports={enable:function(){y.enable=function(){},h=!0;var e=s.f,t=o([].splice),n={};n[v]=1,e(n).length&&(s.f=function(n){for(var r=e(n),o=0,i=r.length;oy;y++)if((w=M(e[y]))&&l(m,w))return w;return new v(!1)}r=f(e,g)}for(_=r.next;!(x=i(_,r)).done;){try{w=M(x.value)}catch(T){p(r,"throw",T)}if("object"==typeof w&&w&&l(m,w))return w}return new v(!1)}},14099:function(e,t,n){"use strict";var r=n(10878),o=n(66970),i=n(23375);e.exports=function(e,t,n){var a,u;o(e);try{if(!(a=i(e,"return"))){if("throw"===t)throw n;return n}a=r(a,e)}catch(c){u=!0,a=c}if("throw"===t)throw n;if(u)throw a;return o(a),n}},41903:function(e,t,n){"use strict";var r,o,i,a=n(43831),u=n(39580),c=n(79751),s=n(93577),l=n(52929),f=n(16417),d=n(45026),p=f("iterator"),h=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(r=o):h=!0),r==undefined||a((function(){var e={};return r[p].call(e)!==e}))?r={}:d&&(r=c(r)),u(r[p])||l(r,p,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},91673:function(e){"use strict";e.exports={}},47558:function(e,t,n){"use strict";var r=n(7291);e.exports=function(e){return r(e.length)}},94668:function(e,t,n){"use strict";var r=n(43831),o=n(39580),i=n(83761),a=n(35843),u=n(53696).CONFIGURABLE,c=n(91368),s=n(52576),l=s.enforce,f=s.get,d=Object.defineProperty,p=a&&!r((function(){return 8!==d((function(){}),"length",{value:8}).length})),h=String(String).split("String"),v=e.exports=function(e,t,n){if("Symbol("===String(t).slice(0,7)&&(t="["+String(t).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!i(e,"name")||u&&e.name!==t)&&d(e,"name",{value:t,configurable:!0}),p&&n&&i(n,"arity")&&e.length!==n.arity&&d(e,"length",{value:n.arity}),n&&i(n,"constructor")&&n.constructor){if(a)try{d(e,"prototype",{writable:!1})}catch(o){}}else e.prototype=undefined;var r=l(e);return i(r,"source")||(r.source=h.join("string"==typeof t?t:"")),e};Function.prototype.toString=v((function(){return o(this)&&f(this).source||c(this)}),"toString")},34636:function(e){"use strict";var t=Math.expm1,n=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!=t(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:n(e)-1}:t},42634:function(e,t,n){"use strict";var r=n(28213),o=Math.abs,i=Math.pow,a=i(2,-52),u=i(2,-23),c=i(2,127)*(2-u),s=i(2,-126);e.exports=Math.fround||function(e){var t,n,i=o(e),l=r(e);return ic||n!=n?l*Infinity:l*n}},99739:function(e){"use strict";var t=Math.log,n=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*n}},29295:function(e){"use strict";var t=Math.log;e.exports=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:t(1+e)}},28213:function(e){"use strict";e.exports=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},87855:function(e,t,n){"use strict";var r,o,i,a,u,c,s,l,f=n(78427),d=n(98045),p=n(16042).f,h=n(41137).set,v=n(88249),m=n(12739),g=n(33901),y=n(23526),b=f.MutationObserver||f.WebKitMutationObserver,w=f.document,_=f.process,x=f.Promise,E=p(f,"queueMicrotask"),C=E&&E.value;C||(r=function(){var e,t;for(y&&(e=_.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(n){throw o?a():i=undefined,n}}i=undefined,e&&e.enter()},v||y||g||!b||!w?!m&&x&&x.resolve?((s=x.resolve(undefined)).constructor=x,l=d(s.then,s),a=function(){l(r)}):y?a=function(){_.nextTick(r)}:(h=d(h,f),a=function(){h(r)}):(u=!0,c=w.createTextNode(""),new b(r).observe(c,{characterData:!0}),a=function(){c.data=u=!u})),e.exports=C||function(e){var t={fn:e,next:undefined};i&&(i.next=t),o||(o=t,a()),i=t}},99795:function(e,t,n){"use strict";var r=n(16409);e.exports=r&&!!Symbol["for"]&&!!Symbol.keyFor},16409:function(e,t,n){"use strict";var r=n(28499),o=n(43831);e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!String(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},41810:function(e,t,n){"use strict";var r=n(78427),o=n(39580),i=n(91368),a=r.WeakMap;e.exports=o(a)&&/native code/.test(i(a))},29469:function(e,t,n){"use strict";var r=n(34963),o=function(e){var t,n;this.promise=new e((function(e,r){if(t!==undefined||n!==undefined)throw TypeError("Bad Promise constructor");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new o(e)}},97306:function(e,t,n){"use strict";var r=n(99775);e.exports=function(e,t){return e===undefined?arguments.length<2?"":t:r(e)}},22617:function(e,t,n){"use strict";var r=n(78427),o=n(32169),i=r.TypeError;e.exports=function(e){if(o(e))throw i("The method doesn't accept regular expressions");return e}},37795:function(e,t,n){"use strict";var r=n(78427).isFinite;e.exports=Number.isFinite||function(e){return"number"==typeof e&&r(e)}},93510:function(e,t,n){"use strict";var r=n(78427),o=n(43831),i=n(36500),a=n(99775),u=n(78800).trim,c=n(44966),s=i("".charAt),l=r.parseFloat,f=r.Symbol,d=f&&f.iterator,p=1/l(c+"-0")!=-Infinity||d&&!o((function(){l(Object(d))}));e.exports=p?function(e){var t=u(a(e)),n=l(t);return 0===n&&"-"==s(t,0)?-0:n}:l},56934:function(e,t,n){"use strict";var r=n(78427),o=n(43831),i=n(36500),a=n(99775),u=n(78800).trim,c=n(44966),s=r.parseInt,l=r.Symbol,f=l&&l.iterator,d=/^[+-]?0x/i,p=i(d.exec),h=8!==s(c+"08")||22!==s(c+"0x16")||f&&!o((function(){s(Object(f))}));e.exports=h?function(e,t){var n=u(a(e));return s(n,t>>>0||(p(d,n)?16:10))}:s},69502:function(e,t,n){"use strict";var r=n(35843),o=n(36500),i=n(10878),a=n(43831),u=n(4276),c=n(56593),s=n(55706),l=n(60855),f=n(66122),d=Object.assign,p=Object.defineProperty,h=o([].concat);e.exports=!d||a((function(){if(r&&1!==d({b:1},d(p({},"a",{enumerable:!0,get:function(){p(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o="abcdefghijklmnopqrst";return e[n]=7,o.split("").forEach((function(e){t[e]=e})),7!=d({},e)[n]||u(d({},t)).join("")!=o}))?function(e,t){for(var n=l(e),o=arguments.length,a=1,d=c.f,p=s.f;o>a;)for(var v,m=f(arguments[a++]),g=d?h(u(m),d(m)):u(m),y=g.length,b=0;y>b;)v=g[b++],r&&!i(p,m,v)||(n[v]=m[v]);return n}:d},79751:function(e,t,n){"use strict";var r,o=n(66970),i=n(98457),a=n(46458),u=n(39833),c=n(83099),s=n(59289),l=n(58908),f=l("IE_PROTO"),d=function(){},p=function(e){return" + + - + + + + + - - - - +
diff --git a/tgui/yarn.lock b/tgui/yarn.lock index c970332c12..36b2553d5b 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -8623,7 +8623,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"terser@npm:^5.7.2": +"terser@npm:^5.13.1, terser@npm:^5.7.2": version: 5.13.1 resolution: "terser@npm:5.13.1" dependencies: @@ -8696,6 +8696,7 @@ resolve@^2.0.0-next.3: dependencies: core-js: ^3.22.5 regenerator-runtime: ^0.13.9 + terser: ^5.13.1 unfetch: ^4.2.0 languageName: unknown linkType: soft